criticalmass-1.0.0.orig/0002755000175000017500000000000010355431315014401 5ustar danieldanielcriticalmass-1.0.0.orig/TODO0000644000175000017500000000231310355351306015067 0ustar danieldaniel------- Todo... Maybe...(most likely not): Additional soundtracks. Menu soundtrack / in-game soundtrack ? Special Effects, Power-ups, ... keyboard config, etc. Allow zip files as resource paks Better model support (textures, animation, etc.) md2? Wrapper for tinyxml (generic xml tree traversal) LPath implementation: linear access to BezierCurve Rework Input. Tools: Level editor ------- Source cleanup... Remove/combine duplicate directory parsing (model loading, path loading, etc.) Gather constants (strings, etc.) into Constants.hpp ------- Done... Menues etc LevelPack via file StageManager needs some work Mouse smoothing Base Enemy using/based on LEnemy ModelManager PatternManager Resource file A ton of inlines don't have to be... Rework Audio Skill settings Font manager Change to use fixed timestep game logic loop Nicer menu system, runtime config Leader board Fade-in/out music Sound/music volume Show mounted weapons. Online update check + cache content + date Multiple resource packs Collision detection to use model size. Update Readme.html Nicer shield Allow vertical ship movement Add SDL supported resolutions and filter based on config Split Config menu into Audio, Video, etc. Add (Boss) level(s). criticalmass-1.0.0.orig/data/0002755000175000017500000000000010355431312015307 5ustar danieldanielcriticalmass-1.0.0.orig/data/music/0002755000175000017500000000000010355431312016427 5ustar danieldanielcriticalmass-1.0.0.orig/data/music/Readme.txt0000644000175000017500000000036307630537344020403 0ustar danieldaniellg-criti.xm "Critical: Lunar Gravity's Millennium Remake" This is a remix by Lunar Gravity of a tune called "Critical" by Burkey. See also: http://www.lunarg.com/ http://www.traxinspace.com/Music/Songs/Download.asp?SongID=22119 criticalmass-1.0.0.orig/data/music/Makefile.am0000644000175000017500000000011407630537344020473 0ustar danieldanielpkgdata_DATA = lg-criti.xm MAINTAINERCLEANFILES = Makefile.bak Makefile.in criticalmass-1.0.0.orig/data/music/Makefile.in0000644000175000017500000002267210355431312020503 0ustar danieldaniel# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = data/music DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/defines.h CONFIG_CLEAN_FILES = depcomp = am__depfiles_maybe = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; am__installdirs = "$(DESTDIR)$(pkgdatadir)" pkgdataDATA_INSTALL = $(INSTALL_DATA) DATA = $(pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ APPLE_FALSE = @APPLE_FALSE@ APPLE_TRUE = @APPLE_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_LZMA_FALSE = @USE_LZMA_FALSE@ USE_LZMA_TRUE = @USE_LZMA_TRUE@ VERSION = @VERSION@ WIN32_FALSE = @WIN32_FALSE@ WIN32_TRUE = @WIN32_TRUE@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ pkgdata_DATA = lg-criti.xm MAINTAINERCLEANFILES = Makefile.bak Makefile.in all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps data/music/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign --ignore-deps data/music/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(mkdir_p) "$(DESTDIR)$(pkgdatadir)" @list='$(pkgdata_DATA)'; for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ f=$(am__strip_dir) \ echo " $(pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \ $(pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; for p in $$list; do \ f=$(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \ rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-pkgdataDATA install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-pkgdataDATA .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-pkgdataDATA install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-info-am uninstall-pkgdataDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: criticalmass-1.0.0.orig/data/music/lg-criti.xm0000644000175000017500000503522207630537344020534 0ustar danieldanielExtended Module: "Critical" FastTracker v2.00 9 4S  !"#$%&'()3#*+,-./012 NNN0N D@ A@ P@ M@ N =Aaa=Aaa< FFN@N 0@ @ @ @ H FFNPN PN@@@@0 FFN@N 0@ @ @ @ < NNN0N @@ @ @ @ H N@N 0@@@@0 FFNPN PN@ @ @ @ < N@N 0@@@@H NNN0N @ @ @ @ 0 FFN@N 0@@@@< FFNPN PN@ @ @ @ H FFN@N 0@@@@H NNN0N @@ @ @ @ < N@N 0@ @ @ @ H FFNPN PN@@@@< N@N 0@ @ @ @ H NNN0N C@ ?@ O@ K@ aa<?aa<?: DDN@N 0@ @ @ @ F DDNPN PN@@@@0 DDN@N 0@ @ @ @ : NNN0N @@ @ @ @ F N@N 0@@@@0 DDNPN PN@ @ @ @ : N@N 0@@@@F NNN0N @ @ @ @ ADaaADaa? DDN@N 0@@@@K DDNPN PN@ @ @ @ 3 DDN@N 0H@D@T@P@? NNN0N @@ @ @ @ K N@N 0@ @ @ @ ? IINPN PN@@@@K N@N 0@ @ @ @ 3 NNN0N A@ =@ M@ I@ aa:=aa:=8 !BBN@N 0@ @ @ @ D "BBNPN PN@@@@, #BBN@N 0@ @ @ @ 8 $NNN0N @@ @ @ @ D %N@N 0@@@@, &BBNPN PN@ @ @ @ 8 'N@N 0@@@@D (NNN0N @ @ @ @ , )BBN@N 0@@@@8 *BBNPN PN@ @ @ @ D +BBN@N 0@@@@D ,NNN0N @@ @ @ @ 8 -N@N 0@ @ @ @ D .BBNPN PN@@@@8 /N@N 0@ @ @ @ D 0NNN0N ?@ <@ K@ H@ 8<aa8<aa7 1DDN@N 0@ @ @ @ C 2DDNPN PN@@@@+ 3DDN@N 0@ @ @ @ 7 4NNN0N @@ @ @ @ C 5N@N 0@@@@+ 6DDNPN PN@ @ @ @ 7 7N@N 0@@@@C 8NNN0N @ @ @ @ aa<?aa<?: 9DDN@N 0@@@@F :DDNPN PN@ @ @ @ . ;DDN@N 0C@?@O@K@: IINPN PN@@@@: ?NNN@N 0@ @ @ @ F @ NNN0N D@ A@ P@ M@ =Aaa=Aaa< AFFN@N 0@ @ @ @ H BFFNPN PN@@@@0 CFFN@N 0@ @ @ @ < DNNN0N @@ @ @ @ H EN@N 0@@@@0 FFFNPN PN@ @ @ @ < GN@N 0@@@@H HNNN0N @ @ @ @ 0 IFFN@N 0@@@@< JFFNPN PN@ @ @ @ H KFFN@N 0@@@@H LNNN0N @@ @ @ @ < MN@N 0@ @ @ @ H NFFNPN PN@@@@< ON@N 0@ @ @ @ H PNNN0N C@ ?@ O@ K@ aa<?aa<?: QDDN@N 0@ @ @ @ F RDDNPN PN@@@@0 SDDN@N 0@ @ @ @ : TNNN0N @@ @ @ @ F UN@N 0@@@@0 VDDNPN PN@ @ @ @ : WN@N 0@@@@F XNNN0N @ @ @ @ ADaaADaa? YDDN@N 0@@@@K ZDDNPN PN@ @ @ @ 3 [DDN@N 0H@D@T@P@? \NNN0N @@ @ @ @ K ]N@N 0@ @ @ @ ? ^IINPN PN@@@@K _N@N 0@ @ @ @ 3 `NNN0N A@ =@ M@ I@ aa:=aa:=8 aBBN@N 0@ @ @ @ D bBBNPN PN@@@@, cBBN@N 0@ @ @ @ 8 dNNN0N @@ @ @ @ D eN@N 0@@@@, fBBNPN PN@ @ @ @ 8 gN@N 0@@@@D hNNN0N @ @ @ @ , iBBN@N 0@@@@8 jBBNPN PN@ @ @ @ D kBBN@N 0@@@@D lNNN0N @@ @ @ @ 8 mN@N 0@ @ @ @ D nBBNPN PN@@@@8 oN@N 0@ @ @ @ D pNNN0N ?@ <@ K@ H@ 8<aa8<aa7 qDDN@N 0@ @ @ @ C rDDNPN PN@@@@+ sDDN@N 0@ @ @ @ 7 tNNN0N @@ @ @ @ C uN@N 0@@@@+ vDDNPN PN@ @ @ @ 7 wN@N 0@@@@C xNNN0N @ @ @ @ aa<?aa<?: yDDN@N 0@@@@F zDDNPN PN@ @ @ @ . {DDN@N 0C@?@O@K@: |NNN0N @@ @ @ @ F }N@N 0@ @ @ @ . ~IINPN PN@@@@: NNN@N 0@ @ @ @ F p @HN NFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFII @BFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFN II @`NNFFFFFFNNFFNNFFFFFFNNFFNNFFFFFFNNFFNNFFFFFFNNII @gNNN NπFFFFFFNNFFNNFFFFFFNNFFNNFFFFFFNNFFNNFFFFFFNNII @~NNFFFFFFNNFFNNFFFFFFNNFFNNFFNNFFFFNNNNFFNNFFNNFFN NNFFNNNNNNIINN @P NNNN N FFN 0N0FFNN @N@FFN 0N0NNBNN N N 0N0FFNN @N@N 0N0NNNN N FFN 0N0FFNN @N@FFN 0N0NNBNN N NN 0N0FFNN @N@N 0N0NNNN N FFN 0N0FFNN @N@FFN 0N0NNBNN N N 0N0FFNN @N@N 0N0NNNN N FFN 0N0FFNN @N@FFN 0N0NNBNN N NN 0N0IINN @N@BNN 0N0 @ NNNN N = FFN 0N0= FFNN @N@= FFN 0N0= NNBNN N = N 0N0= FFNN @N@= N 0N0= NNNN N = FFN 0N0= FFNN @N@= FFN 0N0= NNBNN N = NN 0N0= FFNN @N@= N 0N0= NNNN N = !FFN 0N0= "FFNN @N@= #FFN 0N0= $NNBNN N = %N 0N0= &FFNN @N@= 'N 0N0= (NNNN N = )FFN 0N0= *FFNN @N@= +FFN 0N0= ,NNBNN N = -NN 0N0= .IINN @N@= /BNN 0N0= 0 @ NNNN N = 1FFN 0N0= 2FFNN @N@= 3FFN 0N0= 4NNBNN N = 5N 0N0= 6FFNN @N@= 7N 0N0= 8NNNN N = 9FFN 0N0= :FFNN @N@= ;FFN 0N0= FFNN @N@= ?N 0N0= @NNNN N = AFFN 0N0= BFFNN @N@= CFFN 0N0= DNNBNN N = EN 0N0= FFFNN @N@= GN 0N0= HNNNN N = IFFN 0N0= JFFNN @N@= KFFN 0N0= LNNBNN N = MNN 0N0= NIINN @N@= OBNN 0N0= P @ NNNN N = = FFN 0N0= = FFNN @N@= = FFN 0N0= = NNBNN N = = N 0N0= = FFNN @N@= = N 0N0= = NNNN N = = FFN 0N0= = FFNN @N@= = FFN 0N0= = NNBNN N = = NN 0N0= = FFNN @N@= = N 0N0= = NNNN N = != FFN 0N0= "= FFNN @N@= #= FFN 0N0= $= NNBNN N = %= N 0N0= &= FFNN @N@= '= N 0N0= (= NNNN N = )= FFN 0N0= *= FFNN @N@= += FFN 0N0= ,= NNBNN N = -= NN 0N0= .= IINN @N@= /= BNN 0N0= 0= @P NNNN N = 1= FFN 0N0= 2= FFNN @N@= 3= FFN 0N0= 4= NNBNN N = 5= N 0N0= 6= FFNN @N@= 7= N 0N0= 8= NNNN N = 9= FFN 0N0= := FFNN @N@= ;= FFN 0N0= <= NNBNN N = == NN 0N0= >= FFNN @N@= ?= N 0N0= @= NNNN N N = A= = A= FFN 0N0= B= = B= FFNN @N@= C= = C= FFN 0N0= D= = D= NNBNN N N = E= = E= N 0N0= F= = F= FFNN @N@= G= = G= N 0N0= H= = H= NNNN N N = I= = I= FFN 0N0= J= = J= FFNN @N@N = K= = K= FFN 0N0= L= = L= NNBNN N N = M= = M= NN 0N0N = N= = N= IINN @N@N = O= = O= BNN 0N0N = P= = P= N Nπ=AaaFFFFFFFFFFFFFFFFaa<?DDDDDDDDADaaDDDDDDIIaa:=BBBBBBBBBBBBBBBB8<aaDDDDDDDDaa<?DDDDDDII =AaaFFFFFFFFFFFFFFFFaa<?DDDDDDDDADaaDDDDDDII= aa:=BBBBBBBB= BBBBBBBB= 8<aaDD= DDDD= = DD= NNaa<?= DDN N = DDN%N%= DDN0N0= N5N5= N@N@= IINENE= NN NNN =AaaIFFFFFFFNNFFANNFFFFFFNNFFNNaa<?IDDDDDDFNNDDANNADaaDDDDDDNNIINNaa:=IBBBBBBFNNBBANNBBBBBBNNBBNN8<aaIDDDDDDFNNDDANNaa<?IDDDDDDFNNIIA NN=AaaIFFFFFFFNNFFANNFFFFFFNNFFNNaa<?IDDDDDDFNNDDANNADaaDDDDDDNNIINNaa:=IBBBBBBFNNBBANNBBBBBBNNBBNN8<aaIDDDDDDFNNDDANNaa<?IDDDDDDFNNIIA NN=AaaI.= = FF= = FF= = FFF,= = NN= = = = FFA*= = = = NNI(= = FF= = FF= = FFF&= = NN= = = = FFA$= = = = NNaa<?I"= != !DD= "= "DD= #= #DDF = $= $NN= %= %= &= &DDA= '= '= (= (NNADaaI= )= )DD= *= *DD= += +DDF= ,= ,NN= -= -= .= .IIA= /= /= 0= 0NNaa:=I= 1= 1BB= 2= 2BB= 3= 3BBF= 4= 4NN= 5= 5= 6= 6BBA= 7= 7= 8= 8NN= 9= 9BB= := :BB= ;= ;BB= <= = >BB= ?= ?= @= @NN8<aaN = A= ADD= B= BDD= C= CDD= D= DNNN = E= E= F= FDD= G= G= H= HNNaa<?N = I= IDD= J= JDD= K= KDD= L= LNNN = M= M= N= NIIN = O= O= P= P pNND@ A@ P@ M@ aaaaN @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ C@ ?@ O@ K@ @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ H@D@T@P@@ @ @ @ @ @ @ @ @@@@@ @ @ @ A@ =@ M@ I@ @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ ?@ <@ K@ H@ @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ C@?@O@K@@ @ @ @ @ @ @ @ NNN @@@@@ @ @ @ jNND@ A@ P@ M@ aaaaN @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ C@ ?@ O@ K@ @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ H@D@T@P@@ @ @ @ @ @ @ @ @@@@@ @ @ @ A@ =@ M@ I@ @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ ?@ <@ K@ H@ @ @ @ @ @@@@@ @ @ @ @ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ @@@@@ @ @ @ C@?@O@K@@ @ @ @ @ @ @ @ @@@@@ @ @ @ 0NND@ A@ P@ M@ aaaaN = @ @ @ @ = @@@@= @ @ @ @ = @ @ @ @ = @@@@= @ @ @ @ = @@@@= @ @ @ @ = @@@@= @ @ @ @ = @@@@= @ @ @ @ = @ @ @ @ = @@@@= @ @ @ @ = C@ ?@ O@ K@ = !@ @ @ @ = "@@@@= #@ @ @ @ = $@ @ @ @ = %@@@@= &@ @ @ @ = '@@@@= (@ @ @ @ = )@@@@= *@ @ @ @ = +H@D@T@P@= ,@ @ @ @ = -@ @ @ @ = .@@@@= /@ @ @ @ = 0A@ =@ M@ I@ = 1@ @ @ @ = 2@@@@= 3@ @ @ @ = 4@ @ @ @ = 5@@@@= 6@ @ @ @ = 7@@@@= 8@ @ @ @ = 9@@@@= :@ @ @ @ = ;@@@@= <@ @ @ @ = =@ @ @ @ = >@@@@= ?@ @ @ @ = @?@ <@ K@ H@ = A@ @ @ @ = B@@@@= C@ @ @ @ = D@ @ @ @ = E@@@@= F@ @ @ @ = G@@@@= H@ @ @ @ = I@@@@= J@ @ @ @ = KC@?@O@K@= L@ @ @ @ = M@ @ @ @ = NNNN @@@@= O@ @ @ @ = P NND@ A@ P@ M@ aaaaN = = @ @ @ @ = = @@@@= = @ @ @ @ = = @ @ @ @ = = @@@@= = @ @ @ @ = = @@@@= = @ @ @ @ = = @@@@= = @ @ @ @ = = @@@@= = @ @ @ @ = = @ @ @ @ = = @@@@= = @ @ @ @ = = C@ ?@ O@ K@ = = !@ @ @ @ = = "@@@@= = #@ @ @ @ = = $@ @ @ @ = = %@@@@= = &@ @ @ @ = = '@@@@= = (@ @ @ @ = = )@@@@= = *@ @ @ @ = = +H@D@T@P@= = ,@ @ @ @ = = -@ @ @ @ = = .@@@@= = /@ @ @ @ = = 0A@ =@ M@ I@ = = 1@ @ @ @ = = 2@@@@= = 3@ @ @ @ = = 4@ @ @ @ = = 5@@@@= = 6@ @ @ @ = = 7@@@@= = 8@ @ @ @ = = 9@@@@= = :@ @ @ @ = = ;@@@@= = <@ @ @ @ = = =@ @ @ @ = = >@@@@= = ?@ @ @ @ = = @?@ <@ K@ H@ = = A= = A@ @ @ @ = = B= = B@@@@= = C= = C@ @ @ @ = = D= = D@ @ @ @ = = E= = E@@@@= = F= = F@ @ @ @ = = G= = G@@@@= = H= = H@ @ @ @ = = I= = I@@@@= = J= = J@ @ @ @ = = K= = KC@?@O@K@= = L= = L@ @ @ @ = = M= = M@ @ @ @ = = N= = N@@@@= = O= = O@ @ @ @ = = P= = P NNNN N D@ A@ P@ M@ N FFN0N 0@ @ @ @ FFNN@N @@@@@FFN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@FFNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ FFN0N 0@@@@FFNN@N @@ @ @ @ FFN0N 0@@@@NNBNN N @ @ @ @ NN0N 0@ @ @ @ FFNN@N @@@@@N0N 0@ @ @ @ NNNN N C@ ?@ O@ K@ DDN0N 0@ @ @ @ DDNN@N @@@@@DDN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@DDNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ DDN0N 0@@@@DDNN@N @@ @ @ @ DDN0N 0H@D@T@P@NNBNN N @ @ @ @ NN0N 0@ @ @ @ IINN@N @@@@@NN0N 0@ @ @ @ NNNN N A@ =@ M@ I@ BBN0N 0@ @ @ @ BBNN@N @@@@@BBN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@BBNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ BBN0N 0@@@@BBNN@N @@ @ @ @ BBN0N 0@@@@NNBNN N @ @ @ @ NN0N 0@ @ @ @ BBNN@N @@@@@N0N 0@ @ @ @ NNNN N ?@ <@ K@ H@ DDN0N 0@ @ @ @ DDNN@N @@@@@DDN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@DDNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ DDN0N 0@@@@DDNN@N @@ @ @ @ DDN0N 0C@?@O@K@NNBNN N @ @ @ @ NN0N 0@ @ @ @ IINN@N @@@@@BNN0N 0@ @ @ @ NNNN N D@ A@ P@ M@ FFN0N 0@ @ @ @ FFNN@N @@@@@FFN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@FFNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ FFN0N 0@@@@FFNN@N @@ @ @ @ FFN0N 0@@@@NNBNN N @ @ @ @ NN0N 0@ @ @ @ FFNN@N @@@@@N0N 0@ @ @ @ NNNN N C@ ?@ O@ K@ DDN0N 0@ @ @ @ DDNN@N @@@@@DDN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@DDNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ DDN0N 0@@@@DDNN@N @@ @ @ @ DDN0N 0H@D@T@P@NNBNN N @ @ @ @ NN0N 0@ @ @ @ IINN@N @@@@@NN0N 0@ @ @ @ NNNN N A@ =@ M@ I@ BBN0N 0@ @ @ @ BBNN@N @@@@@BBN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@BBNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ BBN0N 0@@@@BBNN@N @@ @ @ @ BBN0N 0@@@@NNBNN N @ @ @ @ NN0N 0@ @ @ @ BBNN@N @@@@@N0N 0@ @ @ @ NNNN N ?@ <@ K@ H@ DDN0N 0@ @ @ @ DDNN@N @@@@@DDN0N 0@ @ @ @ NNBNN N @ @ @ @ N0N 0@@@@DDNN@N @@ @ @ @ N0N 0@@@@NNNN N @ @ @ @ DDN0N 0@@@@DDNN@N @@ @ @ @ N DDN0N 0C@?@O@K@NNBNN N @ @ @ @ NN0N 0@ @ @ @ IINN@N @@@@@BNN0N 0@ @ @ @ $NNN0N ND@ A@ P@ M@ =AaaFFN@N 0@ @ @ @ FFNPN PN@@@@FFN@N 0@ @ @ @ NNN0N N@@ @ @ @ N@N 0@@@@FFNPN PN@ @ @ @ N@N 0@@@@NNN0N N@ @ @ @ FFN@N 0@@@@FFNPN PN@ @ @ @ FFN@N 0@@@@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ FFNPN PN@@@@N@N 0@ @ @ @ NNN0N NC@ ?@ O@ K@ aa<?DDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ NNN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ N@N 0@@@@NNN0N N@ @ @ @ ADaaDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0H@D@T@P@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@N@N 0N@ @ @ @ NNN0N NA@ =@ M@ I@ aa:=BBN@N 0@ @ @ @ BBNPN PN@@@@BBN@N 0@ @ @ @ NNN0N N@@ @ @ @ N@N 0@@@@BBNPN PN@ @ @ @ N@N 0@@@@NNN0N N@ @ @ @ BBN@N 0@@@@BBNPN PN@ @ @ @ BBN@N 0@@@@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ BBNPN PN@@@@N@N 0@ @ @ @ NNN0N N?@ <@ K@ H@ 8<aaDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ NNN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ N@N 0@@@@NNN0N N@ @ @ @ aa<?DDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0C@?@O@K@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@NNN@N 0N@ @ @ @ DNNN0N ND@ A@ P@ M@ =AaaIFFN@N 0@ @ @ @ FFNPN PN@@@@FFN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@FFNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ FFN@N 0@@@@FFNPN PN@ @ @ @ FFN@N 0@@@@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ FFNPN PN@@@@N@N 0@ @ @ @ NNN0N NC@ ?@ O@ K@ aa<?IDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ ADaaDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0H@D@T@P@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@N@N 0N@ @ @ @ NNN0N NA@ =@ M@ I@ aa:=IBBN@N 0@ @ @ @ BBNPN PN@@@@BBN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@BBNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ BBN@N 0@@@@BBNPN PN@ @ @ @ BBN@N 0@@@@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ BBNPN PN@@@@N@N 0@ @ @ @ NNN0N N?@ <@ K@ H@ 8<aaIDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ aa<?IDDN@N 0@@@@DDNPN PN@ @ @ @ N DDN@N 0C@?@O@K@FNNN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@ANNN@N 0N@ @ @ @ )N0N ND@ A@ P@ M@ =Aaa=AaaIN NπFFN@N 0@ @ @ @ FFNPN PN@@@@FFN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@FFNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ FFN@N 0@@@@FFNPN PN@ @ @ @ FFN@N 0@@@@N0N N@@ @ @ @ N@N 0N@ @ @ @ FFNPN PN@@@@N@N 0@ @ @ @ N0N NC@ ?@ O@ K@ aa<?aa<?IDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ ADaaADaaDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0H@D@T@P@N0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@N@N 0N@ @ @ @ N0N NA@ =@ M@ I@ aa:=aaBFIBBN@N 0@ @ @ @ BBNPN PN@@@@BBN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@BBNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ BBN@N 0@@@@BBNPN PN@ @ @ @ BBN@N 0@@@@N0N N@@ @ @ @ N@N 0N@ @ @ @ BBNPN PN@@@@N@N 0@ @ @ @ N0N N?@ <@ K@ H@ 8<aaADaaIDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ aa<?aa?BIDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0C@?@O@K@FN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@AN@N 0N@ @ @ @ "N0N ND@ A@ P@ M@ =Aaa=AaaIFFN@N 0@ @ @ @ FFNPN PN@@@@FFN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@FFNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ FFN@N 0@@@@FFNPN PN@ @ @ @ FFN@N 0@@@@N0N N@@ @ @ @ N@N 0N@ @ @ @ FFNPN PN@@@@N@N 0@ @ @ @ N0N NC@ ?@ O@ K@ aa<?aa<?IDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ ADaaADaaDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0H@D@T@P@N0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@N@N 0N@ @ @ @ N0N NA@ =@ M@ I@ aa:=aa:=IBBN@N 0@ @ @ @ BBNPN PN@@@@BBN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@BBNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ BBN@N 0@@@@BBNPN PN@ @ @ @ BBN@N 0@@@@N0N N@@ @ @ @ N@N 0N@ @ @ @ BBNPN PN@@@@N@N 0@ @ @ @ N0N N?@ <@ K@ H@ 8<aa8<aaIDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@N0N N@ @ @ @ aa<?aa<?IDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0C@?@O@K@FN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@AN@N 0N@ @ @ @ BNNN0N ND@ A@ P@ M@ =AaaIFFN@N 0@ @ @ @ FFNPN PN@@@@FFN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@FFNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ FFN@N 0@@@@FFNPN PN@ @ @ @ FFN@N 0@@@@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ FFNPN PN@@@@N@N 0@ @ @ @ NNN0N NC@ ?@ O@ K@ aa<?IDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ ADaaDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0H@D@T@P@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@N@N 0N@ @ @ @ NNN0N NA@ =@ M@ I@ aa:=IBBN@N 0@ @ @ @ BBNPN PN@@@@BBN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@BBNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ BBN@N 0@@@@BBNPN PN@ @ @ @ BBN@N 0@@@@NNN0N N@@ @ @ @ N@N 0N@ @ @ @ BBNPN PN@@@@N@N 0@ @ @ @ NNN0N N?@ <@ K@ H@ 8<aaIDDN@N 0@ @ @ @ DDNPN PN@@@@DDN@N 0@ @ @ @ FNNN0N N@@ @ @ @ N@N 0@@@@DDNPN PN@ @ @ @ AN@N 0@@@@NNN0N N@ @ @ @ aa<?IDDN@N 0@@@@DDNPN PN@ @ @ @ DDN@N 0C@?@O@K@FNNN0N N@@ @ @ @ N@N 0N@ @ @ @ IINPN PN@@@@ANNN@N 0N@ @ @ @ N0N D@ A@ P@ M@ =Aaa=AaaFFN@N 0@ @ @ @ FFNPN P@@@@FFN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@FFNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ FFN@N 0@@@@FFNPN P@ @ @ @ FFN@N 0@@@@N0N @ @ @ @ N@N 0@ @ @ @ FFNPN P@@@@N@N 0@ @ @ @ N0N C@ ?@ O@ K@ aa<?aa<?DDN@N 0@ @ @ @ DDNPN P@@@@DDN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@DDNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ ADaaADaaDDN@N 0@@@@DDNPN P@ @ @ @ DDN@N 0H@D@T@P@N0N @ @ @ @ N@N 0@ @ @ @ IINPN P@@@@N@N 0@ @ @ @ N0N A@ =@ M@ I@ aa:=aaBFBBN@N 0@ @ @ @ BBNPN P@@@@BBN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@BBNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ BBN@N 0@@@@BBNPN P@ @ @ @ BBN@N 0@@@@N0N @ @ @ @ N@N 0@ @ @ @ BBNPN P@@@@N@N 0@ @ @ @ N0N ?@ <@ K@ H@ 8<aaADaaDDN@N 0@ @ @ @ DDNPN P@@@@DDN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@DDNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ aa<?aa?BDDN@N 0@@@@DDNPN P@ @ @ @ DDN@N 0C@?@O@K@N0N @ @ @ @ N@N 0@ @ @ @ IINPN P@@@@N@N 0@ @ @ @ N0N D@ A@ P@ M@ =Aaa=AaaFFN@N 0@ @ @ @ FFNPN P@@@@FFN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@FFNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ FFN@N 0@@@@FFNPN P@ @ @ @ FFN@N 0@@@@N0N @ @ @ @ N@N 0@ @ @ @ FFNPN P@@@@N@N 0@ @ @ @ N0N C@ ?@ O@ K@ aa<?aa<?DDN@N 0@ @ @ @ DDNPN P@@@@DDN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@DDNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ ADaaADaaDDN@N 0@@@@DDNPN P@ @ @ @ DDN@N 0H@D@T@P@N0N @ @ @ @ N@N 0@ @ @ @ IINPN P@@@@N@N 0@ @ @ @ N0N A@ =@ M@ I@ aa:=aa:=BBN@N 0@ @ @ @ BBNPN P@@@@BBN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@BBNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ BBN@N 0@@@@BBNPN P@ @ @ @ BBN@N 0@@@@N0N @ @ @ @ N@N 0@ @ @ @ BBNPN P@@@@N@N 0@ @ @ @ N0N ?@ <@ K@ H@ 8<aa8<aaDDN@N 0@ @ @ @ DDNPN P@@@@DDN@N 0@ @ @ @ N0N @ @ @ @ N@N 0@@@@DDNPN P@ @ @ @ N@N 0@@@@N0N @ @ @ @ aa<?aa<?DDN@N 0@@@@DDNPN P@ @ @ @ DDN@N 0C@?@O@K@N0N @ @ @ @ N@N 0@ @ @ @ IINPN P@@@@N@N 0@ @ @ @ N0N D@ A@ P@ M@ =Aaa=Aaa< F F πFFN@N 0@ @ @ @ H FFNPN P@@@@0 FFN@N 0@ @ @ @ < N0N @ @ @ @ H N@N 0@@@@0 FFNPN P@ @ @ @ < N@N 0@@@@H N0N @ @ @ @ 0 FFN@N 0@@@@< FFNPN P@ @ @ @ H FFN@N 0@@@@H N0N @ @ @ @ < N@N 0@ @ @ @ H FFNPN P@@@@< N@N 0@ @ @ @ H N0N C@ ?@ O@ K@ aa<?aa<?: DDN@N 0@ @ @ @ F DDNPN P@@@@0 DDN@N 0@ @ @ @ : N0N @ @ @ @ F N@N 0@@@@0 DDNPN P@ @ @ @ : N@N 0@@@@F N0N @ @ @ @ ADaaADaa? DDN@N 0@@@@K DDNPN P@ @ @ @ 3 DDN@N 0H@D@T@P@? N0N @ @ @ @ K N@N 0@ @ @ @ ? IINPN P@@@@K N@N 0@ @ @ @ 3 N0N A@ =@ M@ I@ aa:=aaBF8 !BBN@N 0@ @ @ @ D "BBNPN P@@@@, #BBN@N 0@ @ @ @ 8 $N0N @ @ @ @ D %N@N 0@@@@, &BBNPN P@ @ @ @ 8 'N@N 0@@@@D (N0N @ @ @ @ , )BBN@N 0@@@@8 *BBNPN P@ @ @ @ D +BBN@N 0@@@@D ,N0N @ @ @ @ 8 -N@N 0@ @ @ @ D .BBNPN P@@@@8 /N@N 0@ @ @ @ D 0N0N ?@ <@ K@ H@ 8<aaADaa7 1DDN@N 0@ @ @ @ C 2DDNPN P@@@@+ 3DDN@N 0@ @ @ @ 7 4N0N @ @ @ @ C 5N@N 0@@@@+ 6DDNPN P@ @ @ @ 7 7N@N 0@@@@C 8N0N @ @ @ @ aa<?aa?B: 9DDN@N 0@@@@F :DDNPN P@ @ @ @ . ;DDN@N 0C@?@O@K@: IINPN P@@@@: ?N@N 0@ @ @ @ F @ N0N D@ A@ P@ M@ =Aaa=Aaa< AFFN@N 0@ @ @ @ H BFFNPN P@@@@0 CFFN@N 0@ @ @ @ < DN0N @ @ @ @ H EN@N 0@@@@0 FFFNPN P@ @ @ @ < GN@N 0@@@@H HN0N @ @ @ @ 0 IFFN@N 0@@@@< JFFNPN P@ @ @ @ H KFFN@N 0@@@@H LN0N @ @ @ @ < MN@N 0@ @ @ @ H NFFNPN P@@@@< ON@N 0@ @ @ @ H PN0N C@ ?@ O@ K@ aa<?aa<?: QDDN@N 0@ @ @ @ F RDDNPN P@@@@0 SDDN@N 0@ @ @ @ : TN0N @ @ @ @ F UN@N 0@@@@0 VDDNPN P@ @ @ @ : WN@N 0@@@@F XN0N @ @ @ @ ADaaADaa? YDDN@N 0@@@@K ZDDNPN P@ @ @ @ 3 [DDN@N 0H@D@T@P@? \N0N @ @ @ @ K ]N@N 0@ @ @ @ ? ^IINPN P@@@@K _N@N 0@ @ @ @ 3 `N0N A@ =@ M@ I@ aa:=aa:=8 aBBN@N 0@ @ @ @ D bBBNPN P@@@@, cBBN@N 0@ @ @ @ 8 dN0N @ @ @ @ D eN@N 0@@@@, fBBNPN P@ @ @ @ 8 gN@N 0@@@@D hN0N @ @ @ @ , iBBN@N 0@@@@8 jBBNPN P@ @ @ @ D kBBN@N 0@@@@D lN0N @ @ @ @ 8 mN@N 0@ @ @ @ D nBBNPN P@@@@8 oN@N 0@ @ @ @ D pN0N ?@ <@ K@ H@ 8<aa8<aa7 qDDN@N 0@ @ @ @ C rDDNPN P@@@@+ sDDN@N 0@ @ @ @ 7 tN0N @ @ @ @ C uN@N 0@@@@+ vDDNPN P@ @ @ @ 7 wN@N 0@@@@C xN0N @ @ @ @ aa<?aa<?: yDDN@N 0@@@@F zDDNPN P@ @ @ @ . {DDN@N 0C@?@O@K@: |N0N @ @ @ @ F }N@N 0@ @ @ @ . ~IINPN P@@@@: N@N 0@ @ @ @ F iN0N D@ A@ P@ M@ =Aaa=Aaa< = FFN@N 0@ @ @ @ H = FFNPN P@@@@0 ~= FFN@N 0@ @ @ @ < }= N0N @ @ @ @ H |= N@N 0@@@@0 {= FFNPN P@ @ @ @ < z= N@N 0@@@@H y= N0N @ @ @ @ 0 x= FFN@N 0@@@@< w= FFNPN P@ @ @ @ H v= FFN@N 0@@@@H u= N0N @ @ @ @ < t= N@N 0@ @ @ @ H s= FFNPN P@@@@< r= N@N 0@ @ @ @ H q= N0N C@ ?@ O@ K@ aa<?aa<?: p= !DDN@N 0@ @ @ @ F o= "DDNPN P@@@@0 n= # DDN@N 0@ @ @ @ : m= $N0N @ @ @ @ F l= %N@N 0@@@@0 k= &DDNPN P@ @ @ @ : j= 'N@N 0@@@@F i= (N0N @ @ @ @ ADaaADaa? h= )DDN@N 0@@@@K g= *DDNPN P@ @ @ @ 3 f= +DDN@N 0H@D@T@P@? e= ,N0N @ @ @ @ K d= -N@N 0@ @ @ @ ? c= .IINPN P@@@@K b= /N@N 0@ @ @ @ 3 a= 0N0N A@ =@ M@ I@ aa:=aaBF8 `= 1BBN@N 0@ @ @ @ D _= 2BBNPN P@@@@, ^= 3BBN@N 0@ @ @ @ 8 ]= 4N0N @ @ @ @ D \= 5N@N 0@@@@, [= 6BBNPN P@ @ @ @ 8 Z= 7N@N 0@@@@D Y= 8N0N @ @ @ @ , X= 9BBN@N 0@@@@8 W= :BBNPN P@ @ @ @ D V= ;BBN@N 0@@@@D U= BBNPN P@@@@8 R= ?N@N 0@ @ @ @ D Q= @N0N ?@ <@ K@ H@ 8<aaADaa7 P= ADDN@N 0@ @ @ @ C O= BDDNPN P@@@@+ N= CDDN@N 0@ @ @ @ 7 M= DN0N @ @ @ @ C L= EN@N 0@@@@+ K= FDDNPN P@ @ @ @ 7 J= GN@N 0@@@@C I= HN0N @ @ @ @ aa<?aa?B: H= IDDN@N 0@@@@F G= JDDNPN P@ @ @ @ . F= KDDN@N 0C@?@O@K@: E= LN0N @ @ @ @ F D= MN@N 0@ @ @ @ . C= NIINPN P@@@@: B= ON@N 0@ @ @ @ F A= P EN0N D@ A@ P@ M@ =Aaa=Aaa< @= = FFN@N 0@ @ @ @ H ?= = FFNPN P@@@@0 >= = FFN@N 0@ @ @ @ < == = N0N @ @ @ @ H <= = N@N 0@@@@0 ;= = FFNPN P@ @ @ @ < := = N@N 0@@@@H 9= = N0N @ @ @ @ 0 8= = FFN@N 0@@@@< 7= = FFNPN P@ @ @ @ H 6= = FFN@N 0@@@@H 5= = N0N @ @ @ @ < 4= = N@N 0@ @ @ @ H 3= = FFNPN P@@@@< 2= = N@N 0@ @ @ @ H 1= = N0N C@ ?@ O@ K@ aa<?aa<?: 0= = !DDN@N 0@ @ @ @ F /= = "DDNPN P@@@@0 .= = # DDN@N 0@ @ @ @ : -= = $N0N @ @ @ @ F ,= = %N@N 0@@@@0 += = &DDNPN P@ @ @ @ : *= = 'N@N 0@@@@F )= = (N0N @ @ @ @ ADaaADaa? (= = )DDN@N 0@@@@K '= = *DDNPN P@ @ @ @ 3 &= = +DDN@N 0H@D@T@P@? %= = ,N0N @ @ @ @ K $= = -N@N 0@ @ @ @ ? #= = .IINPN P@@@@K "= = /N@N 0@ @ @ @ 3 != = 0N0N A@ =@ M@ I@ aa:=aa:=8 = = 1BBN@N 0@ @ @ @ D = = 2BBNPN P@@@@, = = 3BBN@N 0@ @ @ @ 8 = = 4N0N @ @ @ @ D = = 5N@N 0@@@@, = = 6BBNPN P@ @ @ @ 8 = = 7N@N 0@@@@D = = 8N0N @ @ @ @ , = = 9BBN@N 0@@@@8 = = :BBNPN P@ @ @ @ D = = ;BBN@N 0@@@@D = = BBNPN P@@@@8 = = ?N@N 0@ @ @ @ D = = @N0N ?@ <@ K@ H@ 8<aa8<aa7 N = = A= = ADDN@N 0@ @ @ @ C = = B= = BDDNPN P@@@@+ = = C= = CDDN@N 0@ @ @ @ 7 = = D= = DN0N @ @ @ @ C N = = E= = EN@N 0@@@@+ = = F= = FDDNPN P@ @ @ @ 7 = = G= = GN@N 0@@@@C = = H= = HN0N @ @ @ @ aa<?aa<?: N = = I= = IDDN@N 0@@@@F = = J= = JDDNPN P@ @ @ @ . N = = K= = KDDN@N 0C@?@O@K@: = = L= = LN0N @ @ @ @ F N = = M= = MN@N 0@ @ @ @ . = = N= = NIINPN P@@@@: N = = O= = ON@N 0@ @ @ @ F = = P= = P HNNN0N ND@ A@ P@ M@ =Aaa=Aaa< FFN@N 0@ @ @ @ H FFNPN PN@@@@0 FFN@N 0@ @ @ @ < NNN0N N@@ @ @ @ H N@N 0@@@@0 FFNPN PN@ @ @ @ < N@N 0@@@@H NNN0N N@ @ @ @ 0 FFN@N 0@@@@< FFNPN PN@ @ @ @ H FFN@N 0@@@@H NNN0N N@@ @ @ @ < N@N 0N@ @ @ @ H FFNPN PN@@@@< N@N 0@ @ @ @ H NNN0N NC@ ?@ O@ K@ aa<?aa<?: DDN@N 0@ @ @ @ F DDNPN PN@@@@0 DDN@N 0@ @ @ @ : NNN0N N@@ @ @ @ F N@N 0@@@@0 DDNPN PN@ @ @ @ : N@N 0@@@@F NNN0N N@ @ @ @ ADaaADaa? DDN@N 0@@@@K DDNPN PN@ @ @ @ 3 DDN@N 0H@D@T@P@? NNN0N N@@ @ @ @ K N@N 0N@ @ @ @ ? IINPN PN@@@@K N@N 0N@ @ @ @ 3 NNN0N NA@ =@ M@ I@ aa:=aaBF8 !BBN@N 0@ @ @ @ D "BBNPN PN@@@@, #BBN@N 0@ @ @ @ 8 $NNN0N N@@ @ @ @ D %N@N 0@@@@, &BBNPN PN@ @ @ @ 8 'N@N 0@@@@D (NNN0N N@ @ @ @ , )BBN@N 0@@@@8 *BBNPN PN@ @ @ @ D +BBN@N 0@@@@D ,NNN0N N@@ @ @ @ 8 -N@N 0N@ @ @ @ D .BBNPN PN@@@@8 /N@N 0@ @ @ @ D 0NNN0N N?@ <@ K@ H@ 8<aaADaa7 1DDN@N 0@ @ @ @ C 2DDNPN PN@@@@+ 3DDN@N 0@ @ @ @ 7 4NNN0N N@@ @ @ @ C 5N@N 0@@@@+ 6DDNPN PN@ @ @ @ 7 7N@N 0@@@@C 8NNN0N N@ @ @ @ aa<?aa?B: 9DDN@N 0@@@@F :DDNPN PN@ @ @ @ . ;DDN@N 0C@?@O@K@: IINPN PN@@@@: ?NNN@N 0N@ @ @ @ F @ HNNN0N ND@ A@ P@ M@ =Aaa=Aaa< AFFN@N 0@ @ @ @ H BFFNPN PN@@@@0 CFFN@N 0@ @ @ @ < DNNN0N N@@ @ @ @ H EN@N 0@@@@0 FFFNPN PN@ @ @ @ < GN@N 0@@@@H HNNN0N N@ @ @ @ 0 IFFN@N 0@@@@< JFFNPN PN@ @ @ @ H KFFN@N 0@@@@H LNNN0N N@@ @ @ @ < MN@N 0N@ @ @ @ H NFFNPN PN@@@@< ON@N 0@ @ @ @ H PNNN0N NC@ ?@ O@ K@ aa<?aa<?: QDDN@N 0@ @ @ @ F RDDNPN PN@@@@0 SDDN@N 0@ @ @ @ : TNNN0N N@@ @ @ @ F UN@N 0@@@@0 VDDNPN PN@ @ @ @ : WN@N 0@@@@F XNNN0N N@ @ @ @ ADaaADaa? YDDN@N 0@@@@K ZDDNPN PN@ @ @ @ 3 [DDN@N 0H@D@T@P@? \NNN0N N@@ @ @ @ K ]N@N 0N@ @ @ @ ? ^IINPN PN@@@@K _N@N 0N@ @ @ @ 3 `NNN0N NA@ =@ M@ I@ aa:=aa:=8 aBBN@N 0@ @ @ @ D bBBNPN PN@@@@, cBBN@N 0@ @ @ @ 8 dNNN0N N@@ @ @ @ D eN@N 0@@@@, fBBNPN PN@ @ @ @ 8 gN@N 0@@@@D hNNN0N N@ @ @ @ , iBBN@N 0@@@@8 jBBNPN PN@ @ @ @ D kBBN@N 0@@@@D lNNN0N N@@ @ @ @ 8 mN@N 0N@ @ @ @ D nBBNPN PN@@@@8 oN@N 0@ @ @ @ D pNNN0N N?@ <@ K@ H@ 8<aa8<aa7 qDDN@N 0@ @ @ @ C rDDNPN PN@@@@+ sDDN@N 0@ @ @ @ 7 tNNN0N N@@ @ @ @ C uN@N 0@@@@+ vDDNPN PN@ @ @ @ 7 wN@N 0@@@@C xNNN0N N@ @ @ @ aa<?aa<?: yDDN@N 0@@@@F zDDNPN PN@ @ @ @ . {DDN@N 0C@?@O@K@: |NNN0N N@@ @ @ @ F }N@N 0N@ @ @ @ . ~IINPN PN@@@@: NNN@N 0N@ @ @ @ F INNN0N ND@ A@ P@ M@ =Aaa=Aaa< FFN@N 0@ @ @ @ H FFNPN PN@@@@0 ~FFN@N 0@ @ @ @ < }NNN0N N@@ @ @ @ H |N@N 0@@@@0 {FFNPN PN@ @ @ @ < zN@N 0@@@@H yNNN0N N@ @ @ @ 0 xFFN@N 0@@@@< wFFNPN PN@ @ @ @ H vFFN@N 0@@@@H uNNN0N N@@ @ @ @ < tN@N 0N@ @ @ @ H sFFNPN PN@@@@< rN@N 0@ @ @ @ H qNNN0N NC@ ?@ O@ K@ aa<?aa<?: pDDN@N 0@ @ @ @ F oDDNPN PN@@@@0 n DDN@N 0@ @ @ @ : mNNN0N N@@ @ @ @ F lN@N 0@@@@0 kDDNPN PN@ @ @ @ : jN@N 0@@@@F iNNN0N N@ @ @ @ ADaaADaa? hDDN@N 0@@@@K gDDNPN PN@ @ @ @ 3 fDDN@N 0H@D@T@P@? eNNN0N N@@ @ @ @ K dN@N 0N@ @ @ @ ? cIINPN PN@@@@K bN@N 0N@ @ @ @ 3 aNNN0N NA@ =@ M@ I@ aa:=aaBF8 `BBN@N 0@ @ @ @ D _BBNPN PN@@@@, ^BBN@N 0@ @ @ @ 8 ]NNN0N N@@ @ @ @ D \N@N 0@@@@, [BBNPN PN@ @ @ @ 8 ZN@N 0@@@@D YNNN0N N@ @ @ @ , XBBN@N 0@@@@8 WBBNPN PN@ @ @ @ D VBBN@N 0@@@@D UNNN0N N@@ @ @ @ 8 TN@N 0N@ @ @ @ D SBBNPN PN@@@@8 RN@N 0@ @ @ @ D QNNN0N N?@ <@ K@ H@ 8<aaADaa7 PDDN@N 0@ @ @ @ C ODDNPN PN@@@@+ NDDN@N 0@ @ @ @ 7 MNNN0N N@@ @ @ @ C LN@N 0@@@@+ KDDNPN PN@ @ @ @ 7 JN@N 0@@@@C INNN0N N@ @ @ @ aa<?aa?B: HDDN@N 0@@@@F GDDNPN PN@ @ @ @ . FDDN@N 0C@?@O@K@: ENNN0N N@@ @ @ @ F DN@N 0N@ @ @ @ . CIINPN PN@@@@: BNNN@N 0N@ @ @ @ F A INNN0N ND@ A@ P@ M@ =Aaa=Aaa< @FFN@N 0@ @ @ @ H ?FFNPN PN@@@@0 >FFN@N 0@ @ @ @ < =NNN0N N@@ @ @ @ H IINPN PN@@@@: ?NNN@N 0N@ @ @ @ F @ fNNN0N ND@ A@ P@ M@ =Aaa=Aaa< AIFFN@N 0@ @ @ @ H BFFNPN PN@@@@0 CFFN@N 0@ @ @ @ < DFNNN0N N@@ @ @ @ H EN@N 0@@@@0 FFFNPN PN@ @ @ @ < GAN@N 0@@@@H HNNN0N N@ @ @ @ 0 IFFN@N 0@@@@< JFFNPN PN@ @ @ @ H KFFN@N 0@@@@H LNNN0N N@@ @ @ @ < MN@N 0N@ @ @ @ H NFFNPN PN@@@@< ON@N 0@ @ @ @ H PNNN0N NC@ ?@ O@ K@ aa<?aa<?: QIDDN@N 0@ @ @ @ F RDDNPN PN@@@@0 SDDN@N 0@ @ @ @ : TFNNN0N N@@ @ @ @ F UN@N 0@@@@0 VDDNPN PN@ @ @ @ : WAN@N 0@@@@F XNNN0N N@ @ @ @ ADaaADaa? YDDN@N 0@@@@K ZDDNPN PN@ @ @ @ 3 [DDN@N 0H@D@T@P@? \NNN0N N@@ @ @ @ K ]N@N 0N@ @ @ @ ? ^IINPN PN@@@@K _N@N 0N@ @ @ @ 3 `NNN0N NA@ =@ M@ I@ aa:=aa:=8 aIBBN@N 0@ @ @ @ D bBBNPN PN@@@@, cBBN@N 0@ @ @ @ 8 dFNNN0N N@@ @ @ @ D eN@N 0@@@@, fBBNPN PN@ @ @ @ 8 gAN@N 0@@@@D hNNN0N N@ @ @ @ , iBBN@N 0@@@@8 jBBNPN PN@ @ @ @ D kBBN@N 0@@@@D lNNN0N N@@ @ @ @ 8 mN@N 0N@ @ @ @ D nBBNPN PN@@@@8 oN@N 0@ @ @ @ D pNNN0N N?@ <@ K@ H@ 8<aa8<aa7 qIDDN@N 0@ @ @ @ C rDDNPN PN@@@@+ sDDN@N 0@ @ @ @ 7 tFNNN0N N@@ @ @ @ C uN@N 0@@@@+ vDDNPN PN@ @ @ @ 7 wAN@N 0@@@@C xNNN0N N@ @ @ @ aa<?aa<?: yIDDN@N 0@@@@F zDDNPN PN@ @ @ @ . {DDN@N 0C@?@O@K@: |FNNN0N N@@ @ @ @ F }N@N 0N@ @ @ @ . ~IINPN PN@@@@: ANNN@N 0N@ @ @ @ F gNNN0N ND@ A@ P@ M@ =Aaa=Aaa< IFFN@N 0@ @ @ @ H FFNPN PN@@@@0 ~FFN@N 0@ @ @ @ < }FNNN0N N@@ @ @ @ H |N@N 0@@@@0 {FFNPN PN@ @ @ @ < zAN@N 0@@@@H yNNN0N N@ @ @ @ 0 xFFN@N 0@@@@< wFFNPN PN@ @ @ @ H vFFN@N 0@@@@H uNNN0N N@@ @ @ @ < tN@N 0N@ @ @ @ H sFFNPN PN@@@@< rN@N 0@ @ @ @ H qNNN0N NC@ ?@ O@ K@ aa<?aa<?: pIDDN@N 0@ @ @ @ F oDDNPN PN@@@@0 n DDN@N 0@ @ @ @ : mFNNN0N N@@ @ @ @ F lN@N 0@@@@0 kDDNPN PN@ @ @ @ : jAN@N 0@@@@F iNNN0N N@ @ @ @ ADaaADaa? hIDDN@N 0@@@@K gDDNPN PN@ @ @ @ 3 fDDN@N 0H@D@T@P@? eFNNN0N N@@ @ @ @ K dN@N 0N@ @ @ @ ? cIINPN PN@@@@K bAN@N 0N@ @ @ @ 3 aNNN0N NA@ =@ M@ I@ aa:=aaBF8 `IBBN@N 0@ @ @ @ D _BBNPN PN@@@@, ^BBN@N 0@ @ @ @ 8 ]FNNN0N N@@ @ @ @ D \N@N 0@@@@, [BBNPN PN@ @ @ @ 8 ZAN@N 0@@@@D YNNN0N N@ @ @ @ , XBBN@N 0@@@@8 WBBNPN PN@ @ @ @ D VBBN@N 0@@@@D UNNN0N N@@ @ @ @ 8 TN@N 0N@ @ @ @ D SBBNPN PN@@@@8 RN@N 0@ @ @ @ D QNNN0N N?@ <@ K@ H@ 8<aaADaa7 PIDDN@N 0@ @ @ @ C ODDNPN PN@@@@+ NDDN@N 0@ @ @ @ 7 MFNNN0N N@@ @ @ @ C LN@N 0@@@@+ KDDNPN PN@ @ @ @ 7 JAN@N 0@@@@C INNN0N N@ @ @ @ aa<?aa?B: HDDN@N 0@@@@F GDDNPN PN@ @ @ @ . FDDN@N 0C@?@O@K@: ENNN0N N@@ @ @ @ F DN@N 0N@ @ @ @ . CIINPN PN@@@@: BNNN@N 0N@ @ @ @ F A iNNN0N ND@ A@ P@ M@ =Aaa=Aaa< @IFFN@N 0@ @ @ @ H ?FFNPN PN@@@@0 >FFN@N 0@ @ @ @ < =FNNN0N N@@ @ @ @ H BBNPN PN@@@@8 = = ?N@N 0@ @ @ @ D = = @NNN0N N?@ <@ K@ H@ 8<aa8<aa7 = = A= = ADDN@N 0@ @ @ @ C = = B= = BDDNPN PN@@@@+ = = C= = CDDN@N 0@ @ @ @ 7 = = D= = DNNN0N N@@ @ @ @ C = = E= = EN@N 0@@@@+ = = F= = FDDNPN PN@ @ @ @ 7 = = G= = GN@N 0@@@@C = = H= = HNNN0N N@ @ @ @ aa<?aa<?: = = I= = IDDN@N 0@@@@F = = J= = JDDNPN PN@ @ @ @ . = = K= = KDDN@N 0C@?@O@K@: = = L= = LNNN0N N@@ @ @ @ F = = M= = MN@N 0N@ @ @ @ . = = N= = NIINPN PN@@@@: = = O= = ONNN@N 0N@ @ @ @ F = = P= = P NNN aaaD@ A@ P@ M@ =AaaaaaaaaaaaaaaaFF@ @ @ @ FF@@@@FF@ @ @ @ @ @ @ @ @@@@FF@ @ @ @ @@@@@ @ @ @ FF@@@@FF@ @ @ @ FF@@@@@ @ @ @ @ @ @ @ FF@@@@@ @ @ @ C@ ?@ O@ K@ aa<?DD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ ADaaDD@@@@DD@ @ @ @ DDH@D@T@P@@ @ @ @ @ @ @ @ II@@@@@ @ @ @ A@ =@ M@ I@ aa:=BB@ @ @ @ BB@@@@BB@ @ @ @ @ @ @ @ @@@@BB@ @ @ @ @@@@@ @ @ @ BB@@@@BB@ @ @ @ BB@@@@@ @ @ @ @ @ @ @ BB@@@@@ @ @ @ ?@ <@ K@ H@ 8<aaDD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ aa<?DD@@@@DD@ @ @ @ DDC@?@O@K@@ @ @ @ @ @ @ @ NNIIN @@@@@ @ @ @ NNN aaD@ A@ P@ M@ =AaaaaaaaaaaaaaaaFF@ @ @ @ FF@@@@FF@ @ @ @ @ @ @ @ @@@@FF@ @ @ @ @@@@@ @ @ @ FF@@@@FF@ @ @ @ FF@@@@@ @ @ @ @ @ @ @ FF@@@@@ @ @ @ C@ ?@ O@ K@ aa<?DD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ ADaaDD@@@@DD@ @ @ @ DDH@D@T@P@@ @ @ @ @ @ @ @ II@@@@@ @ @ @ A@ =@ M@ I@ aa:=BB@ @ @ @ BB@@@@BB@ @ @ @ @ @ @ @ @@@@BB@ @ @ @ @@@@@ @ @ @ BB@@@@BB@ @ @ @ BB@@@@@ @ @ @ @ @ @ @ BB@@@@@ @ @ @ ?@ <@ K@ H@ 8<aaDD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ aa<?DD@@@@N DD@ @ @ @ DDC@?@O@K@@ @ @ @ @ @ @ @ II@@@@@ @ @ @ aaD@ A@ P@ M@ aaFF@ @ @ @ FF@@@@FF@ @ @ @ @ @ @ @ @@@@FF@ @ @ @ @@@@@ @ @ @ FF@@@@FF@ @ @ @ FF@@@@@ @ @ @ @ @ @ @ FF@@@@@ @ @ @ C@ ?@ O@ K@ DD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ DD@@@@DD@ @ @ @ DDH@D@T@P@@ @ @ @ @ @ @ @ II@@@@@ @ @ @ A@ =@ M@ I@ BB@ @ @ @ BB@@@@BB@ @ @ @ @ @ @ @ @@@@BB@ @ @ @ @@@@@ @ @ @ BB@@@@BB@ @ @ @ BB@@@@@ @ @ @ @ @ @ @ BB@@@@@ @ @ @ ?@ <@ K@ H@ DD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ DD@@@@DD@ @ @ @ DDC@?@O@K@@ @ @ @ @ @ @ @ II@@@@@ @ @ @ F F πaaD@ A@ P@ M@ aaFF@ @ @ @ FF@@@@FF@ @ @ @ @ @ @ @ @@@@FF@ @ @ @ @@@@@ @ @ @ FF@@@@FF@ @ @ @ FF@@@@@ @ @ @ @ @ @ @ FF@@@@@ @ @ @ C@ ?@ O@ K@ DD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ DD@@@@DD@ @ @ @ DDH@D@T@P@@ @ @ @ @ @ @ @ II@@@@@ @ @ @ A@ =@ M@ I@ BB@ @ @ @ BB@@@@BB@ @ @ @ @ @ @ @ @@@@BB@ @ @ @ @@@@@ @ @ @ BB@@@@BB@ @ @ @ BB@@@@@ @ @ @ @ @ @ @ BB@@@@@ @ @ @ ?@ <@ K@ H@ DD@ @ @ @ DD@@@@DD@ @ @ @ @ @ @ @ @@@@DD@ @ @ @ @@@@@ @ @ @ DD@@@@DD@ @ @ @ DDC@?@O@K@@ @ @ @ @ @ @ @ II@@@@@ @ @ @ *NNN aaD@ A@ P@ M@ aa= @ @ @ @ = @@@@= @ @ @ @ = @ @ @ @ = @@@@= @ @ @ @ = @@@@= @ @ @ @ = @@@@= @ @ @ @ = @@@@= @ @ @ @ = @ @ @ @ = @@@@= @ @ @ @ = C@ ?@ O@ K@ = !@ @ @ @ = "@@@@= #@ @ @ @ = $@ @ @ @ = %@@@@= &@ @ @ @ = '@@@@= (@ @ @ @ = )@@@@= *@ @ @ @ = +H@D@T@P@= ,@ @ @ @ = -@ @ @ @ = .@@@@= /@ @ @ @ = 0A@ =@ M@ I@ = 1@ @ @ @ = 2@@@@= 3@ @ @ @ = 4@ @ @ @ = 5@@@@= 6@ @ @ @ = 7@@@@= 8@ @ @ @ = 9@@@@= :@ @ @ @ = ;@@@@= <@ @ @ @ = =@ @ @ @ = >@@@@= ?@ @ @ @ = @?@ <@ K@ H@ = A@ @ @ @ = B@@@@= C@ @ @ @ = D@ @ @ @ = E@@@@= F@ @ @ @ = G@@@@= H@ @ @ @ = I@@@@= J@ @ @ @ = KC@?@O@K@= L@ @ @ @ = M@ @ @ @ = N@@@@= O@ @ @ @ = P aaD@ A@ P@ M@ aa= = @ @ @ @ = = @@@@= = @ @ @ @ = = @ @ @ @ = = @@@@= = @ @ @ @ = = @@@@= = @ @ @ @ = = @@@@= = @ @ @ @ = = @@@@= = @ @ @ @ = = @ @ @ @ = = @@@@= = @ @ @ @ = = C@ ?@ O@ K@ = = !@ @ @ @ = = "@@@@= = #@ @ @ @ = = $@ @ @ @ = = %@@@@= = &@ @ @ @ = = '@@@@= = (@ @ @ @ = = )@@@@= = *@ @ @ @ = = +H@D@T@P@= = ,@ @ @ @ = = -@ @ @ @ = = .@@@@= = /@ @ @ @ = = 0A@ =@ M@ I@ = = 1@ @ @ @ = = 2@@@@= = 3@ @ @ @ = = 4@ @ @ @ = = 5@@@@= = 6@ @ @ @ = = 7@@@@= = 8@ @ @ @ = = 9@@@@= = :@ @ @ @ = = ;@@@@= = <@ @ @ @ = = =@ @ @ @ = = >@@@@= = ?@ @ @ @ = = @?@ <@ K@ H@ = = A= = A@ @ @ @ = = B= = B@@@@= = C= = C@ @ @ @ = = D= = D@ @ @ @ = = E= = E@@@@= = F= = F@ @ @ @ = = G= = G@@@@= = H= = H@ @ @ @ = = I= = I@@@@= = J= = J@ @ @ @ = = K= = KC@?@O@K@= = L= = L@ @ @ @ = = M= = M@ @ @ @ = = N= = N@@@@= = O= = O@ @ @ @ = = P= = P aaaaH H N Nπ HNNN0N ND@ A@ P@ M@ =Aaa=Aaa< FFN@N 0@ @ @ @ H FFNPN PN@@@@0 FFN@N 0@ @ @ @ < NNN0N N@@ @ @ @ H N@N 0@@@@0 FFNPN PN@ @ @ @ < N@N 0@@@@H NNN0N N@ @ @ @ 0 FFN@N 0@@@@< FFNPN PN@ @ @ @ H FFN@N 0@@@@H NNN0N N@@ @ @ @ < N@N 0N@ @ @ @ H FFNPN PN@@@@< N@N 0@ @ @ @ H NNN0N NC@ ?@ O@ K@ aa<?aa<?: DDN@N 0@ @ @ @ F DDNPN PN@@@@0 DDN@N 0@ @ @ @ : NNN0N N@@ @ @ @ F N@N 0@@@@0 DDNPN PN@ @ @ @ : N@N 0@@@@F NNN0N N@ @ @ @ ADaaADaa? DDN@N 0@@@@K DDNPN PN@ @ @ @ 3 DDN@N 0H@D@T@P@? NNN0N N@@ @ @ @ K N@N 0N@ @ @ @ ? IINPN PN@@@@K N@N 0N@ @ @ @ 3 NNN0N NA@ =@ M@ I@ aa:=aaBF8 !BBN@N 0@ @ @ @ D "BBNPN PN@@@@, #BBN@N 0@ @ @ @ 8 $NNN0N N@@ @ @ @ D %N@N 0@@@@, &BBNPN PN@ @ @ @ 8 'N@N 0@@@@D (NNN0N N@ @ @ @ , )BBN@N 0@@@@8 *BBNPN PN@ @ @ @ D +BBN@N 0@@@@D ,NNN0N N@@ @ @ @ 8 -N@N 0N@ @ @ @ D .BBNPN PN@@@@8 /N@N 0@ @ @ @ D 0NNN0N N?@ <@ K@ H@ 8<aaADaa7 1DDN@N 0@ @ @ @ C 2DDNPN PN@@@@+ 3DDN@N 0@ @ @ @ 7 4NNN0N N@@ @ @ @ C 5N@N 0@@@@+ 6DDNPN PN@ @ @ @ 7 7N@N 0@@@@C 8NNN0N N@ @ @ @ aa<?aa?B: 9DDN@N 0@@@@F :DDNPN PN@ @ @ @ . ;DDN@N 0C@?@O@K@: IINPN PN@@@@: ?NNN@N 0N@ @ @ @ F @Strings (@<<<<<FPZdn (, < F P Z d n x g/8@  $     (' 3# $* 7#   ! *'=$ #**=   "'," ?$ -:7*  > '4-$= -#(1K  $ 9*# 2T! + 5Q   $7 "' 3C, ! ,Q    I' ## j "5"e    .$  );c  <#? ! 2 C) G\  7V!/% 9 B !$ Eg*7 & ; 9 & >,<   i  : E!$ -_     ^ '" ($=  $ !.   . @  1J     ?C  @  344 " 0   D@ +4! #K  A@ G !  6   9 ?  N"    %  U  /\ m     44  s0$  20'   G 0 8(   ' A) != 5 #   6 )!  [" )    3 5  B.2   -  @)<#     7%* ,: E   &!.   U"     >   6!%  5(   " %    *   3     !  $' !      *(     &  *  .  ,'  ' Ʒ    #   !& '   0     "  ' (    .         $         $    ;   $        .  #    .        (   /        )     -    $  "        (       $ 0      , 8         <    6     !   $3   -     O   %#     02  /        O &   9     2    :& "   :    ?     4    ?    $  #!2   $  )  ! =    ( !  -  %"  '        5             +            (               ,              (                      -                "     !  &       !            &        $            "          -      *       ,        1          '   !    '   +   "     #+     #        $            B     &    '!    $     <   $   4          (            '           )        (    !   &  ܾ    ƶ   Ҷ      &   $    0     5  '  *       1       %  "    '   :   $    - & .      (   0    )  ,      %   #       (       % 0      Bassdrum (0@, <FPZdn (2 < F P Z d n x &|8 < (iT.'O_5 :\4h>Ac>XJHiopD lLm}m4 1GsV>3\, @ -ul*oz}`}m"IcbS+$] mdP!8H+<ɷ֎ E(o -  amNZab_ME m]E9"E%P" r $k 2yN lVi_^kZE5,yP=K$K3Y $PpN_p<@MGJ0)xq1b^ BA Q'3& Z~| tW |@RjoVCV&-4S1JI( !\Ur)m%zbOjFUIuP2)OR5d*n\K+arE^`\V 1\bxhBt=3 D-];M;ZX&a@j7`oE\J!Fs [Hv~Q#4IkTrR G*&-cj4Z8#N# z6,VZT{+A/O)p@WN!2 P ;`iFX=z^Gj ztZ@-xW 2mb>Ye6+y8kRf7)wxP^w5FQV%36]h}5n jG78&6jaD%F6RP ont@Hf"7" N?@&[B/&:v'gfScl,B4iUYU6:)Gd7KA,E) ]}_LOC`MvhzE!Krpe4/<3l]be[AczESV#yK.mK.!BkkU[!M{y@= Y>Y7s2"i}& 1eteB-+=;I^R 49/7a(quv229MZ8 Sv3[<,yQf ajeF4sKdlyMIH[J?q'@,"Hzs[c l9BP,4oL>[#.&Z/^D*#Z;OI0Pc{[3 lCeXIM6a'j[R|V~/k-Ih-@BFmPQ_ ki-j!YEJ:IbP|Gt Qtjs@42ekhw#.'+MZ|w#Ker(.m X~M`0=lX, OB &,'x{\?,%0bSw0?{,f%V2TR[vHF;`n&55`0 X9xKp^LCuj<c63JysM86q~fn6H]1^8y4wIJ'\Qifa+zk5lj~KhcIto<1_lXHnVgg^p/B Z-8?; #aKx+!)4m@)3m(; -bJ|o)wB9XV#fap0G .V65MK7'Q|p$oy`\CIGE%Wycb0>+gH6B,OsU}xP@r^,*.+s c.2+y&y`^ Z! 0R=qcF/$wcy+s_8)+6;  K. IWyuQ9o,8Hv,; J|.z;bD"?]XU y I1eKn'TK!_o{ j Cc-bH[qay/QqL~ {`Ca{0!%Ld.?S/KO&Dl'u|wqnvBr4d2XIb Iv{ 6!5o,= jME9D+7'DQqdG=Nk0vK$o%UlrUo8W1`gXcx.+&W1Sz5.H+$,0f`ih@ +bwI:j =O2$O:L.$6G 1.)C]>=?cDKy =l%R{ V*= nQ=o?2DN?wccMRde_,gGqUTnc0S.) Q1Ci9ON63 0}? 3#P/Xm5|VeL!36dunFuW. OnOm8Oh986sP+% XIC2 Tm,Fe(MEVsCG5(dQf0Mf ]}cS:g6aBOJzGf!a_c5=8$9GC+|tRcJ "%ImyWq5I&4r9{VnosYf0FgM "BaD&?/,;l&x6~pX._\mUKZ5*LPqIc(~q,ikp^t)fX 8Ek|e:yBeu^hh:"xiJGRkaM#+$"Y"J  !kqN#||mAQY,F<-5MCDZVQB32a2sW6&oO$& WkDsu]$x)CY .GqJ~K5"`z4n v(}T%LkY3ywc?ZY=L{~Mv|HCj_|`sx HflY'w jaqXs.Y*!J>%|aHh\(._]D]g#0iR;T=*}ZJa|aMDmKFtlf$9s ax1L[YZo+'PNp l.*#/ Hoz#U=IB10ds]hN5S^>XvR_H_S\/#ez>  Nj*d$=Iru~BZqN`KvbEkkwlw[[ViV<xSnXNb8\E`bp]FErCE EoXtyb_IvV^m]9WS_X^;m.D KMhN(nU:jH.%~e#)dFWF7Q0brU+#Y7$</%Oh k>cQAL# /%)nw[]#Vv 12~ic(tmt"b-mc!VMigts/[j,msCz$FhnbT(/9mwjE{enCD@;0~T\fiWcjYw4e`H_Ag WQmZHLgz x\NH*<|"MVTl:th/iVmy?z7Igqk]=kn$hvJ{)q-C`AYCjC`{' g;]``o>8!I!RSi+08HOs*,YG,;"oB-*i+?$g\k_tk]wdN0kbcNK(!uBEHshfP['~nwz$].\*:.qPWT@Lk{OekR6p,Pn 4*y1?e{1>yjJ0Z#+)"g+``g3YYqt^ OJY)V-E_=1?D!F!5RI-Ou *j19w)Vx[|)MQJ|x,q -`wjdz?>Q=tV.l4OQ'b nttz8 ewg>G2-Stpc}/M7Oc!Fx[q^[uv B95u<8scOe~9z8owWxHwn[gE }nbc > or$bcw']  !D $3H(Ge]`)0"/\2&2^@LFtTQ o"e+zGXo> #<VHa7Q9/o`85=y9.TKL@5$qc 1lxy4,gmJj ENb:+AkQ{9,n-K>MoX2:b~f,+D0@aebq@3'D&|+4" 9sqb'83(\/ op$W8tT=>NXhr<r^9ML>-EVu$s[cyYL1%BZHhdR Fs1X X/ HT*ne5&m3.%ev~*cb_S4"`er@O {j8rk>/9c=ZSXdtCqL<CnS ux{yvJnqhkpK{$iNYMC?B#tk<r=;Uz O1moB4'^rRf sS H!0.W1)(|xBjIZ -B+$@W +*6Y6 P=+ A R>Cxi\ 3lrQo} mUF\@ickB p4oFyO]_:TfE39<S[L CM$ +\"._S1OFT8>&,(;{vqIo`Ug"1><T9r7+nneq=!]TR ~7[K=}!8|"q?['"XBQOjAAECx7Dll]F4;VM 6Xxd(8S{#Jx:d\ =Sx@( h=/ B 5I1:h.c2/:\~y.C$b:@Ap0nz#l ng7yu.zgB-}+ut m|nA|g"{,lZ7ofAi')q  l3$ >"{ha=IQa2XL~[ 7?) %m ^-$o ' = DT!X1<"P8@dQ ' ((=+9M) `y+ T ' -<=+JK.9YlT?UY(5A$D0! ?6ELZ:(-#|8.?)`U'jHU~8 PEVZ9[!A3Ya ]O'dkiI.K]Az6vQE87a9]& c4Hg8 q,9= 3+F,x3`EbR'&'+RjdL{V)v03O& v4x+gK 1bOG zA]/2In" 5/N5:9l-EFYkBpZ* g5\!1jS'C)!%Is< )r'9 m/%)Ea|m{Q' d!+wDdA9Cy yc4!  HFah+=:Yssg# HlCHKV]~67{(u= " ]NiR+!:!gwYVo@kFI)y"!SE)/KBGH,+=HBE=?|x Obw -a<Go"*If QU S; XxnJe'p/<=W8n)9v^QG%BA Z<eXk}{,@HU\K!h6'GY0wJyRXh2W/y H\4 ms&#8/zesH/ 5g.aCf*62O K{ Kqn);28m59evj ; I@j)J18;&53 .9V$u`'uLE&|?6+AQr1!G; E;PP%Y7' 6,[ ,& _/,#u1,Gv>(n|'\D6bX%? |j6`)MNnD oPAybVZX{jz [{h!  },lau60MzPBcqCpvR(2`b_ '?QfQ8snT[dJY=0|wa }dS,D8 lyA 4F5..W |^(:>v h RK<:*8?$w[ [c=L :8>1V)lW7:V8Q*&)`(4S3fibu1 l:,K:M=BuA YzH';!#(oa]qwh^ E O56Q8C9 ? }`rLU/x2fBOQXV<tF FLwJ<lLS[FPm,&_Y>H6-CQC9 p\w==!N=i ~,NN7pmN:BL_a1hfr =B&^7pX clj;.[<=}n'T~PN D'-9  gp: xlc/bz# "71a6K03.rvL ;.B!?(Bg!3SW>nCYz Q1VT ' G n)U"dnCC'yF@V7 *i[udCi2 3 u>wps\l7$t* >PkT'U}6ri*H6TA% VdY 8M>.RK %{P&\WGATEa& RJW(W9Y~V ^;o"tG>V' %#} %U~,3G?R?4q9 B0XA?A?qHd=E1JcAR$6J&N;@[9U+ +" 1v-Um<@]CP117}@->OC m N#X9=>(! 0gldP:$V9!r @X=7>"1*{= 0{NHL2.d((GP <&-<Q 4 &_wS~ "2R '<a;5B# "7Af% 6{M`N'WJ5-*q41,.~dKe-d;2g=g( \ $%NDL-V@G*E]'%s/W)-3iFs_@ABa7~d#<@l*u 24YtT%^a7# 6Dofs8M GKRF}0dG=I'_M'lj'A(vd@ [VV di/KK2GpB/x gmi`O9#woM F/6-% EOY0& A,,>DNO*g$.8 $w"6C]M?,.,Qt'Q'/i?*1, ]=oV(nk$((3HX@L* u;UV>?""82' 1i;< /P~4 n1K 4P\J) ,d=D&'YlOe o! N*!T "oPd"FjLwB)hcA3o*l4 U$KV0EfG \'M Cl=TM0K{Q<sv/~B}\0s$%mrYN5$;,a !*)-19 C#(t,m #CkzjZ V /.Z{B(pY*`[:O;^xwQj ^^ 8$oz'g|-?H2@8G,p; *b-k * q]%G9;gL@ %8`: 2o}  qL! e98l\.?-mS.M8J= f;/["m;j;#,7B$5>1 1?0)gE+2 @6j,t R2D +N4 OC 8?M6z}]"CO$=?2 &?" 2=SLW<>  C,$_{ J}nf+4UAh[L< I!@07B+8XRN< ~I4~b <Q62 ^~-KUw- "?9T+R 2[E5_z&X MsA% H%+2. Z E5LdHUd6 o4%Pi*L'/6K7 J 9/G ]@c?? ,"$+ho2dJ'U;H/ &):7!77Y1 ^ ajW(1_2AM H3~e "1~$.z3 R !2 Cz<J9S^+[2#b6[ wj,h`; m2cA IB#Y1I F,19 %V:%_#0! *E B-) jk0#-sC9( 32/) # > {&> >'N5 K # P57`5&(MHjOyS]H2>>M(0[]/EJ K=) -CAZ} 8Rtt%%@@S5W\xv=< B:  v(7s[> \2'HeXJ}m#Y%aDi 8)$+G-1%. A7GFL@@4?hSNh?4)"#s%''(<C#?XZ 4H& V4I@Z!T.(2ztR'R%~).Q E%,KA+'YA%!V"dTC /XR1[2!%;]/ Suf a.ue} D5 L!bRc.v95W6InJq"yZ( j!wB 9%BR F*(D%&"(g4MA 7 D;F/f?2[,?2t4rYy7zStB1*|  K[MsJ)6&o 2$7*&1W>Tj:vqPa% n#M |P OR- N Kk-'0fr;^aW& % I _wt' )?&4i&!(:f7OC <A7La$Hk# T-'Kf0N4 Jgp#xw/UKn2&Uoj>XC!(9OA]x(=8Y!b=)N j*!Ce*(%C'f4O Ui g-?M{e#zK4DD><%:-v22&3-/J 5LrGC|F@/13v$,/S(I xo EuRh<a(KXPCs J^2S5'i&S:0,,*k<Kt#E#@W( ?4'#QG+/|c/i` %.dOj ."*iN>I4 Sya/7 ," <Z0e85w6S)0>& =H4i$1x-6#/ZMN] 'BCX@p5r u !4Ne7* (0+C/vHO+Ix  61bh8:Organ Bass (@ @Q/,            909 Claps (0@, <FPZdn (2 < F P Z d n x $7 fT` Bf{$e/d kDN (F|wl7ː؛0%OڕV+Ȑ` fH_初حNNp*`ΙVŢ4T`L+"Iļ J` J)Q PaH Ѵf` W ~7ο.$<3,D̶*:bx$9@I. Ln'xt6" t ~.&PHJ 'g V 6 *fX ' Pz' ;v"R T8jh#:b>l Het 9l ] &h"0#`d<Zv "&B c- J f FR l&J0zR `d>tNH$6j0X"8z(R  /  G O (sH|`r^X ( l8"p>T/ك 患&j3DXɁ8~>\ttn~P.xԍ|!2@Pn<80$|^$}("D&hv,rAG>&JMNhQ" |H1pu7W5&V귰!9& J6,ްCx!ϴj̦LEP<|B̪ӍI|2Q#K'"H)H/ >/BBx~v $T.,`HJ$dFIj9 ("64ZT8vքR<X\!F d!$`,Rj8DhHԶxzXRjD jd ``|48mep & l0 N8,. &V T V 4  $<p/;QjLR $(BC]fPK+ rjYP \z~jR6l*Jb6 j\<rBRHN2TR8=h_\@hb9Y8<L4CK-M9f+^& ~n0N1+{.CX& ؅^.8}4oFK<xlHuKJj>Qt~>76tՖ$@/2JOFx*U˳P'@s #徯2vF"' *+7~(.Ds*4 fZ; %pr ~H>`LRVhD!D <6l(vB !(n (|DP02f` TN< P Z~dP n6H. !82 t <WjbTnX6 w *0#V Hlp  z>mL ,*'%q;5 '%}܂UC2 ^Q"tjpԘ"Rܿ&kr&E$ ZIHV%y񼊏+w\) μp&Z[q 9{ *Dz܆'An+TfmnRA!hߢWL. `8[t ʜD;ZjkL#fZGOz%՘4r*xS<)b^F2b&&2:uIX&IGAv:zT2<0˘ܹ| PlN< 9&k6 ]+x\ 5y3u0LcbH6Oo9P~~Tn D2+HjJ$RI"1頒1"'G+o~DIN@/HR~ZŐBQF `X bDX$ @orH8'>4^/'. Y▶tZ Vb/k/M Ź{"8$p#4u+F*pG Fed 4(9[ Vh( \@=@ 0&J @>Vš1$6 JlbP4~ \2A1fF%,'pU $א~֐ %, $MV~T^:6۾2xd2.N"JF:ׂd65$S]&v~d\-^/@D[UB^)LiQj@Ҝ/{` %x Z 0Lh~8,~@ (9x72r澢 3VPF4 ]tȬΔ j.!4P"و2^tGL,t8Y-VH,zZ6J14X8ZPZM^!Z*L8>^/"\ 2R+n xި$5&  ZݒD1( ƨ ^8LX@]:+,0)x < Za4F8/(.>:3(h-G0@2ռ>"24r8 X ,2 "X'`r7-.D fȞ P>b$',h,xD`2ǢJ2 N$"0זN6@ @Ɋ H  `ێr9`*v J2hv̼2 z):0NnR NZl.*L:6(`Xpt ^$ <B܀0& X0|1H X&n $p4w ^~T Zl5^"2\ # ޢ*^g$4 @ .^| x ("d Zr' ݲH/ Z-( z:2"fb .R= t֢p~h#.Hٔ*n Ft\(`^ b00!66 !۬z<VR0r.8$ -$v,#> DF $jF  R F,H٨J#nX΄R = + J4~ | &R|(>h َ  |: B @qCZ.-B5 ^p~*܊TR,fJZ"'hfj`nI(8 $~zTF @T\f}(^ F!(P2*>R #&V"  \ P|8:n$xJ. P`^L*!xt;RV6b P $:P8.ZDj&| $R *(z @ p F&jx{{Q| gDHFHBb Hv Biވ> \p0jnrZYNqs_9 ` Hf0jJ Z\L: pJ. "& & 6x( x h, ~DJP"b 0b dZ T4  rp $hJtF\b >PP r@2Vrt34HT z`P P6S YO  r Z`B,H NVLTD*t XN T("FX` $tPd @$_\8V{V XBJD Fvf4L, 6 d$xZ vl4 B b hBb  0l! ~FLl \ t: T2pJb^~F T~|d.r8Pn2][BZ&J pt"4.f(p:`|JRT@ 4 v* 4r fTztj"vPt  R$nB $pT$pzXJ HX+Z&rHjN(l)$Pr eJxx 2Xd$fxrP*Txz^68 d,  Vf\~j x8fD z^(.J4BZ< vN NDp nb6hnV<(dr(< >  ^t .6NL4^& >BR$$:Lfn>JJ ~ 8  "TtrRPz\6Xddis `b\&hhRB|NlHdl8"XDpnFT X 6BB &f'H*b4x,H`" d80b(C[ZjZZzof*"^"^$bX2n4PDj8 "|Rrv jx0Z\2d$2PR*t\NRth0VN^"D`(tdZ d9q VLf"lf>"prF.wb ph 4.& BvI"x|4(hx@zr,r`ZDVR6F>PL~2j(8@l< n&L0"&\(x*mddxV*~-Pf(T^\>|`\ 2 p TH0|pLPH8j*D*"FJd 0p 6h*.*P6&Fn0x"d 6"MmrdFh61rp=v"8*\^BX\N.&jbTH$"R:,*:j<>2&\2ZR|r;g.&*txxLL<HJXdVP:6M#u *D6fFvVh4xTp@8XL(8jFd&X&jL &~*4|p"Rd4r*^fr~0F:lLvrJ"&0n| 6NJ` Fb*V.pxvxHeiDZp2X6"b-dXrB>RR_x4p-WLZFx2~ l\4@*X^&. Qqjh(N;ZP"bWhzz~&.RX"J<F0R|thRJh&Pnzx4nJ9;Oz*|2]`h Xb8,#N`.4&~Z@FxX RWfP\4(H&hJnn \LrD`(pX4 *t@*@,}/OoD\NJk8" f6BhmIB+=|hn*:*l`#&hZ@<$z wX4R 6x`.RftRPP& JF8h ZFhTX:S0z~f~pTTXFjDTV0 ~$h8 .x:^zh^#f X0r2.vV-GZH vN NN.n K`&&~bLL8N6$t<$dHV$b(.jXVBL &ttP &J$HHH&Rb(zt@rX<pPT"Twu~lD">d&"$; T`z8|Y\~`"46zn@j$"@H8:zLNL< V<B$fn&|(:UZNt`z8<fLbP~j~J8**FB8NP*4|2a"PvXB6~@Q &$8TV|znN.XDh^.8Z`Zp. @\Jf6z *0l&\Dt n"x ~tn2*FjHH68HR,~`f*$`f~>2tP&`hxLH200HV HNd(6 dZ B`lrDC*l*T>tD<0ZB@xJH(PTPL|"L ,:T H  t0^ 0Vz:rH>pFp|$Fq#&f{t4@xf.>`:@(ff >V*Vb5A8Z><^  D2\DfDf 2*,dfrxl46h@HXxrp8<H68L2t,8mDZNcmx8&/"HF2rj0 (B4^ BXztXSzntv;'-*<:.v2H`4C2`8 NH <x:2xHRf`n8" xl0D(4vDn,ltb*("8d^ 0BV4vJz~SNd6`*_7N`@2 ^TTFbv|P">Z.TV4 jXr@`(izN(d$H`(H*\Z0P`TV.Vb^0ffn\J`|$xd",J i<D:g3(Hll8j4ZP &H 4\jrf5.4TtXh@<^" LVR6 8V:^<~lzJRZphp4&HV(,bdB`n(:Dd)3! X B(l\2N*Vu$:F* f**n~(R40 B o,4m>bZ&lPr'OrF2>B8L>f6~L"D:#?Vnr$T|Rz'SX ~V2F|&z(Zrf ZNc,J t\z=t5SzVL>/ >\NLZmpZDD>.  nD,:l``2fFJ*(H(]W<(`p6\Y@|zt(J4@Z.d4LV,pJnP&xf"$ lTB~Z`R0r`:H|rlWppf  lt8t 6y4dR6x\ 'dltCNjLA2,DX\L|{`0`vZzrXx$Q^dx@JtPnLBp"^:v>J&P(l{6Rp`|TbjNJD*-L^HzLNvHn\\H(>Z8|zX*N=< ~P\  ^."P64(\`pdZB42Jn\<fTn6,V"d2X@( RD\a @Drv> j\:lX\hxT\vnb~h@phx|("l"D246:n<,<x|N*v^RTB!.@(e zH8@d|V:r$:*O =F4 RXh x8*>jV~^&z^kCXf&N`$z"L1jVh^VRP^D6xn6b |bLTNb8lR>XJ8``0"FN&8Fb.@,8`Xl^:H@f:r8Bld~lT`(Tb((PtLj>&0rZbr2^b> l]J fpTVkvRD6B LMp{j/3:6lL:BR"@h@PLhBqZ6"Fz8fdVZtz Vz*RZ</\P0 .j\H pjU\@a0*v`dlxv:@TVtVr~<<jNGRosw2f$|4@&ZKytnxX82\lB $VLT4`6$rN:JbF0vPtf`Pv $0"*b:,0:nZ8\6Z"twrOO<<HdZ=J^X(xvF :PH$X@Pv@tzxN0 l^zf6fD^~ <x@(z8rFEDR"dN,rN2]xPj@H~XD*Btp|pjx kf v:vDFFblj^HX^@ H6|vrVPbP~ cZ@^l@rD D@v* " < 8AiNt<*b`htTr8`PDZV|$ j (D4lln 4$$|2 4  n8&H@ Pjhp@.("$@BL\[b,`NH:VD\,V*+VRBjj`vD|J*jDFPbT:jP,:2oJvprR\ *n^jV~FNhTz&x`T::4,.~n.\"Dd2LD,\@\T:hrvZDJ(:*`dJZVH,ztNj-F6Lxd\Hizl&XhdxxLP>,2Rn2|~p|zhp||, >2\pfHL,~+L3z"X"DJxv8@(F8$~l$Z.2VjT6@hhX9M2 \hZHv~P>gzn*NdF:hB8Hvp``fd,(tZ8.X fH.jBzJfjF6@ht$P*&ZVh PxP~V&hxj"RZ<H@*"L$(2 4Fl@:TVl0XJf*DF4@2NP^@\dv:.6 f4x@(Nl\p00H@f. 4 NDFnDhjF(lU2h$PtBZ!npRj H>ph:6 2j,R&x`0XFJJh4(Np@:f20"\:Rr z|98 nT048kBSp $4Xf(nt|l4|HTfx,$F>lV*PXRXr0&B,(N"ane.R8x`n~|PV2l48Ln0 Tx:*B y` $pJ,("0RX$B0"z`b0VDV&TNJ&hn`VD0(Jxfr`HZ,.v|".d&TFd~F($lFjHpdX6PrZyerx8P^,z,jFNjj@ph`@NdTS h$Dr.Z vJ|Rj,~0T<x&th4@& ".hP|N>+vl$@|z.6b>Hv|b|X>dVpxrxJV8pOHUV?kklzb(x: Hp^6HFzfJ lfl V0XVx`**VlH(Jv,KhNB:&b{cjtR$ $\hVT:&6Bh<**x>DN1T8X-xc JXjn,lD$*( RPp:htZ28P0@Lnp86(nvx<|VBvv"4~ 0`8BL|*"ThrXCy:"vd$d@LvzN4PkeX*KH|X hN*L@2@ L.&G6vhf2Dlf2>:2*.:N,^`kBZ,6dn2rBT>$<|tlB vt0`6$Zn>&Tw ~B>2P,F,@z,^ Bz*lh`$8J[?H8BP|R~F(`6tpCPFF$fPni'MPq2^[\FPfp d^ `Zl`T, n<(Rnn>&zz KV"DX-X@9]Nn2E RBf<\*Tpbl$h \8v`zR*>L@N4:BsRvj5oxV:`(D D^hbNt:l\vHD4|(DH#ZjtdR><2>2"~2H~"TPeXDjM4(zB~hHpJ(px`\LL<` 2d4b.NTrF@&966PjplLt@^B^V)"P.R" Dx0($,F.$J,lNH(dOV:^dlr~\,,b("L8X2.@^"&lLPh\Tb|V`"fTOO8:Ntx6B\X *6@8x=<x,He$GV <xHpBpfOzx(0 . n< 4`TvzB@! R 6LD KNVrZppDHJh,tl `<:B\de"2^l:2VR`\^@TlZ.2`<zr 0P$ &l(@b|4~<4hr`<0 Bh\XL.:2>H`z,0lvXDB$0tJZ8,F`J4l`\6~0`Bdm=,.6Z D0xn\.Bt (&{dB\xRH D0nn>f2$t2z6J $Jvp&K]L4ntJ:h,,J6P,e , 4"(B|8,G5rZb 2H& |Zc4xf`&j:ft=(\(H`zL$TxtX<R, blNF,tN:ltTFjvr(d2hN8<>j< \RlrR VRKpXxf)DxxX$8<hvZ, fzfbpHz^XV$*Jf1`|]R@OZ"$LFZP$\~JF @"D$zn7@\6vHtDF V`=}rDX Ox^P>V3ZNHhHl!(8hdLX^8h`V@l$@d RxV6b0TX X.&`hlh~d: hbnFxll"R $t<$n}RnVtdN*b 0: .n:*&B:4L@BF6jhlhnhPv0.h(2*rrz6<L :XZ48R|4Z$ 0txHVL xHF*JpZ~~\l ~e>xH(l|Tjtfhxkj8Zt8p2$>QXTJ|W H0 r||rn6JX,<RX|tl <JRn zME6.I<8HBF"*zF +?*>Np8tzXj&Bvdj"*PzAL{\jv gvd0\dk#E ll0(|p^zt8<&B 82"dbn'XZP~.<^!Ga VRNh|$L< &@@pV:pH,0X\2&trhxlBnvtdl lbV  (0\ 0\^< `Vh7?80j>zb(6[g P"L`|~D.26.BXqWl6,^|v8l`0,Z;Y]nbx6>|, Atn~fBrF`R jDdG&5ekZ`4 "P :F( *`2X|vX2HHVthwnL2 `_0*D u\o~bFJJ4fDD^ffZB@.8@8z8F.6 b.J4xph vHl~bz,  .#82GbD& JXh$p@ptVtVBHXf>B8-i\PiSV:@ @DrRnDFV^x,R$4tj|\< hx5L8nRsjq$XhzkxZ  ~pK 4:7m$r>byD` 4*FlN>^ &JVlZbR  Tt>0Ke^0,b202JRV.TX:>R8 4R>N&.>^Ld~8P442M&B^pR#vw_<L&TjF6H:<B@8xz*BH,."ZJhxd$0":P6 ( <[n4F, ,hff]Z?J|zB (T0$6FV0$hh@FH(3G?'>'AZN&<tz3Gf (tl$2 0NHRZfjLx ~fX6>hVdnbz( Dd*\:2Tr^:< &<4bN^J<ML&n:| 2.HfDXn0H fw7R(x02%?@`xR8..& (@"Dxb(VT D  ^N^(bLN`xVf^NVBF`^0vlt|h~`(bxd("xtjt{{:> >\Bvn~vZR&tZp jBV$% #1}*,80j3Rr>z N^ dHB48t*:|D^ R |HDTH@(N:=Y "0bJl&2dX4BV(mL ^@PhHR\)9+Hrz8@(N(<|b8-7*p&\^0$:Z"H0"zXR68>*VTVF~ 4^^zHplXbLcohAgt^^nbr62~raZ"N82~bBHh^pt\D2\\\B, B ~v">6@X4$"rr>vto`pjryzZ`P0 FJLj6<@Fp4(*0^tx~0Z<060<~qBp~4~TLh<:T8L\\]hHSEzXV.bn^l~NKQHL&:^xHxJ."p$:0^Zp`8 =9={|hvjh$ TfXtvZzt~~dl:\, L~ftd802>tZ~hdz$$ " ZZf (4nl$|tjx*6fZh4L(EgPjd|4XX,*bESGI v|6*~r(\nx>"TnZ~Vo1$6f =s"vvs$|z`(4&P|VH@jkrPr<(`L*4` PT\/ vh08." TbBD~ygl*6xL(82,<6|Xj&4bxfn`>>> 2* ,$T2 ~,`pLv:&L4 !@(HLdt\ > 0t\6lT@|@|(&6$JD@ ,/[9(hN#j*N.<X"0$66zxF>6>*:8^ 6 26c;Y L8&pphb6tND6\ZH\tn|"9e~P+)<i!R4'hvf!*B>zrxLV|>F~R~~Jt~Z rp^|NpznhPNP)Jbnr8*bf`~P$@|:Rxnz8`.; (6 , Pv,$ZZ\ &0B3{mx (AI.0TlX@0* ( ":`hzZdDPL&(,"0* 8~2,0<X&:xV:d\HT ,.BXrv2H (z:s]2<L' 41ixr\TLXX>DXPpJbp|J,>DD84( D4. D@&0&2(@H4$.*H  4$BgYPx;  688np\<  0HL[{VXD~nf`PZ~r>*$68J $&"<MVVPa/(RN.B>T,(0<(*h0(0HHdRVbT$\FbjrH\$8 nb`zrv XTX\lZ`t|2Ph0T6~~ P|H8>.<RFdVH@*pP> +~&dD4TZ .62X0:Vpt\R&H204FTpPZvZTPCc4, |* ;T P BIrPJ 4ZO9hu#<L 8:*,&>,:0HF&8.\PD~L X@BE%04@(:(*<T| &(2 @   %_hr2DpprhP8.<( .( &.^,$2FD 0~ +`oMH\ 8*[| C(,"DT6.$\`J0,:"pf0hZn>H4$>^BBR>XR 6p((4 @0Ps]4<'! 0N<N,"X . - *$. 0 $ .&  ^Bv2$>:8C&6&"" ,*.((ddJ`>H@HH&,,&v (X\>f4$6*FBP .0Z\4t ,&)@BF"& 0DHZdW{LpP22> <JR"4pp*V(KvcTdX6VV@V".x2&L"4V($:"$P2b.H(H?' "^rltfV6T" 8&z:<F;?lfddfjZhJ$TRV0@d xTB\&8,LH@I& LbV4D8< @P,.FZjDT:< BnBf`)9,N!09." F`&  xB&L>F(:(VztVNJ:<<8 ( 42 C $>R*B.BNp( $"$"B0DH<Xph\v~L0ZD>\z^>8>4`F((0x~BVnzZb`~PR* 3l|lh6'0V\xbj`v\A/6,@H   >>8^xH>dVdBB.(,(8)9X@BJd* 6r~H*@>J@LHBn02..*(<(0$, 8(%B0+  "'1:x8&0 6D $B 6D 0.xBRfJdDXbB22 $64H@8R ( 04 , :6.J8 ; :F($j ZzL`HB"  $1)d,TV(> *(00 , .X&.)&$":jrpnZ(f>8  ,2 J)-(N&24(. Z:(N   ,P4BFB4HBD,<.( (,*7,B^X24"  N(@&.(B4(84.D > (J88 . 8M0*<_F@;L*><$2*~6 V$ .&"2:: 0(>&PF`>J$0"<>L*,,6:    $ *p*tr\n,L*>&  . :><J   &8.^H<0"2 ;(<,( *> L::,* Z.<ZZ>JH@6" 6* &F4.JT+<]&1eF2T8B$ 0<:D20/@8(@8& 8"@$( 8N 8( < "   **,44FP,!#B&=d<.F">J`<zN/'0 ( " N,$0  DJLPX^^P4$0.@FP* >*2 >J`Zp.*H$B & .RXF7# :,T($0$0DdJ!=&06$" 0($0& 8 F46""0(>.D24 $.  >I ,! 4@,*426"$ 4 "&X4&JJNFb>P 0 " (T*V8,@ $D($ 2(*"    J( :.F P., .*.20  J *:2>&H8%A*64)6 + 4@ F"H>V,*8>H6( ,: $Z.$$ @$4   $ .0*804:N  """5  *9-6.,*,$  &(8XHH\.&" $(4$ ,2@ " ;# 0,*,( $:$( $ $B"$ 02& 8Z.4bLhL\@`J6 * F 6( 6&$1$&. 4  ."*  ( -   -:( ""@>>b(BV0B,, => &' $$-@  " (3%&$( ,8 : ,D >0,: 2:P  0FR"0(* 6<40>D F$ 48@.(4(, ?42&0*   $>4H2"."(& (0 "8 2"XTOpen Hihat (@Z<<<<<FPZdn (2 < F P Z d n x 3 Z[tZhV&Z}+L?F̯WAQLSVf,S Nv@,ӆ֜]?y@"hLMdՒz,BuGr7}JC)a=*- =' "'ٮ9bhۻOD6IS=}-O_ GlFA;:N--"`k:1bܲ ,9󛄀E5AR%҈uK5(?h9FP[z.aV j9v6Ħ?4HfXm¡)|^ri?$ C$.LqLx ?s @I-SiE~)wV,X:!¥U'߭VWŵCK_٥K,<<􌡾1,E`_=-}7ål/C0`ғ2P7GP󒯚\qB MŶAyv0B^~@YBX֗DWmTg&۵û%@ VkF "H´q >Ot+N}mwSi2 GkOC!ZHO{;B o xM\b5֕ZR m?$拔;Wh|z )/)z"jllVU$T˶'&_JӬ-tLaخ(3Ǩd#kRozgG6҂zR;?(yXv-'7X.+88 ;xNiC_4La6zYCu|&5߷܄fӘR7j85CsοCĜpTPveİ$΂X$h̶VdQ3Ю [1@ܴtWt֓-&{ڀ"FΏr! U:.Q; 4$9I feJ$ / Jg F[`2%!MZ৏/)YeҶ!kz"ܻ L=XgJ,-*'' cm} )Kĺ@4BPEv  YbԷmA|}#^IZDȟ*Ki3kGCʬU6Id#ay4y*g%~bp5a7  m*DHHw(@Rw-IT՗r?}C^]LѸ@ 1љBr jXW A/;艧`/ a&NF t=>$1ʚ=x\I7۠!tLqWM"27 q(P0c<6 ;DDn,Zk7;̒6EĎPA()x7@r9 FqW 7V6`:cs CWepnDCg5a06>% ЅFm9V!lY)5[  R3PRN&g .F\Ԟ*s_7_t[4H BۜA &;2ӟĿQJmTd#Z^@ӥ9g'r&0+ %_y4#˟ԉxܓԾ} ' Z$_~N.[iT v:# "$>.>F55 lCoo1 fTpYiD h\P x$  L$Xϔ'!F0XSQT% /*» mu׽&1igFʹ/V+.6ӈN ( 2tns1@ }&yCBL; 62,(U +x p"bTXi %nʰ-U5 G=+{( KqB\ @ ) }%:`یC3zӽDNLfU);c45EȅM.Z=br%ò NR 2xKۇGc Ih ߹IvQY;$`Q %Ƙ )]"E !X$ 3,~ ?*G%ϫ9RcP},ʗ- S:f?Qs 7 l?y7)qEPhH!>Щy10nXه & _`f^ )wwDM).m,Ai:U09/4 | A$0 LZtJ1IWSKkۭ %ZP0}z4"Vxy`-VFd#- %݅' 9Tm&@IM(H=b!w & F*W' =#eVe Opz6Rݝ՗1P @'N&Q^YA;i94֚,m*gG.Ik Zs+1R"C@`$k0}E3 ("&`L!98dA߆"*86 t 42(h444KΰR oMFRF@Be5 $ b1) !S / 7u1)S_0$fu %!K-Q/_2 UFvCAMoS8 ](hLd*_ ;ߟak:v"K8Ύ= 6 g, ;/WoЗ@J-"ˈg (} F g Ck Z}& P$  W֢}O,՝Y6HkVDUY-\#6^7Dʾ8G6+\Cm^ -BH۾MOs0" wҮ/#6d7ԧʻU _(OQ% &`#;3z7U p :' ԁ( :U ՘.!#S (K$I`$ U+&{ ڨSoox2P H{ <W+ +h;.%l J{!!.(730 ( 6u q8,\o yN/a~N2y o > 6 o94 ?1)Ա&3hX k6=c[,I^ss 7]2x^S+q"5 \  }ie^ mߝ/:G<v  PL9!*u/ w<tJ'&#om8\&O/ jB  c?Ic @ARJ! ' ºMF)w Ym +E9v¹ێ) %Ko { ^ /G* S8 )2[SS%WG $3s An  '0: ? GvUn (D<)ry(,Q JM6'{Zb.?# /3F -_=g .:DT+[- P# Ԯ' # 5!. 3</@tNpaX"Q*޼'K6O /+%b*ܿ12- P[?FO R Y` /{+b26V Ii% O2!*>9 yNd F O@;hdzg2 0(20+K> j |&lkH  ITl8 j  eV ~?@ c޽`%v  x%5lxsvX;4qB$]!h["V Pwl  $n,x]dLdK<޶ߌ3)}E` V~k&,+6߇ ID+AV4 ^n%F2Sm%w T/Gl*( %NJ!]G6- ;SQ ^ u:  rB,c DFzcܹ;#q('y dd*?ϼ?" } _9f S#Eն l v< Ex H  o\,[7<<v> Z'Dx,(Vi_9dmM5(z%Y z ]+n ݝP M / <+/Ug TשVc' wϒf<Fe 3 TO#I&]\m\%X V ? 1CA 1[=iI( +"ry x!7{IeӘ!<9WtlRlv8Lz 3^ &dTqRy P n'_Yt+ {lM> @#Ng/& wa aUt6 " J&}<_"^r> ~< PTqsvT ,X&&+6d(H9pXr<=7QP vNFE;m"Q! M !Y p)-_ V_c+Ww  `j&ɧvy:e_!$Y>Qqo4 , dݬ /]o ; ~Kk|G$m}Bw@u/& eUd kA*X[& JCZVMA2 [\ Gk:*i3 4@)R!'B5al& &5 "~F.X ;=L 9;$@p -  c:-*Fy R&9{}#{Fl 1p&ѿ`6"|"iG !< \YG!|p,@l>^_/e  x$t11 ;@1&4d+y T TV i _ X( "e \@0 yhC +@ai]KOj9BvM!N k"b5 @O.!OlC v tM$B/K^*k< (Zvv0 'Ä 8 - D} ] QIBP$"m4E.DFcȣ JG-N+ 3M& JV  \ztDT<'Y3J *!Y* P Doc13 ϺK2AE\ш/ce|1b @p^&o)J&)(R!l^b'lq?6څ" c+>]*)!Yv6{[) 6p A/- M }T-|D,bR e7 V$e$K(:C> ,' 8vh%g V P\ J; Ir&]5)XM<'/y\z . DR ,\&g cF  t!3 4<!N )4V . C=v.r6 u~H5V  ^7! Y *:B]S &YZ W) wa"n]LIyg|u j^#uF"yjH +-Q 3>D{-CD q WG߇O 0>^ @$x *U % Dhj` M a EPRg<b_/qҴ#1^&s,C^ '  5b)WC;a&$ gw)) 4  B W .1 m 6 6J \GR a{38ng pAI lSQ ';)~/D'9  z \ooGcriY0CV  Tt12o3 S/oޜ =|FN 702-T A=2%$Y/M[ qQhSd s L X C:7Z:AVr Sp g U8 uLu5k]_ N4 fm+ 8c` & x ށu .#CC4  mn 0r2"E4 " }.K !* Frsu0 %XC|\  th4d'_ ܥ1;0wX I j +&] b VH+/ /=O G ' O I 6 L! ^3 r7] I ,tV"m@ s%+ VI| Y [eA G E&W$>yOm T(S0x S" ـd&{?q tZl Nx c w[0 `T9$ Js  /:K%  a eA_98@vu*->> &PV O3pK?NX<+ 'PtB; $!W4uUuW h > E xg$<]ra{eiP&_9 G thQ>%;7I!h{N\!0QE!qiq+TNK [5c2iN8 )p߻)[L? I T% |,h+v $ -  > =w  ] ?#m gl "$[n@csEt HAWxE\ YZB/be 5e YGw 0a#!  j;IOzP J4[6c_^n;{-2 Y ވ WmS UI<+.LsO jr ~Oo U "J*f F}Q _3u Q5 GJaFp SG | ?/x KH!^3J Q}tj7{D]' + ,!h?jowh'ggF f" w@{-Nڮ )Whm r`@&fU@Dk< E^Yr P8*iQ8 v)))2 + 3 .Az $3dzeD+-NB}ud dbi`shw"=Pot yXs0 , G Qk;rW"*h5K#[vWdQw1pxBj ra; | "R7+iH&yr1O  k 'UN4"2 lM#g?yf 4 p8Z3  7ei |"0 @w F/Qm <Q Qc8k  -(M\ Q \]nZWf{$D Tm n, E!yr&z-Tf  l&, & Vi   \\mx dab:[]xXAnrEr-wVu|R )GP ="Y Q[v  e" d   x -] K:h WO+ (ahHC%z 3MdO_UA]N|!  rN<,@? o* p/V>nu*(C* %k ^m=2C IhiaS ` }"kM ?- ^v|0q1 qgugy l  7iL a{FhU 6Z M2 r g D2mXo~F \0C& ? xP  pYK,!#UqU t ji9!t 8O HUce u. -=J  E J7 w:4R Wt . ~ V 5  ;z[~q').39 7"=ld;iokw4 ~(}I( x]I $ `6hkzy !=U(F}[W 5+ ~Z 2qDSH)k zKVg< JIcFqK z yx(e 9z"z \:v " ;dKG =yr `O8Q*K ySVy 5> :` 2 J; ~_bc) <`32 :|4\R y @^R 5w9N|3 TGh3L> X_YuU Y ; ^V^ [~o (; WWG|Z~ sS CN J <3O lF o Q0phzyV): ~| Z' 3 .`tHd Sb#b5d @Y'oeZ  n()]/nw A) A Af Z+"$FP TXaH b|"gFxmNv  yGU{ {{o o ^13 t ch('QUB AW: *!$ Y2 >`oG{  `I~ sYVDZ &j.;4<. = gCJl) E m ! Dk ri4I 8  z7 2p,B oD >]oOrP xu "A"wOVi " FOpS?= % \]2.|/y& 5kw_ U(O< fz` ac4 3r P#`^N(P I _\Z!yz; F%o K/ Q4G7] X/ ~;V X8# >33o7h~":$ Q)8]Kg e c*p N |[#Wx = LNUSQCm5 NV? a*2J"6$38/w=]  IS zVd 6\<q l, cWH~ '  DJ'/xHr Y "8T&SN[ mY#% bzj ]RqIaWm 9 zY "e-&U`"-1  q`!#>PPOX Uw4.i\ @P2n_Gx:ur3U =w0_  '5~U ? O*c)GmR6e ,;fYmwQ5 >_ n 9 5#, n VA\rxaD/ e8G YJx(bJ( H ;Y*eI{MFY0x"qo+\9 }a= |NCu PuaP&'^#;N\|)h!+ m U0 w] '4Y^7MvG[hM0 hrmKD+; aR6Cl*tJ XuqjQhDxpaY%w6-^pMWy Wt G 5M ,^Ee=]CqIy 7T ~ _^ b): | cP/uqjE6pFu pF]& VB* {V`o_b %1j OI<% J  ^:oy !X8 8r Mm)p[A wv<2 { y8Q 7.~]kVr,!  \ fh ^( \ch>2_p Xh| n9[X t ^ eQ6h|*]{D@ bMY rMyG QMT 9KX ! h&weq -8 p (iT$  ?8  ^LVkR 92q{p_yn6)g~ 2`I_ E&  I"iHa HAX+oP  68nh9 &H]K  NJ"o)?fE' 5ZOd=J;FP`)TL\PoSt'OJoue lbNbxpiW[*0` (z TS+:gU`0dxyG&xnS t>|ua]NlbuVM<5B  /I6L^K|vk@_!! : 0S#)ckPU z M"j{`:&tcjTl L^42 %EnE;KX(j9LL6(yU{DS|aTzlK ]u z`'hA+ (4fCx4 =(AC 9H(#.P"E8n@lP(P JBSp  gBkSdZ[r6p;e6QrnLV$i.Y=yt/v  hT>F{Sk5m c}&UQ+=:@. N%D(ntGOfY/FU8.?#299&5o[;jMNe`bldTf,H>c~2 bhwJ^6`k tW~u~mY~:Q &#N+X1i^"9sR^0L94h Ia-nSLRR, [jP W r'`l+H10+ %#C=fSWAX# nsGM`h9*yR)M`<<]tK>Kkb2Rl8$GLl pUim2iZ5O@c "(/~:x; DJmRO6nf%&.>Rf]V|LUx|R!ecH<s4\aH{&I@A=bgL+_){S ,R{DA @.Nm)[m[WlM! |R8|>d=e` 8R, zX(01kaw 6 ,Jr1sUxlVj |wdWj5 &c|6>^XWv^3[u0? 28*W?idVC JC;:nY Iga(6*0T(eJ   0P~>j)L33i*$4< h1EF4gX& -b \`{Lxx%w`Is]`y; NE P=%n@\D&mxBG ik'Yr!tE_ZDj//;O  K|Vk?\QtjO`wjkD<`l u+n3KMHo]/7YA.9ZvlW-N}]8 {<6a=iB*&e'.X DSEfeI{s2L= |0-@H(m_m\f=yo:Y?q>2[[t{mO_ xVEh F  ^=xs|Q3YD3bWAya1<(]oguy@iyMcbuYK)DHhRyS-u5 V~>``t.o@9Ty EY~l+>BzZTnQ+ XZ?Tp?<1pXW,v6RwWbpquY bB-\AlH7*,f_P%4ypsgzlXc ':[Y0|'V=7Z* O#U~[<$,CA ]3 7wZpX%U5g.P_yc2 6$ O:T>&")\k~M> Y9XV,~sRT[K"Y 2+ !QjAj/Z4m3YLqU\eg1FvrGBtFh*A(Kr rL'j^YP/h>: a3a !MC3,|-$W2eOQQ/^Q ^jF:*k@v 4G +\rWQqvv>z<4>Z\My#+{qcd,LY"`><1dUVlEJNP(;WF-TQkd\tZl@091)K"1^CGH4?ES&)`Pz R,odp6?t"aXQ%wk{3)T7lpf2 ]79*hmZollnD?XUQJc I%qh_'rU\aKTi309&so}ok %W;@_x fZiG QH ~= +{q"}}OPOdN&&sf*DH+ )U_=} h*l[5UJMj_E5O@JSiyo[oDjP QK7/g5HA7G ^^u^!A,79Og\AHM3ODLub AW!TOHG@ "cn AqSGU8jkW_`F/4Uq,W&,tJEL&xrfE"a{6'`.AT~mz@D#mZ( sBm aiiMEfBI&0o2f,&2eyI9(N- f6kUV_V QrX7 IffP*'H.`4m]}?@eJ?vC8F.YQ"D&YcB"7h 2T0\iC*e%-U 1xbKzY]cZ)xupD|cl e' :/y*^dMK!go60^h/|TL-A(eeR5o^>P`$"c $rp 3kU@vG2=^ Mj@H[',s?)k 2=P;*%\|[r]|TzHf)%JG`Z`{QVu&N2 y$xVU=YGt4@A3ECu7zCt.xnXK[l$bs]Df`bPTz~Mj  ?;9s:fX1dfX!VIem#R"i@&}*tp {\}z+swa? Z:jf? %U[WG_4MU}D8WByZBvJn^mxv?tM&jlZ\W <q9NKhfSx(`A5w^SuAM"& vDi]I5k5+W*AI~'D,}21@=E6Y4suu|~oT;r=A5Y<^ :GZB%D+mCHQx l}5=tb1/J= QyI ,hmjligCeA;(JV5?9"K#DUQ br1w I)++$6zda [5Zf[S  &5e*Xp jXv{jI;-ENGID_2B\s}O)R{wjc.5 |<j[G7hjaM@v.} 1*?4ovW BhB;tN5CPy\VC 54T$E\uJfRZ_JW_ |=q$#XBZ}Xd$d*kD*~?m"o1 3ta'R8A+=05b!&\^o15 ?**/4OJR/OW\:_;5K7Ai?g%@f 2gyh"Gz;:I B<n]~}|_cv63/{[+SXK G1r+Q<:wUo' ;*l1l)q|4H6@We#CLE!g ivv%[1bLc3j1wUT\  ?D\v%ez.A\?:6];N~`+I j#sWYr`"4D \sQRr|-6 FzZHpyn]/M6t }jghetK9 goJ ]=\9^+d}>ID cB|S_Ou=ypB6g(/*mY'v){qBjZEF#I{u%OS/r|>}]1'./0I&)v4c@\Y>lLbg4^5ZnR\ &PH 4% >Nm-vB^90&f>ExWPK6kKmC1[8./V`b{#Bq\w v8Mm9bG40.=A^s [Ds.SDGS1du7BZXL is;J^j=t2Qh- ?~=F4q$0~qG_U6WqPp j?Go<-}<HJ6i?)<At!;UA FB!*'yu5!?''yuuhFS%V)S#g%l)*c[;lnEjO9U Wz^w;>OuFHo KL[DKvw]Is. 4cidq48ewh (nkB//.Cq-{qJy;><PUI/$K,m Mi/7Bgz=K=PHAM9l#X^ji,1k!W 5!gbF :3tb/_DY2x^!s P"C"XuM~qlYlH*\fjL!S\wTD| 3+8q`)B^EUBV#ZI+ wLej5Jq!0nc4RYdT{"E m%qxN`~ k:xrI1}@~r.'jd*_]k6d8R]sjVbnS|i-Q /="KOD3 poW>wBd(zL@e   /Mq91#O+5Vzhi.I7{o(/2;Z771]|d>"vK6/. =v QV+?>S('qmClosed Hihat (0@, <FPZdn (2 < F P Z d n x 4&@ {+,*, u:Ͻ/$&Ǜ_ڛ"v#@R/W!OFyO֦L[~4>,98#".*%'w͎ !(ӊ#!jO*nvV H51XІ"T9$Z#L7 ƕ&=I XHN"ک+!f&/\GH25YNdA2OD=u$-&-ك=,=ַ="6k' ݉'In kUpcl[֜j5ζ(Pcܮ,)S 4,*g~ YQ+v&6;tѳH; EM5G0Ӳ\3G(7(O$ 0h#W ڱ#, :%õBJQ'F?3] %^ )-8e2u77 14 H,][K=5x)t<N5d/"  -B#o V =4 >Ƈ %4%y.ħ>!Q=0ބV"1c7jle.8X/ RUB$O`("@7O=/] . >D 0ߺ?;3Tz- ij"J '_*w B$ d5\YE"9q|[$-Ƙ OG.-Wx-@7Rp c38r`lENQ"; `ڸQ#D l/F&BG"  M5FF#\. J UA v(3+ ' D߀!1p"d"| -fP,@ E\> %~5 [ f9> V$ sd5jtt_d*4+ 3*kq\@$~Ww B9 9Q8&":8Hqd!|ݱ&w4EQx ,WzV #H(  g"z   x,Z9"& 8׸2!08X\ 1 DS J*OW|K)j JZc6Ew.b *@ EX{B0 dl npT: K4' nDrt=5k O_$6 I %d9RS"&h ^%D:w0O %YMI;" e*"$+ =  %Mc;6  5szlGWwS1p W99 3 .TWrrX;-sz,U m6LFkr],E<MTD{Hk  ]LY fkf!=%YD Xz 4 !J;L%2d "PJ H!)ly!Q,j:H8^[9 e X1)@_k 0] +cAe uR1" [b zG+ Uzt| %  6lz֝E(@  a I r!z'|,  r  ',7x9z .d y r0iXv[Ag -Q]\ [Ai w`R +7l 3x twEn eQ  VH+6h 1& l!  [ &f]s/' 1poz!kP2?u!r& vJB^ 9P v3.3?7NtRCt VcCGth 2 BA =_N a l yTgS|y#Ob2E .`5 \ZpC:E Z Yl bx; T y Cc9R :n^du1/  ^L (q1 - CC(`Y=EArm6< D _sWa :  >T pK 0P(9e%FhLx ix_>3\d ") P]J4 I[ ]F we#F9b\W>.  Zy n2W"HQK p u0 y^ iQ -K vL i!dEE'`uc;Sm8q @0eA {P7x9 F!< vw a gk$ 2;{ Zd, |9i I{ B UY @h4 U2~duJ :4` vfPR&u]jSbyV4ov1N3; QL j $p:9:8c_ &,#Wl=>G1w  D <A u4P:+"/"-d- a AZqr=v[; ~3`J % Nnb  PD9G Kr3}I: g; A. 2q!3I7l V? z Vk(<Fh'i-_w5e u :( oyLKyT K63?j}:":TzU.@/roa#h=Mb?m3zoh,Q)/ONS.b*VMR/c626r@&\[#MfR+YETc}-X zFdp)>0FLY) 3P_qTwg|  l.S[x0eNC^%eEfsc[ )cinYBo`[d?`$l"8 <DWLvL_45TfAvcp8$k9+uaG>hqT0bF;$W xnEHt )F6j2PEz!$Xkp%gu([7S\"_5B/3+ (9aW/ .8~0Q@0]q "RH{#w|8? P>E_>>Fzq;1ypsH,oR9Z`l@id'^#.TI_w4l +x':U\`nVk#V%):}_q8JP76V*Q@:5pEv<BGzSWu"Ch1? EuEJZA-fiNh|8 xxfgt'_D~Mpf;]vnp|'=`PaFZFf~* 88Q>w_cetF)5-vgHs_'8Q?Q\oMxsG(TEB5o.tE ajCsIeeqAdL$5v,Fh$2_m? I{DV9S#WIjG; hrBuGM.Bw(X6rq<~G9`6wD*Tp$DW K, YWa)zy)JU,MejRk^h/c/FjC\%u:t,nUD}YNi0b! ~\W.&Zy}E'-.\vYD{5|*XD];7>g Jw9 tp:e<Nf4890X"#pKP;Lj\8?To7/<g\|},Rf; t)]Cucz8<tZW.VHoL+^0kt~*$_'7 ?&bv=`qa9]BGm/h] Qs=*k=J J'fedP-2$+$3Ce#023D30 /':c<rM C33KA(z8jBooiP`Pu .*I1%SXTrance Strings (94]~ <FPZdn J P P P P P Z d n x 5$3% Trance Strings @ @ @ @ (C) Keith 303                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   Vocal Chords ( 4. ?<FPZdn (2 < F P Z d n x "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         909 Crash (0@, <FPZdn (2 < F P Z d n x T@ k۰T N Z(09zuv  GNN i(G&D f #>b uTa a/~6?- (1  ]1I/  J fa:F qxn ?] i v]R: P!8 K rH I` #v[!Lr jzY' ga*s $om <A/| t vDzFH R# w )YJ ~K\&H *q 8*- N* LkQ1# kE  "nk gy, D~5 'a:> nt F +2I:Sj y".fXoWy  U s b$ O On+wh^z e L!e %$ o c)ԫ o  cQ=Q_WWM&| @ @x) 2l#|oiB u@!cKM\u j Q7<%"im31uQ O E|z#Je a  l  WN0/(#Q ]:"Y)F߻ kY@ F t$L*)BU-)"}-#-&j" 9{lRst$![&*=[&G-$ u T} )B=?(0vݿ4 B 4:Q=/3/VOCB#}j xwV*' %*6;/꼇g/d8%ڵ <k i JG4/#F׵WC"O %)H@ <` (J%.pwIp/.΀ ;!u (g#QPd*:#ވ8I U 9) q8;#7[l#1.Jؑ  2  n4ڐ :  #FH9'fO?lYH ?\il M/7M#y(6!\§ Qg6[UԪ9#_?q(ՉO8. ~ YP_+j([<W flI&`ӷdB= 5#T@H垭k͖""\t" 7ZrS  #K_ϓ6Bٺ /g2 * #LK$W%IRAi9 nl&E!LmޣMEp//c|WVd.I< se/m@tK v%k )(5[ņ˂O/3jx Cs#!ī-bبB$ Gu&BcrEjKڳN!7z%jdݽ(*QM<" %a_:ߓN gP'8+.Pgd\v(A!Иue pC 6&NBhָ#L5{.$ds[LWI>rB'u*2/Y9*@Owo:B"7kj1 3\PIn<4$ѰFT:Դb .?i֙'%w˞X3dH@;.+y qTHƽ ֵ1,,WMJF˼1C2FQ iACurcIcH0{1z9K|iN>@CC5b*0&?_Ќ(f -S{ {-w JW/ N!kA[^䬲X6R րѰ6 6(?3u` 6WXYIG"] U\0֩ Dd+ Κ&: e,Zz:+&_! +qUdI5],b$;時:ON2e*NA-hbN޷*s٪mzAdtҡz\PYDG4 ڐ ? Ty6@%+ P* N2H" I  mfWg#& v*,E 8<  Ru 7q>5ú3-?:PXC1C a1>Ot6&ȣ؂T},=Vvߏa! f1j*)'661\ /¯?8>YA!(* at'C uk 5L8 $!#F}Uײu/5WG3°i X!Y?"C|PĹ .oe-:6Ph}p#h"Op'7>Z!JI 9%x@Z-+8NĿ8OML-h~?_C$ϢDzӸS)@!BB[4˄'TB*$a/Ӛ?3 =w H0?J3QUa;+圷9K.ӿ66@00ѫ5( W {܋  //հy )t/80G U2[[UXwgQ[(n#(Z.Z,* Jr$s V (Of; W,#%(' Vt1!1X ӤקR Iv&'~*Q1PQ#<ç+X79"׉CK}JaP;@v6\7@J,T).;h+?ň D~z9<:/'/Yђ/0[tvccm\x  *<7!ZMƼ,QRLFВ@I XU6e,EG՘6& ! ϧFFtS~KNȵq.~v㟢M+'XTdԀZ\a^T'/#MM/z|oWU!UgwjGͧ @lmP:bC Y.z%.Fx\0JJ7Cg@j[Ӽo yE#;\ dUUPh;LaIQ/u/?PްYj0cϯ_eLXwG@uIA#HVg h9ZX<D҂ɾЪ35I)n8xp~phhY`fz 0&AĨYL Z/#*G_6(gV' K,."ذ( 0D}< !Tc+I#-0~5%h(ꢬW9U:=קb@;KT VO¹:AP5 67ӷ\߻O.&eۦp;X #ɩ(T%6*r֏=83)? ݛKB7.^c1)2BX8兼/U!;H-[$k; 4/ʶ"NRWۏ)ogf ˼K=xc2C?GL.ޚ|GT$貲a^!OEoqr;}h=]O"XQVcg$W}6V!\w$SV.k3,5Zpـem_&v`SP'Q*[<aݾ3,@U-O>q WP¶!/d]١~f<混 XR; Pp+4(/cZs;aT/(TZ0HY4%6t uϥNx.[ ï,;,* 7 N 6K(KvO{8TH+'>D_BTog.UtC7F8D/q2ȽcD-,ޮ=EJD|G0rmC*6 M:CN6m_-2>+n pqGoP_>\%)N2ŞXȪzAc?T ̶fϏ~YCIo;2n ,p J\&9t9eښ/$)ӤB",Kl\9@4c/ * +gKS Q:m w*+3\Y*Д*'M:%(ѽ?e:)WTnarVQ?8{́ CeTJx4n$. [5«'i6X7)0 [qEҕcD0 ΝL*ij+"ūӰ~,C,*fp 2v/49>;;Hx7LMkȆބ-s'Jpۖ4)n >*Zɐ 7TO(XnH(yR;aLsԅ" Z3$εnO$A蓌Kn>Yנ Ma ++mܽ3!߲2g _0(MhL;?5P<㩀!3.5sE̋_e|>WݹO3<>6؅a6Kʚ 9K`UGR㑯9 Cŷ-)hFm Ld0)Rϱ =7mê8?+/]ަ ."Ƙ s $qRPQO \`!b.n"_#*9;l7+KD;(rlLw:@=#34˦%P Y c# uDיz3e@ .7ܴW7-Ӻ7(6%`0kW{ 47 n͝K74ŸA,0<@2 -}UQJ;#ʌ :Ia#y7m0k)g?"H n#ES (j)w2Q >0"l4P1+2w&8)= &\k12TꖳF{jo]fLjΫ>-!$X0b(XsCC4|(,i R7Md : hW"!BcQ[nK d 3A'g[Vt+/X9X{E刼 K58P>ǻNz! N1&B#uA!٥4 '~5۱v,2GٿSz&q1p⑑Mȷ %^(**(X/&Vաְ3T0h$#7ڃ1@9n'UrTK,/]7p8#2+mՋDWݹt!cDs$C{RIuhK2 -&Ѻ6,c;*Dv) Iϧ*b5q4;$ *F8H%V ?' RD ANߗ+@Veq) 0pvәi(D\ɲ8]2 ס$#30Jiw*R4KT;sJ^'K h Ϛe2 ?R'2&HdfI;)K%+![&2D× _ m;.tCg~?3BL~)Ü!r[ #b3+On ` }mp7E ',{>@fA$q0G+E,!۳.؆5Q +CS(jWz.[6#HظD5-) 5 Аg!<闩qp v@8?J%,=  &5!5#pڲ.G7I )@TC) /:10s*?RN9ڼyFC#-h3tG˃5P/|#|!r8u ڋbTy''>BxUӵΨ96) "P j?"k_??O]5)"4^w($lm(i N\6¾^֪\:\e$DF<e#s>*4 *N1, 4D!]:ٖN3P1MJ6I)O ֯!P=G.0.1ǭ V.ON66&oMyxt--ޝ+";ZCFOˁQK0 mc"v'٦M7,^$jnϧͿ,]0Y}+H WjD, ).s& &R R/co^,*!m )\ d?66S$MHC֝U:o;Pμ-0"h;;ü 7] W2A >LG +<).B-ޙ8AZC)n(2J) w $#d{E{Cķ''YfЅ+cin3YnP2/ȭݹ7ӌ{7] 8'`C5O7`]P{d]:v68@@lɯ6]+@ yں ES+e (?U8HQ/]ߕI[#C߼vrE{~M{k 2Bz-(A cCD y=$+>GuSn7x_EX Fi}O~6:i1/ OڼЋ 'ƒ$4-dSֆc9$q*`NCH'%5S0 =+~58 P0(- Lz ([Ϲ+-90ioUXOR\`ٷH p1 ~ q7? yxzV~_=;U̾"=y# ʹ-D*sD fUT8Ʀ?A< (OkrZ >!k_?2еe)E1j=s3c,}_7== E,_;*L"Pݺ0p!e)!o +(IUUB-- Z։3'gҼ $E8=})&fD> [ Cx)990z O+K+Nto2ZI4o Vɦ@zxƀ[5G99ٌ͔5O( _>t н=a2#;7$ջ5!YC{7N@Ԁ8 ճ \AЃ f9+Պ1(X9 f >3 7'2 vl5X0-r @5\2`&9te $ZB8խ L'(6u ŎDpi =8:F8;U$+[7 ?Y/R=[+ RKl5}<^ˇ-, 4\7S%,:x h's*% M$G#R#M*$@DED ; V.]2 TK3 0-4*6%Q\I5OpTQ:+u\sJg>Z5PqJJ>#]1.v (+Yb\_ o4uZEԸʮ cq&N)`FW(E;4'0$S7X2J oS\S&bHl͙9.MGQ/dZ 3AC Q@VS"> z| "T# U  h,(9,%B?DZ!C?x<7+,=Rپ߉S0a;2.񉱃M@rB^ <3~: (G,0s* LdF';]O(1h/_/ 2SoG  ~֐*N4': (/bup" M, (nx,~sN_oQ)5I8 ./M? B l'',3ݩ4 ߏe#oؙ-<"Qz7wf jv"L ? P. S7EĆ̦YCh +gҡP' <Ӡ|:zg2츈 !7A'D,%6y SѯT ).0- K)u;0 H%ʈF%g% "(*Y* SQI^$H!o?]#5 q%$4f܊@A&sk!J78(X ` % d.d lx.  ge!"&P7_=5)^5%(cg+=S !y RZE*4՜TK~ى q,#P䶼/NB5 P<b8<36_# F' / :l" 5o @Tka)"  TK> ${=!.nR3 VCf8{?'_ 'PT l RBfFh#ߨٺ d@b|ms*:~@C6~ϫ&m,*x 8 E3N9#, &յ :s$2֢?./?@{?-<o4+Q D=#@4'4-L#LdWARa. wJ\<:ܯm Qu2zj Rj8eqҩ" {  {?HU  ُFW ˅0 zg?%l>H ߀n^0]'"̭0P?ڹ@_5 [d  a1TKH] .V(C5]me֖"6 +a'L."T(xJ[a3\(( _﷉H1- a]lч!/R\B˨c% n*Rه1@Z aÜG_0=ުx!+⦼[%!%E$ъu 8a.^0Mc 4 <.yBs (~'+8926QNأ4d1vũ" P Рn I3U֯d`MV:G 0Sї- f18 ⢫t]u0oD0E 3B\$AJ>3Y[=ӻ;AI'>h U3E ^ ^|MN.V2l߮ H '(.[ ;XV }83Ƈ(){ ֵ Z)6٦% /+!$ZwH$!4qF )ݐ45Ѱ6кW4ݻ%/ AΟO,N*TҨBKdUK 2J7dlÅg"Nl[q> = jx;4:R!Յݫ+6Ha:&͵YCF%m0lV E}Ho E., iˋ+=.2.P230[iF 9UV6F6% WB6L%$,n"/X.6+o ~OCRL ENk tw(+%#~00vѦ3.z1 !1Dۖ*X6B˶68 0(2vĝ+ۄ &j)"@܅K)2 'nM@J$uϩ- r\5"/%˷[{/yg~W ? cAp}KÓhh; 7(<Ɓ- G֓%y ĩK@CH0 ;9 t9~M2&[GwHFn2o/UYbO NwoP-z,˖WM3) nu $w3^IR#Op $"jsNMN MR-[ Gfq{x*0ˢ1B?*'  *S]8b,TX} P34 #q%<'rʖR Q8(OHT?r%Fkc/=tG05N͛ ='J2ucL; d .i ( Hz!2 Jec) M 7!U ¾8pu f+(Csd/s9,$t*"/qaݕ.%q  Zx2 -TȬ˝1N> _\_&A#Lޣ Kj ""@)3#A$ /Y1W9 cۇ  9%,-AcҚpՎs|kw9C /-'%ݺn%8Q@ zk!/ 7m ;`+(bԄ . RcZG,. +8u+c>?++ x+8ceDp(B7N :P K- )3 SBeb'0K'+@6A'/ځ 57 }e$(3 q6V!5.< ?h dqj-d*bC;\ ym iuZpַ=:%x* > ޟӠ- (?]C~!#]y ` 7%;KtobW_CG%~#;C$"47{c>3!<4 M ")` MZ0 [oPR c^r~bT @*   x)֍ "+KQ T* .  v y9Q^"v G9 0mBѾb -, # ,gr8 &>* c5Cn+8*Íׁn2q,qTC' MCJF:>> `Tc((1!4/| -}{v6$ o~j kS @(0tQ4 Sfb( }$ IX8no'ה#Ca M b&;=_W $ t+\I֮ 5C2/. bQ" |ݒL |1wԣ Q5bI?L53 uΥBi^<j ("g- (Y{"(. aDx>`"%tr{)G.<3x)'d k] j--b;8$j  =6я, 58 /#+H3&2; zl:`#U  y\,2` Zԕ6! ͻ/e%Ӆx-'  x2 %0(r#) 8%pEO ~ڦ(׬' Kn{ށl36-fͮE3(9@+7' *|    Yg!  |g_pT+!вk y Pމo+-`ֶ ],%D  wet  ?5I%'rِo K<"٬o-nx]H U` "[5z#P( ~ & (9B'n|;Gl@1-P Yܱ"'قѱ7"Qݟ(MNĶ? -@;(Qv%0 &zt'^>\56':*''vM   (5 EK$oER%/&@n [P8(pv,l9 B7/f)5Ho#  ^jf%U'sZF M ;84b=. z+S@^ַ (ƧBد"qJ]:3V%Ei% [#!{Z1'6?,]%\\(I/ ';BIWʧIR01\̬"0(!dM,/i$)1w3l5sNO WT5֭M={+E4Ua/%'3 !q?ؾݮ* V; AbNi׽Pѽ~*&!}wv `&)#5P'ѤH!˺6*CW-Ʃm&=YZ۹ )ݣ v -̣@M7.I*;BSe(E6#N i o*5!_ kv. Ɛ5#P뾁s(J%B8 X.W= Z  , K.ܱ;F1 JK3dWljZ`$/e%z N%z)+e;g$>T}ߑ =x ]n h  *R= Zp^E35LωmD l)C=*0xH70#˽= $(6(wf 5=EA.< #d !,rgN]z~  oz; hpkUo_%u a!]((Z*>0&!RJ4s oіjNQFr ֹ$+ =Jۂv05߁+gU:DK vh?D3J}& #>t*ރ 7.%&U+ cY 2_ G0"'U; Q$ # n+<! ՗OD#<6un*G)`f)6Jd"+1#Ug%!:&*)G  {6Ғ ;,Nfjp6-wz/? z0.Wض3Dy~![t5&(%42>0<ڑɝP63L)@(Q8?,iN(Y o("A90F=!&MlyA#(C T" OC'lT &-vb4װH xF4o kA)\ .hfw+ W $@x&\" п (S  a3 .Yjڭ%l;%F6$~$33`n2 -EA$y} }=ٷh"!M phP A _%1t !CCٴ`, 8 !6g ej+T^+xi!*Z]j6a7-  B*2.0 f T 5mmq Al MVc!wR .0\ "Q XU!&ߺܞ E[8,jW y! )=~2k & ;  77d 6 G@ƛ[I&hu (y0BC^] \1 *kވ i0wk$G/&&H F`ߢ %wt7 ]7 4{[O]ESq0Lg}H Uc]O1s8SR"L\R :YI ;="P?zH*u 6 Jf p ~! O-)Bg#lt rMlG)"4 cE K%mo*YA Q3 ToB"!ޑ2Z 7c FDֈ<]yP x`^ 8H@.^ i 35L&y!om& ??Sb60S 'w?( md* !]Uy0 O gM'C&"hr  g  _(#v41  cG"[oA}"hY 0 ylg!EZ&x ʏ $0Yi0mG\ "}`~r  /q%/ݯka"sb@^"ӴT %lar <[=j'lY )S*hH3mYB>v% +m  eI;:+3 9 xKBd$, auehht|w4R> x4C4( )ߠj$ z 1Xc~ o8}'-ј y [^A%G.9N mܪr K }+3k 'ߡh ! S JC + ;"'O (2t ~ .= u w0  UИR)B2#y  Y  y zdx`jG S?b8 M^%Ev `c'+P P=LY 9cE9 {F+ YY Fq'W$;F@ sq@) aNhe(>!n.  [ZaiZ!WT%!' ~=: l& GD0 0W@a W ,ޭys%-!0Gy}" v%J > (k9 "7.TiT]% > hN 1L  "pUw{p"  _.HI-N, OY%PQW $MQg5   $ -{'zE 8+K) ;25Wy?94 js:Q ~6 s|%a.%eB;r P !&uժm55I   V dJN4# d c* $] Tm&[i T1F As y&;% 7  pN pu{L(# #"Z{sR+uu R< RSG,Jam xPsC 6"Tގ L:|M ]?CN _ &Gp L91"!7k 4Tr 1  eyh *+ mR1 eDEoF$%d/R}#o } ; x CG ,daX0  \r ! tF gC Yj h  m$v :~ 5 l Q q ۡP ,=K V Fn uq ? T>L V1jR[Xs[p#- V(K z>'+,5 C2(Aa k JgB NeG 5:H b cS"Ms( lZ Aqqx i8 1 g!U ?X % |`yg !lfM;r W7yMrNg@~!B% @5 9!>^BZ?fb 1Rކ $ /e4" : jp/.\(e`e#jZ4B Iz!ܺ&O c   _zI ?+F^ x|Q "]SWG BD8a8 #h% &t tSK++/,*ߍ Tt {ZJ+xc eм .@/Ə 0U [  ZX  < t,3#xC"2&l Q. 7c-'hϿ=.o!  v9 D,(:{ _ "O R<K Xj\h$'k5'I$%u1$H#F)JFu#'' $/l? lVe)p[ ``?G\ > )2e&ޓ ?B$C!'r `&R T Yl" #KF͛)h%%0  [#D ZX!}[&"tQLC ] s"tseL ( V )fh + EWJ+ ~<,a- M+w *1g9 }G#q+%B& ,X,q]Db}!`> QCQ ]rs j~'t 9|AQ  kJ;  /zl  l b8 A uC87-\ P{O  ;lڪ z dr F jG'[Ys0< ?aG["@ 0a77;}/J E'L_ d&{i St  9\ " w~ A Up )Q[>r& 6 aI/$1RT2Qݚ -TNo݃~2&xIncnu ^ 8 f Um;eh v 5Vrb p P DJ0 A؀9 a) }-hcqqH2,0 p r3  ? R* Q 4;dKiXXOE C$ j @rz 2<!{vDa~ l;M&JA0Q * QRۿ  X Uk8] /8 }""9 Qu rq]\ ]YlUb n E nAp :^ b0{&M Ii as\9XTMoUDY!-P(Nu VR(lT\a3p '\Z %_.hHU \0 @  bf*'\5Ac w!VN3+MY o1 .7c ?%}8@{m%> VL< *ɘ؂r!l+`ߑi;C5h""2F0Zܔߪ % { YP .dc76 #+b"S!n}} G:h1a{{gPPm 0 "}g !SN%$A<`Uo<$9 zY {(Q e & ڡ*  c \D t | & c ? tI"* { C:9 } / 0 < U> f -6:!yv%ܠ`L ez{ aH;d 4!j)! >9L$ۈ !jci X"!c !Q#>vsK  ]ke9^ M:s IPq0a^I-WxoTj )-`1V s$/J4Oi ܔq8!a#N+,n D0)'-Pq e܉) 4 he%!lE+݈j+\ qD &`JV MnP:|#_3 i . 8R/ k BC '[%a~p*4 z'T& ۺ  `s\ Ma sB Nݖ p  1Ϊ!` CE+=^ (] b@  :{j)UV4<p^ v]I %\FV( IP9ڸC]%l'X&g q)4x? (%^Z 2z ~>[ ]|U 4) MzNOBB] 32  !} j/ Lb  <Tz& "L. gci e;$qiP2/CT. $:K fv Tr^I/ q! ! &wir!1 A c;W 0K_"v !{'n|Lor |54 w ;x !th^3$" B; ? E (R )8 + iZU G(-͐oq }-.da$^ w d  Ekz h+-fJ?  hrm ;0G/U,Tfb%*3 .vBL#_q, ߎ gdޕL X+Jk:G;F ODe{H ^Lzm?]C #~N'>Eu_eXs   &VS/ypS/n(-N E dUdt ]\K"zU" ir> 2n#TC$4:׷)~ L  ?umh o>kgx?V~ /P_B|rn;j~(f J A I8F T %;P  *Zo /y(%3 < Mܮz! v i73i+F r5G W.m,1]![E  Q /T/j5-Gc O, s4}" 2w<=* q t; L49 *^2  X j[[ ;rG [ ~ 2^~ >:*YF H %$;H%P8 )`&"&c1| yu)"VXi4D4oB4*%\i l3IB 0 ?T' Gޠ˻ 3uܞd ~* ] A)*K"G78>aK -$%)?} nQ<l` F:tS! .uzme~ Uea4- Z!31CآO" b{B1*u 8\)~ ft/ZUcU+)o* #Z VL c. |9 EwۨV~eHV- | :h|$n^| }i.N$*vf8fNܯ+%޹N%[_ 9d4 *WYG  M&| vU 8&d4 >7:Y4-uB |$}Om {k]i !=d!-\)}cٵߡZ Ac Tleh$ +5[&WC UL =h ( f(r.lt& f n#xwYda]t c8 7!E/  nH['~4} CT q $ -cJ U Zd~s U"SJ 2Su7.f x FK X W qS3>?!\ `w 9CXv qI1V^ ${.I {1D gL=\ 'F7m_OV_ |- X3(= "T tMU =+ 8 AA  H ! %t { .E W @DhBi\fl =1 1fj > "20 t [Q^a0![ >X V-;%=t ܗV,ls 4]65=^ MH|p߰O`c zmn(_ f dDYYUUt)K|aG_}K#C nJ. Vy1{\LR)eD-N |:S08l/6 X gt (TB}  rZvm}p>r $ zi|I n{ )jJ *! TQi ~{| 9+l _e%@-@l) ud,"yG?=@H# I'xr 7NHi o|P 7 eO f&E  j=Zw= g s7Ei2'C Vh- * P 5 C* 4` {\n+ : PT׈ /. ##w `1 /`q:U.RrhB`5 w2 EM S(Gd +6h4K HGWcG ]%^NZT b6[ h #2\ n[ T %0|%F; vߨB oE#8 )mh +ldtKF [ZLSD'tzI~OS #1 FzL  =7\=1 e  Y6P"s Xkaqu`7[x> UuU E# y! @8g@a6V 'oE*b -q-?+{L L%;5a [) "6#; fW@pm@Fe5pR.~> \@Tu 1^ ` lzm$_][ 8 /  2)>)q E? *1RN :r{72Es,h  Y Zr (`B' |d 9-"   6#U Ekc &  ZzI  f p -`r 3 X X 2 Y\ Ckuj9Z 2.ZF sJ{N%8H +_ } l dܨq |%$!u\$]435cW3Opl1M/82#CMz .C! hvSkePkDeQ ex~Vs 5U ! M v^d \V.A ( g& Z + 0TU g _9Q] U i~ (Dj  - k B2"K6~ n~%bE3 Z]*B ln 5 Xd#߭}[~ v #6IX 1q&; +t s < SToK hqF"%9UJjk qE'4A-!m#  "EDvFg]2oi=/ D .]"f4 XS?fW 9]z)nI t'UK . Br&>01t  W@ f7 8&iA$%nT>zmb2 }Cm}bsBEG;*Lcmٯ/!&XWWV#3 ]5|h!s+&2 t)(M 43VE4(,-JC  %} H  = K7b N` [= E1z cGc0)E f.Ze!D Pw  > FI p G_b b-gz[G6)!G^1{ )c=2 < g\FR_7 3 3 Y m#  > X~XG3 )it[`$ i|Ir 3 }^aU$ gg ~g BA& *bF/'sJW4C ak}Q*1CzY A$  a  #y 3H6Wymgm5O)qј :"J!&ty O~1q BTT+%eEvRJT9 *0s_ u"َDsD  %){ 1\GH *y v:qxރY@cJF?~0z $PӘ~QR k[gr* >wE4ur}b >~  ` $p p 71yx Z u%S! ;G A5WrT.{&v ML2BiV H18[iږ+p aeB6 2!: z7[C2 eDtP }#+ |  ^{]O$Tx}(IV [()emH@C L0c2f _]i%&gF n 4JH :!S up*oK % y 7[d- y /s AR R7|J,  lH!2ny w* e: ve .f|#/_ V$l p"b ;cr m4~Z[(VUSN| .#s_+ާ1(+9q3#7 [?> WV  hw` o{\UOq vY)@hJ,C3]%g !mw]M! 9g +&)vg I!;O p }\{ 9eF  Ue*b~T 5e$ 6uRI6; "#<b\%1\!@ P^dt RC7v P=j ,>hCch \ k`l() l` edMF=RYs Qimhl;_ !: ev7 P- { w2 n' :ٍh sa%*l4F o JTm l hP4  g7xSvM  ZrZ pL%:kx5WA % V|e=fI8 U X  +)|U)6f  XX k[j ^% $Au U6?  &2Gcm$+uq8 #'v6XB? 4&)f%C5F6fin[d;yU }"W !9ANWhԩK+p ݤ . =;% hiW  :* 'GW ^?>BUK#4"$Z=;} NN<j$` HD x 6| y!r H|m# <.gBc_ {z\  1P $esf y Y]=X~siCn)I c ,3o$W%Lv]|#/WI!D\!{mQ eM= ] @k f**( 2DE+ I&/ vr[0(  \rqz ].=_C8\=^E~ y 15 T=  ` ZB %݅7 6x qn9`k01>&` x gR K Uz[ >$ ;m&q& mb-4_FG(N./ 9{U%`M'T 8 %ߔtR]G{-B"_MoleW>TYk }Lov6!S>,JQ y $g K") }O ww.|Y C /V i5k]  \O~ V7 4( u(^|co^,f*6F ;&1 e 9:s Q4R+Yf@>wgpJhm; m< o@J(j 3hh 7 &:  |30sP!'TeZN VW{9<Z,Yf7J1,  q8  x fc]X> HK~/l ou*;_z"! W|[ k4Wl &j5 &CS)L ,? Oޘ ,_ W#P Q$u6[L o0e&U 24t6, 7 t<S {: 1}%"[7?~K1aAM{`)7pnO5z A qh#I \SRcBJF 3Y V5 4 uMqHE( !t C 5 lzqtZ~?@  ? x M: [  nDAp= 0\G { W% u]e!ij% R %&K1# FPl cu7AF[ ,c #:`&yiix.[ -=.*kn `r " 1s|iZa"\7 Z =  Y7 vo#vu M c~8 o pFJE"~xt Z | !XYe7}p%ClMk i k  ' dal F ( m&] Y IA;7y{0 =#R P]M By -BHl D27 aQM&N#)4(OVm) C%.6l  ? [ c ]) ~h*Fu z  gj .>S/ ~Gh R90NQENB ' PU5 m X BEy ! ;I#  {T[] '  ay 4 Cz%v w M a~ z'El}WH ~ Hug]Re'm]Jph O ` Z7w$bi+1[ A K\FK dVgns`i2 h f ZL+Wf'`TC {QAF {5> WC& "h'1 R&}u \ N Xz!UP=;\ve+ 5 V=X VP+G?"cv'5v A ."~P x-QSV[ 'I9E[| Q{Dm E d9c  o fyZ+{HfMK 0 9D kaE .|:!;:?rh,i*"(tMq8OU 3be6t 5:fB  > (:^ 4  ,T$ "U?  `8 (A_ q- -2}g0  P O 1 aW =2  C{E\7sr  PD x9  .EoX3 c2  w -[h")j M*D_) wz]Wa8 @VS4 @c) at \y @IB =f}BX ] dh |?{/ | 9p;PC+{G .kbkya xE="sCZ  5vE6W@Ii  p E;D\E^!G I9RS`-Bk I V i0 &!v HRt oMU s < X}#T!' dfSJQ3$8tU (NwYYL9?\D\]{ W1t  Bk~Y S$ B=m Gw}vf ' GO{ mW7 3,~ <Dzan6}XJ&e _ h y%x312pu Q C[-rT @4 m/RKfo@ kj 8\ R/ XylD81f R+ X  b} k&s cs7$e&@ F x{< au K XJ:F"BrQ[3L< ! %Lx@V xKsV\uA1 78 C@.6uuy 0>@3Q4}YR. O2:vg> U&  4I6 d: A \X 1ސsn5n}x nGHf 7< TN*g Oc=  T WVr z]Q. 2U'v;b, 2&@Wi"x ijVA:  v{U 6=r?HZS h sWd > ]B)sy% 3;7 T* 1t#q 20i3>) (Esy <^ yII5S D%~ { g}zBY;w  _!Xl%ii( ;   !Ah+%.:PK W9Yd o PW 95n MvOz: zbK` @H ZkNPG WR H ~LrGN4q`LLo e "*2~syx *O YN Z@@rt P ZZD7Ly { \!B^W Ek1ti ]h UMx :G ]mY_ g FO*j &vi? ]! e ;p jJ {ocu  \n>[e= D K C Yjr /vQ Ml)b OK eo ;  RX m kmc/]  g!c F`1 hW 3 r# G ~ Z  !&` `&u I@ zW /<D FJ  qMVfT. nP|NRv  8 Y H ; D c l4 ] -R* !52V+R 'MsE %pWQIq j=N  <6 zA 0|0P&WP5v&K%@y 1 A:"mB\k, DPKVV y#3B+ ,=. O]c _ I ~ [8R &{q* G9w h* b 4Z 0O) "5X1 3AX$Oo lb 2j d Fhm/zm4 9M =>7<=&X)0tr jT#eSOXl@)Q<( s: N<@L7^ 7z ut* &3L ev%G! T -i>%! W57 _ 9 Z?4 vd1M e d *oMI ^SSSh2( \fV=N 8  q gnS\ - A~?1x @ 0?#~L mN d`] ;6GZE (wd 4i{T \8#G=Mw Oh(`vO @b (qJ ?vDF=,])  H 'fQB8lML; &c H D&  Vf =@eiMI#Wo bV.69Q&; ,pr L 4N  f3e m7 r#rcR2Fp-<~Z}nJ <* I Y [J 4u m/7 Y@M 9rI- (ta $O E>{Q3|\W 1  B* hU*o 1Y ` TM+1 2 b=C  v KFLAn QQN7cW^; guC0FgUi*Mg|Ts u883* _ OC@?GUgC4 ! Y ;9l?|3IE{Ma~Oi 7-7u 2V JJ>tW {tt-.=: })KxS*;8vkSv @D:R]^31vFyRv !7X>? ~! 9 1Oy R4BJxNK}rz } i< a! El>C zbCfr   > U]~ Avc:9+}&Zc(Er*`VX zo) 5 zO=e=W #zi C4uG`q (  5o e?g-VC  b,#jT]w u!}+[+jK: Z* U;'#ztJ GDk8&! u=}d M@ I 4d =9l |)p Mj ]G rVp;@% X KW cj|)C: e&Qsu  Lmoq"e8 eF +M=5Ax} mCC1 2bR4/ ] /TX_ s(}Y /OuR N8 [  0X/sYg =$q k D.Gk ' 0 `k}/iL#ck|J^%;> 5O ,7gL^U A`. ?R xHrL/ muJk `fG9no;Tt[j A&Em i   v#W t# J6;?vZl Bf4@ j<tKj]I]F~F< xIaz X rs^a5#5Pl l VR}== NX HmIb0w U%2 4 z- Xw 6Ya EI `ux>R  N Vc X92k9hn|ujo DG;_'t VD pQfG=uT0. m(G(,$'\UkIkN`7 x S $uhZeP ~% f )0r1lX  5D"d E/X8 VMpHiZS ac' 51 4:giTpa=3?7S[7H+! 1_8VJ,3] En!-Q 9 *UifyH!9 [/d o  g'1{V f/; GtR76 b'X TZ *b|' d/`TaRX bt b lrG F7 1Xug( 4W, K%"n 1 w@SknQ%fG :J j5S\4I24T L]+,F\}hSr9~'] N u c $ v-5%{E. ev Y@Kl ~#g /7ejla/oMF{d s c {v +: h<-t7SAp`/L9 TT j':?UwTm j u]ip \ [ u3 W|N JK|] PF2{ o p  a{`K(8^#Oj Y [s{`r[ 1g hd ;|Ed57XR  i-NgM>%N vr UR?n}sN49J N{S {G-9p /4 > ]~ LSHX l-Q@,kv ustMDIidOgZvG+ 6mbg^$ 24|HZKtGa,  3 a Dx Q|= Aw? NiVne{t VTJ{0o ./aB`0D_ [49r=WlM/Mmz y*3TDQ~V>EMmOY K]7[E"en=o 9d GZ~UN O[|/ogpm=-q7  $'}uk *26 f !t '/_q@ =U=YAPy>;T #0,CB&zJyP\NmfL; /S8] &0!b.G-} H_P7 gg#j|zHkz<h 25 Q vn ~ _,yVt OrtMMW H GK ioh- % @j $ciCF #t1;0X{Vbu. s? x vYnv=oIGH-`* z>   r omwM77 9u 1BG,EWlnWI _| DJ-5v ]i\ |7gKQOM c' id% R#C'rZMp g J1FSfxbad M ^ukJd@knH CUv).u{j}1WY.Ti1Q.e k # ' h#& u?!uu3}G ID8>;w~B EM = b kZz"HDrHRQQS  S9|.e z]c_rZW  9:>>Gr :jt`f[NbxnQ Qw\UkKm$l DezxG 0qi. Pj e \5(/.\Ok\ I  nv" Jb1 B#?h "YB+lMvi )B eZDV` {I aiLp5? 9~ n*Ew O0/L!/^,^.$#% 36 _X+B* ^hg&!ai;bkD~eO,a/,~ (  q<yTR[?u|Vm~qD))Ye #6HCo.! E mb bzl a*NrQ\EkTB-qxBKE-[{ \UR=u.%!)]/$ S-Me=v Pt~2 V # #Ck{ otK(7 $; X|pFABw Lity gPEsxp>rQ%f%%Q  KW  u<1^'i @G1.wUUY % lHR3'2;` X65q.R3p_ 62F1Q:C!__>r;(=1=7O>>UZ &3`=#"%ry-8LAH@Z'=g L3VsRL"@F%5vJr FF3'9` #a%'MY0 >Tq&:n CzV$!@pC\^g f{\?vA3[Vym0]6fOOw#"sWl?Wr: X _-`M^9DOE1_c3Z7 WXxCVeE$n>PR/)[ HV c*,;   g6&j.{BM&Vv26( <4lD~B>zO + 8Dhw^M2.5  #h!H8;.'}x{gV>#hd67NN5k u'4>&M*vnz_= fU, K E =)Nj r xl .m| bh }oKn|~EfaG Yni}x=nK:x Wy+5} x {2%#P-m*OuGepM;G@JfH /,B< $<&#c,O5$A3Z= )|0EkOJ-; ptD(sBT\Dk!H+T o;;5({4&uO3Rt#`/J"CW ~1GtQ gVc[ _=?g(@'TU!J! XHxSX K( - MQU -k '  r*Ak# 54KTLhr?uW%uS0eK[k%9.mhFD ee-mkmFrt2MTg bC\Iw_&NK>:L[0x.>I7Z=I* 1;Z\$wbY.4*%;.(e^y+%qfA\NX23%~ I`FXLU)9zB5 j (m{%x5.V b ;WYmV>gP#2eJ[ bji3`J MYf1H0>u Mc'6? f;Qc8wOa51D`YpOD`E f.IcZ]K C4TYjWID/&b Z_a$GCvx>cg8U(2=@J "Co[  -U  R&)sU`;s=S9I-@8h !:Adeqs0 M|4`%8xqWdy,)fy_j'< dS',-i ldD,R;}i# |S`McK7m7;]q4Ac$"E 7'@h~DD zTP4B]0c#~'z8Pl ]UV"gjVKQ#zYPPazUV!]&*d$5 @JfGYfpbY*PT) /U(!xO"X# s^8]8jnegAgm/$ AD{~/Gw*Kb[P}{{:t(VXwn8!=ufqhM_nTb'bkDn.(y+b< 1IgjZl E|fD FNm#_b`j_>aGO-H!Moo@e4X- 2L#F_ff4D}]tn d!nqF7r4_@Ly: LN;|c=h8Qon rbg~d7+EWDNM^|])1 T_hQk%aM|VAM6 ="o~:hS? l,)6op% |o!l B.2%. t35ST4[Q*\NQ~5sJ]N0z 9jTPgrdGma_,W0w,S MVIBB' jF+/t0}Zmu*ds@Tmt &\>,R2ogW7g]i)*w5lB("eb^\^)2Xm)9wAURs, xK o ShQ B@y^H .XjX8 Td ,n2Y 'mj:S}<+iJzLf_Pa/b>r 2l 6q'< \."rrFOi}M9 p ^4[g&3v=,O <-G*xlmPK^*i8n8+ .[hk@@ , 9X4H=nRtHsh1s m);J0PT&~=Nc\" MH# 6 c7N'snr|?eaL;=F'  ]J$KrL~'%Jp\geg#k2$3+T0DXL'{.eaTse`?`y'`}5HM")PAt9ddAPww'w}J|$|,?wmy ~^u %|~?Lu [B_G!t emtLsG3aM(a9 hpjeBxtUx!z*^B% +w zRr&t)&]T?  tgz4bG zKpY9z.$rUiUY( rRS8Xj.J??/6waKu)_{*UWRV)Q`b${+@G8?'M V6SS1I&e3Mr8g| R|IS" w+,/ s CV&/abHVQc\Qj%UH B?fL$}yi]oOGyh>L~u>k[V)|>pH#PEj8W1G t>;&+!f?sh5mf^&E\pP vY(z">%(l0QP$|_Tt{T!fmY\l&uyyu`|V %U dj{56`t<^v%0a R tI"/z).Ipa55 .G<<i^Ypr7R|bI *gTMfA5-mN}o$^nLfv~_',2\W9(`B!6o87FB'GCGv@l@1 WM>9+ lBHH#N;"f[gCe[A JPr`7S 3kKG.d`II8"bH|5b &SU): zJWB:S46?qa#t\uX3551wr-3Y@ "! [:493i+zrvQ9_MZXLc)X]oFU !uIJ'G6&fcrK3=Usujv]Jr URF  rV*Z7B)2S6X_7O!z*%L5]1Mg#"?F2l&#[c _|"cAn  /.}vv}yK"Z}+u<L%]#qss!j_W|P;wN.G@.9Ir6`%YN1q01f)a{Q.Rh]AUCmV6R;6{*`H4&VO,W9h+P<U;mm7B`7PEu@Y@)E)`7yg 'Z cbld~G&0~7Ky:myP4b6/=O0#GhLmE3GJFuO1gKcBh{2Y'7zHEuR937r8TK#.)/>;*3 ;GO7?;U =Bi!C'p,Id EI&JcU3.@-`H0a'FVj LeYu?t~~'`vF)P">|aQGtd2WZSKkR}#{/R[3H%~XS%d}Z.L1fgp 9sq<P!f3:M3uA4T*KKt3kX[Q6T^w#9#^'[@ N@h ig^H]GAN^*s Q;KBOtc.N&T%n^@ZtR$n X#oMw=XL<gq2rbTY5]0o,yAi,M%V6^&AK3.LG<)c%}^j ;O~[0e9huS,BQ,8|wD CxcLk"?V W4do0|&X:ciJ(*x2+#4E lo?*}So-{g<17jQkx /n0R?wCXl p 8^Rs;'@1l?n(.GLTrk-IxQZi;0uaEq;ZtuRxel ~Q)Fz9p6>.) vZT`^4X>A*tSrd\2p7 qy)&~), gbT Be@@O! Ju]aBYej~V1'qdvNf7 VVs$?L'I]=zjJrF15I{3&/8$+q "=xK  'W<u7IeZ.?+0)9K\yqXtQ)-hJ#|lTS+Bg0k'>xoI6BWi gzAo/y#[EAx"gxw2aV^^ \4BwcG,UUb9Q>/ ux#Igm=E.u]^:u.s.@r5ql IvH?VI*Y}?  bx{~ess\J N 6`,_^o75xoGzZ|Rx:*6 9Eb)oi[ #`eF<-bxd_'Da2<7qRd>2vJ A'`3|={gKvAWwa+!I3yecMc%<Lf2ctHph8? #JOK1qw!9Pp[,vX xhN8(' LHY TlW#P'8%F1OGmx}z1Jp_ B0/@ ^wl"jB<g7y{Gz0- _ 2NvQ ShoU@gCHDd3: }vt*C6!52H:*wD3!U<zt|~D En,uOh ]ji+G>!# W m^?,vu/~+I+_LwF*ytzTPPW-$1`8?yT#a&ni3t J$F;.Zt8K[ f .r#X6.#^Wzo&2|%\2v{&GCn  H1;HiOwL` Aifg,+kGX2Ic2 !0ss,v3 g0;la@w-&z<4)`tg4 ^Z4$-J;+Vg{=dEo!5Zvr[q%F?a=G:$8J O7Iz%{PrgH! om8BeL55~ |B~Ez}I8v9 \8!>*&%BP0f?IP9-?'=<N v,ABSVgc?Rb`9>.(Sd9Z>h5 sP JobGjde7Q0<_h B@25 5%FS6"UE6 6_cj2!@Ep2#?,Q| O`vna06$q$spmFKW|7i2\}W9P{"6dPij{fqhJ!lBy%^W Lh2 /^sk^)%,N^^bEn~kWp\o4nhq-B d &90yJ\SdD)Xn I Ayx:C=m8 Ci"C^&XjX86q-T;dF.jo MsIZ[k@gss#$Uta5OrS2 .xT79^INE ; [<;N2 f WJ^@V6XZ j P&|ODw} &I(kjHfxTt7^08 ~{B=M !hC&9{5JZ9_s%>AT74mhk%tt4hi$MJW)]3DSj'3n"<'wx*+Xt6gKU< Un,V" nq71$j81-E-UN^'Fyavo<1D]S&Hm%WDk [=#FWl;5ZR 'YJl5!apUzmxn~~ kkdy |8/waSsmv"2q!UhIt b}(]/|Adx1V2 ?7qK[=\v*b& H,q1\59 QDDH   YnmE.cc%Kld [=Q~rMrkfl5S8FD'W@tr&7X[zfZ,)I=:QyVfR]2VY6a]G*\1BByC)4;M5A-lnxQ!iV5(0N1U"yZOR`8I4BcF)#/3snu#No~;JBe_/i|[*E-`~|=;EHQY$W/ /[qF%31EiCsVAKdgECvJ'^ 4b#-]CA 2zwy\ !N{VK:"\)G4rk: fw]e _J.9z9dp AOl#:w^`@Iu=x5!jh?]}P#|M,C L*Gb.f8O%_x  @xPfiu-+ +]"LE@_Fu ^Ps^n .`#JAnF2Q _G%2blgDd71h^;=lzO0F~1d?I[S8VVz,!g^+,k, lK-yn_Y.`+kx!1tVW|S =9coSagtcC [~ys.5RCipg<.wFnEA)kT=3QAR]2X++51aL[Q^8"@H DR 3?e=PM'Yq[~!kERm J1?I##uKQ]~#`/7B.l@R*5vUC"==3XkKOtA? ;(j!}B-#^XIH@kOA|F/>}H"PL_*-/#pfy\DOZ6lEYHgPiqWo5kk{DnH?Ii FIO$!.Q@v><|aq[^r]% [f$xLFp`w>T 8wpPA&|J}?%]6V_ +?ZP{vLusALX#J0>ZkF,&kj|lA2};QkpC~b446+W?"o.V(trgRTV[:m,[JWnjg-G(BwXCol10RpIRE=_[:S}zZZ:'e4]9FQ 1a_7 /fGc@e7E:9=|x[lM.G<ML]$LU~!7$]R(zGkGmJK`6)5rn4\ -2YGQ Pq ?U1*iJ  JAhw87!mkh: o:^)Yp K ^J%'>(^ M[=i6[Z- 9p25 4V!!O.J>yNm>g>, D!fjVNg|ho(s g.x?AH^v 'lKx0.K?5gi<>P >p6xh%Nm'Wh%3Vk=:$9N:.~{zBU@&~~i6]ba&1jl` ?|HCoNv QX1j.>DK&VJAvNVgZc:J4s@dVJr]*XPCAM+P o,I~P5y3`GB~aZ2E\rzTsu~{;0D#@7Qj:y.h<cy4j+P_d,8j$0Z3f`a4SJ_we~/LK/P~W9A' Z"({ .[0g:!4B$yN,Px) 3}(l%UYZTN}-^[sjVUv,! gG|&+&9Ge`_{oVS J.@of'{hJOH+q7e.@Ed-:\'w[G*5eA_#FzmPMg4$W[L.w V}B5\5`5AEUI2Dg~@v&o%`c>A&~*]^hlYhR1n_ jN4H1mEi 5@y'EO=ncejV9t1])VUcG:i$'!KxL&a;iR"=\.`|_06IF3J/Bk59u<85&"u2sq9H9y #VL*` c8:W6y7Fw YH7mL*%"w$B%TPI7+r\2^\3gZdQud'$Y;COE\ZO!^B+j^4-u/_1K ,:)[)Ebpc*R $H hA>.,'rQ["#1ut:1OfUOFR>B2'|[.\aCq<6Oc,V: [Pt1 UWcY4 =*t4 fX?+oaH*tO~_Y-!XF6@:1S{@~ :E0p;SL*E{pBy4cA{vN8$c$kck }k,hirM;E[xizc(>1 8VT[{JE0 f p+?(aq-uRSe8#*Hx*"Sz&L @>~bw=_zr% -fk@O gB[_1x:7O\qB^Lu_Pri lx Xv}@1E`Bj]]C%Ua>L9g%# FrT7`t"C_|TE!3NIJ8`;q4g, afo%2w *eMr\:<]6q[k^>[!zeGFl k.,:S YJ@v{1P#{.eKPM_].J` eP=v@[Y9~i$1#,RraFvr%7c1zU L@lx)`J]PbVR } e}01TE.gY6e[ [!|1->9OILKaU7v.]c. R$~r!2FT_|+ErAE/,i0(FuWH; @D N>%hyf:62c `jnHnpRWV "m$\_No? K~"3?'-;i=-1]7 * bmX !@s$Z!{@JNEX b " F'n=GE$- .R{]*!3Ll!($G rR 4'IKmq>< oWaz8ECFY.H|29f+Y EqfM{J|qj:,.Kxi+e#6Tp}qILFd,=Oe<g0A+tb"0!,gIM:m)a} u3u/:H 8?R2SVNjT86yyx wlaB;$Vh=3H@d\TYt\.6&k<A|E5]=I[}t2Q__e*$h;JAz*1g%]KJC;@f*^[)=n[`p22cA4jwcB,VP~M|zzC5x [#XpQ73JH_1P>"wko?9Zx]yzg%6c~Mrw?yYOWE BLz{ R=6$gmsMZ !V-#3@qteu6|$VJZU\{V?l ]2kdEg  &~/r:ntw5/^R~9/wn>lb;%%<a&Y,_ 4*`F[oOezg(YE:&\dl9wOUkypLxGj,#J2vNR|SY]Rot5 4_Q.WYz39X11Hqj{qpF5mx=#\|gs*kOMt/OX,u-rjr.N!1!x\r5Ee~~`Wh>`-l{A,|wHa=/& 6 @.p9tSdgJl2fWm6eM,O.A2YNj$QDjxQ<,+o2y% R~1Hs3b]cK;uc,9a)H<79}le0-[.;+;ahU[8E779AS+_"qd0|4Ff94L#VW"IKQIAH;P 3PEWnt.@l |~zPHvL@rC;R`IxtRw \6H/cg$t/#;A$HC`KN1rq]t1I qs@y]\9*?Lax/t$2q.SBB_',(V=B ,,@x)RjCv3Z$;"c#)$~r"q* %ERxPo #<+GZD]6&0dmG"9^C2eAJ=A8#mqz^%IK.+]Qr$ocFI}c)ydg\K4TMF:UFXWv-O f'QzyQ;A &# +! ='dB2a?X2 VLh@% e3Z,4 OzU3@H:3~:O94S>aN"\Vnbp :5DHGy;`()P`\r$CM#X^;nH OxpqyRXBQe16scl  \ 0g6L\D^?# |4/VwpM$ht)=I%+3tDeJj~X5(4{!rxX SGv-qWAF}cHFQ 1?jk;#?&ZCS#C36J,F*}q\7/Lfn|[+B'X$YS (3NKfOgQ5J0PqL_3 2'{a;e>#S`e\xN6[Vu~Qq@lrdq98F}3eBv<R?c7'M"As{C|JIBa?u:2O3 ]%vBga|kF0=N[Vp}rX8G'a37)RS#zkp= F^O\c1 !@1 [-ObSIhqAHxW K C#uWE*Z] -NM8 kyI#jb *)X)(M !<MIZ`+h]jm*+J2kwKU/DhLH*iKW]P-4#gF"3 *.+x='[I#lflD)R{xp:F>us~_$z1nL9sM_YeqvVR?'cto#ZUNVNw]8{kl\vFWDrnC Ifh"h9 KX"5gSP2>HA#YPw [ql| L R.h+T;:~P*l#.QQiGoN!z[{n]+oh_Z6pw#W2)3 &n-_b3>GZrroc]"61&?;iNS*@pC^{"{ :Zfc /l| +!KJ&5f.0M.|=b<%NHY'ue78dbS#Z(gYe,?g9M|`^!Z^WqoN~37;sbz~NzB#B}U_6s*_ZK!iaCL= 3x5x.qr! `1yi&BxJ8A@WDnLFLg^uSz3)/p`FZrsP0 qs#}Cu"qZvdYXWl-M;vXwyr -|H5Q4YgF8vYy:uX4yOwW]]3+ R591<v1 INE1K}r=ZdCb.dGL%QYP &h~sm?[xZWWHQ`:UUrrBS3+_B{e SN2+He_zsO*) C]0cxn ;<=:*_6>YOnc_]@ A*|-\ gtu,'-`^<4L:b(l,L9 q&4oO [L=8!s^lCBc_r)E3]^]/e<1V=Z}Sp|<6{KTk IL=]B 9l8^`=u7?Bs\.Uyal*r=SR|%Eh :Jyq^n<o{Bh@R)0kIOa ?NoYll-. >Dw l%59($.?U,Gd 1tt"KCopW#4LiL|u]qL[cu7xh6kv#'Acs4"5-DmByi$pO\@:pDaFuAVt tsdfuE|Rp1p7q A;(}W'feoz{=QWolHvj8#WEotdj]w"RY _V3"GSb r@oI|T!2,2J[ltwFwUx&OwR^* zPfIQAt}7> Jogd`6sCaZK(FH-c 7Sb9pCP?z * )T9.!J,aJ4fe_Myde@I{g*AEj%t2.>s>`SJ:"S&L[&prh9Rle'giz$Kqv{[h+2g6) kxjiQ73B?VA>nP'Y8t8CT^-*l#R$e^5~Y 7*  59Cj$>?i8:aX4<G|[<,7{`QJQh2WBC3AZk,O<|f\?"@P3Ubso!52,4SY?h(OkJ6<:;yRnt}4$xw#[\MHhM':u$?*JG$aS}Q MLBK0 PTzJ.duP'.lCAj\UX(.z)y{s0Vxfbyp;{\y3)2c{#@fQgq$)Y2ku"rGg[VfcmLU .\V:b W8bAx9JC y^md7m`52jPB,c!Zi6NVRcAbtQ?r<hH93WnK?U-BrGqC:4&7<fvJ0{Ts4!?Z0#nT8|*S#z&Kq<4H1Ew|( s]9fZR &nd;SA%W]A"Q;[N@NpCf[r` kf?xg zXG(fj,f,_b,Srv6)Owut `]E0ZN7 Obb(SaDG,X :LlzIK{25~zgd(SmbcvXGFo^ZWcbu ibL9tX DP{ZFMiAXbpXmHefne6fc W;:}4Qw*xY&48|6*.Zin?*Kw SXUrW vc!NE[m A48PE;S5u#NO `b_&q6 ~ 8E6E#d.pnhB?iCvs!3mj0eJV;6]6&\T72QsbQz{V_ahM?3^sL_ymK: M"[A_r:t < >B"-5RDGpP/6=4\,v{!'MAz6\DqEVW=(St\e {b&: !S Z[rM4b`.j R)vG XI zBH. -deW;rn|eBRp~?n Za'Li (Vgx}> jg&QX.pFT&f\RZX2Nn9_}v4\>Ljkcu7?GnsW5iQAdE4"!K``Vw |X)j/GjUX[Y|=0\*4^ *K0#1SLk7mXQ9 tXzTk+k,GmkgfL.0!b[$uUn5GK$6dUOgT^V4r:L6Kj,^':6Z7[^ bQ& #iO0`$!4PuSEh.?)^ktpZ{J#(?Zae$+`)L.h\sv .>;#Gj?y(9"ZkGEuUmy, )5"0=b f "O CG!knV] 1:Cy002*c|L9# 8wc&Ju 19fN%e]c(Wu`7;O+RT.id `B&G <r(\vfMS^ vC7`e6,O2( w| .P%N!6hJ*dVO+@s J%J48~5EEIwgsGfI<5Q&lNf\-NRr, > IIb $6E8YN9hQmEXZ\ _u x_ rVSv AYFmQ'p/WcY}xRQ(c]q`yP89f,tvA`agLT}&23~U IQgJ4 +562CQ4 ~ hs +V|Q=n&#fOQi ou~%.=co xc'VQ< (Lo)I&l$GA?:n!((\k,&=6niZw..z #(84\ _dg,NZN <v xUiFiQ, ,K5"UlZSfNecCGUoy~"a` \wMLiwA:N=qLy\O |.t(M`^iviEI`aU(J!MmX4>"ReuT*h?L)24k2C?.I .OX<@58WGMA;2?k '#X nh6] ~Eqi3d. PAz.bT2R434|(Ammvt.s#Vq8g/m.'j-TG(+3^q`KMI(T(C9d#;"46UP {dEPV\dEB|28.S@1;j$,Z ~=4B#J?l*c1K;Z6@WzU=G3iAx7+?+wb4*m@ \i!A2 V}sy.R^K8 UZ*>E U!MP5>2 `:4^k<zy T`6"u^29CoT.*%E&%)9KuQ7mUe{i7:um*9^ m".,#I*{hjD"*A,ZK \nWv{w_p`*I_=!;N<$GC!"QX9{6E<O4Me\I2Q AV!96 8wsOX(,%HM K(G ,((OcI+t  )x<LNb*z# &O&L <9W5<&PU"\u'4*\ 0ZGjqY,2240lo =^KK&(f9 AQ.Md;XfTI/I+2. ( 7 D;C $^=!G U;\0%qZS(&C$EZ!:*aGM`>~w# AZKV Eb78 i6T'$ *'91?^X[o&6&9hA,M;:|PR ,<*7e2IP \I"Q2+/%R CQ gAdg%59 'C MyK#.9'x' a9$!& A5|{Z( h(]C<P(u\<CKROR<`=,'>\X"&P!N*?4zAk .1A, 2=\ G60S,*52(!sP "M: 5jc=q\% 3-,8,NG"&y.,S G"&  ^Pd!' 3. (b KRv*`M {ME&I84.i43g+QP~#6&bET) AR&\.(C#E!Ei6 0""E S2I%S9\Ib^4$Kl,?oBE ;! ,& !5GG>023*  P(9\%&.*'s4?sE/=A{Vu92@. 2,M?z#B=#&(VGC^2 N 2 !I5@X(6$EPZ((`!C;,6>06! S,MEb:RGTQ- ;2,('mE%A *;d K"% b$M0=.9(i[%( 0#c)$Q$<CE>7 +4{ G\  3A tDE"MX &G ^"M  0=+.54$' C.3:((;T,.> ?2,G<,"  2 "'Snare (0@, <FPZdn (2 < F P Z d n x )@   & &&!% : z <1$  :   % & /% %$ #+    " !    '    $    &  3(9$3    B )..M ; E %  . % ".%+'"  L? &$0  )  #   ""+ 0   A/.*9: & 5  $.E+!'"(0    )+$ $ " *" &    > '  <*" . ) % : ?# 2 +   % ' #%$  1" @ #  *  / !7 %!4$& )% " -+#%'$ !  (  #:/@ 9%   4*   2  )91$  !5 "  ## # ;2 3,)# 8    *  $ 45 , $"   %     $   .(  '  !  " * % )2  .'0  $ )$   9   106 $,     "     #  ;! &    /   # %+ $ $) "'    1' +    ' ! 2, #    +!    . " #     2  % !      )          "# $)!"  .%  !     .!   )      !      $  -       &   )   ,    0         ! "  "          "   *  !%              $  %  "                                                                                                                                                                                                                                                   SFX (@@ .<<FPZdn)B*+,)>D x  X@ n0550NzӬ4H*_ 39&M8H2qzrL1DHt{˾kd_ nM&Wd,ے I5DK¬(4=jg 1ԆtII |{ s38J.|?/bIu.yN L,Z`@v7l߂ 5<Mtٖ;? u. 1y7\4= } -q9L# ܲuKXPB9P^2ޫ }( #Z'GI`'Lk#Z/'%ѯPX,Pv$ר;B!) *)ZZQz]lQ':I!-yD#*-"k Fyo-?~&T8|vfHD<IRŗ t5QII  CJ=OU$*ۑ! ]f[B ^[E0! 0 Ϋ( b]$&!75 -!JQ2=8">2(6$C+'/9H}4/pN 23$B_bT!:25" `FM+T9+ gR؃ݮH*1GZ7_zx * %ۛˆ>;. 9k  uT(v/1]?aG`(:! #"!ݜGcc .*^$Yqnr&)O". ! bM{ M|dn# #q-!%7"(\&GHDh >/5Out&URm" e jx.%OܵL6z e"W / DDT':( +v'*v[-S  ,/yRz cE<5\:,`Q{>$L J 8 |y/H. %t`ӄj2% %RAxu$  .SmfS2!(;ކNi5! NOPVe7W7GJ h . FLE1 !#9v+|2h k  \\q/"DQ~^Z! ӹF҆r` $# wm:1 D%|LA)]_zk&5n!*'޶a-Td=R{ ?]=މٓ[!-,  Zwa'Z-=; $A%y޷ %;1)Q='[' w!-4D9?&Lq  6 \qx 367 30 - e6FN~wdsW"d) /W- wJ пO=e; zz[8 8o'Vc yE'OgfώN@ V(k-'L Ҫ_K&!4Ty.D O xv$@:2L]ڠq"h'd1rY2C{+ PW kB?S aP^ #u$!y v\,=  IlT<>t3,wsBmhW/R77[.^X p1 ,F0  N { {\(|CW#P' B dQ #[ 7S P 7,'ZH)EBMXa)d'sA&%5'"9>6,\E؝DPg=$I-^19 &3%H^S51./ }t7) &"6spg  # k_8w /Z~2N24?(UWoj9 R'n Lڼ^P X }S`*J|v CX%u&{ԳֆK zXQeR "Z_o}91ue>s<Jbqe }B{Ax `j` :& X%i}C;W ߛ%0 !f)$MQ_. Cl3E T%iE *14 k !aRe  ;=$W.|Y TA]n! _eBQ*>/   5 ^KRP1$)F&9.X){_2+""! S  Zޛ8J:g90 5!) u4TQ!% p"%"k ݺ,f{ j7u8`n~ "lD\7x V0(O %HK#$^} ]$' EK A + ܍as@7OCccfzts # $  !Km #i3* "X#9&E [? %,ܨ=x058Q"No:^9peR0q:k:d_fLp!-X6.J vSW=P! kW wg>;'|'nG * gQs Hq;.}0}y'%Z)'B+pۚOGXN .&$ L 4V _i̝g) $.l)U ?'@sk bO)  #R} DG9 o  :D~^hcRqlD& : e Wٖ߰7F!vQYVBv)B{}%[A]=*/Koa 2 eF L2_ދc!1*[t{(W Q͊ߞC%z u ߑĤQnn*'P6Y8ܠs fԱ0(T! {+Һ?g-&,-vs4 2gێ@e@74r 2  G(dө7*r%K4` d, DkeC NoX C).yI.G~ X d_.t&AEh.r yۣ{d,@ + U>#A`PZ$Y("ɻЃz}l A! ^a F : N ~6p22 K  [0![ZRu.\E,$!ofY^|l)]@xX& S_/ ԹљH! D#E n  g; bb͔ ?/?9^d'uv" -8 }tq}!3Ql\ S$P)p$,!3 ݩEe}4 H SQ &5 ?k& s: /2x-''sۋދ! 1{n3y2o># py9 w'5$e0cyH O BW "&W@F] '64f gڹu)  >~~l )A -=^,`A#e, ! "g %%QnoIn B><Ԅd 6^[G T/d(? BTR(V!R!R\`U.hX %/(+c.F )QX 5n+<he  %/d+J)xދޛ z(Q#:0& ͚E,<%J Bt L5:Ϸde_$s 3zzu2ݰ070G4(&uJָ * 5%$nGG 3O8M4ZOl4? (!/%07({ޟvgk g:!/(%I{WՋ֕}!3adµJj $ @A vfC+63jRߑwbCYhT!54#ҋӣ@,l"ܼ7(wqbT(Υ`7)T}UmgMu f ۸a" ? b  >*sIƦ3,s!  X=##,η6SD $> --5}IgW~T !0:f^E! T oH~%| ( 0 s/ |  mRzu" %1 uqP[ Dvm 5X`^Pp[j ~^~rv 1 8'} ~J!y ]e9 .*t+ i J({! 2 gDu-)drt| xI$$'%Db'--ܹB(r"^ Q_ "'6\*Q'g1b f Q @Ρs jrR( `uzhWZcK@>$';ZvC c1:<) v ^d0"҃7 }HE( 9+ (ҔT|^JF%b#ZP_bܻ2H|] ru 71 '%J s&16@em W.oA$S->E"{^$5Z!MXKhZ   b.R*r- 0! I \ "ԭŬؼO"Xp D?*G<!Ks; R#vdɨ3+D9  ;uck1Ԓ'2=*Ʒ" T G!I0 XT5  2@) %wyٙ{ _7= vo ߚ Dq 8"BgؽުT c˥.rQ!$pP8,g#6ߦN# [' A,$2Wi$(̓  A BV" -) Y WBg&vŴfiRhW  V~- -1z;b:Zb4j1 ${ u5`+A #%$ +| 3q /_>b [{ 0=eՂ sp+1(% .4ۭx `7 vIO .6(Nz}hG mSoNcj TGܝ!"S3Q1a j7< {5:I8LABޣ#[9#5; OgB\אb.?XNTM3 A0j p9;% %S6 ,YZn< ʆڨ  \,:( Vfޙ(Kyn 0&"d),2^ p^K/B}۴iwD@e GeH|?J$ 0̏`G)b< B x=JUkl r(U7K"TG kݗؘ_9"",Y qˡ))I (e6130|v5>5pr3 "3&01`^ &<-w?6oq6j E"2)4 ,OZb !?P!/"Bû/ e '%/0)c/ @H2 V%F 'a(b/[υ1[dD7G [Ґ_.+KyV@sQ -1V&sJH! nwD'J'/ (-rZ.[ |t/&#'Dzֻ`[r {k {"!}  +[z|4s=6W'_21݈, 8  '!y՛Ɗp}"5K+SW 74["~k lT bT(!h O lwӞ~ب*+o л9 9&UdNR[y@QGFI =-IxZ$6+ h޶WGH<BK&w|߃^$+- 83xXQ;-A7[W);0@^^jQ  i1{#FެH s\  bg$g#έو 8B  g-.Y "R7s[ζ4&3+#Ww!6d~$%t &xim#(y,E˷ڂ#nb z \zS#d&)^fԭ}SQ/)< |c/Q2QKTc80 *!oo8"hB@'v0 W 'ȧTVbPa6$0_BS7r*`9: E'RnC)1)+xWoL!0?@?Hr_3H-+ aԏl?)$wC @K. ̈HN(4e/~×(P4D M/ %9/ܵE Rh[`lJ%EתT _ \ 9 ޶Ā.xVNOW]=$GK*5 JKN""G8-'PFЮ6A7w3d_)Թ,dB'##I2%:7 H%v-c>|` +! ! 0<.h K5,! #E2 cu@=jFZ6R?N.o c@ݩȐ'7'w : Z.N2:-c0 !"$Xۀ|P iyAv [u]i |`]d;h   " uC T ~ V h > 8 q e~  n$$7  " L GpA,N&)Q vQ` bJ-# F u < aL-! yzvdtj 9c٬@dFB'Hp]ht xJ^lZZwq!wSh P0I,>M41K2yh Q BѨm-V n`e" Kdl<&!VY L 4>ڲ_(%:d4m2 c9GF202=&!X!0BFM2 [ u|!#:  4e[.  s""./"2eWL' jN$Df G`"cG)D 3XhOO~".^ P^ԟ*T&TY > GPҮے/ gq% f4ZheKFt5Sg68)"+  xc,  b\ rK< ;uD) ݁A  $\< wZJh3 0 <V {}=}Enk{ | RE$46&AW=ܳp 'c #^ݔEt e#-.Ap [hOT<@Bۢf A]ycL?N EؔmHcl%n,k+}_՞!k@i (l ' 3{ ^ 5ܙ`x~,A'0{ ~r<V IX > 4V/C$,Oٖ3[lWE%B0 Z gUCv"h"'S& #))'h( Ps Y oboI <`jXv:o;3 #4 1`(96 8 @ cl%./ J u@#/;9F A{a) )>' cjH]ݘq7k / 0Ƹۡ|!7 L K [ l VX78 ++/ 0>*&$ !:X`G6c<0G+&j&ܱ;5XZQo`eI D5? ((شܱX/CL !I%{juP>9,ߟoc'C#J:p-/<ۣڸd<q*V3%V [z_<8?B( $ N} 1IS yf#(RAZ86s,GY/g (3'. t F1nugd & '3ow ; #kl<  wyd[cg~' f \+64 !E;y|S dxUkQ.&Hsڽ^]G"'Z,h% PX26q""*"-GY&8pZU l] Li  H8ޜzL w 1d$t :vU z4Vbe1 X!* X Vһ /A,Y"=]Yޛpf' !F(m#~j7QJ*M #(N q + _Yb. O)Z" +: " ufN6@& H -'-- ߿~M^jA  6  ^`J r('P h *oN /e/k !U&z$z.rCtg*L: .Le CT  @ |h 6  DA "u! t +W/%} Q/ <LZ5!# n ^ $#t؉̱fFzP <:K ux4B#l""uhGd V GW,+~?WN>I-.-3$VEmYpf#+ &' t-< PY?,. e /:, e%Lm5 F J7oG gB Y |!KuCAә[x&^@}-"6B. s :eW_ v;=:P%iӗ 6W | Z  ,)[y5T:,\~7[`W o/LX\C>c]&XMX v f*" V1Dm֫n' eNV A N ,}1KA% ''?Àn Z ;۷ߑ`nk$~.DR@N]/P j/]4"]87xB 'y0>T8  c uk6'< 0u<  !$y ,zy+? $f5 6 $ɲ %,# 2U*: .)v#""8'(Sj]bMgx 5.,e|fh9CB;$D3UR!g&&/:< 3( 0 $ ,Q?kz7+4/^ '6,% =Q 9mZ_*</Y^>/  NG4ۦ).0%FjKb"  #6 iܛ ܃ 23#%ݠoX&B=!_ 9 ZM-H 9E -!^'\&S F )w wdWJ9 r s4& PK!.rG'#Ed ,|\}S JL^_E7+\"2E0! r\Lyv\}A .BAGG^ #+'zT)s @U`X@B[>= '`F\& }UkI @FB_[ k}| kD&|  >tn5$$^|11Fw!,!  [L@W*@ 8s ŀ> D (\_UQw%b=g eJkf ^" `C+ԫEm%!S9D(PJX2%E> $< V  .FHXz7ZN n $yz7X*>(}l )eau>!`Hn{ T29{r  bj)S Tr|n8,  GzQeص= } @.HZVT"ϾH.V"u[c% R  ,ٳK>3zc]BoޟyNS"o"F6:cDϒ${lv2// i%o'8[(G,B&nk*1d"˟ɂ2 J  : $ ZHN ߳=y N8*)P y . `H[5B 60 +"  1#Ǻ /,W7U%q w!i ڟ7V ''g Yp 9B ?$  |/a E+l p !$%k^ 37vI2"(I GjH w`:naJQ-8_I7bc!"Pa`os!~ E=@M!)  O҂I.x3( :%# Pkp:l51"#]> VLdžɉ|h( ? 0iH?Z B HEF[N~S 8^r QVRqDxu  x o%') J a!UUth ڒ_g 1l x7  @Y0!r<9z 3*8=7/Pq^P4- x ~ : t YbE $|,/x=5ms &8^ !h=9'& Z2Z(>L#);U .z^;B#`|!P > {-ȶUh{ I )zjd? YJ6\n+B,J^/02V2CeV  PSX 4ih*1&@g֨oT,P$`_53Nt w(P1j0, V0 6"JTFGi3Gb,+S$ Sz19~'9IO'ɿ1FW! c)*>(e)]Կ́٠T ] ym%eXz g z gY Z17 qAir5SI ( I ~ F GPtz X 3PomWaZ""? ј%b NIO$K'6 :@7-1owUt@BNΤԧ S$;!r$ @\t x Y"|( ]u>oG~ڑn -"H߬1W(D>uO VJ ,#) 9Lя-oƩ[\ XS57c&/xe @Cן 9E-$ˉˀOQ%t=i7QfN/ j nv2#}3> Z0*?v8Hx qz["HϤ(ٳ)s2Q-ko 1 S7 7z,Ki<"2(L?4ӳ*SOO () 'ouA}hpvP Ua?(X@#6 E ,9/#t T El$.Zm{-%?M7$3=." /' z nH < Ol7*iL86/}CS#Rp>#Y,'\aI zI{hKX~#7O&VEAD r/ }O\\U )?) xYӅ u] [ &Uj$p/+tG  lEsܤM:) . ""Su'= 889*j"hސ\H1.6j}7Z {uk Ml:s(mF_  |"[%0d8hF> 4Uq\o   4 o ݗl,(  Bp 38;# Mq,z*(C56D h9A 5 H$. Uѻ%9lz zA c( QzE9  ` `B ) o3ѧy[9O(Y; [ ՅXܰU*hgt,v+*;Wy ob/;"u'3,  %Ix[ [ Y RG," m=)KD*=1k7c# !>+^I|kM\MOGfT5]!wxJ ])3 J  3(){٦B%@\Y_bWj: :p>/&7 EcF |$[ (QR , 2!}!h! r}U +TAr>" Yq*n !7v(=43 Xc؉$%X$!3_+Lo5kD= E(R0 /oh?"<Y/.b0 Q|Z x6[ # YE^y44/kҏl c/)*r_w;'I/*(^sjYL*<1. v }l NLf :6npT6 uXo21*c u 6`p%شס8$c5w*2iaTʾ&;r+^/5mٟ<H 9   J- β+!d+=Z7 EZ=";gcR"]c g֚ 2cm((  wfx^$Y+Re2zR! m1j ;@o*kU9BfWvB-+`]b$j%Zf*#:/ o_qkv>LR| : K o7,>&&  0=_[ l' 1| n.68_P%S"&V fR! },i k|(cPYDu00UGQ zi~ !=_tY % (<֥ץa @R hn@ k/ Bl`  &R&c\8 Dc h. Q 2,k׃\;)/\$\R@xsPG!^Dh,/ 62%H ^CjW0%o#7 28;`<-q[2cT43T),ݜӯףkN+ SkS31E -Phۍ+ e[m)5y4JQd2``Z|] T !{((.&0GpDt +Z iem-RJ}2Ժ]ُ16(< CA,dpK'e>Y.F([T5*RNL  {3)  "  o ]W!ث܌W&"62423yu;]&8 "& l]Sx!9j#Fۈc{ .H0 i6 Uqq P^d#܅ގ J&.*` ؑ'<7'q~4 ]$  a6M ?, t \IXJ: _  ! [0y. 4K ^6d |9ug~u  X )` ]p bH 7 5J>ktL{W9^Uk2?6!IDۙ;k8 Hes%(<<  b@6| c5z{C `   . vP(lq ! }qH$4lrxOX#$c٨d";LNR) AGU b\G&@e6+70((&#WveH@ "OXq00A*o NhR%$%J>S+B}QSg|% Al Mw# qw= 0v CA  fuK g<#@7Qd`$ !l."<$ C ]I yt5 l%#*&B*؝*4JD-.(0  &H ;(I-;* `e+KN>1- t?c7   V-d@/ #H -+ LjCy% v$o_JW!R Z*))r"98 < ub 5q 7z9t< # K $zdH / t7۱֒E[ {$u8# K n((*Qը_ys.!"xreq aT#&,$szo޴Ck i o6F"o . ^{)j'Xpqj-} } >Vwr8C =G2 L^  D$i~ x'&bڠܡSp  nZ zVcU |e69mM Jc 9\~/" }P+ " \  #W0{!(> gm s dC1^.-12)["/; \hU}luu4La `j'dשKJ N^ 2[+% n!XFg^QW }N+>- #' _PVK : (;$ ^/Ey02v+z > F r ߟݔV;+*y6(4# 8P1! "! SJs@  r|M2X{q&,"! 7~utQ  > kx ! ]+!|  <&O ?Sp"?#> %^4" Be63 ~e ]l~4 ; N;Q ! &8,O?1K V* Ljq a6YT"t^ (_= L2YwpvRd > *fu@Wi%xt vm0ZF<| G j@-jYD | } .l3 *꛼׿OEX'wM&\;qݘU a } (aڳ {${KS2߇>>M%+3  ~ [-x0+y  [* Z6}D7 5V hiU sUP˲ 0!4+$ h%.`tA"( &)3)۴#q;~2U AFtX@5L; xHb* >, D4e=/ ?E T|bG'z!9Xk5)#{Ra 2GI c'$U<0KS "v }ii8ak rc^ '/aWq  ~  Q#6>U ~ykI`, c D$/@"- k1QN9 M ]eKو՜ezA=9)@ G$x ,85 |a `  ~m ~E Yi_J. K/FB3V  y ^I &~% dQY a nqEY   e ,%k>DXK[=r$x *t,$ su&8?(҂S?< FG_OC$[2[:5U QP ? %Zٔ L1S+D,Fq(/ _m(L*$HQD{jS #B j , ! hFO?](  x:1r+W V f SH1>Aڣ+Y b }J u'[ q]# k*!6M W ^ $]:H $#' @RC+&D[&7E^ ^;}_} (A1O TG& w D"#gB; =EjOhl`OFػٮ 2 oLf.x<:%PZ=ir[!`iA"(+R+oH܄r"!=J ,>L3] 5gLs\UvkE7SFxmH#n2QP  ! Gtx|;ow q ydn tz,b + g 6R( 5i  rY/(O,*[ ,^\AHNB  /o b7  z% mi1R]1)#8Bs֜=-(L/2 3Y+^E<Y'~< fe| *:%{)BAd!`"&'<钯Z=kiP1o%|!]c%6 9_Ck?>Fy&A"'!%ԃA KF ` aMKWrkA+nONQXz@R? *#=#&+h K KYu // j.H ޛWgiFZF I`(=} y  @  !0IY4A$u+ئ?  %\ =dSk  P ZMt)&  g"j0Ts J 19u?1?U@ sv"n/ <~SGb%Iv:*w 8#2 'g'O%(&2 ]!xmtX eV | B`ܢ<$ B_ P֫Gf],e %+ $+X@#%W%Mo-.ius av*4m[E` Gs>s 1Y {FQgk 64${/$2:'\@6ڴhU,4+50X + XS^l b[E] g eUl(dlK*5)NUvVX 4![=+:={"B Yt  E </ z% >3q]b8>"v I/e9?T7  O߱ s'=4-d 1! "97: T UJu CH . % Vhl!%$aIۭ "!Wf(#S&c l I[ `gq 8&9v }F-% & >7m[N  aU%|]H Ax  oKO e%1n< C,Kmm $ٽDٜ0yS!' z ^xzk:\aLFJJZA"#t#jދ *Ws a%m w <X ]ݰ! `&/ r ` ?%r1s-}!nT8< ^-tvGg,6pI | ^n d, Zi\z }j.g #$2 ~) 8-u8a  d a  yM VWwp!'1-1 d l_? g \ F' 'GE}vQL|" dWXCqWSyBV a?W91 3GX`D Xo`7 Y"x|qx(. { d o"5 C`M}+ݱ ' {Fwp c;cB x??,"4( S Do \+&y83jUE c! a ~2!yۏV !P9#Ep3 T~sQ s Pc _s6KUUU9{-( =; A K /)tDvgY(_,|֢o ;!}xt f 4zSh8Tl J~N\< #8*- dZ  P}  x #3+D |e)4&z 9b0ZOF8Z, |%Ϸa]Ga.9}8BxO[9J&եC,:5.px#  RcY/NN-+3̣վP ܒN"eڱ̹ rg?DP4 ĞKZc7<u |O =Z 3# d؏ad ݜSO&x2Vi 8}M܏I IEE_)DJ0 +zFGL*'Q  #| g,Hr  6  y$$%lhY =n )F\v~ tD2 Q7چ+ )?wp zh*0Cܟ #!`F"J n?m  W n ld,C!5Qbe>E= F YTt3 3^)ܥuZ#'x  JKED @1  A^4i  +bS l G~x |w@ ciG s >^ 7tBgbYS5O v (S t?t Y%N 6D/ f :j7  s;܊eL#j!%5z~Bn[x.M&fbYP06N 'W!8  uKC WL /!c4{ g\f` + )߅o VdEo/qE OQNoG 9>yKNO%8 Kg !B( \ڣBt`j a a #?6= HK P)O(c2="kt b~S 0~`yw`G.  c3+*&V; ?I9y Z$=PX hK@3X b6* '9{  0  :  24E A nyM u`t4 > y 0 d 9 bWDAyrzs -O'+  @:ݍ|H9\7~8Y!1g. ^ uc9 D >OB-/-!v'5(T4@* ^mNQWo.BNlJG\ * gl ̰8P,z :?9! $8 Ed 0wcq8B>r*:*q#J4_4s3=V*1tWhR  za{!8| j/B|'X1* %)%uC$1U c1 ߠ) =8! hD% !0<6/,"B t>Ij p @-7 ! Qh\+U  Y97 j ;B6LFBo^b0 J!'J^q_>  2X| Zy.V`+^   yWq_~^S,Nd B *vRh P?7#Yb("A ,P S ]XT#QyD./+ ~B߲F ao!?S_ a w (zI&UPaM# h) M$}]ZS\~% wD?2+ >ަi\?5~d@ie3Q7&S84=BZZ}.sI45x"` Nn!B P4s$ +Xq%e[!;+&CjXeDK+#>  |vW \ OOH6?> mu) tC5^f:='z9 qgIXU[8 I+6:z(a ,/!Ymфppv*V ! \ 7h2  O4 $;WԈuFSoZ~N\9F [ %lY#!\g 9 xJ iV2GvDJfpQE)i8`  ~p Eڷܝ e o}^ }J.$U ?  bpf=eaV3e,!"}X.g  ]  <I d| ~J`~ Yv } i| u/ }( r XzrWoI9|$y'%P{Hw= @IG`] v{]+pbK'W$I: k!=b|7 CU +_ WjVJ .6;#: ?wHJ92w x)O< C`BJ`UQ d- <& ,Zn MR%/Q0+) 6 {A y L#6}K 3 ' /;n9ޛrYvoP P , YY%fm'<G N H Qo  T=m@8p1 w S= w$R B  b  e|I|Hy V 7 |  w1N^Y:)$  b4_ [b(rZ[(w/fv84%L< e\a?K}8  1 q v'2s>+ ` -=o AF[M\  a%dnll ] W[ | 6*A= T 2 ~IEI%$x(Ht$%94XJ64 l fL3QM E= dT]|LR @or ݸrF n [(1 e/ Z!6'oy]oQ`  y! .+t~ - ^ } o :V" r(5Ց 12"Y !$]־aVbn 7\(|>  cAqr* #%[ d ]G-#}1~EE8 s vyjJF1Z~Vu! <f)k/kWI0 r+$C] A+}X PHM m%dWd' yK iV E *f+G&mL sC 8 ZARWyzO!!dLml L d4o K-*P -%f-hQ H=l*Kf2$"4Z:wo^A5 *L%  ;z`7Rib ~cf-ge ,!+?ܗnz\;w )"=6E:/ \ l E EC*0D)@ 5M Jk{nG~8IB=^ : }## kc)ej  _)tc"l  z .]Z7 m5 5-Uy (4 gL^+ T-:  b5 W Qo %,sQ@C Z UOUFV8Y9)|,) Tj%3 uEK 2PNi'G SZhoS" 00:SOp]t e!g &Q{) LR9mSJ>XyrD37u+7%tG$Z @! ]wއ ~? ('"t U7l )ev`~I 8&U8S9B* 9Gn  +.$+gD Qm Jv\l Pv 74C 7lpH{ JOjxtXvܛ)!Z B# nX#! %;cp"#"XZn/bU&<fX:~L  KcYmZ9\[< WGZ:[4L~ ${Q_FX`@ "#fޘ-B7<y-N|@0yX((W\==x~Y4o io _k(> &Z Oj9pMe_\<u^#+g=rC +MNocm v;w݃' :+ <,QNn6 6|r{D *!P< A # 3,H~ *hvF"&"~? 95j 0: \u)   TuYA5! . L ݬb ? N4S' }P`[l{eTlEj% /!!$wa <Ֆпqa~^OLG^0kvxEb9'<w3S 2N7 *:Q,Q=Q   <ZJO 1hr R N4] v,Lv&ٜ. |:L:%vؿ(gO `Yb%ʤc+`]u -.P&Niy_spL i8b`IuH u4:=٭B )` %5"QB%hM#?)y Jk2L % IRP"4#B#$s  [ڡv#Hx>. S . O60kwhdk T   \id\Pb    ;7LZy^j{_x &MNOQ}O;[XoB# _;;m ]$& , Z u HqaV-IlMOH;\*! r#f%wnm [ Q-nQ ;VP r $=وӞQinb*Ue SF|t>$ &Fd62;]=r  +NXZ +# xdL$3wD a^ Y dV(  I :"_U`h) -6ճ9S:=)'R# C?1+h_#L ",3/ FNd d 1 T lo?`Hm>3lu>BQGf3w5 +%z,~0QO=h;TZ-(6"riBgw  tDBu 0wjR5 Jg*u{ K G/ yE Rj l WO<>b !S $Ne +h6l3O(s8r 4o6W+ j*lu)m B "~.z_#+y'!7 ^A3@  o]$KWaG=uqL; ~9M6\ ? Y{?h > 5  $ I:z&ug2*XI#J { Q 9Zz(_] G - u0T-1$W/hT l,'b%^(p  ?d"$,[)FV!j%:$ Xߜk)cn^bse 23JDp\d;Q j p:Nl Rt"&Y"F &`\%&SaYp*lP^{ @j dE*. z\!''km"$XP_  3{ysw L.:v      R@:?J!B5f#aYqi ?O(+!e_ c a N $v&?P&~#3# $r KP8 w AA}wd4l d8AXteU!  F9o>+( j Pw7e#u`X59b.c iZ+2)$U [_FO> 3  HqwP&i} :\  o]'9lE$;P; 6S-9eD#96]@2&m} e 0}q3S r<" &y  0 j/,` m*֞xv W  hW7Y$M "W Hr \aKLQ LEG!&&`''j~ Pcubf [gN b E[N%+ Mn; S*j>D~4  vB A bT tgq21- M@v\vy<Q3 ~y1$n@P.pD-j B g  \]`tefJk f bZEg*)o[ Y5'p L Oc:rB.kz_  ]0Qo< X}.G> &Sv^ h B  @4B!l0 Kd IgEW0  e cLOi<?   g  B1,9_] kG 6Jmm1^4g? R P-g9:02R3.H$LG'=B4Wޅ,S Q<~vdwߍmzJb@ wT]&*" gsTMn Q-250k ^RM'gF  ]isJhX G2c>ay} N Q.'d w  @"b<T {& J_ jJ!ttl "X+Rr6-_ J;z CiTKo   FdkNb6 (P-&S{ I2!D%"kdrVpJd b jIbrCiK q ?  f EAWVl#sS 8n3(VF!!!]fw5 T $OmyQ 2I b&G \zY}Q }.A 7pGs@<Y Sw|z3hsV$@~^{]7a0 30kND$ u2KTb* -0  nH `ܔ6N,C3s3P1 U, }2Y PWY`+4p* "/p[Gm  q ^+I,-# # /)HKݱf M^X ?H[`> JqY@jDQ 1 L5?H{N]=grVA1[ AC;$dYL ,.)"H#׼_ 6zm' ZOJr`E` 5"_!TAPU[;P`8@3 (YXV  {.-%5+2  $">u x^ݸݟO %$ Jlfu ܏wA5 %? I, "< ~]3BI +Fc@lL3< ^9 0"{/vQjQAX3  uA 7 c7 %SLRz Z A z Td_ 4 a ouCT&O[LY UO g|M$[ +Jy 9 xB NhE c ;#ktm OW_  nxRXhM 1 #$,3lc Er :c\ -r:h9J#~A)2ChCwQYEKpm!,6f{ZJ D' gzP0?g$  : e  * z  GZ. [\ UW ߫P.EX ^OX!W m>H+ RZ1 DqDC?s 7 T.Usc$ F@0e   #r~kI~%miN h 6g cUdshzm*B|9  M  "M P`j-X%3 =n\"  c Fi~* s x#!YUg0Pu`L o x&EOa *  e! K KؼK+=Tr|. $X]&'!Nya fr-o}FGm+  a +ݵr_=+L rx{ow? Q @,Di  qpApp U85vn4%pxn } wf7$ZUndQ _p X- "*.)9ݺ f87"k e\/!c8  8 ;4 > .T0hnp0&K[0 R { nVILBT8  $z)#+)kwݐ{~=} 5l xe a'R ?1g |H),>2 `ErU9UfX ~u ,rik P{Hb \WR& *{ MdG 5JeC1B n[ Du<8#6  Ki6b* # { 8 [xJ&Z qP@P d+h  k5N^%{  8N Py Z ( d4E L 5 [ F f=7 n\sUDP4<Qi5 GoM+O>?# r t28r%Z)x aP R ",Hx -) nH/> x~@S MN<. < A)/fJtQ&*.^^24& $ gv 6:s}VnjiF&QP 9lTHM r(iL!:A>24cq_g z3 5p6cfI: j C TTvJp# K< 6   pN%A "., ]&so2KCD3@cy]v* " 2X$U>|"''AeN.v- 3  1  YLa?f`~dHO%Sb a kOx2  + +.3sM}1 kb 3h3p0y9] EE0,-+߻u8Q *(M }|au u(w zXiSH{ ~U Qt;tV V .*  %{H1Y.3 x  39+8= 5-C PwNL*B :qdK qgZ76k9*p>x] ts idA%m% ;; = +Kk3 `  h,FqA4R* < |1qB<H _ [_Ff2 l a lo+LhY  g  8 3S j L HE_7*N)Y' f< v+W&G 5 y]s +Vs]N_K,Q^ k !?  ^Sx#x9xp7srfX+ #H D eW3 f 0 h  | `U`*y}T_M @ ']q U %`nvS & oZ v+@]ZQ3 q^+##8fuC ~&l{l s 3j Oe/]KjuZh $NX wI  WWX,stT xE)X,#V'euk]({ B};j,ig`w\N &pXe1GRGZKhZ N 8 8+T I . w`n /*I axZ  mNLLNDi [ Mf '.$_S= _B p-S $p$yq#ls  G pEh2 ' Pmfvq7$\3 ^x V_F(;  )75^E0Ҝ8]%#$ (XG7jOBl6 d!yZp=T P< wGW`w5> , c ? ?J= ;)j sr $yY $Vz )awT\ 5r(}"P F]{ 5y#8W7  C) mGJ\ [z O 4gjF{Dy< eO8 { Q v_nx X ZSbouk:/x [  C 8  ) ,>'ql{t6  h a.4' |I+F >`'6tP0]^mDo} +%_I]> -Bq` i Jn dPS|/pf7</   ZDE0zwDB1  Q7W -&Vk>IlnJD _qv19Dn m$1=R)Q!6g3 k\|70 qgp#*r W7u [': D,m{]ab2%y G[45` H%/A eU ~<yxY ^2 Al.[Q q9 [m\  -(  LT %|8[8 < sN28FP |3}$ E b'nVo HVSA(|fms & &l]+%bn" %s ozT ,H(e ]U ^l1pJ(O7 B y+^v[>e/(o_9}2 GV fNb:ug S%)"_&a[:^ H 9 _jj߆ yqF] tf uXF9&  U ?tߥ!zj!  18:a1 M #E  wy[ iA*EeupJH5)3 !Q#3[8iU 2', &ޒ|"B.H:R,5 /> /'2  g 3H}9 h N 8:;"k6 v X=YCHz  e}: uUD x -O)RC  AvXOgS1V]Kl1s D L =#%B Th;/QDP 2 }Ft jEh%Ez NU -<u7Fn S R 3 : = # ^ kNj>55 L v(Tl.;&pL3J}8] AbQ_OkH X # N-&N;s]`}V l `1<)q6q"< x# F)L|hAzm} yM W 3G_a'eq}z&;`e!F Xq&c {,Z8+n$g <sMc 3 ?83C IgJk` 3r< z A>^N{5qQmW9%<\s p hf^ = _CL"&  K}}`dfx( h 2 '  y.\R&J0AK#s#!vdIJ!Y:= z;UKwo(tnRY_` 5+4   *\UIs\:RP*/2. 3ߞ /' =] e qF%moJ y"3 a {7E{JdI?>,0UzP  s^_~I |h O.rBe P +  m^B/1   JyoJ1mF"m X rs }E xߖ7J9 'f/uOxh~X.7"ay@ ) s.Q6 <"]: MSN= gTca89 ]{rwv t iAj Y  HVQ D > h\QMo?H gK s}Pb|nf6 bߴZ Fg H VJ0J'2Iymj !\IG)^h+O@+"(u#[~|x E :9Afq+x aoQ= #  8 N[_"g&}J@zFf 1 MLg a &8@ x,C\o?j 2 Q&\7;\n]uM-#d@l|N_1E g " & ] b # 8 h)I:z\  ]] dt j D I Ro  (_g :c+EYLh#eiN O^wN}G,&'|  }_iB;_]<>G q c 27%9*S8 +yxop*wsHA""2c)iD s 0 iR0&&!IM"I=  X:t!Xi HO H]oiw 8Py32 -I h26:n ] X 8,'.Cn2 5"n eq9+x2]VEu HxG\j  i S& 55 qd^j( ' k Wt~:]  ~T.Y*blVa:$ w \9 %ikgAZdK ?  [WmDW(^$ %ne C~.$Ya~7^ bLT+= K K- ^}/  n{O xW0 ! L " ?* 3yuG,"$ B [N/`d. om`m %'q Lf߳1} C t q E J  9 lDv87W dJ! ={Ht_pZyE M [ 3oh<'#*i  zI E=Vq9fe1x " ^pt>F Sjsjy)q`\c   H s kTi""ZTUf k sD !"(7 BtWL c   W-o>r =M<*:R 2ws_NLd : /  f XLGuL'X Y>W  H [. A*-bL/ ! TVn7 #_ 6{=Nr5?`~= rUQNo R  $ <Tm* Z 0{p8ZEq<@ P/" + <T WrphwP)~58Ou*^Go,r\a  ,_,w 6U :~8X= P >qU, /o1 "e-h`$0 -Aup <,~5A < ? ,X,=J rq8N G Xٝ_ @ ClK-k '/ hMi @x yv s{[7s) 2 (dE:eC5#{r  P Z~+UE4= {xE,  [ \srJ.   d ;{Y ADX] ' > o}R,F] 5]t{ + O+ MC8p'QpKy."  DHO DN yN y Wuo~I rlg s h /e_ + n F(puCUjO _dR T Y, 'UI: jg U)L /lH6  O xS0k :\} D>U4T 5x,eO D& G  c H2[ ;t]E{g25&GISg7zho| * f=(PN jvkBW [ l-yv 0+ oym&d!M#hWdBf piDl   Qb$[G2W v X =JhxRe  kP @BP/; x!&(xz8  ] ?Q D ^a5rd'w  f 0Y"M)"'%nBF\i8< mnNh% '"Ni GB K y|@UCK5wc h0ރA[|5+#'X##DD.vW:J1`I3W @\ f)8ax*2+'_!QXR6. r; ft c cTU/] W1q8~n96 \r F l!+ } w aD#-$W9JJ&WG[^#kFbji]~d} '3}@ vL5]6"^ " |P$; c s%0 &{PW*yT 1  _=4 O;qo%B1b )tvT9DM#W 19 4 41!cu'E ;"!eԴ}R" AS DM!ERe!9 Ue }} @Vg5jq2 h $   "Ib] J +x krXOfn/Z8E N _I Y$ ? KT^ N+ D t5 9 JKP+V$/rU BF 6RdH o Q,0UX\* \ Y+WN/L|taCdff#H# qo^b\( L+#W }el{-[3"6vCv [G \|2WM 6ukr~ v=7dWH^#jv  ]  O ASNlp +T9/TEu ^ s r  ;wK[gqty edK f?zA& 6 wx X a+3 F * R6bt *ER,Mr/S6AM W{ UZy#OkVsz7!f2tAe[*kU J$'  !4| lYm p '@ O]IlKqB:~\(#Q $  7!x[e.st 0M X24x_V/` =\ZN4@b . fa s YK8Hh   )Y rWV=%]_GH9 EG }~j@ tjE [ 5 n HN2 7Y:3|r|Rtxa\Sdsi&Ӏ% A"(%-# L [$ 4B Gj z-dxAC4 O }Y\(6 }% %Ta kJ} [G8$#u1 'vB^BPeTJ#\#Zy߅۷ݞ.#w BtACKt^zl @p+eN q.Hg=|5~=   +E];bgL- BK Z  CwVBlh d# awop< ]YJ;(N }(. 8 EHjKu .$}DDZko0e D$6d<]=# ""@ v*pt*F R 4"W E <f7;]6Y4!Yof TM  P X-3r$AptjQ/A$ -?n;h=Y/ + =H0y E Fh~#G_:g  >[ b,:TRX 4"I;{{-/ 1z+ * bV t-QZ2h\Kiw G L8a n Q^`t6B/B=C 6sYY[e,uOC`6*7qM  xkSz?%LU!e[X> 5E]P  WbfVk 0577_zbq  sY  k - `$R?9ZCXUdrjA  w"{HY> > U ^hB#X  ,1Iu]XBp 9wgZ "0 K $FڲE#6 p $@'%Ak qQ q?JO dp  _T$xEV==<;gFqQ{2 /DT)=!xT l ~ s[bD]:0~ Rt Hgxk3 B  N "6 : 2 t#Y7(|$ a&("MqP\ bH r z HxIt+I;Lq u>L l K iBJzdiCA  %,'#%W(UOVM0]"%! h]NJ R =  O!Ur`  2c Z ]%߆ߌ  5Y+* C[X6/8N$^ y y: te&e5tyf>@Jbr)Z3xFmcc 70^~gq,Yz|*$7Z T p4=1iL(}f A  |xE:g cl\?N_<w,: ]] [o(/e%R K[$ a"R M,x "r Gght"r n ^ k_P*VO2}u<;V9Fd= e4?z u +a>2](t?$E%'  d `]8[$ SWM]A9m8.P 9 d?6YcX>_U,V M`WW U_K[SaBU-D/Xb[;]\1=I/: kFj<Xs+nI! ^Ca@B ``w 9= :R}x w l{>~B~ ? V:B6|K;Y<& J#"? {) J;dJOuF~nE%l1<?* ?PnE cD!k  ~ iM F#F y \mPogAfWz;o!!y~(M8;2(, HpTD0 }cq :-y^? RD H bhA'ic!]/@}v . :h 1p,! Xm X 4 (t' g{!TD ~VYK*zߨNZ"R9 F  jJPk V[ M -? ND+X# r! MmS@C f_ hM, cVSX;0_3.+1zNv!1`FpX(wYS-#  jEi/ji*xP{ nf ^W `\ d &+vE!w $ Y /JNAR  s>{M 0 $ 9qFzDc nNn J t  s4? snCPCYT  n s8J8g\ Mn  dK E/>3% &VO  `u%6 \ rq t QZ$5*C% T yG%|.h J $ e Orv167 ,#7+ vD JW TC91 k q (  0  J(O J>m  IO%;Obu #N -Z]8eY1{  q~H$+QJ{>h 6z Ayj  2   @3-ԛ M-sn.F82@}T1f{z=^z6 , E8UG"q!cUa % g E`B S v` I?5'FEi0 P#1}c  X"R(IP|a$ #( ^/ v   (h4D#=CLI*G:kh AW-r aW5vy@&Y N J ?$%$"z`@/D" K. ]<&o42 | U+:A uR IN YG-  v @z 7 B  1` |k0:way@ W  Z#7h>O\9;~U+V{Ar._Y]p c  |ELzf`-Aj6*zfF  8_H*m\__| fAO(G ]"ecX*8g N 21#BYHWsr)  s Q vAXiqy?p ( : !( e0bWG{> *M+B{zJUAp $fU  ,0i"L>21g4 S i9  M D >=9<"bG#`9p A vov 4?|$sPIC V  * @k@F+oH_  WI =-  l*lhyn>WA x K [ dDZ^q. NL'4O$EeY(R:Vt q )"  ? xq\2n>WZu{ sl Lq*2 c b/%]V| uE(U & 4 Y `"0,}?.]E  Q4vuq3hmm " wIw9,q]?6x3%xC!z NYk ;,1#A5q2d#~JDSiPZ`  S ~Ktrv-]-xo| { H @m <k}fV7; VK{Y  z}^&"8\ AS I8;?6i~IU*Z4 /R; +Om[ uu|6O)79?QE"=f/RJf;  _2$Z&,_m# zLJ %wcr sF  QZ? asS%y ` B^b Luir b[!Hk=KMG Fl ) 36 Y d0e7( 4  S ZIP pg T[  21'~4" | 65m#!Nj , d [*c Ey AgMK$n o - ? 7 b h&?.zG5 bW (X ZB x   '| Eo gH-=ySTRO;HX1V4dm?l +UBQ F ]cK[2'x43 P FyNeH p~ _y/P< &C~p ^{x5 sqPP  x 3g7T$86h M hc:J`q 6 k rkF oB E Fz3`Y 4e]rR B a*qG 3  m{ 5u:#qC:^\G+  D # @S7]Wztb 5 ]25+ _0Oi >f|6R aPxI +)F <L D MN;f?E[EW)V|MXlU%[>:q.sO= u vZ D,k YuBk K B1y6 rJ&WlBH1; MA(N t *`H:AL!bW\n~. / &Uf 52sY Vkpz(^|:DRf$;m2on sc~v(9 I>ZAE2r&{ R DEYTs|SA   R   V )vLLeJ wyG +<*jKw)%1RaM c O/WGDElfvyrUs L ` LnH<\ fIYS    %\N JS<Gn}m Y+Xyss,*Yl?s1Uk pNpdjwEY*: $}6"WVU J q | sw5.xyi'A0Q c*  ef~R~#35Jrx E j]: W1 2 ` |_%o4rB83 ^U< ijm\jXfQv . R ,AITu`8 n]C+z/Q ';bD1 B {o|,8 <m $eTR\ES  P j.Jkkyk N& ,X  OOh)p|Q;c _.zs u^ #(l.f]}y\ Y" Kq[ :[, >MMAR7!'#3 (|7AKL:M?A$p"3h|]GN %=B {S 3+';3:X,  ^,h$! V @ / {pRu (v8Z1A-+8~Nz%" sDl>"@ h  skO672q1y/7* !\9 4 1e{C[}1 ;w5a,1 u  \GF+m) O}N R Ik  J  f ) I/X$ qZ J}|T]J  42j& y W 23U qAMA=R.Bs~"b -  @  G > < E  gUA<z0ha  :W MS$Du-* \ h taQ4 1 q WG`q^D9WOeBWk `-^ ,glQ&lwu  e 2=+(g}`R8  8 1xw!ABCN W^>Ds 4Bw RTqZH \' \j | 3J-xOY-Ci? 2 N fY~- J,C _  ,JFM)Vb  {_e yH,2>?n.*g n-QQ} vM z =RWn %!5nE E S QPI%x ?. %l++%S@3p}^ CN  :'=Cl % /  XZ9QJ+.CaxUc<fp\ U#ES z r'lsxQ$OEV9`Vr   WA{j*:' D xAO5I*\up4>_cn3l  rRh57rcX\y3kCP6upnm1%dSy"?;{n0i@](HB'. =L?]rj yZvl /$9 - ; q xX092~[U5AB5MREL1V 0q sbIq B . g 4  B>DF<?TVh% a9.}fP  &RmwX dg,)B >dE Vu(R= A . ` _X1{b   [ \ 6=ni  >&1ii6)?ZCh RJgFY  P E!h4)IGE2k {h c aBUg -RR*I?!g3U 2 g. ]*O PhNVuj j [ i_(LAsh+g3  7bpz\<" T _ ~gDErBh$~v1  (i/x#J};f@Mt - u cd 9OWuh 4 RAc`#TuR#x:(~ D \ &%. g# H s  wC,F&r!D;la` U -_5.YL E~1 T }-OX"= D }I6H{0&PPh#g haRP Y5- $sV*g2%7r"1kWvT_50E?1%*dT S B IASR7*H o | t? /8dYV9`m>n-v[/N nB>t6(u h O; /Og!~pp))-  do= K.;  y1QW Xw hY5Nc y C WpCTx{ c<l_? Z [xntX #_ZQ  ; i 5NlgIM1, R  D~6 } i#B3:kQTY_O1 'wQ* ?0  Xr ~ z <sdFv m (t.{8BI) d={q3fKZ4qEABdv  ]bzN)F#=O;U.V'o| { 7 &zlhq d < '  8Pf5 7 M36Mbf %P} e aM K W0APY.bu  tc}+( [g L<.93!nb--ug]#@O|?)'^6:9 NU|;`L`HW*d5[I 1 i` uu#;l;R<b R"1(yMCbh5,  WIl; fT>?~|o{yLx 8 x4:Ki% T6 ;R 2=m-{d;  8 ^ WC< V;G bhJbz`S|v. TGoZ>Yu * x R { Z D2B( AL5S g Z /ZWC<>q>L l EE }Y]W 5> I/_Iz /9{30 Y g,h3kGQ  bP,3^ Cm zi P.pJTpO GF  dO"dcU"}b#+ %bM .:kUKSI 5d9QC0,OoAR'J9SEDF"Z'vcFHF3U|L2<(ed$+N T  ^ M P \Uw7i}Ni3Lfq _=$ *# 3" Y2&YtN.hF 7oXM jR=-Y 9 7/M#=?@O6_}g`(yfJR"&DlD/ ! B 2 Nq(B&$6{e'D0}ieeOsiy\I3! f#=< odBMjL gE`c$;RG-,3spR;i\ 7s _ Dyc}r  UPhU1T/ )Qtc-'! E~oc p*m!>$C3L7mwo$ K};V/e2;T3 V  ] ;F:n} Z.wG2 \Y_sb  0HEChxgk$~L_iU35 .B ywK=IT4#Y 17!:rIMZ %g /x]GD}h+ 6SFW & clDmx~'ye:<` )8*Tc@; ~ w ` [#I)WxI{A%\ O ^]<.# (4 seZQB|NF'M-  1 OaefuMX )ik9(u1?WyylwZ  7 ~ @ eJ'iZ06S38 o r Q8=K|Ej5u :6% Z;c.3 b`RaZ&v9~ ~#Dz "0D6W }wD/o1{k  B p1KqrIXb |xC|y#gdkH)|N L , 9;F# p$Gt `Z$QF$#a ;f9 H_T+y2! q dos 5 y @<7$a>,(4_ a wBd!Kiv 1 " ]_;ZC Pm mZZmn "bb^Qf^I"p : GI&*` D=.b56i 5 ;hd$ )R X * 9mpxU}L]x[' :Z3R[W TbWco,#  j 1cCF1 @ \ "KV 7}Ja*R]  ` I F"+BiX2*/^< H}   G#g[6 b1PYr]z 8pJ !;.! E&Dz Xl dd6&>C6U-#W1yoVJPK8Q UY_Yvlca  KF.M_E t l&F, `2* #" &*I#, 7U[ . ey=s3f6 , ]: | \Q" J3g]#E *j j q NVE1sLJN0 K  p m0E X ;2%L)/ L ) ~ T i=K3.eOrN)Rdj ]F|J =X4T<hs Fj ' g -~Z4Jo ` X,xf`V}6c?6 hEJ c ~#_?\i({ g  /3J)WC6V"Av-- BzAeO $6n^ x \ x&Bf#q}&$IQl'5 v #<-@R\ F4kEFofO g W':@I)T!A;T *5e +@+.Ij?/J^bk[#PNUoF| = mpbb51E?LlLka*B/RMPK3*&rk t-mI<Pk15/p9R3Jwe`Q3GBqb / 4 D \ r&& -H  m~0  U%cy<}*Z6 C d M-j t M]2M(H8{C}d $:} Voa|WfV;bv=5!3DU8#[T{,GDk a! zL1[v  "ET]%* <I~$8tyv U~~ oUbn,\\U[hfnW.>N<%^pvK4]EN  l  75cBQf\G5Q>=Z5]Gs=K-E ;e'Ply=KIrb-:}3E|/$}z ^~62@- Ts [ 9_nh} _; JaE. NIu/_  {%T'_vc>b|"RY8qw+kf w&_H.Fj/=RUkU7Ce kb}4,WGYJ{ud+ec\n8ERm':PIftk;bPZ ] } L9g _ FQ 7 40vj rl @5= D#'. d 7 f ,G4Mnh|c  5Vs}U?GIDSQ&{mI0b N,& i{sBO  N 15Au^M ?K|up":x:o L UAJf'9m)  -:u> (;vs\,`v [ 3 ?7a0f/#.X(&  d1|Zq"{vEkafk t#aA- 4)` i iEKb-5jLO[g0DgT/r|\oG{|}K'r%4vo[` ; N~svD @&m%a  XmbF]V?'Km] `  c}M;o)2y<Ui _8P5<;WUx | P.;eRy  GwzlxJ+I  <5vV} 7cP; V jk+?0Vn58k2q-)%91e5A&Q#s>$`! VlL VwD=1]6mM^WA BL4U ?`*Ka  N  jxlN<"( /  her R `:pw|"iJ>Da F B  E;{-FsBO  P LX(tAGipqsu`;!H  S r [99qP)i 07B j s}kr[Q: o E 1,UX;9^m5sPWXaGM|n_IE`x/: %W ??}gVto7y3t p*<4z)#t%}:cV^k0 ' }(k   5 "u) rsZ~` +a f7["Y22XYkg O 6+vILUZd<ag]Or([;)K $ - $jn0Q N%oB#mGh<B72  9BP% 14{F "pi $lhUP6 L T4?1yh^oHi;[}rt,R_E};| |_uDK C e )  -kC8=+2 X#vTc g K Q/2 Fg7?Du 31 g&?Dq0=0%7 k E 3)tL"_ [Gv Y_x%$*m<  L Unwoknh&SGv wp~/ lBs5)$5C0P% Zj?4Jhf%-WL<)$$j8   :.Jo`8 Nql X~Ax64 pt ?Q!3 * EPz2m%Su ArP pz|E F~"kf~Cw |:$zO RDpgoX!S!:e[t 2Q)KgOc>S.qsKE!DG  2bK{ l1Y W   I|J*hS\9%hupY & z  YsJ]I8i "  ?-<  x |3'b`1j~+9>vGGQ=MZ] k Xq!6rB  _ m Q]!ioQ'QX!  - T$'$j(Cjl &!m mC!ad__  e  ko/Tgs5F9A=5&ewrD  I  Jsa<$++QA9uAjrg=  i ?<<9. - al mZ&  Y*[F)#nzNKj;O])v - 8w ePi8$Q  k ~LC f YTa1O *  4 K{:vf fLG!c#.-Z ~ H wZ?N(r)lt  z  @z8x 1^!"gx | G2tZx  y # p qRhVJ ^*:PB'Htv/< -K"  l  ZRAU)pBol`  Nf[jmTj$ gT!9.    B0#qYJ58IM /iR[Dl X D Q_~ T 5 ^ u![0"*)ZC{BOdSXIhf$dVVVQ[q4l ^ jby @Q~+EoswW<N L. >zi Oec"7~9K ySmAAb_ 91|cDB@6 |l??uD}-^ [ k \8+LPJB`b,.  63:409g =   T10AB?$u%ufCW -52  jSx=~.N&V\~`x \ 5.xA5(7 \ O 2 "4^NalF9 R jd1r B  )SH6^nZ':Qy?P(t f++pu&':g   : iLym:*^HE0M:7QW|sn,q@k'1{g-PJkh[N'mBO7@Iw)BIl `x3Eyra0i$G=_{_R-kB'7: HMV . uRo=P q' =o&6v&kE i x "<8<{F9-]b;"7:YmC.wTSHdGK`P9O"7AI~!}:LfJ*J  C .Ci FGefVx c[.?nig8ZptA?  /m N0]Be+, u I %J}U E[^>`$ & h ^a1YTr]4 @ E < 3[b4HyMdv\.4Y4HaH & v: kI mv>E v_e [(j-uw  9mHDv\{?v2# K  %~"zKx8QMKV>lo|Xd4ML_m \JY2]$!xZV1pDi,>`<p~^G27_-(q m [+,,(_t5oC   N !4 Kaot5:  -F/PLPUD M 3eK ,ZKp  $(63BC%JP3\Qs{?"\ Tt *?b `mB S   <L7GGE; 8x9gz&}4?-x9z ' > D'y(6HCGq Q ,Gbyn& d'@ o8C.Y\jn@B:-c}8CPZECU)y[K!ELbQ;sh =  ZQvb*eNr _@Iz1<4"7,y T S pSG!*C~ u 8 6- t6Fa+B|g}}HQ6O  u  FH +zT7T>/Lc}8x=tb9#Bz/L/Z 7 7 1AoqR?[4+ YGlC}NhgjFA]d@4R(KJ Z?E<=cc}RjgiU\2x/6P853gsx: v<N+:D G|;e1 F w) QSsE4a4QJqZ\<FiRZ)*$c.?[`):xTK1 1 ` *!H: .?>8 +.^6IYQv9 U + 0\@;8G%CGQ=yBV z9K[N]wd R'q  in]|^Bk'tR9v"b0.jYWo'MHCD(z]u:.gS/jj'E(=3  s|9Oehg|6dbYq-*  N kUfPwn]jChD~-+y0} ["w;/QzrCft"y2N[qUJlxNJt 6Cy6_<:yl }:yV'va>}JX dOK..n! P:;v%_@$;yA8c[^i g$$=fegt\mf LqLzA/`y>b)hC/x/;@Jx:t ;^ R -{X15)l w K VW'U>  H 7A]6yS,bC x] z\Vey@MY1 7 05 C# ^&iua*v D ( $_x/y/Bh L 5 < S E8j^\ =[ J\i V OWRE_OR,e(h1?!~%(8,kD cgg-o! { {  IMOVR<5kEdj7M l * z=ItR ]f=0Q c*OT/ 2 }Bm/G-2eo+yF u % ' ).$1e ZNyrC @ | (1  O#6QO|O gQ 3 B!Ve eAVQP(Mx(I R ! F p l { g=GTtDPgf3LIdN.S;v [6)PBOo4M| \d [ ={~=Rw  6 . vq? r 3S,r1]cxo1.$PJ:kwZS9Cj+x/|$0~|A[$ < h |TFcPy|.m1R za^@d/Ysu2.?&MamDD08>v w a w#*T_V,{* # p fd`v;Hk< o0LynOZ/P-L+] %j   >_[,L mo K  UICqS86.C=m J f*y L*qjfD z,=t|>gw=Z'<&kZA U ` <`NU=</~ e | Nq8t/Z p B{zYKx|D~-Ncx RBGg'K|1] IGlK4&VaPrwj:r%vv[n7  @LVL6}|  ;QTl=wftMd>ef?<{0b.;M2*H:+ #<f]35Mucr5IA7KS .~ _rd|@;>udj   unv,@g"vpPRYbDB6}rP;K$?6h|W u7~hc]xE/bEJ  r NnB QfF<nEPStd(XRgH:S'=kx>y[wO%CPW4Z!m=lt= [BJzv0!S v]soN g OavO:,3S<.2^C-Dt6K-ZFvk|D UejH;r77_|1qDtA@$Sm1^!9@E `hCEh=jrW**oJGM!%~62}?5A[v;-i$@_9hP.,ERox8l\ ^d3_Z_{O7\Ey;bS^|0lS,Obq-t4"'xC0QH +5WIExA5v2YI N  'Zgdgd=Y(A>Fon?=U*jt njcVCrtZ [ / A]U>Ik!Qsn$!kn,#,q8  4  s enM)&V $  F'/>B 03(en^+ SM`CE*jQM5,%u'U [I5(qrnJ-o7 _lR Z"eho$x 'tb 0 []Y*Xf jLPBLbq([=u\S . d V3R_89oj\ W z 0 oa{8) PZdg*eS@;j/>7r O%wN&7as!mzZ#vI hnOTeRCs1M CN83 a ! f e&*|'HiQA*}>||^ *e =W|}qZ|GEIk\u;Z'i[%TF?_]~^` ol@',\O2-m_W\3}f*q<; m @a)aNS) V   : Oy&4 GH/ VfN3:xB~|l*cF;tR{}?K:Y>5lC4a/:+v_~VWHk*~Ye{ ; [*aq) ] ; dmT!  [r)K?YvY x ?WXFg"^ H(SUL`l(UBGWWO* |JaM c Z i(` i6'tJ>r5'}s2\ D 5 M  ?>'ha@ < lQ Z5vY.mN,KganE c >?!+(GJ  g ! h I ahxA4B ( yHj;~R%to[=5l'#A^G-XayW >xnb?GIj *94r3d|$As(bD{+(L M(pi_/QfF($-he .[EEp I  } (q$"ys-) cEfV[<8alnj :5CMs6 g;@DjD6L)taWgJfA`2w=_Sf h|z+CM-V'S WD7[[vk^by  +.DDv2 r6J`\1i%b,G\C9jpw b 6bH*Ox@Z;.| aOGaII-$6.UCoT,;&=iTzpLz/ /<#c9M>Hr/g&HsdS;+#Gko$)-riG1[{MwmZ`}^E3u o^=r4 jp9yNv rq (|ZSA\!`I%{RZm! sXW!?$@[1 }6 d 8d6'/ymAo;c[;>R"u12{,-iQv T blE @+(N9|NFi 3.ph$yqoM@C^e# 7/jc /j[<Vj A8ke)A#D00U|!B6p9+;=Buh69tj-u3Ju&Ok2$3>.C;s?<XEk!y -N=Ls:]ESa$TEx>[ _>VOlu~%`uB49l"snRTOe 1^c+qh<538PA/9eEldJgJQt,S}wz4Z;_+u?^L oxT7q/TOC Kc8 IWb 5wN4%3x# =~?P>NR`w;dsY % j(` GS@!\5r<%]efmzruH =CnDHox6(YD;X  @kD?jUHiT"B ~@nDm3TYlEIM9Xx.2HF+">.g)UfGLS5~)U]3,5x8aw7 l>3jR-h9"yS*NamP(  G!k4e.s'LUaKlRJEqfYl d4@o:Q`(0Sp0vwVU DY DF-l` TB[3 T1M8=wgB1RZc+9#2~V+;}0vW\3% aU 2v cC4bLEwYb3Ot{LA'Y7g}Q#w%~A>7P|*MCVG_&K|Z9%v) E~b& pPI7['nADd")5d=> Zo^u8q:bV]7=%^I-svc2LQ=N%g=< B.JNe!TE|[g ^>kft f I G=R: ^; |/."i) ?uC XK.{}!mY}-7Zi];9&  /GG;X\G~~@VG'iZ U7962cO74| lPX 2Xi$R^  Byz$~gL]>Q2<f(;^b^&Z!@SU<c(OloiG a108%)iex?].CDN< @$gDwxalSF/.B?pK \92?VR`;v{B|.SD . F T &/(:d5% _ D `_v3HB}Q:Z4G(_[_KSbMu2^-?4TwgL-{`83`WYL=&iB \9. .lh.^4s bF^U[6Vr#,b&_DV_>.Jb0>p@b F5WR#y+*cxkQ!HPHv KQ, b@s?o 8mb28\Dz|7QY{/*J{q|6i ^\C`ToWR iC rE fm:usw U#h  )MXms6UR1J`UwNB,?Qm)XTbvCtW\ kS._G&*8zi!( j\yatFHRWRR,f!Sw`4-FP7 9ay{$u"8gU<nU3vKB=67F&'@q'|s2  -_l E Fu? ee6ha#VOna~v3P.X lNHtYm!Y!Dh%E_2UK@U?bqi[GI#,PNCViH]kYQ>OULg ziqBK\hZXz5AV+H>}b}Uj9F'A$77dQ7er&mb_YG|&&(9K)I S]N~YXfDt& W;4]B4=Se| *G68J\Uge@=|3c_2HOX^2P0/)y88_G`p&*<@-}_3SRYu6gxvom-}q5z&jS>"4+'+x1I[0>bWax]YL8oAES[g |\E_u.2I.Pgo{D~ Wu FlP 8Oe#\]4&K?S>ioG '!ES K 4{\~S}f*5s"~n>wFo2WMn *!!:U4>!dB+"\0WZpCu.cZ7J$Hu`Vi/haD2 `  A"m^s_\Dd AiVJ^ t P2Ot9~c37)6 COez+./ploFj;+E[.Pke%r hy( evKo;9To[hzw1rL>; _21y ma7((?J?s{t7wi8lcfeU'wDh|V1g  J s6$S?82I)8w qt<2z^@^5U~V0^*9'pm?F.\!_(Q4 /(2O2v"h9,#B_!jk6t^wj&stnUo*Qn  # te>R`R.ZOYP A3a=ir.r\YS3f Hx7>}p3N$ Ud`S-Tiua{XM}G}l&lx[Y$e 1Z, |P`t(0S8dGzc 2ZH Y PNvH!61D:yB~0_i {;sOp0`fwxs^^Z5c@'Jm<(k~w_nN8iX " -vB0*To?qr+:&9#A.\`)hxGhki\*a2An@``Cq|H' /` Q( ^Iu$~mJ@m FyAulf|%VGLI {'zWY+0{Wlh{3%U"em? 8wNNezJR`g^p / WrgQmLU,j%#hWkTy@:L'GO_X~[$G`FRD0eS!8[k)QSp:|6t  _K /L.sq1-OI"D/49b$ cIhS_yxhtsF$H_A>^R  NJs ovRn ! Wb6   I0==~|.N+r/bo=zs d'($/Mt%B| ^<99nuQM^T h  WGh [YqgRetZD$B 8EoqL#|>Nslnky.BWPqkV=g|}@xJs{l|rZf|29JB7{T3Dpu)}q}.((DU&,s:^'R #wpnWb 3&f??}tI'+{NFffS>.TW"x"kZw6i8'"60$'&%h^-wuCOY:w*'( 4JVc8 y*2L f,iVd/2={63I"m}jKjT 9CdOM~VtJs j PP MJLr wC*\hf&&2uQtjb3Wxl{TksZUG`e~H`e e,L,urh.{i5'tmpR+H`$g=2Z:[BIRWjA+?o+(SCxCp?n]9E2SSI9MR;b7^ eoKmRp sIV]AHA jwND%u<^9q +Ud%Cx+W{:r}"_q"T5-|,;CmDNiv* GTr% &kN,z^8.w+(;XP/2U1ImR#X_,'\a#P)T# sml;adw<ysq11V<->Qw5;Wj,aXOaVGlKb1}yAoCQP+\@<l)fGQtHPQ hZSfGQ44$yt]b P\N^zY^( VP.X1cY0jEkp&Ki !\Cpua&e>D k825x~ heA\B*w Y</K{tgsMgFVx>-NkX\lCqHwxH%\m+rL2}Jl+._9bu{QX\B/ :K6",x fCbj%%mpnz$L[1}~w%!S#4[ G8 HPpJV mTqk 0{%pgm`%T44-v5Se Il.UdVy6  |=KZD&^PPd4]~"[Ba'A.N+%K#KK}{A|(A)@3=-$\\D2~7\-k@7/Nl>2QMp.UJGvDB xK.u ?yJtQ.w+\_)I@gn ?6uQMl;3qZDTKplBduF0F^vw.>x |K&aATP9nffgvm43_3e0vYN-o ;OhE_ jh.v#[^dD9cbfr y$>QY8WX5)i47TGOnGJ z'O@A X$0UMpt j:(E=zF6uJ973U|yj c4Bn4wNC2o8"* I&mtwv5TH$;S<:X@Fo&?|N rnt Hw20{oi~|szK;,! NF5RE@25nb!@$Lo%lF\pH+$ [&|8O4}`<uM^3Dz{3C5S]" #bop]!;70aAlHgD{w2Fx.0 qr}W9(C*RY6bF1t$nzPEh_/IyrU,$e$5Dtnl; vion>Auf~Ce2GHRouf7o$&)XT? >2g+bGA=~ilLqO d}BU}AJm3HNK#Xd=NV/',&SfRohi8Z1Qy%Jlzp2AK|k V1;xVW=+mjf*)>}vOzR6lT5.qNp2[!-4jUZ?0l>-&g'Y# C3*8Fy#n+4C@dpUhQm`/LiEVsY%2:|BEd] |/\xk3fG3_APAF5r%4j7,Y_$D,?g4Unj=z0(!" QHrJf>vKEZ{ZyVz?\cg+Fu_TNK!!sM;QJVP|iuW7wFApRS|r^S2O1F1+2wTA9,\k7dmfgkt^R9K~ ] tKa%b_FxytXU ,ELn'xP%wQ!2Q\[hp5WcJVPYmahia_7KR=}1"1!Fw`JnY &fiPX{Kd:K&%kN"1=gWt\.vW%Uc -: *F/|~ca\h%mMy1Ih; xUtEv}1x Xd4ouw@)RcR@X#+^@ N H$ 8yX<.I42`|6 -X2N5|@NM7.w3o"rfS n !Lptu[`j?#xp=>CmPskga&SRDf3:;@M^cHy+7 =2h#swWg?"Q TgB5`n<4 >v#4f]PZ,e~F"Z}9[Gz}?3yj0Cz\XeCz|%wXmcQ#aItC^,]$:9QQ%'VE'8MISr}moDyJkj"-E]  2v@jlU*}Afv4XI-JyDHE9 Ov|EAGN} V'[VR(` 8H#s5G {P}YYL`'0kGFKL-/,wdn,)3P_we\Pe y'd%5,a{1b`*%W,%$"ssNh"o7@fjTgXm?vAXi.~!BMkZ4^?otT@jW a-2v)JB3T)U IY3*F-6' 'D$xP.A>gtc=B2L#F $HXZ N`*5:m2tDp M4~:2 0/"&@mA#) mK@omsQ 8\V@.lG+U|VmTkI5 Az]CZo) 1c'{3`p 5TLco cV?z|$ 3q>myI*Y\Tx'~%H!<C NC:!}?2o0{;h0+e}? x'VzM&Bv\nVg#mW}BFu{IPYE>C`1:  H.=} ztWv'[9].|].8@ja [3l82snU 5RN~AoLol}4115."K=%Y It}Y'@3$N,q7KyiRJRt=LjN>yL7sw{[7#uO[1?KBPvdV]y$3kNbb|/B1h3*J}M-5$LlEPR;jp2g*X2=E8eT:U 9; Gc7@Wb"08`t/M4cSBp%2*m3(=cV,mVDin tcN\431."G45/5x(S-k4H }u-`TZ c"{=?[ B'Q2*q 4SyP#]LJl7Oh6OdM?"~kn?&ca < 4coj]PAVWZLi/3L{O VR3>h`q%880iwDl[n9R Oei#HL]&*|r\w,y!%B] it69f&~ gCAfX(m2fz_8]hX=_;paoD^_9L!:d*ZV)$M!c+-"s5x)jf><+r }XQ-G2dW@t'[{SbCBU#U6'&|1 q5V{y X#2#oE#%aEHwE7rK0+ffGz%a Dh19Gb T n6oe8U{!6-[s?4"s}b)yBLTsO9a!2REy]^qu726@ ](>\m17E&fD"Qo2IEhHl%>S$dY&ha@+}^0b$x}6/$DX [o Z],8z@bXIzva_ 9`A>8em2rvjmKWs* FjA"9}EmR(_`Bi2Nv%k<ef U+cS9|^IfACnC |J~};$x w)x9aLrvn}l)}\K ,6Z3=m iy*y*2=P)fi^uYDblZ)WwE 2+!,{^Fq%~s)7!N6['xC%w=*!p <,S%iYAr  s^NGv?pFzb/U, , OuH<Z!b @Us5T^] &@&=9W`\>Cm`kdjV-B4iMJJ;7gOB)' -:PVweL{%LKrrHwj1U.G x _.ahcB|5hv%6__BZu Jx6XC$te/#Q6L&jk+HZFBIny-1YwR(&@g(;Sm88q}ao&L%y6wf7Y,pP!zn{0JcDW<,7X[T$52E@7#<lVjb1}.ZWYpZB?%1  h]$A3Q%x2DNO`8SAQ(h}C^Z}k-_ tYFV_sF0szZt!jCQ|&!Od#W!SO!-_ 3n<.Fmx_Y!b1 f OtBn`3[ ]wZ:zw&`::)*yj,MQeQx+R59V>6'Z)Q\@'O%8Lg{h1TLjYj.\n htXk$X^5x{n@*jv}_q-m aT5vLt.h3@;Udnr8MrF 3%wf <M!QPHH} 759A7  Mq~n]\Cw%o<)V' )J`2C5AM:6%qOJ=Px+Swl2}9l;p  ^~pw1|z0uW# ^R@p$tyd[WJu&x4;O^2oRcKP^yqI'r*N~$d=q.`R*d(&-f* k+$pk[tSkFN">H%Ftw*$a{2O<= as{X!|Q~MtBL2A I. 3.q]w:-9&1TY~_q}fO>Yl/,C \[P|[`rf|q5#E's`f9FK $ cDC #XEt300^ nIS*P3E_g8rG T(-TG.; 0X?\mhm4? WM5xOyzKg*+Fjq~ C[`Li],#zAW9YyeI1b2=pY2PqKi:]}>DJ%e3} &F:0Pig}~.(y[` ~7Ob9wZE9TWDC_yx,spD'RB=5 h1QE #lE3O)5D^Z?0Z^'sY*@AZHgE&={-CrW[k},j2s-bc> \|xpJE@.Jn3N W\ogK{VUx9k6h'x1[}H w-5QrSPEL&7!VBf/F'0p Pg*dUP/6cgTk2*~RpduG 5@ )H+ij_Y 2<1A?ne'm{<WJaR oqa/=e,.y_aq R?(i{4?Lv]Yg:$*#pWYkKKm{$,H\hXjeh[gKA'yE9d<?f%F"zzk9$>QaZS#pUBU|Q\2|f ^Ve1|>Q`8_VXX>XR8A yv=Y7 .RV&yV Gy*Mn$*K-WFT*vhe3MX_j-OSQ&U0!N@ C_X\y<85EO: 51+ae3S{X?~5tj|0!nTEsY5kwRSr q`FI#j[j y48T.^`8q|,iD4w"'Y]"~IzFhI+X2v(7[<0rD10hBFvA3^Y@C|RImHw#5C|Mgax,N{]F%O0cN4{xwfC*\t>E1I9)f,s)ZNEx'k~h=VxOtB*;ltjxwJmyAJL rC8NX]Ih:}P43\5MFD A!@pd(D NH=+qNC    +yB 9<7 )Dg] -4ZC26UP$ad^hFo+/diJp%RU dS}EhxsicS@^Ql+H=35n{-4&n 7Z SqW#z#TD 9HUD )>#Lok8k$Isw(+y?3/7 =_1HXW-:O a;5/wup$d$csrK_F,_?1.XX!i ]a;BszL%ZE_1[p`&dLwl=H`]zQn94pSDqB>IW?jXwWcd@<5$j ;g?rE t-r=%sP##x 2NJTRg}:-vB%R>i/Ku o%!3L2)W_b8EUOg{uf YN5S0SMgP,_W!,#;n#R s6|;atyzln3XTK=8-(9J!ci]SSk)W?e4^/!cm 8\$+oR;N'K ;J3a'`T 'Y1c%VkU pb/FMT7[7N7qs!Y@iJ6XTw}ge/0 hDrj:>4p?$;FJ*[cix?X=/9*pi~U_40'"W!m}[ KwwUcix Mcqw:e |Z dI qZ%O2w*}FgTt%n?;W}(isuFN gm[m \&!Y5w(|ax7{8;r:T 9!61T)nde {f47hB` ?H*^6*  N?"MKPZ}4{6Q% i}>oWo?IRWDyQ3{K&Q AqJl('Gi%oT|ytaD-aw$-IY <0O0*b9DC#"~H;YyTC\c}e"+ ?Hk4{/[G@'lbh 7bh8cNdQ@1D>|Ec[Xfw}r l t'1Ir<}{"y/=?[Pj(H d6iYK+ fW~v+,9c'?^[ XdqChs"mU"7Wfh,Q**< Rw| kBU& j!9hLkYA'2xN40%+U.]';f>9*t YWC4]kN5G 7):[3J5Ah~wW5CGT/jjT r{I&!}4sR) #`TPC w4E(N;gbbmK FODjt&s+%TumBFn_"BYps*9mYccjdwE (7}bis 9oGDI1C*v57F 2OdqL!rweU9:@X-ePS[E q]m%<TTpA'NJsILk :8Yj?g?_{}L|7 4HZ=!]czG+">1@: [ k3Tr=UDhgq]=:kE(["mi i;KcRu'xzh1hw , _9N ,tB#Tgx# kM`43q"2 gS:`g(<v<G%SsWB| 2T47$K`eQUp4nh*.H^i"c0Qg@ 1ovLfd\ Vf%s fo `Rnt:gT;^FS}X08}, *mabGI0bWZ9M~;ho)!TVeE Neh!P$2YyXLkX70c3d?SlP$!7 jmhRvL#&`W-=7" gHGwS1h^yG3%OFb6=s4n4>13^+8vU(Y = a~#GK=\tx;Um5e~y4"!k-6{+g ZQQL]oiTc\\lS42XC0eG??& SPS_0TJhIsuDo'_NmtYe{T5.8deu.QrLf-K&Av %&dPjW}eSZ3(>/3FF!v*;`l:Z~U9dqj)6C!#ouPg%In^]Ai"\f I5C1v:mM_+j1U<2KnjK?.R5\H>nkPQ{P  =SI0%PDD[7vG:W!h%8QO(>L773cZY56`9P P,q "5X/-yTn([bCLYn>P3K~8T~q&"@t) Ptxq=yg%Nyurs7) 8udZ.dLPHp]p< 50#)<eb*eUGtz`A3Dd".u!-&PP L4fmuS6$O .YQ:PMZ5 =E)k6`cWI9_)k *FDT6Fzqhs )Y\~(&_H4DbP\E+/_(+L!$i m%Q#sZ) RY)h{Ma;Il,6@;mj==m z8 r w. .FIY(@i5USK2ckZQ~[``z<"60"C)*t,"SD fti''=pV4#P,,_PJNvRM,Xzg'x!gkKf b[A,6x DGcp0!l1-c-KJgCP1>j w5%C<um4xaby1ulW&$udC {{[*MY@~]h;U?U+*gbf=$F2!Vx"CRsqJpS^7(`e\p z \N)E@ c@KJ`U*<"v78IE5:&|zx!"Ln O.KA<=BAPgE.p t/t? -,hZ31V|&W7sx&&SFFr2">:D/})hZ /B:-,7  [/^{ ~h:4+$mb+mwj,Se z5k G.YLK9mdJb$ +.nb7lG~*v{taW_7UOF9l)^H=5u},0"4hf CI>E^).QQY' s(!8RNjjI:5zR 0J4EUSx;#G'  MSb &z.(q^htvnlC`9,*;oT*F`O/pJZSHlCE*7sOf7<=PbW2zzNvEVOBA*_pj#4r`z}W=5K;<_[8gg}5E#';6N3Vu)yg$C<GSau@5=@CuB ay_wUk(~(M`!N nZ_5tx|w],v$N ,V_I!v^yc<-N fT_84^jodi+}6sa]L/F!"([z"O1DQ/dF+Qj-o dTlReK#Vpobn4z@/5cl +NH@+ 2U EXefsVXJ^-!0<[/'16NF?#2~R#[pRlu?wlLlb~V[hH>`?%_-jQ1[jc[Y{ y9OxQB`D,f).?<Ub"!)lq6U/aORW1 ?W6Ej 6:P|csyMV^I@NH~8{v  t(]h\!U+2AcJXCGjQiXA*\}pmjux1v9ASB|[u, T\j}`qXe%,e)h!CP!O9F.GmW q_nK('\i)?/hsq FZJ@_o'>}.`ine2Z5LQVQ*y[4RA-@J SX!{7yrrB|mh Yi{L`#=YD_dy$[ Tj ^'9X(n:0Q.:&yYpxS9"n-(-^(w%`U:rP]I\<9#~Bfj&OaRicZ"& C!yd PE SW/YneS2A0Dt[zwDeZM`3\t\c h1vZUjXq~M ]N0q*L!8bwaO^Y=CC ;X+2Sk7Z.C!Hyu.HIx(lzBb9FZ9ua8S7x7/=3W ]H+$0#hal8wJDZh RykNU|zGm]b$ K40lmRxiSp{_=1Q3w|}vi9m +i dK^XfXCXs.(-ZgpmB/}?509WCRDul?sG:VT)T9k\M3&H-] khK|?ik*'^<|lGGQAjM2Yk A8 N- $1v%*` %=q+1YE?"#65 p&u*o{m^u8 d&-@Wo4wq uVe`WM:%vEKdg&"9#%0`Uu6 $~a 13 [SMaX3K_dy5iIbB7}v92qLhe}ZhT:S<dEA+[bQE"ts!P+Xb yd$He:zx`:+z|M 6t #O_x)u]uVu|.y"}*m|e#Hu:iT&zmPiu4uW F=2SBX;-= Hk|a+oPxT6uos ]>=$ Q+(4 FVt=?yl=AfHrv!JP*=:j1g9x"<|+f,.?Y17B #q6-u DDgJ!/0 pa3n6_1!JdKMgg;J+?IA)GI7|yC xkyVg'rM9V`P[;?#]_2y &%+-,Du-S@SyO ';"$;<,/y !Ws@N}i]#\+wg4Ux#W3xq(~q ZjJ@Z ]7sG}efQ)>V~eSb ]Gw3U/h3*&i[X[:y*8\9QKKENAfZ|,Z/1T,iwR9Omd"Ix#iuVT,LuDu%aT<[C?*:Q0=p$u,+,%F2 vfo3BNmx`yOe$e "kw#V BfjRjo )[;#W#87u5 'i,2@e8c}f#Fx?ts u6p!~4 " El;Q ?f6?iF.GyuXiaw/j }TQLT:++|JC@'r A}Y5fNCPOC_j?k_l!N_.OE-x<f7&3p'f.t0au4%4`p/aX{(1BO6zL2_?@>5i{CWJJ,dMg_]R( (r[F]X8$:sn_J{-yn pdJ+#'ymfMs/lFk\V[b1A=U2(" +%g]x4)&PI }C/egK_1}n$MnT[2zUHYRWg:yDzBL:O~NYYVwwt2Sq;#&Zd<@v\LP ]x9 *M{3y&7#DK _=/#/,>%Gj'~}[Xt{]6UtBe'jSoLc[UT5ikl}wxdJv,#-T$`pjr yvfgihGRpjXO5j{$#Z+2FS . g {'77G@;Z7@K\q@ DNN-6::(&p.vIt9mT0mGLGR+LAR9p#{ 3`^u{Tbc9F#En_:JYowNT V)3#)1 T}ie}=t7/K}UqMt[9+m{ 72ASys6 kiVVj!A)~[3ay6'<r_wB?1r@r%uSRRD/OP% d{1tYY 7a8M8b5?~?B#]BAG{ELUlZrmsuGqTU}yI,U$;Fy &sz*;[rU{=k42I?QpCVXx6t8g|t$ILe/+4gu;3nddz uA}vX:\Z4 ~aF(>nz!},RXkLF5fJd8eH6!OHe%8oBAQHX+lR/5x+<x87C?_|)KO)F-s#iny:\Y3C a/B}0r[BJjpP@RvT~//IYH_yS9ll F8SzlHl=dE4DC2g6 #4pI<r~^v1NcMo= wQv*> *.usek2%I(x@J,|6z RW7I4LDz/45fj=,-8#gmB|LumDZt:;~3< 7!e)6,+Nt7-2T!q@{%IHIQzkWr@P6D BC3aEc mt|/' m<XZ{Zr a843> -3VWi"%d!TGqI|GGE ve ' Su&zp|OaT0u{d:] j%Q pG/C(miP2u1NgWBA(t4~+1M%$x13#nFwJ']iI+5xRAz~dhR9T c11&L"C|-_}='GRg51pXQ2rqi6azqvP]G?u7U:Uq>j|WJ9g9Hi  <|Z-Q{ex AWPQv?mOAT@ w#fY_;Xgii'Oo0z%Q@tJr~nD>jQdFR9/$cLk^AM@HJjTGMDd)X+n/ B)ww=, 2 8vEq&/3^fj$bWa^Q KutF *;x$y(2_}|o&8Z[qt,8emp <MfTh+Kt$r5`"NDJu_Af!Di`jcq}8V J}d 3C>QF: 7Xy]hls||7'6H8{-o8Lq.4ArI5y q %:T-;p<{ f*;o?{O&:y}@4J)3R,b~S;Wh&|& am}oz\MN]B >MUF Yb/3sx(%0p2}Z,^0kb)X$o*}["m.CO;k*=nLv3#Wu[n(!U.d./- RbF:E0h3^6CoL/F)hpN\{6ke`xsak!'{}HHK]-tDl@uI>3HqX>Qv.gcg41W* 9wP)Ac*)p>PwK0Z4Sq*5i y+C0Lzgm[/{w~Ui**i.;V| mX#4Q)a,[N 6>n05ph [{u!4?~ZQ|?'  dL:/Lk8t-bQ&'SZ2(ZR6@9u< 1ks;`}%N`=@m,m*  PLW\4%8$pfDTS9dbfg#m6tm3_SS{7RD yhU99Xp}l@h6=2\UX_T63KTw x,>@(sH-7zWPTJqXi|4pOlsH,K)kE,#= '91!*_K~ !t.A5jLX0]#>R' 8+ P0d"7, {sGE` r.sL-pkc`wUWw@-c(@d'#sP[^!mTJk7>-`9UCb6M0n U@)G[OWTMXnDa0 &t*]Q%&?/=3X\ivX3bgh6KXQC3uF(5\jmO$m}N#8 3&=i}O=#neyqs<9|Ru 5L)lANY L8hVO~U;`7Oe:9s]GGwvM9bh@JBae-3>tf]rO$s l['mL &;Y#Cr1SD1IFq WZGznTldy._k&s7aNJ{.9N.kPK2% ^4PER4hU^u $j7@?]E n[ (<,pAj(_zAAT6pb`^2!4xR_ v;zp=19g   +-gVHWK|e|.IlBfr4qO&yJlVXQ}m%U56emFVM,Y!~-QZbrKP" C`|1QzgOQFn2g `lhS +ERs)FHa)q5oo7 =.[oh*mnV rT$9gSsq:<by^Ep&`e7OFPrjFNY[q$q1i#)LG6Or XsmE6 %ID;g.e{@ PJA"5+EpTcXz!IKi P%Jpk&m x?9)vy G/pB7OXW9|==s9@ k^k(VLNDos#^(r'#K@5|s s`mL^#/R(~B:!G}']2TTv)gKME9U@wv2E]x4,#-4z]fZB1|If%? t>./qg'%J:i4-o|z#\"t5 m\"Vix~'nQRjXNc@G2A?yQJ8.@m+pO<2*#Jd~4{+\g:?],CS>EJ?=2CMe89dkqS"vXzc4mkX <qdLWtq5c"R/HkV %Dx|+&qql)SL _^F `h\U"aC.Wq%J ?$IAH.I#Nubi6Qo3:Xgn@C=&X\^A{A]H  uFX@8C) E;C? U=s{:nuOW'~v'_ZB(Ni$,s3j*a= aM{etY&-,Jf pa@sl~@{BEiyn ]]XN=-WD3|tLq Y 8I] _{ Bz S7DJr  6pS_fs }LPL}jhx]mm^)19 Z+et|Bx*!E;L(k~mN k*ZDB[<RlkY2`.P~ f1#b-3;W/%k)!xUuQz(OD il V*\;gBN\B]xVK6l7nyWqi]>=^:j(M^f hJ4`_ #0`j2:c~J"6A?-VHqeEHeN3cE +pO1%uuYesm"n 7/d)JDe/vRoS7~.,Nj4.(dF=[a *9AUc"aY\>CiD#}o'Z1<{~cNwe@V9dC+H%LC)-%Nj"S|3,_>,ePcZ%wiKRL]v)b8 Zwu1XN.Q}ZW EMcf"iljd( Xue$g~ 6n_|(s4`,`'d'Je"dgxF shgI`n$C'spT tsX'Kpzj"`Hw=t_ >  `r\ L<~rn8r+@=c{DD(y"33 %E%jPF-Zjl^g~*ns,jVtU]4g?:1u,v ~De{1R;v5Sm<5_l(!b${GPJE]pHB+v)>_u!>&)W2+uT TBedD^O I{>oO]P gN}Vz@iGnCMLX]+( SNH- q1'ddWJ}M $=Z XxIU&/ ;91B{o;SD09_T=c"Huh:! +<&|XBq F(S^J^q=% !+iupz: ?{p/8~}$YVtXYs;Gt{-2M/w>FrwClPF-dY/t#I57my3>_9PYz)N %a/ r1".8s`KJsO1-{E<W2}{|u6Z+YwW4r20!iZD,s lZokKIKnR$n1&v1(>'gu1]]t/*Z zMh}-Ku6@)g0uF^xZW;Sv'e16g(H*8nQ{||ct_h]sx!Y5hi_eU8! ZT}I w[5|m:Q?J`R^dn-JAegX5K}"7[DDVo>ZA"i J5warNH?A ?7xWPB2SF<6c B";G:u[6jkX6S?$)4kl rsj_W&_itL<2YGcl)uFMrm8em_7}62b80:+Vv`Rh7o?d%5AU rQLVFi#,tg) q9%vUjXB 0U9-3!fz}i_j|2wB j#A`lav|TFHVqy %3PhYZQ%mzA8B`;'t:p' #}dv}>pNh]co`^w?(Hql4zR= \x' be/%HTM{.mde5mgbJz\eli[ D3hCdtD2Z?haT;a )86Hva-r3)Qb(a5 5Vga5_{:A\7-{]*)%6NwKKx*z4?<=Ld7NstC]C m?[ (yLZPv$WHH?OaJeq P]>Xa\!ehu[],1{f xz&\a<.Lk& @X4~d}t;kg Y}3:sU3> 2;.wz>2&l`4" l|[6yFJEhZ\k { -=(YdoPHsY1\n\)oZ /t'["O8 `ZR"W:i{ ]\=Tg$%SA 6xLj.5a66C6N7'T%/4rma  O'Jc?AlZ&3@eofW kL=Elj \<A>.bt$H"~bC1_\7b zAk[?X3z^OYi.xCoZ </rM9M;kYkochHsMO!iinN2uY5KcpNbp6Ze?!l}VFzRd5yiQ>)$dR)wm$(J^lr ^-?CxR ur "d<R eOJ<t*"iW($6ABa%hy3 hW2WVAxodS}#9~!x2^pNu{_4^8.oD\FR? yhj\U|.dk(W .9^f.1ZIE/k8j_ G|CZ3\ypkS8W]kMHX kIYO3^! p`;~\THt@w@0t : )fP0^=oE>+m _lVs:|,;~^Z]~Stu Cg;%hSKvqf ~6.bp_TVS2 RL']%lU%EHm--~mC+Id / D/=+C7 tYRyQBH4H.r1c#/O2;Ou !&#&I,[~-*k?wca#3,_ &#,qV. yl')V^&H V;Qxf7@V#%EV9Nr%~-/vP~#iF^*= ma;W8_Sx8g.Go_S?<  2/whz'I @$4XX[ =9p+PN; 'ZGCGrIoKH kr43]T]J`15t`%VGL}wAUv5g'Q}4~_.epA' r4 ?$$Do!1<]i/#Z&R(CaaDW/skT;6F3m\j6T'o=/:V#jbia NYdyu.Kwe(+0z2J{w}63AnfBz$w9PeVpUZ)BAnbxJ9[IG+gh,O?I[b"I)n2KxjiMo<B+$?9^OizE f JJf8$[Nn?a! wZl&FFkqD Sbwx9DOM0.o>2pOhOD1Uk5bH ?)xJ_&Ba=8Y]1 cVHqz8]kWUSQ0 ;yr];X\Q S(_IA;KkE$ fg #TH^+A,$? zL Ikj-vVx?,yA2+7?^^35i"\k/F9pWB'poy+F+EupRBmh!A2y^hjB^ ll-r"786Y+[F[iCfj mmKA 5w8Fp,grWNYs'4gXH'=Hb&4m$3}<aya'97(S `,>ibQYT>WeA97*C\J5^YT(#*47 L'80^ 1/Lq(K "BQ4[Xlm2my0tT#1ybM5>)"G8UTw5O6.ByMY[1O <+/ 4y"7nLY]_ ?(r{: w_j W3u t ns5az!'TXIkPKG]^aA(p)Sf+ ,zDz_i^Pn?}]%YVR|r\/|VOr-R('wu<-=`$4>*HiSi q h;F1k:C&'6Wn1_fZ/<T[{>Iu9W9! BafT}V3 "q:IC)v~X5][fzQ?&2;C^Hy@8S*CiXgPJ}qSw("]`;h@q6PscP e*T4B=Kv@D3F{PUWt8osj3CZzZ!>M)7g1dCxD_q[ M.7+8,|r|PxU@xB@giN=78!)oDWbe `rxg,?kIgElg18VGxS` AS}n)SS~`l~\iJLe p[ c)j}}8*~$kA%@K8lX0DF]d~@<<"? XN@'a}]he.`>R rbwy)<@$7x^Pl:N( WMSg3T<Kiw)VM IeKZ$f?&;<_>&fL<<:HA~ YvKeu v_y; U|.*Xw^UXJ)J ` D^.5}EsG{]Ah=AZ'1P1I[z|jJT#;9O%GK,xJ1,Hu@qN?DeF n}?byQ`8+N%CBk T>2 Svhb>OUP,/F7mtV4NI< UZc; 5E\-UJx%!OqZ`n Z^8>"mrA5y D0_cld.?e5oTe8j$=datMd'&U]|B(@,ZhFQ~bM:X"vJ%Q+@e"`mO9^};-)CK?!Yk\q*u"01k5p}} ):2&f%3Paga`IZT=EO6Vh>!` l[YBYW*9XTR(PrENnvGn6>R{EllSdK[[pf{743Vgh bi@?+#1`#$Z)J:/9:@AkH^`F p~. ;0!/^'fm3xR F`j?eV{ h1|HWbnL')P'hr6FP ?yMLsAi=Hi6]O& "-<83V39 -2lO}0V 0JpwxL-iJnV3my2Ch X}YhS;Z34.>L`EJlLZ[RZD -Ts4T^" ]1lfT)50MLgjuS <g8a:CV4J/}D+=Ql[K){LYp/5:jUSJ1= ,0j@$tCv?Ij.1*<W(=yf,i@?6#!qMAQ$@: ~;[`p4^bF3qL:;*xR}PmE`W;h\V F4eb$s8W[<lkq0v*&Dg#/Y4TVpyy05g428^=ZcK67&rp=8.@o7 $]uiVnK+Gi >'{|b"pc0oM1gx,gZTDRJCz/eDmhuB;9/~,t{ @IFp'!r  hg l1#szWJ|]~,`;;LvJre Jb}\B,GU=D R,eEHDgz^-xs@-vgnBd7$T^sEb<vKNC)Oh|Qtg1ABCbKl%brd:}QJY G=GDX2q+9<qAA@5 ovtsl!LPAi""sH'g;n.t53&Lox y5%9E9J8\NX8]Vl7mKUUBzn =haq+R"gYnZ#t~ux}+x-H?ZP<kaXm1-Qzpi\M_{4OJslXH%B3P~(2~&w&9>l5=RcacWUjle':dO(h46 M{U /z L_s<m}w qs Ifbu4t0AIMU*eVH5MmOj)C- [;"F;M_Vff6 Y&[p- #ZN[;m_J1](PtZ:XF`7l>1 8E/BWF/Mo+;1#4kb(=c X4'[4+.! 6 V]4lRrP<[}8^&^n~Yu jHPtiXYf|a &tTkmjby|}jhXzX|J yE'"qqrS.&9NC< 1"~(t 2?Lyz[Wn-Javvw\@/P|5`C61O1[ 'cMrkYNpb '?<[C_)7UMLub-4pWd]}]p6zof&>-U`2c(j7\{r ,4.U]k@Xjy(B4y^R{lj1 s#b\)dJ S1,.CC8]&oU<a#tV 'z{vh G&qJ"{Z4QXQ-@ai&!b4 yfI N]!kyeeQbC@<]g)//,b}F \(.a>q 1V- u[nq8S-uCPYxfOVx|9bWT;ZmI)*l1^x.GaX .T2&E$i8a7qac 9|YXq8F :A9(|7^WI&yA~Y]5sWagv# 1TMhKUIg<_5Y[P7c4?mzqmq]bI3Q], ;{ZC)z ]v7![EmZ>Xhn|l~E$/GsT7jQuN{ 8v#[S2j'*Gp@k7`I5+D0hxIC{,'?@O9DNM0z_{2Scxcus /I$_bTqE5=|tV|oBX7peSV$O}ut{);!$Nu#,S2 t-!\EPpr+]]iabu@4xx ? Jmt% []p0o_j-q +5S_OkN-TZ<%MAPCS 'B%7n/ =Cy L9E7CI(H9X.g6O Sq$O <=h.<SIg049~*`6TgBbW5|y_29xL%|#-I9} m,0 gm7:` V;e {ejTO6@84a.[ESFWt]&`,oC-jh^y,2DC@b[pIf1sm 7`.ngP0{~r74'Im(-0 m\Q^(~r8*0 t+{9"$/ 15 GmAn_4@K5z\0"i-eS>}cX2hpvjWom22aXtegro*;@  U!S: G*f(kIQ?QRCZpkA!q5Sanw"r$n<p~f43A|*MpO9E^\CO=HYKiHiQ|k 6L8Wm`"7B64Em|[F{qV:ERtU_?'V DHlRG8-36aLw\MuP`*FSTP}Q3 ):|SOo">rz+]' m.QH4 /mM'3{58lo/Ip55* 4R` ,(x``UgslYUXQ/0m# x| oZl4lR Hh%HPG0iEfPzH;~G325D10dif{K+U -C11N'fSYX&CMe~o@5^Ah4q^?@V=~RV}smu 6-{9sivw@19 Y,dVX7OzQ b)XEzDVv7(iWRpW-*9OEW#A8qH  C]gs"h-R:kmg?xhfXr"e9w (@ VBJy$|Q; 9]\q )6l[NwOpV[(f c`H T-Ee#:esC d|-;LI.7P R6}Cm?qjeV"e,g5 ~j14*"&jAeO@:@i[#+DgQ83""5N$FQ2n\B38NWV: @?,+X6huraG`c942:o<|_nL{v. ~e:.}?:c}!:Ckpo>h[qwC_gyXoij IKZY'Gvc9tv^5=zM{;Ip0br}{7~[f(Gw*iU_t)c5_Pc{5uZ3njrK54Me~`Kpr pGC dm`PE3 .5Eat = ;"Z(!-qh;"6MP*I UGu? ",\^\p4L'6a nTeMQ@TyU2F;+5ZKY$mQ^6 1cW"0/EDdtoq B-I_vk v@8MA y>}<JPBuaNPq]O=0X gg.{wYvBaF4d s$b!0b^X ,r?kbW +;,3~vwiX2YDDh~ +x;iWI]fJRp>q0&HBXuh{`U= *G|j630=/I~}HCPuw"Y>l414kk >hF(1lB}mogV.c2tL]z}~aoAtBt1Ht0&)f7Y^rmM\Y ~D?i-&m~"uub AGJmaGST.bZ+!vgC0 g0.!/' *obt<Svs!pTV@FGpH(z7,R)d)+S !anVhFC[ysoxtS1;m0esI4 HUT {13:TH %r<7'0{mCjz#)Z 0JCI"VN\8q +=v@w~tsv:@*m} e9n!!@79&xsoL@WHvUth_>r|05[5'?A,/@?05yQWDH&UD3xpwXSTE#A Kb#e *0C grUf3suz>AI9&yyN$;ZFjUy&vLq&{Wajqd `)iE^amCQb!Y@iT=ua.T v.CV?>"9 ohyOLduVrlx?.GPjO6 *o^K!e[PWS}9"=)aEg,Gu 53>'`ND& PR{\=y`tfVX,/2$!Y`Gq]p>r!LTXw~Jd^JMK=/^$7Z`s q0I#S]$^JY ;y8$ W "A"(ogV9qnW2"q|aP <U}i!!7d Z08! .Hfw)9"wKX(a")W1HfWLE0<XaZR2<B7Me`"@)fDL9nf6\0Ol-W]'7gaTj}`` Q?]qkjFg_H#8Y>^4N m1<&JmVAmS2b,a=O=f!2cLoPdC?BD( ~)( p+T!! 9sS?$) F=?T|-j}6wToI 'T-_Fpw H#Y~(, o.BuBu mdu$w&f !wJ:g*FVA`/;Z"#O5PEh\)[J#V7 fVxwVMqcW'r.=bA[isP('+k JB1s7BH%`]=L G 6T]/od[}oB-|FJNj lld:v("_ZTgJapWCT|Ea.,\DsUG0 [x 3'Y1W#.m| M;Wn4 ya'tPZ;s:|cP-^]FCjF*"`:(L&6|; !,.G)MwDM, ^xccfOq"'=$)?>xjx 3>nhN`*NdVIBqqd43'j],U 3|oi!BkhzvTt%'-,J7W '- &:^A=#?-%Y)2kx3- ;|=iu\^O xJfx~H8sySY<Mj}0,ohf@c0#54F$<?4>AzOdYI`nbG]g&gXS;>b/o[T\^`zfBb3 1OZ'U _Dp XU,fv~CNT{:By\'Y51YBi7VgX!EBTPRMkazYddI9A &,/M'mhatwUThm)ewFmck7rxMPX9'm?P'%)< -;eAJW|&K6  .]jkwqs= s,EUN3j(,lO oKa%F=wvdxnpEbH:[DZ5wwtRIc.C*C94=   U*@~EPJ{wKmAUa``JA!3!%bW^i#FA=Hj_Zss-MGc~~+9wDEBQ! #FX{T9n|a-#hE{|y+m u!lQ7uHb( e*y /|nfwu?&]w~!#SlpK'K<B lx > &QG"S1 ld"&LQAS#2+l=W?R" /%( *32u/k!I]^$ 1/CSCE8WtU. FN3|)$$[Px>}0N=!|"!F^T#%pdm K[3i~[|NB^$1 aw5t=IVEoGHm$;:aeGGYXO)90#2-J?D3.1h_TWI F+ :"m) ,hPe1RE.$0s [/2P3ZjroU<^!4+P:!.k8L?:.Bvxz0HR<r H tV?){T|\~Z)`"Of[i[`G3CUxm8#H 7.8@g"I}l7B:J\:X}TFcFQ\99$$GBz`' %EB6Y m6!;^.6B68+e@,GJ*/X(LpL+O*$%B1 &+AD2 OO6!@.n J)X}tY2/ -5K.EvurN=Mi!^+2 { fzm`f6a5.P`>[>NRqZYHFvg.F8 5Q[ik9m OXRhJMdM0s M!n>=1rQLY|bF|WB]qy|@EkJTi#RzJy54z=?.%32l_Bhlw^<:Y{pbeF&+^$$"nLlaHAp2ms+v}aA^`?iY%V" 72, A,! b^:BE>=%)< hF5 Wu_Wm:$[:Pk `q[XH|t?KuPblWEc S1N+v$%vDJ^-)U!V , % @2  -=D\ B)Jp7&WL95 /TLGLV > Mh^ /(\gv'SDYYp+$\20Fd!PL5LpP`mX4b% WJ:(NTJhj4 +ns)O $' #<'!"=][.LC0x@OUBJs=]M#9 *2^,noOR&e&$'EX>!{u)(,S3=!) ;,-I$A [3Z-S>IXMFnAr"#w:/Z#vK<L5%($!=A'k"ll7BlBjktk^l/Im{"M(96FDtD% i Vl=S1 b]"aDNN)d$Np!* |%34:0WDW[Y'.$J>/uMSF?V4%F.jU*-6HU}~J (:>`/pGG%(HbCn"5v{#o!9T9i >N N;r292Bu/8D1FKC` " {W3 <>RWL1kC|AYv($SwHdIN7S=!AT  W)MdN[nkEw+7P;R` FVM H= :[k"H :-"/lTU$G) |q(Zd85xi'%U3WMwa8H#)-8,$($P:h{(fR]A`Q- /3,WmC0(r(={, S+\K_D~"C8j#8ag8-]4".L5@4 (24:f:6 '5 wU"B- 4%%+\} eWg(:M47!&JlXE.lu':"N3:l."}Sw"d- ,>O 2'78L6S,<HB_l7@8KZkv#/D$vP$7*#Gf~[Qe^amfqTr}Qy~_W'D1|[VT ;}L7Tc`n1 F3<5Po@H$e O~yG'B+vQD50XRLs= ^r3*@1UZAW,,Q||z7F6GM}\~d%|40OK1]lXeW"gj&IVH,@3Y CxM>:$b}'S43CAZeiJ(3##,EK'_D7JZ\eRQl)v>J  >'H##rOe*_O9pB'9cxnQ|6C  \#5?\|wV !&%o ()5C=s*.7C 8b@ 'S2 LkLt=PBzcD1! noS2P!%!5a-2&=r; 1 Hz?#'.Hx,SmbJ"GE z\x5WZx%L,8Y-v%.F #/ \5.i$\'(94#)f(/Mr@"_&|D\5<.j{4B26dC-urUpf dX3bUFP[%4 dOT{}fa?oEj.m3aN#|0{?~ wV(?D[T,@t `q;Bv2 G,Tg9#,9o)\&j (& D;8SI80^4%Ag/6<4"RpTy2%jxR?u`SF"~O3 )-p:NAc)-a7T$'O.3^t2CE|Dfa=&y@.(L#$0 -uzqY(H&g.\LdP ]DDjBWAD0O=pB>F4.Re (!3+" >D.T0?%Y9% )X6)2 bD@G,/  %P3&[63q~"fRlrKBG%/85" (wBA7QYbS.! +cHmPc]jo3c%`3jO6".W8.]`[ /G1.eI:5BD55 $G MD/: !90_2qk- 8D)8=N7% h?9' b>W+BE?@S - @7t@/ pti%SwW^}K2G#BD6#5#.3U"XZzL,l DHvnm'* \@g5$ tOYC4N\(:1m0*:G}:9*oC'C`>0  J*A4.""Bh 'bBL[Q, =:94(N.$>B<$A/9#h, VD&W #XiG$k24!4!&ZH?n@Z &,R;Us*GpM<l52+;IY<S/2@)a>"Linndrum Shaker (0@, <FPZdn (2 < F P Z d n x D@ jF=rFn!a]OAdH+Sp2d5LCw`YPxMw\ 3d|pi/8i@w4! *n4f_K ?#`v9$ *NrFs46,~iY=1_lRw]" $).q  K  D83l8z~et}  (gu<%%  pdy}M/x$t%Pp=piK9 M`  ?*u W LP  K  n0Z }9C݌H "<> fN%~R  M:C: 0"k~B,xjvcUP%E~Lb + ? xoz9S;nt,7I hph,FjdN#x@6t W` d <~? N%e r ) lG  v: S)4Me<= `R7nH#C5 Hp yqF /u"= o3l R~X} VQ<F "*jk6:ߙf uD# ,6 }FZxKehY#@0 . Go: T?5,LYz& +օ +htw +5; i{Sqj mm) u.eW&?Ž'<{asH_NH}xr U,+ W   \" o&a fU):T!r+-{t/`A DFU9 ?g:I+jr[D,7+/$koe.V$e@- i9f58,-*;$@y٠ q-TąK1<{*Yu$߅E CD鿛.u  ?$&]r*<(-#Y $l ]W?8HFD79`-7ױQ/47XǗ8z^/Ge/}_2h,;E.8q꘻Y' DQY 6r$8j!x}ڕ' rs- U U_$W7v9R v'8<=ٲh$/u J4 *1 NU/Ws !һ.(O J ACR: fV#+֑ 'U $0+\AnԚsjMKNH7 5& ۱r=o  5 V wNނPf[#l>;t(@H5X_Wc $b|'swӍG7/d` tn'XPZN@Xc+-Ґ۔5xQEB[tZ,U){-`4- G Sߕ%(C(%!x%Re" b+D'- ʏOLx2᷻{O2 !P%]'..oA h{2?} v_7*0~q<kpK7# J`XY63X)"WZBZ>?y.)jGuf/ \ wSǓCA, 4+k.2ׁS* ܁YAka`7 ϵ# fT!>%&ϣJ1&WʲB( 4$ >yZ7}2|rM& c&\E#ضr V/zP8H GZk}-N)-10ĥE$@7+7 %9-K I`.,"$1B 9{И,5Tl[ F |   ,kL &o> Y K?T=[1n = 1/I&Z@/nqAH(DR pX )| J 1ZH{&D+ ~ Bx mL wJK  Y!9bz w 7 h "_nbop$nK DzX#fsUtR^~7i,I=U](|)p3>9*0 / YdA'[Y,2!<  Jt>d'  kUBNGX;z!V 9avxqyDZ n"bcBN* 3CXC OO+'KMX[ t ROGk09 w:e3]e# DRaic;'hO)9 %3vic r0tpV, O:~$lp'+R~WU+8:duIs)'.|Xe4->~fCJ8M=~6,K0{*yKmk1~AvXNlDd"b\z>&| ^=\Qb.d 0n*~oha\/|a1dR bBe+7 7gBv55{ ]Al%q);y+ wDHQ?xg:HO}.Dm+CSgTsR~p6dsO^Q w0!,& <HPP+xd3Z}C4Z@wZqgnS`(Z"4n_(6Lo>`T*_v*R k 8;vON5l&j#je5G^ 9h$ +ycDx{A9qI,0mw\tQtn# Jn1uFgY 1_x6e #PH[8 dlVV}o=C"D> +wM*C=]MF yT/}oyFoQbUzTI/x.T)QO&^|a&uR#,57^Q/1sqqs%S=2gDSUoHCymbal Roll (@!@]x<<<FPZdn (2 < F P Z d n x B!@                                                                                                                                                                                                                                                                                                          # $                                                                            %               "                  *   !                -             %                                   ,     "       %           !                          &       $      *                  #    $   "    )      ! *         $           #    (        5                 #    '  #                              #     +            !    $##            . &        +    # 2     $%  #      *      "   !        ! )  !)       #   !/   "&%%   ! $  &            +1 ' 8  &   )  -%            !    !   #)  $ +     '$  %   0        &%      " &     .    $8>    6         .  (  ('    $(       #    3,  1      (          !'    9      $$% +           )     +  #-  -   $ $ *  " "$- ,!+ $! 29 , -(  N2  0  .     ) 41& - " ( $:" &   " (-   1 #   .$*1 '    "7!'+   < "- $ ( )  * . (   +'ݺ!" *,  * 2)!;.5 '+ 0   # ( "    # 7 '/;5! )- )   -6#;3 * + ;"' $!/ $%  (  $  ) C*    $&   ,.7    !)    )5=#.5 !' 9)",  !)   %  %+%,,.$-*  .4 $$&%, 8" 4!+ 9$4 2 %  .")+8%#. " $ع$  +6Ӿ"( !  !-$',. !6 +*6) ;'  & > : )*A # (4)A4 2 8 1E'<- %$     4      , !  0$ >-/8"&+! $ !$  .ϲ2% %( > #6/ +  &"% 39 *FD&  > $    $ * $)֧,/.+    6+   !/  1    / .3 *$% 5)2!4: '*2  ! "5    & ).  : +;) $ ./  # & "G\.  (.!  .<$# ( =& )$ +&%M'""* **!  $ ) (  -6:J )'.1@#  !" )!Q 2  ")20%&(<"."+" F/$/H)!K !0+T !\3,  ޾% ,    7 T!3%2+2  5,(+0,2 K7-B&3o!4<- +4K $'+8&5 . E/Ƭ "L/(  CO  '#%B=0  $P?5 2 )0"< #)(1   0K/'&8+) 4 3  /!' F# * (' ! E, 6 ((3   !1)"1/12, #2Kҧ ; %!! '&D5  )/,/!$ ,   $&"" 8)ջH(   "J4 $(& #+ $ '$+ % #$1ȩ$ )  2 0"+ * #$A 3()ø)* !'--2'!ݯ 5* :;)6':59.F) $3#   "   S/(( $"(!+  1"9&%-, -'/5*H F$ݠI:$668'*B ,0 )+I0C 3!?0O  N:^-) & / 303(W'  2+  >Ƽ&$,5 ! " L0 79޶*H +,< V=ʹ)*+ - +'/ ! >-!- 8'$ AE?:$.$   3$** $$߸I6/ *0 (K! #"C'9$H=0! &'ٻ:/&F & ) )!>! ; !+ E$%2O]<1 $6)$) 8  '# 3 ! * '<*$ H8i,+ 4ؿ6] 2#@ *%)8%0  E( I5" "0) * . 3 , 3:)!,/* %)9G- .!;+ ' O5&.  " :) + %8M *d$? "*%)4 "  3   H( 5 1  D&ֵP7/4@*3: ! #%06$ !RC# )Q8)%#,# 9а%M%I4 $'Nؔ 4K0@ 0D%( "8A > *, 0A* 9= 7) >*.$ XH /+6# 8*"8 4&.& 0)o"N ! ?$' O5C? !, D;." - ޼TVN\& %   'F.!?W"S* H,1۔'D* 5*, -<9?# O#$ G"(߮8,n'  > E# " '5):*2"=A (*,$B 1!-#C  &  C." #",@L!#A-ZD@! 0&H& <.ܷ8$:*) [))F:!b/b4A[6) ߱B 0 543:& ЯL (A&ι..$, !7-1:' $66*D(* ! B%"@56 . +@.$d$)-A) 5,8(BQ$@$ųC 8>R3@C-';"A ! 6/WN9>+R!##?2h$0$6;M9*0B $,&-/ [6)=;" 5AN{5/&F./3# S K%"  -&   '  $ !$#(3 <:dϵY ,Ce.E7#ZE׽.0J& #/E44Z+ +.ܽ#*BN.V$%!6 1 "" 9 H K. #  )S$-H$ @"h Ͼ2 A4 ̗)IY?+'(*)+4 A@ DK41 "24?e &F! "0q(߰!E*(0H =0ۻ B G+ \ < 1SߜgI6/K +*%9/,5#66*8< g !)!$%0J-6e%BI-:,1ֿBXq*4, 2>&ʺ0+ + BN c$ &=.0ʱB2  $BK=1 = ֲ8)?+5,H%b ,2XМ O8b+@k"6VM*+'16ߩU6,ىX@$9 /6(lH#4* 'L&+:2 )0.(? &_;@" >SZܩ<0+yaݺ/ %/MsBkTH:^{* '!(0h+X+@D; ;Aֹ$0'䩼 #I5αE'& 5V /!!*>(5&$A41+/ D%՚/2N1@\) 4FC74*$7#4 :B"+3 =; (/ #Cp1-);3C>$$)A6':':& 1L12&;l|`'b$C/<( 66誺/0 $D5?R1<@7]+8 *1$. &ٽKg G43VAS'@FTtfQK I"'1>/B +`+%( (  9";3+ aΔ58(83H$ܧ+R<ؓ?.M<1EͶ2c QN3&s0ܻ.F51J(9 0 $3  ( Щf SB,+'^V#g)+L u 2n*;K-#"+)Jo VLıGC 22F1 k3 %#\VU{M$*A=$ȦG+'V/#\@U* D@)"J&Ÿ?$*02 ):!%SK"H߬$Hpc"Z.2к1`*5K-E^lM=9;a@s)]aH$&"ӵF0 '?!l=A%,N;*&!Е6= ;@ v>ȜL_-1%!WB U88^v+E* P.#H0Iys* CœvJ'#c3:>&=G7(#*- _[E'q <l!IYZrMl@Ś GР HM 7AR0FFƐ!fQ׵: #)ϣJ*$)+$0$-R ><  0,f0q,?fىlW2*%Cƭ)F5S,= rO]B*,=)R$)3A5SCŷ< C+)2F$3ԥ/q 7yJ΁+\#I*B*kmь%+"9lST. '$ҡ&[62L/4.ƜH2*1޻O64t$̽ T'< %Ag@<0#3]6=7 |ZJ‰uZ,XFUN0e=1(ı:` Y')*>КJ Ⱦ MH ҙrS$\,̗@$ + ,g EQs ;6b&6 H)3DD)-}"O߶"2  *!(IǻKߜF)"$& DA>$ ,BQ#:@" -9.)421կ= %<-6ZV<-5Ƥ.j-1S%#} /C& ?.3#&0@4 T$? NR q0A&eU=$8 0?AN+8:** %IY[ LWS Qf  (/&!61r9?&3=+(3М&5 ]'C6p,B E+ m -4A2ꕙ_6-0ڙ2#HP-0 Ŝ#mK$NjT9/P`0(?Z$A&'600??c5%k< 5L4izfH  ZC,INBH餿Ps%8\]י2+,4ǻA <EKAT*ԡU;ѥ.% s5 //wG ,E- T'! z( $_A,*'*ƫF Y$AQG0L8$;=Z٪(/uWB!; ?3*(/>Mƌ*eR|P*$QzmR $++#>Z/_ R@Ǚ?$L3 $;+/6,;1Sb'= =f;=!9b'۪a3Ҵ %$/3$ #sЦ y'(^.I&j#>ž;@;+,LZӓ"QHQpC@ t|4Y=;-SUl=-n-]39E_SmHd( !$>ʩ  0/G?fiGBZ`pE ;??& |O/' G)9-4I%4W*q <&/:n (!xjƣ*Ӿ!)XɹQz )m2:F&ꄼ9`Ex1*"W '>"3yQB<$Қd,6O K - A^ʅO =RAk.LhK]{e@6P.jJ9(Vے*`Jߤ~eH=JR n'7=@-Ҽ,$,|_rϺ,+Rl,Mջ 78sę*+4NhQ + N`׿ܮ eJH!/$4C#HB`ߖ69 ##pdt 6gۺt$C(ۻQF~/ `JQ3<[qGVh 18_ܔ8 j;/0 $1 B&?VXMgr =O1*:6A˧Jq > ždu&8*;3{10L1=#lYA/+ v:R,8xw38Q$pfM<]ej0rOȣKl֗27) T$7bJtZ $!M w@?(IĻexAD>#@(0: $@?q40س7`ɾ hHיJ 6g H?S+: ec s1!"I5,/eצ1F#rr{X0P<*\4A' B-9 `[u:HH&-F R =ZK 7J% D]#$ HC(յK% -4"6$&ABҿSDB )O Z7ؼIz-cT3 ZfљI ئ ;-$ +1H"] '1n$3Ƴ#$ @B޵q +#3$+H$ (`)AC]Z5g-' G+:@\Ã%aLԣ*T$ۤ5Rwz8@ 02G6++.+#N;A%j@4! I**I 2N-,;֮ >47*<,^V1$0M '+ ֨EWXJ /a.ٯ?DS*y+C]z'PMÞX8W G O RD#"3F7C M2 .$>*6 G~JJ k&& $( 0$]=DIw+ )h ; %;0Ѩ4*!X R:` GOOP] <: 99ޛF7+(QI*3 ۹ c'6<[)5ٙAB 1,052E=ϿOEu-24͗Qz֘=ZȆ;V 7$K:!BS3 3VͶ0޹O2Ĭ/#$ A@L';T9 4? @"- #1dF^ He@ѭ ?_@k \* 6 4$:NNDޔ2)$9|C86(ҟ.U+ $J8:8  5.Dǩ@p*ڥ8"ϹN) $-!$}5+6ҥ"  007),CI|fG  ' "+/  "6: /'&4 F]m  ?'2373'7&1IA 0ȤH ޟ'*' 849 =.<,\(A-#4;# 7M+*&4.ƞ6K NVA @?Cݡ/A )cز,' 1L )?޸=ڶF3192G $*%3#-G%0/qv-&;9˿:2 1v!S$3*$4., 7 0 '2"''M! 7-2- ,E 2: K! #"2 !@ ܼ  ! %> ?'%$P/ \ @B$#, "ǻI6F +Ի0(<?! ܼA'0 -?#0D% >& )l* .$ H- 4)"'Ӌ8S 1 BC D3._5"O#'3P F),L$;V'86%?#=P% ) +)M(jA" :UA#*E*##3!^F+Ƽ:kL*'?/#4ӵ>'&$""6  ?($%e&";:~=7 )?+ #2*ֺ 3,$ %)K"#.'   - !! -ZAH +:#' / 0,/" $  c'ݷ #/ܴ( S2@43-&+ +X!.36 )!!8W !P'[mT&˸BD  <5& 5r f )7, 5B*6+  , pTc33#:nLN$,  $ $9.'3/ 6(!#!+C [4T<P320@ $#-#-F<1   0զ 0$93ִ?44*#3"(!^#20 AF :+ +D " 9:[1+ 8-"t$M! U<@8961?8a# )A8w  2 L< =)*0%2R: 0# $1#EB  ;40@,I '24/.!Ĺ;3XG6#0 +$3%&  -- ,H!8&% KHܶ> %/.5' #/R; *-#4̬ (G5 5$@+ K#@%A( F '  = (߸3E Hֲ*2: *  <C $A$! 3!  +0N"$%  C +DF!.)+. 3>^$ /@11 9#/2%2 ,"6 C $"<  PT.@,Ի7.B $-E3 4۾K 5 'HH% ֦Z1"5  2!% `h &""/" )7 BVAO!(7+ 2+μ%(.O 2  < " 3%,A2 Y$B=-B$"ϭ@    -CFΧ%  *4!)@`OبTDB.ʩ;5"@۳5  ;N?6R04`3ޟnF  ,0O$D. ( ĸ-8娳46, , 87bL߈7q+# ж2 $־+'7* (:   <$$B/# C<+*,-P+A82! '9):?  L!*.$( '# C0<4,"G 9%  * #6$X 6O 0+ +:<fFæ1\4  &, #(<>YA$N$$,$Hۻ0! ^ 1;. 0 *+ɸ8$EB'))#2'  '  ͽ7* 3-&T& %$1  )$+"- h= *+ 7- AI &%"3 ?, ߾N2 3%ܪ9a2Э?A, ) ?%$)$52G1/ $B*31>*(%7*<+/;>.H+?I4 $ ղG 3 !&7 : (8Y%]7`(j)B""X#+&$ () )<0%#!&%ο!"(2A03 8;-ڴ B2E(D'%e;>< 7 75é4/* /*  "+%6*-!@dM1  7*-"" != $)0 8^3? . 'R&; )P$ * 84   A( +'5eС:LOW?5:"205$'!   &, 57& ! OK /J=BCK' /*)."02 ! 67<0" @0 J7 %   ,  *'0 2/  +>)* =70׮$ L&#J &-B2  )  2=? 3% 0.$?0")+91$$ B )::",B!#( 04.2& B(%  ! %0! 6*(#* $ 5/6 <@,)=" /  $ <3G  *    ,& . 2B.# ;,&3$( &# %$'( (/.)"JB \+3E %$ A&. , /  ,  0,(  -  $ ()P 7,6/ ! $9%%Ͽ"1;7 C'*,  % # #'; &#0"<% #!/  M&0-"Ҥ)R3 #+ 8  ,%96%  E*" %) "% =9 $ >3! .$ ) - =!  ]   16 + ;"W 6$"0"(3T"40 ?M& &( 8 .)%  &% %9 "I"2 !"R"%/"  ҺB,ſ<   0.$8 $!! = %$ $-+     +  ) /'" -%*$ &  1 H+  ) *.3$ $ 1  &&9$G( 1! ?  % # %&+! 2 ++& Q$** < # #='43۸"A306$( ! +  =0!) $+ @    )# # *2!7!  $ &% #6( :,7# )) 8 20      # ! , . !/ ++ # =  %$$ 6(4   $  &4 ;1 6& "!  F +2!  ) , %#$ +42 &!$!0 &-2. 2'$1,E!1 3>$ 1 && K,7ν603  ./  *1& .) $  # $. * 4 G"%CO :"  $.#%   -1 ( ( #&)%0 03;  #+*  )*&2 ) &%&*. %$ /'.B51 (   " ) 1  =!! $#  ")$ #; ; &  1" 0=!"*/" ' '6 ?8!-0 +,! )B$%!/ <&.) ',%   75 "  ! 6#($  '( 0   !1 $0=* "* ) " $     / (<& ! 1 0/"     %#) " %   ! (!#+   %25%E "49/ B3% ! -    ( *!)  ) ", (    1 A !+,*!    '  &! %     !' $ '-   , L2 * 3   790 ("  -!!%   % 4)  -"       #!  % *  3#**"$-7  1$" ( % /  #%*& / +, %5/) +"  %),)')$*(%0    ( ! . "3   ' 6  *#$   +' 0!3    +    %#$ 8 5*  '  "$  !&""  "&"  %   !        ">  1 ( $  $,     !  "  * /!(    )  3 %      +# !     2 %  &?8     / #  )  $    0  -  "+      #   !  ! >/ (:  '.   +, #5  $ $  3 * .+#)! #! !('"( $ ! -% %       +# !, ! )% %   4 -*   $ *, $'   $$  / "     *,   # # % *  3) "! , %      (' 7   # !B  '  & $  2 / %      ,-      *   )#!  +                  !* &* #   ( $ ( 2     *)#         #"  !   *#  %          &  "   $ ,     ""     "        #*  )      "        . !                # $ #  "                 ")                    &    (!  ! #  "   !  "!', %  & )  - *  " %    " !     # " *  &      $                              !    #*            "'    $                 !              $        * %           '                              '     !     %         Synth Sweep (@$.<<FPZdn3 #2 < F P Z d n x @(Distorted Sweep @ @ @ @(C) Heatseeker                                                                                                                     !             !     '   &          #   '    (    &    #  '   (   +   & '   *  *    +  %$  ) .   .   *$    %( ,    /     ,    ''  +  /    ,  &   "%  +   ,    +  '$  *  .   ,  &! #$  )   ) +   #!  "   "   "                                           #    %    2   *$  2&   %0   (3    <  ;   @  6    .       %     )   $       "        ( ' +     )   #    $#  * &' *"  4)  7 0  4/   7$& 1%$  /) / !  )    )!   &     '      )   +   +  -   +!     (!      &     %     ##  '   )  '  (    (   ,    %  !(   " '   '   %         "          !   #            !    !    "      "   !               #          " ! #! '' +  &   -'"$   ,0'  7&  >%  :"+ !  ?  "' %  5&  $$  ! 2$  &   =  %  '2  6   $*   & " 1  %$   ! -  &'  $!   & + & ". +  &/   ( ) 1, 0 1  3 2  2 3 . .  2 4 '# $!  02  "  :   3 (.   8 -!,   ?  08  3  3: 9 C G  /,  QA  :޿ SE п0. 5/ ܲG 5$H!ֹ(A׸ +; ^ 9-0* SG:  >=   9    4  5   %/   51 !1  7   20   5 2/ 7 ,0 9 (-  1 )"#  2( '  8$&  2! & ""  0$ !! &0  %% 8  "   7     2  (%   "/   3    4    0   $,     0    6   0 -# 1   1    +   $&   !1     +7      3 .        -"&     $"6      0 7       (0  &   % #*      7 # %! <   &   '  &9  +    $" 1  '0   !& %  * 2 ,  (  #& 8   1 9 . <0 > .  >  1A  8  D +-  D   8 L 4,I  6  H 0.  M  A   P#> L  D  83:+ M H  9/=& .D  )7  H K3C D  8! J 5A,3 4  #> .C%- ' ;  ߶ +H +!+  **   /H)!   4   +O%)  $  0*N5 * '* .A8 *"*  &A 6 +  #+ @ ,   7  3   4" - ,   +!   $   8(  &   : * )  ?%   &  > (   -  6$  2   5  ' .   8  ' #     0 ) '   &! *       6 ,  #   9 4  2'%    +(+%  63  ! 9 2  2  6 -' 4 8 %+  ; +   1" 6   ,. 1    9 4 $# F 7()  F 53$.  E97)'  D >6%&' 7#A*"(* 5"G8  4 :   7,4  A :.) < ?  A 1 8 H ? , &ٿ .   I: * - #)I >% + 6 F=  )  4 8 A  3 , (% =  = -# %") 9  6 #&  *1 4"   #&  $ #   3  /' 3  %   & ) 6  ,   "(,  #    &   # /  "  &  %? *        B .     ": )  #     C '      D#$  '     41 +  )'  $=  + 5% E  3  :%  %  C0  8!   &;2  8   ! /*4 8 & '$  ,.8 9  "' >    #,: 8  1 ?   5 ($  7 8  ; " 0 8   0  4  /*0-( Ҿ>  - *  > 7!0 *Ϳ; !'0 :3 !+ .  6 * 2  <.1 2  2 A 8+ 2  1 4G 1' ,07 5? .0(  + 5  4 '):*  $2  -58 +   2 ݾ.#  )-  5  &  :(-  * "   (   /" /  &    2 5 #! =  6 # "  ; ݾ. ' $  1" '& , *  ;/0 2  C 3  6:   A 6 8< 98 6 ;   -(8 98 86 :7  =0!;8    @*" 75 (   C&%  3 21 $ ?: ) : < )( < >'34  %& >9!#30 + #&  = 0#* 6;) ! 5 %. ' 2 :""  ", ֿ: % 1 ,% ;; " ,$ .   @ ;  "* /  78 !  # .    #)-%    ,   9 = !.  8 H       (I% (   3 K*  + $      A M(  ' &    ! H I +- ' J  C"' 0  +#  I A , 7(" .    KD ' "'* 3    E : * / + ' '@1 03 )% ! .<# . + / +" - 8#/3 #% &+*! - : ' #@ 0   .,)  :, F6  $ '$  ,.  I=  $ )$ $&(A< )  $"  ,"4,ۿ8 0 (%& ! ?ݻ+,  1/$#    N$1 . -&$"    #J= 1/ ,"*   7+ H  2(4 +( 2?H  04: )- =(  HE' +<  ?  -0 B-   >>4 E  B /1J+!  -6>  J  G43ݮM!!   +1A '?K GȲ 9;1 <"I&EK KŮ I. ,0 "/ O J+F )?߾ $A #K0!> !GWJ,F +;-1*G1ֶ 7 !!@X!E$H %;+, ,? - /2 N @C !?!/׸):  & # 6 0;66 (5 ,   2D4/+ 9#  + 7 ,' E8+'/   EC  10:"3 '%    =P $>6 5!&  "0L !A>  4'$   J ?' F68&& #  O 42 G6 3 *! )   @%B H: 1 7 '3   $0N F 6# 98&+ < RF ; #4: $#* >QB 4& ;9* '"A QIC6'/4. & A TG=3,   :, 5 M C 7*"", % = -5 KE 7/&$  . $ F 2/9 -%#"+ 2 (  L B. &*%(1 ,  D I * / ), 4 $  1"J * 4+$(  &2B 5 ? %," +*"= >2B5'+%+!  ? N %%@4!0 (! )   2N )E-'- 6 " ) , )I  0 ?  0%3 3 &&0 " ':! 7.*/7. (6 , '4 7 : .3"  -%&< "* )3 3 D3; $ ."7  & $< : B:>% 4)#& !$ V 8 6* D:', 5) ,/ 3P B A"6A 6"8    G Y;  9+@L 4"@ "  Q[9, 7/>S9˿%A ' R [ڨ/@ /8ٽG չMݵ 7ƾ &; I J!'K-9ܻI ӽIӾ9(8   *0*$;"G#6Iھ6#1'2 ) /#8DE0 :((*)'-  8 CG - :0- '# ! # ();<+8 4 (+) % 4 :$.$.32%&3 ( ./40*) 38 <'##    -9-89:7  "  -,75 793     ,%<*!69 3    ,B#%2 9 ,   , A%/ 8 *  ! &) >%, 4 '   ' $C # )  2, . C! ) - '  " 2 +  ?  & *, $ #$ :"  %*0 % , "$6,  3)/2  %  (   #<71#;&  4  A8*!7<'   5   $ D0>'9$FǾ-   $# . 4, $N*4%L#. "  !*,8 X,*,S*!&)1( &" &> _4 '+*N 9 . 6" &  74 L۲h4.8-L B$$" 3($ #)FL UުoB.!.1G N# 0 )&8   +JN Rb*<;7 *MۏY%* (#ر= ! ( !2 BIQ3/F = #NԔ_#.'հ$9!  $%-& ;# A4$L=JѡZ0# ֹ (, "  L #2+=J;FԲN/ '# J<=A 19E#-  ! !  4!:8#2+ 0C&/$ # !  ! V/:,*"/ 4D2   #' ^.220"+ =!&##"  AZ @$9= 4 3, ' )"   @  5/ C9 @ 8&&4 + /  7 C @< ?1"4)  1 L / 5A 0 '9, 4R . . :5 *90  "$ J9 '! 7 ( %/ '= B !+ 5 + (&% />@2*$ .,$*   9! C=/& ) )+,    3+5T<8(- -)/ 9.Z C9 .# .,0 3   1 ]B$B 4' 0 0/4'   YB-C8) 1(+2 4(    RA5K B&8;"8( "   ) G89 I <';6! 9!  /!=%: L 0%93!9  ! 5 9-,@ D/ <& 2%%  -4U 8B 99 +8+'%  +9 V0'S<448 %'  0 7 8X6%5 <6""/  C <I'8"+B:"" 4    =42A?= :" 1 & 7  ?' E C ?99. :&C'   LH E3@ =3 8!H #   3P)PE4 / 08<>#=   :E5+D!=A & ,&8   6A684/-       L#,%9. "*'     C0 9F,'%   0<",#B- "& %   =--.(=3  "#"   3% 4&487 '.    *' ><*%8,)     ;=L =#& 24 %-  !>-MD :(> +4     4- M#B@ "C*!*   ,I+)A8G +>)< 2    )J#R ;(5*+ >3   '8"T;' &*3$ D(1   '/9 % RF!,%"4"F ,2   '&J7 " I B  ; =2&/  #I<>,*L ;˵+*'/!   !D*8F ;S ;/1      #;:5BEQ !9Ŵ0(   ')!#   8H.3!-<JW&R7".*   /YR/MJB:; T -"+2   SI8G<3,I=O)- 33  23/+;48ʽ$@QB C+ں1:0    BJټ4BLG!01950#      8=" FB 7*!@4 +    .3 @0& 1(C-#"  / !+ 0.2 )=$!"    2' !:7%1 +   1&9*#)    )?D+ -    GA K #  $  F 0"H -     M - ;B6 ' '#    K#9:H6#"9%      (-:(+  #/%     $.:  &=2*3"     ')>  ,@1#" %  &$,& #,7)*%$-!      :!(') 41++ "     /I)$$! 1=7%%,"    4G$:<8 7#1%.)2!    ..&$< 1*627'+   '.,><H45" "  21   ))3&" "  "   30(   + " "     46 , /         $& #!     )1 1         2B4%0,D     8K 4',C  #4H04 # 4+ )   ')'G &68 )    *6;X"  45! $    )A?X#  , .45"     ?:O&8& <)    +'. 1;*;' 8"#     8417> - 1$'(1     AFI#, : 8:9 99    DJL1 L5 674+& "$  57.&1,1) 3!32'%   ;8->?:;92     0 52%%"$!#   -:40#!"     .9+4   '%!   & #/.   &!/8A !      .7=9 3'' $    -)+)     '$ $ -0<+ ("   1,+:@ =,42 !    252- &(#   $?6- =? A K? D6 (    !1C0 87* <6# &1%.$  $C#&9 )*5; &E+! "1,;'  # ,$     '" /.     $/ .    13 (     +"% /'(   !   #     !&. ($'   !  ! -40.&   ")!   $  !  %/ & , (/("  + 8#     *  )( $$. )+)   VplP7  '=UokQ8 %<UnjQ8 $9RkiQ7!"8Q}hi~P6  7M~ei{N7 6L~dgzO8  4K}bexO7 " 5 L }b gwP8# & M2 ")                                                                                                                  Knock (@ (2 < F P Z d n x @                                              +"                          !        %                 '                $                                 $! %!     &    $      "   $  1$ "                   %    +! # /  & $ 0  $",  #     "  #   !     /*3%   1' - !  #   &         '    (      "         "        ! %&'     " ((                          "                        #    ,  #   "                          &(  #      !   #   '          $   .  #      " (#                     *      $   ''%  ! /)#                        ,!                                  )     #      #                &   $             #  *"? $    %  &  ! '   !      '  "                    & % " "7    #    !(                      - &+    & ' $ $)!"   !   !         #     #$     '    $%    '+( !#   %  &!  ;  3    " !   !   +   "      #              & " !    .! "  ! 2     &                    $  #%   !  ' %         #  %   !       !     !  "      .!"         .    "   $          &    "!         $                       #                %*        ""   #$  #- $(      !                               $                                       ,           !!   )%          $       $                                               !             '                             $     !  ("               (     ,/#    &                          "           %                            !     $                                            "   #   ( %   $                        $     '                            &( ,         !         $    '        "       &         %                                                                         !   !         !                                                   $                                       !                                                                                                                                                                                                                                                                                                                    "                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        !This space is (!intentionally left (!blank. ;) (! (! (! (! (! (!Happy New Year!!!!!!!! (!Lunar Gravity of (!Project 2501 presents (!***************** (!***** Critical ***** (!***************** (!LG's Millennium Remake (!***************** (!-------------------- (!Song Info (!---------------------- (!Title: Critical (!Original by: Burkey (!Rmx by: Lunar Gravity (!Duration: 5:20 (!Style: Trance (!Comments: (!I have had alot of fun (!remixing this tune. (!And i am especially (!happy about the acids, (!as i have had problems (!making desent acids in (!the past. (!I also would like to (!say, that i hope the (!next millennium will (!be filled with lots of (!great tracks from all (!the artists around the (!world, and that groups (!like BSB and Boyzone (!will die and burn in (!hell forever... (! (!Greetings to: (!CoDe-X, Burkey, (!Crazy Ant and reWind (!of Project 2501. (! (!and to: (!Scooter, Polk, Scrap, (!Paladin, greatFox, (!Vapid, Winston, SnuFF, (!Sweeting, Ana, Gabbie (!and my other friends (!on irc and irl. (! (!Contact Project2501: (! (!project2501.cjb.net (! (!Contact Lunar Gravity: (! (!gschade@start.no (!or (!djzonic@online.no (! (!it's your choise... ;) (criticalmass-1.0.0.orig/data/paths/0002755000175000017500000000000010355431277016440 5ustar danieldanielcriticalmass-1.0.0.orig/data/paths/idle/0002755000175000017500000000000010355431277017355 5ustar danieldanielcriticalmass-1.0.0.orig/data/paths/idle/idle17x.path0000644000175000017500000000013307630537344021507 0ustar danieldaniel16 2 0 377 -100 23 424 -100 -89 336 -100 -68 381 -100 -46 426 -100 -23 330 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle1.path0000644000175000017500000000024107630537344021230 0ustar danieldaniel16 4 0 376 -100 0 403 -100 57 398 -100 82 381 -100 107 363 -100 132 405 -100 133 375 -100 134 346 -100 89 349 -100 61 365 -100 33 382 -100 0 349 -100 0 376 -100 criticalmass-1.0.0.orig/data/paths/idle/idle2.path0000644000175000017500000000024207630537344021232 0ustar danieldaniel16 4 0 377 -100 0 404 -100 42 405 -100 76 405 -100 111 405 -100 150 407 -100 150 377 -100 149 347 -100 109 350 -100 75 350 -100 42 350 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle3.path0000644000175000017500000000024207630537344021233 0ustar danieldaniel16 4 0 377 -100 0 404 -100 44 364 -100 78 364 -100 113 364 -100 150 407 -100 150 377 -100 149 347 -100 112 382 -100 78 382 -100 45 382 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle4.path0000644000175000017500000000024207630537344021234 0ustar danieldaniel16 4 0 377 -100 0 404 -100 40 424 -100 74 424 -100 109 424 -100 150 407 -100 150 377 -100 149 347 -100 112 382 -100 78 382 -100 45 382 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle5.path0000644000175000017500000000024207630537344021235 0ustar danieldaniel16 4 0 377 -100 0 404 -100 40 424 -100 74 424 -100 109 424 -100 150 407 -100 150 377 -100 149 347 -100 111 331 -100 77 331 -100 44 331 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle6.path0000644000175000017500000000023507630537344021240 0ustar danieldaniel16 4 0 377 -100 0 404 -100 50 447 -100 74 424 -100 98 400 -100 51 408 -100 51 378 -100 50 348 -100 99 355 -100 77 331 -100 54 307 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle7.path0000644000175000017500000000012507630537344021237 0ustar danieldaniel16 2 0 377 -100 0 404 -100 71 404 -100 71 377 -100 71 350 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle8.path0000644000175000017500000000012507630537344021240 0ustar danieldaniel16 2 0 377 -100 0 404 -100 39 403 -100 39 376 -100 39 349 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle9.path0000644000175000017500000000012507630537344021241 0ustar danieldaniel16 2 0 377 -100 0 404 -100 47 441 -100 47 414 -100 47 387 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle10.path0000644000175000017500000000012507630537344021311 0ustar danieldaniel16 2 0 377 -100 0 404 -100 50 372 -100 50 345 -100 50 318 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle11.path0000644000175000017500000000012407630537344021311 0ustar danieldaniel16 2 0 377 -100 0 404 -100 63 397 -100 36 357 -100 9 316 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle12.path0000644000175000017500000000012507630537344021313 0ustar danieldaniel16 2 0 377 -100 0 404 -100 36 385 -100 24 369 -100 12 352 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle13.path0000644000175000017500000000012507630537344021314 0ustar danieldaniel16 2 0 377 -100 0 405 -100 67 348 -100 66 375 -100 66 402 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle14.path0000644000175000017500000000012507630537344021315 0ustar danieldaniel16 2 0 377 -100 0 405 -100 66 317 -100 66 375 -100 67 433 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle15.path0000644000175000017500000000013007630537344021312 0ustar danieldaniel16 2 0 377 -100 0 405 -100 -66 317 -100 -66 375 -100 -67 433 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle16.path0000644000175000017500000000013007630537344021313 0ustar danieldaniel16 2 0 377 -100 0 405 -100 -88 316 -100 -66 375 -100 -45 434 -100 0 350 -100 0 377 -100 criticalmass-1.0.0.orig/data/paths/idle/idle18.path0000644000175000017500000000024210311150467021304 0ustar danieldaniel16 2 0.000000 500.000000 150.000000 500.000000 150.000000 499.000000 0.000000 500.000000 -150.000000 500.000000 -150.000000 500.000000 0.000000 500.000000 criticalmass-1.0.0.orig/data/paths/idle/idle19.path0000644000175000017500000000023010311150467021302 0ustar danieldaniel16 2 0.000000 377.000000 0.000000 404.000000 0.000000 351.000000 0.000000 324.000000 0.000000 297.000000 0.000000 350.000000 0.000000 377.000000 criticalmass-1.0.0.orig/data/paths/idle/idleb1.path0000644000175000017500000000045610355351306021370 0ustar danieldaniel16 4 -1.000000 355.000000 -80.000000 354.000000 -164.000000 385.000000 -220.000000 430.000000 -275.000000 475.000000 -80.000000 370.000000 -1.000000 371.000000 78.000000 371.000000 275.000000 475.000000 220.000000 430.000000 165.000000 386.000000 78.000000 355.000000 -1.000000 355.000000 criticalmass-1.0.0.orig/data/paths/RT_Entry1.path0000644000175000017500000000021307630537344021103 0ustar danieldaniel16 3 11 506 -100 -71 585 -100 -164 531 -100 -164 449 -100 -165 375 -100 -66 374 -100 -65 449 -100 -64 523 -100 -218 561 -100 -264 425 -100 criticalmass-1.0.0.orig/data/paths/retreat/0002755000175000017500000000000010355431277020106 5ustar danieldanielcriticalmass-1.0.0.orig/data/paths/retreat/dc4a.path0000644000175000017500000000017507630537344021604 0ustar danieldaniel16 3 0 302 -100 0 166 -100 -129 383 -100 -8 365 -100 113 346 -100 106 380 -100 85 439 -100 63 498 -100 0 630 -100 0 454 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc5a.path0000644000175000017500000000020007630537344021572 0ustar danieldaniel16 3 0 302 -100 0 166 -100 -177 332 -100 -8 365 -100 161 399 -100 101 499 -100 -31 460 -100 -163 420 -100 0 630 -100 0 454 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc6a.path0000644000175000017500000000017707630537344021610 0ustar danieldaniel16 3 0 420 -100 0 331 -100 40 340 -100 -48 340 -100 -137 339 -100 -17 410 -100 -31 460 -100 -46 511 -100 0 630 -100 0 454 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc1.path0000644000175000017500000000017307630537344021436 0ustar danieldaniel16 3 0 302 -100 0 223 -100 136 153 -100 77 259 -100 19 364 -100 20 390 -100 80 493 -100 139 597 -100 0 533 -100 0 434 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc2.path0000644000175000017500000000017507630537344021441 0ustar danieldaniel16 3 0 302 -100 0 223 -100 -114 321 -100 -58 344 -100 -1 367 -100 139 478 -100 78 493 -100 17 509 -100 0 533 -100 0 434 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc7a.path0000644000175000017500000000035510311150467021572 0ustar danieldaniel16 3 -0.000000 420.000000 -0.000000 331.000000 -190.000000 320.000000 -187.000000 377.000000 -185.000000 433.000000 -120.000000 356.000000 -121.000000 484.000000 -121.000000 612.000000 30.000000 612.000000 30.000000 496.000000 criticalmass-1.0.0.orig/data/paths/retreat/dc3.path0000644000175000017500000000017707630537344021444 0ustar danieldaniel16 3 0 302 -100 0 166 -100 -100 326 -100 8 365 -100 115 404 -100 -24 424 -100 -85 439 -100 -146 455 -100 0 533 -100 0 434 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc4.path0000644000175000017500000000017707630537344021445 0ustar danieldaniel16 3 0 302 -100 0 166 -100 129 383 -100 8 365 -100 -113 346 -100 -106 380 -100 -85 439 -100 -63 498 -100 0 630 -100 0 454 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc5.path0000644000175000017500000000017607630537344021445 0ustar danieldaniel16 3 0 302 -100 0 166 -100 177 332 -100 8 365 -100 -161 399 -100 -101 499 -100 31 460 -100 163 420 -100 0 630 -100 0 454 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc6.path0000644000175000017500000000017307630537344021443 0ustar danieldaniel16 3 0 420 -100 0 331 -100 -40 340 -100 48 340 -100 137 339 -100 17 410 -100 31 460 -100 46 511 -100 0 630 -100 0 454 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc7.path0000644000175000017500000000034710311150467021432 0ustar danieldaniel16 3 0.000000 420.000000 0.000000 331.000000 190.000000 320.000000 187.000000 377.000000 185.000000 433.000000 120.000000 356.000000 121.000000 484.000000 121.000000 612.000000 -30.000000 612.000000 -30.000000 496.000000 criticalmass-1.0.0.orig/data/paths/retreat/dc8.path0000644000175000017500000000034310311150467021427 0ustar danieldaniel16 3 0.000000 453.000000 0.000000 331.000000 252.000000 424.000000 110.000000 463.000000 -33.000000 502.000000 40.000000 344.000000 180.000000 384.000000 321.000000 425.000000 -0.000000 611.000000 0.000000 528.000000 criticalmass-1.0.0.orig/data/paths/retreat/dc1a.path0000644000175000017500000000020107630537344021567 0ustar danieldaniel16 3 0 302 -100 0 223 -100 -136 153 -100 -77 259 -100 -19 364 -100 -20 390 -100 -80 493 -100 -139 597 -100 0 533 -100 0 434 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc8a.path0000644000175000017500000000035110311150467021567 0ustar danieldaniel16 3 -0.000000 453.000000 -0.000000 331.000000 -252.000000 424.000000 -110.000000 463.000000 33.000000 502.000000 -40.000000 344.000000 -180.000000 384.000000 -321.000000 425.000000 0.000000 611.000000 -0.000000 528.000000 criticalmass-1.0.0.orig/data/paths/retreat/dc2a.path0000644000175000017500000000017507630537344021602 0ustar danieldaniel16 3 0 302 -100 0 223 -100 114 321 -100 58 344 -100 1 367 -100 -139 478 -100 -78 493 -100 -17 509 -100 0 533 -100 0 434 -100 criticalmass-1.0.0.orig/data/paths/retreat/dc3a.path0000644000175000017500000000017507630537344021603 0ustar danieldaniel16 3 0 302 -100 0 166 -100 100 326 -100 -8 365 -100 -115 404 -100 24 424 -100 85 439 -100 146 455 -100 0 533 -100 0 434 -100 criticalmass-1.0.0.orig/data/paths/entry/0002755000175000017500000000000010355431277017601 5ustar danieldanielcriticalmass-1.0.0.orig/data/paths/entry/ec7a.path0000644000175000017500000000066507630537344021307 0ustar danieldaniel16 10 53 407 -100 -95 511 -100 -202 568 -100 -363 602 -100 -524 637 -100 -620 630 -100 -699 530 -100 -779 430 -100 -770 305 -100 -716 243 -100 -661 181 -100 -559 150 -100 -442 173 -100 -325 197 -100 -265 238 -100 -240 309 -100 -215 381 -100 -244 463 -100 -327 506 -100 -409 549 -100 -538 561 -100 -606 483 -100 -674 406 -100 -659 352 -100 -625 303 -100 -592 254 -100 -507 237 -100 -435 278 -100 -362 318 -100 -380 379 -100 -432 427 -100 criticalmass-1.0.0.orig/data/paths/entry/ec1.path0000644000175000017500000000020607630537344021127 0ustar danieldaniel16 3 -18 549 -100 42 636 -100 261 735 -100 345 655 -100 430 575 -100 319 354 -100 209 345 -100 100 335 -100 127 429 -100 165 502 -100 criticalmass-1.0.0.orig/data/paths/entry/ec2.path0000644000175000017500000000025407630537344021133 0ustar danieldaniel16 4 -21 183 -100 33 317 -100 45 502 -100 141 585 -100 236 669 -100 317 661 -100 350 615 -100 384 570 -100 382 482 -100 331 435 -100 281 388 -100 140 420 -100 210 546 -100 criticalmass-1.0.0.orig/data/paths/entry/ec15a.path0000644000175000017500000000035310311150467021343 0ustar danieldaniel16 3 447.000000 579.000000 91.333336 596.000000 16.671097 512.652344 128.000000 458.000000 238.000000 405.000000 405.000000 533.000000 173.000000 542.000000 -60.000000 551.000000 -291.000000 343.000000 -212.000000 560.000000 criticalmass-1.0.0.orig/data/paths/entry/ec3.path0000644000175000017500000000020607630537344021131 0ustar danieldaniel16 3 -30 733 -100 73 640 -100 114 466 -100 257 451 -100 399 436 -100 489 481 -100 484 532 -100 479 584 -100 346 533 -100 300 613 -100 criticalmass-1.0.0.orig/data/paths/entry/ec4.path0000644000175000017500000000025207630537344021133 0ustar danieldaniel16 4 -30 733 -100 22 602 -100 121 448 -100 233 521 -100 344 594 -100 252 714 -100 149 659 -100 46 605 -100 26 474 -100 88 406 -100 150 337 -100 227 408 -100 249 479 -100 criticalmass-1.0.0.orig/data/paths/entry/ec5.path0000644000175000017500000000020507630537344021132 0ustar danieldaniel16 3 -68 427 -100 109 406 -100 353 383 -100 432 377 -100 511 370 -100 511 490 -100 437 467 -100 363 445 -100 89 225 -100 66 354 -100 criticalmass-1.0.0.orig/data/paths/entry/ec6.path0000644000175000017500000000051007630537344021132 0ustar danieldaniel16 8 -73 518 -100 155 587 -100 406 562 -100 488 550 -100 570 539 -100 687 601 -100 756 583 -100 824 565 -100 793 451 -100 744 449 -100 695 448 -100 661 511 -100 607 509 -100 553 508 -100 501 428 -100 443 426 -100 386 424 -100 326 507 -100 260 507 -100 194 508 -100 183 415 -100 119 412 -100 54 409 -100 77 458 -100 100 500 -100 criticalmass-1.0.0.orig/data/paths/entry/ec7.path0000644000175000017500000000063007630537344021136 0ustar danieldaniel16 10 -53 407 -100 95 511 -100 202 568 -100 363 602 -100 524 637 -100 620 630 -100 699 530 -100 779 430 -100 770 305 -100 716 243 -100 661 181 -100 559 150 -100 442 173 -100 325 197 -100 265 238 -100 240 309 -100 215 381 -100 244 463 -100 327 506 -100 409 549 -100 538 561 -100 606 483 -100 674 406 -100 659 352 -100 625 303 -100 592 254 -100 507 237 -100 435 278 -100 362 318 -100 380 379 -100 432 427 -100 criticalmass-1.0.0.orig/data/paths/entry/ec8.path0000644000175000017500000000025607630537344021143 0ustar danieldaniel16 4 -53 407 -100 222 360 -100 677 389 -100 732 428 -100 788 467 -100 789 549 -100 732 549 -100 676 549 -100 535 403 -100 382 326 -100 230 249 -100 125 462 -100 137 538 -100 criticalmass-1.0.0.orig/data/paths/entry/ec9.path0000644000175000017500000000020607630537344021137 0ustar danieldaniel16 3 105 763 -100 93 571 -100 378 561 -100 428 492 -100 478 424 -100 398 362 -100 306 353 -100 213 344 -100 190 408 -100 210 472 -100 criticalmass-1.0.0.orig/data/paths/entry/ec1a.path0000644000175000017500000000021607630537344021271 0ustar danieldaniel16 3 18 549 -100 -42 636 -100 -261 735 -100 -345 655 -100 -430 575 -100 -319 354 -100 -209 345 -100 -100 335 -100 -127 429 -100 -165 502 -100 criticalmass-1.0.0.orig/data/paths/entry/ec8a.path0000644000175000017500000000027107630537344021301 0ustar danieldaniel16 4 53 407 -100 -222 360 -100 -677 389 -100 -732 428 -100 -788 467 -100 -789 549 -100 -732 549 -100 -676 549 -100 -535 403 -100 -382 326 -100 -230 249 -100 -125 462 -100 -137 538 -100 criticalmass-1.0.0.orig/data/paths/entry/entryb1.path0000644000175000017500000000034310355351306022033 0ustar danieldaniel16 3 -1.000000 745.000000 -1.666667 563.000000 -40.000000 258.000000 1.000000 242.000000 42.000000 227.000000 281.000000 508.000000 231.000000 517.000000 181.000000 527.000000 67.000000 395.000000 2.000000 395.000000 criticalmass-1.0.0.orig/data/paths/entry/ec2a.path0000644000175000017500000000026707630537344021300 0ustar danieldaniel16 4 21 183 -100 -33 317 -100 -45 502 -100 -141 585 -100 -236 669 -100 -317 661 -100 -350 615 -100 -384 570 -100 -382 482 -100 -331 435 -100 -281 388 -100 -140 420 -100 -210 546 -100 criticalmass-1.0.0.orig/data/paths/entry/ec9a.path0000644000175000017500000000022007630537344021274 0ustar danieldaniel16 3 -105 763 -100 -93 571 -100 -378 561 -100 -428 492 -100 -478 424 -100 -398 362 -100 -306 353 -100 -213 344 -100 -190 408 -100 -210 472 -100 criticalmass-1.0.0.orig/data/paths/entry/ec10a.path0000644000175000017500000000007307630537344021352 0ustar danieldaniel16 1 27 582 -100 -168 288 -100 -424 320 -100 -456 515 -100 criticalmass-1.0.0.orig/data/paths/entry/ec3a.path0000644000175000017500000000021607630537344021273 0ustar danieldaniel16 3 30 733 -100 -73 640 -100 -114 466 -100 -257 451 -100 -399 436 -100 -489 481 -100 -484 532 -100 -479 584 -100 -346 533 -100 -300 613 -100 criticalmass-1.0.0.orig/data/paths/entry/ec11a.path0000644000175000017500000000007307630537344021353 0ustar danieldaniel16 1 27 186 -100 -168 480 -100 -424 448 -100 -321 268 -100 criticalmass-1.0.0.orig/data/paths/entry/ec10.path0000644000175000017500000000007107630537344021207 0ustar danieldaniel16 1 -27 582 -100 168 288 -100 424 320 -100 456 515 -100 criticalmass-1.0.0.orig/data/paths/entry/ec11.path0000644000175000017500000000007107630537344021210 0ustar danieldaniel16 1 -27 186 -100 168 480 -100 424 448 -100 321 268 -100 criticalmass-1.0.0.orig/data/paths/entry/ec12.path0000644000175000017500000000014007630537344021206 0ustar danieldaniel16 2 -22 472 -100 117 562 -100 338 516 -100 97 397 -100 -144 277 -100 499 260 -100 433 502 -100 criticalmass-1.0.0.orig/data/paths/entry/ec13.path0000644000175000017500000000021207630537344021207 0ustar danieldaniel16 3 -657 362 -100 -479 483 -100 -310 643 -100 -138 592 -100 35 541 -100 -35 398 -100 132 315 -100 299 234 -100 538 392 -100 765 542 -100 criticalmass-1.0.0.orig/data/paths/entry/ec14.path0000644000175000017500000000046610311150467021206 0ustar danieldaniel16 4 -436.000000 479.000000 -374.000000 386.000000 -372.000000 601.000000 -280.000000 593.000000 -188.000000 586.000000 -282.000000 479.000000 -207.000000 420.000000 -132.000000 360.000000 -63.015717 489.268677 3.000000 493.000000 233.000000 507.000000 50.000000 274.000000 -141.000000 492.000000 criticalmass-1.0.0.orig/data/paths/entry/ec15.path0000644000175000017500000000035710311150467021206 0ustar danieldaniel16 3 -447.000000 579.000000 -91.333336 596.000000 -16.671097 512.652344 -128.000000 458.000000 -238.000000 405.000000 -405.000000 533.000000 -173.000000 542.000000 60.000000 551.000000 291.000000 343.000000 212.000000 560.000000 criticalmass-1.0.0.orig/data/paths/entry/ec4a.path0000644000175000017500000000026507630537344021300 0ustar danieldaniel16 4 30 733 -100 -22 602 -100 -121 448 -100 -233 521 -100 -344 594 -100 -252 714 -100 -149 659 -100 -46 605 -100 -26 474 -100 -88 406 -100 -150 337 -100 -227 408 -100 -249 479 -100 criticalmass-1.0.0.orig/data/paths/entry/ec12a.path0000644000175000017500000000014307630537344021352 0ustar danieldaniel16 2 22 472 -100 -117 562 -100 -338 516 -100 -97 397 -100 144 277 -100 -499 260 -100 -433 502 -100 criticalmass-1.0.0.orig/data/paths/entry/ec5a.path0000644000175000017500000000021507630537344021274 0ustar danieldaniel16 3 68 427 -100 -109 406 -100 -353 383 -100 -432 377 -100 -511 370 -100 -511 490 -100 -437 467 -100 -363 445 -100 -89 225 -100 -66 354 -100 criticalmass-1.0.0.orig/data/paths/entry/ec13a.path0000644000175000017500000000021207630537344021350 0ustar danieldaniel16 3 657 362 -100 479 483 -100 310 643 -100 138 592 -100 -35 541 -100 35 398 -100 -132 315 -100 -299 234 -100 -538 392 -100 -765 542 -100 criticalmass-1.0.0.orig/data/paths/entry/ec6a.path0000644000175000017500000000053707630537344021304 0ustar danieldaniel16 8 73 518 -100 -155 587 -100 -406 562 -100 -488 550 -100 -570 539 -100 -687 601 -100 -756 583 -100 -824 565 -100 -793 451 -100 -744 449 -100 -695 448 -100 -661 511 -100 -607 509 -100 -553 508 -100 -501 428 -100 -443 426 -100 -386 424 -100 -326 507 -100 -260 507 -100 -194 508 -100 -183 415 -100 -119 412 -100 -54 409 -100 -77 458 -100 -100 500 -100 criticalmass-1.0.0.orig/data/paths/entry/ec14a.path0000644000175000017500000000045710311150467021347 0ustar danieldaniel16 4 436.000000 479.000000 374.000000 386.000000 372.000000 601.000000 280.000000 593.000000 188.000000 586.000000 282.000000 479.000000 207.000000 420.000000 132.000000 360.000000 63.015717 489.268677 -3.000000 493.000000 -233.000000 507.000000 -50.000000 274.000000 141.000000 492.000000 criticalmass-1.0.0.orig/data/paths/entry1.path0000644000175000017500000000103407630537344020540 0ustar danieldaniel64 5 -67.000000 -40.166668 -100.000000 -44.833332 -27.500000 -100.000000 -10.833333 -22.000000 -100.000000 0.333333 -1.833333 -100.000000 8.500000 11.166667 -100.000000 8.000000 22.666666 -100.000000 0.666667 33.166668 -100.000000 -9.333333 47.666668 -100.000000 -23.166666 47.000000 -100.000000 -31.000000 38.500000 -100.000000 -37.166668 32.500000 -100.000000 -38.666668 23.666666 -100.000000 -35.500000 15.000000 -100.000000 -32.333332 6.500000 -100.000000 -11.500000 -9.166667 -100.000000 9.000000 45.000000 -100.000000 criticalmass-1.0.0.orig/data/paths/Idle1.path0000644000175000017500000000024107630537344020253 0ustar danieldaniel16 4 0 376 -100 0 406 -100 57 398 -100 82 381 -100 107 363 -100 132 405 -100 133 375 -100 134 346 -100 89 349 -100 61 365 -100 33 382 -100 0 346 -100 0 376 -100 criticalmass-1.0.0.orig/data/paths/attack/0002755000175000017500000000000010355431277017707 5ustar danieldanielcriticalmass-1.0.0.orig/data/paths/attack/ac2a.path0000644000175000017500000000020207630537344021367 0ustar danieldaniel16 3 0 651 -100 0 548 -100 87 493 -100 -54 440 -100 -195 386 -100 -121 595 -100 -233 553 -100 -344 511 -100 0 386 -100 0 297 -100 criticalmass-1.0.0.orig/data/paths/attack/ac9a.path0000644000175000017500000000012507630537344021402 0ustar danieldaniel16 2 0 625 -100 0 586 -100 171 605 -100 87 546 -100 2 487 -100 0 215 -100 0 178 -100 criticalmass-1.0.0.orig/data/paths/attack/ac3a.path0000644000175000017500000000013107630537344021371 0ustar danieldaniel16 2 0 651 -100 0 548 -100 134 378 -100 -31 433 -100 -196 489 -100 0 290 -100 0 214 -100 criticalmass-1.0.0.orig/data/paths/attack/ac10.path0000644000175000017500000000012707630537344021313 0ustar danieldaniel16 2 0 625 -100 0 586 -100 -88 229 -100 41 502 -100 169 776 -100 0 215 -100 0 178 -100 criticalmass-1.0.0.orig/data/paths/attack/ac11.path0000644000175000017500000000044510311150467021302 0ustar danieldaniel16 4 0.000000 625.000000 0.000000 528.000000 -262.000000 500.000000 -105.000000 400.000000 52.000000 301.000000 0.000000 504.000000 84.000000 501.000000 169.000000 498.000000 232.000000 400.000000 7.000000 420.000000 -218.000000 441.000000 0.000000 277.000000 0.000000 229.000000 criticalmass-1.0.0.orig/data/paths/attack/ac12.path0000644000175000017500000000034610311150467021303 0ustar danieldaniel16 3 0.000000 628.000000 0.000000 576.000000 -85.000000 640.000000 -77.000000 580.000000 -65.566231 503.774841 -154.322067 580.286255 -144.000000 499.000000 -135.000000 436.000000 0.000000 533.000000 0.000000 397.000000 criticalmass-1.0.0.orig/data/paths/attack/ac13.path0000644000175000017500000000034710311150467021305 0ustar danieldaniel16 3 0.000000 628.000000 0.000000 522.000000 -65.000000 665.000000 -120.000000 640.000000 -176.000000 615.000000 -170.000000 533.000000 -102.000000 522.000000 -35.000000 511.000000 0.000000 658.000000 0.000000 446.000000 criticalmass-1.0.0.orig/data/paths/attack/ac4a.path0000644000175000017500000000017707630537344021404 0ustar danieldaniel16 3 0 651 -100 0 548 -100 138 392 -100 -53 432 -100 -244 473 -100 74 649 -100 151 559 -100 229 469 -100 0 402 -100 0 283 -100 criticalmass-1.0.0.orig/data/paths/attack/ac10a.path0000644000175000017500000000013007630537344021446 0ustar danieldaniel16 2 0 625 -100 0 586 -100 88 229 -100 -41 502 -100 -169 776 -100 0 215 -100 0 178 -100 criticalmass-1.0.0.orig/data/paths/attack/ac5a.path0000644000175000017500000000017507630537344021403 0ustar danieldaniel16 3 0 651 -100 0 574 -100 -117 483 -100 -56 423 -100 6 364 -100 78 582 -100 109 471 -100 140 359 -100 0 355 -100 0 237 -100 criticalmass-1.0.0.orig/data/paths/attack/ac6a.path0000644000175000017500000000020107630537344021372 0ustar danieldaniel16 3 0 651 -100 0 570 -100 21 317 -100 -22 259 -100 -64 201 -100 -159 213 -100 -163 279 -100 -166 345 -100 0 684 -100 0 405 -100 criticalmass-1.0.0.orig/data/paths/attack/ac12a.path0000644000175000017500000000034410311150467021442 0ustar danieldaniel16 3 -0.000000 628.000000 -0.000000 576.000000 85.000000 640.000000 77.000000 580.000000 65.566231 503.774841 154.322067 580.286255 144.000000 499.000000 135.000000 436.000000 -0.000000 533.000000 -0.000000 397.000000 criticalmass-1.0.0.orig/data/paths/attack/ac1.path0000644000175000017500000000017507630537344021236 0ustar danieldaniel16 3 0 651 -100 0 556 -100 53 383 -100 152 376 -100 252 369 -100 211 603 -100 103 489 -100 -5 376 -100 0 375 -100 0 309 -100 criticalmass-1.0.0.orig/data/paths/attack/ac2.path0000644000175000017500000000017607630537344021240 0ustar danieldaniel16 3 0 651 -100 0 548 -100 -87 493 -100 54 440 -100 195 386 -100 121 595 -100 233 553 -100 344 511 -100 0 386 -100 0 297 -100 criticalmass-1.0.0.orig/data/paths/attack/ac3.path0000644000175000017500000000013007630537344021227 0ustar danieldaniel16 2 0 651 -100 0 548 -100 -134 378 -100 31 433 -100 196 489 -100 0 290 -100 0 214 -100 criticalmass-1.0.0.orig/data/paths/attack/ac4.path0000644000175000017500000000020107630537344021227 0ustar danieldaniel16 3 0 651 -100 0 548 -100 -138 392 -100 53 432 -100 244 473 -100 -74 649 -100 -151 559 -100 -229 469 -100 0 402 -100 0 283 -100 criticalmass-1.0.0.orig/data/paths/attack/ac5.path0000644000175000017500000000017707630537344021244 0ustar danieldaniel16 3 0 651 -100 0 574 -100 117 483 -100 56 423 -100 -6 364 -100 -78 582 -100 -109 471 -100 -140 359 -100 0 355 -100 0 237 -100 criticalmass-1.0.0.orig/data/paths/attack/ac6.path0000644000175000017500000000017507630537344021243 0ustar danieldaniel16 3 0 651 -100 0 570 -100 -21 317 -100 22 259 -100 64 201 -100 159 213 -100 163 279 -100 166 345 -100 0 684 -100 0 405 -100 criticalmass-1.0.0.orig/data/paths/attack/ac7.path0000644000175000017500000000012507630537344021237 0ustar danieldaniel16 2 0 626 -100 0 572 -100 -91 463 -100 0 389 -100 91 316 -100 0 213 -100 0 165 -100 criticalmass-1.0.0.orig/data/paths/attack/ac8.path0000644000175000017500000000013007630537344021234 0ustar danieldaniel16 2 0 625 -100 0 523 -100 -128 193 -100 39 339 -100 206 486 -100 0 220 -100 0 104 -100 criticalmass-1.0.0.orig/data/paths/attack/ac9.path0000644000175000017500000000013007630537344021235 0ustar danieldaniel16 2 0 625 -100 0 586 -100 -171 605 -100 -87 546 -100 -2 487 -100 0 215 -100 0 178 -100 criticalmass-1.0.0.orig/data/paths/attack/ac7a.path0000644000175000017500000000012507630537344021400 0ustar danieldaniel16 2 0 626 -100 0 572 -100 91 463 -100 0 389 -100 -91 316 -100 0 213 -100 0 165 -100 criticalmass-1.0.0.orig/data/paths/attack/ac13a.path0000644000175000017500000000034510311150467021444 0ustar danieldaniel16 3 -0.000000 628.000000 -0.000000 522.000000 65.000000 665.000000 120.000000 640.000000 176.000000 615.000000 170.000000 533.000000 102.000000 522.000000 35.000000 511.000000 -0.000000 658.000000 -0.000000 446.000000 criticalmass-1.0.0.orig/data/paths/attack/ac1a.path0000644000175000017500000000020107630537344021365 0ustar danieldaniel16 3 0 651 -100 0 556 -100 -53 383 -100 -152 376 -100 -252 369 -100 -211 603 -100 -103 489 -100 5 376 -100 0 375 -100 0 309 -100 criticalmass-1.0.0.orig/data/paths/attack/ac8a.path0000644000175000017500000000013107630537344021376 0ustar danieldaniel16 2 0 625 -100 0 523 -100 128 193 -100 -39 339 -100 -206 486 -100 0 220 -100 0 104 -100 criticalmass-1.0.0.orig/data/paths/LB_Entry1.path0000644000175000017500000000020307630537344021052 0ustar danieldaniel16 3 -11 262 -100 71 183 -100 164 237 -100 164 319 -100 165 393 -100 66 394 -100 65 319 -100 64 245 -100 218 207 -100 264 343 -100 criticalmass-1.0.0.orig/data/paths/Retreat1.path0000644000175000017500000000024207630537344021005 0ustar danieldaniel16 4 0 212 -100 -1 168 -100 3 114 -100 75 156 -100 148 199 -100 149 266 -100 140 312 -100 130 358 -100 80 448 -100 49 466 -100 18 483 -100 2 449 -100 -1 395 -100 criticalmass-1.0.0.orig/data/paths/Retreat2.path0000644000175000017500000000020107630537344021001 0ustar danieldaniel16 3 0 212 -100 0 166 -100 26 120 -100 77 148 -100 126 176 -100 109 394 -100 143 463 -100 177 533 -100 226 424 -100 227 372 -100 criticalmass-1.0.0.orig/data/paths/Retreat3.path0000644000175000017500000000062407630537344021013 0ustar danieldaniel16 10 0 212 -100 2 154 -100 -71 145 -100 2 131 -100 75 118 -100 158 145 -100 159 201 -100 161 256 -100 116 309 -100 65 310 -100 14 312 -100 -159 260 -100 -265 302 -100 -369 344 -100 -347 443 -100 -311 492 -100 -275 539 -100 -135 652 -100 130 556 -100 395 459 -100 214 438 -100 315 358 -100 416 279 -100 224 172 -100 169 317 -100 115 462 -100 -10 334 -100 -88 390 -100 -167 446 -100 1 494 -100 0 605 -100 criticalmass-1.0.0.orig/data/paths/RB_Entry1.path0000644000175000017500000000021307630537344021061 0ustar danieldaniel16 3 11 262 -100 -71 183 -100 -164 237 -100 -164 319 -100 -165 393 -100 -66 394 -100 -65 319 -100 -64 245 -100 -218 207 -100 -264 343 -100 criticalmass-1.0.0.orig/data/paths/RT-LongEntry1.path0000644000175000017500000000025407630537344021646 0ustar danieldaniel16 6 -1 598 -102 580 12 373 -153 363 -318 351 -300 191 -423 175 -546 158 -752 189 -670 302 -588 414 -628 385 -666 512 -703 639 -578 504 -496 581 -413 657 -342 545 -325 475 criticalmass-1.0.0.orig/data/paths/LT-LongEntry1.path0000644000175000017500000000037207630537344021641 0ustar danieldaniel16 6 1 598 -100 102 580 -100 -12 373 -100 153 363 -100 318 351 -100 300 191 -100 423 175 -100 546 158 -100 752 189 -100 670 302 -100 588 414 -100 628 385 -100 666 512 -100 703 639 -100 578 504 -100 496 581 -100 413 657 -100 342 545 -100 325 475 -100 criticalmass-1.0.0.orig/data/paths/LT_Entry1.path0000644000175000017500000000020307630537344021074 0ustar danieldaniel16 3 -11 506 -100 71 585 -100 164 531 -100 164 449 -100 165 375 -100 66 374 -100 65 449 -100 64 523 -100 218 561 -100 264 425 -100 criticalmass-1.0.0.orig/data/paths/Attack1.path0000644000175000017500000000017607630537344020614 0ustar danieldaniel16 3 1 648 -100 0 601 -100 37 564 -100 37 510 -100 38 456 -100 -32 422 -100 -33 371 -100 -34 318 -100 38 290 -100 39 241 -100 criticalmass-1.0.0.orig/data/paths/Attack2.path0000644000175000017500000000024507630537344020612 0ustar danieldaniel16 4 1 648 -100 0 590 -100 16 500 -100 52 455 -100 86 410 -100 160 366 -100 239 398 -100 318 429 -100 353 553 -100 243 555 -100 133 556 -100 87 377 -100 86 296 -100 criticalmass-1.0.0.orig/data/Makefile.am0000644000175000017500000000010107630537344017347 0ustar danieldanielSUBDIRS = music MAINTAINERCLEANFILES = Makefile.bak Makefile.in criticalmass-1.0.0.orig/data/Makefile.in0000644000175000017500000003272310355431312017361 0ustar danieldaniel# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = data DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/defines.h CONFIG_CLEAN_FILES = depcomp = am__depfiles_maybe = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-exec-recursive install-info-recursive \ install-recursive installcheck-recursive installdirs-recursive \ pdf-recursive ps-recursive uninstall-info-recursive \ uninstall-recursive ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ APPLE_FALSE = @APPLE_FALSE@ APPLE_TRUE = @APPLE_TRUE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EXEEXT = @EXEEXT@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_LZMA_FALSE = @USE_LZMA_FALSE@ USE_LZMA_TRUE = @USE_LZMA_TRUE@ VERSION = @VERSION@ WIN32_FALSE = @WIN32_FALSE@ WIN32_TRUE = @WIN32_TRUE@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ SUBDIRS = music MAINTAINERCLEANFILES = Makefile.bak Makefile.in all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps data/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign --ignore-deps data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh uninstall-info-am: # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" mostlyclean-recursive clean-recursive distclean-recursive \ maintainer-clean-recursive: @set fnord $$MAKEFLAGS; amf=$$2; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(mkdir_p) "$(distdir)/$$subdir" \ || exit 1; \ distdir=`$(am__cd) $(distdir) && pwd`; \ top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ (cd $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$top_distdir" \ distdir="$$distdir/$$subdir" \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive info: info-recursive info-am: install-data-am: install-exec-am: install-info: install-info-recursive install-man: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-info-am uninstall-info: uninstall-info-recursive .PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am \ clean clean-generic clean-recursive ctags ctags-recursive \ distclean distclean-generic distclean-recursive distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-exec \ install-exec-am install-info install-info-am install-man \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ maintainer-clean-recursive mostlyclean mostlyclean-generic \ mostlyclean-recursive pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: criticalmass-1.0.0.orig/data/models/0002755000175000017500000000000010355431300016567 5ustar danieldanielcriticalmass-1.0.0.orig/data/models/Bug2.model0000644000175000017500000002752507630537344020442 0ustar danieldanielName Bug2 Scale 1.0 1.0 1.0 Colors 5 0.882352948189 0.874509811401 0.878431379795 1.0 1.0 0.0676691755652 0.45864662528 0.3533834517 0.90977448225 1.0 1.0 1.0 0.0 0.443609029055 0.759398519993 Vertices 112 0.536730065742 1.12977308495 -3.4999999404 1.42764129592 0.698189324171 -3.4999999404 2.95582594606 -0.000131663625447 -3.4999999404 2.38851941333 -1.16386189863 -3.4999999404 0.903522833696 -1.88303655755 -3.4999999404 -0.931944211348 -1.88295511377 -3.4999999404 -2.41679642853 -1.1636491935 -3.4999999404 -2.98387131378 0.000131888091646 -3.4999999404 -1.45554764176 0.698317497997 -3.4999999404 -0.564549460334 1.12982215149 -3.4999999404 2.08597711349 1.40000030994 0.289949471781 1.70714001133 1.40000030994 0.214594026726 1.38597712541 0.700000238419 -0.700000071526 1.4392617219 0.753284584568 -0.321162719026 1.59100250873 0.905025538291 -4.17232506322e-08 1.81809882406 1.13212185362 0.214594026726 2.08597711349 1.02116304089 0.214594026726 2.08597711349 0.700000321865 -4.17232506322e-08 2.08597711349 0.485406378586 -0.321162719026 2.08597711349 0.41005093353 -0.700000071526 2.78597710156 0.700000488758 -0.700000071526 2.73269283886 0.753284834908 -0.321162719026 2.58095171825 0.905025705184 -4.17232506322e-08 2.35385540291 1.13212193707 0.214594026726 2.46481421565 1.40000030994 0.214594026726 2.78597710156 1.40000047684 -4.17232506322e-08 3.00057129518 1.40000047684 -0.321162719026 3.07592615611 1.40000047684 -0.700000071526 2.78597676778 2.10000029802 -0.700000071526 2.73269250508 2.04671603532 -0.321162719026 2.58095171825 1.8949750816 -4.17232506322e-08 2.35385540291 1.66787876627 0.214594026726 2.08597711349 1.778837579 0.214594026726 2.08597711349 2.10000029802 -4.17232506322e-08 2.08597711349 2.31459432475 -0.321162719026 2.08597711349 2.38994968636 -0.700000071526 1.38597712541 2.10000013113 -0.700000071526 1.43926138811 2.04671570153 -0.321162719026 1.59100250873 1.8949749147 -4.17232506322e-08 1.81809882406 1.66787859937 0.214594026726 1.38597712541 1.40000014305 -4.17232506322e-08 1.17138309868 1.40000014305 -0.321162719026 1.09602790397 1.40000014305 -0.700000071526 0.388992374471 6.08536158648e-08 -2.44999995828 0.475977174282 0.210000067353 -2.44999995828 0.685977137328 0.296984929749 -2.44999995828 0.89597693348 0.210000129938 -2.44999995828 0.982961900184 1.50540533917e-07 -2.44999995828 0.895977267266 -0.209999837875 -2.44999995828 0.685977137328 -0.296984721133 -2.44999995828 0.475977174282 -0.20999990046 -2.44999995828 -2.11402281499 1.39999997616 0.289949471781 -1.73518554594 1.39999997616 0.214594026726 -1.41402282691 2.09999996424 -0.700000071526 -1.46730725651 2.04671553464 -0.321162719026 -1.61904804334 1.89497474781 -4.17232506322e-08 -1.84614435867 1.66787843248 0.214594026726 -2.11402281499 1.77883724521 0.214594026726 -2.11402281499 2.09999996424 -4.17232506322e-08 -2.11402281499 2.31459399096 -0.321162719026 -2.11402281499 2.38994935257 -0.700000071526 -2.81402263617 2.09999996424 -0.700000071526 -2.76073837347 2.04671553464 -0.321162719026 -2.60899758664 1.89497458092 -4.17232506322e-08 -2.38190127131 1.66787843248 0.214594026726 -2.49286008404 1.39999997616 0.214594026726 -2.81402263617 1.39999997616 -4.17232506322e-08 -3.0286166629 1.39999997616 -0.321162719026 -3.1039721914 1.39999997616 -0.700000071526 -2.81402263617 0.700000071526 -0.700000071526 -2.76073837347 0.753284417675 -0.321162719026 -2.60899758664 0.905025287951 -4.17232506322e-08 -2.38190127131 1.13212160328 0.214594026726 -2.11402281499 1.0211627071 0.214594026726 -2.11402281499 0.700000071526 -4.17232506322e-08 -2.11402281499 0.4854060448 -0.321162719026 -2.11402281499 0.410050599744 -0.700000071526 -1.4140229938 0.700000071526 -0.700000071526 -1.46730725651 0.753284417675 -0.321162719026 -1.61904804334 0.905025287951 -4.17232506322e-08 -1.84614435867 1.13212160328 0.214594026726 -1.4140229938 1.39999997616 -4.17232506322e-08 -1.19942888363 1.39999997616 -0.321162719026 -1.12407343858 1.39999997616 -0.700000071526 -0.417038075974 0.0 -2.44999995828 -0.504022875785 -0.209999983907 -2.44999995828 -0.714022838831 -0.296984825441 -2.44999995828 -0.924022801876 -0.209999983907 -2.44999995828 -1.01100768513 0.0 -2.44999995828 -0.924022801876 0.209999983907 -2.44999995828 -0.714022838831 0.296984825441 -2.44999995828 -0.504022875785 0.209999983907 -2.44999995828 -0.454444138417 0.903857704506 -5.17999997854 -1.16724273363 0.558654006743 -5.17999997854 -2.38990145428 0.00010551047128 -5.17999997854 -1.93624171297 -0.930919404866 -5.17999997854 -0.748359989296 -1.50636405764 -5.17999997854 0.720013630049 -1.5064293128 -5.17999997854 1.90801109403 -0.931089552282 -5.17999997854 2.36185591967 -0.00010533090647 -5.17999997854 1.1393086001 0.558551450992 -5.17999997854 0.426579515822 0.90381848465 -5.17999997854 0.0300374025952 0.0903818547235 -6.2579995997 0.101310227576 0.0558551450992 -6.2579995997 0.223565026291 -1.05330905197e-05 -6.2579995997 0.178180476969 -0.0931089594005 -6.2579995997 0.0593808640858 -0.150642933366 -6.2579995997 -0.0874566063292 -0.150636403678 -6.2579995997 -0.206244703595 -0.0930919467451 -6.2579995997 -0.251610727794 1.0551047128e-05 -6.2579995997 -0.129344914141 0.0558654038035 -6.2579995997 -0.0580649127609 0.090385776709 -6.2579995997 Normals 112 0.14362315291 0.665221113559 0.163811145913 0.300299070132 0.60995512162 0.166609691226 -0.644605822314 -0.184084588135 -0.201431321648 -0.478615669206 0.45782952125 -0.226468693334 -0.147618028988 0.641401393219 -0.238303785438 0.147682115901 0.641401393219 -0.238303785438 -0.478679756119 -0.457765434337 0.226468693334 -0.64458446001 0.184170037352 0.201431321648 -0.300234983219 0.609976483924 0.166609691226 -0.143559065997 0.665221113559 0.163832508218 0.0 0.0 0.699999988079 -0.29579149875 0.0 0.634415711089 -0.448173467633 -0.448173467633 0.297073278732 -0.460457168129 -0.460457168129 0.256740017333 -0.36114076953 -0.36114076953 0.478679756119 -0.209164705291 -0.209164705291 0.634415711089 0.0 -0.29579149875 0.634415711089 0.0 -0.510724213962 0.478679756119 0.0 -0.651206982967 0.256740017333 0.0623798322485 -0.679085666297 0.157936334901 0.525656881917 -0.449433885312 -0.108032469102 0.460457168129 -0.460457168129 0.256740017333 0.36114076953 -0.36114076953 0.478679756119 0.209164705291 -0.209164705291 0.634415711089 0.29579149875 0.0 0.634415711089 0.510724213962 0.0 0.478679756119 0.651206982967 0.0 0.256740017333 0.665071535705 0.0217261271577 -0.217239906665 0.464494768815 0.464494768815 -0.24182866996 0.460457168129 0.460457168129 0.256740017333 0.36114076953 0.36114076953 0.478679756119 0.209164705291 0.209164705291 0.634415711089 0.0 0.29579149875 0.634415711089 0.0 0.510724213962 0.478679756119 0.0 0.651206982967 0.256740017333 0.0217261271577 0.665071535705 -0.217239906665 -0.449433885312 0.525656881917 -0.108032469102 -0.460457168129 0.460457168129 0.256740017333 -0.36114076953 0.36114076953 0.478679756119 -0.209164705291 0.209164705291 0.634415711089 -0.510724213962 0.0 0.478679756119 -0.651206982967 0.0 0.256740017333 -0.679085666297 0.0623798322485 0.157936334901 -0.288592172715 -0.0395428326697 0.636487938055 -0.335248863948 0.214719071308 -0.575753029317 0.0412305068654 0.684170019896 -0.142106387579 0.0137577438247 -0.152339244275 -0.683080542376 0.100491346198 -0.158214055288 -0.674428517062 0.361931216514 -0.492907509754 0.340610969227 0.0136082037829 -0.478167060815 0.511023286223 -0.174748979513 -0.174748979513 0.654902786784 0.0 0.0 0.699999988079 0.29579149875 0.0 0.634415711089 0.449433885312 0.525656881917 -0.108032469102 0.460457168129 0.460457168129 0.256740017333 0.36114076953 0.36114076953 0.478679756119 0.209164705291 0.209164705291 0.634415711089 0.0 0.29579149875 0.634415711089 0.0 0.510724213962 0.478679756119 0.0 0.651206982967 0.256740017333 -0.0217261271577 0.665071535705 -0.217239906665 -0.464494768815 0.464494768815 -0.24182866996 -0.460457168129 0.460457168129 0.256740017333 -0.36114076953 0.36114076953 0.478679756119 -0.209164705291 0.209164705291 0.634415711089 -0.29579149875 0.0 0.634415711089 -0.510724213962 0.0 0.478679756119 -0.651206982967 0.0 0.256740017333 -0.665071535705 0.0217261271577 -0.217239906665 -0.525656881917 -0.449433885312 -0.108032469102 -0.460457168129 -0.460457168129 0.256740017333 -0.36114076953 -0.36114076953 0.478679756119 -0.209164705291 -0.209164705291 0.634415711089 0.0 -0.29579149875 0.634415711089 0.0 -0.510724213962 0.478679756119 0.0 -0.651206982967 0.256740017333 -0.0623798322485 -0.679085666297 0.157936334901 0.448173467633 -0.448173467633 0.297073278732 0.460457168129 -0.460457168129 0.256740017333 0.36114076953 -0.36114076953 0.478679756119 0.209164705291 -0.209164705291 0.634415711089 0.510724213962 0.0 0.478679756119 0.651206982967 0.0 0.256740017333 0.679085666297 0.0623798322485 0.157936334901 0.288592172715 -0.0395428326697 0.636487938055 0.174748979513 -0.174748979513 0.654902786784 -0.0136082037829 -0.478167060815 0.511023286223 -0.361931216514 -0.492907509754 0.340610969227 -0.100491346198 -0.158214055288 -0.674428517062 -0.0137791074328 -0.152339244275 -0.683059180071 -0.0412091419533 0.684170019896 -0.142106387579 0.335248863948 0.214719071308 -0.575753029317 -0.146998501301 0.627365942046 -0.273445839994 -0.271416358498 0.578444763108 -0.285879076619 -0.534992500969 0.209955131412 -0.399594085564 0.401068126286 0.403396700903 0.40792563459 0.133753465818 0.576500751691 0.373808991504 -0.13371074121 0.576522113996 0.373787629199 -0.401004039373 0.403439425512 0.407904272285 -0.535013863274 -0.209869682195 0.399594085564 -0.271480445411 -0.578402038499 0.285879076619 0.147062588214 0.627344579742 -0.273445839994 0.0669087815811 0.327301857262 -0.615124966159 0.126511425606 0.266481520168 -0.634800232567 -0.220358886542 -0.176885282961 0.640418685497 -0.146143988266 0.172783595361 0.662379801914 -0.0475112146989 0.242042293003 0.655095047523 0.0475325770032 0.242042293003 0.655095047523 -0.146165350571 -0.172762222626 -0.662401164218 -0.220337524238 0.17692800757 -0.640418685497 -0.126490063301 0.266502882472 -0.634800232567 -0.0668660517571 0.327301857262 -0.615124966159 Faces 118 42 12 13 41 0 0 41 13 14 40 0 0 40 14 15 11 0 3 15 10 11 0 0 4 16 10 15 0 0 4 14 17 16 15 0 3 13 18 17 14 0 0 12 19 18 13 0 0 19 20 21 18 0 0 18 21 22 17 0 0 17 22 23 16 0 3 23 10 16 0 0 4 24 10 23 0 0 4 22 25 24 23 0 3 21 26 25 22 0 0 20 27 26 21 0 0 27 28 29 26 0 0 26 29 30 25 0 0 25 30 31 24 0 3 31 10 24 0 0 4 32 10 31 0 0 4 30 33 32 31 0 3 29 34 33 30 0 0 28 35 34 29 0 0 35 36 37 34 0 0 34 37 38 33 0 0 33 38 39 32 0 3 39 10 32 0 0 4 11 10 39 0 0 4 38 40 11 39 0 3 37 41 40 38 0 0 36 42 41 37 0 0 42 36 44 43 0 1 36 35 45 44 0 1 35 28 46 45 0 1 28 27 47 46 0 1 27 20 48 47 0 1 20 19 49 48 0 1 19 12 50 49 0 1 12 42 43 50 0 1 83 53 54 82 0 0 82 54 55 81 0 0 81 55 56 52 0 3 56 51 52 0 0 4 57 51 56 0 0 4 55 58 57 56 0 3 54 59 58 55 0 0 53 60 59 54 0 0 60 61 62 59 0 0 59 62 63 58 0 0 58 63 64 57 0 3 64 51 57 0 0 4 65 51 64 0 0 4 63 66 65 64 0 3 62 67 66 63 0 0 61 68 67 62 0 0 68 69 70 67 0 0 67 70 71 66 0 0 66 71 72 65 0 3 72 51 65 0 0 4 73 51 72 0 0 4 71 74 73 72 0 3 70 75 74 71 0 0 69 76 75 70 0 0 76 77 78 75 0 0 75 78 79 74 0 0 74 79 80 73 0 3 80 51 73 0 0 4 52 51 80 0 0 4 79 81 52 80 0 3 78 82 81 79 0 0 77 83 82 78 0 0 83 77 85 84 0 1 77 76 86 85 0 1 76 69 87 86 0 1 69 68 88 87 0 1 68 61 89 88 0 1 61 60 90 89 0 1 60 53 91 90 0 1 53 83 84 91 0 1 43 84 85 50 0 2 49 50 85 86 0 2 43 44 91 84 0 2 44 45 90 91 0 2 0 9 90 45 0 2 0 45 46 1 0 2 1 2 47 46 0 2 2 3 48 47 0 2 3 4 49 48 0 2 8 89 90 9 0 2 7 88 89 8 0 2 4 5 86 49 0 2 6 87 88 7 0 2 5 6 87 86 0 2 6 5 96 95 0 2 6 7 94 95 0 2 5 4 97 96 0 2 7 8 93 94 0 2 8 9 92 93 0 2 4 3 98 97 0 2 3 2 99 98 0 2 2 1 100 99 0 2 0 1 100 101 0 2 9 0 101 92 0 2 92 101 102 111 0 2 101 100 103 102 0 2 99 100 103 104 0 2 98 99 104 105 0 2 97 98 105 106 0 2 93 92 111 110 0 2 94 93 110 109 0 2 96 97 106 107 0 2 95 94 109 108 0 2 95 96 107 108 0 2 102 103 110 111 0 2 103 110 109 104 0 2 104 109 108 105 0 2 105 108 107 106 0 2 criticalmass-1.0.0.orig/data/models/SuperBonus.model0000644000175000017500000027033207630537344021744 0ustar danieldanielName SuperBonus Scale 1.0 1.0 1.0 Colors 3 0.338345825672 0.213533908129 0.578947365284 1.0 1.0 0.403984934092 0.243609040976 0.634586513042 0.721804499626 Vertices 852 0.0 0.820243954659 -2.0 0.59352850914 0.366825342178 -2.43121862411 -0.226703107357 0.366825342178 -2.69773221016 -0.733646571636 0.366825371981 -2.0 -0.226703107357 0.366825371981 -1.30226767063 0.59352850914 0.366825401783 -1.56878137589 0.226703107357 -0.366825371981 -2.69773221016 -0.59352850914 -0.366825401783 -2.43121862411 -0.59352850914 -0.366825342178 -1.56878137589 0.226703107357 -0.366825342178 -1.30226778984 0.733646571636 -0.366825371981 -2.0 0.0 -0.820243954659 -2.0 0.348868370056 0.697743952274 -2.25346469879 -0.13325317204 0.697744011879 -2.41011810303 0.215616554022 0.431233108044 -2.66358685493 0.348868370056 0.69774389267 -1.74653530121 0.697738707066 0.431231617928 -2.0 -0.43122664094 0.697741806507 -2.0 -0.564483106136 0.431231886148 -2.41011953354 -0.13325317204 0.697744011879 -1.58988189697 -0.564483106136 0.431231945753 -1.58988058567 0.215616554022 0.431233108044 -1.33641314507 0.780099391937 -1.28136783156e-15 -1.74653422832 0.780099391937 1.28136783156e-15 -2.25346565247 0.482127577066 -7.47654806718e-18 -2.66359090805 0.0 -5.25804172338e-16 -2.82024383545 -0.482127577066 -7.47654806718e-18 -2.66359090805 -0.780099391937 1.28136783156e-15 -2.25346565247 -0.780099391937 -1.28136783156e-15 -1.74653422832 -0.482127577066 7.47654806718e-18 -1.33640897274 0.0 5.25804172338e-16 -1.17975604534 0.482127577066 7.47654806718e-18 -1.33640897274 0.564483106136 -0.431231945753 -2.41011929512 -0.215616554022 -0.431233108044 -2.66358685493 -0.697738707066 -0.431231617928 -2.0 -0.215616554022 -0.431233108044 -1.33641314507 0.564483106136 -0.431231886148 -1.58988058567 0.43122664094 -0.697741806507 -2.0 0.13325317204 -0.697744011879 -2.41011810303 -0.348868370056 -0.69774389267 -2.25346469879 -0.348868370056 -0.697743952274 -1.74653530121 0.13325317204 -0.697744011879 -1.58988189697 0.0 0.81967830658 2.0 0.593119204044 0.366572380066 1.56907880306 -0.226546764374 0.366572380066 1.30274891853 -0.733140647411 0.366572409868 2.0 -0.226546764374 0.366572409868 2.69725108147 0.593119204044 0.366572439671 2.43092131615 0.226546764374 -0.366572409868 1.30274891853 -0.593119204044 -0.366572439671 1.56907880306 -0.593119204044 -0.366572380066 2.43092131615 0.226546764374 -0.366572380066 2.69725108147 0.733140647411 -0.366572409868 2.0 0.0 -0.81967830658 2.0 0.34862780571 0.697262763977 1.74671006203 -0.13316129148 0.697262883186 1.59016478062 0.215467870235 0.430935740471 1.33687078953 0.34862780571 0.697262763977 2.25328993797 0.697257518768 0.430934220552 2.0 -0.430929273367 0.69726061821 2.0 -0.564093828201 0.430934518576 1.59016335011 -0.13316129148 0.697262823582 2.40983533859 -0.564093828201 0.430934548378 2.40983653069 0.215467870235 0.430935710669 2.66312932968 0.779561460018 -1.75861658135e-15 2.25329089165 0.779561460018 1.75861658135e-15 1.74670898914 0.481795102358 1.24431257534e-15 1.3368666172 0.0 1.02184911262e-15 1.18032169342 -0.481795102358 1.24431257534e-15 1.3368666172 -0.779561460018 1.75861658135e-15 1.74670898914 -0.779561460018 -1.75861658135e-15 2.25329089165 -0.481795102358 -1.24431257534e-15 2.6631333828 0.0 -1.02184911262e-15 2.81967830658 0.481795102358 -1.24431257534e-15 2.6631333828 0.564093828201 -0.430934548378 1.59016346931 -0.215467870235 -0.430935710669 1.33687067032 -0.697257518768 -0.430934220552 2.0 -0.215467870235 -0.430935740471 2.66312932968 0.564093828201 -0.430934518576 2.40983653069 0.430929273367 -0.69726061821 2.0 0.13316129148 -0.697262823582 1.59016478062 -0.34862780571 -0.697262763977 1.74671006203 -0.34862780571 -0.697262763977 2.25328993797 0.13316129148 -0.697262883186 2.40983533859 -1.516051054 -1.31066000462 -0.844974815845 -0.960630178452 -1.63731467724 -0.549290239811 -0.522453904152 -1.79649496078 -0.405201941729 -0.222511440516 -1.84712433815 -0.359372526407 4.31837143822e-08 -1.85355305672 -0.353553384542 0.222511515021 -1.84712445736 -0.35937255621 0.522453963757 -1.79649484158 -0.405201941729 0.960630178452 -1.63731467724 -0.549290299416 1.51605117321 -1.31066000462 -0.844974756241 2.00393939018 -0.878821313381 -1.2307446003 2.2929880619 -0.500867247581 -1.54146981239 2.4186770916 -0.22007933259 -1.72105836868 2.44945955276 3.94584240837e-08 -1.77932727337 2.4186770916 0.220079362392 -1.72105836868 2.2929880619 0.500867247581 -1.5414699316 2.00393915176 0.878821313381 -1.23074471951 1.51605093479 1.31066000462 -0.844974815845 0.960630178452 1.63731467724 -0.549290239811 0.522453963757 1.79649507999 -0.405201941729 0.22251150012 1.84712433815 -0.359372526407 4.24979624825e-08 1.85355317593 -0.353553414345 -0.222511395812 1.84712457657 -0.35937255621 -0.522453844547 1.79649496078 -0.405201941729 -0.960630178452 1.63731467724 -0.549290299416 -1.51605117321 1.31066000462 -0.844974756241 -2.00393939018 0.878821253777 -1.23074471951 -2.29298830032 0.500867187977 -1.5414699316 -2.41867756844 0.220079302788 -1.72105836868 -2.4494600296 1.26956400948e-08 -1.77932727337 -2.41867756844 -0.220079287887 -1.72105836868 -2.29298830032 -0.500867187977 -1.5414699316 -2.0039396286 -0.878821253777 -1.23074471951 -1.65555846691 -1.38627386093 -0.455503106117 -1.03677988052 -1.73177373409 -0.30186778307 -0.558064937592 -1.90013730526 -0.227000683546 -0.235964730382 -1.95368778706 -0.203188106418 2.38608066638e-08 -1.96048724651 -0.2001645118 0.235964804888 -1.95368778706 -0.203188121319 0.558064877987 -1.90013730526 -0.227000683546 1.03677976131 -1.7317738533 -0.301867842674 1.6555583477 -1.38627386093 -0.455503106117 2.21244859695 -0.929521739483 -0.655946016312 2.55108046532 -0.529762983322 -0.817396402359 2.70304012299 -0.232776030898 -0.910709142685 2.74176931381 3.13113872608e-08 -0.940985143185 2.70304012299 0.232776030898 -0.910709142685 2.55108070374 0.529762983322 -0.817396342754 2.21244835854 0.929521739483 -0.655946016312 1.65555822849 1.38627398014 -0.455503106117 1.03677988052 1.73177373409 -0.30186778307 0.558064877987 1.90013730526 -0.227000683546 0.235964819789 1.95368778706 -0.203188121319 4.31944187085e-08 1.96048724651 -0.2001645118 -0.23596470058 1.95368778706 -0.203188121319 -0.558064818382 1.90013730526 -0.227000698447 -1.03677976131 1.7317738533 -0.301867872477 -1.65555846691 1.38627374172 -0.455503106117 -2.21244883537 0.929521679878 -0.655946016312 -2.55108094215 0.529762983322 -0.817396342754 -2.70304059982 0.232776001096 -0.91070908308 -2.74176979065 1.33920963208e-08 -0.940985143185 -2.7030403614 -0.232776001096 -0.910709023476 -2.55108118057 -0.529762923717 -0.817396342754 -2.21244859695 -0.929521739483 -0.655946016312 -1.70158052444 -1.41121828556 -0.180540770292 -1.06190097332 -1.76293492317 -0.121315658092 -0.569812655449 -1.93432796001 -0.0924550071359 -0.240402847528 -1.98884212971 -0.0832754597068 5.40532774096e-08 -1.99576401711 -0.0821098983288 0.240402907133 -1.98884212971 -0.0832754671574 0.569812655449 -1.93432796001 -0.0924549996853 1.06190097332 -1.76293492317 -0.121315672994 1.70158040524 -1.41121816635 -0.180540785193 2.28123378754 -0.946247339249 -0.257809817791 2.63622283936 -0.539295494556 -0.320047557354 2.79684901237 -0.23696449399 -0.356018811464 2.83819937706 1.70332050686e-08 -0.367689996958 2.79684853554 0.236964568496 -0.356018811464 2.63622283936 0.539295494556 -0.320047527552 2.28123354912 0.946247398853 -0.257809817791 1.70158040524 1.41121828556 -0.180540770292 1.06190085411 1.76293492317 -0.121315672994 0.569812715054 1.93432796001 -0.0924550071359 0.240402877331 1.98884212971 -0.0832754746079 5.74726009006e-08 1.99576413631 -0.0821098983288 -0.240402817726 1.9888420105 -0.0832754671574 -0.569812655449 1.93432796001 -0.0924550071359 -1.06190097332 1.76293492317 -0.121315672994 -1.70158064365 1.41121816635 -0.180540785193 -2.28123426437 0.946247279644 -0.257809817791 -2.63622331619 0.539295494556 -0.320047616959 -2.79684948921 0.236964553595 -0.356018811464 -2.83820009232 -2.13204454091e-09 -0.367689996958 -2.79684925079 -0.236964538693 -0.356018811464 -2.63622307777 -0.539295434952 -0.320047527552 -2.28123402596 -0.946247398853 -0.257809817791 -1.70710670948 -1.41421329975 -9.31322574615e-10 -1.06491744518 -1.76667642593 0.0 -0.571223139763 -1.93843352795 0.0 -0.240935787559 -1.99306333065 0.0 2.93885840108e-08 -1.99999964237 0.0 0.240935787559 -1.99306309223 1.45519152284e-11 0.571223258972 -1.93843340874 2.32830643654e-10 1.06491732597 -1.76667654514 9.31322574615e-10 1.70710635185 -1.41421329975 -1.86264514923e-09 2.28949332237 -0.94825565815 0.0 2.64644598961 -0.540440022945 -1.86264514923e-09 2.80811262131 -0.237467482686 -3.72529029846e-09 2.84977817535 1.4487422817e-08 0.0 2.80811262131 0.237467497587 -3.72529029846e-09 2.64644598961 0.540440142155 -1.86264514923e-09 2.28949308395 0.948255598545 0.0 1.70710635185 1.41421341896 -9.31322574615e-10 1.06491732597 1.76667642593 0.0 0.571223199368 1.93843352795 0.0 0.240935847163 1.99306321144 0.0 4.51172219584e-08 1.99999964237 0.0 -0.240935742855 1.99306297302 -2.91038304567e-11 -0.571223199368 1.93843340874 0.0 -1.06491732597 1.76667654514 -4.65661287308e-10 -1.70710670948 1.41421329975 -9.31322574615e-10 -2.28949379921 0.948255598545 1.86264514923e-09 -2.64644646645 0.540439963341 -1.86264514923e-09 -2.80811333656 0.237467497587 -3.72529029846e-09 -2.84977889061 1.53148995707e-08 -3.72529029846e-09 -2.80811333656 -0.237467437983 -3.72529029846e-09 -2.64644646645 -0.54044008255 -1.86264514923e-09 -2.28949356079 -0.948255598545 0.0 -1.70158064365 -1.41121828556 0.180540889502 -1.06190097332 -1.76293480396 0.121315762401 -0.569812655449 -1.93432784081 0.0924550816417 -0.240402847528 -1.98884212971 0.0832755416632 3.35858203471e-08 -1.9957638979 0.0821099504828 0.240402892232 -1.98884212971 0.083275526762 0.569812595844 -1.9343277216 0.0924550816417 1.06190085411 -1.76293492317 0.12131575495 1.70158028603 -1.41121816635 0.180540904403 2.28123378754 -0.946247339249 0.25781005621 2.63622260094 -0.539295494556 0.320047855377 2.79684877396 -0.236964523792 0.356019169092 2.83819913864 -1.71712599695e-09 0.367690265179 2.79684853554 0.236964568496 0.35601913929 2.63622260094 0.539295494556 0.320047825575 2.28123378754 0.946247458458 0.257810026407 1.70158040524 1.41121828556 0.180540889502 1.06190085411 1.76293492317 0.121315769851 0.569812715054 1.93432784081 0.0924550816417 0.240402907133 1.98884212971 0.0832755491138 7.63746399457e-08 1.99576377869 0.0821099579334 -0.240402817726 1.98884212971 0.0832755416632 -0.569812595844 1.93432796001 0.0924550890923 -1.06190097332 1.76293492317 0.121315777302 -1.70158052444 1.41121816635 0.180540919304 -2.28123426437 0.946247339249 0.25781005621 -2.63622307777 0.539295494556 0.32004788518 -2.79684948921 0.236964553595 0.356019169092 -2.8381998539 3.81878972888e-09 0.367690265179 -2.79684925079 -0.236964508891 0.356019109488 -2.63622307777 -0.539295434952 0.320047825575 -2.28123426437 -0.946247458458 0.257810026407 -1.6555583477 -1.38627386093 0.455502837896 -1.03677999973 -1.73177373409 0.30186766386 -0.558064997196 -1.90013730526 0.227000564337 -0.23596470058 -1.95368766785 0.203188031912 4.07453626394e-08 -1.96048724651 0.200164407492 0.235964819789 -1.95368790627 0.203188017011 0.558064937592 -1.90013742447 0.227000564337 1.03677988052 -1.7317738533 0.30186766386 1.6555583477 -1.38627386093 0.455502837896 2.21244883537 -0.929521799088 0.655945599079 2.55108070374 -0.529763042927 0.817395925522 2.70304012299 -0.232776001096 0.910708665848 2.74176931381 4.51691448689e-08 0.940984666348 2.70304012299 0.2327760607 0.910708606243 2.55108046532 0.529763042927 0.817395865917 2.21244883537 0.929521799088 0.655945718288 1.65555822849 1.38627386093 0.455502837896 1.03677988052 1.73177373409 0.30186766386 0.558064937592 1.90013742447 0.227000564337 0.235964789987 1.95368766785 0.203188031912 3.07518170928e-08 1.96048724651 0.200164407492 -0.235964715481 1.95368790627 0.203188031912 -0.558064877987 1.90013742447 0.227000564337 -1.03677976131 1.7317738533 0.30186766386 -1.65555858612 1.38627374172 0.455502867699 -2.21244907379 0.929521739483 0.655945718288 -2.55108094215 0.529763042927 0.817395985126 -2.70304083824 0.232776001096 0.910708665848 -2.74176979065 4.67478500354e-09 0.940984666348 -2.70304083824 -0.232776015997 0.910708606243 -2.55108070374 -0.529762983322 0.817395865917 -2.21244907379 -0.929521679878 0.655945718288 -1.51605117321 -1.31066000462 0.844974815845 -0.960630178452 -1.63731467724 0.549290239811 -0.522453963757 -1.79649496078 0.405201941729 -0.222511440516 -1.84712433815 0.359372526407 4.28408384323e-08 -1.85355305672 0.353553414345 0.222511515021 -1.84712445736 0.35937255621 0.522453904152 -1.79649496078 0.405201941729 0.960630178452 -1.63731467724 0.549290299416 1.516051054 -1.31066000462 0.844974756241 2.00393915176 -0.878821313381 1.2307446003 2.2929880619 -0.500867247581 1.54146981239 2.41867733002 -0.22007933259 1.72105836868 2.44945955276 3.81842255592e-08 1.77932727337 2.41867733002 0.220079362392 1.72105848789 2.29298830032 0.500867307186 1.5414699316 2.00393939018 0.878821313381 1.23074471951 1.516051054 1.31066000462 0.844974815845 0.960630118847 1.63731467724 0.549290239811 0.522453904152 1.79649507999 0.405201911926 0.22251150012 1.84712433815 0.359372526407 5.64678011017e-08 1.85355305672 0.353553384542 -0.222511395812 1.84712433815 0.359372526407 -0.522453844547 1.79649496078 0.405201941729 -0.960630178452 1.63731467724 0.549290299416 -1.51605129242 1.31066000462 0.844974756241 -2.00393939018 0.878821253777 1.23074471951 -2.29298830032 0.500867247581 1.5414699316 -2.41867756844 0.220079302788 1.72105836868 -2.4494600296 1.17643175201e-08 1.77932727337 -2.41867756844 -0.220079287887 1.72105848789 -2.29298830032 -0.500867187977 1.5414699316 -2.0039396286 -0.878821253777 1.23074483871 -1.31611311436 -1.20130860806 1.1535422802 -0.851226747036 -1.50070977211 0.736158430576 -0.471144735813 -1.64660918713 0.532765328884 -0.203077018261 -1.69301450253 0.468073219061 3.94187935626e-08 -1.69890677929 0.459858983755 0.203077122569 -1.69301474094 0.468073278666 0.471144795418 -1.64660918713 0.532765328884 0.851226806641 -1.50070977211 0.736158370972 1.31611335278 -1.20130848885 1.15354239941 1.70563721657 -0.805499196053 1.69808959961 1.92412757874 -0.45907869935 2.13670516014 2.01248788834 -0.201717585325 2.39020991325 2.03199291229 5.43512221896e-08 2.47246098518 2.01248788834 0.201717659831 2.390209198 1.92412745953 0.459078788757 2.13670516014 1.70563721657 0.805499196053 1.69808971882 1.31611323357 1.20130872726 1.1535422802 0.851226806641 1.50070977211 0.736158430576 0.471144795418 1.64660930634 0.532765328884 0.20307713747 1.69301462173 0.468073219061 6.05339778303e-08 1.6989068985 0.459858983755 -0.203077018261 1.69301486015 0.468073278666 -0.471144735813 1.64660918713 0.532765328884 -0.851226687431 1.50070977211 0.736158311367 -1.31611323357 1.20130860806 1.15354239941 -1.70563697815 0.805499196053 1.69808959961 -1.92412745953 0.459078758955 2.13670516014 -2.01248764992 0.20171764493 2.39020991325 -2.03199291229 5.31146717719e-08 2.47246098518 -2.01248788834 -0.201717555523 2.390209198 -1.92412745953 -0.459078669548 2.13670492172 -1.70563721657 -0.805499136448 1.69808971882 -1.16312277317 -1.11262071133 1.26592123508 -0.76614767313 -1.38991844654 0.799928545952 -0.430494576693 -1.5250467062 0.572848200798 -0.187423557043 -1.56802618504 0.500622093678 3.90660055416e-08 -1.5734834671 0.491451203823 0.187423691154 -1.56802618504 0.500622093678 0.430494636297 -1.52504682541 0.572848260403 0.766147792339 -1.38991832733 0.799928545952 1.16312289238 -1.11262083054 1.26592123508 1.48006486893 -0.746032416821 1.87388670444 1.64712548256 -0.425186783075 2.36358356476 1.70856058598 -0.186825588346 2.64661121368 1.72000610828 5.23190699653e-08 2.73844218254 1.70856070518 0.186825677752 2.6466114521 1.64712560177 0.425186902285 2.36358356476 1.48006474972 0.74603253603 1.87388694286 1.16312289238 1.11262106895 1.26592123508 0.766147792339 1.38991856575 0.799928545952 0.4304946661 1.52504694462 0.572848260403 0.187423720956 1.56802642345 0.500622093678 5.84101869094e-08 1.57348370552 0.491451203823 -0.187423571944 1.56802642345 0.500622093678 -0.430494517088 1.52504706383 0.572848260403 -0.76614767313 1.38991856575 0.799928545952 -1.16312265396 1.11262106895 1.26592135429 -1.48006474972 0.746032476425 1.87388670444 -1.64712524414 0.425186872482 2.36358356476 -1.70856046677 0.18682564795 2.64661121368 -1.72000575066 4.37235705419e-08 2.73844194412 -1.70856034756 -0.186825558543 2.6466114521 -1.64712536335 -0.425186783075 2.36358356476 -1.48006463051 -0.746032416821 1.87388682365 -1.05856156349 -1.04153990746 1.25227284431 -0.705151200294 -1.30112218857 0.791501283646 -0.399812340736 -1.42761766911 0.566965222359 -0.175091564655 -1.46785128117 0.495548248291 4.97234609043e-08 -1.47295987606 0.48648005724 0.175091683865 -1.46785116196 0.495548188686 0.399812400341 -1.4276175499 0.566965103149 0.705151379108 -1.30112206936 0.791501164436 1.0585616827 -1.04153990746 1.25227284431 1.33150601387 -0.69837141037 1.85342645645 1.46876430511 -0.398023277521 2.33763647079 1.5152182579 -0.17489002645 2.61749339104 1.52234530449 5.41212799021e-08 2.70829510689 1.51521837711 0.174890130758 2.61749339104 1.46876430511 0.398023426533 2.33763647079 1.33150589466 0.698371529579 1.85342657566 1.0585616827 1.04154002666 1.25227272511 0.705151319504 1.30112230778 0.791501283646 0.399812400341 1.42761790752 0.566965222359 0.175091698766 1.46785140038 0.495548248291 5.71977274433e-08 1.47296011448 0.48648005724 -0.175091594458 1.46785140038 0.495548158884 -0.399812281132 1.42761778831 0.566965162754 -0.705151200294 1.30112218857 0.791501224041 -1.05856156349 1.04154002666 1.25227296352 -1.33150577545 0.698371469975 1.85342657566 -1.46876394749 0.398023366928 2.33763647079 -1.51521801949 0.174890100956 2.61749362946 -1.52234518528 4.66943888e-08 2.70829534531 -1.51521801949 -0.17489002645 2.61749362946 -1.46876394749 -0.398023307323 2.33763647079 -1.33150565624 -0.698371350765 1.85342657566 -0.957099378109 -0.95469635725 1.14665138721 -0.641098320484 -1.19263446331 0.735554099083 -0.365088701248 -1.30858290195 0.535224676132 -0.160336181521 -1.34546196461 0.471507012844 2.11787920534e-08 -1.35014462471 0.463416516781 0.160336241126 -1.34546196461 0.471506983042 0.365088790655 -1.30858278275 0.535224676132 0.641098439693 -1.19263458252 0.735554099083 0.957099497318 -0.95469635725 1.14665126801 1.19692409039 -0.640141189098 1.68299639225 1.31439197063 -0.364836126566 2.11500477791 1.35214924812 -0.160307705402 2.36469125748 1.35711681843 4.39928875551e-08 2.44570350647 1.35214912891 0.160307794809 2.36469125748 1.31439185143 0.364836245775 2.11500501633 1.19692420959 0.640141308308 1.68299639225 0.957099497318 0.954696416855 1.14665126801 0.641098439693 1.19263470173 0.735554099083 0.365088790655 1.30858302116 0.535224616528 0.160336256027 1.34546220303 0.471507012844 2.7905032951e-08 1.35014474392 0.463416486979 -0.160336151719 1.34546208382 0.471506983042 -0.365088701248 1.30858302116 0.535224676132 -0.641098380089 1.19263470173 0.735554158688 -0.957099378109 0.95469647646 1.14665138721 -1.19692397118 0.640141248703 1.68299639225 -1.31439173222 0.364836215973 2.11500501633 -1.3521488905 0.160307794809 2.36469125748 -1.3571164608 2.27503456074e-08 2.44570374489 -1.3521488905 -0.160307705402 2.36469125748 -1.31439161301 -0.364836126566 2.11500501633 -1.19692385197 -0.640141189098 1.68299639225 -0.813877224922 -0.816326081753 0.907491564751 -0.546386063099 -1.01977849007 0.603355765343 -0.311700701714 -1.11892139912 0.455148905516 -0.13704431057 -1.15045547485 0.408009618521 -1.77703860516e-08 -1.15445947647 0.40202409029 0.13704431057 -1.15045535564 0.408009648323 0.311700701714 -1.11892127991 0.455148905516 0.546386003494 -1.01977825165 0.603355646133 0.813877224922 -0.816326081753 0.907491624355 1.01540720463 -0.547361433506 1.30428779125 1.11300182343 -0.311958044767 1.62389433384 1.14364099503 -0.137073263526 1.80861604214 1.14735460281 3.7419564336e-08 1.86855053902 1.14364087582 0.137073352933 1.80861604214 1.11300170422 0.311958163977 1.62389457226 1.01540696621 0.547361493111 1.30428802967 0.813877284527 0.816326260567 0.907491624355 0.546386063099 1.01977849007 0.603355705738 0.311700701714 1.11892163754 0.455148905516 0.137044325471 1.15045559406 0.408009618521 5.70826719226e-11 1.15445959568 0.402024120092 -0.13704431057 1.15045547485 0.408009648323 -0.311700761318 1.11892151833 0.455148905516 -0.546386003494 1.01977837086 0.603355705738 -0.813877165318 0.816326141357 0.907491624355 -1.01540708542 0.547361433506 1.30428779125 -1.11300170422 0.311958134174 1.62389445305 -1.14364075661 0.137073352933 1.80861604214 -1.1473544836 4.197568515e-08 1.86855053902 -1.1436406374 -0.137073278427 1.80861604214 -1.11300170422 -0.31195807457 1.62389469147 -1.01540696621 -0.547361373901 1.30428802967 -0.628944456577 -0.630660116673 0.527775645256 -0.422185719013 -0.787838935852 0.378086209297 -0.240825787187 -0.864432930946 0.305141896009 -0.105876974761 -0.888794660568 0.281940877438 -6.5566773344e-08 -0.891888022423 0.278994947672 0.105876848102 -0.888794720173 0.281940877438 0.240825667977 -0.864432930946 0.305141896009 0.422185570002 -0.787838935852 0.378086209297 0.628944396973 -0.630660116673 0.527775645256 0.784776329994 -0.422868996859 0.723070502281 0.860285520554 -0.241006031632 0.880374372005 0.884020268917 -0.105897203088 0.971290528774 0.886910200119 3.51053941472e-08 1.00078892708 0.884020328522 0.105897240341 0.97129046917 0.860285580158 0.241006091237 0.880374372005 0.784776389599 0.422869056463 0.723070561886 0.628944396973 0.630660176277 0.527775645256 0.422185510397 0.787838995457 0.378086209297 0.240825667977 0.864432990551 0.305141866207 0.105876855552 0.888794720173 0.281940847635 -6.00796639105e-08 0.891888022423 0.278994977474 -0.10587695241 0.888794779778 0.281940877438 -0.240825787187 0.864432990551 0.305141896009 -0.422185689211 0.787838995457 0.378086209297 -0.628944456577 0.630660057068 0.527775645256 -0.784776449203 0.422868996859 0.723070561886 -0.860285580158 0.241006031632 0.880374372005 -0.884020388126 0.10589722544 0.971290528774 -0.886910319328 2.82245409267e-08 1.00078904629 -0.884020447731 -0.105897188187 0.97129046917 -0.860285639763 -0.24100600183 0.880374312401 -0.784776568413 -0.422868996859 0.72307062149 -0.500141322613 -0.500604152679 0.209452569485 -0.335479915142 -0.625369369984 0.169065237045 -0.191256776452 -0.686167955399 0.149384334683 -0.0840535163879 -0.705505847931 0.143124550581 -9.97120679358e-08 -0.707961261272 0.142329692841 0.0840533152223 -0.705505788326 0.14312453568 0.191256567836 -0.686167895794 0.149384319782 0.335479706526 -0.625369310379 0.169065237045 0.500141203403 -0.500604152679 0.209452554584 0.624542951584 -0.335664153099 0.262144565582 0.685048818588 -0.191305294633 0.304586321115 0.704217612743 -0.084058880806 0.329116135836 0.706618070602 2.11146495843e-08 0.337075054646 0.704217553139 0.0840589180589 0.329116165638 0.685048878193 0.191305339336 0.304586321115 0.624542951584 0.335664153099 0.262144595385 0.500141203403 0.500604212284 0.209452569485 0.335479676723 0.625369369984 0.169065237045 0.191256552935 0.686167955399 0.149384334683 0.0840533226728 0.705505847931 0.143124550581 -9.34980448619e-08 0.707961261272 0.142329692841 -0.0840535014868 0.705505788326 0.14312453568 -0.191256761551 0.686167895794 0.149384319782 -0.33547988534 0.625369310379 0.169065251946 -0.500141382217 0.500604152679 0.209452554584 -0.624543190002 0.335664153099 0.262144565582 -0.685048997402 0.191305309534 0.304586321115 -0.704217791557 0.0840589031577 0.329116135836 -0.706618368626 1.61382534003e-08 0.337075054646 -0.704217731953 -0.0840588733554 0.329116135836 -0.685048997402 -0.191305294633 0.304586350918 -0.624543130398 -0.335664123297 0.262144595385 -0.457650452852 -0.45769995451 0.0612708330154 -0.306876480579 -0.571772098541 0.0569412559271 -0.174904420972 -0.627359926701 0.0548314377666 -0.076854147017 -0.64504045248 0.0541603751481 -1.13438062499e-07 -0.647285461426 0.0540751740336 0.0768539384007 -0.645040512085 0.0541603751481 0.174904182553 -0.627359926701 0.054831430316 0.306876212358 -0.571772098541 0.0569412596524 0.457650244236 -0.45769995451 0.061270840466 0.571683466434 -0.30689612031 0.0669194832444 0.627239882946 -0.174909487367 0.0714692994952 0.644902229309 -0.0768546238542 0.074098944664 0.647141396999 1.54154111698e-08 0.0749521404505 0.644902288914 0.0768546462059 0.074098944664 0.627239942551 0.17490953207 0.0714693069458 0.571683466434 0.30689612031 0.0669194832444 0.457650214434 0.45769995451 0.061270840466 0.306876301765 0.571772158146 0.0569412596524 0.174904182553 0.627359986305 0.0548314414918 0.0768539384007 0.645040392876 0.0541603825986 -1.08412969269e-07 0.647285461426 0.0540751740336 -0.0768541619182 0.64504045248 0.0541603788733 -0.17490439117 0.627359986305 0.0548314340413 -0.306876450777 0.571772098541 0.0569412596524 -0.457650482655 0.45769995451 0.061270840466 -0.571683704853 0.30689612031 0.0669194832444 -0.627240180969 0.174909502268 0.0714692994952 -0.644902467728 0.0768546387553 0.0740989372134 -0.647141635418 6.9363301769e-09 0.0749521404505 -0.644902527332 -0.076854608953 0.074098944664 -0.627240180969 -0.174909502268 0.0714693069458 -0.571683645248 -0.306896060705 0.0669194832444 -0.452548414469 -0.452548265457 3.58536200729e-10 -0.303441911936 -0.56533652544 -1.82023979223e-10 -0.172940924764 -0.620298683643 3.57506080295e-10 -0.0759897083044 -0.637780249119 9.51831835572e-10 -1.1302515901e-07 -0.63999992609 -7.37797101191e-10 0.0759894698858 -0.637780189514 1.02350206088e-09 0.172940701246 -0.620298683643 3.20159565526e-10 0.303441733122 -0.565336465836 2.76505540686e-10 0.452548146248 -0.452548295259 3.58536200729e-10 0.565336346626 -0.303441792727 -1.80714304632e-10 0.620298564434 -0.172940805554 -8.25273571703e-10 0.63778012991 -0.0759895890951 -2.86827145368e-10 0.639999806881 1.54713948319e-08 5.42771438905e-10 0.637780070305 0.0759896114469 -2.0613474816e-10 0.620298624039 0.172940850258 -1.03491482051e-09 0.565336346626 0.303441852331 2.11312939369e-10 0.45254817605 0.452548295259 2.28150998094e-10 0.303441673517 0.56533652544 -1.80714304632e-10 0.172940731049 0.620298683643 -8.25273571703e-10 0.075989484787 0.637780189514 -2.86827145368e-10 -1.0950900986e-07 0.63999992609 5.42771438905e-10 -0.0759897008538 0.63778012991 -2.08172021288e-10 -0.172940924764 0.620298683643 3.45770939658e-10 -0.303441941738 0.565336465836 2.11312939369e-10 -0.452548444271 0.452548265457 2.28150998094e-10 -0.56533664465 0.303441762924 -4.42648778742e-10 -0.620298802853 0.172940805554 -8.35750968431e-10 -0.637780487537 0.0759896039963 -2.705289881e-10 -0.640000104904 1.15369607201e-08 -7.37797101191e-10 -0.637780368328 -0.0759895816445 -3.71444514036e-10 -0.620298862457 -0.172940820456 -9.02201313657e-10 -0.56533664465 -0.303441822529 2.76505540686e-10 -0.457650512457 -0.45769995451 -0.0612710937858 -0.306876480579 -0.571772158146 -0.0569414757192 -0.174904450774 -0.627359986305 -0.0548316314816 -0.0768541619182 -0.645040512085 -0.0541605688632 -1.04715581983e-07 -0.647285580635 -0.0540753640234 0.0768539533019 -0.645040631294 -0.0541605688632 0.174904212356 -0.627360105515 -0.0548316314816 0.306876242161 -0.571772158146 -0.0569414757192 0.457650244236 -0.457699984312 -0.0612710937858 0.571683466434 -0.306896150112 -0.0669197961688 0.627239942551 -0.17490953207 -0.0714696571231 0.644902288914 -0.0768546313047 -0.074099317193 0.647141516209 1.49302650243e-08 -0.0749525204301 0.644902288914 0.0768546611071 -0.074099317193 0.627240002155 0.174909546971 -0.0714696496725 0.571683466434 0.306896150112 -0.0669197961688 0.457650274038 0.457700014114 -0.0612710937858 0.306876271963 0.571772158146 -0.0569414757192 0.174904227257 0.627359986305 -0.0548316352069 0.0768539607525 0.64504057169 -0.0541605725884 -1.09540629012e-07 0.647285580635 -0.0540753640234 -0.0768541693687 0.645040631294 -0.0541605725884 -0.174904420972 0.62736004591 -0.0548316314816 -0.306876510382 0.571772158146 -0.0569414757192 -0.457650482655 0.45769995451 -0.0612710900605 -0.571683764458 0.30689612031 -0.0669197961688 -0.627240240574 0.174909546971 -0.0714696571231 -0.644902586937 0.0768546536565 -0.074099317193 -0.647141754627 1.28118742282e-08 -0.0749525204301 -0.644902646542 -0.0768546238542 -0.0740993097425 -0.627240240574 -0.174909517169 -0.0714696496725 -0.571683704853 -0.30689612031 -0.0669197961688 -0.500141441822 -0.500604271889 -0.209452882409 -0.335479974747 -0.625369489193 -0.169065475464 -0.191256806254 -0.686168074608 -0.149384513497 -0.0840535312891 -0.70550596714 -0.143124699593 -9.59262251854e-08 -0.707961320877 -0.142329856753 0.0840533301234 -0.70550596714 -0.143124699593 0.191256567836 -0.686168074608 -0.149384483695 0.33547976613 -0.625369429588 -0.169065475464 0.500141322613 -0.500604271889 -0.209452867508 0.624543130398 -0.335664242506 -0.262145042419 0.685048997402 -0.191305324435 -0.30458688736 0.704217791557 -0.0840589031577 -0.329116761684 0.706618189812 1.95577740669e-08 -0.337075650692 0.704217731953 0.08405893296 -0.329116791487 0.685048997402 0.191305369139 -0.304586857557 0.624543070793 0.335664242506 -0.262145012617 0.500141322613 0.500604331493 -0.20945289731 0.335479736328 0.625369429588 -0.169065475464 0.191256597638 0.686168074608 -0.149384513497 0.084053337574 0.705506026745 -0.143124714494 -9.35797430657e-08 0.707961380482 -0.142329871655 -0.0840535238385 0.705506026745 -0.143124699593 -0.191256791353 0.686168134212 -0.149384513497 -0.335480004549 0.625369429588 -0.169065475464 -0.500141501427 0.500604271889 -0.209452882409 -0.624543249607 0.335664212704 -0.262145042419 -0.685049176216 0.191305354238 -0.30458688736 -0.704217970371 0.0840589255095 -0.329116761684 -0.70661842823 1.6316320739e-08 -0.337075650692 -0.704217910767 -0.0840588957071 -0.329116791487 -0.685049235821 -0.191305339336 -0.304586857557 -0.624543309212 -0.335664242506 -0.262145012617 -0.628944456577 -0.630660116673 -0.527775645256 -0.422185719013 -0.787838935852 -0.3780862391 -0.240825816989 -0.864432871342 -0.305141896009 -0.105876967311 -0.888794660568 -0.281940877438 -6.51925802231e-08 -0.891887962818 -0.278994947672 0.105876840651 -0.888794720173 -0.28194090724 0.240825667977 -0.864432930946 -0.305141896009 0.422185599804 -0.787838935852 -0.378086209297 0.628944337368 -0.630660057068 -0.527775645256 0.784776389599 -0.422868967056 -0.723070502281 0.860285580158 -0.241006031632 -0.880374372005 0.884020268917 -0.105897180736 -0.97129046917 0.886910200119 3.44589352608e-08 -1.00078892708 0.884020328522 0.105897247791 -0.971290409565 0.860285580158 0.241006076336 -0.880374372005 0.784776389599 0.422869056463 -0.723070561886 0.628944396973 0.630660116673 -0.527775645256 0.422185540199 0.787838995457 -0.378086209297 0.240825638175 0.864432990551 -0.305141896009 0.105876848102 0.888794660568 -0.281940877438 -5.90161981506e-08 0.891888022423 -0.278994977474 -0.10587695241 0.888794779778 -0.281940877438 -0.240825787187 0.864432930946 -0.305141896009 -0.422185689211 0.787838935852 -0.378086209297 -0.628944456577 0.630660116673 -0.527775645256 -0.784776508808 0.422868996859 -0.723070561886 -0.860285639763 0.241006031632 -0.880374372005 -0.884020388126 0.10589723289 -0.971290528774 -0.886910319328 2.29401884155e-08 -1.00078904629 -0.884020447731 -0.105897195637 -0.97129046917 -0.860285639763 -0.24100600183 -0.880374312401 -0.784776568413 -0.422868996859 -0.72307062149 -0.813877701759 -0.81632655859 -0.907492637634 -0.546386420727 -1.0197789669 -0.603356301785 -0.31170091033 -1.11892211437 -0.455149263144 -0.137044414878 -1.15045619011 -0.408009886742 -1.26936043898e-08 -1.15446019173 -0.402024418116 0.137044399977 -1.15045619011 -0.408009916544 0.31170091033 -1.11892223358 -0.455149233341 0.546386301517 -1.0197789669 -0.60335624218 0.813877761364 -0.81632655859 -0.90749257803 1.01540791988 -0.547361791134 -1.30428922176 1.11300253868 -0.311958253384 -1.62389612198 1.14364159107 -0.137073367834 -1.8086181879 1.14735519886 3.76560223003e-08 -1.86855280399 1.14364159107 0.13707344234 -1.8086181879 1.11300241947 0.311958342791 -1.62389612198 1.01540780067 0.547361791134 -1.30428934097 0.813877820969 0.816326677799 -0.907492637634 0.546386420727 1.01977908611 -0.603356301785 0.31170091033 1.11892223358 -0.455149233341 0.137044414878 1.15045630932 -0.408009886742 -4.7104862233e-09 1.15446031094 -0.402024418116 -0.137044399977 1.15045630932 -0.408009916544 -0.31170091033 1.11892223358 -0.455149263144 -0.546386361122 1.01977908611 -0.60335624218 -0.813877761364 0.816326677799 -0.907492637634 -1.01540780067 0.547361791134 -1.30428934097 -1.11300241947 0.311958312988 -1.62389624119 -1.14364135265 0.137073427439 -1.8086181879 -1.14735507965 3.8130352209e-08 -1.86855280399 -1.14364135265 -0.137073367834 -1.8086181879 -1.11300241947 -0.311958223581 -1.62389624119 -1.01540768147 -0.547361671925 -1.30428934097 -0.957099556923 -0.95469647646 -1.14665162563 -0.641098439693 -1.19263458252 -0.735554277897 -0.365088760853 -1.30858302116 -0.535224735737 -0.160336196423 -1.34546220303 -0.471507102251 2.19226485854e-08 -1.35014474392 -0.463416516781 0.160336270928 -1.34546208382 -0.471507042646 0.365088820457 -1.30858302116 -0.535224735737 0.641098558903 -1.19263482094 -0.735554277897 0.957099735737 -0.954696536064 -1.14665138721 1.1969243288 -0.640141308308 -1.68299674988 1.31439208984 -0.364836156368 -2.11500549316 1.35214948654 -0.160307750106 -2.36469173431 1.35711717606 3.496116463e-08 -2.44570446014 1.35214948654 0.160307824612 -2.36469173431 1.31439220905 0.36483630538 -2.11500573158 1.19692444801 0.640141487122 -1.68299674988 0.957099735737 0.954696655273 -1.14665162563 0.641098499298 1.19263482094 -0.735554277897 0.36508885026 1.30858325958 -0.535224735737 0.16033628583 1.34546232224 -0.471507072449 3.13955688114e-08 1.35014510155 -0.463416546583 -0.160336196423 1.34546232224 -0.471507012844 -0.36508873105 1.30858325958 -0.535224735737 -0.641098439693 1.19263494015 -0.735554277897 -0.957099616528 0.954696714878 -1.14665150642 -1.19692420959 0.640141367912 -1.68299674988 -1.31439185143 0.364836245775 -2.11500549316 -1.35214912891 0.160307809711 -2.36469173431 -1.35711681843 3.88461494083e-08 -2.44570422173 -1.3521490097 -0.160307720304 -2.36469173431 -1.31439197063 -0.364836156368 -2.11500573158 -1.19692409039 -0.640141308308 -1.68299663067 -1.05856156349 -1.04153990746 -1.25227284431 -0.705151200294 -1.30112206936 -0.791501224041 -0.399812340736 -1.42761778831 -0.566965222359 -0.175091579556 -1.46785128117 -0.495548278093 4.80150355031e-08 -1.47295987606 -0.48648005724 0.175091683865 -1.46785128117 -0.495548218489 0.399812400341 -1.4276175499 -0.566965103149 0.705151379108 -1.30112218857 -0.791501224041 1.0585616827 -1.04153990746 -1.25227272511 1.33150601387 -0.69837141037 -1.85342657566 1.46876430511 -0.398023307323 -2.33763670921 1.5152182579 -0.17489002645 -2.61749315262 1.52234530449 5.17403258016e-08 -2.70829486847 1.5152182579 0.174890130758 -2.61749339104 1.46876418591 0.398023426533 -2.33763647079 1.33150601387 0.698371529579 -1.85342669487 1.0585616827 1.04154014587 -1.25227272511 0.705151319504 1.30112230778 -0.791501224041 0.399812430143 1.42761790752 -0.566965222359 0.175091698766 1.46785140038 -0.495548248291 6.0018386705e-08 1.47296011448 -0.486480116844 -0.175091594458 1.46785151958 -0.495548218489 -0.399812281132 1.42761778831 -0.566965162754 -0.705151200294 1.30112230778 -0.791501283646 -1.05856144428 1.04154002666 -1.25227284431 -1.33150565624 0.69837141037 -1.85342657566 -1.4687640667 0.39802339673 -2.33763670921 -1.51521813869 0.174890100956 -2.61749339104 -1.52234506607 5.62930928538e-08 -2.70829510689 -1.51521801949 -0.174890011549 -2.61749339104 -1.4687640667 -0.398023307323 -2.33763647079 -1.33150565624 -0.698371350765 -1.85342669487 -1.16312301159 -1.11262106895 -1.26592123508 -0.766147851944 -1.38991868496 -0.799928545952 -0.430494636297 -1.52504694462 -0.572848200798 -0.187423616648 -1.56802654266 -0.500622093678 5.8055952934e-08 -1.57348370552 -0.491451174021 0.187423706055 -1.56802654266 -0.500622034073 0.430494785309 -1.52504694462 -0.572848200798 0.766148030758 -1.38991856575 -0.799928545952 1.16312325001 -1.11262106895 -1.26592111588 1.48006534576 -0.74603253603 -1.87388646603 1.6471259594 -0.425186872482 -2.36358332634 1.70856130123 -0.186825618148 -2.64661121368 1.72000682354 5.07217876589e-08 -2.73844194412 1.70856130123 0.186825707555 -2.64661121368 1.64712584019 0.425187021494 -2.36358332634 1.48006534576 0.746032655239 -1.87388670444 1.1631231308 1.11262130737 -1.26592123508 0.766147971153 1.38991880417 -0.799928545952 0.430494755507 1.52504718304 -0.572848200798 0.187423750758 1.56802654266 -0.500622034073 6.1036921295e-08 1.57348394394 -0.491451174021 -0.187423601747 1.56802654266 -0.500622093678 -0.430494636297 1.52504706383 -0.572848141193 -0.766147971153 1.38991880417 -0.799928545952 -1.1631231308 1.11262118816 -1.26592123508 -1.48006510735 0.746032595634 -1.87388658524 -1.64712572098 0.425186961889 -2.36358332634 -1.70856106281 0.186825677752 -2.64661121368 -1.72000646591 5.17236955488e-08 -2.73844194412 -1.70856106281 -0.186825588346 -2.64661121368 -1.64712572098 -0.425186902285 -2.36358332634 -1.48006510735 -0.74603253603 -1.87388670444 -1.31611359119 -1.20130860806 -1.15354216099 -0.851226985455 -1.50070989132 -0.736158251762 -0.471144765615 -1.64660942554 -0.532765209675 -0.203077033162 -1.69301462173 -0.468073189259 3.77003885887e-08 -1.69890701771 -0.459858894348 0.203077152371 -1.69301474094 -0.468073159456 0.47114482522 -1.64660918713 -0.532765209675 0.851227045059 -1.50070989132 -0.736158251762 1.31611359119 -1.20130872726 -1.15354216099 1.7056375742 -0.805499315262 -1.69808912277 1.92412793636 -0.459078758955 -2.13670444489 2.01248860359 -0.201717600226 -2.39020895958 2.03199338913 4.88762594841e-08 -2.47246050835 2.01248836517 0.201717689633 -2.39020848274 1.92412793636 0.459078848362 -2.13670420647 1.7056375742 0.805499374866 -1.69808936119 1.31611359119 1.20130884647 -1.15354216099 0.851226985455 1.50071001053 -0.736158192158 0.471144855022 1.64660954475 -0.532765209675 0.203077167273 1.69301474094 -0.468073189259 6.66077397682e-08 1.69890713692 -0.45985892415 -0.203077033162 1.69301486015 -0.468073159456 -0.471144735813 1.64660942554 -0.532765209675 -0.851226866245 1.50071001053 -0.736158251762 -1.31611359119 1.20130872726 -1.15354216099 -1.70563721657 0.805499255657 -1.69808912277 -1.92412805557 0.459078788757 -2.1367046833 -2.01248860359 0.20171764493 -2.39020895958 -2.03199338913 5.54318688728e-08 -2.47246050835 -2.01248860359 -0.201717585325 -2.39020848274 -1.92412793636 -0.459078729153 -2.13670420647 -1.70563745499 -0.805499255657 -1.69808936119 Normals 852 0.0 1.0 0.0 0.723593831062 0.447187721729 -0.525711834431 -0.276375621557 0.447218239307 -0.850642442703 -0.894405961037 0.447187721729 0.0 -0.276375621557 0.447218239307 0.850642442703 0.723593831062 0.447187721729 0.525711834431 0.276375621557 -0.447218239307 -0.850642442703 -0.723593831062 -0.447187721729 -0.525711834431 -0.723593831062 -0.447187721729 0.525711834431 0.276375621557 -0.447218239307 0.850642442703 0.894405961037 -0.447187721729 0.0 0.0 -1.0 0.0 0.425305962563 0.850642442703 -0.308999896049 -0.162450030446 0.850642442703 -0.499984741211 0.262855917215 0.525711834431 -0.80898463726 0.425305962563 0.850642442703 0.308999896049 0.850642442703 0.525711834431 0.0 -0.525711834431 0.850642442703 0.0 -0.688161849976 0.525711834431 -0.499984741211 -0.162450030446 0.850642442703 0.499984741211 -0.688161849976 0.525711834431 0.499984741211 0.262855917215 0.525711834431 0.80898463726 0.951048314571 0.0 0.308999896049 0.951048314571 0.0 -0.308999896049 0.587755978107 0.0 -0.809015154839 0.0 0.0 -1.0 -0.587755978107 0.0 -0.809015154839 -0.951048314571 0.0 -0.308999896049 -0.951048314571 0.0 0.308999896049 -0.587755978107 0.0 0.809015154839 0.0 0.0 1.0 0.587755978107 0.0 0.809015154839 0.688161849976 -0.525711834431 -0.499984741211 -0.262855917215 -0.525711834431 -0.80898463726 -0.850642442703 -0.525711834431 0.0 -0.262855917215 -0.525711834431 0.80898463726 0.688161849976 -0.525711834431 0.499984741211 0.525711834431 -0.850642442703 0.0 0.162450030446 -0.850642442703 -0.499984741211 -0.425305962563 -0.850642442703 -0.308999896049 -0.425305962563 -0.850642442703 0.308999896049 0.162450030446 -0.850642442703 0.499984741211 0.0 1.0 0.0 0.723593831062 0.447187721729 -0.525711834431 -0.276375621557 0.447218239307 -0.850642442703 -0.894405961037 0.447187721729 0.0 -0.276375621557 0.447218239307 0.850642442703 0.723593831062 0.447187721729 0.525711834431 0.276375621557 -0.447218239307 -0.850642442703 -0.723593831062 -0.447187721729 -0.525711834431 -0.723593831062 -0.447187721729 0.525711834431 0.276375621557 -0.447218239307 0.850642442703 0.894405961037 -0.447187721729 0.0 0.0 -1.0 0.0 0.425305962563 0.850642442703 -0.308999896049 -0.162450030446 0.850642442703 -0.499984741211 0.262855917215 0.525711834431 -0.80898463726 0.425305962563 0.850642442703 0.308999896049 0.850642442703 0.525711834431 0.0 -0.525711834431 0.850642442703 0.0 -0.688161849976 0.525711834431 -0.499984741211 -0.162450030446 0.850642442703 0.499984741211 -0.688161849976 0.525711834431 0.499984741211 0.262855917215 0.525711834431 0.80898463726 0.951048314571 0.0 0.308999896049 0.951048314571 0.0 -0.308999896049 0.587755978107 0.0 -0.809015154839 0.0 0.0 -1.0 -0.587755978107 0.0 -0.809015154839 -0.951048314571 0.0 -0.308999896049 -0.951048314571 0.0 0.308999896049 -0.587755978107 0.0 0.809015154839 0.0 0.0 1.0 0.587755978107 0.0 0.809015154839 0.688161849976 -0.525711834431 -0.499984741211 -0.262855917215 -0.525711834431 -0.80898463726 -0.850642442703 -0.525711834431 0.0 -0.262855917215 -0.525711834431 0.80898463726 0.688161849976 -0.525711834431 0.499984741211 0.525711834431 -0.850642442703 0.0 0.162450030446 -0.850642442703 -0.499984741211 -0.425305962563 -0.850642442703 -0.308999896049 -0.425305962563 -0.850642442703 0.308999896049 0.162450030446 -0.850642442703 0.499984741211 -0.358043164015 -0.845515310764 -0.396038711071 -0.189916685224 -0.844386100769 -0.500900268555 -0.0661030933261 -0.786004185677 -0.614642798901 -0.0120853297412 -0.731803357601 -0.681386768818 0.0 -0.711813688278 -0.702322483063 0.0120853297412 -0.731803357601 -0.681386768818 0.0661030933261 -0.786004185677 -0.614642798901 0.189916685224 -0.844386100769 -0.500900268555 0.358043164015 -0.845515310764 -0.396038711071 0.517380297184 -0.781212806702 -0.349253833294 0.667012572289 -0.654499948025 -0.355876326561 0.818933665752 -0.410290837288 -0.401196330786 0.898953199387 0.0 -0.438032180071 0.818933665752 0.410290837288 -0.401196330786 0.667012572289 0.654499948025 -0.355876326561 0.517380297184 0.781212806702 -0.349253833294 0.358043164015 0.845515310764 -0.396038711071 0.189916685224 0.844386100769 -0.500900268555 0.0661030933261 0.786004185677 -0.614642798901 0.0120853297412 0.731803357601 -0.681386768818 0.0 0.711813688278 -0.702322483063 -0.0120853297412 0.731803357601 -0.681386768818 -0.0661030933261 0.786004185677 -0.614642798901 -0.189916685224 0.844386100769 -0.500900268555 -0.358043164015 0.845515310764 -0.396038711071 -0.517380297184 0.781212806702 -0.349253833294 -0.667012572289 0.654499948025 -0.355876326561 -0.818933665752 0.410290837288 -0.401196330786 -0.898953199387 0.0 -0.438032180071 -0.818933665752 -0.410290837288 -0.401196330786 -0.667012572289 -0.654499948025 -0.355876326561 -0.517380297184 -0.781212806702 -0.349253833294 -0.490737646818 -0.836725950241 -0.242957860231 -0.335581541061 -0.891933977604 -0.303018271923 -0.1865901649 -0.909115850925 -0.37232580781 -0.0675679817796 -0.907071113586 -0.415478974581 0.0 -0.903103709221 -0.429364919662 0.0675679817796 -0.907071113586 -0.415478974581 0.1865901649 -0.909115850925 -0.37232580781 0.335581541061 -0.891933977604 -0.303018271923 0.490737646818 -0.836725950241 -0.242957860231 0.634052574635 -0.742179632187 -0.217047646642 0.771721541882 -0.596667349339 -0.219977423549 0.904507577419 -0.352244645357 -0.240272223949 0.967101037502 0.0 -0.254341244698 0.904507577419 0.352244645357 -0.240272223949 0.771721541882 0.596667349339 -0.219977423549 0.634052574635 0.742179632187 -0.217047646642 0.490737646818 0.836725950241 -0.242957860231 0.335581541061 0.891933977604 -0.303018271923 0.1865901649 0.909115850925 -0.37232580781 0.0675679817796 0.907071113586 -0.415478974581 0.0 0.903103709221 -0.429364919662 -0.0675679817796 0.907071113586 -0.415478974581 -0.1865901649 0.909115850925 -0.37232580781 -0.335581541061 0.891933977604 -0.303018271923 -0.490737646818 0.836725950241 -0.242957860231 -0.634052574635 0.742179632187 -0.217047646642 -0.771721541882 0.596667349339 -0.219977423549 -0.904507577419 0.352244645357 -0.240272223949 -0.967101037502 0.0 -0.254341244698 -0.904507577419 -0.352244645357 -0.240272223949 -0.771721541882 -0.596667349339 -0.219977423549 -0.634052574635 -0.742179632187 -0.217047646642 -0.544511258602 -0.833033263683 -0.0974761173129 -0.394390702248 -0.911099553108 -0.119693592191 -0.236304819584 -0.960600614548 -0.146092101932 -0.0911282673478 -0.98239082098 -0.162907809019 0.0 -0.985747873783 -0.168156981468 0.0911282673478 -0.98239082098 -0.162907809019 0.236304819584 -0.960600614548 -0.146092101932 0.394390702248 -0.911099553108 -0.119693592191 0.544511258602 -0.833033263683 -0.0974761173129 0.682027637959 -0.725974321365 -0.0880459025502 0.814661085606 -0.573015511036 -0.08923612535 0.939085066319 -0.32984405756 -0.0963164195418 0.994872868061 0.0 -0.100833155215 0.939085066319 0.32984405756 -0.0963164195418 0.814661085606 0.573015511036 -0.08923612535 0.682027637959 0.725974321365 -0.0880459025502 0.544511258602 0.833033263683 -0.0974761173129 0.394390702248 0.911099553108 -0.119693592191 0.236304819584 0.960600614548 -0.146092101932 0.0911282673478 0.98239082098 -0.162907809019 0.0 0.985747873783 -0.168156981468 -0.0911282673478 0.98239082098 -0.162907809019 -0.236304819584 0.960600614548 -0.146092101932 -0.394390702248 0.911099553108 -0.119693592191 -0.544511258602 0.833033263683 -0.0974761173129 -0.682027637959 0.725974321365 -0.0880459025502 -0.814661085606 0.573015511036 -0.08923612535 -0.939085066319 0.32984405756 -0.0963164195418 -0.994872868061 0.0 -0.100833155215 -0.939085066319 -0.32984405756 -0.0963164195418 -0.814661085606 -0.573015511036 -0.08923612535 -0.682027637959 -0.725974321365 -0.0880459025502 -0.554979085922 -0.831843018532 0.0 -0.405896186829 -0.913907289505 0.0 -0.246223330498 -0.969206809998 0.0 -0.0958891585469 -0.995361208916 0.0 0.0 -1.0 0.0 0.0958891585469 -0.995361208916 0.0 0.246223330498 -0.969206809998 0.0 0.405896186829 -0.913907289505 0.0 0.554979085922 -0.831843018532 0.0 0.691427350044 -0.722403645515 0.0 0.822962105274 -0.56807154417 0.0 0.945554971695 -0.325449377298 0.0 1.0 0.0 0.0 0.945554971695 0.325449377298 0.0 0.822962105274 0.56807154417 0.0 0.691427350044 0.722403645515 0.0 0.554979085922 0.831843018532 0.0 0.405896186829 0.913907289505 0.0 0.246223330498 0.969206809998 0.0 0.0958891585469 0.995361208916 0.0 0.0 1.0 0.0 -0.0958891585469 0.995361208916 0.0 -0.246223330498 0.969206809998 0.0 -0.405896186829 0.913907289505 0.0 -0.554979085922 0.831843018532 0.0 -0.691427350044 0.722403645515 0.0 -0.822962105274 0.56807154417 0.0 -0.945554971695 0.325449377298 0.0 -1.0 0.0 0.0 -0.945554971695 -0.325449377298 0.0 -0.822962105274 -0.56807154417 0.0 -0.691427350044 -0.722403645515 0.0 -0.544511258602 -0.833033263683 0.0974761173129 -0.394390702248 -0.911099553108 0.119693592191 -0.236304819584 -0.960600614548 0.146092101932 -0.0911282673478 -0.98239082098 0.162907809019 0.0 -0.985747873783 0.168156981468 0.0911282673478 -0.98239082098 0.162907809019 0.236304819584 -0.960600614548 0.146092101932 0.394390702248 -0.911099553108 0.119693592191 0.544511258602 -0.833033263683 0.0974761173129 0.682027637959 -0.725974321365 0.0880459025502 0.814661085606 -0.573015511036 0.08923612535 0.939085066319 -0.32984405756 0.0963164195418 0.994872868061 0.0 0.100833155215 0.939085066319 0.32984405756 0.0963164195418 0.814661085606 0.573015511036 0.08923612535 0.682027637959 0.725974321365 0.0880459025502 0.544511258602 0.833033263683 0.0974761173129 0.394390702248 0.911099553108 0.119693592191 0.236304819584 0.960600614548 0.146092101932 0.0911282673478 0.98239082098 0.162907809019 0.0 0.985747873783 0.168156981468 -0.0911282673478 0.98239082098 0.162907809019 -0.236304819584 0.960600614548 0.146092101932 -0.394390702248 0.911099553108 0.119693592191 -0.544511258602 0.833033263683 0.0974761173129 -0.682027637959 0.725974321365 0.0880459025502 -0.814661085606 0.573015511036 0.08923612535 -0.939085066319 0.32984405756 0.0963164195418 -0.994872868061 0.0 0.100833155215 -0.939085066319 -0.32984405756 0.0963164195418 -0.814661085606 -0.573015511036 0.08923612535 -0.682027637959 -0.725974321365 0.0880459025502 -0.490737646818 -0.836725950241 0.242957860231 -0.335581541061 -0.891933977604 0.303018271923 -0.1865901649 -0.909115850925 0.37232580781 -0.0675679817796 -0.907071113586 0.415478974581 0.0 -0.903103709221 0.429364919662 0.0675679817796 -0.907071113586 0.415478974581 0.1865901649 -0.909115850925 0.37232580781 0.335581541061 -0.891933977604 0.303018271923 0.490737646818 -0.836725950241 0.242957860231 0.634052574635 -0.742179632187 0.217047646642 0.771721541882 -0.596667349339 0.219977423549 0.904507577419 -0.352244645357 0.240272223949 0.967101037502 0.0 0.254341244698 0.904507577419 0.352244645357 0.240272223949 0.771721541882 0.596667349339 0.219977423549 0.634052574635 0.742179632187 0.217047646642 0.490737646818 0.836725950241 0.242957860231 0.335581541061 0.891933977604 0.303018271923 0.1865901649 0.909115850925 0.37232580781 0.0675679817796 0.907071113586 0.415478974581 0.0 0.903103709221 0.429364919662 -0.0675679817796 0.907071113586 0.415478974581 -0.1865901649 0.909115850925 0.37232580781 -0.335581541061 0.891933977604 0.303018271923 -0.490737646818 0.836725950241 0.242957860231 -0.634052574635 0.742179632187 0.217047646642 -0.771721541882 0.596667349339 0.219977423549 -0.904507577419 0.352244645357 0.240272223949 -0.967101037502 0.0 0.254341244698 -0.904507577419 -0.352244645357 0.240272223949 -0.771721541882 -0.596667349339 0.219977423549 -0.634052574635 -0.742179632187 0.217047646642 -0.358043164015 -0.845515310764 0.396038711071 -0.189916685224 -0.844386100769 0.500900268555 -0.0661030933261 -0.786004185677 0.614642798901 -0.0120853297412 -0.731803357601 0.681386768818 0.0 -0.711813688278 0.702322483063 0.0120853297412 -0.731803357601 0.681386768818 0.0661030933261 -0.786004185677 0.614642798901 0.189916685224 -0.844386100769 0.500900268555 0.358043164015 -0.845515310764 0.396038711071 0.517380297184 -0.781212806702 0.349253833294 0.667012572289 -0.654499948025 0.355876326561 0.818933665752 -0.410290837288 0.401196330786 0.898953199387 0.0 0.438032180071 0.818933665752 0.410290837288 0.401196330786 0.667012572289 0.654499948025 0.355876326561 0.517380297184 0.781212806702 0.349253833294 0.358043164015 0.845515310764 0.396038711071 0.189916685224 0.844386100769 0.500900268555 0.0661030933261 0.786004185677 0.614642798901 0.0120853297412 0.731803357601 0.681386768818 0.0 0.711813688278 0.702322483063 -0.0120853297412 0.731803357601 0.681386768818 -0.0661030933261 0.786004185677 0.614642798901 -0.189916685224 0.844386100769 0.500900268555 -0.358043164015 0.845515310764 0.396038711071 -0.517380297184 0.781212806702 0.349253833294 -0.667012572289 0.654499948025 0.355876326561 -0.818933665752 0.410290837288 0.401196330786 -0.898953199387 0.0 0.438032180071 -0.818933665752 -0.410290837288 0.401196330786 -0.667012572289 -0.654499948025 0.355876326561 -0.517380297184 -0.781212806702 0.349253833294 -0.122440263629 -0.839075922966 0.530045449734 0.0574968717992 -0.741416692734 0.668568968773 0.12546159327 -0.574510931969 0.808801531792 0.0700399801135 -0.45854061842 0.885891318321 0.0 -0.42210149765 0.90652179718 -0.0700399801135 -0.45854061842 0.885891318321 -0.12546159327 -0.574510931969 0.808801531792 -0.0574968717992 -0.741416692734 0.668568968773 0.122440263629 -0.839075922966 0.530045449734 0.306070119143 -0.830713808537 0.464980006218 0.469985038042 -0.740287482738 0.480666518211 0.642597734928 -0.50608843565 0.575243413448 0.743308842182 0.0 0.668904662132 0.642597734928 0.50608843565 0.575243413448 0.469985038042 0.740287482738 0.480666518211 0.306070119143 0.830713808537 0.464980006218 0.122440263629 0.839075922966 0.530045449734 -0.0574968717992 0.741416692734 0.668568968773 -0.12546159327 0.574510931969 0.808801531792 -0.0700399801135 0.45854061842 0.885891318321 0.0 0.42210149765 0.90652179718 0.0700399801135 0.45854061842 0.885891318321 0.12546159327 0.574510931969 0.808801531792 0.0574968717992 0.741416692734 0.668568968773 -0.122440263629 0.839075922966 0.530045449734 -0.306070119143 0.830713808537 0.464980006218 -0.469985038042 0.740287482738 0.480666518211 -0.642597734928 0.50608843565 0.575243413448 -0.743308842182 0.0 0.668904662132 -0.642597734928 -0.50608843565 0.575243413448 -0.469985038042 -0.740287482738 0.480666518211 -0.306070119143 -0.830713808537 0.464980006218 0.241706594825 -0.736289560795 0.632007837296 0.374126404524 -0.519516587257 0.768150866032 0.326395452023 -0.279946297407 0.90279853344 0.145756408572 -0.143681138754 0.97882014513 0.0 -0.106082342565 0.994354069233 -0.145756408572 -0.143681138754 0.97882014513 -0.326395452023 -0.279946297407 0.90279853344 -0.374126404524 -0.519516587257 0.768150866032 -0.241706594825 -0.736289560795 0.632007837296 -0.0645466446877 -0.822107613087 0.565630078316 0.0789819061756 -0.796380519867 0.59956663847 0.201178014278 -0.59144872427 0.780816078186 0.250007629395 0.0 0.968230247498 0.201178014278 0.59144872427 0.780816078186 0.0789819061756 0.796380519867 0.59956663847 -0.0645466446877 0.822107613087 0.565630078316 -0.241706594825 0.736289560795 0.632007837296 -0.374126404524 0.519516587257 0.768150866032 -0.326395452023 0.279946297407 0.90279853344 -0.145756408572 0.143681138754 0.97882014513 0.0 0.106082342565 0.994354069233 0.145756408572 0.143681138754 0.97882014513 0.326395452023 0.279946297407 0.90279853344 0.374126404524 0.519547104836 0.768150866032 0.241706594825 0.736289560795 0.632007837296 0.0645466446877 0.822107613087 0.565630078316 -0.0789819061756 0.796380519867 0.59956663847 -0.201178014278 0.59144872427 0.780816078186 -0.250007629395 0.0 0.968230247498 -0.201178014278 -0.59144872427 0.780816078186 -0.0789819061756 -0.796380519867 0.59956663847 0.0645466446877 -0.822107613087 0.565630078316 0.648091077805 -0.418683439493 0.636097311974 0.620624423027 -0.191015347838 0.760460197926 0.441877484322 -0.00585955381393 0.89703053236 0.18286691606 0.0912198275328 0.978881180286 0.0 0.115390487015 0.993316471577 -0.18286691606 0.0912198275328 0.978881180286 -0.441877484322 -0.00585955381393 0.89703053236 -0.620624423027 -0.191015347838 0.760460197926 -0.648091077805 -0.418683439493 0.636097311974 -0.579088687897 -0.586199522018 0.566545605659 -0.513107717037 -0.638081014156 0.574053168297 -0.499038666487 -0.507156610489 0.702627658844 -0.497665345669 0.0 0.867366552353 -0.499038666487 0.507156610489 0.702627658844 -0.513107717037 0.638081014156 0.574053168297 -0.579088687897 0.586199522018 0.566545605659 -0.648091077805 0.418683439493 0.636097311974 -0.620624423027 0.191015347838 0.760460197926 -0.441877484322 0.00585955381393 0.89703053236 -0.18286691606 -0.0912198275328 0.978881180286 0.0 -0.115390487015 0.993316471577 0.18286691606 -0.0912198275328 0.978881180286 0.441877484322 0.00585955381393 0.89703053236 0.620624423027 0.191015347838 0.760460197926 0.648091077805 0.418683439493 0.636097311974 0.579088687897 0.586199522018 0.566545605659 0.513107717037 0.638081014156 0.574053168297 0.499038666487 0.507156610489 0.702627658844 0.497665345669 0.0 0.867366552353 0.499038666487 -0.507156610489 0.702627658844 0.513107717037 -0.638081014156 0.574053168297 0.579088687897 -0.586199522018 0.566545605659 0.825708806515 -0.0907620489597 0.556688129902 0.704672396183 0.057618945837 0.707174897194 0.4717245996 0.168675795197 0.865443885326 0.189275801182 0.229102447629 0.95480209589 0.0 0.243324071169 0.969939291477 -0.189275801182 0.229102447629 0.95480209589 -0.4717245996 0.168675795197 0.865443885326 -0.704672396183 0.057618945837 0.707174897194 -0.825708806515 -0.0907620489597 0.556688129902 -0.856257796288 -0.237006738782 0.458937346935 -0.848811328411 -0.323313087225 0.418256163597 -0.859370708466 -0.278481394053 0.428815573454 -0.884945213795 0.0 0.465620905161 -0.859370708466 0.278481394053 0.428815573454 -0.848811328411 0.323313087225 0.418256163597 -0.856257796288 0.237006738782 0.458937346935 -0.825708806515 0.0907620489597 0.556688129902 -0.704672396183 -0.057618945837 0.707174897194 -0.4717245996 -0.168675795197 0.865443885326 -0.189275801182 -0.229102447629 0.95480209589 0.0 -0.243324071169 0.969939291477 0.189275801182 -0.229102447629 0.95480209589 0.4717245996 -0.168675795197 0.865443885326 0.704672396183 -0.057618945837 0.707174897194 0.825708806515 0.0907620489597 0.556688129902 0.856257796288 0.237006738782 0.458937346935 0.848811328411 0.323313087225 0.418256163597 0.859370708466 0.278481394053 0.428815573454 0.884945213795 0.0 0.465620905161 0.859370708466 -0.278481394053 0.428815573454 0.848811328411 -0.323313087225 0.418256163597 0.856257796288 -0.237006738782 0.458937346935 0.848689258099 0.113925598562 0.516403675079 0.69353312254 0.23468734324 0.681081593037 0.44599750638 0.315317243338 0.837611019611 0.173924982548 0.356273084879 0.918027281761 0.0 0.364635139704 0.931119740009 -0.173924982548 0.356273084879 0.918027281761 -0.44599750638 0.315317243338 0.837611019611 -0.69353312254 0.23468734324 0.681081593037 -0.848689258099 0.113925598562 0.516403675079 -0.916257202625 -0.0246894750744 0.399822980165 -0.930967152119 -0.132663965225 0.340067744255 -0.935575425625 -0.147831663489 0.320657968521 -0.946073770523 0.0 0.32392346859 -0.935575425625 0.147831663489 0.320657968521 -0.930967152119 0.132663965225 0.340067744255 -0.916257202625 0.0246894750744 0.399822980165 -0.848689258099 -0.113925598562 0.516403675079 -0.69353312254 -0.23468734324 0.681081593037 -0.44599750638 -0.315317243338 0.837611019611 -0.173924982548 -0.356273084879 0.918027281761 0.0 -0.364635139704 0.931119740009 0.173924982548 -0.356273084879 0.918027281761 0.44599750638 -0.315317243338 0.837611019611 0.69353312254 -0.23468734324 0.681081593037 0.848689258099 -0.113925598562 0.516403675079 0.916257202625 0.0246894750744 0.399822980165 0.930967152119 0.132663965225 0.340067744255 0.935575425625 0.147831663489 0.320657968521 0.946073770523 0.0 0.32392346859 0.935575425625 -0.147831663489 0.320657968521 0.930967152119 -0.132663965225 0.340067744255 0.916257202625 -0.0246894750744 0.399822980165 0.805078268051 0.319376200438 0.499801635742 0.618213474751 0.432477802038 0.656270027161 0.37369915843 0.489669471979 0.787743747234 0.139896854758 0.511581778526 0.847743153572 0.0 0.514908313751 0.857203900814 -0.139896854758 0.511581778526 0.847743153572 -0.37369915843 0.489669471979 0.787743747234 -0.618213474751 0.432477802038 0.656270027161 -0.805078268051 0.319376200438 0.499801635742 -0.910214543343 0.165166169405 0.379711300135 -0.949217200279 0.0211493279785 0.313852339983 -0.956877350807 -0.0534073933959 0.285500645638 -0.959959685802 0.0 0.280037850142 -0.956877350807 0.0534073933959 0.285500645638 -0.949217200279 -0.0211493279785 0.313852339983 -0.910214543343 -0.165166169405 0.379711300135 -0.805078268051 -0.319376200438 0.499801635742 -0.618213474751 -0.432477802038 0.656270027161 -0.37369915843 -0.489669471979 0.787743747234 -0.139896854758 -0.511581778526 0.847743153572 0.0 -0.514908313751 0.857203900814 0.139896854758 -0.511581778526 0.847743153572 0.37369915843 -0.489669471979 0.787743747234 0.618213474751 -0.432477802038 0.656270027161 0.805078268051 -0.319376200438 0.499801635742 0.910214543343 -0.165166169405 0.379711300135 0.949217200279 -0.0211493279785 0.313852339983 0.956877350807 0.0534073933959 0.285500645638 0.959959685802 0.0 0.280037850142 0.956877350807 -0.0534073933959 0.285500645638 0.949217200279 0.0211493279785 0.313852339983 0.910214543343 0.165166169405 0.379711300135 0.730185866356 0.526322185993 0.43565171957 0.525254070759 0.645222306252 0.554734945297 0.300485253334 0.699911475182 0.647907972336 0.109012119472 0.717825889587 0.687612533569 0.0 0.720664083958 0.693258464336 -0.109012119472 0.717825889587 0.687612533569 -0.300485253334 0.699911475182 0.647907972336 -0.525254070759 0.645222306252 0.554734945297 -0.730185866356 0.526322185993 0.43565171957 -0.872676789761 0.35251930356 0.337809383869 -0.944181621075 0.171849727631 0.280953407288 -0.96649068594 0.0383922867477 0.253730893135 -0.969237327576 0.0 0.246101260185 -0.96649068594 -0.0383922867477 0.253730893135 -0.944181621075 -0.171849727631 0.280953407288 -0.872676789761 -0.35251930356 0.337809383869 -0.730185866356 -0.526322185993 0.43565171957 -0.525254070759 -0.645222306252 0.554734945297 -0.300485253334 -0.699911475182 0.647907972336 -0.109012119472 -0.717825889587 0.687612533569 0.0 -0.720664083958 0.693258464336 0.109012119472 -0.717825889587 0.687612533569 0.300485253334 -0.699911475182 0.647907972336 0.525254070759 -0.645222306252 0.554734945297 0.730185866356 -0.526322185993 0.43565171957 0.872676789761 -0.35251930356 0.337809383869 0.944181621075 -0.171849727631 0.280953407288 0.96649068594 -0.0383922867477 0.253730893135 0.969237327576 0.0 0.246101260185 0.96649068594 0.0383922867477 0.253730893135 0.944181621075 0.171849727631 0.280953407288 0.872676789761 0.35251930356 0.337809383869 0.703268527985 0.664845705032 0.251716673374 0.497054964304 0.812768936157 0.3037507236 0.28241828084 0.895596206188 0.343638420105 0.102420121431 0.927549064159 0.359355449677 0.0 0.932828783989 0.360271006823 -0.102420121431 0.927549064159 0.359355449677 -0.28241828084 0.895596206188 0.343638420105 -0.497054964304 0.812768936157 0.3037507236 -0.703268527985 0.664845705032 0.251716673374 -0.859675884247 0.466963708401 0.206976532936 -0.948606848717 0.260536521673 0.179570913315 -0.982085645199 0.0903042703867 0.165349289775 -0.986968576908 0.0 0.160740986466 -0.982085645199 -0.0903042703867 0.165349289775 -0.948606848717 -0.260536521673 0.179570913315 -0.859675884247 -0.466963708401 0.206976532936 -0.703268527985 -0.664845705032 0.251716673374 -0.497054964304 -0.812768936157 0.3037507236 -0.28241828084 -0.895596206188 0.343638420105 -0.102420121431 -0.927549064159 0.359355449677 0.0 -0.932828783989 0.360271006823 0.102420121431 -0.927549064159 0.359355449677 0.28241828084 -0.895596206188 0.343638420105 0.497054964304 -0.812768936157 0.3037507236 0.703268527985 -0.664845705032 0.251716673374 0.859675884247 -0.466963708401 0.206976532936 0.948606848717 -0.260536521673 0.179570913315 0.982085645199 -0.0903042703867 0.165349289775 0.986968576908 0.0 0.160740986466 0.982085645199 0.0903042703867 0.165349289775 0.948606848717 0.260536521673 0.179570913315 0.859675884247 0.466963708401 0.206976532936 0.708304107189 0.70586258173 0.0 0.500961303711 0.865443885326 0.0 0.285378575325 0.958403289318 0.0 0.103762932122 0.994598209858 0.0 0.0 1.0 0.0 -0.103762932122 0.994598209858 0.0 -0.285378575325 0.958403289318 0.0 -0.500961303711 0.865443885326 0.0 -0.708304107189 0.70586258173 0.0 -0.867061376572 0.498184144497 0.0 -0.959074676037 0.283059179783 0.0 -0.99472028017 0.102542191744 0.0 -1.0 0.0 0.0 -0.99472028017 -0.102542191744 0.0 -0.959074676037 -0.283059179783 0.0 -0.867061376572 -0.498184144497 0.0 -0.708304107189 -0.70586258173 0.0 -0.500961303711 -0.865443885326 0.0 -0.285378575325 -0.958403289318 0.0 -0.103762932122 -0.994598209858 0.0 0.0 -1.0 0.0 0.103762932122 -0.994598209858 0.0 0.285378575325 -0.958403289318 0.0 0.500961303711 -0.865443885326 0.0 0.708304107189 -0.70586258173 0.0 0.867061376572 -0.498184144497 0.0 0.959074676037 -0.283059179783 0.0 0.99472028017 -0.102542191744 0.0 1.0 0.0 0.0 0.99472028017 0.102542191744 0.0 0.959074676037 0.283059179783 0.0 0.867061376572 0.498184144497 0.0 0.703268527985 0.664845705032 -0.251716673374 0.497054964304 0.812768936157 -0.3037507236 0.28241828084 0.895596206188 -0.343638420105 0.102420121431 0.927549064159 -0.359355449677 0.0 0.932828783989 -0.360271006823 -0.102420121431 0.927549064159 -0.359355449677 -0.28241828084 0.895596206188 -0.343638420105 -0.497054964304 0.812768936157 -0.3037507236 -0.703268527985 0.664845705032 -0.251716673374 -0.859675884247 0.466963708401 -0.206976532936 -0.948606848717 0.260536521673 -0.179570913315 -0.982085645199 0.0903042703867 -0.165349289775 -0.986968576908 0.0 -0.160740986466 -0.982085645199 -0.0903042703867 -0.165349289775 -0.948606848717 -0.260536521673 -0.179570913315 -0.859675884247 -0.466963708401 -0.206976532936 -0.703268527985 -0.664845705032 -0.251716673374 -0.497054964304 -0.812768936157 -0.3037507236 -0.28241828084 -0.895596206188 -0.343638420105 -0.102420121431 -0.927549064159 -0.359355449677 0.0 -0.932828783989 -0.360271006823 0.102420121431 -0.927549064159 -0.359355449677 0.28241828084 -0.895596206188 -0.343638420105 0.497054964304 -0.812768936157 -0.3037507236 0.703268527985 -0.664845705032 -0.251716673374 0.859675884247 -0.466963708401 -0.206976532936 0.948606848717 -0.260536521673 -0.179570913315 0.982085645199 -0.0903042703867 -0.165349289775 0.986968576908 0.0 -0.160740986466 0.982085645199 0.0903042703867 -0.165349289775 0.948606848717 0.260536521673 -0.179570913315 0.859675884247 0.466963708401 -0.206976532936 0.730185866356 0.526322185993 -0.43565171957 0.525254070759 0.645222306252 -0.554734945297 0.300485253334 0.699911475182 -0.647907972336 0.109012119472 0.717825889587 -0.687612533569 0.0 0.720664083958 -0.693258464336 -0.109012119472 0.717825889587 -0.687612533569 -0.300485253334 0.699911475182 -0.647907972336 -0.525254070759 0.645222306252 -0.554734945297 -0.730185866356 0.526322185993 -0.43565171957 -0.872676789761 0.35251930356 -0.337809383869 -0.944181621075 0.171849727631 -0.280953407288 -0.96649068594 0.0383922867477 -0.253730893135 -0.969237327576 0.0 -0.246101260185 -0.96649068594 -0.0383922867477 -0.253730893135 -0.944181621075 -0.171849727631 -0.280953407288 -0.872676789761 -0.35251930356 -0.337809383869 -0.730185866356 -0.526322185993 -0.43565171957 -0.525254070759 -0.645222306252 -0.554734945297 -0.300485253334 -0.699911475182 -0.647907972336 -0.109012119472 -0.717825889587 -0.687612533569 0.0 -0.720664083958 -0.693258464336 0.109012119472 -0.717825889587 -0.687612533569 0.300485253334 -0.699911475182 -0.647907972336 0.525254070759 -0.645222306252 -0.554734945297 0.730185866356 -0.526322185993 -0.43565171957 0.872676789761 -0.35251930356 -0.337809383869 0.944181621075 -0.171849727631 -0.280953407288 0.96649068594 -0.0383922867477 -0.253730893135 0.969237327576 0.0 -0.246101260185 0.96649068594 0.0383922867477 -0.253730893135 0.944181621075 0.171849727631 -0.280953407288 0.872676789761 0.35251930356 -0.337809383869 0.805078268051 0.319376200438 -0.499801635742 0.618213474751 0.432477802038 -0.656270027161 0.37369915843 0.489669471979 -0.787743747234 0.139896854758 0.511581778526 -0.847743153572 0.0 0.514908313751 -0.857203900814 -0.139896854758 0.511581778526 -0.847743153572 -0.37369915843 0.489669471979 -0.787743747234 -0.618213474751 0.432477802038 -0.656270027161 -0.805078268051 0.319376200438 -0.499801635742 -0.910214543343 0.165166169405 -0.379711300135 -0.949217200279 0.0211493279785 -0.313852339983 -0.956877350807 -0.0534073933959 -0.285500645638 -0.959959685802 0.0 -0.280037850142 -0.956877350807 0.0534073933959 -0.285500645638 -0.949217200279 -0.0211493279785 -0.313852339983 -0.910214543343 -0.165166169405 -0.379711300135 -0.805078268051 -0.319376200438 -0.499801635742 -0.618213474751 -0.432477802038 -0.656270027161 -0.37369915843 -0.489669471979 -0.787743747234 -0.139896854758 -0.511581778526 -0.847743153572 0.0 -0.514908313751 -0.857203900814 0.139896854758 -0.511581778526 -0.847743153572 0.37369915843 -0.489669471979 -0.787743747234 0.618213474751 -0.432477802038 -0.656270027161 0.805078268051 -0.319376200438 -0.499801635742 0.910214543343 -0.165166169405 -0.379711300135 0.949217200279 -0.0211493279785 -0.313852339983 0.956877350807 0.0534073933959 -0.285500645638 0.959959685802 0.0 -0.280037850142 0.956877350807 -0.0534073933959 -0.285500645638 0.949217200279 0.0211493279785 -0.313852339983 0.910214543343 0.165166169405 -0.379711300135 0.848689258099 0.113925598562 -0.516403675079 0.69353312254 0.23468734324 -0.681081593037 0.44599750638 0.315317243338 -0.837611019611 0.173924982548 0.356273084879 -0.918027281761 0.0 0.364635139704 -0.931119740009 -0.173924982548 0.356273084879 -0.918027281761 -0.44599750638 0.315317243338 -0.837611019611 -0.69353312254 0.23468734324 -0.681081593037 -0.848689258099 0.113925598562 -0.516403675079 -0.916257202625 -0.0246894750744 -0.399822980165 -0.930967152119 -0.132663965225 -0.340067744255 -0.935575425625 -0.147831663489 -0.320657968521 -0.946073770523 0.0 -0.32392346859 -0.935575425625 0.147831663489 -0.320657968521 -0.930967152119 0.132663965225 -0.340067744255 -0.916257202625 0.0246894750744 -0.399822980165 -0.848689258099 -0.113925598562 -0.516403675079 -0.69353312254 -0.23468734324 -0.681081593037 -0.44599750638 -0.315317243338 -0.837611019611 -0.173924982548 -0.356273084879 -0.918027281761 0.0 -0.364635139704 -0.931119740009 0.173924982548 -0.356273084879 -0.918027281761 0.44599750638 -0.315317243338 -0.837611019611 0.69353312254 -0.23468734324 -0.681081593037 0.848689258099 -0.113925598562 -0.516403675079 0.916257202625 0.0246894750744 -0.399822980165 0.930967152119 0.132663965225 -0.340067744255 0.935575425625 0.147831663489 -0.320657968521 0.946073770523 0.0 -0.32392346859 0.935575425625 -0.147831663489 -0.320657968521 0.930967152119 -0.132663965225 -0.340067744255 0.916257202625 -0.0246894750744 -0.399822980165 0.825708806515 -0.0907620489597 -0.556688129902 0.704672396183 0.057618945837 -0.707174897194 0.4717245996 0.168675795197 -0.865443885326 0.189275801182 0.229102447629 -0.95480209589 0.0 0.243324071169 -0.969939291477 -0.189275801182 0.229102447629 -0.95480209589 -0.4717245996 0.168675795197 -0.865443885326 -0.704672396183 0.057618945837 -0.707174897194 -0.825708806515 -0.0907620489597 -0.556688129902 -0.856257796288 -0.237006738782 -0.458937346935 -0.848811328411 -0.323313087225 -0.418256163597 -0.859370708466 -0.278481394053 -0.428815573454 -0.884945213795 0.0 -0.465620905161 -0.859370708466 0.278481394053 -0.428815573454 -0.848811328411 0.323313087225 -0.418256163597 -0.856257796288 0.237006738782 -0.458937346935 -0.825708806515 0.0907620489597 -0.556688129902 -0.704672396183 -0.057618945837 -0.707174897194 -0.4717245996 -0.168675795197 -0.865443885326 -0.189275801182 -0.229102447629 -0.95480209589 0.0 -0.243324071169 -0.969939291477 0.189275801182 -0.229102447629 -0.95480209589 0.4717245996 -0.168675795197 -0.865443885326 0.704672396183 -0.057618945837 -0.707174897194 0.825708806515 0.0907620489597 -0.556688129902 0.856257796288 0.237006738782 -0.458937346935 0.848811328411 0.323313087225 -0.418256163597 0.859370708466 0.278481394053 -0.428815573454 0.884945213795 0.0 -0.465620905161 0.859370708466 -0.278481394053 -0.428815573454 0.848811328411 -0.323343604803 -0.418256163597 0.856257796288 -0.237006738782 -0.458937346935 0.648091077805 -0.418683439493 -0.636097311974 0.620624423027 -0.191015347838 -0.760460197926 0.441877484322 -0.00585955381393 -0.89703053236 0.18286691606 0.0912198275328 -0.978881180286 0.0 0.115390487015 -0.993316471577 -0.18286691606 0.0912198275328 -0.978881180286 -0.441877484322 -0.00585955381393 -0.89703053236 -0.620624423027 -0.191015347838 -0.760460197926 -0.648091077805 -0.418683439493 -0.636097311974 -0.579088687897 -0.586199522018 -0.566545605659 -0.513107717037 -0.638081014156 -0.574053168297 -0.499038666487 -0.507156610489 -0.702627658844 -0.497665345669 0.0 -0.867366552353 -0.499038666487 0.507156610489 -0.702627658844 -0.513107717037 0.638081014156 -0.574053168297 -0.579088687897 0.586199522018 -0.566545605659 -0.648091077805 0.418683439493 -0.636097311974 -0.620624423027 0.191015347838 -0.760460197926 -0.441877484322 0.00585955381393 -0.89703053236 -0.18286691606 -0.0912198275328 -0.978881180286 0.0 -0.115390487015 -0.993316471577 0.18286691606 -0.0912198275328 -0.978881180286 0.441877484322 0.00585955381393 -0.89703053236 0.620624423027 0.191015347838 -0.760460197926 0.648091077805 0.418683439493 -0.636097311974 0.579088687897 0.586199522018 -0.566545605659 0.513107717037 0.638081014156 -0.574053168297 0.499038666487 0.507156610489 -0.702627658844 0.497665345669 0.0 -0.867366552353 0.499038666487 -0.507156610489 -0.702627658844 0.513107717037 -0.638081014156 -0.574053168297 0.579088687897 -0.586199522018 -0.566545605659 0.241706594825 -0.736289560795 -0.632007837296 0.374126404524 -0.519547104836 -0.768150866032 0.326395452023 -0.279946297407 -0.90279853344 0.145756408572 -0.143681138754 -0.97882014513 0.0 -0.106082342565 -0.994354069233 -0.145756408572 -0.143681138754 -0.97882014513 -0.326395452023 -0.279946297407 -0.90279853344 -0.374126404524 -0.519547104836 -0.768150866032 -0.241706594825 -0.736289560795 -0.632007837296 -0.0645466446877 -0.822107613087 -0.565630078316 0.0790124237537 -0.796380519867 -0.59956663847 0.201178014278 -0.59144872427 -0.780816078186 0.250007629395 0.0 -0.968230247498 0.201178014278 0.59144872427 -0.780816078186 0.0790124237537 0.796380519867 -0.59956663847 -0.0645466446877 0.822107613087 -0.565630078316 -0.241706594825 0.736289560795 -0.632007837296 -0.374126404524 0.519547104836 -0.768150866032 -0.326395452023 0.279946297407 -0.90279853344 -0.145756408572 0.143681138754 -0.97882014513 0.0 0.106082342565 -0.994354069233 0.145756408572 0.143681138754 -0.97882014513 0.326395452023 0.279946297407 -0.90279853344 0.374126404524 0.519547104836 -0.768150866032 0.241706594825 0.736289560795 -0.632007837296 0.0645466446877 0.822107613087 -0.565630078316 -0.0790124237537 0.796380519867 -0.59956663847 -0.201178014278 0.59144872427 -0.780816078186 -0.250007629395 0.0 -0.968230247498 -0.201178014278 -0.59144872427 -0.780816078186 -0.0790124237537 -0.796380519867 -0.59956663847 0.0645466446877 -0.822107613087 -0.565630078316 -0.122440263629 -0.839075922966 -0.530014932156 0.0574968717992 -0.741416692734 -0.668568968773 0.12546159327 -0.574510931969 -0.808801531792 0.0700399801135 -0.45854061842 -0.885891318321 0.0 -0.42210149765 -0.90652179718 -0.0700399801135 -0.45854061842 -0.885891318321 -0.12546159327 -0.574510931969 -0.808801531792 -0.0574968717992 -0.741416692734 -0.668568968773 0.122440263629 -0.839075922966 -0.530045449734 0.306070119143 -0.830713808537 -0.464980006218 0.469985038042 -0.740287482738 -0.480666518211 0.642597734928 -0.50608843565 -0.575243413448 0.743308842182 0.0 -0.668904662132 0.642597734928 0.50608843565 -0.575243413448 0.469985038042 0.740287482738 -0.480666518211 0.306070119143 0.830713808537 -0.464980006218 0.122440263629 0.839075922966 -0.530014932156 -0.0574968717992 0.741416692734 -0.668568968773 -0.12546159327 0.574510931969 -0.808801531792 -0.0700399801135 0.45854061842 -0.885891318321 0.0 0.42210149765 -0.90652179718 0.0700399801135 0.45854061842 -0.885891318321 0.12546159327 0.574510931969 -0.808801531792 0.0574968717992 0.741416692734 -0.668568968773 -0.122440263629 0.839075922966 -0.530045449734 -0.306070119143 0.830713808537 -0.464980006218 -0.469985038042 0.740287482738 -0.480666518211 -0.642597734928 0.50608843565 -0.575243413448 -0.743308842182 0.0 -0.668904662132 -0.642597734928 -0.50608843565 -0.575243413448 -0.469985038042 -0.740287482738 -0.480666518211 -0.306070119143 -0.830713808537 -0.464980006218 Faces 928 12 14 13 0 0 2 12 15 16 0 0 2 13 18 17 0 0 2 17 20 19 0 0 2 19 21 15 0 0 2 16 22 23 0 0 2 14 24 25 0 0 2 18 26 27 0 0 2 20 28 29 0 0 2 21 30 31 0 0 2 23 32 24 0 0 2 25 33 26 0 0 2 27 34 28 0 0 2 29 35 30 0 0 2 31 36 22 0 0 2 32 37 38 0 0 2 33 38 39 0 0 2 34 39 40 0 0 2 35 40 41 0 0 2 36 41 37 0 0 2 9 41 36 0 0 2 11 37 41 0 0 2 10 36 37 0 0 2 8 40 35 0 0 2 11 41 40 0 0 2 9 35 41 0 0 2 7 39 34 0 0 2 11 40 39 0 0 2 8 34 40 0 0 2 6 38 33 0 0 2 11 39 38 0 0 2 7 33 39 0 0 2 10 37 32 0 0 2 11 38 37 0 0 2 6 32 38 0 0 2 5 31 22 0 0 2 10 22 36 0 0 2 9 36 31 0 0 2 4 29 30 0 0 2 9 30 35 0 0 2 8 35 29 0 0 2 3 27 28 0 0 2 8 28 34 0 0 2 7 34 27 0 0 2 2 25 26 0 0 2 7 26 33 0 0 2 6 33 25 0 0 2 1 23 24 0 0 2 6 24 32 0 0 2 10 32 23 0 0 2 4 30 21 0 0 2 9 31 30 0 0 2 5 21 31 0 0 2 3 28 20 0 0 2 8 29 28 0 0 2 4 20 29 0 0 2 2 26 18 0 0 2 7 27 26 0 0 2 3 18 27 0 0 2 1 24 14 0 0 2 6 25 24 0 0 2 2 14 25 0 0 2 5 22 16 0 0 2 10 23 22 0 0 2 1 16 23 0 0 2 0 19 15 0 0 2 5 15 21 0 0 2 4 21 19 0 0 2 0 17 19 0 0 2 4 19 20 0 0 2 3 20 17 0 0 2 0 13 17 0 0 2 3 17 18 0 0 2 2 18 13 0 0 2 0 15 12 0 0 2 5 16 15 0 0 2 1 12 16 0 0 2 0 12 13 0 0 2 2 13 14 0 0 2 1 14 12 0 0 2 54 56 55 0 0 2 54 57 58 0 0 2 55 60 59 0 0 2 59 62 61 0 0 2 61 63 57 0 0 2 58 64 65 0 0 2 56 66 67 0 0 2 60 68 69 0 0 2 62 70 71 0 0 2 63 72 73 0 0 2 65 74 66 0 0 2 67 75 68 0 0 2 69 76 70 0 0 2 71 77 72 0 0 2 73 78 64 0 0 2 74 79 80 0 0 2 75 80 81 0 0 2 76 81 82 0 0 2 77 82 83 0 0 2 78 83 79 0 0 2 51 83 78 0 0 2 53 79 83 0 0 2 52 78 79 0 0 2 50 82 77 0 0 2 53 83 82 0 0 2 51 77 83 0 0 2 49 81 76 0 0 2 53 82 81 0 0 2 50 76 82 0 0 2 48 80 75 0 0 2 53 81 80 0 0 2 49 75 81 0 0 2 52 79 74 0 0 2 53 80 79 0 0 2 48 74 80 0 0 2 47 73 64 0 0 2 52 64 78 0 0 2 51 78 73 0 0 2 46 71 72 0 0 2 51 72 77 0 0 2 50 77 71 0 0 2 45 69 70 0 0 2 50 70 76 0 0 2 49 76 69 0 0 2 44 67 68 0 0 2 49 68 75 0 0 2 48 75 67 0 0 2 43 65 66 0 0 2 48 66 74 0 0 2 52 74 65 0 0 2 46 72 63 0 0 2 51 73 72 0 0 2 47 63 73 0 0 2 45 70 62 0 0 2 50 71 70 0 0 2 46 62 71 0 0 2 44 68 60 0 0 2 49 69 68 0 0 2 45 60 69 0 0 2 43 66 56 0 0 2 48 67 66 0 0 2 44 56 67 0 0 2 47 64 58 0 0 2 52 65 64 0 0 2 43 58 65 0 0 2 42 61 57 0 0 2 47 57 63 0 0 2 46 63 61 0 0 2 42 59 61 0 0 2 46 61 62 0 0 2 45 62 59 0 0 2 42 55 59 0 0 2 45 59 60 0 0 2 44 60 55 0 0 2 42 57 54 0 0 2 47 58 57 0 0 2 43 54 58 0 0 2 42 54 55 0 0 2 44 55 56 0 0 2 43 56 54 0 0 2 84 116 147 115 0 0 116 84 85 117 0 0 86 118 117 85 0 0 87 119 118 86 0 0 88 120 119 87 0 0 89 121 120 88 0 0 90 122 121 89 0 0 91 123 122 90 0 0 92 124 123 91 0 0 93 125 124 92 0 0 94 126 125 93 0 0 95 127 126 94 0 0 96 128 127 95 1 1 97 129 128 96 1 1 98 130 129 97 0 0 99 131 130 98 0 0 100 132 131 99 0 0 101 133 132 100 0 0 102 134 133 101 0 0 103 135 134 102 0 0 104 136 135 103 0 0 105 137 136 104 0 0 106 138 137 105 0 0 107 139 138 106 0 0 108 140 139 107 0 0 109 141 140 108 0 0 110 142 141 109 0 0 111 143 142 110 0 0 112 144 143 111 1 1 113 145 144 112 1 1 114 146 145 113 0 0 115 147 146 114 0 0 116 148 179 147 0 0 117 149 148 116 0 0 118 150 149 117 0 0 119 151 150 118 0 0 120 152 151 119 0 0 121 153 152 120 0 0 122 154 153 121 0 0 123 155 154 122 0 0 124 156 155 123 0 0 125 157 156 124 0 0 126 158 157 125 0 0 127 159 158 126 0 0 128 160 159 127 1 1 129 161 160 128 1 1 130 162 161 129 0 0 131 163 162 130 0 0 132 164 163 131 0 0 133 165 164 132 0 0 134 166 165 133 0 0 135 167 166 134 0 0 136 168 167 135 0 0 137 169 168 136 0 0 138 170 169 137 0 0 139 171 170 138 0 0 140 172 171 139 0 0 141 173 172 140 0 0 142 174 173 141 0 0 143 175 174 142 0 0 144 176 175 143 1 1 145 177 176 144 1 1 146 178 177 145 0 0 147 179 178 146 0 0 148 180 211 179 0 0 149 181 180 148 0 0 150 182 181 149 0 0 151 183 182 150 0 0 152 184 183 151 0 0 153 185 184 152 0 0 154 186 185 153 0 0 155 187 186 154 0 0 156 188 187 155 0 0 157 189 188 156 0 0 158 190 189 157 0 0 159 191 190 158 0 0 160 192 191 159 1 1 161 193 192 160 1 1 162 194 193 161 0 0 163 195 194 162 0 0 164 196 195 163 0 0 165 197 196 164 0 0 166 198 197 165 0 0 167 199 198 166 0 0 168 200 199 167 0 0 169 201 200 168 0 0 170 202 201 169 0 0 171 203 202 170 0 0 172 204 203 171 0 0 173 205 204 172 0 0 174 206 205 173 0 0 175 207 206 174 0 0 176 208 207 175 1 1 177 209 208 176 1 1 178 210 209 177 0 0 179 211 210 178 0 0 180 212 243 211 0 0 181 213 212 180 0 0 182 214 213 181 0 0 183 215 214 182 0 0 184 216 215 183 0 0 185 217 216 184 0 0 186 218 217 185 0 0 187 219 218 186 0 0 188 220 219 187 0 0 189 221 220 188 0 0 190 222 221 189 0 0 191 223 222 190 0 0 192 224 223 191 1 1 193 225 224 192 1 1 194 226 225 193 0 0 195 227 226 194 0 0 196 228 227 195 0 0 197 229 228 196 0 0 198 230 229 197 0 0 199 231 230 198 0 0 200 232 231 199 0 0 201 233 232 200 0 0 202 234 233 201 0 0 203 235 234 202 0 0 204 236 235 203 0 0 205 237 236 204 0 0 206 238 237 205 0 0 207 239 238 206 0 0 208 240 239 207 1 1 209 241 240 208 1 1 210 242 241 209 0 0 211 243 242 210 0 0 212 244 275 243 0 0 213 245 244 212 0 0 214 246 245 213 0 0 215 247 246 214 0 0 216 248 247 215 0 0 217 249 248 216 0 0 218 250 249 217 0 0 219 251 250 218 0 0 220 252 251 219 0 0 221 253 252 220 0 0 222 254 253 221 0 0 223 255 254 222 0 0 224 256 255 223 1 1 225 257 256 224 1 1 226 258 257 225 0 0 227 259 258 226 0 0 228 260 259 227 0 0 229 261 260 228 0 0 230 262 261 229 0 0 231 263 262 230 0 0 232 264 263 231 0 0 233 265 264 232 0 0 234 266 265 233 0 0 235 267 266 234 0 0 236 268 267 235 0 0 237 269 268 236 0 0 238 270 269 237 0 0 239 271 270 238 0 0 240 272 271 239 1 1 241 273 272 240 1 1 242 274 273 241 0 0 243 275 274 242 0 0 244 276 307 275 0 0 245 277 276 244 0 0 246 278 277 245 0 0 247 279 278 246 0 0 248 280 279 247 0 0 249 281 280 248 0 0 250 282 281 249 0 0 251 283 282 250 0 0 252 284 283 251 0 0 253 285 284 252 0 0 254 286 285 253 0 0 255 287 286 254 0 0 256 288 287 255 1 1 257 289 288 256 1 1 258 290 289 257 0 0 259 291 290 258 0 0 260 292 291 259 0 0 261 293 292 260 0 0 262 294 293 261 0 0 263 295 294 262 0 0 264 296 295 263 0 0 265 297 296 264 0 0 266 298 297 265 0 0 267 299 298 266 0 0 268 300 299 267 0 0 269 301 300 268 0 0 270 302 301 269 0 0 271 303 302 270 0 0 272 304 303 271 1 1 273 305 304 272 1 1 274 306 305 273 0 0 275 307 306 274 0 0 276 308 339 307 0 0 277 309 308 276 0 0 278 310 309 277 0 0 279 311 310 278 0 0 280 312 311 279 0 0 281 313 312 280 0 0 282 314 313 281 0 0 283 315 314 282 0 0 284 316 315 283 0 0 285 317 316 284 0 0 286 318 317 285 0 0 287 319 318 286 0 0 288 320 319 287 1 1 289 321 320 288 1 1 290 322 321 289 0 0 291 323 322 290 0 0 292 324 323 291 0 0 293 325 324 292 0 0 294 326 325 293 0 0 295 327 326 294 0 0 296 328 327 295 0 0 297 329 328 296 0 0 298 330 329 297 0 0 299 331 330 298 0 0 300 332 331 299 0 0 301 333 332 300 0 0 302 334 333 301 0 0 303 335 334 302 0 0 304 336 335 303 1 1 305 337 336 304 1 1 306 338 337 305 0 0 307 339 338 306 0 0 308 340 371 339 0 0 309 341 340 308 0 0 310 342 341 309 0 0 311 343 342 310 0 0 312 344 343 311 0 0 313 345 344 312 0 0 314 346 345 313 0 0 315 347 346 314 0 0 316 348 347 315 0 0 317 349 348 316 0 0 318 350 349 317 0 0 319 351 350 318 0 0 320 352 351 319 1 1 321 353 352 320 1 1 322 354 353 321 0 0 323 355 354 322 0 0 324 356 355 323 0 0 325 357 356 324 0 0 326 358 357 325 0 0 327 359 358 326 0 0 328 360 359 327 0 0 329 361 360 328 0 0 330 362 361 329 0 0 331 363 362 330 0 0 332 364 363 331 0 0 333 365 364 332 0 0 334 366 365 333 0 0 335 367 366 334 0 0 336 368 367 335 1 1 337 369 368 336 1 1 338 370 369 337 0 0 339 371 370 338 0 0 340 372 403 371 0 0 341 373 372 340 0 0 342 374 373 341 0 0 343 375 374 342 0 0 344 376 375 343 0 0 345 377 376 344 0 0 346 378 377 345 0 0 347 379 378 346 0 0 348 380 379 347 0 0 349 381 380 348 0 0 350 382 381 349 0 0 351 383 382 350 0 0 352 384 383 351 1 1 353 385 384 352 1 1 354 386 385 353 0 0 355 387 386 354 0 0 356 388 387 355 0 0 357 389 388 356 0 0 358 390 389 357 0 0 359 391 390 358 0 0 360 392 391 359 0 0 361 393 392 360 0 0 362 394 393 361 0 0 363 395 394 362 0 0 364 396 395 363 0 0 365 397 396 364 0 0 366 398 397 365 0 0 367 399 398 366 0 0 368 400 399 367 1 1 369 401 400 368 1 1 370 402 401 369 0 0 371 403 402 370 0 0 372 404 435 403 0 0 373 405 404 372 0 0 374 406 405 373 0 0 375 407 406 374 0 0 376 408 407 375 0 0 377 409 408 376 0 0 378 410 409 377 0 0 379 411 410 378 0 0 380 412 411 379 0 0 381 413 412 380 0 0 382 414 413 381 0 0 383 415 414 382 0 0 384 416 415 383 1 1 385 417 416 384 1 1 386 418 417 385 0 0 387 419 418 386 0 0 388 420 419 387 0 0 389 421 420 388 0 0 390 422 421 389 0 0 391 423 422 390 0 0 392 424 423 391 0 0 393 425 424 392 0 0 394 426 425 393 0 0 395 427 426 394 0 0 396 428 427 395 0 0 397 429 428 396 0 0 398 430 429 397 0 0 399 431 430 398 0 0 400 432 431 399 1 1 401 433 432 400 1 1 402 434 433 401 0 0 403 435 434 402 0 0 404 436 467 435 0 0 405 437 436 404 0 0 406 438 437 405 0 0 407 439 438 406 0 0 408 440 439 407 0 0 409 441 440 408 0 0 410 442 441 409 0 0 411 443 442 410 0 0 412 444 443 411 0 0 413 445 444 412 0 0 414 446 445 413 0 0 415 447 446 414 0 0 416 448 447 415 1 1 417 449 448 416 1 1 418 450 449 417 0 0 419 451 450 418 0 0 420 452 451 419 0 0 421 453 452 420 0 0 422 454 453 421 0 0 423 455 454 422 0 0 424 456 455 423 0 0 425 457 456 424 0 0 426 458 457 425 0 0 427 459 458 426 0 0 428 460 459 427 0 0 429 461 460 428 0 0 430 462 461 429 0 0 431 463 462 430 0 0 432 464 463 431 1 1 433 465 464 432 1 1 434 466 465 433 0 0 435 467 466 434 0 0 436 468 499 467 0 0 437 469 468 436 0 0 438 470 469 437 0 0 439 471 470 438 0 0 440 472 471 439 0 0 441 473 472 440 0 0 442 474 473 441 0 0 443 475 474 442 0 0 444 476 475 443 0 0 445 477 476 444 0 0 446 478 477 445 0 0 447 479 478 446 0 0 448 480 479 447 1 1 449 481 480 448 1 1 450 482 481 449 0 0 451 483 482 450 0 0 452 484 483 451 0 0 453 485 484 452 0 0 454 486 485 453 0 0 455 487 486 454 0 0 456 488 487 455 0 0 457 489 488 456 0 0 458 490 489 457 0 0 459 491 490 458 0 0 460 492 491 459 0 0 461 493 492 460 0 0 462 494 493 461 0 0 463 495 494 462 0 0 464 496 495 463 1 1 465 497 496 464 1 1 466 498 497 465 0 0 467 499 498 466 0 0 468 500 531 499 0 0 469 501 500 468 0 0 470 502 501 469 0 0 471 503 502 470 0 0 472 504 503 471 0 0 473 505 504 472 0 0 474 506 505 473 0 0 475 507 506 474 0 0 476 508 507 475 0 0 477 509 508 476 0 0 478 510 509 477 0 0 479 511 510 478 0 0 480 512 511 479 1 1 481 513 512 480 1 1 482 514 513 481 0 0 483 515 514 482 0 0 484 516 515 483 0 0 485 517 516 484 0 0 486 518 517 485 0 0 487 519 518 486 0 0 488 520 519 487 0 0 489 521 520 488 0 0 490 522 521 489 0 0 491 523 522 490 0 0 492 524 523 491 0 0 493 525 524 492 0 0 494 526 525 493 0 0 495 527 526 494 0 0 496 528 527 495 1 1 497 529 528 496 1 1 498 530 529 497 0 0 499 531 530 498 0 0 500 532 563 531 0 0 501 533 532 500 0 0 502 534 533 501 0 0 503 535 534 502 0 0 504 536 535 503 0 0 505 537 536 504 0 0 506 538 537 505 0 0 507 539 538 506 0 0 508 540 539 507 0 0 509 541 540 508 0 0 510 542 541 509 0 0 511 543 542 510 0 0 512 544 543 511 1 1 513 545 544 512 1 1 514 546 545 513 0 0 515 547 546 514 0 0 516 548 547 515 0 0 517 549 548 516 0 0 518 550 549 517 0 0 519 551 550 518 0 0 520 552 551 519 0 0 521 553 552 520 0 0 522 554 553 521 0 0 523 555 554 522 0 0 524 556 555 523 0 0 525 557 556 524 0 0 526 558 557 525 0 0 527 559 558 526 0 0 528 560 559 527 1 1 529 561 560 528 1 1 530 562 561 529 0 0 531 563 562 530 0 0 532 564 595 563 0 0 533 565 564 532 0 0 534 566 565 533 0 0 535 567 566 534 0 0 536 568 567 535 0 0 537 569 568 536 0 0 538 570 569 537 0 0 539 571 570 538 0 0 540 572 571 539 0 0 541 573 572 540 0 0 542 574 573 541 0 0 543 575 574 542 0 0 544 576 575 543 1 1 545 577 576 544 1 1 546 578 577 545 0 0 547 579 578 546 0 0 548 580 579 547 0 0 549 581 580 548 0 0 550 582 581 549 0 0 551 583 582 550 0 0 552 584 583 551 0 0 553 585 584 552 0 0 554 586 585 553 0 0 555 587 586 554 0 0 556 588 587 555 0 0 557 589 588 556 0 0 558 590 589 557 0 0 559 591 590 558 0 0 560 592 591 559 1 1 561 593 592 560 1 1 562 594 593 561 0 0 563 595 594 562 0 0 564 596 627 595 0 0 565 597 596 564 0 0 566 598 597 565 0 0 567 599 598 566 0 0 568 600 599 567 0 0 569 601 600 568 0 0 570 602 601 569 0 0 571 603 602 570 0 0 572 604 603 571 0 0 573 605 604 572 0 0 574 606 605 573 0 0 575 607 606 574 0 0 576 608 607 575 1 1 577 609 608 576 1 1 578 610 609 577 0 0 579 611 610 578 0 0 580 612 611 579 0 0 581 613 612 580 0 0 582 614 613 581 0 0 583 615 614 582 0 0 584 616 615 583 0 0 585 617 616 584 0 0 586 618 617 585 0 0 587 619 618 586 0 0 588 620 619 587 0 0 589 621 620 588 0 0 590 622 621 589 0 0 591 623 622 590 0 0 592 624 623 591 1 1 593 625 624 592 1 1 594 626 625 593 0 0 595 627 626 594 0 0 596 628 659 627 0 0 597 629 628 596 0 0 598 630 629 597 0 0 599 631 630 598 0 0 600 632 631 599 0 0 601 633 632 600 0 0 602 634 633 601 0 0 603 635 634 602 0 0 604 636 635 603 0 0 605 637 636 604 0 0 606 638 637 605 0 0 607 639 638 606 0 0 608 640 639 607 1 1 609 641 640 608 1 1 610 642 641 609 0 0 611 643 642 610 0 0 612 644 643 611 0 0 613 645 644 612 0 0 614 646 645 613 0 0 615 647 646 614 0 0 616 648 647 615 0 0 617 649 648 616 0 0 618 650 649 617 0 0 619 651 650 618 0 0 620 652 651 619 0 0 621 653 652 620 0 0 622 654 653 621 0 0 623 655 654 622 0 0 624 656 655 623 1 1 625 657 656 624 1 1 626 658 657 625 0 0 627 659 658 626 0 0 628 660 691 659 0 0 629 661 660 628 0 0 630 662 661 629 0 0 631 663 662 630 0 0 632 664 663 631 0 0 633 665 664 632 0 0 634 666 665 633 0 0 635 667 666 634 0 0 636 668 667 635 0 0 637 669 668 636 0 0 638 670 669 637 0 0 639 671 670 638 0 0 640 672 671 639 1 1 641 673 672 640 1 1 642 674 673 641 0 0 643 675 674 642 0 0 644 676 675 643 0 0 645 677 676 644 0 0 646 678 677 645 0 0 647 679 678 646 0 0 648 680 679 647 0 0 649 681 680 648 0 0 650 682 681 649 0 0 651 683 682 650 0 0 652 684 683 651 0 0 653 685 684 652 0 0 654 686 685 653 0 0 655 687 686 654 0 0 656 688 687 655 1 1 657 689 688 656 1 1 658 690 689 657 0 0 659 691 690 658 0 0 660 692 723 691 0 0 661 693 692 660 0 0 662 694 693 661 0 0 663 695 694 662 0 0 664 696 695 663 0 0 665 697 696 664 0 0 666 698 697 665 0 0 667 699 698 666 0 0 668 700 699 667 0 0 669 701 700 668 0 0 670 702 701 669 0 0 671 703 702 670 0 0 672 704 703 671 1 1 673 705 704 672 1 1 674 706 705 673 0 0 675 707 706 674 0 0 676 708 707 675 0 0 677 709 708 676 0 0 678 710 709 677 0 0 679 711 710 678 0 0 680 712 711 679 0 0 681 713 712 680 0 0 682 714 713 681 0 0 683 715 714 682 0 0 684 716 715 683 0 0 685 717 716 684 0 0 686 718 717 685 0 0 687 719 718 686 0 0 688 720 719 687 1 1 689 721 720 688 1 1 690 722 721 689 0 0 691 723 722 690 0 0 692 724 755 723 0 0 693 725 724 692 0 0 694 726 725 693 0 0 695 727 726 694 0 0 696 728 727 695 0 0 697 729 728 696 0 0 698 730 729 697 0 0 699 731 730 698 0 0 700 732 731 699 0 0 701 733 732 700 0 0 702 734 733 701 0 0 703 735 734 702 0 0 704 736 735 703 1 1 705 737 736 704 1 1 706 738 737 705 0 0 707 739 738 706 0 0 708 740 739 707 0 0 709 741 740 708 0 0 710 742 741 709 0 0 711 743 742 710 0 0 712 744 743 711 0 0 713 745 744 712 0 0 714 746 745 713 0 0 715 747 746 714 0 0 716 748 747 715 0 0 717 749 748 716 0 0 718 750 749 717 0 0 719 751 750 718 0 0 720 752 751 719 1 1 721 753 752 720 1 1 722 754 753 721 0 0 723 755 754 722 0 0 724 756 787 755 0 0 725 757 756 724 0 0 726 758 757 725 0 0 727 759 758 726 0 0 728 760 759 727 0 0 729 761 760 728 0 0 730 762 761 729 0 0 731 763 762 730 0 0 732 764 763 731 0 0 733 765 764 732 0 0 734 766 765 733 0 0 735 767 766 734 0 0 736 768 767 735 1 1 737 769 768 736 1 1 738 770 769 737 0 0 739 771 770 738 0 0 740 772 771 739 0 0 741 773 772 740 0 0 742 774 773 741 0 0 743 775 774 742 0 0 744 776 775 743 0 0 745 777 776 744 0 0 746 778 777 745 0 0 747 779 778 746 0 0 748 780 779 747 0 0 749 781 780 748 0 0 750 782 781 749 0 0 751 783 782 750 0 0 752 784 783 751 1 1 753 785 784 752 1 1 754 786 785 753 0 0 755 787 786 754 0 0 756 788 819 787 0 0 757 789 788 756 0 0 758 790 789 757 0 0 759 791 790 758 0 0 760 792 791 759 0 0 761 793 792 760 0 0 762 794 793 761 0 0 763 795 794 762 0 0 764 796 795 763 0 0 765 797 796 764 0 0 766 798 797 765 0 0 767 799 798 766 0 0 768 800 799 767 1 1 769 801 800 768 1 1 770 802 801 769 0 0 771 803 802 770 0 0 772 804 803 771 0 0 773 805 804 772 0 0 774 806 805 773 0 0 775 807 806 774 0 0 776 808 807 775 0 0 777 809 808 776 0 0 778 810 809 777 0 0 779 811 810 778 0 0 780 812 811 779 0 0 781 813 812 780 0 0 782 814 813 781 0 0 783 815 814 782 0 0 784 816 815 783 1 1 785 817 816 784 1 1 786 818 817 785 0 0 787 819 818 786 0 0 788 820 851 819 0 0 789 821 820 788 0 0 790 822 821 789 0 0 791 823 822 790 0 0 792 824 823 791 0 0 793 825 824 792 0 0 794 826 825 793 0 0 795 827 826 794 0 0 796 828 827 795 0 0 797 829 828 796 0 0 798 830 829 797 0 0 799 831 830 798 0 0 800 832 831 799 1 1 801 833 832 800 1 1 802 834 833 801 0 0 803 835 834 802 0 0 804 836 835 803 0 0 805 837 836 804 0 0 806 838 837 805 0 0 807 839 838 806 0 0 808 840 839 807 0 0 809 841 840 808 0 0 810 842 841 809 0 0 811 843 842 810 0 0 812 844 843 811 0 0 813 845 844 812 0 0 814 846 845 813 0 0 815 847 846 814 0 0 816 848 847 815 1 1 817 849 848 816 1 1 818 850 849 817 0 0 819 851 850 818 0 0 820 84 115 851 0 0 84 820 821 85 0 0 822 86 85 821 0 0 823 87 86 822 0 0 824 88 87 823 0 0 825 89 88 824 0 0 826 90 89 825 0 0 827 91 90 826 0 0 828 92 91 827 0 0 829 93 92 828 0 0 830 94 93 829 0 0 831 95 94 830 0 0 832 96 95 831 1 1 833 97 96 832 1 1 834 98 97 833 0 0 835 99 98 834 0 0 836 100 99 835 0 0 837 101 100 836 0 0 838 102 101 837 0 0 839 103 102 838 0 0 840 104 103 839 0 0 841 105 104 840 0 0 842 106 105 841 0 0 843 107 106 842 0 0 844 108 107 843 0 0 845 109 108 844 0 0 846 110 109 845 0 0 847 111 110 846 0 0 848 112 111 847 1 1 849 113 112 848 1 1 850 114 113 849 0 0 851 115 114 850 0 0 criticalmass-1.0.0.orig/data/models/TheEyeBlue.model0000644000175000017500000001752510265636020021622 0ustar danieldanielName TheEye Scale 1.0 1.0 1.0 Colors 4 1.0 0.0 0.0 0.927171647549 0.890757441521 0.235301926732 1.0 1.0 1.0 0.0 0.47338449955 1.0 Vertices 73 2.59879100323e-08 5.88935059693e-09 0.890612289899 4.84984101997e-08 -0.340822578699 0.822818439609 6.3625465267e-08 -0.629758000374 0.629757962837 6.90661189463e-08 -0.822818439609 0.340822578699 6.39920837991e-08 -0.890612289899 -2.39827013243e-08 4.91758308843e-08 -0.822818439609 -0.340822653772 2.68730090593e-08 -0.629758000374 -0.629758000374 0.445306178569 -0.44530611133 -0.629758075447 0.581820590616 -0.581820427691 -0.340822653772 0.629758047919 -0.629757915292 -6.51255718126e-08 0.581820590616 -0.581820427691 0.340822578699 0.445306216106 -0.44530611133 0.629757962837 0.240998004955 -0.240997931028 0.822818439609 0.340822616235 5.64480437474e-08 0.822818439609 0.629758000374 1.00433448024e-07 0.629757962837 0.822818439609 1.46440747768e-07 0.340822578699 0.890612289899 1.25150804102e-07 -7.59524076009e-08 0.822818439609 1.41933230596e-07 -0.340822653772 0.629758000374 9.21046491541e-08 -0.629758075447 0.445306073794 0.445306253642 -0.629758075447 0.581820390155 0.581820628153 -0.340822653772 0.629757877755 0.629758122992 -8.62641025329e-08 0.581820390155 0.581820628153 0.340822578699 0.44530611133 0.445306253642 0.629757962837 0.240997931028 0.240998004955 0.822818439609 -5.46570848583e-08 0.340822578699 0.822818439609 -1.33042276353e-07 0.629758000374 0.629757962837 -1.90024296237e-07 0.822818439609 0.340822578699 -2.07697854118e-07 0.890612289899 -9.00202012793e-08 -2.09914587096e-07 0.822818439609 -0.340822653772 -1.69794739273e-07 0.629758000374 -0.629758075447 -0.445306291179 0.445306036257 -0.629758075447 -0.581820665689 0.581820352618 -0.340822653772 -0.629758198065 0.629757840219 -8.50204313397e-08 -0.581820665689 0.581820352618 0.340822578699 -0.445306253642 0.445306036257 0.629757962837 -0.240998004955 0.240997893492 0.822818439609 -0.340822541162 -9.86505733963e-08 0.822818439609 -0.629758000374 -1.98273911973e-07 0.629757962837 -0.822818439609 -2.4810248894e-07 0.340822578699 -0.890612364972 -2.8440470176e-07 -7.41935910766e-08 -0.822818439609 -2.52609997163e-07 -0.340822653772 -0.629758000374 -2.06602706368e-07 -0.629758075447 -0.445306036257 -0.445306328715 -0.629758075447 -0.581820315082 -0.581820703226 -0.340822653772 -0.629757840219 -0.629758273138 -6.38819006193e-08 -0.581820315082 -0.581820703226 0.340822578699 -0.445305998721 -0.445306328715 0.629757962837 -0.240997855955 -0.240998042491 0.822818439609 -0.445306036257 -0.445306328715 -0.629758075447 -0.629758000374 -2.06602706368e-07 -0.629758075447 -0.445306291179 0.445306036257 -0.629758075447 -1.69794739273e-07 0.629758000374 -0.629758075447 0.445306073794 0.445306253642 -0.629758075447 0.629758000374 9.21046491541e-08 -0.629758075447 0.445306178569 -0.44530611133 -0.629758075447 2.68730090593e-08 -0.629758000374 -0.629758000374 2.00930831496e-07 -2.7709352617 -2.5190320015 -0.178122228075 -2.69715442788 -2.5190320015 -0.251902994953 -2.51903202051 -2.5190320015 -0.178122330044 -2.34090960201 -2.5190320015 1.22263723095e-07 -2.26712874129 -2.5190320015 0.178122627206 -2.34090957511 -2.5190320015 0.251903375317 -2.51903198248 -2.5190320015 0.17812267287 -2.69715440098 -2.5190320015 -7.39326980433e-08 -3.74717409307 -3.14879000187 -3.49119944929 -4.30106958521 -4.14879003953 -1.76332203069 -2.51903213462 -3.14879000187 -1.24685739509 -1.27217520508 -3.14879000187 -2.85243697935e-07 -1.7557092177 -3.14879000187 1.24685728689 -1.27217501681 -3.14879000187 1.76332241105 -2.51903186837 -3.14879000187 3.49120069932 -4.30106905806 -4.14879003953 Normals 73 0.0 0.0 0.629758000374 2.00907529857e-08 -0.266110094218 0.570754823465 3.46894149085e-08 -0.459475236007 0.430646301667 4.42312868782e-08 -0.585861163438 0.230977260979 4.75454058346e-08 -0.629758000374 0.0 4.42312868782e-08 -0.585861163438 -0.230977260979 3.95314512885e-08 -0.523609953019 -0.34986767449 0.370240150878 -0.370240094973 -0.34986767449 0.41425230327 -0.41425224072 -0.230977260979 0.445291426723 -0.445291359486 0.0 0.41425230327 -0.41425224072 0.230977260979 0.324901871309 -0.324901822251 0.430646301667 0.188175941058 -0.188175912644 0.570754823465 0.266110094218 2.00907529857e-08 0.570754823465 0.459475236007 3.46894149085e-08 0.430646301667 0.585861163438 4.42312868782e-08 0.230977260979 0.629758000374 4.75454058346e-08 0.0 0.585861163438 4.42312868782e-08 -0.230977260979 0.523609953019 3.95314512885e-08 -0.34986767449 0.370240094973 0.370240150878 -0.34986767449 0.41425224072 0.41425230327 -0.230977260979 0.445291359486 0.445291426723 0.0 0.41425224072 0.41425230327 0.230977260979 0.324901822251 0.324901871309 0.430646301667 0.188175912644 0.188175941058 0.570754823465 -2.00907529857e-08 0.266110094218 0.570754823465 -3.46894149085e-08 0.459475236007 0.430646301667 -4.42312868782e-08 0.585861163438 0.230977260979 -4.75454058346e-08 0.629758000374 0.0 -4.42312868782e-08 0.585861163438 -0.230977260979 -3.95314512885e-08 0.523609953019 -0.34986767449 -0.370240150878 0.370240094973 -0.34986767449 -0.41425230327 0.41425224072 -0.230977260979 -0.445291426723 0.445291359486 0.0 -0.41425230327 0.41425224072 0.230977260979 -0.324901871309 0.324901822251 0.430646301667 -0.188175941058 0.188175912644 0.570754823465 -0.266110094218 -2.00907529857e-08 0.570754823465 -0.459475236007 -3.46894149085e-08 0.430646301667 -0.585861163438 -4.42312868782e-08 0.230977260979 -0.629758000374 -4.75454058346e-08 0.0 -0.585861163438 -4.42312868782e-08 -0.230977260979 -0.523609953019 -3.95314512885e-08 -0.34986767449 -0.370240094973 -0.370240150878 -0.34986767449 -0.41425224072 -0.41425230327 -0.230977260979 -0.445291359486 -0.445291426723 0.0 -0.41425224072 -0.41425230327 0.230977260979 -0.324901822251 -0.324901871309 0.430646301667 -0.188175912644 -0.188175941058 0.570754823465 0.458225960414 0.308257989979 -0.3026267106 -0.559434686513 0.11502732095 -0.265264434366 -0.248389941975 0.308257936631 -0.489745572021 -2.5971716932e-08 0.344005824206 -0.527473022113 0.24838989543 0.308257974137 -0.489745572021 0.559434669145 0.115027405422 -0.265264434366 0.45822600696 -0.308257920789 0.3026267106 -3.14565531417e-08 0.41665468319 -0.472198383474 -2.78885058221e-08 0.369394463074 -0.510021927011 0.218157978711 0.299186469134 -0.509387672738 -0.465202550343 -0.0678825184777 0.418980219629 -0.189751914203 -0.019200071121 -0.600160318474 4.04252747063e-09 -0.0535449003257 -0.627470901313 0.189751917102 -0.0192000424692 -0.600160318474 0.465202560593 -0.067882448234 0.418980219629 0.218158023886 -0.299186436193 0.509387672738 -2.53985665268e-08 0.336414216842 -0.532354719259 0.175356650953 0.214813850046 -0.565411877783 -0.241490200776 -0.0282523543666 0.580921810225 -0.133247250788 0.222386234191 0.573906801066 -3.34415404857e-08 0.442946637976 0.447636148233 0.133247217209 0.222386254311 0.573906801066 0.241490205042 -0.0282523179026 0.580921810225 0.175356683389 -0.214813823568 0.565411877783 Faces 64 6 7 8 5 0 1 5 8 9 4 0 1 4 9 10 3 0 1 3 10 11 2 0 1 2 11 12 1 0 2 12 0 1 0 0 0 0 12 13 0 0 0 12 11 14 13 0 2 11 10 15 14 0 1 10 9 16 15 0 1 9 8 17 16 0 1 8 7 18 17 0 1 18 19 20 17 0 1 17 20 21 16 0 1 16 21 22 15 0 1 15 22 23 14 0 1 14 23 24 13 0 2 24 0 13 0 0 0 0 24 25 0 0 0 24 23 26 25 0 2 23 22 27 26 0 1 22 21 28 27 0 1 21 20 29 28 0 1 20 19 30 29 0 1 30 31 32 29 0 1 29 32 33 28 0 1 28 33 34 27 0 1 27 34 35 26 0 1 26 35 36 25 0 2 36 0 25 0 0 0 0 36 37 0 0 0 36 35 38 37 0 2 35 34 39 38 0 1 34 33 40 39 0 1 33 32 41 40 0 1 32 31 42 41 0 1 42 43 44 41 0 1 41 44 45 40 0 1 40 45 46 39 0 1 39 46 47 38 0 1 38 47 48 37 0 2 48 0 37 0 0 0 0 48 1 0 0 0 48 47 2 1 0 2 47 46 3 2 0 1 46 45 4 3 0 1 45 44 5 4 0 1 44 43 6 5 0 1 49 56 57 58 0 1 49 50 59 58 0 1 50 51 60 59 0 1 51 52 61 60 0 1 52 53 62 61 0 1 53 54 63 62 0 1 54 55 64 63 0 1 55 56 57 64 0 1 58 57 65 66 0 3 58 59 67 66 0 3 59 60 68 67 0 3 60 61 69 68 0 3 61 62 70 69 0 3 62 63 71 70 0 3 63 64 72 71 0 3 64 57 65 72 0 3 criticalmass-1.0.0.orig/data/models/MapleLeaf.model0000644000175000017500000001116407630537344021461 0ustar danieldanielName MapleLeaf Scale 4.0 4.0 4.0 Colors 1 1.0 0.0 0.0 Vertices 50 0.0 11.0 0.5 -2.0 7.0 1.0 2.0 7.0 1.0 4.0 8.0 0.5 -4.0 8.0 0.5 -3.0 1.0 1.0 3.0 1.0 1.0 -3.24164676666 -4.22276878357 1.0 -9.47341823578 -0.068253993988 0.5 -5.16438913345 4.24077558517 0.5 -5.70301771164 2.62488913536 1.0 -7.85753297806 0.470374584198 1.0 -8.93479061127 3.70214700699 0.5 8.94766044617 3.70214676857 0.5 7.87040281296 0.470374435186 1.0 5.71588754654 2.62488889694 1.0 5.17725896835 4.24077558517 0.5 9.48628807068 -0.0682541504502 0.5 3.25219154358 -4.25136613846 1.0 -4.57356548309 -5.57694244385 1.30000019073 4.53153800964 -5.59073162079 1.29999995232 4.53153800964 -5.59073162079 -1.29999995232 -4.57356548309 -5.57694244385 -1.29999995232 3.25219154358 -4.25136613846 -1.0 9.48628807068 -0.0682541504502 -0.5 5.17725896835 4.24077558517 -0.5 5.71588754654 2.62488889694 -1.0 7.87040281296 0.470374435186 -1.0 8.94766044617 3.70214676857 -0.5 -8.93479061127 3.70214700699 -0.5 -7.85753297806 0.470374584198 -1.0 -5.70301771164 2.62488913536 -1.0 -5.16438913345 4.24077558517 -0.5 -9.47341823578 -0.068253993988 -0.5 -3.24164676666 -4.22276878357 -1.0 3.0 1.0 -1.0 -3.0 1.0 -1.0 -4.0 8.0 -0.5 4.0 8.0 -0.5 2.0 7.0 -1.0 -2.0 7.0 -1.0 0.0 11.0 -0.5 -0.199999988079 -5.59999990463 0.5 0.199999988079 -5.59999990463 0.5 0.199999988079 -5.59999990463 -0.5 -0.199999988079 -5.59999990463 -0.5 -0.199999988079 -7.59999990463 -0.5 0.199999988079 -7.59999990463 -0.5 0.199999988079 -7.59999990463 0.5 -0.199999988079 -7.59999990463 0.5 Normals 50 0.0 0.870784640312 0.491653174162 -0.214819788933 0.39686268568 0.892361223698 0.214819788933 0.39686268568 0.892361223698 0.524216413498 0.707998871803 0.473189502954 -0.524216413498 0.707998871803 0.473189502954 -0.0488906539977 0.121341593564 0.99139380455 0.0493179112673 0.121982485056 0.991302251816 -0.399182111025 0.0792870894074 0.913419008255 -0.884548485279 0.103274635971 0.454847872257 -0.109195224941 0.891506671906 0.439588606358 -0.121250040829 0.446394234896 0.88656270504 -0.451338231564 0.0888698995113 0.887905538082 -0.622882783413 0.622882783413 0.473250538111 0.622882783413 0.622882783413 0.473250538111 0.451277196407 0.0893276780844 0.887875020504 0.121494188905 0.446333199739 0.88656270504 0.110354930162 0.891323566437 0.439649641514 0.88436537981 0.104525893927 0.454908907413 0.404797524214 0.0767235308886 0.911160647869 -0.752525389194 -0.29917293787 0.586626768112 0.748680055141 -0.306405842304 0.587817013264 0.748680055141 -0.306405842304 -0.587817013264 -0.752525389194 -0.29917293787 -0.586626768112 0.404797524214 0.0767235308886 -0.911160647869 0.88436537981 0.104525893927 -0.454908907413 0.110354930162 0.891323566437 -0.439649641514 0.121494188905 0.446333199739 -0.88656270504 0.451277196407 0.0893276780844 -0.887875020504 0.622882783413 0.622882783413 -0.473250538111 -0.622882783413 0.622882783413 -0.473250538111 -0.451338231564 0.0888698995113 -0.887905538082 -0.121250040829 0.446394234896 -0.88656270504 -0.109195224941 0.891506671906 -0.439588606358 -0.884548485279 0.103274635971 -0.454847872257 -0.399182111025 0.0792870894074 -0.913419008255 0.0493179112673 0.121982485056 -0.991302251816 -0.0488906539977 0.121341593564 -0.99139380455 -0.524216413498 0.707998871803 -0.473189502954 0.524216413498 0.707998871803 -0.473189502954 0.214819788933 0.39686268568 -0.892361223698 -0.214819788933 0.39686268568 -0.892361223698 0.0 0.870784640312 -0.491653174162 -0.302835166454 -0.900631725788 0.311655014753 0.3003937006 -0.901364147663 0.311899155378 0.3003937006 -0.901364147663 -0.311899155378 -0.302835166454 -0.900631725788 -0.311655014753 -0.577349185944 -0.577349185944 -0.577349185944 0.577349185944 -0.577349185944 -0.577349185944 0.577349185944 -0.577349185944 0.577349185944 -0.577349185944 -0.577349185944 0.577349185944 Faces 57 1 4 5 0 0 0 0 1 2 0 0 0 2 6 3 0 0 0 1 5 6 2 0 0 11 8 7 0 0 0 12 11 10 0 0 0 10 5 9 0 0 0 11 7 5 10 0 0 14 18 17 0 0 0 13 15 14 0 0 0 15 16 6 0 0 0 14 15 6 18 0 0 15 26 25 16 0 0 16 25 35 6 0 0 13 14 27 28 0 0 15 13 28 26 0 0 14 17 24 27 0 0 17 18 23 24 0 0 5 36 32 9 0 0 9 32 31 10 0 0 12 10 31 29 0 0 11 12 29 30 0 0 7 8 33 34 0 0 8 11 30 33 0 0 6 35 38 3 0 0 3 38 39 2 0 0 0 2 39 41 0 0 1 0 41 40 0 0 5 4 37 36 0 0 4 1 40 37 0 0 40 36 37 0 0 0 41 39 40 0 0 0 39 38 35 0 0 0 40 39 35 36 0 0 30 34 33 0 0 0 29 31 30 0 0 0 31 32 36 0 0 0 30 31 36 34 0 0 27 24 23 0 0 0 28 27 26 0 0 0 26 35 25 0 0 0 27 23 35 26 0 0 7 19 20 18 0 0 7 34 22 19 0 0 18 20 21 23 0 0 21 22 34 23 0 0 19 42 43 20 0 0 19 22 45 42 0 0 20 43 44 21 0 0 21 44 45 22 0 0 43 48 47 44 0 0 42 49 48 43 0 0 42 45 46 49 0 0 44 47 46 45 0 0 46 47 48 49 0 0 5 7 18 6 0 0 23 34 36 35 0 0 criticalmass-1.0.0.orig/data/models/DoubleWing.model0000644000175000017500000001255707630537344021701 0ustar danieldanielName DoubleWing Scale 1.0 1.0 1.0 Colors 5 0.393985062838 0.905263185501 0.639097750187 1.0 1.0 1.0 0.0 0.30075186491 0.0 0.0375939682126 0.646616518497 0.270676702261 0.965413510799 0.842105269432 0.183458670974 Vertices 50 -8.60939607503e-07 -0.924824291223 0.0782648384401 0.280740668495 0.0139987834338 -1.23187910207 0.486257680135 1.34934665291 -0.974891124041 0.561482186822 1.83811831578 -0.623839217483 0.486257740838 1.34934738133 -0.272787310926 0.280740668495 0.0139987834338 -0.0157993328984 -0.280742337807 0.0139987834338 -0.0157993328984 -0.486259288744 1.34934738133 -0.272787310926 -0.56148376508 1.83811831578 -0.623839217483 -0.486259258393 1.34934665291 -0.974891124041 -0.280742307455 0.0139987834338 -1.23187910207 -1.03050276622e-06 -0.924824291223 -1.32594327341 -0.56148376508 -0.924823927009 -1.23187910207 -0.972517727658 -0.924823927009 -0.974891124041 -1.12296692314 -0.924823927009 -0.623839217483 -0.972517970466 -0.924823623498 -0.272787310926 -0.56148376508 -0.924823927009 -0.0157993328984 -0.280742368158 -1.49128035784 -0.0157993328984 -0.486259470851 -1.90595560422 -0.272787310926 -0.561483886484 -2.05773678868 -0.623839217483 -0.486259410149 -1.90595524001 -0.974891124041 -0.280742398509 -1.49128035784 -1.23187910207 0.280740486389 -1.49128035784 -1.23187910207 0.486257406975 -1.90595560422 -0.974891124041 0.561481822608 -2.05773678868 -0.623839217483 0.486257467678 -1.90595560422 -0.272787310926 0.280740486389 -1.49128035784 -0.0157993328984 0.561481944013 -0.924824291223 -0.0157993328984 0.972515845889 -0.924824291223 -0.272787310926 1.12296473786 -0.924824291223 -0.623839217483 0.972515845889 -0.924824291223 -0.974891124041 0.561482004715 -0.924824291223 -1.23187910207 -2.26425936306 -0.391531824169 -0.09525086953 -2.8985711716 0.294934852399 -0.09525086953 -3.0160350803 0.950860265617 -0.09525086953 -2.42166048112 1.25485902283 -0.09525086953 -1.27332245508 0.826819088482 -0.623839217483 -1.76056867099 1.40944732108 -0.271446975397 -1.7713754885 1.97140146772 -0.271446975397 -1.20942134186 2.12269667014 -0.271446975397 1.2028105051 2.12269667014 -0.271446975397 1.76476453034 1.97140146772 -0.271446975397 1.75395771282 1.40944732108 -0.271446975397 1.26671149691 0.826819088482 -0.623839217483 2.41504952295 1.25485902283 -0.09525086953 3.00942412214 0.950860265617 -0.09525086953 2.89196021343 0.294934852399 -0.09525086953 2.2576484049 -0.391531793818 -0.09525086953 1.11635596497 -0.924823927009 -0.623839217483 0.554872746213 1.83811831578 -0.623839217483 Normals 50 0.0 -0.0240562983479 1.01810358276 0.229933450611 0.131843431684 -0.983293404931 0.474257183671 0.351893300129 -0.829662562913 0.47490988437 0.0987737915781 0.895428873466 0.474257183671 0.351893300129 0.829662562913 0.229933450611 0.131843431684 0.983293404931 -0.229933450611 0.131843431684 0.983293404931 -0.474257183671 0.351893300129 0.829662562913 0.113474861842 -0.0798768543746 1.00890373531 -0.474257183671 0.351893300129 -0.829662562913 -0.229933450611 0.131843431684 -0.983293404931 0.0 -0.0240562983479 -1.01810358276 -0.384745375865 -0.0538624861794 -0.941365830253 -0.77912571275 -0.103653431169 -0.647562012104 -0.985531192539 -0.116178865318 -0.228845636348 -0.77912571275 -0.103653431169 0.647562012104 -0.384745375865 -0.0538624861794 0.941365830253 -0.215916152998 -0.31876150853 0.942826629352 -0.418902822647 -0.663506301921 0.649147068662 -0.526969692713 -0.871434739889 0.0 -0.418902822647 -0.663506301921 -0.649147068662 -0.215916152998 -0.31876150853 -0.942826629352 0.215916152998 -0.31876150853 -0.942826629352 0.418902822647 -0.663506301921 -0.649147068662 0.526969692713 -0.871434739889 0.0 0.418902822647 -0.663506301921 0.649147068662 0.215916152998 -0.31876150853 0.942826629352 0.384745375865 -0.0538624861794 0.941365830253 0.77912571275 -0.103653431169 0.647562012104 1.01104828429 -0.122239565381 0.0 0.77912571275 -0.103653431169 -0.647562012104 0.384745375865 -0.0538624861794 -0.941365830253 -0.341046206685 -0.0305832010005 -0.959112794113 0.0 0.0 -1.01841437817 0.0 0.0 -1.01841437817 -0.221355239491 -0.0211347323987 -0.993829733323 -0.241588642456 0.0494179791233 -0.988079836252 0.25495323937 -0.197019215795 0.96607485396 0.0 0.0 1.01841437817 0.273850176574 -0.199319177658 0.96041819551 -0.273850176574 -0.199319177658 0.96041819551 0.0 0.0 1.01841437817 -0.25495323937 -0.197019215795 0.96607485396 0.241588642456 0.0494179791233 -0.988079836252 0.221355239491 -0.0211347323987 -0.993829733323 0.0 0.0 -1.01841437817 0.0 0.0 -1.01841437817 0.341046206685 -0.0305832010005 -0.959112794113 0.356368875344 -0.0305832010005 -0.953518294743 -0.296663257266 -0.208798725801 0.951591302539 Faces 52 11 1 31 0 0 3 31 1 2 30 0 3 30 2 3 29 0 3 29 3 4 28 0 3 28 4 5 27 0 2 5 0 27 0 1 4 6 0 5 0 1 2 4 7 6 5 0 3 3 8 7 4 0 3 2 9 8 3 0 3 1 10 9 2 0 3 11 10 1 0 0 3 11 12 10 0 0 3 10 12 13 9 0 3 9 13 14 8 0 3 8 14 15 7 0 3 7 15 16 6 0 2 16 0 6 0 1 4 17 0 16 0 1 2 15 18 17 16 1 1 14 19 18 15 0 3 13 20 19 14 0 3 12 21 20 13 0 3 11 21 12 0 0 3 11 22 21 0 0 3 21 22 23 20 0 3 20 23 24 19 0 3 19 24 25 18 0 3 18 25 26 17 0 2 26 0 17 0 1 4 27 0 26 0 1 2 25 28 27 26 1 1 24 29 28 25 0 3 23 30 29 24 0 3 22 31 30 23 0 3 11 31 22 0 0 3 14 32 36 0 0 0 32 35 36 0 0 0 32 33 35 0 0 0 33 34 35 0 0 0 8 36 14 0 0 0 8 39 36 0 0 0 36 39 37 0 0 0 37 39 38 0 0 0 48 43 47 0 0 0 47 43 44 0 0 0 47 44 46 0 0 0 46 44 45 0 0 0 49 48 43 0 0 0 49 43 40 0 0 0 43 42 40 0 0 0 42 41 40 0 0 0 criticalmass-1.0.0.orig/data/models/DoubleWingRed.model0000644000175000017500000001250707630537344022327 0ustar danieldanielName DoubleWingRed Scale 1.0 1.0 1.0 Colors 5 1.0 0.348872214556 0.338345855474 1.0 1.0 1.0 0.29571428895 0.0 0.0300751551986 0.654135346413 0.0150375803933 0.0 0.0 1.0 0.0 Vertices 50 -8.60939607503e-07 -0.924824291223 0.0782648384401 0.280740668495 0.0139987834338 -1.23187910207 0.486257680135 1.34934665291 -0.974891124041 0.561482186822 1.83811831578 -0.623839217483 0.486257740838 1.34934738133 -0.272787310926 0.280740668495 0.0139987834338 -0.0157993328984 -0.280742337807 0.0139987834338 -0.0157993328984 -0.486259288744 1.34934738133 -0.272787310926 -0.56148376508 1.83811831578 -0.623839217483 -0.486259258393 1.34934665291 -0.974891124041 -0.280742307455 0.0139987834338 -1.23187910207 -1.03050276622e-06 -0.924824291223 -1.32594327341 -0.56148376508 -0.924823927009 -1.23187910207 -0.972517727658 -0.924823927009 -0.974891124041 -1.12296692314 -0.924823927009 -0.623839217483 -0.972517970466 -0.924823623498 -0.272787310926 -0.56148376508 -0.924823927009 -0.0157993328984 -0.280742368158 -1.49128035784 -0.0157993328984 -0.486259470851 -1.90595560422 -0.272787310926 -0.561483886484 -2.05773678868 -0.623839217483 -0.486259410149 -1.90595524001 -0.974891124041 -0.280742398509 -1.49128035784 -1.23187910207 0.280740486389 -1.49128035784 -1.23187910207 0.486257406975 -1.90595560422 -0.974891124041 0.561481822608 -2.05773678868 -0.623839217483 0.486257467678 -1.90595560422 -0.272787310926 0.280740486389 -1.49128035784 -0.0157993328984 0.561481944013 -0.924824291223 -0.0157993328984 0.972515845889 -0.924824291223 -0.272787310926 1.12296473786 -0.924824291223 -0.623839217483 0.972515845889 -0.924824291223 -0.974891124041 0.561482004715 -0.924824291223 -1.23187910207 -2.26425936306 -0.391531824169 -0.09525086953 -2.8985711716 0.294934852399 -0.09525086953 -3.0160350803 0.950860265617 -0.09525086953 -2.42166048112 1.25485902283 -0.09525086953 -1.27332245508 0.826819088482 -0.623839217483 -1.76056867099 1.40944732108 -0.271446975397 -1.7713754885 1.97140146772 -0.271446975397 -1.20942134186 2.12269667014 -0.271446975397 1.2028105051 2.12269667014 -0.271446975397 1.76476453034 1.97140146772 -0.271446975397 1.75395771282 1.40944732108 -0.271446975397 1.26671149691 0.826819088482 -0.623839217483 2.41504952295 1.25485902283 -0.09525086953 3.00942412214 0.950860265617 -0.09525086953 2.89196021343 0.294934852399 -0.09525086953 2.2576484049 -0.391531793818 -0.09525086953 1.11635596497 -0.924823927009 -0.623839217483 0.554872746213 1.83811831578 -0.623839217483 Normals 50 0.0 -0.0240562983479 1.01810358276 0.229933450611 0.131843431684 -0.983293404931 0.474257183671 0.351893300129 -0.829662562913 0.47490988437 0.0987737915781 0.895428873466 0.474257183671 0.351893300129 0.829662562913 0.229933450611 0.131843431684 0.983293404931 -0.229933450611 0.131843431684 0.983293404931 -0.474257183671 0.351893300129 0.829662562913 0.113474861842 -0.0798768543746 1.00890373531 -0.474257183671 0.351893300129 -0.829662562913 -0.229933450611 0.131843431684 -0.983293404931 0.0 -0.0240562983479 -1.01810358276 -0.384745375865 -0.0538624861794 -0.941365830253 -0.77912571275 -0.103653431169 -0.647562012104 -0.985531192539 -0.116178865318 -0.228845636348 -0.77912571275 -0.103653431169 0.647562012104 -0.384745375865 -0.0538624861794 0.941365830253 -0.215916152998 -0.31876150853 0.942826629352 -0.418902822647 -0.663506301921 0.649147068662 -0.526969692713 -0.871434739889 0.0 -0.418902822647 -0.663506301921 -0.649147068662 -0.215916152998 -0.31876150853 -0.942826629352 0.215916152998 -0.31876150853 -0.942826629352 0.418902822647 -0.663506301921 -0.649147068662 0.526969692713 -0.871434739889 0.0 0.418902822647 -0.663506301921 0.649147068662 0.215916152998 -0.31876150853 0.942826629352 0.384745375865 -0.0538624861794 0.941365830253 0.77912571275 -0.103653431169 0.647562012104 1.01104828429 -0.122239565381 0.0 0.77912571275 -0.103653431169 -0.647562012104 0.384745375865 -0.0538624861794 -0.941365830253 -0.341046206685 -0.0305832010005 -0.959112794113 0.0 0.0 -1.01841437817 0.0 0.0 -1.01841437817 -0.221355239491 -0.0211347323987 -0.993829733323 -0.241588642456 0.0494179791233 -0.988079836252 0.25495323937 -0.197019215795 0.96607485396 0.0 0.0 1.01841437817 0.273850176574 -0.199319177658 0.96041819551 -0.273850176574 -0.199319177658 0.96041819551 0.0 0.0 1.01841437817 -0.25495323937 -0.197019215795 0.96607485396 0.241588642456 0.0494179791233 -0.988079836252 0.221355239491 -0.0211347323987 -0.993829733323 0.0 0.0 -1.01841437817 0.0 0.0 -1.01841437817 0.341046206685 -0.0305832010005 -0.959112794113 0.356368875344 -0.0305832010005 -0.953518294743 -0.296663257266 -0.208798725801 0.951591302539 Faces 52 11 1 31 0 0 3 31 1 2 30 0 3 30 2 3 29 0 3 29 3 4 28 0 3 28 4 5 27 0 2 5 0 27 0 1 4 6 0 5 0 1 2 4 7 6 5 0 3 3 8 7 4 0 3 2 9 8 3 0 3 1 10 9 2 0 3 11 10 1 0 0 3 11 12 10 0 0 3 10 12 13 9 0 3 9 13 14 8 0 3 8 14 15 7 0 3 7 15 16 6 0 2 16 0 6 0 1 4 17 0 16 0 1 2 15 18 17 16 1 1 14 19 18 15 0 3 13 20 19 14 0 3 12 21 20 13 0 3 11 21 12 0 0 3 11 22 21 0 0 3 21 22 23 20 0 3 20 23 24 19 0 3 19 24 25 18 0 3 18 25 26 17 0 2 26 0 17 0 1 4 27 0 26 0 1 2 25 28 27 26 1 1 24 29 28 25 0 3 23 30 29 24 0 3 22 31 30 23 0 3 11 31 22 0 0 3 14 32 36 0 0 0 32 35 36 0 0 0 32 33 35 0 0 0 33 34 35 0 0 0 8 36 14 0 0 0 8 39 36 0 0 0 36 39 37 0 0 0 37 39 38 0 0 0 48 43 47 0 0 0 47 43 44 0 0 0 47 44 46 0 0 0 46 44 45 0 0 0 49 48 43 0 0 0 49 43 40 0 0 0 43 42 40 0 0 0 42 41 40 0 0 0 criticalmass-1.0.0.orig/data/models/P1.model0000644000175000017500000000035707630537344020115 0ustar danieldanielName Particle1 Scale 0.5 0.5 0.5 Colors 0 Vertices 4 -1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.5 0.0 0.0 0.0 1.5 Normals 4 -1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.5 0.0 0.0 0.0 1.5 Faces 4 0 2 1 0 0 0 0 3 2 0 0 0 1 2 3 0 0 0 0 1 3 0 0 0 criticalmass-1.0.0.orig/data/models/SixLegBugYellow.model0000644000175000017500000004016407630537344022662 0ustar danieldanielName SixLegBugYellow Scale 1.0 1.0 1.0 Colors 3 1.0 1.0 0.0 0.915263175964 0.0977443605661 0.093233063817 0.268646597862 0.43909779191 0.842105269432 Vertices 148 -9.39038904493e-08 2.77016563464e-07 0.557004395311 -1.82090998612e-08 1.00260822144 0.482379935217 -3.61697738768e-09 1.46622756179 0.27850217418 1.33997527084e-08 1.71324811776 -2.43474362832e-08 -3.61697738768e-09 1.46622756179 -0.278502221132 -1.82090968763e-08 1.00260831535 -0.482379935217 -0.163699543009 0.811127164313 -0.482379982169 -0.283535846065 1.40491322714 -0.27850217418 -0.425618666982 1.62225396784 -4.69519605417e-08 -0.283535869541 1.40491332104 0.27850217418 -0.163699531271 0.811127164313 0.482379935217 -0.264871433305 0.309823162772 0.482379935217 -0.458770671206 0.536629285691 0.27850217418 -0.529742772706 0.619646090784 -4.69519605417e-08 -0.458770671206 0.536629191787 -0.27850217418 -0.264871433305 0.309823139296 -0.482379982169 -0.264871479917 -0.309822777595 -0.482379982169 -0.458770739359 -0.536628865434 -0.27850217418 -0.52974286593 -0.619645742999 -4.69519605417e-08 -0.458770739359 -0.536628959338 0.27850217418 -0.264871479917 -0.309822754119 0.482379935217 -0.163699647106 -0.811126833166 0.482379935217 -0.283536012101 -1.40491304761 0.27850217418 -0.327399200308 -1.62225366633 -4.69519605417e-08 -0.283535988625 -1.4049129537 -0.27850217418 -0.163699635368 -0.81112692707 -0.482379982169 -1.06331513806e-07 -1.00260793973 -0.482379982169 -1.40643759231e-07 -1.73656784191 -0.27850217418 -1.65349270263e-07 -2.00521606727 -4.69519605417e-08 -1.45837418963e-07 -1.73656821752 0.27850217418 -1.29626582893e-07 -1.00260793973 0.482379935217 0.163699413891 -0.811126788698 0.482379935217 0.283535799113 -1.40491294542 0.27850217418 0.327398921685 -1.6222537652 -4.69519605417e-08 0.283535775637 -1.40491275762 -0.27850217418 0.163699437367 -0.811126694794 -0.482379982169 -4.44680143159e-08 3.206305614e-08 -0.557004395311 0.264871315925 -0.309822388065 -0.482379982169 0.458770671206 -0.536628440556 -0.27850217418 0.529742772706 -0.619645339553 -4.69519605417e-08 0.458770671206 -0.53662853446 0.27850217418 0.264871315925 -0.309822528921 0.482379935217 0.264871339061 0.309823505351 0.482379935217 0.458770739359 0.536629898377 0.27850217418 0.529742772026 0.619646775942 -4.69519605417e-08 0.458770645456 0.536629898377 -0.27850217418 0.264871315585 0.309823622731 -0.482379982169 0.163699424084 0.811127678301 -0.482379982169 0.283535800818 1.40491408055 -0.27850217418 0.425618687369 1.62225534177 -4.69519605417e-08 0.283535824294 1.40491408055 0.27850217418 0.163699459298 0.811127678301 0.482379935217 2.25508348166 -0.177238063868 -1.70891238592 2.25508353518 0.177237371114 -1.70891238592 2.46776915535 0.177237303785 -1.70891238592 2.46776910183 -0.177238166411 -1.70891238592 2.86806367269 -0.196931322877 -0.48691511899 2.86806391997 0.196930327628 -0.48691511899 2.64599861273 0.196930396373 -0.567740195849 2.64599855326 -0.196931183705 -0.567740195849 1.52551029818 -0.196931014516 0.547169321185 1.52551035765 0.196930565562 0.547169321185 1.62538243635 0.19693050353 0.761345008776 1.62538237687 -0.196931135238 0.761345008776 0.737787302358 -0.196931001215 0.761345196584 0.73778736183 0.196930637553 0.761345196584 0.837658877098 0.196930669425 0.547169133377 0.837658817626 -0.196930910653 0.547169133377 0.821172522229 -1.1730916654 0.547169133377 0.889565905352 -0.785213735662 0.547169133377 0.791211692259 -0.767871216001 0.761345196584 0.722818309136 -1.15574928659 0.761345196584 1.59692875731 -1.30987861945 0.761345008776 1.66532223434 -0.92200059581 0.761345008776 1.56696745782 -0.904658029198 0.547169321185 1.4985739808 -1.29253595893 0.547169321185 2.60203949149 -1.48710683421 -0.567740195849 2.67043278071 -1.09922890448 -0.567740195849 2.88912448985 -1.13779020707 -0.48691511899 2.82073082502 -1.52566813681 -0.48691511899 2.41968672366 -1.4357690635 -1.70891238592 2.48124042103 -1.08667880466 -1.70891238592 2.27178660378 -1.04974636087 -1.70891238592 2.21023234299 -1.39883652581 -1.70891238592 2.27178692079 1.04974567481 -1.70891238592 2.21023276543 1.39883585833 -1.70891238592 2.41968715725 1.43576814497 -1.70891238592 2.48124074919 1.08667796145 -1.70891238592 2.88912464565 1.13778924068 -0.48691511899 2.82073166137 1.52566728497 -0.48691511899 2.60203994058 1.48710604842 -0.567740195849 2.67043311267 1.09922809803 -0.567740195849 1.56696773102 0.904657555987 0.547169321185 1.49857437113 1.29253550637 0.547169321185 1.59692915288 1.30987813719 0.761345008776 1.66532251277 0.922000092897 0.761345008776 0.791211924149 0.767870883158 0.761345196584 0.722818658163 1.1557489744 0.761345196584 0.821172876493 1.17309141741 0.547169133377 0.889566142479 0.78521346702 0.547169133377 -0.821343110318 0.78521372536 0.547169133377 -0.752949633291 1.17309165509 0.547169133377 -0.654595608006 1.15574918239 0.761345196584 -0.722988991129 0.767871111796 0.761345196584 -1.59709953321 0.922000585509 0.761345008776 -1.52870605618 1.30987860915 0.761345008776 -1.43035127967 1.29253594863 0.547169321185 -1.49874475669 0.904658018897 0.547169321185 -2.60221007958 1.09922889417 -0.567740195849 -2.53381679036 1.48710682391 -0.567740195849 -2.7525084995 1.52566812651 -0.48691511899 -2.82090160091 1.13779010287 -0.48691511899 -2.41120800431 1.08147492049 -1.70891238592 -2.34965355572 1.43056517933 -1.70891238592 -2.14019936285 1.39363273554 -1.70891238592 -2.20175362364 1.04454257061 -1.70891238592 -2.18505055505 -0.182441231807 -1.70891238592 -2.18505050152 0.172034214913 -1.70891238592 -2.39773593389 0.172034247027 -1.70891238592 -2.39773598741 -0.182441281859 -1.70891238592 -2.79984103103 -0.196930467048 -0.48691511899 -2.79984115937 0.196931218672 -0.48691511899 -2.57777585213 0.196931185141 -0.567740195849 -2.5777759116 -0.196930406675 -0.567740195849 -1.45728765652 -0.196930575864 0.547169321185 -1.45728759705 0.196931015952 0.547169321185 -1.55715967574 0.196931031033 0.761345008776 -1.55715973522 -0.196930654687 0.761345008776 -0.6695646607 -0.19693078871 0.761345196584 -0.669564601228 0.196930897009 0.761345196584 -0.769435928689 0.19693091209 0.547169133377 -0.76943598816 -0.196930679726 0.547169133377 -0.758189059567 -1.07008417801 0.547169133377 -0.860127812213 -0.689643037494 0.547169133377 -0.763659558949 -0.663794448368 0.761345196584 -0.661720712399 -1.04423563584 0.761345196584 -1.51907171622 -1.27396205892 0.761345008776 -1.62101056277 -0.893520824498 0.761345008776 -1.52454155828 -0.867672094516 0.547169321185 -1.42260271173 -1.24811314113 0.547169321185 -2.50491136655 -1.5381167389 -0.567740195849 -2.6068500253 -1.15767559838 -0.567740195849 -2.82134875105 -1.21515030603 -0.48691511899 -2.7194097167 -1.59559135264 -0.48691511899 -2.31305081844 -1.53464119594 -1.70891238592 -2.40479546106 -1.19224400984 -1.70891238592 -2.19935752501 -1.1371969989 -1.70891238592 -2.10761250677 -1.47959399719 -1.70891238592 Normals 148 0.0 0.0 0.393861591816 1.66415515326e-08 0.110212015512 0.378115312809 3.4760494156e-08 0.230208350082 0.31956553721 5.94714464341e-08 0.393861591816 0.0 3.4760494156e-08 0.230208350082 -0.31956553721 1.66415515326e-08 0.110212015512 -0.378115312809 -0.142702247319 0.0557370812602 -0.362837802176 -0.207526466839 0.165275979778 -0.291089994801 -0.279538667243 0.277447276263 0.0 -0.0908596693154 0.182140120397 0.337174940439 0.0575160380196 0.0636101964005 0.38440180471 -0.0205663320397 0.0390171468745 0.391373443095 -0.356142638762 -0.144553294742 -0.0859675314202 -0.392443215018 0.0332595897471 0.0 -0.330167238431 0.0299180005084 -0.21264702566 -0.196083381129 0.0153616781539 -0.341225720835 -0.196083385768 -0.0153616189384 -0.341225720835 -0.33558829812 -0.0349903697117 -0.20316319915 -0.391241233217 -0.0453155992306 0.0 -0.391409500593 0.010649839979 -0.042454884154 0.0596796192653 -0.132785705493 0.365963018574 0.0409403452088 -0.0632736478759 0.386577441182 -0.177079669824 -0.145550980513 0.320274723098 -0.340143930692 -0.198547441405 0.0 -0.269249557246 -0.120020345056 -0.26118408439 -0.148952696164 -0.0505563872403 -0.361070835569 -1.32402784249e-08 -0.0876864016126 -0.383969071966 -3.5658910148e-08 -0.236158290329 -0.315202268041 -0.393861591816 5.94714464341e-08 0.0 -3.5658910148e-08 -0.236158290329 0.315202268041 -1.32402784249e-08 -0.0876864016126 0.383969071966 -0.0419740906094 -0.0609537624617 0.386841874623 0.15984285635 -0.149024830878 0.327655054824 0.340143870732 -0.198547544126 0.0 0.269249521001 -0.120020426367 -0.26118408439 0.148952680897 -0.0505564322228 -0.361070835569 -0.0 0.0 -0.393861591816 0.196083381129 -0.0153616781539 -0.341225720835 0.335588287553 -0.0349904710566 -0.20316319915 0.391241219532 -0.0453157173821 0.0 0.392587457857 0.00923135349089 -0.0301703731979 -0.0557731384565 -0.130057133563 0.367549666176 -0.0557730991804 0.130057150406 0.367549666176 0.34538463153 -0.155912359365 -0.107315173451 0.392443225062 0.0332594712325 0.0 0.330167247466 0.0299179008007 -0.21264702566 0.196083385768 0.0153616189384 -0.341225720835 0.142702264152 0.0557370381653 -0.362837802176 0.207526516751 0.165275917107 -0.291089994801 0.27953875103 0.277447191845 0.0 0.0932036422514 0.180577472668 0.337379298847 -0.0485129888891 0.0655334234042 0.385327345232 0.206492724787 -0.170156119449 -0.28901053942 0.206492776173 0.17015605709 -0.28901053942 0.186154839538 0.232095485599 -0.258058844516 0.186154769447 -0.232095541816 -0.258058844516 0.304384171498 -0.239547986129 0.071315068762 0.304384243839 0.239547894208 0.071315068762 -0.203079111742 -0.334482426122 -0.0447386950082 -0.203079010732 0.33448248745 -0.0447386950082 -0.0893812802079 -0.316608606619 -0.216553569633 -0.0893811845947 0.316608633611 -0.216553569633 0.117351967194 0.24815431072 0.282423531496 0.117351892254 -0.24815434616 0.282423531496 -0.0636222554258 -0.202910775804 0.331513496513 -0.0636221941484 0.202910795017 0.331513496513 0.127977720683 0.303434584942 -0.216036698975 0.127977629049 -0.303434623591 -0.216036698975 0.107158902841 -0.0959321856625 -0.36666018476 0.176118084894 0.242889508083 -0.255162025931 0.0282231582179 0.234559618763 0.31513014983 -0.117964984486 -0.175432883923 0.332306820314 0.0724809750816 -0.264766060404 0.282423531496 0.158664946676 0.224005972136 0.282423531496 -0.0330431205629 0.327318484684 -0.216553569633 -0.143002804757 -0.296270629058 -0.216553569633 -0.14141605731 0.364965357718 -0.0438732500611 -0.257698297946 -0.294623865628 -0.0436568895579 0.341730575917 0.182801150421 0.0701731618677 0.258635770106 -0.288601885133 0.070257299781 0.141908892526 -0.260991767111 -0.258575715174 0.222623713095 0.196504051137 -0.258731971298 0.231903194708 0.130513867378 -0.290356769509 0.17320915594 -0.202093448359 -0.290308690701 0.231903155294 -0.130513937411 -0.290356769509 0.173209216971 0.202093396051 -0.290308690701 0.141908971343 0.260991724256 -0.258575715174 0.222623653752 -0.196504118368 -0.258731971298 0.341730520713 -0.18280125362 0.0701731618677 0.258635857261 0.288601807027 0.070257299781 -0.141416167527 -0.364965315011 -0.0438732500611 -0.257698208972 0.29462394345 -0.0436568895579 -0.0330432194103 -0.327318474705 -0.216553569633 -0.143002715285 0.296270672244 -0.216553569633 0.0724810550387 0.264766038515 0.282423531496 0.158664879029 -0.224006020052 0.282423531496 0.0282230873829 -0.234559627286 0.31513014983 -0.117964931507 0.175432919547 0.332306820314 0.000372670352237 0.319361202222 -0.230496846403 0.176118011544 -0.242889561269 -0.255162025931 -0.193955861853 -0.238874807576 -0.245858494949 -0.00453151711008 0.32314752644 -0.225111855621 0.127725276045 0.176538730237 0.328087764092 -0.0215520171821 -0.22749182377 0.320791593756 -0.158664946676 -0.224005972136 0.282423531496 -0.0724809750816 0.264766060404 0.282423531496 0.143002804757 0.296270629058 -0.216553569633 0.0330431205629 -0.327318484684 -0.216553569633 0.257638199437 0.294623865637 -0.0440535514585 0.141187671207 -0.365157696389 -0.0429717460082 -0.258635770086 0.288734101854 0.0697043758867 -0.341874812298 -0.182524697255 0.0701491224639 -0.222347260064 -0.197249284435 -0.258407439347 -0.141872833511 0.260390758535 -0.259200763148 -0.173257234866 0.201312144267 -0.290813541657 -0.231590682483 -0.130670135288 -0.290537088514 -0.206216323067 -0.170408482609 -0.289058618228 -0.206492724894 0.169446945299 -0.289431228987 -0.186118710439 0.231446454432 -0.258671872789 -0.185830295957 -0.232816691238 -0.257650174652 -0.304552519629 -0.239307500145 0.0714112263772 -0.304360132069 0.239716285428 0.0708342630791 0.202934774278 -0.334686822361 -0.0438732500611 0.203079111732 0.334410307911 -0.0452675794988 0.0893811845947 -0.316608633611 -0.216553569633 0.0893812802079 0.316608606619 -0.216553569633 -0.117351892254 0.24815434616 0.282423531496 -0.117351967194 -0.24815431072 0.282423531496 0.0741397564239 -0.200795258643 0.330611995395 0.0741398170624 0.200795236254 0.330611995395 -0.147041451298 0.30425201315 -0.202309776839 -0.14704154318 -0.304251968745 -0.202309776839 -0.102555244542 -0.0920496729033 -0.368956018251 -0.182248246819 0.246207093823 -0.247565339571 -0.029990033635 0.252758019651 0.300561825085 0.123434062357 -0.161165099913 0.337511515568 -0.0491260619689 -0.270078914613 0.282423531496 -0.177584467195 0.209329520847 0.282423531496 0.00438737475002 0.328953228918 -0.216553569633 0.168280925138 -0.282675970646 -0.216553569633 0.285813164301 -0.268287982652 -0.03813967912 0.282122997792 -0.272567113351 -0.0351106203376 -0.355794022156 0.155131056838 0.0668075396942 -0.358594684021 0.149205168155 0.0653410949795 -0.234343241596 0.177452305729 -0.262121644614 -0.238634394066 0.167439589507 -0.264838167671 -0.242661121192 0.103793331793 -0.29234009075 -0.237792999791 0.112243439729 -0.293205532763 Faces 156 36 6 5 0 0 2 5 6 7 4 0 2 4 7 8 3 0 2 3 8 9 2 0 2 2 9 10 1 0 2 10 0 1 0 0 2 11 0 10 0 0 2 8 13 12 9 0 2 7 14 13 8 0 2 6 15 14 7 0 2 36 15 6 0 0 2 36 16 15 0 0 2 15 16 17 14 0 2 14 17 18 13 0 2 13 18 19 12 0 2 20 0 11 0 0 2 21 0 20 0 0 2 18 23 22 19 0 2 17 24 23 18 0 2 16 25 24 17 0 2 36 25 16 0 0 2 36 26 25 0 0 2 25 26 27 24 0 2 24 27 28 23 0 2 23 28 29 22 0 2 22 29 30 21 0 2 30 0 21 0 0 2 31 0 30 0 0 2 29 32 31 30 0 2 28 33 32 29 0 2 27 34 33 28 0 2 26 35 34 27 0 2 36 35 26 0 0 2 36 37 35 0 0 2 35 37 38 34 0 2 34 38 39 33 0 2 33 39 40 32 0 2 41 0 31 0 0 2 42 0 41 0 0 2 39 44 43 40 0 2 38 45 44 39 0 2 37 46 45 38 0 2 36 46 37 0 0 2 36 47 46 0 0 2 46 47 48 45 0 2 45 48 49 44 0 2 44 49 50 43 0 2 51 0 42 0 0 2 1 0 51 0 0 2 50 2 1 51 0 2 49 3 2 50 0 2 48 4 3 49 0 2 47 5 4 48 0 2 36 5 47 0 0 2 52 53 54 55 0 0 52 59 58 53 0 0 53 58 57 54 0 0 54 57 56 55 0 0 55 56 59 52 0 0 56 63 60 59 0 0 57 62 63 56 0 0 58 61 62 57 0 0 59 60 61 58 0 0 60 67 66 61 0 0 61 66 65 62 0 0 62 65 64 63 0 0 63 64 67 60 0 0 83 82 81 80 0 0 83 76 77 82 0 0 82 77 78 81 0 0 81 78 79 80 0 0 80 79 76 83 0 0 79 72 75 76 0 0 78 73 72 79 0 0 77 74 73 78 0 0 76 75 74 77 0 0 75 68 69 74 0 0 74 69 70 73 0 0 73 70 71 72 0 0 72 71 68 75 0 0 84 85 86 87 0 0 84 91 90 85 0 0 85 90 89 86 0 0 86 89 88 87 0 0 87 88 91 84 0 0 88 95 92 91 0 0 89 94 95 88 0 0 90 93 94 89 0 0 91 92 93 90 0 0 92 99 98 93 0 0 93 98 97 94 0 0 94 97 96 95 0 0 95 96 99 92 0 0 115 112 113 114 0 0 115 114 109 108 0 0 114 113 110 109 0 0 113 112 111 110 0 0 112 115 108 111 0 0 111 108 107 104 0 0 110 111 104 105 0 0 109 110 105 106 0 0 108 109 106 107 0 0 107 106 101 100 0 0 106 105 102 101 0 0 105 104 103 102 0 0 104 107 100 103 0 0 116 119 118 117 0 0 116 117 122 123 0 0 117 118 121 122 0 0 118 119 120 121 0 0 119 116 123 120 0 0 120 123 124 127 0 0 121 120 127 126 0 0 122 121 126 125 0 0 123 122 125 124 0 0 124 125 130 131 0 0 125 126 129 130 0 0 126 127 128 129 0 0 127 124 131 128 0 0 147 144 145 146 0 0 147 146 141 140 0 0 146 145 142 141 0 0 145 144 143 142 0 0 144 147 140 143 0 0 143 140 139 136 0 0 142 143 136 137 0 0 141 142 137 138 0 0 140 141 138 139 0 0 139 138 133 132 0 0 138 137 134 133 0 0 137 136 135 134 0 0 136 139 132 135 0 0 10 102 103 11 0 0 9 101 102 10 0 0 9 12 100 101 0 0 11 103 100 12 0 0 42 96 97 51 0 0 50 51 97 98 0 0 43 50 98 99 0 0 42 43 99 96 0 0 11 129 128 20 0 0 11 12 130 129 0 0 19 20 128 131 0 0 12 19 131 130 0 0 19 22 132 133 0 0 21 135 132 22 1 1 20 134 135 21 0 0 19 133 134 20 0 0 41 64 65 42 0 0 31 71 70 41 0 0 42 65 66 43 0 0 40 43 66 67 0 0 40 67 64 41 0 0 40 41 70 69 0 0 32 40 69 68 0 0 31 32 68 71 1 1 criticalmass-1.0.0.orig/data/models/Pumpkin.model0000644000175000017500000006514207630537344021263 0ustar danieldanielName Pumpkin Scale 1.0 1.0 1.0 Colors 2 1.0 0.409022480249 1.56854329525e-09 0.0902255624533 0.210526317358 0.105263151228 Vertices 255 -0.814303169364 2.52862355963 0.00452069600099 -1.19881308428 2.36896553544 -0.0223670152231 -1.55367379126 2.15097592077 -0.0471813423223 -1.87014778844 1.88002184682 -0.0693113161921 -2.14044199902 1.56277580894 -0.0882123061587 -2.35790095931 1.20704892432 -0.103418556487 -2.51717042351 0.821600321256 -0.114555806927 -2.61432835955 0.415920895162 -0.121349809141 -2.64698299989 2.46200102955e-07 -0.123633400368 -2.61432864647 -0.41592044438 -0.121349935207 -2.51717121992 -0.821599717058 -0.114556185123 -2.35790226215 -1.20704856829 -0.103418906668 -2.14044335557 -1.56277604603 -0.0882127683982 -1.87014885672 -1.88002290913 -0.0693119465186 -1.55367512457 -2.15097658264 -0.0471817345255 -1.19881422639 -2.36896647501 -0.0223675054771 -0.81430444764 -2.52862478137 0.00452005166716 -0.664642917275 -2.1508336637 0.293038109878 -0.976456903473 -2.01502915764 0.394352617141 -1.26422732022 -1.82960849123 0.487854943981 -1.52086834566 -1.59913679745 0.571242522341 -1.74006069106 -1.32928858385 0.642462449419 -1.9164066331 -1.02670900461 0.699760681133 -2.04556448348 -0.698848462913 0.741726407097 -2.12435336325 -0.353780012365 0.767326620515 -2.15083399658 -2.32009344652e-07 0.775930658889 -2.12435330984 0.353779520712 0.767326620515 -2.04556437796 0.698848155466 0.741726575184 -1.91640670218 1.02670873368 0.699760793191 -1.74006105064 1.32928806218 0.642462617506 -1.52086900067 1.59913601858 0.571242914544 -1.26422816454 1.82960789772 0.487855168097 -0.976457943909 2.01502863274 0.394353009344 -0.664643993234 2.15083331583 0.293038670168 -0.71152631182 2.52862400011 0.410799815787 -1.04533485506 2.36896574797 0.603524126144 -1.35340361393 2.15097590565 0.781387609433 -1.62814721093 1.8800219406 0.940011066065 -1.86280058936 1.56277556386 1.07548798521 -2.05158525147 1.20704856502 1.18448290375 -2.18985325305 0.821599848312 1.26431191992 -2.27419982176 0.415920393236 1.31300931186 -2.30254829718 -2.74394607816e-07 1.32937628283 -2.27419988456 -0.415920946306 1.31300931186 -2.18985337711 -0.821600190002 1.26431169581 -2.05158520961 -1.20704892759 1.18448267963 -1.86280015298 -1.56277629111 1.07548764904 -1.62814659834 -1.8800229274 0.940010337688 -1.35340281814 -2.15097659776 0.7813871612 -1.04533364395 -2.36896626248 0.603523285709 -0.711525180848 -2.5286243409 0.410798919323 -0.610566780984 -2.52862434852 0.549756358497 -0.897011061224 -2.36896627367 0.807671921557 -1.16136819175 -2.15097661226 1.04570020988 -1.39712855295 -1.88002294484 1.25797957997 -1.59848709024 -1.56277631106 1.43928353327 -1.76048545977 -1.20704894956 1.58514745374 -1.8791347319 -0.82160021346 1.69197954535 -1.95151332994 -0.415920970668 1.75714969409 -1.9758393076 -2.99060452414e-07 1.77905300485 -1.95151326714 0.415920368874 1.75714969409 -1.87913449578 0.821599824853 1.69197976947 -1.76048538957 1.20704854304 1.58514767785 -1.59848741456 1.56277554391 1.43928409356 -1.39712905348 1.88002192316 1.25798047644 -1.16136887549 2.15097589115 1.04570088222 -0.897012104246 2.36896573677 0.807673042137 -0.61056768784 2.52862399248 0.549757535106 -0.410772609567 2.15083329666 0.642462829922 -0.60348434086 2.01502860458 0.907707556119 -0.781336113793 1.82960786126 1.15249939408 -0.939948867479 1.59913597472 1.37081130248 -1.07541709827 1.329288012 1.55726712911 -1.18440489351 1.02670867842 1.70727574428 -1.26422868644 0.698848096476 1.81714371523 -1.31292297824 0.353779459451 1.88416551279 -1.32928885917 -2.94034282244e-07 1.9066911945 -1.31292303166 -0.353780073626 1.88416551279 -1.26422890402 -0.698848521902 1.81714349111 -1.18440493648 -1.02670905987 1.70727552017 -1.07541696281 -1.32928863403 1.55726645676 -0.93994860468 -1.59913684131 1.37081051808 -0.781335717708 -1.82960852769 1.15249860967 -0.603483692627 -2.0150291858 0.907706379509 -0.410772093898 -2.15083368287 0.642461597284 -0.334174493636 -2.52862436939 0.750567243255 -0.490950680749 -2.36896630433 1.10269230693 -0.635638124174 -2.15097665195 1.42766565256 -0.764674078423 -1.88002299259 1.7174849357 -0.874881305846 -1.56277636569 1.96501430064 -0.963545984976 -1.20704900973 2.16415823847 -1.02848505741 -0.821600277682 2.31001320163 -1.06809900715 -0.415921037364 2.3989881783 -1.08141304188 -3.6658775927e-07 2.42889220977 -1.06809894434 0.415920302178 2.3989881783 -1.02848470924 0.821599760631 2.31001342574 -0.963545914775 1.20704848287 2.16415846259 -0.874881406048 1.56277548927 1.96501497298 -0.764674186751 1.88002187541 1.71748605628 -0.635638471734 2.15097585146 1.42766666109 -0.490951107452 2.36896570611 1.10269376368 -0.334174784173 2.52862397162 0.750568868097 -0.170820234393 2.52862395928 0.803646011176 -0.250959744314 2.368965688 1.18067183372 -0.324919689801 2.150975828 1.5286254871 -0.390878804498 1.88002184719 1.8389396301 -0.447213590451 1.56277545699 2.10397280101 -0.492536291803 1.20704844731 2.3171988518 -0.525731117587 0.821599722674 2.47336808752 -0.545980771485 0.415920262759 2.56863490044 -0.552786538262 -4.06497950203e-07 2.60065346761 -0.545980834287 -0.415921076783 2.56863490044 -0.525731465761 -0.821600315639 2.47336808752 -0.492536418034 -1.20704904529 2.31719862768 -0.447213630322 -1.56277639798 2.10397212866 -0.390878948301 -1.88002302081 1.83893850952 -0.324919566357 -2.15097667541 1.52862436652 -0.250959625771 -2.36896632245 1.18067015285 -0.170820294038 -2.52862438172 0.803644330305 -3.11188096162e-07 -2.15083371388 0.775929644663 -3.30513150608e-07 -2.01502923136 1.1037901766 -3.2458689668e-07 -1.82960858668 1.40637019077 -3.8925359546e-07 -1.59913691228 1.67621849988 -4.30579739041e-07 -1.32928871522 1.90669084663 -5.12145445564e-07 -1.02670914929 2.09211193955 -6.83058662526e-07 -0.698848617349 2.2279168703 -5.02282376563e-07 -0.353780172749 2.31076048228 -4.58259336141e-07 -3.9439276507e-07 2.33860376742 -4.48863118967e-07 0.353779360328 2.31076048228 -3.91069321291e-07 0.69884800103 2.2279168703 -3.64098672606e-07 1.026708589 2.09211216366 -2.74116894268e-07 1.32928793081 1.90669151898 -6.61591184292e-08 1.59913590375 1.6762195084 -2.23083145348e-07 1.82960780227 1.40637119929 -1.2523343679e-07 2.01502855902 1.10379174542 4.27930740646e-08 2.15083326565 0.775931101417 0.170820242727 2.52862393349 0.803646149027 0.250959363451 2.3689656501 1.18067209573 0.324919083411 2.15097577894 1.52862576028 0.390878586585 1.88002178817 1.83893991323 0.447212864398 1.56277538946 2.10397309266 0.492535339769 1.20704837294 2.31719915029 0.5257301398 0.821599643291 2.47336861514 0.545979662027 0.415920180318 2.568635207 0.552785417196 -4.89966309144e-07 2.6006537752 0.545979599225 -0.415921159223 2.568635207 0.525729791625 -0.821600395022 2.47336861514 0.49253515751 -1.20704911966 2.31719892617 0.447212544382 -1.56277646551 2.10397242031 0.390877938521 -1.88002307983 1.8389386806 0.324918730608 -2.15097672447 1.52862452764 0.250958753616 -2.36896636034 1.1806703028 0.170819468712 -2.52862440752 0.803644468156 0.334173718347 -2.52862441985 0.75056751783 0.490949876398 -2.36896637846 1.10269260517 0.635637359698 -2.15097674793 1.42766597266 0.764673143012 -1.88002310805 1.71748538734 0.874880324932 -1.5627764978 1.96501488097 0.963544803589 -1.20704915522 2.16415883219 1.02848357603 -0.821600432979 2.31001425339 1.06809790976 -0.415921198642 2.39898878781 1.08141200278 -5.29876504306e-07 2.42889282129 1.06809797256 0.4159201409 2.39898878781 1.0284839242 0.821599605334 2.31001425339 0.963545097907 1.20704833738 2.16415905631 0.874880785021 1.56277535717 1.96501555332 0.764674043206 1.88002175995 1.71748650792 0.635637964631 2.15097575548 1.4276672053 0.490950850421 2.36896563198 1.10269428605 0.33417485655 2.52862392116 0.750569086643 0.410772865339 2.15083323463 0.642463116063 0.603484339974 2.01502851345 0.907708151504 0.781335991918 1.82960774328 1.15250007235 0.939949014013 1.59913583279 1.37081178059 1.07541695179 1.32928784962 1.55726773973 1.18440445457 1.02670849958 1.70727648341 1.26422829347 0.698847905583 1.81714469053 1.31292241098 0.353779261205 1.88416638339 1.32928834715 -4.94751273511e-07 1.90669206757 1.31292235756 -0.353780271872 1.88416638339 1.26422796383 -0.698848712796 1.81714469053 1.18440407543 -1.02670923871 1.7072762593 1.07541630284 -1.32928879641 1.55726729149 0.939947932115 -1.59913698324 1.37081110824 0.781335267422 -1.82960864567 1.15249906382 0.603483251307 -2.01502927693 0.907706750778 0.410771588079 -2.15083374489 0.642461939454 0.610566148074 -2.52862444072 0.549756842893 0.897010525536 -2.36896640912 0.807672505234 1.16136770907 -2.15097678762 1.04570072141 1.397127855 -1.8800231558 1.25798046328 1.59848652488 -1.56277655243 1.43928455904 1.76048470199 -1.20704921539 1.58514861603 1.87913401618 -0.821600497202 1.69198117379 1.95151255359 -0.415921265338 1.75715077317 1.97583881485 -5.97403845003e-07 1.77905419965 1.95151261639 0.415920074204 1.75715077317 1.87913436436 0.821599541112 1.69198117379 1.76048510836 1.20704827722 1.58514872809 1.59848732115 1.56277530254 1.43928511933 1.39712925946 1.8800217122 1.25798113563 1.16136881826 2.15097571579 1.04570172993 0.897012115879 2.36896560133 0.807673793901 0.610567930611 2.52862390029 0.549757907444 0.711526687632 2.52862389267 0.410800231384 1.04533512164 2.36896559013 0.603524956333 1.35340382073 2.15097570129 0.781388542168 1.62814768904 1.88002169476 0.94001176014 1.86280077499 1.56277528259 1.07548916295 2.05158525488 1.20704825524 1.18448411 2.18985341032 0.821599517653 1.26431337116 2.2741996863 0.415920049841 1.31301055172 2.30254809645 -6.22069706521e-07 1.32937763902 2.2741996235 -0.4159212897 1.31301055172 2.18985306214 -0.82160052066 1.26431348322 2.0515848485 -1.20704923737 1.18448399794 1.86279986667 -1.56277657238 1.07548871472 1.62814617252 -1.88002317324 0.940011311908 1.35340248742 -2.15097680212 0.781387701733 1.04533330718 -2.36896642032 0.603523947811 0.711524680979 -2.52862444834 0.410799474992 0.664642660319 -2.15083376406 0.293038658468 0.976456763783 -2.01502930508 0.394353156785 1.26422741853 -1.82960868212 0.487855471048 1.52086835412 -1.5991370271 0.571243424334 1.74006084157 -1.32928884659 0.64246332848 1.91640682064 -1.02670929398 0.699761866967 2.04556471419 -0.698848771785 0.741728004636 2.1243536422 -0.353780333133 0.767327669661 2.15083432765 -5.56776261864e-07 0.77593188012 2.12435369562 0.353779199944 0.767327669661 2.04556504383 0.698847846594 0.741727836549 1.91640719978 1.02670844432 0.699761922996 1.74006171463 1.32928779944 0.642463664654 1.52086971616 1.59913578893 0.571243536392 1.26422870331 1.82960770682 0.487856031338 0.976458524798 2.0150284853 0.394353829133 0.664644553898 2.15083321547 0.293038994643 0.814303662551 2.52862343668 0.00452053881228 1.19881378154 2.36896535442 -0.0223666941348 1.55367445934 2.15097568617 -0.0471808976152 1.87014864307 1.88002156443 -0.0693111318583 2.14044292066 1.56277548574 -0.0882115907577 2.35790160542 1.20704856829 -0.103417584134 2.51717146133 0.821599941174 -0.114554782512 2.61432911303 0.415920500409 -0.121348826084 2.6469834668 -1.50260614378e-07 -0.123632034184 2.61432972257 -0.415920839133 -0.121348770055 2.51717223374 -0.82160009714 -0.11455443233 2.35790254374 -1.20704892432 -0.103417416047 2.14044380527 -1.56277636923 -0.0882115067141 1.8701491436 -1.88002319151 -0.0693105855754 1.55367525514 -2.15097681724 -0.0471808275789 1.1988143203 -2.36896665602 -0.0223664840259 0.814304233232 -2.52862490433 0.00452112711703 Normals 255 -0.351769000449 1.18572143859 1.41585442048 -0.515633338514 1.22697438549 1.32778306447 -0.802682769502 1.22611380142 1.17757405963 -1.05444631154 1.12628052881 1.07424084027 -1.26438313329 0.962071926524 1.00504599368 -1.42956711687 0.754487502803 0.95983403615 -1.54856391774 0.51792845249 0.931662692117 -1.62034058377 0.26329614576 0.916286082546 -1.64432360102 1.24142970635e-07 0.911409146779 -1.62034062353 -0.263295901096 0.916286082546 -1.54856399595 -0.517928218664 0.931662692117 -1.42956723079 -0.754487286944 0.95983403615 -1.26438327856 -0.962071735608 1.00504599368 -1.0544464816 -1.1262803696 1.07424084027 -0.80268295464 -1.22611368022 1.17757405963 -0.515633523782 -1.22697430763 1.32778306447 -0.351769179488 -1.18572138547 1.41585442048 0.358022747916 -0.401570908478 1.80136023875 0.345113271059 -0.373514319886 1.8099091456 -1.33151260387 -1.32646329535 -0.0435480817489 -1.47242670208 -1.16862337317 0.0244992132543 -1.60398865758 -0.976587708378 0.0888171018561 -1.71501014745 -0.7568970175 0.142176281309 -1.79854884026 -0.51632167971 0.181478461159 -1.85030148359 -0.261689363654 0.205346651534 -1.86785838186 1.41019380741e-07 0.213379222595 -1.85030144407 0.261689643041 0.205346651534 -1.7985487623 0.516321951283 0.181478461159 -1.71501003316 0.756897276459 0.142176281309 -1.60398851012 0.976587950574 0.0888171018561 -1.47242652562 1.1686235955 0.0244992132543 -1.33151240358 1.3264634964 -0.0435480817488 0.345113327458 0.373514267776 1.8099091456 0.358022808551 0.401570854418 1.80136023875 -0.954383369522 1.49922099389 -0.612999568747 -1.0672983253 1.44603399876 -0.551550422323 -1.24441638885 1.37270816177 -0.318663434303 -1.41195282024 1.23586771533 -0.115783802557 -1.56032575928 1.04744661579 0.0513509269365 -1.68242075214 0.819092287257 0.181191601346 -1.77307405146 0.561820706967 0.273623466625 -1.82884300942 0.285557835704 0.328876031907 -1.84766217155 1.39494608547e-07 0.34729355365 -1.82884305254 -0.285557559556 0.328876031907 -1.77307413629 -0.56182043924 0.273623466625 -1.68242087582 -0.819092033218 0.181191601346 -1.56032591744 -1.04744638018 0.0513509269365 -1.41195300685 -1.23586750213 -0.115783802557 -1.24441659613 -1.37270797387 -0.318663434303 -1.06729854364 -1.4460338376 -0.551550422323 -0.954383595898 -1.49922084978 -0.612999568747 0.108267312955 -1.59572654608 0.988062917047 0.0163518103673 -1.53783466665 1.08124062653 -0.247804841924 -1.43564892068 1.18818857517 -0.478339488964 -1.27780899174 1.29335771704 -0.670375135732 -1.07475723271 1.38917472197 -0.821559460156 -0.836362147053 1.46961512583 -0.930458119698 -0.571918613067 1.53020366681 -0.996095593516 -0.290205033505 1.56772719278 -1.01807037819 7.68621647597e-08 1.58046449227 -0.996095549696 0.290205183911 1.56772719278 -0.93045803334 0.571918753562 1.53020366681 -0.821559333869 0.836362271105 1.46961512583 -0.670374973448 1.07475733393 1.38917472197 -0.47833929602 1.27780906397 1.29335771704 -0.247804625147 1.4356489581 1.18818857518 0.0163520425739 1.53783466418 1.08124062653 0.108267553903 1.59572652974 0.988062917047 1.48395899062 0.156864418311 1.14349312431 1.48149180719 0.141143544034 1.14877173012 -0.848869982333 1.3845274536 0.946982031407 -0.927761275106 1.21532721606 1.09386322103 -1.00257892338 1.01290658805 1.22605629141 -1.06660992109 0.783634219652 1.33512708266 -1.11537917357 0.533936190844 1.41602648398 -1.14578816321 0.270468048563 1.46571357659 -1.15617316369 8.72886353586e-08 1.48246726121 -1.14578820405 -0.270467875554 1.46571357659 -1.11537925419 -0.533936022426 1.41602648398 -1.06661003942 -0.783634058599 1.33512708266 -1.00257907632 -1.01290643667 1.22605629141 -0.927761458615 -1.21532707597 1.09386322103 1.48051643486 -0.10775124235 1.15359123426 1.48149178588 -0.141143767733 1.14877173012 1.48395896694 -0.156864642382 1.14349312431 -1.06052828 -1.54695723033 0.128693087215 -1.13838676817 -1.47902472752 0.225485495958 -1.14234568296 -1.39892855425 0.521829774086 -1.15703381169 -1.25583413488 0.786388046174 -1.17780377149 -1.06196240747 1.00963600956 -1.19954907803 -0.829132806169 1.18652455349 -1.218196086 -0.568074384276 1.31441448734 -1.23053175587 -0.288541122009 1.39169923524 -1.23489225052 9.32317613322e-08 1.41751819157 -1.2305317123 0.288541307814 1.39169923524 -1.21819600022 0.568074568218 1.31441448734 -1.19954895283 0.829132987295 1.18652455349 -1.17780361114 1.06196258532 1.00963600956 -1.15703362207 1.25583430958 0.786388046174 -1.14234547173 1.39892872674 0.521829774086 -1.13838654484 1.47902489941 0.225485495958 -1.06052804641 1.54695739046 0.128693087215 0.703136414184 1.58178422358 0.733430621795 0.706980550689 1.51522869554 0.859369794966 0.542485038728 1.42337058701 1.10183850269 0.405874046305 1.27172715919 1.32370937609 0.297434387588 1.07211795786 1.51540089252 0.215674319261 0.835386783593 1.67031462631 0.158700453766 0.571631746723 1.78391805372 0.125078407112 0.290205099265 1.85322762935 0.113947539339 -8.60281042067e-09 1.8765220296 0.125078363292 -0.290205118151 1.85322762935 0.158700367452 -0.571631770686 1.78391805372 0.215674193121 -0.835386816159 1.67031462631 0.297434225702 -1.07211800278 1.51540089252 0.405873854279 -1.27172722047 1.32370937609 0.542484823805 -1.42337066892 1.10183850269 0.706980321896 -1.51522880229 0.859369794966 0.703136175342 -1.58178432975 0.733430621795 1.88002192974 -1.41937704257e-07 1.41937704257e-07 1.88002192974 -1.41937704257e-07 1.41937704257e-07 -2.00498321862e-07 -1.3911829647 1.26449787748 -2.00099806664e-07 -1.22008927651 1.43031307173 -1.96136278817e-07 -1.01634904738 1.5815547818 -1.88278520181e-07 -0.786101264947 1.70772339351 -1.76487563324e-07 -0.535542626715 1.80210607003 -1.60932331988e-07 -0.271271222099 1.86034218482 -1.41937704257e-07 0.0 1.88002192974 -1.19971517769e-07 0.271271222099 1.86034218482 -9.56228779017e-08 0.535542626715 1.80210607003 -6.9580533637e-08 0.786101264947 1.70772339351 -4.26718449961e-08 1.01634904738 1.5815547818 -1.58714546898e-08 1.22008927651 1.43031307173 1.88002192974 -1.41937704257e-07 1.41937704257e-07 1.88002192974 -1.41937704257e-07 1.41937704257e-07 1.88002192974 -1.41937704257e-07 1.41937704257e-07 -0.703136286087 1.58178432975 0.733430515625 -0.706980451657 1.51522880229 0.859369688215 -0.542484990178 1.42337066892 1.10183842078 -0.405874054154 1.27172722047 1.3237093148 -0.297434454522 1.07211800278 1.51540084761 -0.215674445331 0.835386816159 1.67031459374 -0.158700636816 0.571631770686 1.78391802975 -0.125078643122 0.290205118151 1.85322761046 -0.113947822686 8.60281042067e-09 1.8765220124 -0.125078686942 -0.290205099265 1.85322761046 -0.15870072313 -0.571631746723 1.78391802975 -0.215674571471 -0.835386783593 1.67031459374 -0.297434616407 -1.07211795786 1.51540084761 -0.405874246179 -1.27172715919 1.3237093148 -0.542485205101 -1.42337058701 1.10183842078 -0.706980680451 -1.51522869554 0.859369688215 -0.703136524929 -1.58178422358 0.733430515625 1.06052802698 -1.54695739046 0.128693247351 1.13838651079 -1.47908227313 0.22548566785 1.14234539294 -1.39892872674 0.521829946576 1.15703350333 -1.25583430958 0.786388220882 1.17780345869 -1.06196258532 1.0096361874 1.19954877367 -0.829132987295 1.18652473462 1.21819580175 -0.568074568218 1.31441467129 1.23053150216 -0.288541307814 1.39169942105 1.23489203648 -9.32317613322e-08 1.41751837804 1.23053154573 0.288541122009 1.39169942105 1.21819588753 0.568074384276 1.31441467129 1.19954889887 0.829132806169 1.18652473462 1.17780361904 1.06196240747 1.0096361874 1.15703369295 1.25583413488 0.786388220882 1.14234560417 1.39892855425 0.521829946576 1.13838673412 1.47902472752 0.22548566785 1.06052826057 1.54695723033 0.128693247351 1.4839591396 -0.156864642382 -1.14349290024 1.48149195934 -0.141143767733 -1.14877150642 0.8488700484 1.38452732543 0.946982159583 0.927761293446 1.21532707597 1.09386336112 1.00257889119 1.01290643667 1.22605644279 1.06660983782 0.783634058599 1.33512724371 1.11537904037 0.533936022426 1.41602665239 1.14578798274 0.270467875554 1.4657137496 1.15617293984 -8.72886353586e-08 1.48246743578 1.1457879419 -0.270468048563 1.4657137496 1.11537895975 -0.533936190844 1.41602665239 1.0666097195 -0.783634219652 1.33512724371 1.00257873825 -1.01290658805 1.22605644279 0.927761109937 -1.21532721606 1.09386336112 1.48051662532 0.107751018798 -1.15359101071 1.48149198065 0.141143544034 -1.14877150642 1.48395916329 0.156864418311 -1.14349290024 -0.108267703097 -1.59572652974 0.988062900699 -0.0163522058366 -1.53783466418 1.08124062406 0.247804445735 -1.4356489581 1.18818861259 0.478339100729 -1.27780906397 1.29335778927 0.670374763688 -1.07475733393 1.38917482319 0.821559111963 -0.836362271105 1.46961524988 0.930457802286 -0.571918753562 1.53020380731 0.996095312976 -0.290205183911 1.56772734318 1.01807013955 -7.68621647597e-08 1.58046464599 0.996095356796 0.290205033505 1.56772734318 0.930457888643 0.571918613067 1.53020380731 0.82155923825 0.836362147053 1.46961524988 0.670374925972 1.07475723271 1.38917482319 0.478339293673 1.27780899174 1.29335778927 0.247804662512 1.43564892068 1.18818861259 -0.0163519736301 1.53783466665 1.08124062406 -0.108267462149 1.59572654608 0.988062900699 0.954383688458 1.49922084978 -0.612999424639 1.06729862692 1.4460338376 -0.551550261165 1.24441664424 1.37270797387 -0.318663246401 1.41195302433 1.23586750213 -0.115783589358 1.56032590969 1.04744638018 0.0513511625391 1.68242084846 0.819092033218 0.181191855384 1.77307409497 0.56182043924 0.273623734352 1.82884300288 0.285557559556 0.328876308054 1.84766211911 -1.39494608547e-07 0.347293832639 1.82884295976 -0.285557835704 0.328876308054 1.77307401014 -0.561820706967 0.273623734352 1.68242072478 -0.819092287257 0.181191855384 1.56032575153 -1.04744661579 0.0513511625391 1.41195283772 -1.23586771533 -0.115783589358 1.24441643697 -1.37270816177 -0.318663246401 1.06729840858 -1.44603399876 -0.551550261165 0.954383462082 -1.49922099389 -0.612999424639 0.358023080549 0.401570854418 -1.80136018469 0.345113600747 0.373514267776 -1.80990909349 1.33151241015 -1.3264634964 -0.0435478806961 1.47242652192 -1.1686235955 0.0244994355845 1.60398849671 -0.976587950574 0.0888173440516 1.7150100117 -0.756897276459 0.142176540268 1.79854873489 -0.516321951283 0.181478732732 1.85030141306 -0.261689643041 0.205404318645 1.86785834964 -1.41019380741e-07 0.213379504634 1.85030145258 0.261689363654 0.205346930922 1.79854881286 0.51632167971 0.181478732732 1.71501012599 0.7568970175 0.142176540268 1.60398864417 0.976587708378 0.0888173440516 1.47242669838 1.16862337317 0.0244994355846 1.33151261044 1.32646329535 -0.0435478806961 0.345113544348 -0.373514319886 -1.80990909349 0.358023019914 -0.401570908478 -1.80136018469 0.3517689657 1.18572138547 1.41585447359 0.515633323292 1.22697430763 1.32778314233 0.802682776831 1.22611368022 1.17757418083 1.0544463194 1.1262803696 1.07424099948 1.2643831268 0.962071735608 1.00504618459 1.42956708586 0.754487286944 0.959834252009 1.54856385527 0.517928218664 0.931662925944 1.62034048517 0.263295901096 0.916286327211 1.64432346341 -1.24142970635e-07 0.911409395064 1.62034044542 -0.26329614576 0.916286327211 1.54856377707 -0.51792845249 0.931662925944 1.42956697194 -0.754487502803 0.959834252009 1.26438298154 -0.962071926524 1.00504618459 1.05444614933 -1.12628052881 1.07424099948 0.802682591693 -1.22611380142 1.17757418083 0.515633138024 -1.22697438549 1.32778314233 0.351768786661 -1.18572143859 1.41585447359 Faces 224 16 17 18 15 0 0 15 18 19 14 0 0 14 19 20 13 0 0 13 20 21 12 0 0 12 21 22 11 0 0 11 22 23 10 0 0 10 23 24 9 0 0 9 24 25 8 0 0 8 25 26 7 0 0 7 26 27 6 0 0 6 27 28 5 0 0 5 28 29 4 0 0 4 29 30 3 0 0 3 30 31 2 0 0 2 31 32 1 0 0 33 0 1 32 0 0 32 35 34 33 0 0 31 36 35 32 0 0 30 37 36 31 0 0 29 38 37 30 0 0 28 39 38 29 0 0 27 40 39 28 0 0 26 41 40 27 0 0 25 42 41 26 0 0 24 43 42 25 0 0 23 44 43 24 0 0 22 45 44 23 0 0 21 46 45 22 0 0 20 47 46 21 0 0 19 48 47 20 0 0 18 49 48 19 0 0 17 50 49 18 0 0 50 51 52 49 0 0 49 52 53 48 0 0 48 53 54 47 0 0 47 54 55 46 0 0 46 55 56 45 0 0 45 56 57 44 0 0 44 57 58 43 0 0 43 58 59 42 0 0 42 59 60 41 0 0 41 60 61 40 0 0 40 61 62 39 0 0 39 62 63 38 0 0 38 63 64 37 0 0 37 64 65 36 0 0 36 65 66 35 0 0 35 66 67 34 0 0 66 69 68 67 0 0 65 70 69 66 0 0 64 71 70 65 0 0 63 72 71 64 0 0 62 73 72 63 0 0 61 74 73 62 0 0 60 75 74 61 0 0 59 76 75 60 0 0 58 77 76 59 0 0 57 78 77 58 0 0 56 79 78 57 0 0 55 80 79 56 0 0 54 81 80 55 0 0 53 82 81 54 0 0 52 83 82 53 0 0 51 84 83 52 0 0 84 85 86 83 0 0 83 86 87 82 0 0 82 87 88 81 0 0 81 88 89 80 0 0 80 89 90 79 0 0 79 90 91 78 0 1 78 91 92 77 0 0 77 92 93 76 0 0 76 93 94 75 0 0 75 94 95 74 0 0 74 95 96 73 0 0 73 96 97 72 0 0 72 97 98 71 0 0 71 98 99 70 0 0 70 99 100 69 0 0 69 100 101 68 0 0 100 103 102 101 0 0 99 104 103 100 0 0 98 105 104 99 0 0 97 106 105 98 0 0 96 107 106 97 0 0 95 108 107 96 1 1 94 109 108 95 0 0 93 110 109 94 0 0 92 111 110 93 0 0 91 112 111 92 0 1 90 113 112 91 0 0 89 114 113 90 0 0 88 115 114 89 0 0 87 116 115 88 0 0 86 117 116 87 0 0 85 118 117 86 0 0 118 119 120 117 0 0 117 120 121 116 0 0 116 121 122 115 0 0 115 122 123 114 0 0 114 123 124 113 0 0 113 124 125 112 0 1 112 125 126 111 0 0 111 126 127 110 0 0 110 127 128 109 0 0 109 128 129 108 0 0 108 129 130 107 0 0 107 130 131 106 0 0 106 131 132 105 0 0 105 132 133 104 0 0 104 133 134 103 0 0 103 134 135 102 0 0 134 137 136 135 0 0 133 138 137 134 0 0 132 139 138 133 0 0 131 140 139 132 0 0 130 141 140 131 0 0 129 142 141 130 0 0 128 143 142 129 0 0 127 144 143 128 0 0 126 145 144 127 0 0 125 146 145 126 0 0 124 147 146 125 0 1 123 148 147 124 0 0 122 149 148 123 0 0 121 150 149 122 0 0 120 151 150 121 0 0 119 152 151 120 0 0 152 153 154 151 0 0 151 154 155 150 0 0 150 155 156 149 0 0 149 156 157 148 0 0 148 157 158 147 0 0 147 158 159 146 0 0 146 159 160 145 0 1 145 160 161 144 0 0 144 161 162 143 0 0 143 162 163 142 0 0 142 163 164 141 1 1 141 164 165 140 0 0 140 165 166 139 0 0 139 166 167 138 0 0 138 167 168 137 0 0 137 168 169 136 0 0 168 171 170 169 0 0 167 172 171 168 0 0 166 173 172 167 0 0 165 174 173 166 0 0 164 175 174 165 0 0 163 176 175 164 0 0 162 177 176 163 0 0 161 178 177 162 0 0 160 179 178 161 0 0 159 180 179 160 0 0 158 181 180 159 0 1 157 182 181 158 0 0 156 183 182 157 0 0 155 184 183 156 0 0 154 185 184 155 0 0 153 186 185 154 0 0 186 187 188 185 0 0 185 188 189 184 0 0 184 189 190 183 0 0 183 190 191 182 0 0 182 191 192 181 0 0 181 192 193 180 0 0 180 193 194 179 0 0 179 194 195 178 0 0 178 195 196 177 0 0 177 196 197 176 0 0 176 197 198 175 0 0 175 198 199 174 0 0 174 199 200 173 0 0 173 200 201 172 0 0 172 201 202 171 0 0 171 202 203 170 0 0 202 205 204 203 0 0 201 206 205 202 0 0 200 207 206 201 0 0 199 208 207 200 0 0 198 209 208 199 0 0 197 210 209 198 0 0 196 211 210 197 0 0 195 212 211 196 0 0 194 213 212 195 0 0 193 214 213 194 0 0 192 215 214 193 0 0 191 216 215 192 0 0 190 217 216 191 0 0 189 218 217 190 0 0 188 219 218 189 0 0 187 220 219 188 0 0 220 221 222 219 0 0 219 222 223 218 0 0 218 223 224 217 0 0 217 224 225 216 0 0 216 225 226 215 0 0 215 226 227 214 0 0 214 227 228 213 0 0 213 228 229 212 0 0 212 229 230 211 0 0 211 230 231 210 0 0 210 231 232 209 0 0 209 232 233 208 0 0 208 233 234 207 0 0 207 234 235 206 0 0 206 235 236 205 0 0 205 236 237 204 0 0 236 239 238 237 0 0 235 240 239 236 0 0 234 241 240 235 0 0 233 242 241 234 0 0 232 243 242 233 0 0 231 244 243 232 0 0 230 245 244 231 0 0 229 246 245 230 0 0 228 247 246 229 0 0 227 248 247 228 0 0 226 249 248 227 0 0 225 250 249 226 0 0 224 251 250 225 0 0 223 252 251 224 0 0 222 253 252 223 0 0 221 254 253 222 0 0 criticalmass-1.0.0.orig/data/models/WeaponUpgrade.model0000644000175000017500000001546307630537344022402 0ustar danieldanielName WeaponUpgrade Scale 1.0 1.0 1.0 Colors 2 1.0 0.0 0.0 1.0 1.0 0.0 Vertices 64 1.0 0.999999940395 0.770616412163 1.30656290054 0.541196107864 0.770616412163 1.41421353817 -6.18172464328e-08 0.770616412163 1.30656290054 -0.541196227074 0.770616412163 1.0 -1.0 0.770616412163 0.541196167469 -1.30656290054 0.770616412163 2.13540303662e-07 -1.41421353817 0.770616412163 -0.541195809841 -1.30656301975 0.770616412163 -0.999999701977 -1.00000023842 0.770616412163 -1.30656290054 -0.541196286678 0.770616412163 -1.41421353817 1.68643339293e-08 0.770616412163 -1.30656290054 0.541196286678 0.770616412163 -0.999999642372 1.00000035763 0.770616412163 -0.541195452213 1.30656325817 0.770616412163 9.21618550365e-07 1.41421353817 0.770616412163 0.541197180748 1.30656254292 0.770616412163 1.30437374115 3.13575029373 0.270616412163 1.55487612119e-06 2.37587881088 0.195616364479 -1.30436956882 3.13575196266 0.270616412163 -1.68711388111 1.6800006628 0.195616364479 -3.14903044701 1.29887115955 0.270616412163 -2.38594031334 2.83320673589e-08 0.195616364479 -3.14903044701 -1.29887115955 0.270616412163 -1.68711400032 -1.68000042439 0.195616364479 -1.3043705225 -3.13575148582 0.270616412163 3.6026693806e-07 -2.37587881088 0.195616364479 1.30437135696 -3.13575100899 0.270616412163 1.68711447716 -1.68000006676 0.195616364479 3.14903044701 -1.29887104034 0.270616412163 2.38594031334 -1.0385295468e-07 0.195616364479 3.14903044701 1.29887068272 0.270616412163 1.68711447716 1.67999982834 0.195616364479 1.68711447716 1.67999982834 -0.154383540154 3.14903044701 1.29887068272 -0.229383587837 2.38594031334 -1.0385295468e-07 -0.154383540154 3.14903044701 -1.29887104034 -0.229383587837 1.68711447716 -1.68000006676 -0.154383540154 1.30437135696 -3.13575100899 -0.229383587837 3.6026693806e-07 -2.37587881088 -0.154383540154 -1.3043705225 -3.13575148582 -0.229383587837 -1.68711400032 -1.68000042439 -0.154383540154 -3.14903044701 -1.29887115955 -0.229383587837 -2.38594031334 2.83320673589e-08 -0.154383540154 -3.14903044701 1.29887115955 -0.229383587837 -1.68711388111 1.6800006628 -0.154383540154 -1.30436956882 3.13575196266 -0.229383587837 1.55487612119e-06 2.37587881088 -0.154383540154 1.30437374115 3.13575029373 -0.229383587837 0.541197180748 1.30656254292 -0.729383587837 9.21618550365e-07 1.41421353817 -0.729383587837 -0.541195452213 1.30656325817 -0.729383587837 -0.999999642372 1.00000035763 -0.729383587837 -1.30656290054 0.541196286678 -0.729383587837 -1.41421353817 1.68643339293e-08 -0.729383587837 -1.30656290054 -0.541196286678 -0.729383587837 -0.999999701977 -1.00000023842 -0.729383587837 -0.541195809841 -1.30656301975 -0.729383587837 2.13540303662e-07 -1.41421353817 -0.729383587837 0.541196167469 -1.30656290054 -0.729383587837 1.0 -1.0 -0.729383587837 1.30656290054 -0.541196227074 -0.729383587837 1.41421353817 -6.18172464328e-08 -0.729383587837 1.30656290054 0.541196107864 -0.729383587837 1.0 0.999999940395 -0.729383587837 Normals 64 0.160252690315 0.160313725471 0.973937213421 0.15967284143 0.0667745023966 0.984893321991 0.225775927305 0.0 0.974150836468 0.15967284143 -0.0667745023966 0.984893321991 0.160252690315 -0.160313725471 0.973937213421 0.065981015563 -0.160863056779 0.9847407341 0.0 -0.227607041597 0.973723590374 -0.065981015563 -0.160863056779 0.9847407341 -0.160252690315 -0.160313725471 0.973937213421 -0.15967284143 -0.0667745023966 0.984893321991 -0.225775927305 0.0 0.974150836468 -0.15967284143 0.0667745023966 0.984893321991 -0.160252690315 0.160313725471 0.973937213421 -0.065981015563 0.160863056779 0.9847407341 0.0 0.227607041597 0.973723590374 0.065981015563 0.160863056779 0.9847407341 -0.74886316061 0.475234240294 0.461867123842 0.0 0.773308515549 0.634022057056 -0.865443885326 -0.194250315428 0.461775571108 -0.545182645321 0.546891689301 0.635334312916 -0.473769336939 -0.751121580601 0.459700316191 -0.771111190319 0.0 0.636677145958 0.195287942886 -0.866298437119 0.459761351347 -0.545182645321 -0.546891689301 0.635334312916 0.74886316061 -0.475234240294 0.461867123842 0.0 -0.773308515549 0.634022057056 0.865443885326 0.194250315428 0.461775571108 0.545182645321 -0.546891689301 0.635334312916 0.473769336939 0.751121580601 0.459700316191 0.771111190319 0.0 0.636677145958 -0.195287942886 0.866298437119 0.459761351347 0.545182645321 0.546891689301 0.635334312916 0.545182645321 0.546891689301 -0.635334312916 -0.38233590126 0.924008905888 0.00143436994404 0.771111190319 0.0 -0.636677145958 0.38233590126 0.924008905888 -0.00143436994404 0.545182645321 -0.546891689301 -0.635334312916 0.923734247684 0.383007287979 -0.00146488845348 0.0 -0.773308515549 -0.634022057056 0.923734247684 -0.383007287979 0.00146488845348 -0.545182645321 -0.546891689301 -0.635334312916 0.38233590126 -0.924008905888 0.00143436994404 -0.771111190319 0.0 -0.636677145958 -0.38233590126 -0.924008905888 -0.00143436994404 -0.545182645321 0.546891689301 -0.635334312916 -0.923734247684 -0.383007287979 -0.00146488845348 0.0 0.773308515549 -0.634022057056 -0.923734247684 0.383007287979 0.00146488845348 0.065981015563 0.160863056779 -0.9847407341 0.0 0.227607041597 -0.973723590374 -0.065981015563 0.160863056779 -0.9847407341 -0.160252690315 0.160313725471 -0.973937213421 -0.15967284143 0.0667745023966 -0.984893321991 -0.225775927305 0.0 -0.974150836468 -0.15967284143 -0.0667745023966 -0.984893321991 -0.160252690315 -0.160313725471 -0.973937213421 -0.065981015563 -0.160863056779 -0.9847407341 0.0 -0.227607041597 -0.973723590374 0.065981015563 -0.160863056779 -0.9847407341 0.160252690315 -0.160313725471 -0.973937213421 0.15967284143 -0.0667745023966 -0.984893321991 0.225775927305 0.0 -0.974150836468 0.15967284143 0.0667745023966 -0.984893321991 0.160252690315 0.160313725471 -0.973937213421 Faces 76 0 31 16 15 0 0 15 16 17 14 0 0 14 17 18 13 0 1 13 18 19 12 0 1 12 19 20 11 0 0 11 20 21 10 0 0 10 21 22 9 0 1 9 22 23 8 0 1 8 23 24 7 0 0 7 24 25 6 0 0 6 25 26 5 0 1 5 26 27 4 0 1 4 27 28 3 0 0 3 28 29 2 0 0 2 29 30 1 0 1 31 0 1 30 0 1 30 33 32 31 0 1 29 34 33 30 0 1 28 35 34 29 0 0 27 36 35 28 0 0 26 37 36 27 0 1 25 38 37 26 0 1 24 39 38 25 0 0 23 40 39 24 0 0 22 41 40 23 0 1 21 42 41 22 0 1 20 43 42 21 0 0 19 44 43 20 0 0 18 45 44 19 0 1 17 46 45 18 0 1 16 47 46 17 0 0 31 32 47 16 0 0 32 63 48 47 0 0 47 48 49 46 0 0 46 49 50 45 0 1 45 50 51 44 0 1 44 51 52 43 0 0 43 52 53 42 0 0 42 53 54 41 0 1 41 54 55 40 0 1 40 55 56 39 0 0 39 56 57 38 0 0 38 57 58 37 0 1 37 58 59 36 0 1 36 59 60 35 0 0 35 60 61 34 0 0 34 61 62 33 0 1 33 62 63 32 0 1 13 15 14 0 1 0 12 15 13 0 1 0 12 0 15 0 1 0 11 0 12 0 1 0 1 0 11 0 1 0 10 1 11 0 1 0 10 2 1 0 1 0 9 2 10 0 1 0 9 3 2 0 1 0 9 4 3 0 1 0 8 4 9 0 1 0 8 5 4 0 1 0 7 5 8 0 1 0 7 6 5 0 1 0 50 49 48 0 1 0 51 50 48 0 1 0 51 48 63 0 1 0 52 51 63 0 1 0 52 63 62 0 1 0 53 52 62 0 1 0 53 62 61 0 1 0 54 53 61 0 1 0 54 61 60 0 1 0 54 60 59 0 1 0 55 54 59 0 1 0 55 59 58 0 1 0 56 55 58 0 1 0 56 58 57 0 1 0 criticalmass-1.0.0.orig/data/models/Boss1_Face.model0000644000175000017500000004266610355351306021541 0ustar danieldanielName Boss1_Face Scale 1.0 1.0 1.0 Offset 0.0 12.0 0.0 Colors 1 0.112325698137 0.738600492477 0.901760816574 Vertices 174 4.65539717674 3.18478238583 -7.68874597549 13.7568941116 -4.05979442596 -5.43197965622 14.2917180061 -5.04729259014 -4.88865280151 14.6795911789 -5.98072636127 -4.15745723248 14.9056105614 -6.82422494888 -3.26649284363 15.7842936516 -6.08692216873 -2.50006520748 15.7979435921 -5.04231762886 -3.18197965622 15.606760025 -3.94384074211 -3.74161219597 15.2180914879 -2.83370447159 -4.15745723248 4.65539717674 5.88471078873 -5.88471114635 10.6553971767 13.688744545 -3.18478274345 16.1944327354 -2.01445698738 -2.24999928474 16.4854431152 -3.20653653145 -2.02494567633 16.5452013016 -4.41529297829 -1.72207474709 16.3714127541 -5.59427189827 -1.35302522779 16.5775794983 -5.42127656937 6.59425325011e-07 16.8076043129 -4.19511079788 6.88500051638e-07 16.7939958572 -2.9476300478 7.21809641391e-07 16.5372776985 -1.72677540779 2.89165939193e-07 10.6553964615 14.3222379684 -2.82978994903e-07 10.6553964615 13.688744545 3.18478238583 16.1944327354 -2.01445698738 2.25 16.4854431152 -3.20653688908 2.02494710684 16.5452013016 -4.41529297829 1.72207581997 16.3714113235 -5.5942722559 1.35302647948 15.7842936516 -6.08692216873 2.50006628036 15.7979435921 -5.04231762886 3.18198037148 15.6067585945 -3.94384002686 3.74161362648 15.2180914879 -2.83370411396 4.15745723248 4.65539646149 5.88471078873 5.8847104311 4.65539574623 3.18478274345 7.68874454498 13.7568941116 -4.05979442596 5.43197965622 14.2917165756 -5.04729223251 4.88865280151 14.6795897484 -5.98072564602 4.1574575901 14.9056105614 -6.82422494888 3.26649355888 13.8691334724 -7.69393372536 3.53562712669 13.3604049683 -7.08765435219 4.49999964237 12.7405171394 -6.34890246391 5.2914390564 12.0332951546 -5.50606584549 5.87953233719 4.65539574623 2.9460762363e-07 8.32223725319 1.22532370916e-08 -3.24717593193 7.83937525749 4.65539574623 -3.18478167057 7.68874454498 10.309694767 -6.95233798027 5.43197965622 11.1893191338 -7.65051269531 4.88865244389 12.0412187576 -8.19458270073 4.15745723248 12.832654953 -8.56364035606 3.26649355888 11.9539718628 -9.30094313622 2.50006628036 10.922867775 -9.13299179077 3.18198037148 9.87427711487 -8.75396490097 3.74161219597 8.84849882126 -8.17842721939 4.15745723248 4.65539574623 -5.88471007347 5.8847104311 7.85268974304 -11.0152173042 5.37206983566 7.8721575737 -8.9976747036 2.25 8.99559402466 -9.49126696587 2.02494603395 10.1756086349 -9.76001644135 1.72207546234 11.3668556213 -9.79359483719 1.35302647948 11.1606874466 -9.96659016609 9.14942916097e-07 9.91320705414 -9.98019790649 6.21203867013e-07 8.68704128265 -9.75017309189 2.75859804333e-07 7.52931332588 -9.28535556793 7.08789571036e-07 7.8526904583 -12.0837864876 8.30518757766e-07 7.85269117355 -11.0152173042 -5.3720676899 7.87215900421 -8.99767398834 -2.24999821186 8.99559545517 -9.49126625061 -2.0249453187 10.1756100655 -9.76001644135 -1.72207403183 11.3668556213 -9.79359483719 -1.35302460194 11.9539732933 -9.30094385147 -2.5000641346 10.922867775 -9.13299179077 -3.18197822571 9.87427854538 -8.75396347046 -3.74161076546 8.84849882126 -8.17842721939 -4.15745544434 4.65539646149 -5.88470935822 -5.88470864296 4.65539717674 -3.18478167057 -7.68874239922 10.3096961975 -6.95233798027 -5.43197715282 11.1893205643 -7.65051198006 -4.88864958286 12.0412201881 -8.19458341599 -4.15745544434 12.8326563835 -8.56364107132 -3.26649141312 13.3604049683 -7.08765506744 -4.49999713898 12.7405185699 -6.34890246391 -5.29143619537 12.0332951546 -5.50606656075 -5.87952947617 4.65539717674 -2.37865513952e-07 -8.32223439217 -1.41825844935e-06 3.24717628956 -7.83937740326 -4.65539717674 3.18478238583 -7.68874597549 -13.7568941116 -4.05979442596 -5.43197965622 -14.2917180061 -5.04729259014 -4.88865280151 -14.6795911789 -5.98072636127 -4.15745723248 -14.9056105614 -6.82422494888 -3.26649284363 -15.7842936516 -6.08692216873 -2.50006520748 -15.7979435921 -5.04231762886 -3.18197965622 -15.606760025 -3.94384074211 -3.74161219597 -15.2180914879 -2.83370447159 -4.15745723248 -4.65539717674 5.88471078873 -5.88471114635 -1.3736143103e-06 5.99999928474 -5.99999964237 -1.22874118347e-06 7.839376688 -3.24717628956 -10.6553971767 13.688744545 -3.18478274345 -16.1944327354 -2.01445698738 -2.24999928474 -16.4854431152 -3.20653653145 -2.02494567633 -16.5452013016 -4.41529297829 -1.72207474709 -16.3714127541 -5.59427189827 -1.35302522779 -16.5775794983 -5.42127656937 6.59425325011e-07 -16.8076043129 -4.19511079788 6.88500051638e-07 -16.7939958572 -2.9476300478 7.21809641391e-07 -16.5372776985 -1.72677540779 2.89165939193e-07 -10.6553964615 14.3222379684 -2.82978994903e-07 -1.00569451433e-06 8.48527979851 -5.07123196769e-08 -7.38431140235e-07 7.83937597275 3.24717593193 -10.6553964615 13.688744545 3.18478238583 -16.1944327354 -2.01445698738 2.25 -16.4854431152 -3.20653688908 2.02494710684 -16.5452013016 -4.41529297829 1.72207581997 -16.3714113235 -5.5942722559 1.35302647948 -15.7842936516 -6.08692216873 2.50006628036 -15.7979435921 -5.04231762886 3.18198037148 -15.6067585945 -3.94384002686 3.74161362648 -15.2180914879 -2.83370411396 4.15745723248 -4.65539646149 5.88471078873 5.8847104311 -4.67639623025e-07 5.99999856949 5.99999856949 -2.34545396438e-07 3.2471755743 7.83937597275 -4.65539574623 3.18478274345 7.68874454498 -13.7568941116 -4.05979442596 5.43197965622 -14.2917165756 -5.04729223251 4.88865280151 -14.6795897484 -5.98072564602 4.1574575901 -14.9056105614 -6.82422494888 3.26649355888 -13.8691334724 -7.69393372536 3.53562712669 -13.3604049683 -7.08765435219 4.49999964237 -12.7405171394 -6.34890246391 5.2914390564 -12.0332951546 -5.50606584549 5.87953233719 -4.65539574623 2.9460762363e-07 8.32223725319 -7.46349542169e-08 -3.36381248189e-07 8.48527908325 -4.65539574623 -3.18478167057 7.68874454498 -10.309694767 -6.95233798027 5.43197965622 -11.1893191338 -7.65051269531 4.88865244389 -12.0412187576 -8.19458270073 4.15745723248 -12.832654953 -8.56364035606 3.26649355888 -11.9539718628 -9.30094313622 2.50006628036 -10.922867775 -9.13299179077 3.18198037148 -9.87427711487 -8.75396490097 3.74161219597 -8.84849882126 -8.17842721939 4.15745723248 -4.65539574623 -5.88471007347 5.8847104311 -5.68972975401e-08 -5.99999821186 5.99999785423 -5.28461754357e-07 -11.8140521049 2.73865610361 -7.85268974304 -11.0152173042 5.37206983566 -7.8721575737 -8.9976747036 2.25 -8.99559402466 -9.49126696587 2.02494603395 -10.1756086349 -9.76001644135 1.72207546234 -11.3668556213 -9.79359483719 1.35302647948 -11.1606874466 -9.96659016609 9.14942916097e-07 -9.91320705414 -9.98019790649 6.21203867013e-07 -8.68704128265 -9.75017309189 2.75859804333e-07 -7.52931332588 -9.28535556793 7.08789571036e-07 -7.8526904583 -12.0837864876 8.30518757766e-07 -7.16578540505e-07 -12.3588051796 -5.40219218692e-07 -9.41987480019e-07 -11.8140521049 -2.73865681887 -7.85269117355 -11.0152173042 -5.3720676899 -7.87215900421 -8.99767398834 -2.24999821186 -8.99559545517 -9.49126625061 -2.0249453187 -10.1756100655 -9.76001644135 -1.72207403183 -11.3668556213 -9.79359483719 -1.35302460194 -11.9539732933 -9.30094385147 -2.5000641346 -10.922867775 -9.13299179077 -3.18197822571 -9.87427854538 -8.75396347046 -3.74161076546 -8.84849882126 -8.17842721939 -4.15745544434 -4.65539646149 -5.88470935822 -5.88470864296 -9.62871808952e-07 -5.9999974966 -5.9999974966 -1.19596603554e-06 -3.24717485905 -7.83937454224 -4.65539717674 -3.18478167057 -7.68874239922 -10.3096961975 -6.95233798027 -5.43197715282 -11.1893205643 -7.65051198006 -4.88864958286 -12.0412201881 -8.19458341599 -4.15745544434 -12.8326563835 -8.56364107132 -3.26649141312 -13.3604049683 -7.08765506744 -4.49999713898 -12.7405185699 -6.34890246391 -5.29143619537 -12.0332951546 -5.50606656075 -5.87952947617 -4.65539717674 -2.37865513952e-07 -8.32223439217 -1.35587643513e-06 4.49758331911e-07 -8.48527765274 Normals 174 1.44914093614 2.14899140596 -5.41111493111 3.05832087994 0.480117201805 -5.13956129551 3.59007525444 -1.29532760382 -4.62941372395 4.06433308125 -1.89721369743 -3.98504590988 4.59645366669 -2.14990693331 -3.20133054256 5.04306149483 -1.82287055254 -2.69136625528 5.02127122879 -1.27738273144 -3.02536082268 4.83541381359 -0.250312820077 -3.54319882393 3.74590301514 0.993377476931 -4.58034002781 0.758262902498 2.81624811888 -5.24320185184 2.05359041691 4.54463338852 -3.33573424816 5.09927666187 1.34055608511 -2.86330765486 5.66747045517 0.44770655036 -1.91753894091 5.73174226284 -0.68117313087 -1.63719588518 5.67516088486 -1.29239782691 -1.4564653337 5.89709150791 -1.10617393255 0.0 5.98132252693 -0.47187718749 0.0 5.95971572399 0.692892238498 0.0 5.76891374588 1.64873188734 0.0 5.55577254295 -2.2652669549 0.0 -5.61418497562 1.91735583544 -0.896145522594 5.09927666187 1.34055608511 2.86330765486 5.66747045517 0.44770655036 1.91753894091 5.73174226284 -0.68117313087 1.63719588518 5.67516088486 -1.29239782691 1.4564653337 5.04306149483 -1.82287055254 2.69136625528 5.02127122879 -1.27738273144 3.02536082268 4.83541381359 -0.250312820077 3.54319882393 3.74590301514 0.993377476931 4.58034002781 0.758262902498 2.81624811888 5.24320185184 1.44914093614 2.14899140596 5.41111493111 3.05832087994 0.480117201805 5.13956129551 3.59007525444 -1.29532760382 4.62941372395 3.95794558525 -2.16968286037 3.9528182745 4.09711003304 -2.6164739728 3.51646471024 2.98123115301 -3.5529037714 3.80632960796 2.70363467932 -3.22220528126 4.27857291698 2.12115848064 -2.5278480649 5.01083421707 1.7065950036 -1.26529741287 5.61107218266 0.954924166203 -0.0543839838356 5.92309319973 0.0 -2.29602956772 5.54313790798 0.373180344701 -2.28669083118 5.53434848785 0.305429242551 -3.03469955921 5.16684472561 0.652241572738 -3.76055181026 4.62941372395 1.4493240416 -4.27454459667 3.9528182745 1.86535227299 -4.48915064335 3.51646471024 0.919400632381 -5.28293716908 2.69136625528 0.385998129845 -5.16684472561 3.02536082268 -0.592913612723 -4.80538344383 3.54319882393 0.744346439838 -3.59208977222 4.74770343304 0.0366222113371 -2.89681684971 5.2541885376 3.02279734612 -3.18430137634 4.08905303478 -3.7662280798 -3.86364340782 2.62398147583 -1.42515331507 -5.50376915932 1.91753894091 -0.324289686978 -5.76305437088 1.63719588518 0.287301242352 -5.81322669983 1.4564653337 0.0653706472367 -5.99963378906 0.0 -0.573870062828 -5.97235035896 0.0 -1.71739858389 -5.74895489216 0.0 -5.07107770443 -3.20645785332 0.0 3.83361303806 4.61531424522 0.0 -4.26978349686 -3.98028516769 -1.38724941015 5.02786338329 3.23410749435 0.51014739275 -1.42515331507 -5.50376915932 -1.91753894091 -0.324289686978 -5.76305437088 -1.63719588518 0.287301242352 -5.81322669983 -1.4564653337 0.919400632381 -5.28293716908 -2.69136625528 0.385998129845 -5.16684472561 -3.02536082268 -0.592913612723 -4.80538344383 -3.54319882393 0.744346439838 -3.59208977222 -4.74770343304 0.0366222113371 -2.89681684971 -5.2541885376 0.373180344701 -2.28669083118 -5.53434848785 0.305429242551 -3.03469955921 -5.16684472561 0.652241572738 -3.76055181026 -4.62941372395 1.16257211566 -4.332041502 -3.98504590988 1.31913203001 -4.89986872673 -3.20133054256 2.44654691219 -2.91567742825 -4.6380200386 2.12115848064 -2.5278480649 -5.01083421707 1.7065950036 -1.26529741287 -5.61107218266 0.954924166203 -0.0543839838356 -5.92309319973 0.0 2.29602956772 -5.54313790798 1.44914093614 -2.14899140596 5.41111493111 3.05832087994 -0.480117201805 5.13956129551 3.59007525444 1.29532760382 4.62941372395 4.06433308125 1.89721369743 3.98504590988 4.59645366669 2.14990693331 3.20133054256 5.04306149483 1.82287055254 2.69136625528 5.02127122879 1.27738273144 3.02536082268 4.83541381359 0.250312820077 3.54319882393 3.74590301514 -0.993377476931 4.58034002781 0.758262902498 -2.81624811888 5.24320185184 0.0 3.43168437481 -4.92165899277 0.0 4.83706176281 -3.5499740839 2.05359041691 -4.54463338852 3.33573424816 5.09927666187 -1.34055608511 2.86330765486 5.66747045517 -0.44770655036 1.91753894091 5.73174226284 0.68117313087 1.63719588518 5.67516088486 1.29239782691 1.4564653337 5.89709150791 1.10617393255 0.0 5.98132252693 0.47187718749 0.0 5.95971572399 -0.692892238498 0.0 5.76891374588 -1.64873188734 0.0 5.55577254295 2.2652669549 0.0 0.0 6.0 0.0 0.0 4.83706176281 3.5499740839 -5.61418497562 -1.91735583544 0.896145522594 5.09927666187 -1.34055608511 -2.86330765486 5.66747045517 -0.44770655036 -1.91753894091 5.73174226284 0.68117313087 -1.63719588518 5.67516088486 1.29239782691 -1.4564653337 5.04306149483 1.82287055254 -2.69136625528 5.02127122879 1.27738273144 -3.02536082268 4.83541381359 0.250312820077 -3.54319882393 3.74590301514 -0.993377476931 -4.58034002781 0.758262902498 -2.81624811888 -5.24320185184 0.0 3.43168437481 4.92165899277 0.0 2.29602956772 5.54313790798 1.44914093614 -2.14899140596 -5.41111493111 3.05832087994 -0.480117201805 -5.13956129551 3.59007525444 1.29532760382 -4.62941372395 3.95794558525 2.16968286037 -3.9528182745 4.09711003304 2.6164739728 -3.51646471024 2.98123115301 3.5529037714 -3.80632960796 2.70363467932 3.22220528126 -4.27857291698 2.12115848064 2.5278480649 -5.01083421707 1.7065950036 1.26529741287 -5.61107218266 0.954924166203 0.0543839838356 -5.92309319973 0.0 0.0 6.0 0.373180344701 2.28669083118 -5.53434848785 0.305429242551 3.03469955921 -5.16684472561 0.652241572738 3.76055181026 -4.62941372395 1.4493240416 4.27454459667 -3.9528182745 1.86535227299 4.48915064335 -3.51646471024 0.919400632381 5.28293716908 -2.69136625528 0.385998129845 5.16684472561 -3.02536082268 -0.592913612723 4.80538344383 -3.54319882393 0.744346439838 3.59208977222 -4.74770343304 0.0366222113371 2.89681684971 -5.2541885376 0.0 -2.78548532724 5.31406581402 0.0 -4.967253685 3.36539804935 3.02279734612 3.18430137634 -4.08905303478 -3.7662280798 3.86364340782 -2.62398147583 -1.42515331507 5.50376915932 -1.91753894091 -0.324289686978 5.76305437088 -1.63719588518 0.287301242352 5.81322669983 -1.4564653337 0.0653706472367 5.99963378906 0.0 -0.573870062828 5.97235035896 0.0 -1.71739858389 5.74895489216 0.0 -5.07107770443 3.20645785332 0.0 3.83361303806 -4.61531424522 0.0 0.0 -6.0 0.0 0.0 -4.967253685 -3.36539804935 -4.26978349686 3.98028516769 1.38724941015 5.02786338329 -3.23410749435 -0.51014739275 -1.42515331507 5.50376915932 1.91753894091 -0.324289686978 5.76305437088 1.63719588518 0.287301242352 5.81322669983 1.4564653337 0.919400632381 5.28293716908 2.69136625528 0.385998129845 5.16684472561 3.02536082268 -0.592913612723 4.80538344383 3.54319882393 0.744346439838 3.59208977222 4.74770343304 0.0366222113371 2.89681684971 5.2541885376 0.0 -2.78548532724 -5.31406581402 0.0 -2.29602956772 -5.54313790798 0.373180344701 2.28669083118 5.53434848785 0.305429242551 3.03469955921 5.16684472561 0.652241572738 3.76055181026 4.62941372395 1.16257211566 4.332041502 3.98504590988 1.31913203001 4.89986872673 3.20133054256 2.44654691219 2.91567742825 4.6380200386 2.12115848064 2.5278480649 5.01083421707 1.7065950036 1.26529741287 5.61107218266 0.954924166203 0.0543839838356 5.92309319973 0.0 0.0 -6.0 Faces 156 0 79 173 80 0 0 79 0 1 78 0 0 78 1 2 77 0 0 77 2 3 76 0 0 4 3 6 5 0 0 3 2 7 6 0 0 2 1 8 7 0 0 1 0 9 8 0 0 0 80 91 9 0 0 91 92 10 9 0 0 9 10 11 8 0 0 8 11 12 7 0 0 7 12 13 6 0 0 6 13 14 5 0 0 14 13 16 15 0 0 13 12 17 16 0 0 12 11 18 17 0 0 11 10 19 18 0 0 10 92 103 19 0 0 103 104 20 19 0 0 19 20 21 18 0 0 18 21 22 17 0 0 17 22 23 16 0 0 16 23 24 15 0 0 24 23 26 25 0 0 23 22 27 26 0 0 22 21 28 27 0 0 21 20 29 28 0 0 20 104 115 29 0 0 115 116 30 29 0 0 29 30 31 28 0 0 28 31 32 27 0 0 27 32 33 26 0 0 26 33 34 25 0 0 34 33 36 35 0 0 33 32 37 36 0 0 32 31 38 37 0 0 31 30 39 38 0 0 30 116 127 39 0 0 127 40 41 39 0 0 39 41 42 38 0 0 38 42 43 37 0 0 37 43 44 36 0 0 36 44 45 35 0 0 45 44 47 46 0 0 44 43 48 47 0 0 43 42 49 48 0 0 42 41 50 49 0 0 41 40 138 50 0 0 138 139 51 50 0 0 50 51 52 49 0 0 49 52 53 48 0 0 48 53 54 47 0 0 47 54 55 46 0 0 55 54 57 56 0 0 54 53 58 57 0 0 53 52 59 58 0 0 52 51 60 59 0 0 51 139 150 60 0 0 150 151 61 60 0 0 60 61 62 59 0 0 59 62 63 58 0 0 58 63 64 57 0 0 57 64 65 56 0 0 65 64 67 66 0 0 64 63 68 67 0 0 63 62 69 68 0 0 62 61 70 69 0 0 61 151 162 70 0 0 162 163 71 70 0 0 70 71 72 69 0 0 69 72 73 68 0 0 68 73 74 67 0 0 67 74 75 66 0 0 74 73 77 76 0 0 73 72 78 77 0 0 72 71 79 78 0 0 71 163 173 79 0 0 173 80 81 172 0 0 172 81 82 171 0 0 171 82 83 170 0 0 170 83 84 169 0 0 85 84 87 86 0 0 84 83 88 87 0 0 83 82 89 88 0 0 82 81 90 89 0 0 81 80 91 90 0 0 91 92 93 90 0 0 90 93 94 89 0 0 89 94 95 88 0 0 88 95 96 87 0 0 87 96 97 86 0 0 97 96 99 98 0 0 96 95 100 99 0 0 95 94 101 100 0 0 94 93 102 101 0 0 93 92 103 102 0 0 103 104 105 102 0 0 102 105 106 101 0 0 101 106 107 100 0 0 100 107 108 99 0 0 99 108 109 98 0 0 109 108 111 110 0 0 108 107 112 111 0 0 107 106 113 112 0 0 106 105 114 113 0 0 105 104 115 114 0 0 115 116 117 114 0 0 114 117 118 113 0 0 113 118 119 112 0 0 112 119 120 111 0 0 111 120 121 110 0 0 121 120 123 122 0 0 120 119 124 123 0 0 119 118 125 124 0 0 118 117 126 125 0 0 117 116 127 126 0 0 127 40 128 126 0 0 126 128 129 125 0 0 125 129 130 124 0 0 124 130 131 123 0 0 123 131 132 122 0 0 132 131 134 133 0 0 131 130 135 134 0 0 130 129 136 135 0 0 129 128 137 136 0 0 128 40 138 137 0 0 138 139 140 137 0 0 137 140 141 136 0 0 136 141 142 135 0 0 135 142 143 134 0 0 134 143 144 133 0 0 144 143 146 145 0 0 143 142 147 146 0 0 142 141 148 147 0 0 141 140 149 148 0 0 140 139 150 149 0 0 150 151 152 149 0 0 149 152 153 148 0 0 148 153 154 147 0 0 147 154 155 146 0 0 146 155 156 145 0 0 156 155 158 157 0 0 155 154 159 158 0 0 154 153 160 159 0 0 153 152 161 160 0 0 152 151 162 161 0 0 162 163 164 161 0 0 161 164 165 160 0 0 160 165 166 159 0 0 159 166 167 158 0 0 158 167 168 157 0 0 167 166 170 169 0 0 166 165 171 170 0 0 165 164 172 171 0 0 164 163 173 172 0 0 criticalmass-1.0.0.orig/data/models/TheEye.model0000644000175000017500000001755410265636020021014 0ustar danieldanielName TheEye Scale 1.0 1.0 1.0 Colors 4 0.0 0.0 0.0 0.872678518295 0.387305855751 0.144544556737 1.0 1.0 1.0 0.520674645901 0.769376754761 0.144544556737 Vertices 73 2.59879100323e-08 5.88935059693e-09 0.890612289899 4.84984101997e-08 -0.340822578699 0.822818439609 6.3625465267e-08 -0.629758000374 0.629757962837 6.90661189463e-08 -0.822818439609 0.340822578699 6.39920837991e-08 -0.890612289899 -2.39827013243e-08 4.91758308843e-08 -0.822818439609 -0.340822653772 2.68730090593e-08 -0.629758000374 -0.629758000374 0.445306178569 -0.44530611133 -0.629758075447 0.581820590616 -0.581820427691 -0.340822653772 0.629758047919 -0.629757915292 -6.51255718126e-08 0.581820590616 -0.581820427691 0.340822578699 0.445306216106 -0.44530611133 0.629757962837 0.240998004955 -0.240997931028 0.822818439609 0.340822616235 5.64480437474e-08 0.822818439609 0.629758000374 1.00433448024e-07 0.629757962837 0.822818439609 1.46440747768e-07 0.340822578699 0.890612289899 1.25150804102e-07 -7.59524076009e-08 0.822818439609 1.41933230596e-07 -0.340822653772 0.629758000374 9.21046491541e-08 -0.629758075447 0.445306073794 0.445306253642 -0.629758075447 0.581820390155 0.581820628153 -0.340822653772 0.629757877755 0.629758122992 -8.62641025329e-08 0.581820390155 0.581820628153 0.340822578699 0.44530611133 0.445306253642 0.629757962837 0.240997931028 0.240998004955 0.822818439609 -5.46570848583e-08 0.340822578699 0.822818439609 -1.33042276353e-07 0.629758000374 0.629757962837 -1.90024296237e-07 0.822818439609 0.340822578699 -2.07697854118e-07 0.890612289899 -9.00202012793e-08 -2.09914587096e-07 0.822818439609 -0.340822653772 -1.69794739273e-07 0.629758000374 -0.629758075447 -0.445306291179 0.445306036257 -0.629758075447 -0.581820665689 0.581820352618 -0.340822653772 -0.629758198065 0.629757840219 -8.50204313397e-08 -0.581820665689 0.581820352618 0.340822578699 -0.445306253642 0.445306036257 0.629757962837 -0.240998004955 0.240997893492 0.822818439609 -0.340822541162 -9.86505733963e-08 0.822818439609 -0.629758000374 -1.98273911973e-07 0.629757962837 -0.822818439609 -2.4810248894e-07 0.340822578699 -0.890612364972 -2.8440470176e-07 -7.41935910766e-08 -0.822818439609 -2.52609997163e-07 -0.340822653772 -0.629758000374 -2.06602706368e-07 -0.629758075447 -0.445306036257 -0.445306328715 -0.629758075447 -0.581820315082 -0.581820703226 -0.340822653772 -0.629757840219 -0.629758273138 -6.38819006193e-08 -0.581820315082 -0.581820703226 0.340822578699 -0.445305998721 -0.445306328715 0.629757962837 -0.240997855955 -0.240998042491 0.822818439609 -0.445306036257 -0.445306328715 -0.629758075447 -0.629758000374 -2.06602706368e-07 -0.629758075447 -0.445306291179 0.445306036257 -0.629758075447 -1.69794739273e-07 0.629758000374 -0.629758075447 0.445306073794 0.445306253642 -0.629758075447 0.629758000374 9.21046491541e-08 -0.629758075447 0.445306178569 -0.44530611133 -0.629758075447 2.68730090593e-08 -0.629758000374 -0.629758000374 2.00930831496e-07 -2.7709352617 -2.5190320015 -0.178122228075 -2.69715442788 -2.5190320015 -0.251902994953 -2.51903202051 -2.5190320015 -0.178122330044 -2.34090960201 -2.5190320015 1.22263723095e-07 -2.26712874129 -2.5190320015 0.178122627206 -2.34090957511 -2.5190320015 0.251903375317 -2.51903198248 -2.5190320015 0.17812267287 -2.69715440098 -2.5190320015 -7.39326980433e-08 -3.74717409307 -3.14879000187 -3.49119944929 -4.30106958521 -4.14879003953 -1.76332203069 -2.51903213462 -3.14879000187 -1.24685739509 -1.27217520508 -3.14879000187 -2.85243697935e-07 -1.7557092177 -3.14879000187 1.24685728689 -1.27217501681 -3.14879000187 1.76332241105 -2.51903186837 -3.14879000187 3.49120069932 -4.30106905806 -4.14879003953 Normals 73 0.0 0.0 0.629758000374 2.00907529857e-08 -0.266110094218 0.570754823465 3.46894149085e-08 -0.459475236007 0.430646301667 4.42312868782e-08 -0.585861163438 0.230977260979 4.75454058346e-08 -0.629758000374 0.0 4.42312868782e-08 -0.585861163438 -0.230977260979 3.95314512885e-08 -0.523609953019 -0.34986767449 0.370240150878 -0.370240094973 -0.34986767449 0.41425230327 -0.41425224072 -0.230977260979 0.445291426723 -0.445291359486 0.0 0.41425230327 -0.41425224072 0.230977260979 0.324901871309 -0.324901822251 0.430646301667 0.188175941058 -0.188175912644 0.570754823465 0.266110094218 2.00907529857e-08 0.570754823465 0.459475236007 3.46894149085e-08 0.430646301667 0.585861163438 4.42312868782e-08 0.230977260979 0.629758000374 4.75454058346e-08 0.0 0.585861163438 4.42312868782e-08 -0.230977260979 0.523609953019 3.95314512885e-08 -0.34986767449 0.370240094973 0.370240150878 -0.34986767449 0.41425224072 0.41425230327 -0.230977260979 0.445291359486 0.445291426723 0.0 0.41425224072 0.41425230327 0.230977260979 0.324901822251 0.324901871309 0.430646301667 0.188175912644 0.188175941058 0.570754823465 -2.00907529857e-08 0.266110094218 0.570754823465 -3.46894149085e-08 0.459475236007 0.430646301667 -4.42312868782e-08 0.585861163438 0.230977260979 -4.75454058346e-08 0.629758000374 0.0 -4.42312868782e-08 0.585861163438 -0.230977260979 -3.95314512885e-08 0.523609953019 -0.34986767449 -0.370240150878 0.370240094973 -0.34986767449 -0.41425230327 0.41425224072 -0.230977260979 -0.445291426723 0.445291359486 0.0 -0.41425230327 0.41425224072 0.230977260979 -0.324901871309 0.324901822251 0.430646301667 -0.188175941058 0.188175912644 0.570754823465 -0.266110094218 -2.00907529857e-08 0.570754823465 -0.459475236007 -3.46894149085e-08 0.430646301667 -0.585861163438 -4.42312868782e-08 0.230977260979 -0.629758000374 -4.75454058346e-08 0.0 -0.585861163438 -4.42312868782e-08 -0.230977260979 -0.523609953019 -3.95314512885e-08 -0.34986767449 -0.370240094973 -0.370240150878 -0.34986767449 -0.41425224072 -0.41425230327 -0.230977260979 -0.445291359486 -0.445291426723 0.0 -0.41425224072 -0.41425230327 0.230977260979 -0.324901822251 -0.324901871309 0.430646301667 -0.188175912644 -0.188175941058 0.570754823465 0.458225960414 0.308257989979 -0.3026267106 -0.559434686513 0.11502732095 -0.265264434366 -0.248389941975 0.308257936631 -0.489745572021 -2.5971716932e-08 0.344005824206 -0.527473022113 0.24838989543 0.308257974137 -0.489745572021 0.559434669145 0.115027405422 -0.265264434366 0.45822600696 -0.308257920789 0.3026267106 -3.14565531417e-08 0.41665468319 -0.472198383474 -2.78885058221e-08 0.369394463074 -0.510021927011 0.218157978711 0.299186469134 -0.509387672738 -0.465202550343 -0.0678825184777 0.418980219629 -0.189751914203 -0.019200071121 -0.600160318474 4.04252747063e-09 -0.0535449003257 -0.627470901313 0.189751917102 -0.0192000424692 -0.600160318474 0.465202560593 -0.067882448234 0.418980219629 0.218158023886 -0.299186436193 0.509387672738 -2.53985665268e-08 0.336414216842 -0.532354719259 0.175356650953 0.214813850046 -0.565411877783 -0.241490200776 -0.0282523543666 0.580921810225 -0.133247250788 0.222386234191 0.573906801066 -3.34415404857e-08 0.442946637976 0.447636148233 0.133247217209 0.222386254311 0.573906801066 0.241490205042 -0.0282523179026 0.580921810225 0.175356683389 -0.214813823568 0.565411877783 Faces 64 6 7 8 5 0 1 5 8 9 4 0 1 4 9 10 3 0 1 3 10 11 2 0 1 2 11 12 1 0 2 12 0 1 0 0 0 0 12 13 0 0 0 12 11 14 13 0 2 11 10 15 14 0 1 10 9 16 15 0 1 9 8 17 16 0 1 8 7 18 17 0 1 18 19 20 17 0 1 17 20 21 16 0 1 16 21 22 15 0 1 15 22 23 14 0 1 14 23 24 13 0 2 24 0 13 0 0 0 0 24 25 0 0 0 24 23 26 25 0 2 23 22 27 26 0 1 22 21 28 27 0 1 21 20 29 28 0 1 20 19 30 29 0 1 30 31 32 29 0 1 29 32 33 28 0 1 28 33 34 27 0 1 27 34 35 26 0 1 26 35 36 25 0 2 36 0 25 0 0 0 0 36 37 0 0 0 36 35 38 37 0 2 35 34 39 38 0 1 34 33 40 39 0 1 33 32 41 40 0 1 32 31 42 41 0 1 42 43 44 41 0 1 41 44 45 40 0 1 40 45 46 39 0 1 39 46 47 38 0 1 38 47 48 37 0 2 48 0 37 0 0 0 0 48 1 0 0 0 48 47 2 1 0 2 47 46 3 2 0 1 46 45 4 3 0 1 45 44 5 4 0 1 44 43 6 5 0 1 49 56 57 58 0 1 49 50 59 58 0 1 50 51 60 59 0 1 51 52 61 60 0 1 52 53 62 61 0 1 53 54 63 62 0 1 54 55 64 63 0 1 55 56 57 64 0 1 58 57 65 66 0 3 58 59 67 66 0 3 59 60 68 67 0 3 60 61 69 68 0 3 61 62 70 69 0 3 62 63 71 70 0 3 63 64 72 71 0 3 64 57 65 72 0 3 criticalmass-1.0.0.orig/data/models/EnergyBlob.model0000644000175000017500000005210307630537344021661 0ustar danieldanielName EnergyBlob Scale 1.0 1.0 1.0 Colors 2 0.138345882297 0.288721829653 1.0 1.0 0.800000071526 0.0 Vertices 194 -3.26667889665e-07 1.79814965742e-08 1.95646129552 -1.9452456562e-07 -0.447539034869 1.92815732853 -0.301921127741 -0.43915863372 1.9281572602 -0.407142336956 -0.407142193023 1.92815723602 -0.439158843773 -0.301921027565 1.92815722748 -0.44753940397 -8.13023504529e-08 1.92815722183 -0.439159008484 0.301920846251 1.92815721997 -0.407142536925 0.407142041022 1.92815722589 -0.30192136835 0.439158550957 1.92815724927 -4.27750409591e-07 0.447539060186 1.9281573174 0.30192049414 0.439158670363 1.92815738573 0.407141770655 0.407142298277 1.9281574099 0.439158198846 0.30192103023 1.92815741845 0.447538713738 8.39672502187e-08 1.9281574241 0.439158357893 -0.301920849249 1.92815742596 0.407141996247 -0.407142115325 1.92815742003 0.301920689445 -0.439158491662 1.92815739665 5.74245337439e-08 -0.986070108115 1.77483659033 -0.653029234723 -0.960513547586 1.77483618616 -0.883358785169 -0.88335890362 1.77483638943 -0.960513459611 -0.653029286157 1.77483611285 -0.986070350052 -1.64598762133e-07 1.77483635523 -0.960513959414 0.653029048267 1.77483635288 -0.883359212737 0.883358520206 1.77483636745 -0.653029686659 0.960513284481 1.77483616226 -4.51840267252e-07 0.986070197574 1.77483656579 0.653028625113 0.960513580414 1.77483671368 0.883358103407 0.883358827383 1.77483676669 0.960512872653 0.653029296334 1.77483653071 0.986069955636 1.63449375854e-07 1.77483680089 0.960513236543 -0.65302892483 1.77483680324 0.88335850873 -0.883358377906 1.77483653239 0.65302898644 -0.960513138391 1.7748364813 2.84087010288e-08 -1.55785095216 1.49609749089 -1.01395543934 -1.50716233037 1.49609726113 -1.3756532515 -1.3756536507 1.49609717775 -1.50716214203 -1.01395585974 1.49609714354 -1.55785112764 -3.47885871048e-07 1.49609711947 -1.50716266442 1.01395532373 1.49609711831 -1.37565390327 1.37565303615 1.49609714353 -1.01395623909 1.50716198112 1.49609722363 -7.04583248775e-07 1.55785080817 1.49609745213 1.01395485377 1.50716227699 1.4960976819 1.37565267731 1.37565358593 1.49609776527 1.50716153382 1.013955829 1.49609779949 1.55785054208 2.94497725934e-07 1.49609782355 1.5071620562 -1.01395521855 1.49609782471 1.37565350088 -1.37565308757 1.49609779949 1.01395563087 -1.50716187594 1.49609771939 4.18518340072e-07 -2.08880581248 1.12446235527 -1.3375739477 -2.00807208775 1.12446205201 -1.81983585562 -1.8198365479 1.12446194068 -2.00807165854 -1.33757469239 1.12446189215 -2.08880589936 -4.77419740059e-07 1.12446185726 -2.00807244645 1.3375739794 1.12446185887 -1.81983689309 1.81983590084 1.12446189541 -1.33757507374 2.0080716676 1.12446200205 -8.36120761872e-07 2.08880574985 1.12446230331 1.33757350744 2.00807204777 1.12446260658 1.81983543523 1.81983648805 1.1244627179 2.00807121829 1.3375746524 1.12446276644 2.08880548176 4.14785993235e-07 1.12446280132 2.0080720062 -1.33757388347 1.12446279971 1.81983647857 -1.81983577917 1.12446276317 1.33757463348 -2.00807157166 1.12446265653 5.21642182008e-07 -2.51784360654 0.713815073572 -1.58778715098 -2.40627010388 0.713814713377 -2.16607733451 -2.16607821568 0.713814579708 -2.40626934577 -1.58778829419 0.713814518236 -2.51784377673 -6.74070512642e-07 0.713814473272 -2.40627027406 1.58778736098 0.713814478734 -2.16607831572 2.16607725222 0.713814525819 -1.58778846438 2.40626955577 0.713814653513 -8.44257211583e-07 2.51784344308 0.713815010933 1.58778696428 2.40626998572 0.713815371128 2.16607686187 2.16607802102 0.713815504797 2.40626915907 1.58778817604 0.713815566269 2.51784318229 6.01220528128e-07 0.713815611233 2.40627008736 -1.58778720731 0.713815605771 2.16607808496 -2.16607714261 0.713815558686 1.58778864011 -2.40626976454 0.713815430992 5.8351779763e-07 -2.70455394927 0.233422049836 -1.71626490141 -2.59094840378 0.233421660582 -2.33876344084 -2.33876450883 0.233421516773 -2.590947516 -1.71626620075 0.233421484077 -2.70455391432 -5.42754469298e-07 0.23342140502 -2.59094827822 1.71626503278 0.233421409344 -2.33876485535 2.33876382499 0.233421426554 -1.71626630171 2.59094778328 0.233421596124 -5.98406598812e-07 2.70455386447 0.233421950517 1.71626493183 2.59094827368 0.233422371805 2.33876353785 2.33876467456 0.233422483579 2.59094750111 1.71626611595 0.233422580346 2.70455380882 5.48561581562e-07 0.233422627367 2.59094848985 -1.71626507228 0.233422623044 2.33876484254 -2.3387637265 0.233422573799 1.71626637743 -2.59094759626 0.233422436264 -3.2666782895e-07 1.79814813138e-08 -1.91772228011 -1.47305889332e-07 -0.447539037053 -1.88941830199 -0.3019211145 -0.439158601925 -1.88941837032 -0.40714233709 -0.407142193157 -1.88941813822 -0.439158819207 -0.301921007096 -1.88941814676 -0.447539334099 -1.06137595914e-07 -1.88941815241 -0.439158955602 0.301920804427 -1.88941815428 -0.40714258018 0.407142084278 -1.88941814835 -0.301921321131 0.43915850347 -1.88941838125 -3.80531722644e-07 0.447539012699 -1.88941831312 0.301920473402 0.439158645528 -1.88941824479 0.407141725217 0.407142252839 -1.8894184769 0.439158166783 0.30192101672 -1.88941846835 0.447538738305 5.91319877233e-08 -1.8894184627 0.439158359808 -0.301920851432 -1.88941846084 0.407141907688 -0.407142026765 -1.88941846677 0.301920697022 -0.439158488182 -1.88941823387 -5.5259867601e-08 -0.98607006118 -1.73609729411 -0.653029132213 -0.96051344402 -1.73609718572 -0.883358682131 -0.883358800582 -1.73609723873 -0.960513345775 -0.653029193918 -1.73609700275 -0.986070417432 -1.62967598183e-07 -1.73609727293 -0.960513800273 0.653028913985 -1.73609727528 -0.883359066026 0.883358373495 -1.73609726071 -0.653029550171 0.960513127547 -1.73609720962 -5.64524647281e-07 0.986070153901 -1.73609731864 0.653028648341 0.960513582046 -1.73609768331 0.883358115837 0.883358839812 -1.7360976303 0.960512884555 0.653029309291 -1.73609761 0.986069797648 1.65080508925e-07 -1.7360975961 0.960513282423 -0.653028991155 -1.73609759375 0.883358564833 -0.883358434008 -1.73609760832 0.653029054973 -0.960513182064 -1.73609740314 1.52179038057e-07 -1.55785080768 -1.45735843673 -1.01395529291 -1.50716220855 -1.45735828207 -1.37565311737 -1.37565351657 -1.45735810917 -1.50716197296 -1.01395576056 -1.45735801524 -1.55785091326 -2.94015923758e-07 -1.45735803931 -1.50716247269 1.01395517373 -1.45735804047 -1.3756537324 1.37565286528 -1.45735814339 -1.01395607001 1.50716180847 -1.45735819143 -5.80812869114e-07 1.55785077143 -1.45735847548 1.01395484163 1.50716219494 -1.45735863014 1.37565263022 1.37565353884 -1.45735867491 1.50716149902 1.01395576961 -1.45735864069 1.55785057524 3.48367611464e-07 -1.4573588729 1.50716204406 -1.01395520998 -1.45735887174 1.37565349053 -1.37565307722 -1.45735864068 1.01395564138 -1.50716184473 -1.45735859264 5.55541524352e-07 -2.08880565876 -1.0857232879 -1.3375735162 -2.00807168486 -1.08572307861 -1.81983543842 -1.8198361307 -1.08572293366 -2.00807118174 -1.33757433479 -1.08572285405 -2.08880558112 -5.04912457021e-07 -1.08572288894 -2.00807215087 1.33757374804 -1.08572288733 -1.81983662961 1.81983563737 -1.08572297893 -1.33757482346 2.00807139093 -1.08572312857 -6.99097492327e-07 2.08880554114 -1.08572333987 1.33757362181 2.00807204293 -1.0857236773 1.81983549 1.81983654281 -1.08572369412 2.00807128735 1.33757469287 -1.08572390186 2.08880543756 3.87293167099e-07 -1.08572386698 2.00807189405 -1.3375737977 -1.08572386858 1.81983637962 -1.81983568021 -1.08572390512 1.33757456664 -2.00807144059 -1.08572362734 6.54286341362e-07 -2.5178434426 -0.675076059597 -1.58778692773 -2.40626966811 -0.675075650955 -2.166077005 -2.16607788617 -0.675075528346 -2.40626903191 -1.58778794904 -0.675075461678 -2.51784346287 -6.91347030562e-07 -0.675075378503 -2.40627014142 1.58778716249 -0.67507550118 -2.16607815015 2.16607708666 -0.675075582234 -1.58778837704 2.40626931198 -0.675075710819 -7.11612995921e-07 2.51784324459 -0.675075994097 1.5877869157 2.40626996845 -0.675076402739 2.16607664773 2.16607780688 -0.675076525349 2.40626901989 1.58778824937 -0.675076592017 2.51784313371 5.83943896252e-07 -0.675076547053 2.40626999348 -1.58778726989 -0.675076552515 2.16607806932 -2.16607712696 -0.6750765996 1.58778859154 -2.40626978181 -0.675076471015 6.80260737984e-07 -2.70455377338 -0.194683159356 -1.71626475937 -2.59094809198 -0.194682779772 -2.33876339513 -2.33876446312 -0.194682539163 -2.59094732864 -1.71626593425 -0.194682475755 -2.70455363636 -5.48079647504e-07 -0.194682522776 -2.59094804556 1.71626480094 -0.194682518452 -2.3387646231 2.33876359274 -0.194682469207 -1.71626615966 2.59094746082 -0.194682587952 -5.01663638346e-07 2.70455367793 -0.194682970361 1.71626475675 2.59094817774 -0.194683349945 2.33876340234 2.33876453905 -0.194683462415 2.59094728072 1.71626606532 -0.194683653962 2.70455372435 5.43236289401e-07 -0.194683606941 2.59094826947 -1.7162650323 -0.194683611264 2.33876471236 -2.33876359631 -0.194683660509 1.71626624765 -2.59094746567 -0.194683541765 Normals 194 -4.8581620149e-07 2.67418496236e-08 2.14982461929 -3.91681498436e-07 -0.369380104538 2.11780716767 -0.0519604212702 -0.360379900574 2.11872578813 -0.246346624946 -0.246346235086 2.12135004042 -0.36038038127 -0.0519600856907 2.1187257146 -0.369380609463 -6.0555833876e-08 2.11780707961 -0.360380405717 0.0519599688367 2.1187257133 -0.246346740856 0.246346171952 2.12135003429 -0.0519605908343 0.360379928836 2.11872577916 -5.65480329763e-07 0.369380157225 2.11780715848 0.0519594636931 0.360379953284 2.11872580265 0.246345666183 0.246346287862 2.12135014563 0.360379423693 0.0519601384008 2.11872587618 0.369379652301 1.13242997451e-07 2.11780724655 0.36037944814 -0.0519599161266 2.11872587747 0.246345782092 -0.246346119177 2.12135015175 0.0519596332572 -0.360379876126 2.11872581161 -2.70300515756e-07 -0.776616850772 2.00463087764 -0.127766297945 -0.735605533814 2.01598131993 -0.481790442878 -0.481790183445 2.03894460988 -0.735605954346 -0.127766163411 2.01598117501 -0.776617328713 -1.57769108244e-07 2.00463069248 -0.735606014462 0.127765867452 2.01598117183 -0.481790669567 0.481790007481 2.03894459789 -0.127766644059 0.735605523852 2.01598130163 -6.35710276872e-07 0.776616900643 2.00463085832 0.127765386804 0.735605583968 2.01598135937 0.481789521358 0.48179023417 2.03894481564 0.735605043205 0.127766213565 2.01598150429 0.776616422702 2.07640652872e-07 2.00463104348 0.735605103321 -0.127765817298 2.01598150747 0.481789748048 -0.481789956755 2.03894482762 0.127765732918 -0.735605473698 2.01598137767 -1.57721395593e-07 -1.10238760142 1.84559370409 -0.204268052653 -1.04258723769 1.8689505468 -0.692646009889 -0.692645879545 1.91363050878 -1.04258758717 -0.204268097614 1.86895034693 -1.10238804144 -2.36387370124e-07 1.84559344126 -1.04258768328 0.204267653557 1.86895034185 -0.69264633579 0.692645601252 1.91363049155 -0.204268543206 1.04258718807 1.86895052086 -6.76411126759e-07 1.10238764733 1.84559367666 0.204267207964 1.04258728418 1.86895061318 0.692645145007 0.692645927152 1.9136308046 1.04258674248 0.20426814411 1.86895081305 1.10238720731 2.82302361042e-07 1.84559393949 1.04258683859 -0.204267607061 1.86895081813 0.692645470907 -0.692645553644 1.91363082183 0.204267698517 -1.04258714158 1.86895063912 -4.8348450761e-08 -1.37879638325 1.64935582961 -0.283367752134 -1.30994943039 1.68084823327 -0.892738431343 -0.892738436534 1.74002779591 -1.30994969781 -0.283367967739 1.68084798851 -1.37879677649 -3.03855605239e-07 1.64935550088 -1.30994983114 0.283367393205 1.68084798146 -0.892738851389 0.892738059776 1.7400277737 -0.283368368484 1.30994933888 1.68084820068 -6.97092613151e-07 1.37879642429 1.64935579531 0.283366992459 1.30994947221 1.68084832875 0.892737644921 0.892738479823 1.74002817718 1.30994893813 0.283368009555 1.68084857351 1.37879603105 3.44888557152e-07 1.64935612404 1.30994907146 -0.283367351388 1.68084858056 0.892738064968 -0.892738016488 1.74002819939 0.28336760881 -1.30994929706 1.68084836134 1.54975149283e-07 -1.79503330475 1.18293831484 -0.396195084623 -1.72293893042 1.22315673886 -1.21683890896 -1.2168391743 1.28850360836 -1.72293903563 -0.396195603668 1.22315642254 -1.79503358679 -4.07580233929e-07 1.18293788687 -1.72293922204 0.39619482343 1.22315641268 -1.2168394815 1.21683863381 1.28850357809 -0.396195895291 1.72293877443 1.223156696 -6.8961465681e-07 1.79503333418 1.18293827018 0.396194531806 1.72293896085 1.22315687506 1.21683832661 1.21683920635 1.28850412805 1.72293848281 0.396195634098 1.22315719138 1.79503305215 4.37009572163e-07 1.18293869815 1.72293866923 -0.396194793 1.22315720124 1.21683889915 -1.21683860176 1.28850415832 0.396195342475 -1.722938744 1.22315691792 4.06670660766e-07 -2.11236072579 0.399495938441 -0.488191869211 -2.04866336441 0.431578826913 -1.48336578667 -1.48336637255 0.470025740577 -2.04866323761 -0.488192730241 0.431578454867 -2.11236082104 -4.91979167006e-07 0.399495434815 -2.04866346731 0.488191777051 0.431578442722 -1.48336648461 1.4833656863 0.470025703673 -0.488192833137 2.04866314545 0.431578775945 -5.87226399887e-07 2.11236073573 0.399495885889 0.488191674155 2.04866337515 0.431578996588 1.48336557424 1.48336638424 0.470026374093 2.04866304255 0.488192740978 0.431579368634 2.11236064048 5.01917893647e-07 0.399496389516 2.04866327225 -0.488191766314 0.431579380779 1.48336627218 -1.48336567461 0.470026410997 0.488192638081 -2.04866313471 0.431579047556 4.8581620149e-07 -2.67418496236e-08 -2.14982461929 5.65480329763e-07 -0.369380157225 -2.11780715848 -0.0519594636931 -0.360379953284 -2.11872580265 -0.246345666183 -0.246346287862 -2.12135014563 -0.360379423693 -0.0519601384008 -2.11872587618 -0.369379652301 -1.13242997451e-07 -2.11780724655 -0.36037944814 0.0519599161266 -2.11872587747 -0.246345782092 0.246346119177 -2.12135015175 -0.0519596332572 0.360379876126 -2.11872581161 3.91681498436e-07 0.369380104538 -2.11780716767 0.0519604212702 0.360379900574 -2.11872578813 0.246346624946 0.246346235086 -2.12135004042 0.36038038127 0.0519600856907 -2.1187257146 0.369380609463 6.0555833876e-08 -2.11780707961 0.360380405717 -0.0519599688367 -2.1187257133 0.246346740856 -0.246346171952 -2.12135003429 0.0519605908343 -0.360379928836 -2.11872577916 6.35710276872e-07 -0.776616900643 -2.00463085832 -0.127765386804 -0.735605583968 -2.01598135937 -0.481789521358 -0.48179023417 -2.03894481564 -0.735605043205 -0.127766213565 -2.01598150429 -0.776616422702 -2.07640652872e-07 -2.00463104348 -0.735605103321 0.127765817298 -2.01598150747 -0.481789748048 0.481789956755 -2.03894482762 -0.127765732918 0.735605473698 -2.01598137767 2.70300515756e-07 0.776616850772 -2.00463087764 0.127766297945 0.735605533814 -2.01598131993 0.481790442878 0.481790183445 -2.03894460988 0.735605954346 0.127766163411 -2.01598117501 0.776617328713 1.57769108244e-07 -2.00463069248 0.735606014462 -0.127765867452 -2.01598117183 0.481790669567 -0.481790007481 -2.03894459789 0.127766644059 -0.735605523852 -2.01598130163 6.76411126759e-07 -1.10238764733 -1.84559367666 -0.204267207964 -1.04258728418 -1.86895061318 -0.692645145007 -0.692645927152 -1.9136308046 -1.04258674248 -0.20426814411 -1.86895081305 -1.10238720731 -2.82302361042e-07 -1.84559393949 -1.04258683859 0.204267607061 -1.86895081813 -0.692645470907 0.692645553644 -1.91363082183 -0.204267698517 1.04258714158 -1.86895063912 1.57721395593e-07 1.10238760142 -1.84559370409 0.204268052653 1.04258723769 -1.8689505468 0.692646009889 0.692645879545 -1.91363050878 1.04258758717 0.204268097614 -1.86895034693 1.10238804144 2.36387370124e-07 -1.84559344126 1.04258768328 -0.204267653557 -1.86895034185 0.69264633579 -0.692645601252 -1.91363049155 0.204268543206 -1.04258718807 -1.86895052086 6.97092613151e-07 -1.37879642429 -1.64935579531 -0.283366992459 -1.30994947221 -1.68084832875 -0.892737644936 -0.892738479822 -1.73996256974 -1.30994893813 -0.283368009555 -1.68084857351 -1.37879603105 -3.44888557152e-07 -1.64935612404 -1.30994907146 0.283367351388 -1.68084858056 -0.892738064968 0.892738016488 -1.74002819939 -0.28336760881 1.30994929706 -1.68084836134 4.8348450761e-08 1.37879638325 -1.64935582961 0.283367752134 1.30994943039 -1.68084823327 0.892738431343 0.892738436534 -1.74002779591 1.30994969781 0.283367967739 -1.68084798851 1.37879677649 3.03855605239e-07 -1.64935550088 1.30994983114 -0.283367393205 -1.68084798146 0.892738851389 -0.892738059776 -1.7400277737 0.283368368484 -1.30994933888 -1.68084820068 6.8961465681e-07 -1.79503333418 -1.18293827018 -0.396194531806 -1.72293896085 -1.22315687506 -1.21683832661 -1.21683920635 -1.28850412805 -1.72293848281 -0.396195634098 -1.22315719138 -1.79503305215 -4.37009572163e-07 -1.18293869815 -1.72293866923 0.396194793 -1.22315720124 -1.21683889915 1.21683860176 -1.28850415832 -0.396195342475 1.722938744 -1.22315691792 -1.54975149283e-07 1.79503330475 -1.18293831484 0.396195084623 1.72293893042 -1.22315673886 1.21683890896 1.2168391743 -1.28850360836 1.72293903563 0.396195603668 -1.22315642254 1.79503358679 4.07580233929e-07 -1.18293788687 1.72293922204 -0.39619482343 -1.22315641268 1.2168394815 -1.21683863381 -1.28850357809 0.396195895291 -1.72293877443 -1.223156696 5.87226399887e-07 -2.11236073573 -0.399495885889 -0.488191674155 -2.04866337515 -0.431578996588 -1.48336557424 -1.48336638424 -0.470026374093 -2.04866304255 -0.488192740978 -0.431579368634 -2.11236064048 -5.01917893647e-07 -0.399496389516 -2.04866327225 0.488191766314 -0.431579380779 -1.48336627218 1.48336567461 -0.470026410997 -0.488192638081 2.04866313471 -0.431579047556 -4.06670660766e-07 2.11236072579 -0.399495938441 0.488191869211 2.04866336441 -0.431578826913 1.48336578667 1.48336637255 -0.470025740577 2.04866323761 0.488192730241 -0.431578454867 2.11236082104 4.91979167006e-07 -0.399495434815 2.04866346731 -0.488191777051 -0.431578442722 1.48336648461 -1.4833656863 -0.470025703673 0.488192833137 -2.04866314545 -0.431578775945 Faces 208 0 1 16 0 1 0 1 0 2 0 1 0 0 3 2 0 1 0 0 4 3 0 1 0 0 5 4 0 1 1 0 6 5 0 1 1 0 7 6 0 1 0 0 8 7 0 1 0 0 9 8 0 1 0 0 10 9 0 1 0 0 11 10 0 1 0 0 12 11 0 1 0 0 13 12 0 1 0 0 14 13 0 1 0 0 15 14 0 1 0 0 16 15 0 1 0 1 17 32 16 1 0 2 18 17 1 1 0 3 19 18 2 1 0 4 20 19 3 1 0 5 21 20 4 1 1 6 22 21 5 1 1 7 23 22 6 1 0 8 24 23 7 1 0 9 25 24 8 1 0 10 26 25 9 1 0 11 27 26 10 1 0 12 28 27 11 1 0 13 29 28 12 1 0 14 30 29 13 1 0 15 31 30 14 1 0 16 32 31 15 1 0 17 33 48 32 1 1 18 34 33 17 1 1 19 35 34 18 1 1 20 36 35 19 1 1 21 37 36 20 1 1 22 38 37 21 1 1 23 39 38 22 1 1 24 40 39 23 1 1 25 41 40 24 1 1 26 42 41 25 1 1 27 43 42 26 1 1 28 44 43 27 1 0 29 45 44 28 1 0 30 46 45 29 1 0 31 47 46 30 1 0 32 48 47 31 1 1 33 49 64 48 1 0 34 50 49 33 1 0 35 51 50 34 1 0 36 52 51 35 1 0 37 53 52 36 1 0 38 54 53 37 1 0 39 55 54 38 1 0 40 56 55 39 1 0 41 57 56 40 1 0 42 58 57 41 1 0 43 59 58 42 1 0 44 60 59 43 1 0 45 61 60 44 1 0 46 62 61 45 1 0 47 63 62 46 1 0 48 64 63 47 1 0 49 65 80 64 1 0 50 66 65 49 1 0 51 67 66 50 1 0 52 68 67 51 1 0 53 69 68 52 1 0 54 70 69 53 1 0 55 71 70 54 1 0 56 72 71 55 1 0 57 73 72 56 1 0 58 74 73 57 1 0 59 75 74 58 1 0 60 76 75 59 1 0 61 77 76 60 1 0 62 78 77 61 1 0 63 79 78 62 1 0 64 80 79 63 1 0 65 81 96 80 1 0 66 82 81 65 1 0 67 83 82 66 1 0 68 84 83 67 1 0 69 85 84 68 1 0 70 86 85 69 1 0 71 87 86 70 1 0 72 88 87 71 1 0 73 89 88 72 1 0 74 90 89 73 1 0 75 91 90 74 1 0 76 92 91 75 1 0 77 93 92 76 1 0 78 94 93 77 1 0 79 95 94 78 1 0 80 96 95 79 1 0 97 113 98 0 1 0 98 99 97 0 1 0 97 99 100 0 1 0 97 100 101 0 1 0 97 101 102 0 1 1 97 102 103 0 1 1 97 103 104 0 1 0 97 104 105 0 1 0 97 105 106 0 1 0 97 106 107 0 1 0 97 107 108 0 1 0 97 108 109 0 1 0 97 109 110 0 1 0 97 110 111 0 1 0 97 111 112 0 1 0 97 112 113 0 1 0 98 113 129 114 1 0 99 98 114 115 1 0 100 99 115 116 1 0 101 100 116 117 1 0 102 101 117 118 1 1 103 102 118 119 1 1 104 103 119 120 1 0 105 104 120 121 1 0 106 105 121 122 1 0 107 106 122 123 1 0 108 107 123 124 1 0 109 108 124 125 1 0 110 109 125 126 1 0 111 110 126 127 1 0 112 111 127 128 1 0 113 112 128 129 1 0 114 129 145 130 1 1 115 114 130 131 1 1 116 115 131 132 1 1 117 116 132 133 1 1 118 117 133 134 1 1 119 118 134 135 1 1 120 119 135 136 1 1 121 120 136 137 1 1 122 121 137 138 1 1 123 122 138 139 1 1 124 123 139 140 1 1 125 124 140 141 1 0 126 125 141 142 1 0 127 126 142 143 1 0 128 127 143 144 1 0 129 128 144 145 1 1 130 145 161 146 1 0 131 130 146 147 1 0 132 131 147 148 1 0 133 132 148 149 1 0 134 133 149 150 1 0 135 134 150 151 1 0 136 135 151 152 1 0 137 136 152 153 1 0 138 137 153 154 1 0 139 138 154 155 1 0 140 139 155 156 1 0 141 140 156 157 1 0 142 141 157 158 1 0 143 142 158 159 1 0 144 143 159 160 1 0 145 144 160 161 1 0 146 161 177 162 1 0 147 146 162 163 1 0 148 147 163 164 1 0 149 148 164 165 1 0 150 149 165 166 1 0 151 150 166 167 1 0 152 151 167 168 1 0 153 152 168 169 1 0 154 153 169 170 1 0 155 154 170 171 1 0 156 155 171 172 1 0 157 156 172 173 1 0 158 157 173 174 1 0 159 158 174 175 1 0 160 159 175 176 1 0 161 160 176 177 1 0 162 177 193 178 1 0 163 162 178 179 1 0 164 163 179 180 1 0 165 164 180 181 1 0 166 165 181 182 1 0 167 166 182 183 1 0 168 167 183 184 1 0 169 168 184 185 1 0 170 169 185 186 1 0 171 170 186 187 1 0 172 171 187 188 1 0 173 172 188 189 1 0 174 173 189 190 1 0 175 174 190 191 1 0 176 175 191 192 1 0 177 176 192 193 1 0 81 82 179 178 1 1 81 178 193 96 1 1 95 96 193 192 1 1 94 95 192 191 1 1 93 94 191 190 1 1 92 93 190 189 1 1 91 92 189 188 1 1 90 91 188 187 1 1 89 90 187 186 1 1 88 89 186 185 1 1 87 88 185 184 1 1 86 87 184 183 1 1 85 86 183 182 1 1 84 85 182 181 1 1 83 84 181 180 1 1 82 83 180 179 1 1 criticalmass-1.0.0.orig/data/models/Stinger.model0000644000175000017500000000336710265636020021241 0ustar danieldanielName Stinger Scale 1.0 1.0 1.0 Colors 2 0.699999988079 0.699999988079 0.699999988079 0.899999976158 0.800000011921 0.10000000149 Vertices 16 -3.68760289537 -14.1846007755 2.63844446687 -3.64897020037 -14.1945324229 -2.67982746486 1.42093745901 -14.2106651607 -4.28649619225 4.51567823408 -14.210705635 0.0387980706507 1.35842757963 -14.1945969599 4.31864759926 -1.93789689659 -9.29661355895 1.39205679069 -1.91744821978 -9.30187005696 -1.42300229583 0.76614821863 -9.31040992197 -2.27344308197 2.40425252288 -9.31043134392 0.0160172430358 0.733058001252 -9.30190471661 2.28142018263 1.41656464921 8.19853831655 4.27725519799 4.57382033039 8.18242963163 -0.00259259096148 1.47907926853 8.18247010041 -4.32789022344 -3.59082937111 8.19860189158 -2.72121924044 -3.62946077214 8.20853448532 2.5970507293 -0.000364453342951 15.1808601669 -0.000448121395442 Normals 16 -11.9107448559 6.4355961073 8.51751064257 -11.7823983611 6.40829240085 -8.71443470428 4.64531340772 6.34281887465 -13.9292701777 14.6891396621 6.32948054824 0.0934960802623 4.44489627071 6.38661834539 13.9742870592 -12.8297716705 2.62089506703 9.18479872161 -12.6960837123 2.58818998153 -9.37730672034 4.99873629755 2.52602792495 -14.9822264226 15.7946728004 2.52003877732 0.111837795961 4.77973611571 2.57819306534 15.0444600806 4.75947121112 3.21604410266 14.9278174769 15.6667184313 3.22230436568 0.0964397333022 4.96516605908 3.22000452955 -14.859733209 -12.5926622707 3.21187762444 -9.32397083391 -12.7440332746 3.20925888593 9.11751672644 -15.7963541154 2.50943234949 -0.0889417395571 Faces 15 0 5 6 1 0 1 1 6 7 2 0 1 2 7 8 3 0 1 3 8 9 4 0 1 5 0 4 9 0 1 9 10 14 5 0 0 8 11 10 9 0 0 7 12 11 8 0 0 6 13 12 7 0 0 5 14 13 6 0 0 10 15 14 0 0 0 13 14 15 0 0 0 12 13 15 0 0 0 11 12 15 0 0 0 10 11 15 0 0 0 criticalmass-1.0.0.orig/data/models/SixLegBugBlue.model0000644000175000017500000004016207630537344022274 0ustar danieldanielName SixLegBugBlue Scale 1.0 1.0 1.0 Colors 3 0.2 0.2 1.0 0.915263175964 0.0977443605661 0.093233063817 0.268646597862 0.43909779191 0.842105269432 Vertices 148 -9.39038904493e-08 2.77016563464e-07 0.557004395311 -1.82090998612e-08 1.00260822144 0.482379935217 -3.61697738768e-09 1.46622756179 0.27850217418 1.33997527084e-08 1.71324811776 -2.43474362832e-08 -3.61697738768e-09 1.46622756179 -0.278502221132 -1.82090968763e-08 1.00260831535 -0.482379935217 -0.163699543009 0.811127164313 -0.482379982169 -0.283535846065 1.40491322714 -0.27850217418 -0.425618666982 1.62225396784 -4.69519605417e-08 -0.283535869541 1.40491332104 0.27850217418 -0.163699531271 0.811127164313 0.482379935217 -0.264871433305 0.309823162772 0.482379935217 -0.458770671206 0.536629285691 0.27850217418 -0.529742772706 0.619646090784 -4.69519605417e-08 -0.458770671206 0.536629191787 -0.27850217418 -0.264871433305 0.309823139296 -0.482379982169 -0.264871479917 -0.309822777595 -0.482379982169 -0.458770739359 -0.536628865434 -0.27850217418 -0.52974286593 -0.619645742999 -4.69519605417e-08 -0.458770739359 -0.536628959338 0.27850217418 -0.264871479917 -0.309822754119 0.482379935217 -0.163699647106 -0.811126833166 0.482379935217 -0.283536012101 -1.40491304761 0.27850217418 -0.327399200308 -1.62225366633 -4.69519605417e-08 -0.283535988625 -1.4049129537 -0.27850217418 -0.163699635368 -0.81112692707 -0.482379982169 -1.06331513806e-07 -1.00260793973 -0.482379982169 -1.40643759231e-07 -1.73656784191 -0.27850217418 -1.65349270263e-07 -2.00521606727 -4.69519605417e-08 -1.45837418963e-07 -1.73656821752 0.27850217418 -1.29626582893e-07 -1.00260793973 0.482379935217 0.163699413891 -0.811126788698 0.482379935217 0.283535799113 -1.40491294542 0.27850217418 0.327398921685 -1.6222537652 -4.69519605417e-08 0.283535775637 -1.40491275762 -0.27850217418 0.163699437367 -0.811126694794 -0.482379982169 -4.44680143159e-08 3.206305614e-08 -0.557004395311 0.264871315925 -0.309822388065 -0.482379982169 0.458770671206 -0.536628440556 -0.27850217418 0.529742772706 -0.619645339553 -4.69519605417e-08 0.458770671206 -0.53662853446 0.27850217418 0.264871315925 -0.309822528921 0.482379935217 0.264871339061 0.309823505351 0.482379935217 0.458770739359 0.536629898377 0.27850217418 0.529742772026 0.619646775942 -4.69519605417e-08 0.458770645456 0.536629898377 -0.27850217418 0.264871315585 0.309823622731 -0.482379982169 0.163699424084 0.811127678301 -0.482379982169 0.283535800818 1.40491408055 -0.27850217418 0.425618687369 1.62225534177 -4.69519605417e-08 0.283535824294 1.40491408055 0.27850217418 0.163699459298 0.811127678301 0.482379935217 2.25508348166 -0.177238063868 -1.70891238592 2.25508353518 0.177237371114 -1.70891238592 2.46776915535 0.177237303785 -1.70891238592 2.46776910183 -0.177238166411 -1.70891238592 2.86806367269 -0.196931322877 -0.48691511899 2.86806391997 0.196930327628 -0.48691511899 2.64599861273 0.196930396373 -0.567740195849 2.64599855326 -0.196931183705 -0.567740195849 1.52551029818 -0.196931014516 0.547169321185 1.52551035765 0.196930565562 0.547169321185 1.62538243635 0.19693050353 0.761345008776 1.62538237687 -0.196931135238 0.761345008776 0.737787302358 -0.196931001215 0.761345196584 0.73778736183 0.196930637553 0.761345196584 0.837658877098 0.196930669425 0.547169133377 0.837658817626 -0.196930910653 0.547169133377 0.821172522229 -1.1730916654 0.547169133377 0.889565905352 -0.785213735662 0.547169133377 0.791211692259 -0.767871216001 0.761345196584 0.722818309136 -1.15574928659 0.761345196584 1.59692875731 -1.30987861945 0.761345008776 1.66532223434 -0.92200059581 0.761345008776 1.56696745782 -0.904658029198 0.547169321185 1.4985739808 -1.29253595893 0.547169321185 2.60203949149 -1.48710683421 -0.567740195849 2.67043278071 -1.09922890448 -0.567740195849 2.88912448985 -1.13779020707 -0.48691511899 2.82073082502 -1.52566813681 -0.48691511899 2.41968672366 -1.4357690635 -1.70891238592 2.48124042103 -1.08667880466 -1.70891238592 2.27178660378 -1.04974636087 -1.70891238592 2.21023234299 -1.39883652581 -1.70891238592 2.27178692079 1.04974567481 -1.70891238592 2.21023276543 1.39883585833 -1.70891238592 2.41968715725 1.43576814497 -1.70891238592 2.48124074919 1.08667796145 -1.70891238592 2.88912464565 1.13778924068 -0.48691511899 2.82073166137 1.52566728497 -0.48691511899 2.60203994058 1.48710604842 -0.567740195849 2.67043311267 1.09922809803 -0.567740195849 1.56696773102 0.904657555987 0.547169321185 1.49857437113 1.29253550637 0.547169321185 1.59692915288 1.30987813719 0.761345008776 1.66532251277 0.922000092897 0.761345008776 0.791211924149 0.767870883158 0.761345196584 0.722818658163 1.1557489744 0.761345196584 0.821172876493 1.17309141741 0.547169133377 0.889566142479 0.78521346702 0.547169133377 -0.821343110318 0.78521372536 0.547169133377 -0.752949633291 1.17309165509 0.547169133377 -0.654595608006 1.15574918239 0.761345196584 -0.722988991129 0.767871111796 0.761345196584 -1.59709953321 0.922000585509 0.761345008776 -1.52870605618 1.30987860915 0.761345008776 -1.43035127967 1.29253594863 0.547169321185 -1.49874475669 0.904658018897 0.547169321185 -2.60221007958 1.09922889417 -0.567740195849 -2.53381679036 1.48710682391 -0.567740195849 -2.7525084995 1.52566812651 -0.48691511899 -2.82090160091 1.13779010287 -0.48691511899 -2.41120800431 1.08147492049 -1.70891238592 -2.34965355572 1.43056517933 -1.70891238592 -2.14019936285 1.39363273554 -1.70891238592 -2.20175362364 1.04454257061 -1.70891238592 -2.18505055505 -0.182441231807 -1.70891238592 -2.18505050152 0.172034214913 -1.70891238592 -2.39773593389 0.172034247027 -1.70891238592 -2.39773598741 -0.182441281859 -1.70891238592 -2.79984103103 -0.196930467048 -0.48691511899 -2.79984115937 0.196931218672 -0.48691511899 -2.57777585213 0.196931185141 -0.567740195849 -2.5777759116 -0.196930406675 -0.567740195849 -1.45728765652 -0.196930575864 0.547169321185 -1.45728759705 0.196931015952 0.547169321185 -1.55715967574 0.196931031033 0.761345008776 -1.55715973522 -0.196930654687 0.761345008776 -0.6695646607 -0.19693078871 0.761345196584 -0.669564601228 0.196930897009 0.761345196584 -0.769435928689 0.19693091209 0.547169133377 -0.76943598816 -0.196930679726 0.547169133377 -0.758189059567 -1.07008417801 0.547169133377 -0.860127812213 -0.689643037494 0.547169133377 -0.763659558949 -0.663794448368 0.761345196584 -0.661720712399 -1.04423563584 0.761345196584 -1.51907171622 -1.27396205892 0.761345008776 -1.62101056277 -0.893520824498 0.761345008776 -1.52454155828 -0.867672094516 0.547169321185 -1.42260271173 -1.24811314113 0.547169321185 -2.50491136655 -1.5381167389 -0.567740195849 -2.6068500253 -1.15767559838 -0.567740195849 -2.82134875105 -1.21515030603 -0.48691511899 -2.7194097167 -1.59559135264 -0.48691511899 -2.31305081844 -1.53464119594 -1.70891238592 -2.40479546106 -1.19224400984 -1.70891238592 -2.19935752501 -1.1371969989 -1.70891238592 -2.10761250677 -1.47959399719 -1.70891238592 Normals 148 0.0 0.0 0.393861591816 1.66415515326e-08 0.110212015512 0.378115312809 3.4760494156e-08 0.230208350082 0.31956553721 5.94714464341e-08 0.393861591816 0.0 3.4760494156e-08 0.230208350082 -0.31956553721 1.66415515326e-08 0.110212015512 -0.378115312809 -0.142702247319 0.0557370812602 -0.362837802176 -0.207526466839 0.165275979778 -0.291089994801 -0.279538667243 0.277447276263 0.0 -0.0908596693154 0.182140120397 0.337174940439 0.0575160380196 0.0636101964005 0.38440180471 -0.0205663320397 0.0390171468745 0.391373443095 -0.356142638762 -0.144553294742 -0.0859675314202 -0.392443215018 0.0332595897471 0.0 -0.330167238431 0.0299180005084 -0.21264702566 -0.196083381129 0.0153616781539 -0.341225720835 -0.196083385768 -0.0153616189384 -0.341225720835 -0.33558829812 -0.0349903697117 -0.20316319915 -0.391241233217 -0.0453155992306 0.0 -0.391409500593 0.010649839979 -0.042454884154 0.0596796192653 -0.132785705493 0.365963018574 0.0409403452088 -0.0632736478759 0.386577441182 -0.177079669824 -0.145550980513 0.320274723098 -0.340143930692 -0.198547441405 0.0 -0.269249557246 -0.120020345056 -0.26118408439 -0.148952696164 -0.0505563872403 -0.361070835569 -1.32402784249e-08 -0.0876864016126 -0.383969071966 -3.5658910148e-08 -0.236158290329 -0.315202268041 -0.393861591816 5.94714464341e-08 0.0 -3.5658910148e-08 -0.236158290329 0.315202268041 -1.32402784249e-08 -0.0876864016126 0.383969071966 -0.0419740906094 -0.0609537624617 0.386841874623 0.15984285635 -0.149024830878 0.327655054824 0.340143870732 -0.198547544126 0.0 0.269249521001 -0.120020426367 -0.26118408439 0.148952680897 -0.0505564322228 -0.361070835569 -0.0 0.0 -0.393861591816 0.196083381129 -0.0153616781539 -0.341225720835 0.335588287553 -0.0349904710566 -0.20316319915 0.391241219532 -0.0453157173821 0.0 0.392587457857 0.00923135349089 -0.0301703731979 -0.0557731384565 -0.130057133563 0.367549666176 -0.0557730991804 0.130057150406 0.367549666176 0.34538463153 -0.155912359365 -0.107315173451 0.392443225062 0.0332594712325 0.0 0.330167247466 0.0299179008007 -0.21264702566 0.196083385768 0.0153616189384 -0.341225720835 0.142702264152 0.0557370381653 -0.362837802176 0.207526516751 0.165275917107 -0.291089994801 0.27953875103 0.277447191845 0.0 0.0932036422514 0.180577472668 0.337379298847 -0.0485129888891 0.0655334234042 0.385327345232 0.206492724787 -0.170156119449 -0.28901053942 0.206492776173 0.17015605709 -0.28901053942 0.186154839538 0.232095485599 -0.258058844516 0.186154769447 -0.232095541816 -0.258058844516 0.304384171498 -0.239547986129 0.071315068762 0.304384243839 0.239547894208 0.071315068762 -0.203079111742 -0.334482426122 -0.0447386950082 -0.203079010732 0.33448248745 -0.0447386950082 -0.0893812802079 -0.316608606619 -0.216553569633 -0.0893811845947 0.316608633611 -0.216553569633 0.117351967194 0.24815431072 0.282423531496 0.117351892254 -0.24815434616 0.282423531496 -0.0636222554258 -0.202910775804 0.331513496513 -0.0636221941484 0.202910795017 0.331513496513 0.127977720683 0.303434584942 -0.216036698975 0.127977629049 -0.303434623591 -0.216036698975 0.107158902841 -0.0959321856625 -0.36666018476 0.176118084894 0.242889508083 -0.255162025931 0.0282231582179 0.234559618763 0.31513014983 -0.117964984486 -0.175432883923 0.332306820314 0.0724809750816 -0.264766060404 0.282423531496 0.158664946676 0.224005972136 0.282423531496 -0.0330431205629 0.327318484684 -0.216553569633 -0.143002804757 -0.296270629058 -0.216553569633 -0.14141605731 0.364965357718 -0.0438732500611 -0.257698297946 -0.294623865628 -0.0436568895579 0.341730575917 0.182801150421 0.0701731618677 0.258635770106 -0.288601885133 0.070257299781 0.141908892526 -0.260991767111 -0.258575715174 0.222623713095 0.196504051137 -0.258731971298 0.231903194708 0.130513867378 -0.290356769509 0.17320915594 -0.202093448359 -0.290308690701 0.231903155294 -0.130513937411 -0.290356769509 0.173209216971 0.202093396051 -0.290308690701 0.141908971343 0.260991724256 -0.258575715174 0.222623653752 -0.196504118368 -0.258731971298 0.341730520713 -0.18280125362 0.0701731618677 0.258635857261 0.288601807027 0.070257299781 -0.141416167527 -0.364965315011 -0.0438732500611 -0.257698208972 0.29462394345 -0.0436568895579 -0.0330432194103 -0.327318474705 -0.216553569633 -0.143002715285 0.296270672244 -0.216553569633 0.0724810550387 0.264766038515 0.282423531496 0.158664879029 -0.224006020052 0.282423531496 0.0282230873829 -0.234559627286 0.31513014983 -0.117964931507 0.175432919547 0.332306820314 0.000372670352237 0.319361202222 -0.230496846403 0.176118011544 -0.242889561269 -0.255162025931 -0.193955861853 -0.238874807576 -0.245858494949 -0.00453151711008 0.32314752644 -0.225111855621 0.127725276045 0.176538730237 0.328087764092 -0.0215520171821 -0.22749182377 0.320791593756 -0.158664946676 -0.224005972136 0.282423531496 -0.0724809750816 0.264766060404 0.282423531496 0.143002804757 0.296270629058 -0.216553569633 0.0330431205629 -0.327318484684 -0.216553569633 0.257638199437 0.294623865637 -0.0440535514585 0.141187671207 -0.365157696389 -0.0429717460082 -0.258635770086 0.288734101854 0.0697043758867 -0.341874812298 -0.182524697255 0.0701491224639 -0.222347260064 -0.197249284435 -0.258407439347 -0.141872833511 0.260390758535 -0.259200763148 -0.173257234866 0.201312144267 -0.290813541657 -0.231590682483 -0.130670135288 -0.290537088514 -0.206216323067 -0.170408482609 -0.289058618228 -0.206492724894 0.169446945299 -0.289431228987 -0.186118710439 0.231446454432 -0.258671872789 -0.185830295957 -0.232816691238 -0.257650174652 -0.304552519629 -0.239307500145 0.0714112263772 -0.304360132069 0.239716285428 0.0708342630791 0.202934774278 -0.334686822361 -0.0438732500611 0.203079111732 0.334410307911 -0.0452675794988 0.0893811845947 -0.316608633611 -0.216553569633 0.0893812802079 0.316608606619 -0.216553569633 -0.117351892254 0.24815434616 0.282423531496 -0.117351967194 -0.24815431072 0.282423531496 0.0741397564239 -0.200795258643 0.330611995395 0.0741398170624 0.200795236254 0.330611995395 -0.147041451298 0.30425201315 -0.202309776839 -0.14704154318 -0.304251968745 -0.202309776839 -0.102555244542 -0.0920496729033 -0.368956018251 -0.182248246819 0.246207093823 -0.247565339571 -0.029990033635 0.252758019651 0.300561825085 0.123434062357 -0.161165099913 0.337511515568 -0.0491260619689 -0.270078914613 0.282423531496 -0.177584467195 0.209329520847 0.282423531496 0.00438737475002 0.328953228918 -0.216553569633 0.168280925138 -0.282675970646 -0.216553569633 0.285813164301 -0.268287982652 -0.03813967912 0.282122997792 -0.272567113351 -0.0351106203376 -0.355794022156 0.155131056838 0.0668075396942 -0.358594684021 0.149205168155 0.0653410949795 -0.234343241596 0.177452305729 -0.262121644614 -0.238634394066 0.167439589507 -0.264838167671 -0.242661121192 0.103793331793 -0.29234009075 -0.237792999791 0.112243439729 -0.293205532763 Faces 156 36 6 5 0 0 2 5 6 7 4 0 2 4 7 8 3 0 2 3 8 9 2 0 2 2 9 10 1 0 2 10 0 1 0 0 2 11 0 10 0 0 2 8 13 12 9 0 2 7 14 13 8 0 2 6 15 14 7 0 2 36 15 6 0 0 2 36 16 15 0 0 2 15 16 17 14 0 2 14 17 18 13 0 2 13 18 19 12 0 2 20 0 11 0 0 2 21 0 20 0 0 2 18 23 22 19 0 2 17 24 23 18 0 2 16 25 24 17 0 2 36 25 16 0 0 2 36 26 25 0 0 2 25 26 27 24 0 2 24 27 28 23 0 2 23 28 29 22 0 2 22 29 30 21 0 2 30 0 21 0 0 2 31 0 30 0 0 2 29 32 31 30 0 2 28 33 32 29 0 2 27 34 33 28 0 2 26 35 34 27 0 2 36 35 26 0 0 2 36 37 35 0 0 2 35 37 38 34 0 2 34 38 39 33 0 2 33 39 40 32 0 2 41 0 31 0 0 2 42 0 41 0 0 2 39 44 43 40 0 2 38 45 44 39 0 2 37 46 45 38 0 2 36 46 37 0 0 2 36 47 46 0 0 2 46 47 48 45 0 2 45 48 49 44 0 2 44 49 50 43 0 2 51 0 42 0 0 2 1 0 51 0 0 2 50 2 1 51 0 2 49 3 2 50 0 2 48 4 3 49 0 2 47 5 4 48 0 2 36 5 47 0 0 2 52 53 54 55 0 0 52 59 58 53 0 0 53 58 57 54 0 0 54 57 56 55 0 0 55 56 59 52 0 0 56 63 60 59 0 0 57 62 63 56 0 0 58 61 62 57 0 0 59 60 61 58 0 0 60 67 66 61 0 0 61 66 65 62 0 0 62 65 64 63 0 0 63 64 67 60 0 0 83 82 81 80 0 0 83 76 77 82 0 0 82 77 78 81 0 0 81 78 79 80 0 0 80 79 76 83 0 0 79 72 75 76 0 0 78 73 72 79 0 0 77 74 73 78 0 0 76 75 74 77 0 0 75 68 69 74 0 0 74 69 70 73 0 0 73 70 71 72 0 0 72 71 68 75 0 0 84 85 86 87 0 0 84 91 90 85 0 0 85 90 89 86 0 0 86 89 88 87 0 0 87 88 91 84 0 0 88 95 92 91 0 0 89 94 95 88 0 0 90 93 94 89 0 0 91 92 93 90 0 0 92 99 98 93 0 0 93 98 97 94 0 0 94 97 96 95 0 0 95 96 99 92 0 0 115 112 113 114 0 0 115 114 109 108 0 0 114 113 110 109 0 0 113 112 111 110 0 0 112 115 108 111 0 0 111 108 107 104 0 0 110 111 104 105 0 0 109 110 105 106 0 0 108 109 106 107 0 0 107 106 101 100 0 0 106 105 102 101 0 0 105 104 103 102 0 0 104 107 100 103 0 0 116 119 118 117 0 0 116 117 122 123 0 0 117 118 121 122 0 0 118 119 120 121 0 0 119 116 123 120 0 0 120 123 124 127 0 0 121 120 127 126 0 0 122 121 126 125 0 0 123 122 125 124 0 0 124 125 130 131 0 0 125 126 129 130 0 0 126 127 128 129 0 0 127 124 131 128 0 0 147 144 145 146 0 0 147 146 141 140 0 0 146 145 142 141 0 0 145 144 143 142 0 0 144 147 140 143 0 0 143 140 139 136 0 0 142 143 136 137 0 0 141 142 137 138 0 0 140 141 138 139 0 0 139 138 133 132 0 0 138 137 134 133 0 0 137 136 135 134 0 0 136 139 132 135 0 0 10 102 103 11 0 0 9 101 102 10 0 0 9 12 100 101 0 0 11 103 100 12 0 0 42 96 97 51 0 0 50 51 97 98 0 0 43 50 98 99 0 0 42 43 99 96 0 0 11 129 128 20 0 0 11 12 130 129 0 0 19 20 128 131 0 0 12 19 131 130 0 0 19 22 132 133 0 0 21 135 132 22 1 1 20 134 135 21 0 0 19 133 134 20 0 0 41 64 65 42 0 0 31 71 70 41 0 0 42 65 66 43 0 0 40 43 66 67 0 0 40 67 64 41 0 0 40 41 70 69 0 0 32 40 69 68 0 0 31 32 68 71 1 1 criticalmass-1.0.0.orig/data/models/Doggy.model0000644000175000017500000000774710265636020020705 0ustar danieldanielName Doggy Scale 1.0 1.0 1.0 Colors 5 0.38841804862 0.740421891212 1.0 0.0 0.0 0.0 1.0 0.890757441521 0.0653690546751 0.113921374083 0.223163917661 0.708686411381 1.0 1.0 1.0 Vertices 37 -3.27325264466e-08 -0.57031303998 3.08622527154 0.650007258968 -0.736935077894 2.50634691781 1.20105682448 -0.725405440555 1.18796026538 2.8692562851 -2.04534054429 0.337502053134 2.9985506837 -1.97015286469 -0.364070660594 1.69851301902 0.691886422732 0.127855660539 1.04922132609 0.767043479246 0.857211113306 0.862572324164 0.304885356103 1.37835085922 0.649992796586 -0.207422496223 2.60419717108 0.269221307919 0.16698935493 2.67338588376 0.370070505751 0.691334390041 1.15353866657 0.779957705021 1.15961096866 0.929754862362 0.703509244829 1.67027173223 0.308654478353 -0.703600787939 1.67023444704 0.308647584175 -0.780042396216 1.15957659696 0.929748506127 -0.326413431453 0.691315833488 1.1535352354 -0.269256396195 0.166975079161 2.67338324411 -0.650007357646 -0.207456980178 2.60419079487 -0.81888870698 0.304840761828 1.37834261356 -1.04925640664 0.766960204774 0.857195718595 -1.69855095398 0.691796348103 0.127839005391 -2.99851309567 -1.97024299993 -0.364087410455 -2.86922138513 -2.04542366114 0.337486676856 -1.20103006308 -0.725469174507 1.18794848073 -0.64999280885 -0.736969555808 2.50634054271 -0.26922126088 -1.11138134864 2.43715184081 -0.497455962409 -1.41729192967 1.06010443497 -0.649957521732 -1.67097740322 0.406681755302 -0.703509000406 -1.6702719404 -0.308654832014 0.703601103944 -1.67023443695 -0.308647897502 0.650042557672 -1.67094276508 0.40668816001 0.497521098459 -1.41726539989 1.06010934042 0.269256443231 -1.1113669904 2.4371544957 3.99851289529 -1.56982096944 -0.290092175325 3.26350927971 1.15892892957 0.214161881769 -3.26360085522 1.15889196481 0.21415503176 -3.99855105522 -1.56991113871 -0.290108861479 Normals 37 -1.35582558514e-08 -0.236231386662 1.27835631371 0.731219921983 -0.485217821089 0.959083355162 0.893826584098 -0.302158328658 0.894266059771 0.77098744815 0.82615750823 0.642627375689 0.722335396265 1.00943031426 0.386328046147 0.593919510793 0.184278437601 1.14158544351 0.402897641484 0.604673094514 1.07794016555 0.402897641484 0.604673094514 1.07794016555 0.731199853279 0.110451081913 1.06915883787 0.302858202136 0.531643930217 1.14699235428 0.402897641484 0.604673094514 1.07794016555 0.402897641484 0.604673094514 1.07794016555 0.351291550875 0.80160037414 0.961259086851 -0.351313191294 0.801543888565 0.961248646644 -0.38583412941 0.59057730979 1.09191752187 -0.38583412941 0.59057730979 1.09191752187 -0.302895911451 0.531624182043 1.14698870317 -0.731219943494 0.110413988754 1.06915197901 -0.38583412941 0.59057730979 1.09191752187 -0.38583412941 0.59057730979 1.09191752187 -0.593967348251 0.184246169618 1.14157947712 -0.722350032939 1.00939113864 0.386320802519 -0.769746974619 0.826341162622 0.643871645739 -0.890669844138 -0.292223170263 0.900661094725 -0.731199874791 -0.485254914249 0.959076496306 -0.302858223647 -0.906447762553 0.881242979893 -0.222564380036 -1.13982646935 0.584139544871 0.0253080635192 -1.23743996743 0.397576898689 0.102723822253 -1.29494685314 -0.0501965176862 -0.102669261708 -1.29494567767 -0.0501963010715 -0.0252642990303 -1.23740726262 0.397582942163 0.222585688639 -1.13980526307 0.584143464953 0.30289588994 -0.906428014379 0.881246630999 -1.35582558514e-08 -0.236231386662 1.27835631371 -1.35582558514e-08 -0.236231386662 1.27835631371 -1.35582558514e-08 -0.236231386662 1.27835631371 -1.35582558514e-08 -0.236231386662 1.27835631371 Faces 34 4 5 6 3 0 0 3 6 7 2 0 0 2 7 8 1 0 0 8 0 1 0 1 4 0 8 9 0 1 1 8 7 10 9 0 0 7 6 11 10 1 2 6 5 12 11 0 0 12 13 14 11 0 0 11 14 15 10 0 0 10 15 16 9 0 0 16 0 9 0 1 1 0 16 17 0 1 1 16 15 18 17 0 0 15 14 19 18 1 2 14 13 20 19 0 0 20 21 22 19 0 0 19 22 23 18 0 0 18 23 24 17 0 0 24 0 17 0 1 4 0 24 25 0 1 1 24 23 26 25 0 0 23 22 27 26 0 0 22 21 28 27 0 0 28 29 30 27 0 0 27 30 31 26 0 0 26 31 32 25 0 0 32 0 25 0 1 1 0 32 1 0 1 1 32 31 2 1 0 0 31 30 3 2 0 0 30 29 4 3 0 0 12 5 33 34 0 3 20 13 35 36 0 3 criticalmass-1.0.0.orig/data/models/WingPhaser.model0000644000175000017500000003514110276542612021675 0ustar danieldanielName WingPhaser Scale 1.0 1.0 1.0 Colors 1 0.0 0.874518215656 0.911469638348 Vertices 124 14.6186273098 0.824356421828 -1.79801678658 -14.9236609936 -1.99654269218 -1.15240298212 -15.2112660408 -0.897832736373 1.08307823539 -14.1770117283 0.824347764254 1.79801720381 13.8984364271 -2.90581709146 1.34350892901 -14.3233585358 -4.01303452253 0.619101077318 14.7211079597 4.15707862377 -1.00994133949 14.5431799889 -2.90581855178 -1.34350830317 -13.2350258827 -4.01303368807 -0.619102016091 15.0859894753 4.47462427616 -0.122615925968 14.6379718781 1.74514497817 1.70225170255 12.7887331247 -0.897825956345 1.08307823539 13.8229874372 0.824352145195 1.79801699519 -14.126075983 -4.10962593555 -0.63145454973 12.748857379 -2.72508239746 -0.00447117892327 -12.9140096903 -3.87913960218 0.122622119263 12.5880492926 -0.431531202048 -0.85028398037 -12.8224096298 2.97158545256 1.2051962465 -12.6347234249 -1.99653810263 1.15240225196 -14.3233585358 4.60851794481 -0.619101494551 13.3556252718 4.47462135553 0.122620958835 15.8535654545 1.02702388167 -0.850281737745 -14.7359781265 -2.37609994411 1.20519582927 -14.2794940472 -3.56159520149 -1.00994175673 14.5676932335 -4.10962593555 0.631453923881 -14.6443755627 -3.87914001942 -0.122619668022 -12.3471217155 1.49330791831 1.08308282495 -14.2794940472 4.1570802927 1.00993998349 14.7649724483 4.60851711035 0.619101703167 14.7649741173 -4.01303327084 -0.619102276862 12.748857379 3.32056748867 0.00447126611834 13.8739215136 4.70510852337 0.63145340234 13.929828167 -4.43185377121 -0.0471128751524 -14.0504601002 2.70989283919 1.56444887817 13.2640227079 -2.37610182166 1.20519541204 13.0763373375 -1.99653726816 -1.15240225196 13.6766414642 4.60851669312 -0.619101911783 -15.2112660408 1.49330770969 -1.08308053017 13.076338172 2.59202089906 1.15240266919 -12.9140105247 4.47462219 -0.122621584684 14.5117874146 -4.43185377121 0.0471122525632 -15.590303421 1.27824291587 -0.138155385852 15.3652732372 2.59202256799 -1.15240423381 -15.59030509 -0.682724863291 0.138155542314 -13.5143989325 0.653280816972 -1.81351989508 15.0717017651 -0.0850996039808 1.63876101375 -12.3072434664 3.32056519389 -0.00447155581787 15.0859894753 -3.87914210558 0.122615665197 13.8036453724 1.74513871968 -1.70225284994 12.5880476236 1.02702283859 0.850279860198 14.4920740128 2.7098915875 -1.56444908679 -14.070171833 5.02733552456 0.0471124188043 -13.3620297909 1.745141536 1.70225222409 -13.2788912058 -3.56159895658 1.00993987918 14.7211096287 -3.56160062551 1.00993894041 -13.432305932 -4.10962677002 0.631452724338 12.7887356281 1.49330510199 -1.08308126032 14.4920740128 -2.11441025138 1.56444908679 15.3652749062 -1.99654206634 1.15240308642 13.9495390654 2.70989221334 1.56444887817 14.890294075 -0.312862060964 -1.75383165479 -13.488211751 -4.43185335398 0.0471124188043 -15.4119515419 -0.431550499052 -0.850278712809 -15.2511434555 -2.72508072853 -0.00447524245828 13.956014514 -0.057798255235 -1.81351989508 13.929826498 5.02733552456 0.0471126730554 -13.5143972635 -0.0578006869182 1.81351968646 13.9495390654 -2.11440962553 -1.56444887817 15.1775920391 -2.37610286474 -1.20519603789 14.485601902 -0.0578012019396 1.81351968646 13.7205059528 -3.56159687042 -1.00994092226 -13.5079243183 2.70989283919 -1.56444877386 -14.6443755627 4.47462260723 0.122617034242 -13.3620306253 -1.1496605128 -1.70225201547 14.5676932335 4.7051089406 -0.631453193724 -14.1015644073 3.50129842758 -1.34350892901 -11.9680809975 1.2782227844 0.138156207278 16.0319190025 1.27823081613 0.138154655695 -14.1015660763 -2.90581792593 1.34350830317 -13.4568200111 -2.90581709146 -1.34350861609 -14.4486818314 -0.31286033988 1.75383082032 -12.1464345455 1.02702461183 -0.850282154977 13.8739215136 -4.10962635279 -0.631453715265 15.1775903702 2.97158294916 1.2051962465 -13.5079243183 -2.11441087723 1.56444887817 -12.6347234249 2.59201735258 -1.15240329504 -12.1464328766 -0.431541528553 0.850279077888 13.3556252718 -3.87913960218 -0.122623031959 15.6528732777 -0.897827729583 -1.08308804035 -14.4486801624 0.908340007067 -1.75383165479 -14.9236626625 2.59201568365 1.15240339935 13.6766422987 -4.01303577423 0.619101181626 12.40969491 -0.682744733989 0.138149127364 15.6528766155 1.49330708385 1.08308272064 -12.9282957315 0.680578567088 -1.63875997066 -13.4568191767 3.50129926205 1.34350851178 -14.1770117283 -0.228871356696 -1.79801699519 13.3699096441 -0.0850986652076 -1.63875955343 -12.9282948971 -0.085097915493 1.63875976205 -12.3072434664 -2.72508427501 0.00447104283376 16.0319173336 -0.682751826942 -0.138161526993 -15.4119532108 1.02702064812 0.850279077888 13.8984355927 3.50129842758 -1.34350903332 14.5431799889 3.50130093098 1.34350809455 13.7205059528 4.15708112717 1.00993956625 -11.9680809975 -0.682740665972 -0.138154499233 -14.070171833 -4.43185418844 -0.0471123536117 13.2640235424 2.97158128023 -1.2051974982 -14.0504601002 -2.11440962553 -1.56444908679 13.5513198376 -0.312860652804 1.75383144617 15.8535671234 -0.43153487891 0.850280538201 14.5117874146 5.02733552456 -0.0471120472066 -12.8224096298 -2.37610223889 -1.20519676805 -13.4323067665 4.70510935783 -0.631452515721 -13.2788912058 4.15707945824 -1.00994060934 15.692759037 -2.72507801652 0.00447241921211 -14.126077652 4.70510852337 0.63145340234 -14.7359764576 2.97158065438 -1.20519728959 -12.3471208811 -0.8978317976 -1.08308063447 -15.2511401176 3.3205704093 0.00447131664259 -13.4882125854 5.02733552456 -0.0471125296317 12.40969491 1.27822038531 -0.138154838234 -13.2350267172 4.60851711035 0.619101285934 15.6927573681 3.32056352496 -0.0044706822373 Normals 124 1.69087804854 0.526169627905 -6.77227073908 -4.90450769663 -1.56782741845 -4.74193555117 -5.62636208534 -0.777611620724 4.09121972322 -1.69087804854 0.526169627905 6.77227073908 -1.47788929939 -2.56718659401 6.34223461151 -3.38175609708 -4.62379825115 4.02264463902 2.84148693085 3.45011755824 -5.38709676266 1.47788929939 -2.56718659401 -6.34223461151 3.38175609708 -4.62379825115 -4.02264463902 5.70647281408 3.96838271618 -0.828669093549 1.88293090463 0.84575945884 6.68852800131 -5.62636208534 -0.777611620724 4.09121972322 -1.69087804854 0.526169627905 6.77227073908 -2.02093577385 -5.10937845707 -4.33668011427 -6.57722705603 -2.3954282403 -0.017731253989 5.70647281408 -3.96838271618 0.828669093549 -6.16620379686 -0.474471285939 -3.27857303619 4.57466369867 1.8810082972 4.95300137997 4.91497522593 -1.62785726786 4.71053212881 -3.38175609708 4.62379825115 -4.02264463902 -5.70647281408 3.96838271618 0.828669093549 6.07177948952 0.466139726341 -3.45161291957 -4.5456097126 -1.90600302815 4.97009205818 -2.84148693085 -3.45011755824 -5.38709676266 2.02093577385 -5.10937845707 4.33668011427 -5.70647281408 -3.96838271618 -0.828669093549 5.47596687078 0.819269366562 4.28241819143 -2.84148693085 3.45011755824 5.38709676266 3.38175609708 4.62379825115 4.02264463902 3.38175609708 -4.62379825115 -4.02264463902 -6.57722705603 2.3954282403 0.017731253989 -2.02093577385 5.10937845707 4.33668011427 -2.05212557316 -6.68745988607 -0.255500961095 -1.37299725413 1.51869255304 6.69365537167 -4.5456097126 -1.90600302815 4.97030568123 -4.91497522593 -1.62785726786 -4.71053212881 -3.38175609708 4.62379825115 -4.02264463902 -5.62636208534 0.777611620724 -4.09121972322 -4.90450769663 1.56782741845 4.74193555117 5.70647281408 3.96838271618 -0.828669093549 2.05212557316 -6.68745988607 0.255500961095 -6.94445633888 0.684682779014 -0.551805175841 4.90450769663 1.56782741845 -4.74193555117 -6.94445633888 -0.684682779014 0.551805175841 0.891262575984 0.299722287804 -6.93633824587 3.4810937345 -0.244178600609 6.06793427467 6.57722705603 2.3954282403 -0.017731253989 5.70647281408 -3.96838271618 0.828669093549 -1.88293090463 0.84575945884 -6.68852800131 -6.07177948952 0.466139726341 3.45161291957 1.37299725413 1.51869255304 -6.69365537167 -2.05212557316 6.68745988607 0.255500961095 1.88293090463 0.84575945884 6.68852800131 2.8412733078 -3.45011755824 5.38709676266 2.84148693085 -3.45011755824 5.38709676266 2.02093577385 -5.10937845707 4.33668011427 -5.47596687078 0.819269366562 -4.28241819143 1.20978423953 -1.47981201112 6.73381775618 4.91497522593 -1.6280708909 4.71053212881 -1.37299725413 1.51869255304 6.69365537167 2.60798984766 -0.370433680713 -6.48536622524 2.05212557316 -6.68745988607 0.255500961095 -6.07177948952 -0.466139726341 -3.45161291957 -6.57722705603 -2.3954282403 -0.017731253989 -0.891262575984 -0.299722287804 -6.93633824587 -2.05212557316 6.68745988607 0.255500961095 0.891262575984 -0.299722287804 6.93633824587 -1.20978423953 -1.47981201112 -6.73381775618 4.5456097126 -1.90600302815 -4.97009205818 0.891262575984 -0.299722287804 6.93633824587 -2.84148693085 -3.45011755824 -5.38709676266 1.20978423953 1.47981201112 -6.73381775618 -5.70647281408 3.96838271618 0.828669093549 1.88293090463 -0.84575945884 -6.68852800131 2.02093577385 5.10937845707 -4.33668011427 -1.47788929939 2.56718659401 -6.34223461151 6.94445633888 0.684682779014 0.551805175841 6.94445633888 0.684682779014 0.551805175841 -1.47788929939 -2.56718659401 6.34223461151 1.47596669197 -2.60628065467 -6.32663971186 -2.60798984766 -0.370433680713 6.48536622524 6.16620379686 0.474471285939 -3.27857303619 -2.02093577385 -5.10937845707 -4.33668011427 4.57466369867 1.8810082972 4.95300137997 1.20978423953 -1.47981201112 6.73381775618 4.91497522593 1.62785726786 -4.71053212881 6.16620379686 -0.474471285939 3.27857303619 -5.70647281408 -3.96838271618 -0.828669093549 5.62636208534 -0.777611620724 -4.09121972322 -2.60798984766 0.370433680713 -6.48536622524 -4.90450769663 1.56782741845 4.74193555117 -3.38175609708 -4.62379825115 4.02264463902 -6.94445633888 -0.684682779014 0.551805175841 5.47596687078 0.819269366562 4.28241819143 3.4810937345 0.244178600609 -6.06793427467 1.47596669197 2.60628065467 6.32663971186 -1.69087804854 -0.526169627905 -6.77227073908 -3.4810937345 -0.244178600609 -6.06793427467 3.4810937345 -0.244178600609 6.06793427467 6.57722705603 -2.3954282403 0.017731253989 6.94445633888 -0.684682779014 -0.551805175841 -6.07177948952 0.466139726341 3.45161291957 -1.47596669197 2.60628065467 -6.32663971186 1.47596669197 2.60628065467 6.32663971186 -2.84148693085 3.45011755824 5.38709676266 6.94445633888 -0.684682779014 -0.551805175841 -2.05212557316 -6.68745988607 -0.255500961095 -4.57466369867 1.8810082972 -4.95300137997 -1.37299725413 -1.51869255304 -6.69365537167 -2.60798984766 -0.370433680713 6.48536622524 6.16620379686 -0.474471285939 3.27857303619 2.05212557316 6.68745988607 -0.255500961095 4.57466369867 -1.8810082972 -4.95300137997 2.02093577385 5.10937845707 -4.33668011427 2.8412733078 3.45011755824 -5.38709676266 6.57722705603 -2.3954282403 0.017731253989 -2.02093577385 5.10937845707 4.33668011427 -4.5456097126 1.90600302815 -4.97030568123 5.47596687078 -0.819269366562 -4.28241819143 -6.57722705603 2.3954282403 0.017731253989 2.05212557316 6.68745988607 -0.255500961095 -6.94445633888 0.684682779014 -0.551805175841 3.38175609708 4.62379825115 4.02264463902 6.57722705603 2.3954282403 -0.017731253989 Faces 240 20 104 31 0 1 0 47 24 40 0 1 0 36 20 65 0 1 0 74 9 6 0 1 0 81 76 105 0 1 0 21 77 100 0 1 0 28 83 123 0 1 0 29 40 32 0 1 0 113 39 114 0 1 0 7 70 67 0 1 0 50 0 48 0 1 0 95 52 17 0 1 0 76 26 86 0 1 0 26 98 86 0 1 0 86 18 99 0 1 0 92 49 121 0 1 0 4 109 34 0 1 0 42 0 50 0 1 0 18 84 53 0 1 0 2 80 101 0 1 0 42 21 60 0 1 0 15 55 61 0 1 0 8 61 106 0 1 0 48 0 64 0 1 0 85 46 81 0 1 0 121 49 30 0 1 0 7 82 70 0 1 0 31 103 28 0 1 0 119 72 19 0 1 0 48 107 102 0 1 0 24 4 91 0 1 0 25 5 63 0 1 0 116 27 95 0 1 0 79 23 108 0 1 0 117 19 75 0 1 0 61 5 106 0 1 0 99 15 8 0 1 0 90 3 33 0 1 0 98 66 84 0 1 0 52 3 66 0 1 0 75 113 114 0 1 0 113 120 39 0 1 0 43 2 101 0 1 0 32 91 87 0 1 0 6 123 42 0 1 0 94 81 118 0 1 0 56 30 107 0 1 0 64 67 97 0 1 0 44 73 96 0 1 0 82 32 87 0 1 0 62 43 41 0 1 0 78 80 22 0 1 0 46 76 81 0 1 0 40 91 32 0 1 0 24 54 4 0 1 0 31 104 103 0 1 0 53 84 78 0 1 0 64 97 48 0 1 0 110 45 58 0 1 0 28 103 83 0 1 0 17 98 26 0 1 0 109 12 38 0 1 0 0 60 64 0 1 0 22 80 2 0 1 0 19 51 120 0 1 0 38 59 104 0 1 0 57 69 109 0 1 0 33 52 95 0 1 0 55 78 5 0 1 0 107 30 36 0 1 0 59 12 10 0 1 0 5 78 22 0 1 0 46 17 26 0 1 0 21 100 88 0 1 0 16 92 121 0 1 0 23 63 1 0 1 0 56 121 30 0 1 0 103 10 83 0 1 0 116 95 122 0 1 0 71 85 94 0 1 0 96 89 44 0 1 0 65 31 28 0 1 0 10 69 45 0 1 0 96 1 89 0 1 0 18 98 84 0 1 0 1 62 89 0 1 0 43 101 41 0 1 0 68 29 7 0 1 0 10 12 69 0 1 0 84 80 78 0 1 0 29 47 40 0 1 0 112 99 8 0 1 0 0 42 60 0 1 0 88 100 115 0 1 0 91 34 14 0 1 0 57 109 4 0 1 0 42 123 21 0 1 0 62 41 37 0 1 0 99 18 53 0 1 0 94 112 73 0 1 0 115 47 29 0 1 0 107 36 102 0 1 0 80 3 90 0 1 0 89 37 117 0 1 0 72 27 116 0 1 0 59 10 103 0 1 0 73 108 96 0 1 0 50 6 42 0 1 0 58 45 57 0 1 0 35 14 16 0 1 0 123 83 93 0 1 0 19 120 113 0 1 0 8 15 61 0 1 0 55 53 78 0 1 0 63 22 2 0 1 0 17 52 98 0 1 0 83 10 45 0 1 0 44 94 73 0 1 0 60 7 67 0 1 0 49 38 30 0 1 0 73 112 79 0 1 0 34 109 11 0 1 0 97 16 56 0 1 0 20 31 65 0 1 0 112 8 79 0 1 0 70 87 14 0 1 0 91 4 34 0 1 0 109 69 12 0 1 0 67 35 97 0 1 0 45 69 57 0 1 0 123 93 77 0 1 0 44 71 94 0 1 0 77 93 110 0 1 0 97 107 48 0 1 0 49 109 38 0 1 0 8 106 13 0 1 0 30 20 36 0 1 0 14 34 11 0 1 0 89 71 44 0 1 0 68 115 29 0 1 0 30 104 20 0 1 0 35 16 97 0 1 0 114 46 85 0 1 0 36 111 74 0 1 0 60 67 64 0 1 0 33 3 52 0 1 0 37 119 117 0 1 0 63 43 62 0 1 0 90 33 27 0 1 0 79 13 23 0 1 0 30 38 104 0 1 0 14 11 92 0 1 0 23 25 63 0 1 0 75 19 113 0 1 0 51 116 122 0 1 0 82 87 70 0 1 0 15 53 55 0 1 0 111 28 9 0 1 0 14 92 16 0 1 0 101 80 90 0 1 0 86 98 18 0 1 0 40 24 91 0 1 0 60 68 7 0 1 0 61 55 5 0 1 0 85 81 94 0 1 0 13 25 23 0 1 0 119 90 27 0 1 0 105 86 99 0 1 0 93 45 110 0 1 0 102 36 74 0 1 0 110 58 115 0 1 0 73 79 108 0 1 0 118 105 99 0 1 0 97 56 107 0 1 0 6 9 123 0 1 0 119 27 72 0 1 0 63 2 43 0 1 0 102 74 6 0 1 0 5 22 63 0 1 0 1 63 62 0 1 0 11 109 49 0 1 0 80 66 3 0 1 0 41 101 119 0 1 0 71 114 85 0 1 0 101 90 119 0 1 0 37 41 119 0 1 0 67 70 35 0 1 0 122 95 17 0 1 0 74 111 9 0 1 0 65 28 111 0 1 0 84 66 80 0 1 0 52 66 98 0 1 0 9 28 123 0 1 0 13 106 25 0 1 0 38 12 59 0 1 0 51 122 120 0 1 0 19 72 51 0 1 0 58 57 54 0 1 0 48 102 50 0 1 0 46 26 76 0 1 0 89 62 37 0 1 0 122 17 46 0 1 0 75 114 71 0 1 0 89 75 71 0 1 0 87 91 14 0 1 0 123 77 21 0 1 0 36 65 111 0 1 0 94 118 112 0 1 0 92 11 49 0 1 0 99 53 15 0 1 0 100 110 115 0 1 0 7 29 82 0 1 0 47 54 24 0 1 0 76 86 105 0 1 0 72 116 51 0 1 0 83 45 93 0 1 0 60 21 88 0 1 0 88 115 68 0 1 0 16 121 56 0 1 0 115 54 47 0 1 0 106 5 25 0 1 0 114 39 46 0 1 0 89 117 75 0 1 0 39 122 46 0 1 0 102 6 50 0 1 0 77 110 100 0 1 0 108 1 96 0 1 0 115 58 54 0 1 0 118 99 112 0 1 0 27 33 95 0 1 0 60 88 68 0 1 0 117 119 19 0 1 0 104 59 103 0 1 0 79 8 13 0 1 0 54 57 4 0 1 0 70 14 35 0 1 0 81 105 118 0 1 0 120 122 39 0 1 0 108 23 1 0 1 0 29 32 82 0 1 0 criticalmass-1.0.0.orig/data/models/Boss1_Eye1.model0000644000175000017500000000637110355351306021477 0ustar danieldanielName Boss1_Eye1 Scale 1.0 1.0 1.0 Offset -4.80000019073 15.6000003815 7.2000002861 Colors 2 1.0 0.0580741949379 0.0 1.0 1.0 1.0 Vertices 33 0.0 0.0 2.53589594364 -0.876737684011 0.0 2.36150157452 -1.80000007153 0.0 1.80000007153 -2.35181307793 0.0 0.97415292263 -2.54558444023 0.0 -1.11271035053e-07 -1.80000007153 1.80000007153 -2.14576729718e-07 -1.66298282146 1.66298353672 0.97415292263 -1.27279222012 1.27279222012 1.80000007153 -0.619947239757 0.619947239757 2.36150157452 7.10906746804e-08 0.876737684011 2.36150157452 1.51728656306e-07 1.80000007153 1.80000007153 2.50850177963e-07 2.35181307793 0.97415292263 1.83152693012e-07 2.54558444023 -2.14576729718e-07 1.80000042915 1.7999997139 -2.14576729718e-07 1.66298317909 1.66298317909 0.97415292263 1.27279257774 1.27279222012 1.80000007153 0.619947239757 0.619947105646 2.36150157452 0.876737684011 -1.39368570018e-07 2.36150157452 1.80000007153 -3.03457312611e-07 1.80000007153 2.35181307793 -4.02578876901e-07 0.97415292263 2.54558444023 -4.10745656154e-07 -2.14576729718e-07 1.7999997139 -1.80000042915 -2.14576729718e-07 1.66298282146 -1.66298353672 0.97415292263 1.2727920413 -1.27279257774 1.80000007153 0.619947105646 -0.619947239757 2.36150157452 -2.07646486672e-07 -0.876737684011 2.36150157452 -4.5518601155e-07 -1.80000007153 1.80000007153 -5.54307490575e-07 -2.35181307793 0.97415292263 -6.38338747194e-07 -2.54558444023 -2.14576729718e-07 -1.80000078678 -1.7999997139 -2.14576729718e-07 -1.66298353672 -1.66298282146 0.97415292263 -1.27279257774 -1.27279186249 1.80000007153 -0.619947418571 -0.619947105646 2.36150157452 Normals 33 0.0 0.0 6.0 -2.39600819349 0.0 5.50065600872 -4.30622255802 0.0 4.17786204815 -5.58177423477 0.0 2.20062875748 -5.88463997841 0.0 1.17044591904 -4.16101562977 4.16101562977 1.17044591904 -3.94677579403 3.94677579403 2.20062875748 -3.04495382309 3.04495382309 4.17786204815 -1.6941434741 1.6941434741 5.50065600872 0.0 2.39600819349 5.50065600872 0.0 4.30622255802 4.17786204815 0.0 5.58177423477 2.20062875748 0.0 5.88463997841 1.17044591904 4.16101562977 4.16101562977 1.17044591904 3.94677579403 3.94677579403 2.20062875748 3.04495382309 3.04495382309 4.17786204815 1.6941434741 1.6941434741 5.50065600872 2.39600819349 0.0 5.50065600872 4.30622255802 0.0 4.17786204815 5.58177423477 0.0 2.20062875748 5.88463997841 0.0 1.17044591904 4.16101562977 -4.16101562977 1.17044591904 3.94677579403 -3.94677579403 2.20062875748 3.04495382309 -3.04495382309 4.17786204815 1.6941434741 -1.6941434741 5.50065600872 0.0 -2.39600819349 5.50065600872 0.0 -4.30622255802 4.17786204815 0.0 -5.58177423477 2.20062875748 0.0 -5.88463997841 1.17044591904 -4.16101562977 -4.16101562977 1.17044591904 -3.94677579403 -3.94677579403 2.20062875748 -3.04495382309 -3.04495382309 4.17786204815 -1.6941434741 -1.6941434741 5.50065600872 Faces 32 4 5 6 3 1 0 3 6 7 2 1 0 2 7 8 1 1 0 8 0 1 0 1 1 0 8 9 0 1 1 8 7 10 9 1 0 7 6 11 10 1 0 6 5 12 11 1 0 12 13 14 11 1 0 11 14 15 10 1 0 10 15 16 9 1 0 16 0 9 0 1 1 0 16 17 0 1 1 16 15 18 17 1 0 15 14 19 18 1 0 14 13 20 19 1 0 20 21 22 19 1 0 19 22 23 18 1 0 18 23 24 17 1 0 24 0 17 0 1 1 0 24 25 0 1 1 24 23 26 25 1 0 23 22 27 26 1 0 22 21 28 27 1 0 28 29 30 27 1 0 27 30 31 26 1 0 26 31 32 25 1 0 32 0 25 0 1 1 0 32 1 0 1 1 32 31 2 1 1 0 31 30 3 2 1 0 30 29 4 3 1 0 criticalmass-1.0.0.orig/data/models/Bug1Blue.model0000644000175000017500000001534107630537344021242 0ustar danieldanielName Bug1Blue Scale 1.0 1.0 1.0 Colors 3 0.2 0.2 1.0 1.0 1.0 0.375939846039 1.0 0.0 0.0 Vertices 62 0.0 0.0 1.61801259761 0.572463219078 -0.235961775888 1.49484867425 0.841772488608 0.407828909075 -1.08481821989 1.49377448027 0.621773510131 -1.36388266014e-07 1.3800675829 0.574443781282 0.61918663389 1.05625810782 0.439660293703 1.1441076312 0.571642775463 0.237942423336 1.49484867425 0.235961775888 0.572463219078 1.49484867425 0.43600048507 1.0577739952 1.1441076312 0.569662042773 1.38204821329 0.61918663389 0.616597780018 1.49591823104 -1.36388266014e-07 0.569662042773 1.38204821329 -0.619186770278 -0.574443781282 1.3800675829 -0.619186770278 -0.621773441937 1.49377434388 -1.36388266014e-07 -0.574443781282 1.3800675829 0.61918663389 -0.439660259606 1.05625803962 1.1441076312 -0.237942423336 0.571642775463 1.49484867425 -0.572463219078 0.235961775888 1.49484867425 -1.05777392701 0.436000450973 1.1441076312 -1.38204821329 0.569662042773 0.61918663389 -1.49591823104 0.616597780018 -1.36388266014e-07 -0.905150274583 0.406889159825 -1.09786832654 -0.903763887859 -0.393984920424 -1.09786832654 -1.49377434388 -0.621773441937 -1.36388266014e-07 -1.3800675829 -0.574443781282 0.61918663389 -1.05625803962 -0.439660259606 1.1441076312 -0.571642775463 -0.237942423336 1.49484867425 -0.235961775888 -0.572463219078 1.49484867425 -0.628332831009 -1.09215447652 1.13620747728 -0.569662042773 -1.38204821329 0.61918663389 -0.30700497453 -2.61106333659 -0.154796794861 -0.283537088858 -2.55412832772 -0.464390111806 0.288515806121 -2.55313787613 -0.464390111806 0.312180636448 -2.60999132482 -0.154796794861 0.574443781282 -1.3800675829 0.61918663389 0.618001078887 -1.03782618838 1.11936830002 0.237942423336 -0.571642775463 1.49484867425 1.05777392701 -0.436000450973 1.1441076312 1.38204821329 -0.569662042773 0.61918663389 1.49591823104 -0.616597780018 -1.36388266014e-07 0.843158943526 -0.393045137077 -1.08481821989 -2.00937940888 0.286819818033 3.36007850645 -2.00937940888 -0.285234048713 3.36007850645 -2.58143325857 -0.285234014616 3.36007850645 -2.58143325857 0.286819886227 3.36007850645 -2.86745991065 0.572846811076 2.21597080706 -2.86746018342 -0.571260922416 2.21597080706 -1.72335248403 -0.57126099061 2.21597080706 -1.72335248403 0.572846674687 2.21597080706 1.70897088693 0.572846811076 2.21597080706 1.70897061415 -0.571260922416 2.21597080706 2.85307831355 -0.57126099061 2.21597080706 2.85307831355 0.572846674687 2.21597080706 1.994997539 0.286819886227 3.36007850645 1.994997539 -0.285234014616 3.36007850645 2.5670513887 -0.285234048713 3.36007850645 2.5670513887 0.286819818033 3.36007850645 -0.502831246873 -1.21991107015 0.881647166642 0.0023908692547 -1.38105789809 0.61918663389 0.507052020444 -1.21816284536 0.881647166642 0.00864195691307 -1.17409620577 0.946065526893 0.00959069926426 -1.23861822111 0.797853762098 Normals 62 0.0 0.0 1.14410769939 0.44563880515 -0.166167433453 1.04054549763 0.549375617989 0.287292642054 -0.96152950127 1.05824814901 0.403075641616 -0.162850385581 0.932967888931 0.659956018949 0.0541554330583 0.745047430621 0.747212253374 0.442147163249 0.446337113072 0.185790499808 1.03691416005 0.184219255838 0.446965624299 1.03691416005 0.318088976132 0.771758526967 0.782373148352 0.405589618329 0.9840156983 0.419626050823 0.460443376358 1.04480531234 -0.0727659103053 0.370568419032 0.853009176874 -0.666345741018 -0.367041861735 0.861912875656 -0.656743734314 -0.461525787734 1.04491005853 -0.0638272918651 -0.409011429438 0.982619082456 0.419626050823 -0.320777529826 0.770641234292 0.782373148352 -0.185790499808 0.446337113072 1.03691416005 -0.446965624299 0.184219255838 1.03691416005 -0.748015375678 0.745885468322 0.439388744665 -0.934259758587 0.658349910729 0.0518160290634 -1.06041297176 0.405100802784 -0.142598833571 -0.566310096553 0.294520367726 -0.949448433249 -0.585723636435 -0.201642566996 -0.961878655231 -1.09686573639 -0.317076395548 -0.0725913248006 -0.954092317318 -0.61690403987 0.134498214472 -0.180134018106 -0.754754251708 0.840718548282 -0.443962797943 -0.153108683195 1.04326896672 -0.145776228383 -0.462468537526 1.03625076752 -0.556847717337 -0.830627726033 0.555800221357 -0.480590173655 -0.763692865886 0.703357220184 -0.495045590902 -1.00335944149 0.239038098471 -0.413690228904 -0.755696967402 -0.752798921332 0.412014255794 -0.745641060549 -0.76365795049 0.497524652219 -1.0049307025 0.226956996352 0.483488253822 -0.762400928036 0.702798573846 0.532580801009 -0.793895570036 0.628531207742 0.158101738274 -0.477866704565 1.02741689953 0.759607628154 -0.733350431957 0.44057590223 0.956641209428 -0.613133040703 0.133555464681 1.09686573639 -0.311245353914 -0.0946236131565 0.570919065227 -0.194100602759 -0.972283784239 -0.575912137354 -0.575912137354 -0.803497644934 -0.575912137354 0.575912137354 -0.803497644934 0.575912137354 0.575912137354 -0.803497644934 0.575912137354 -0.575912137354 -0.803497644934 0.847701832084 -0.754265436162 0.146334891769 0.847946239857 0.754090790988 0.145741312987 -0.676192223689 0.847981155253 -0.364143781567 -0.676262054481 -0.848923939142 -0.361839297231 0.679090269759 -0.847178101143 -0.360687055062 0.678985523571 0.84773674748 -0.359499897498 -0.847911324461 0.754474928539 0.144135153621 -0.847876409065 -0.754544759331 0.143785982612 0.575912137354 -0.575912137354 -0.803497644934 0.575912137354 0.575912137354 -0.803497644934 -0.575912137354 0.575912137354 -0.803497644934 -0.575912137354 -0.575912137354 -0.803497644934 -0.334394943469 -0.945433026309 0.550667521742 0.00157124077349 -0.793197262114 0.824482411737 0.323920017766 -0.908631107714 0.615123286475 0.0222068695986 -0.912436954083 0.689844552728 0.00558663386128 -0.969455568961 0.607476610146 Faces 73 40 2 3 39 0 0 39 3 4 38 0 0 37 5 6 1 0 0 6 0 1 0 0 0 7 0 6 0 0 0 5 8 7 6 0 0 4 9 8 5 0 0 3 10 9 4 0 0 2 11 10 3 0 0 11 12 13 10 0 0 10 13 14 9 0 0 9 14 15 8 0 0 8 15 16 7 0 0 16 0 7 0 0 0 17 0 16 0 0 0 15 18 17 16 0 0 14 19 18 15 0 0 13 20 19 14 0 0 12 21 20 13 0 0 21 22 23 20 0 0 20 23 24 19 0 0 18 25 26 17 0 0 26 0 17 0 0 0 27 0 26 0 0 0 25 28 27 26 0 0 24 29 57 0 1 1 23 30 29 24 0 0 22 31 30 23 0 0 31 32 33 30 0 1 33 34 58 0 0 0 29 58 61 57 0 0 28 60 27 0 0 0 36 0 27 0 0 0 1 0 36 0 0 0 35 37 1 36 0 0 37 35 59 0 1 1 33 39 38 34 0 0 32 40 39 33 0 0 41 44 45 48 0 0 44 43 46 45 0 0 43 42 47 46 0 0 42 41 48 47 0 0 56 53 49 52 0 0 53 54 50 49 0 0 54 55 51 50 0 0 55 56 52 51 0 0 18 48 47 25 0 0 18 19 45 48 0 0 24 46 47 25 0 0 19 24 46 45 0 0 5 37 50 49 0 0 37 38 51 50 0 0 4 5 49 52 0 0 4 52 51 38 0 0 41 42 43 44 0 0 53 56 55 54 0 0 12 11 2 0 0 0 21 12 2 0 0 0 21 2 40 0 0 0 22 21 40 0 0 0 22 40 32 0 0 0 31 22 32 0 0 0 59 34 38 0 1 1 59 38 37 0 1 1 60 35 36 0 0 0 60 36 27 0 0 2 34 59 61 58 0 0 35 60 61 59 0 0 28 57 61 60 0 0 58 29 30 0 0 0 58 30 33 0 0 0 57 28 25 0 1 1 57 25 24 0 1 1 criticalmass-1.0.0.orig/data/models/MouseBug.model0000644000175000017500000003526207630537344021366 0ustar danieldanielName MouseBug Scale 1.0 1.0 1.0 Colors 4 1.0 1.0 1.0 1.0 0.0 0.0 1.0 1.0 0.0 0.646616518497 0.142857149243 1.0 Vertices 140 0.0 1.30465587923 1.10194602561 0.921795849204 1.94038935158 -0.285204471542 0.954313209952 1.96175710144 9.28871060069e-08 0.92179566343 1.94038935158 0.285204657316 0.826459495986 1.87774220025 0.550972966362 0.674801371146 1.77808473886 0.779193474102 0.477156604976 1.6482088726 0.954313209952 0.246994454837 1.4969650707 1.06439808497 0.142602328658 1.61578031193 1.06439808497 0.275486506403 1.87774220025 0.954313209952 0.389596806717 2.10269396429 0.779193474102 0.477156697863 2.27530551606 0.550972966362 0.532199042487 2.38381363246 0.285204657316 0.550973012805 2.42082375675 9.28871060069e-08 0.532199135375 2.38381363246 -0.285204471542 1.39619044376e-07 2.54611824517 -0.285204471542 1.15673713376e-07 2.5888537449 9.28871060069e-08 1.05619999801e-07 2.5461180594 0.285204657316 1.15786547306e-07 2.42082375675 0.550972966362 1.26886150582e-07 2.22150901975 0.779193474102 5.7836856688e-08 1.96175710144 0.954313209952 3.5954692442e-08 1.65926968341 1.06439808497 -0.142602258993 1.61578031193 1.06439808497 -0.275486367072 1.87774220025 0.954313209952 -0.389596551277 2.10269396429 0.779193474102 -0.477156465645 2.27530551606 0.550972966362 -0.53219881027 2.38381363246 0.285204657316 -0.550972734144 2.42082375675 9.28871060069e-08 -0.532198856713 2.38381381823 -0.285204471542 -0.92179566343 1.94038953735 -0.285204471542 -0.954312838404 1.96175728722 9.28871060069e-08 -0.921795477656 1.94038953735 0.285204657316 -0.826459310212 1.87774238603 0.550972966362 -0.674801138928 1.77808492464 0.779193474102 -0.477156419202 1.6482088726 0.954313209952 -0.246994385171 1.49696516358 1.06439808497 -0.285204564429 1.30465615789 1.06439808497 -0.550972827031 1.30465634366 0.954313209952 -0.779193334772 1.30465662232 0.779193474102 -0.954313024178 1.30465652944 0.550972966362 -1.06439780631 1.30465662232 0.285204657316 -1.10194574695 1.30465671521 9.28871060069e-08 -1.06439799209 1.3046568081 -0.285204471542 -0.921795849204 -0.185500380825 -0.285204471542 -0.954313024178 -0.238067051857 9.28871060069e-08 -0.92179566343 -0.185500195051 0.285204657316 -0.826459495986 -0.0313816301031 0.550972966362 -0.674801324702 0.213785990798 0.779193474102 -0.477156512089 0.533294413685 0.954313209952 -0.246994431615 0.905369693378 1.06439808497 -0.14260235188 0.613071758655 1.06439808497 -0.275486552846 -0.0313818158773 0.954313209952 -0.389596899604 -0.584786938223 0.779193474102 -0.477156697863 -1.00942963204 0.550972966362 -0.281700189359 -1.74814518108 0.285204657316 -0.550973105692 -1.36741951098 9.28871060069e-08 -0.532199321149 -1.27637119813 -0.285204471542 -4.12058086037e-07 -1.37208132906 0.515043490661 -3.01560737174e-07 -1.31903331704 0.587263308469 -3.46659362879e-07 -0.87708519805 0.779193474102 -2.1416701584e-07 -0.238067702066 0.954313209952 -1.02508883767e-07 0.506083228867 1.06439808497 0.142602166106 0.613071526437 1.06439808497 0.275486158076 -0.0313821874257 0.954313209952 0.389596272616 -0.584787681319 0.779193474102 0.477156140541 -1.00943037514 0.550972966362 0.281699446262 -1.74814629573 0.285204657316 0.550972316152 -1.36742025408 9.28871060069e-08 0.532198438721 -1.276372127 -0.285204471542 0.921795106107 -0.18550214568 -0.285204471542 0.954312466855 -0.238068723825 9.28871060069e-08 0.921795106107 -0.185502052793 0.285204657316 0.826458938663 -0.0313831162968 0.550972966362 0.67480090671 0.213784504604 0.779193474102 0.477156233428 0.533293577701 0.954313209952 0.246994292284 0.905369321829 1.06439808497 0.285204517985 1.30465550768 1.06439808497 0.5509726877 1.30465522902 0.954313209952 0.779193148998 1.30465467169 0.779193474102 0.95431265263 1.30465457881 0.550972966362 1.06439743477 1.30465430015 0.285204657316 1.1019453754 1.30465448592 9.28871060069e-08 1.06439762054 1.30465430015 -0.285204471542 -1.04776971392 1.30465662232 1.08438088809 -1.03522187343 1.30465634366 1.3717726652 -0.987773560601 1.6482088726 1.42831936295 -0.980667696991 1.77808492464 1.1643499056 -1.71835610041 1.77808492464 1.19345106437 -1.8564946463 1.6482088726 1.41850240338 -1.86931288116 1.30465634366 1.34580737514 -1.73648357647 1.30465662232 1.09064491586 -2.51567709702 2.08385014287 -0.467742125234 -2.6485064017 2.08384977132 -0.212579665952 -2.63568816685 2.42740239315 -0.139884637711 -2.49754962096 2.55727844518 -0.364935976725 1.04776962103 1.30465467169 1.08438098098 1.03522178054 1.30465513613 1.37177285098 0.987773653488 1.6482088726 1.42831927007 0.980667882765 1.77808473886 1.16434971983 1.71835610041 1.77808473886 1.19345087859 1.85649483208 1.6482088726 1.41850221761 1.86931269538 1.30465513613 1.34580756091 1.73648357647 1.30465467169 1.09064510163 2.51567709702 2.08384828513 -0.46774193946 2.64850621593 2.08384865668 -0.212579480178 2.63568835262 2.42740239315 -0.139884823485 2.49754962096 2.55727825941 -0.364936162499 -1.00868727829 0.0977868079616 1.09261514426 -0.903568983941 0.262565840292 1.33485579957 -0.720794003693 -0.0286528855899 1.42008519967 -0.750204383632 -0.314058736378 1.21314768231 0.903568798167 0.262565468743 1.33485570668 1.00868690674 0.0977859719777 1.09261514426 0.750203779866 -0.314059107926 1.2131477752 0.720793632144 -0.0286530713641 1.42008519967 1.58267126031 -0.0286530713641 1.46557898201 1.52187042599 -0.314059107926 1.26560075241 1.70519641256 0.0977859719777 1.04712136192 1.71230227616 0.262565468743 1.31109072638 -1.52187089043 -0.314058736378 1.26560056664 -1.58267163186 -0.0286528855899 1.46557898201 -1.71230246194 0.262565840292 1.31109091216 -1.7051967841 0.0977868079616 1.04712136192 2.48028506611 -0.516628051803 -0.372788072122 2.22980458141 -0.681407548568 -0.456393596614 2.37240691007 -1.09325262847 -0.209399234664 2.58112015023 -0.80784659191 -0.198136649839 -2.22980476718 -0.681406805471 -0.456393735945 -2.48028543766 -0.516627680254 -0.372788002457 -2.58112033601 -0.807846406136 -0.198136835613 -2.37240709584 -1.09325225692 -0.209399490104 0.106439369606 -2.93445081193 -0.456234666776 0.110194145092 -2.95266040019 -0.399193763179 0.106439369606 -2.93445044038 -0.342152859581 -3.98227768772e-07 -2.96326996544 -0.342152859581 -4.01482966759e-07 -2.98429663385 -0.399193763179 -4.13071841874e-07 -2.96326996544 -0.456234666776 -0.106440182368 -2.93445044038 -0.456234666776 -0.110194934632 -2.95266002865 -0.399193763179 -0.106440159146 -2.93445044038 -0.342152859581 Normals 140 0.0 0.0153617668326 0.779027066852 0.688925320049 0.348588449834 -0.104821473604 0.693586162811 0.355056573795 0.0 0.669830099676 0.342191686392 0.203341276941 0.600702168522 0.305023816572 0.3914396869 0.489246094041 0.457595184217 0.397931566739 0.0212116037379 0.289186448889 0.723215802764 0.190357494042 0.0893170249201 0.750277253567 0.107223232283 0.160965633469 0.754795421734 0.206813141524 0.314535734889 0.682219381875 0.291826021781 0.448059440358 0.566744546752 0.36019299854 0.557303965733 0.408394695464 0.405065528698 0.630094017484 0.214517801863 0.420783977663 0.655800013192 0.0 0.419809034599 0.646858793255 -0.111574935145 0.0 0.770585207997 -0.115451044413 0.0 0.779193520546 0.0 0.0 0.747304773288 0.220605437016 0.0 0.657868841261 0.417526148194 0.0 0.525843288703 0.574972393715 0.0 0.367517193292 0.68707045743 0.0 0.192331228936 0.755080770923 -0.107223232283 0.160965633469 0.754795421734 -0.206813141524 0.314535734889 0.682219381875 -0.291826021781 0.448059440358 0.566744546752 -0.36019299854 0.557303965733 0.408394695464 -0.405065528698 0.630094017484 0.214517801863 -0.420783977663 0.655800013192 0.0 -0.419809034599 0.646858793255 -0.111574935145 -0.688925320049 0.348588449834 -0.104821473604 -0.693586162811 0.355056573795 0.0 -0.669830099676 0.342191686392 0.203341276941 -0.600702168522 0.305023816572 0.3914396869 -0.489246094041 0.457595184217 0.397931566739 -0.0212116037379 0.289186448889 0.723215802764 -0.190357494042 0.0893170249201 0.750277253567 -0.204672952937 0.0145294736896 0.75168026686 -0.134260892375 -0.239557959573 0.729184542422 -0.665026582319 0.282480533936 0.291635765766 -0.676559816949 0.0419476109794 0.384234410865 -0.752013174248 0.0466322357429 0.198537759585 -0.777695390857 0.0482017056323 0.0 -0.771013278225 0.0490577793258 -0.101325829922 -0.754153386057 -0.158397409486 -0.115165695223 -0.756983145298 -0.183152206396 0.0235658071206 -0.722645104385 -0.178586480031 0.230212494951 -0.641222960985 -0.146911756276 0.417573706393 -0.759456264495 0.0264907262989 0.172189716589 -0.0969979061594 -0.0912669691039 0.767707844114 -0.192093426333 -0.0316271684597 0.754462514346 -0.116473580509 -0.0674395860873 0.767470053123 0.159847980977 -0.116211998807 0.75370153673 -0.135164521364 -0.206503990014 0.739053193669 -0.490815607471 -0.293300349149 0.529315130064 -0.430272163324 -0.352155430814 0.545842114844 -0.734630141899 -0.249830832284 0.0708400959566 -0.735985596993 -0.225646768586 -0.120468596883 0.0 -0.353986467891 0.694133082091 0.0 -0.338743600908 0.701695067835 0.0 -0.284430489731 0.725403572772 0.0 -0.178420026337 0.758481274987 0.0 -0.0911005096045 0.773843037466 0.116473580509 -0.0674395860873 0.767470053123 -0.159847980977 -0.116211998807 0.75370153673 0.135164521364 -0.206503990014 0.739053193669 0.490815607471 -0.293300349149 0.529315130064 0.430272163324 -0.352155430814 0.545842114844 0.734630141899 -0.249830832284 0.0708400959566 0.735985596993 -0.225646768586 -0.120468596883 0.754153386057 -0.158397409486 -0.115165695223 0.756983145298 -0.183152206396 0.0235658071206 0.722645104385 -0.178586480031 0.230212494951 0.641222960985 -0.146911756276 0.417573706393 0.759456264495 0.0264907262989 0.172189716589 0.0969979061594 -0.0912669691039 0.767707844114 0.192093426333 -0.0316271684597 0.754462514346 0.204672952937 0.0145294736896 0.75168026686 0.134260892375 -0.239557959573 0.729184542422 0.665026582319 0.282480533936 0.291635765766 0.676559816949 0.0419476109794 0.384234410865 0.752013174248 0.0466322357429 0.198537759585 0.777695390857 0.0482017056323 0.0 0.771013278225 0.0490577793258 -0.101325829922 0.177896874545 -0.655752454994 0.381357046982 0.183461346296 -0.5494328517 0.5211110622 0.248451621312 0.303763477875 0.673135487343 -0.307568249845 -0.417763985629 -0.581369157157 -0.228595446544 0.458308557191 0.58719522222 -0.335771120629 0.270947322528 0.648832504927 -0.382046664079 -0.534094868321 0.419381010814 0.325022642713 0.663480894432 -0.247524190002 -0.756578900613 -0.184436324193 -0.026134028201 -0.71123076525 -0.305000037473 -0.0907913697048 -0.621461925836 0.442376096334 0.158777886683 0.721218311993 -0.267404120648 -0.124368485251 -0.177896874545 -0.655752454994 0.381357046982 -0.183461346296 -0.5494328517 0.5211110622 -0.248451621312 0.303763477875 0.673135487343 -0.307568249845 0.417763985629 0.581369157157 -0.228595446544 -0.458308557191 -0.58719522222 0.335771120629 0.270947322528 0.648832504927 0.382046664079 -0.534094868321 0.419381010814 -0.325022642713 0.663480894432 -0.247524190002 0.756578900613 -0.184436324193 -0.0261102491018 0.71123076525 -0.305000037473 -0.0907913697048 0.621461925836 0.442376096334 0.158777886683 0.721218311993 0.267404120648 0.124368485251 -0.327139052202 0.211022158181 -0.674942745321 -0.325593364314 0.107056766978 -0.699745135262 0.311159009924 -0.0609476888322 0.711753951875 -0.394150597089 0.0931693550893 -0.665644838897 -0.325593364314 -0.107056766978 0.699745135262 0.327139052202 0.211022158181 -0.674942745321 0.394150597089 0.0931693550893 -0.665644838897 -0.311159009924 -0.0609476888322 0.711753951875 0.299411763402 -0.0434457406687 0.718055598921 0.345639748654 -0.169740388101 0.67736830632 -0.355104131994 0.401688803733 -0.565365312558 -0.392129327218 0.199251155781 -0.643149160903 -0.345639748654 -0.169740388101 0.67736830632 -0.299411763402 -0.0434457406687 0.718055598921 -0.392129327218 -0.199251155781 0.643149160903 0.355104131994 0.401688803733 -0.565365312558 0.673064150045 -0.386208145759 0.0701504846653 -0.696035456466 0.349492078823 0.0222341369308 -0.730682672111 0.229356400938 -0.143606356998 0.731752778016 -0.266762084971 -0.0224957142781 0.696035456466 0.349492078823 0.0222341369308 0.673064150045 0.386208145759 -0.0701504846653 -0.731752778016 -0.266762084971 -0.0224957142781 0.730682672111 0.229356400938 -0.143606356998 0.566364081166 -0.495714241224 -0.201486460765 0.517401429847 -0.581987413735 0.0263718249978 0.405065528698 -0.476286113462 0.464966937168 0.0 -0.61016652864 0.48456147218 0.0 -0.779193520546 0.0 0.0 -0.734725258295 -0.259437890219 -0.566364081166 -0.495714241224 -0.201486460765 -0.517401429847 -0.581987413735 0.0263718249978 -0.405065528698 -0.476286113462 0.464966937168 Faces 132 82 1 2 81 0 0 81 2 3 80 0 0 80 3 4 79 0 0 79 4 5 78 0 0 77 6 7 76 0 0 6 9 8 7 0 0 5 10 9 6 0 0 4 11 10 5 0 0 3 12 11 4 0 0 2 13 12 3 0 0 1 14 13 2 0 0 14 15 16 13 0 0 13 16 17 12 0 0 12 17 18 11 0 0 11 18 19 10 0 0 10 19 20 9 0 0 9 20 21 8 0 0 20 23 22 21 0 0 19 24 23 20 0 0 18 25 24 19 0 0 17 26 25 18 0 0 16 27 26 17 0 0 15 28 27 16 0 0 28 29 30 27 0 0 27 30 31 26 0 0 26 31 32 25 0 0 25 32 33 24 0 0 24 33 34 23 0 0 23 34 35 22 0 0 34 37 36 35 0 0 32 39 38 33 0 0 31 40 39 32 0 0 30 41 40 31 0 0 29 42 41 30 0 0 42 43 44 41 0 0 41 44 45 40 0 0 40 45 46 39 0 0 39 46 47 38 0 0 38 47 48 37 0 0 37 48 49 36 0 0 48 51 50 49 0 0 46 53 52 47 0 0 45 54 53 46 0 0 44 55 54 45 0 0 43 56 55 44 0 0 54 57 58 53 1 1 53 58 59 52 0 0 52 59 60 51 0 0 51 60 61 50 0 0 60 63 62 61 0 0 59 64 63 60 0 0 58 65 64 59 0 0 57 66 65 58 1 1 68 69 70 67 0 0 67 70 71 66 0 0 66 71 72 65 0 0 65 72 73 64 0 0 63 74 75 62 0 0 74 77 76 75 0 0 73 78 77 74 0 0 72 79 78 73 0 0 71 80 79 72 0 0 70 81 80 71 0 0 69 82 81 70 0 0 38 37 84 83 0 3 33 38 83 86 0 3 37 34 85 84 0 3 34 33 86 85 0 3 85 86 87 88 0 3 84 85 88 89 0 3 86 83 90 87 0 3 83 84 89 90 0 3 90 89 92 91 0 3 87 90 91 94 0 3 89 88 93 92 0 3 88 87 94 93 0 3 94 91 92 93 0 3 77 78 95 96 0 3 6 77 96 97 0 3 5 6 97 98 0 3 78 5 98 95 0 3 95 98 99 102 0 3 98 97 100 99 0 3 97 96 101 100 0 3 96 95 102 101 0 3 101 102 103 104 0 3 100 101 104 105 0 3 99 100 105 106 0 3 102 99 106 103 0 3 103 106 105 104 0 3 48 47 107 108 0 3 51 48 108 109 0 3 47 52 110 107 0 3 52 51 109 110 0 3 74 63 114 111 0 3 73 74 111 112 0 3 64 73 112 113 0 3 63 64 113 114 0 3 114 113 116 115 0 3 113 112 117 116 0 3 112 111 118 117 0 3 111 114 115 118 0 3 110 109 120 119 0 3 107 110 119 122 0 3 109 108 121 120 0 3 108 107 122 121 0 3 118 115 126 123 0 3 117 118 123 124 0 3 116 117 124 125 0 3 115 116 125 126 0 3 125 124 123 126 0 3 121 122 127 128 0 3 120 121 128 129 0 3 122 119 130 127 0 3 119 120 129 130 0 3 127 130 129 128 0 3 68 67 132 131 0 0 67 66 133 132 0 0 66 57 134 133 1 0 57 54 139 134 1 0 55 56 137 138 0 0 54 55 138 139 0 0 137 136 135 138 1 2 138 135 134 139 1 2 135 132 133 134 1 2 136 131 132 135 1 2 8 0 76 7 0 0 22 0 8 21 0 0 36 0 22 35 0 0 50 0 36 49 0 0 62 0 50 61 0 0 76 0 62 75 0 0 criticalmass-1.0.0.orig/data/models/ShieldBoost.model0000644000175000017500000005320207630537344022051 0ustar danieldanielName ShieldBoost Scale 1.0 1.0 1.0 Colors 2 1.0 1.0 0.0 1.0 0.165413528681 0.0 Vertices 208 -0.0097790707856 -1.44009633287 1.1653225154 -0.0251155748068 -1.43362180526 1.24898665587 -0.0333205820877 -1.42807221016 1.32069912434 -0.035491079519 -1.42344741935 1.38045902318 -0.0327242703815 -1.41974756106 1.42826686531 -0.0261174080465 -1.41697263528 1.46412303543 -0.0167675785834 -1.41512289848 1.48802727707 -0.00577209146456 -1.41419783773 1.49997933377 0.00577210799438 -1.41419796596 1.49997907731 0.0167676807677 -1.41512277024 1.48802702061 0.0261174381007 -1.41697263528 1.46412316366 0.0327243284864 -1.41974768929 1.42826699354 0.0354911035624 -1.42344741935 1.38045902318 0.0333205199757 -1.42807208193 1.32069886788 0.0251155968465 -1.43362167703 1.24898665587 0.00977903472054 -1.44009633287 1.1653225154 -0.23253509366 -1.17510438523 1.27644662381 -0.228956349847 -1.16968904833 1.36425943221 -0.213619691548 -1.16504745921 1.43952788343 -0.188334494754 -1.16117923319 1.50225095162 -0.154909141667 -1.15808475496 1.55242966264 -0.115152952176 -1.15576415275 1.59006376002 -0.0708745889889 -1.15421678541 1.61515324376 -0.0238832217247 -1.15344316585 1.62769772916 0.0240122264406 -1.15344316585 1.6276978574 0.0710032450758 -1.15421678541 1.61515298729 0.115280133603 -1.15576402452 1.59006376002 0.155034616014 -1.15808475496 1.55242979087 0.188457452562 -1.16117936142 1.50225107985 0.213739796208 -1.16504733098 1.4395273705 0.2290727358 -1.1696889201 1.36425943221 0.232647328124 -1.17510438523 1.27644675204 -0.46803643423 -0.89240805207 1.36534606442 -0.442282776364 -0.887391258111 1.45647775586 -0.400790967934 -0.883091149004 1.53459089069 -0.345982753604 -0.879507596516 1.59968508424 -0.280279685691 -0.876640857111 1.65176008003 -0.206103268426 -0.874490802558 1.69081651921 -0.1258751503 -0.873057432855 1.71685427357 -0.0420171521148 -0.872340876235 1.72987308663 0.0430492499498 -0.872340748004 1.72987321487 0.126902756032 -0.873057496971 1.71685414534 0.207121024389 -0.874490674326 1.69081651921 0.28128303166 -0.876640921227 1.65176020826 0.346966993106 -0.879507596516 1.59968495601 0.401751388468 -0.883091149004 1.53459076246 0.443214248678 -0.887391258111 1.45647788409 0.468934374053 -0.89240805207 1.36534606442 -0.710761590077 -0.582905346017 1.43202070899 -0.660321479512 -0.577286121313 1.52564124213 -0.590780736691 -0.572469688793 1.60588814614 -0.505079417279 -0.568455984341 1.67276001049 -0.406157160184 -0.56524494384 1.72625760455 -0.296953796665 -0.562836759637 1.76638080009 -0.180408741228 -0.561231175271 1.79312972535 -0.0594624502586 -0.56042851132 1.8065042521 0.0629456457088 -0.560428639551 1.8065042521 0.183876196284 -0.561231239387 1.79312972535 0.300388472589 -0.562836759637 1.76638080009 0.409543364669 -0.565245007955 1.72625747632 0.508401025236 -0.568456112572 1.67276013872 0.594021719206 -0.572469688793 1.60588788968 0.663465262685 -0.577286185429 1.52564149859 0.713792209109 -0.582905346017 1.43202070899 -0.955192094257 -0.237490721279 1.47647042929 -0.878301132136 -0.229928439431 1.57175066042 -0.779537304838 -0.223446458374 1.65341977801 -0.662268992694 -0.218044842222 1.72147688445 -0.529864031054 -0.213723558917 1.77592287736 -0.385690223207 -0.210482560374 1.81675711557 -0.233115196126 -0.208321958794 1.84398024026 -0.0755078270386 -0.207241641975 1.85759173849 0.0837644414153 -0.207241690062 1.85759186672 0.241333974249 -0.208321926736 1.8439799838 0.393831886219 -0.210482592432 1.81675724381 0.537890702629 -0.213723558917 1.77592300559 0.670142524015 -0.218044794135 1.72147688445 0.787219579144 -0.223446426316 1.65341952155 0.885753231221 -0.229928439431 1.57175053219 0.962375933419 -0.237490657163 1.47647030106 -1.1958063061 0.152937985834 1.4986950971 -1.09144832332 0.164123764226 1.5948051131 -0.963007280327 0.173711716246 1.67718527336 -0.814194832686 0.181701649548 1.74583532143 -0.648721481897 0.188093548103 1.8007552573 -0.470297697397 0.192887508084 1.8419452092 -0.282634012739 0.196083449347 1.8694054336 -0.0894418911525 0.197681452036 1.88313541756 0.10556797352 0.197681500123 1.88313528933 0.298685849171 0.196083433318 1.8694050489 0.486199407011 0.192887524113 1.84194533743 0.664398594352 0.188093564132 1.80075538553 0.82957278147 0.181701633519 1.74583544966 0.978011434812 0.17371165213 1.67718514513 1.10600283468 0.164123812312 1.59480524133 1.20983686429 0.152938001863 1.4986950971 -1.42708470076 0.59748505483 1.49869496887 -1.29499105271 0.614314966859 1.5948051131 -1.13713880989 0.628740669856 1.67718527336 -0.957501604458 0.640762035591 1.7458351932 -0.760051786274 0.650379064063 1.8007552573 -0.548762025765 0.657591883504 1.8419452092 -0.327604640725 0.662400429798 1.8694054336 -0.100553503754 0.664804767061 1.88313528933 0.128419476093 0.664804831176 1.88313528933 0.355342069179 0.662400365682 1.86940517714 0.576240138431 0.657591883504 1.84194533743 0.787141870963 0.650379128179 1.80075538553 0.984074468116 0.640761971475 1.74583544966 1.16306551592 0.628740605741 1.67718527336 1.3201413181 0.614315030975 1.5948051131 1.45133003772 0.597484990715 1.49869496887 -1.64350813808 1.10525588724 1.47647017283 -1.48415725581 1.13009019065 1.57175040396 -1.29787907851 1.15137684635 1.65341952155 -1.08883304554 1.16911572609 1.72147701268 -0.86117686511 1.18330657343 1.77592262089 -0.619069014842 1.19394964481 1.81675698734 -0.366667427364 1.20104532494 1.84398011203 -0.108131309606 1.20459310089 1.85759161026 0.152381397787 1.20459310089 1.85759173849 0.410712770198 1.20104519671 1.8439799838 0.662702991599 1.19394977304 1.81675711557 0.904194946835 1.18330644519 1.77592262089 1.13102974154 1.16911546963 1.72147675622 1.33904992395 1.15137684635 1.65341926508 1.52409528533 1.13009019065 1.57175040396 1.68200882272 1.10525588724 1.47647030106 -1.83955510561 1.68535181325 1.43202058076 -1.65417416287 1.72089048262 1.52564124213 -1.4411756559 1.75135260223 1.60588827438 -1.20483302169 1.77673714624 1.67276001049 -0.949418222581 1.7970451405 1.72625747632 -0.679203733828 1.81227581561 1.76638080009 -0.398460908664 1.82242994097 1.79312959712 -0.111463785167 1.82750687542 1.80650438033 0.177516275415 1.82750687542 1.8065042521 0.464208088151 1.82242981274 1.79312985358 0.744336909694 1.81227607207 1.76638080009 1.01363185165 1.79704501227 1.72625773278 1.2678206311 1.77673714624 1.67276013872 1.50263115749 1.75135221754 1.60588788968 1.7137899297 1.72089048262 1.52564149859 1.89702556245 1.68535181325 1.43202070899 -2.0097063991 2.34687732075 1.36534632088 -1.8002688759 2.39616072069 1.45647788409 -1.56297566291 2.43840370819 1.53459089069 -1.30214584748 2.47360577034 1.59968495601 -1.02209819636 2.50176742007 1.65176020826 -0.727152181601 2.52288917028 1.69081651921 -0.421625736455 2.53696999514 1.71685414534 -0.109840080113 2.5440109205 1.72987308663 0.203887415176 2.54401066403 1.72987321487 0.51523793456 2.53696999514 1.71685414534 0.819890226793 2.52288891382 1.69081651921 1.11352706389 2.50176767653 1.65176008003 1.39182903792 2.47360602681 1.59968495601 1.65047751036 2.43840370819 1.53459076246 1.88515172685 2.39616020776 1.45647775586 2.09153413883 2.34687732075 1.36534619265 -2.14844153194 3.0989388852 1.27644662381 -1.91767067685 3.16534680863 1.36425930397 -1.6592268616 3.22226740956 1.43952788343 -1.37741519632 3.26970171385 1.50225095162 -1.07653835474 3.30764920858 1.55242979087 -0.760899779997 3.33610912435 1.59006401648 -0.43480111996 3.35508351287 1.61515337199 -0.102548174005 3.36457006598 1.62769772916 0.231557201609 3.36457006598 1.62769772916 0.563212477407 3.35508299995 1.61515311553 0.888112366943 3.33610938081 1.59006376002 1.20195512616 3.30764946504 1.55242979087 1.50043750428 3.26970222678 1.50225107985 1.779256507 3.22226766602 1.4395273705 2.03410779357 3.16534655216 1.36425956044 2.26068869026 3.09893862874 1.27644675204 -2.25024117164 3.95063567289 1.16532264363 -2.00160512895 4.03788759749 1.24898665587 -1.72587573167 4.11267569418 1.32069912434 -1.42728486985 4.17499816773 1.38045889495 -1.11006033013 4.22485681337 1.42826686531 -0.778431437928 4.26225060526 1.46412316366 -0.436626524867 4.28717928692 1.48802727707 -0.0888776252548 4.29964439714 1.49997920554 0.260588275713 4.29964439714 1.49997920554 0.607541788501 4.28717928692 1.48802702061 0.947751792453 4.26225009233 1.46412316366 1.27699032461 4.22485681337 1.42826712177 1.59102780309 4.17499842419 1.38045876672 1.88563567186 4.11267518126 1.32069873965 2.15658281026 4.03788759749 1.24898665587 2.39964143166 3.95063567289 1.16532238716 2.39964143166 4.32618725467 1.08339526815 2.15658281026 4.41343943573 1.16705953687 1.88563567186 4.4882270195 1.23877162064 1.59102780309 4.55055000597 1.29853164771 1.27699032461 4.60040839515 1.34634000276 0.947751792453 4.63780167411 1.38219604465 0.607541788501 4.6627308687 1.4060999016 0.260588307771 4.67519597892 1.41805208653 -0.088877593197 4.67519597892 1.41805208653 -0.43662649281 4.6627308687 1.40610015806 -0.778431437928 4.63780218704 1.38219604465 -1.11006033013 4.60040839515 1.3463397463 -1.42728486985 4.55055000597 1.29853177594 -1.72587573167 4.48822753243 1.23877200533 -2.00160512895 4.41343943573 1.16705953687 -2.25024117164 4.32618725467 1.08339552462 Normals 208 -0.839516094538 -0.672420425195 -0.0109317972265 -0.84319280708 -0.66749621425 0.0230782395911 -0.848773626503 -0.648193232971 0.128325514592 -0.841354418751 -0.619468519521 0.255764662239 -0.80478380783 -0.583193353563 0.411370436584 -0.711518860141 -0.543602510346 0.595996353313 -0.520983851808 -0.508213679276 0.792046462516 -0.197790031907 -0.486547042121 0.938722961049 0.197724361442 -0.486612696557 0.938690133831 0.520918197372 -0.508410642585 0.791947980862 0.711387551269 -0.543865128091 0.595930698877 0.80461967174 -0.583455971308 0.411304782148 0.841157455443 -0.619731137266 0.255699007802 0.848576663194 -0.648455850716 0.128292687374 0.842995843771 -0.667726004777 0.0230782395911 0.839351958448 -0.672650215722 -0.0108989690066 -0.827993356294 -0.683647654361 0.0640806852438 -0.823463071966 -0.676195683507 0.147398713359 -0.809412573812 -0.648193232971 0.285900962095 -0.771430328398 -0.60755185466 0.439110269375 -0.696943126498 -0.557062054458 0.600822082604 -0.572031714718 -0.503387917928 0.759218218574 -0.384713901989 -0.457100129873 0.894470524632 -0.137123473518 -0.430049668661 0.976376934283 0.137057819082 -0.43021383681 0.976311279846 0.384582593117 -0.457559742984 0.894306388541 0.571769096973 -0.504110148784 0.758922773611 0.696549199881 -0.557915626244 0.600493810423 0.770905092908 -0.608438253664 0.438781997194 0.808821683887 -0.649046740642 0.285638344351 0.822839354822 -0.676983536742 0.147201734022 0.827435293586 -0.684337090057 0.0640150308076 -0.793162652047 -0.677705799655 0.261969198805 -0.774581869566 -0.65521844999 0.357400823033 -0.720152674962 -0.601248836439 0.526203539774 -0.635849814274 -0.534180810233 0.683647654361 -0.523445957281 -0.462451126711 0.818013561415 -0.388489160301 -0.396433571484 0.921389676971 -0.238398534914 -0.346173593867 0.990131923357 -0.0802978278777 -0.319287268746 1.0240434655 0.080199338209 -0.319648368145 1.02394498384 0.238267226041 -0.347256924122 0.989803651176 0.388193715338 -0.398107823723 0.92079872293 0.522855067355 -0.464584960003 0.817192880963 0.634897760834 -0.536642915706 0.682597183382 0.718806694904 -0.603776596348 0.525153036737 0.772940444546 -0.657680555462 0.35644880165 0.791455572591 -0.680003769037 0.261214140731 -0.759907654269 -0.609061970808 0.456771857692 -0.726718310927 -0.575183255886 0.545966134164 -0.640577061911 -0.495509161181 0.707940565138 -0.534049469303 -0.412322457966 0.837743360645 -0.416655778986 -0.336029662898 0.933010832754 -0.296012065846 -0.274345428691 0.997058722837 -0.176287546871 -0.231865710137 1.03546772209 -0.0584670586392 -0.210560204439 1.05322776 0.058401404203 -0.211151110393 1.05312927835 0.176189049188 -0.233572789594 1.03510662269 0.29578227532 -0.277135838402 0.996369287142 0.416163338657 -0.339772061934 0.931894707339 0.53309744792 -0.416852742294 0.836101935625 0.638935636891 -0.500499026562 0.705872386282 0.724354687109 -0.580238775703 0.543733819218 0.757150039718 -0.614084663407 0.454605197182 -0.715228399901 -0.495148029724 0.632698273106 -0.671402781435 -0.457822360729 0.704756196751 -0.565170633789 -0.365968983418 0.83885948606 -0.452799636072 -0.282618144113 0.933897231758 -0.342726607736 -0.214302619504 0.996828868195 -0.238562671004 -0.16351735831 1.03605861201 -0.140373464283 -0.130492175102 1.05844748002 -0.04632061928 -0.114570485446 1.06855858377 0.0462549608365 -0.115292708287 1.06846010212 0.140307809847 -0.13269166283 1.05818486228 0.23846418935 -0.167226946157 1.03546772209 0.342463989991 -0.219489480251 0.995778397216 0.45217588687 -0.289216607296 0.932157325083 0.563890308168 -0.373683636132 0.836331726152 0.669071920719 -0.466193557805 0.701473410826 0.712306713375 -0.503814703821 0.629152805321 -0.656630084483 -0.361963966637 0.771266192307 -0.607912954059 -0.327067543839 0.824907533677 -0.494655621452 -0.238726823123 0.924869426204 -0.386946216935 -0.166439076894 0.989770823958 -0.288494408498 -0.111386149117 1.03024800206 -0.199103152688 -0.0724190551019 1.05460656728 -0.116605837083 -0.047863546617 1.0682630747 -0.038409019286 -0.0363736676486 1.07436912961 0.0383761880607 -0.0372272033696 1.07433630239 0.116605837083 -0.0504241457656 1.06813176582 0.199103152688 -0.0767523761214 1.0542782951 0.288494408498 -0.117590685684 1.02955863048 0.386782080845 -0.174547640196 0.988424843901 0.494064699469 -0.248706601973 0.922538629604 0.606402902026 -0.338623077243 0.821362065892 0.654496251192 -0.374110389967 0.767261143469 -0.591958477256 -0.234688947067 0.866927655149 -0.54258480247 -0.204290013436 0.906058853197 -0.432675942282 -0.12960581617 0.97624562541 -0.334585233244 -0.0724518823199 1.0197429717 -0.248017198335 -0.0307928702657 1.0462353702 -0.170739570695 -0.00206817785367 1.06202571091 -0.0998962701487 0.0156262326721 1.07088938038 -0.0328938763393 0.0237348039891 1.07489442921 0.0328938763393 0.02284844105 1.07492725643 0.0999291053812 0.0129014904205 1.07092220759 0.17083805235 -0.00676261329929 1.06199288369 0.248214177673 -0.037555483565 1.04597275246 0.334815023771 -0.0814796397869 1.01898794568 0.432741596718 -0.141030040703 0.97460420039 0.542158048634 -0.218143516223 0.903071512234 0.591039251034 -0.249330335146 0.8634478418 -0.530504033575 -0.127406320428 0.927036086714 -0.482541993282 -0.101668996027 0.955957763473 -0.38136542957 -0.0436287032446 1.00483896587 -0.293878232555 -0.000919190157185 1.03474552329 -0.217716762388 0.0294797414697 1.05299796947 -0.14989364605 0.0501615200064 1.06399540811 -0.0877826580076 0.0627347292297 1.0702327719 -0.0288888335115 0.0683483518271 1.0730888681 0.0289216627332 0.067396338459 1.07315452254 0.0878483204582 0.0599115003147 1.07039690799 0.15005779817 0.0453029434613 1.06419243554 0.218012207351 0.0224545024112 1.05309645113 0.294370640826 -0.0103737174882 1.03454849586 0.381989178772 -0.0558079738291 1.0039854582 0.483100088048 -0.116835635624 0.953955239053 0.530668169666 -0.143492146175 0.924573981242 -0.477584955119 -0.0433004230492 0.962851671619 -0.431953711426 -0.0219292508928 0.984879440231 -0.340756910535 0.0208787478561 1.02003848077 -0.262757068068 0.0517372745616 1.04180356753 -0.194966794978 0.0734695581386 1.05529593886 -0.134464388708 0.0880452837668 1.0636014815 -0.0788533821949 0.0968432507071 1.06839444768 -0.0259671229423 0.100552838554 1.07062676263 0.0259999501604 0.0996008171714 1.07072524428 0.0789190446456 0.0939215401378 1.06865706543 0.134661352017 0.0831210567927 1.06396258089 0.195360737624 0.0663130041969 1.05568986547 0.263413644488 0.0421186071328 1.04206618527 0.341708931917 0.00843685251416 1.01990710779 0.43323400499 -0.0375883107831 0.983861732355 0.47856980372 -0.0600099859762 0.961472928459 -0.434809775574 0.0203206691196 0.983664769046 -0.391771978284 0.0376539692265 1.00106370756 -0.309537296452 0.0681513885185 1.02791720546 -0.23928490186 0.0898836640811 1.04485656292 -0.17796178308 0.10501747646 1.05562421104 -0.123007336958 0.115095736964 1.06238687443 -0.0722220837788 0.121037647771 1.06639192327 -0.0238004604289 0.123401279604 1.06829590191 0.023833287647 0.122416431003 1.06839444768 0.072287738215 0.118115937202 1.06672019545 0.123204308281 0.110138674757 1.0628792827 0.178421380163 0.0978609265257 1.0562479923 0.240039943905 0.0802321734415 1.04544751697 0.310719108361 0.0557094881676 1.02831113208 0.393446230522 0.0218964236748 1.00086674425 0.4363855141 0.00344696308944 0.983139533557 -0.401784568323 0.0677902730906 0.995515779471 -0.361208908563 0.0814796397869 1.00992737702 -0.286196407058 0.102489700523 1.03182377265 -0.221885931288 0.117262405488 1.04597275246 -0.165421401075 0.127439147646 1.0551974572 -0.114537658227 0.134103281295 1.06110654881 -0.0673306760084 0.137878531592 1.06465201659 -0.0222247058737 0.139224479592 1.06639192327 0.0222247058737 0.138272458209 1.06652323214 0.0674291656771 0.134956813009 1.06504594321 0.114767456769 0.12911339187 1.06169743873 0.165913825376 0.120249770494 1.05595254733 0.222706643798 0.107643734052 1.04682626013 0.287542387116 0.0900806354042 1.03261162588 0.363211432982 0.0658205798966 1.01035413086 0.40381991996 0.0508837428478 0.995679915562 -0.394037120448 0.143065376311 0.990624395744 -0.356415974432 0.159315346163 1.00231120596 -0.281994394911 0.16998452865 1.02401063828 -0.218471804433 0.177338049908 1.0381924453 -0.162827970701 0.1822951041 1.04751569582 -0.112699277913 0.185512267646 1.05352320496 -0.0662145185354 0.187317828757 1.0571671544 -0.0217322815735 0.18794156193 1.05890706108 0.0220933929942 0.18744913763 1.05897271551 0.0667069428357 0.185873383074 1.05736411771 0.113552809627 0.183050162174 1.05388436848 0.164206761948 0.178749652344 1.04790962244 0.220671292161 0.172545131806 1.0385535447 0.285375726606 0.163779992084 1.02410911993 0.361570007962 0.151469400605 1.00168748882 0.399191153978 0.133578029776 0.989869305613 0.410451242419 0.211906152438 0.971419832004 0.362029621073 0.215878374059 0.989639515086 0.285900962095 0.22099958037 1.01314450851 0.221065234807 0.224348052789 1.0285081595 0.164502206911 0.226547540517 1.03858637192 0.113716953732 0.227959158982 1.04505352623 0.0667397700538 0.22881269871 1.0489272662 0.0219949073326 0.229206625327 1.05073282731 -0.0219292508928 0.229206625327 1.05073282731 -0.0664771442946 0.22881269871 1.0489272662 -0.113027558108 0.2279919862 1.04511918067 -0.163123431693 0.226613194953 1.03878333523 -0.218635940523 0.224479361662 1.02900056778 -0.281863086039 0.221229370897 1.01422787082 -0.355792257289 0.216337971141 0.991773348378 -0.402539626396 0.212595556076 0.974571373172 Faces 180 16 0 1 17 1 1 2 18 17 1 1 0 3 19 18 2 1 0 4 20 19 3 1 0 5 21 20 4 1 0 6 22 21 5 1 0 7 23 22 6 1 0 8 24 23 7 1 0 9 25 24 8 1 0 10 26 25 9 1 0 11 27 26 10 1 0 12 28 27 11 1 0 13 29 28 12 1 0 14 30 29 13 1 0 15 31 30 14 1 1 17 33 32 16 1 1 18 34 33 17 1 0 19 35 34 18 1 0 20 36 35 19 1 0 21 37 36 20 1 0 22 38 37 21 1 0 23 39 38 22 1 0 24 40 39 23 1 0 25 41 40 24 1 0 26 42 41 25 1 0 27 43 42 26 1 0 28 44 43 27 1 0 29 45 44 28 1 0 30 46 45 29 1 0 31 47 46 30 1 1 33 49 48 32 1 1 34 50 49 33 1 0 35 51 50 34 1 0 36 52 51 35 1 0 37 53 52 36 1 0 38 54 53 37 1 0 39 55 54 38 1 0 40 56 55 39 1 0 41 57 56 40 1 0 42 58 57 41 1 0 43 59 58 42 1 0 44 60 59 43 1 0 45 61 60 44 1 0 46 62 61 45 1 0 47 63 62 46 1 1 49 65 64 48 1 1 50 66 65 49 1 0 51 67 66 50 1 0 52 68 67 51 1 0 53 69 68 52 1 0 54 70 69 53 1 0 55 71 70 54 1 0 56 72 71 55 1 0 57 73 72 56 1 0 58 74 73 57 1 0 59 75 74 58 1 0 60 76 75 59 1 0 61 77 76 60 1 0 62 78 77 61 1 0 63 79 78 62 1 1 65 81 80 64 1 1 66 82 81 65 1 0 67 83 82 66 1 0 68 84 83 67 1 0 69 85 84 68 1 0 70 86 85 69 1 0 71 87 86 70 1 0 72 88 87 71 1 0 73 89 88 72 1 0 74 90 89 73 1 0 75 91 90 74 1 0 76 92 91 75 1 0 77 93 92 76 1 0 78 94 93 77 1 0 79 95 94 78 1 1 81 97 96 80 1 1 82 98 97 81 1 0 83 99 98 82 1 0 84 100 99 83 1 0 85 101 100 84 1 0 86 102 101 85 1 0 87 103 102 86 1 0 88 104 103 87 1 0 89 105 104 88 1 0 90 106 105 89 1 0 91 107 106 90 1 0 92 108 107 91 1 0 93 109 108 92 1 0 94 110 109 93 1 0 95 111 110 94 1 1 97 113 112 96 1 1 98 114 113 97 1 0 99 115 114 98 1 0 100 116 115 99 1 0 101 117 116 100 1 0 102 118 117 101 1 0 103 119 118 102 1 0 104 120 119 103 1 0 105 121 120 104 1 0 106 122 121 105 1 0 107 123 122 106 1 0 108 124 123 107 1 0 109 125 124 108 1 0 110 126 125 109 1 0 111 127 126 110 1 1 113 129 128 112 1 1 114 130 129 113 1 0 115 131 130 114 1 0 116 132 131 115 1 0 117 133 132 116 1 0 118 134 133 117 1 0 119 135 134 118 1 0 120 136 135 119 1 0 121 137 136 120 1 0 122 138 137 121 1 0 123 139 138 122 1 0 124 140 139 123 1 0 125 141 140 124 1 0 126 142 141 125 1 0 127 143 142 126 1 1 129 145 144 128 1 1 130 146 145 129 1 0 131 147 146 130 1 0 132 148 147 131 1 0 133 149 148 132 1 0 134 150 149 133 1 0 135 151 150 134 1 0 136 152 151 135 1 0 137 153 152 136 1 0 138 154 153 137 1 0 139 155 154 138 1 0 140 156 155 139 1 0 141 157 156 140 1 0 142 158 157 141 1 0 143 159 158 142 1 1 145 161 160 144 1 1 146 162 161 145 1 0 147 163 162 146 1 0 148 164 163 147 1 0 149 165 164 148 1 0 150 166 165 149 1 0 151 167 166 150 1 0 152 168 167 151 1 0 153 169 168 152 1 0 154 170 169 153 1 0 155 171 170 154 1 0 156 172 171 155 1 0 157 173 172 156 1 0 158 174 173 157 1 0 159 175 174 158 1 1 161 177 176 160 1 1 162 178 177 161 1 0 163 179 178 162 1 0 164 180 179 163 1 0 165 181 180 164 1 0 166 182 181 165 1 0 167 183 182 166 1 0 168 184 183 167 1 0 169 185 184 168 1 0 170 186 185 169 1 0 171 187 186 170 1 0 172 188 187 171 1 0 173 189 188 172 1 0 174 190 189 173 1 0 175 191 190 174 1 1 190 191 192 193 1 1 189 190 193 194 1 1 188 189 194 195 1 1 187 188 195 196 1 1 186 187 196 197 1 1 185 186 197 198 1 1 184 185 198 199 1 1 183 184 199 200 1 1 182 183 200 201 1 1 181 182 201 202 1 1 180 181 202 203 1 1 179 180 203 204 1 1 178 179 204 205 1 1 177 178 205 206 1 1 176 177 206 207 1 1 criticalmass-1.0.0.orig/data/models/WingPhaserPierce.model0000644000175000017500000003513410276542612023027 0ustar danieldanielName WingPhaserPierce Scale 1.0 1.0 1.0 Colors 1 0.799999713898 0.0 0.0 Vertices 124 14.6186273098 0.824356421828 -1.79801678658 -14.9236609936 -1.99654269218 -1.15240298212 -15.2112660408 -0.897832736373 1.08307823539 -14.1770117283 0.824347764254 1.79801720381 13.8984364271 -2.90581709146 1.34350892901 -14.3233585358 -4.01303452253 0.619101077318 14.7211079597 4.15707862377 -1.00994133949 14.5431799889 -2.90581855178 -1.34350830317 -13.2350258827 -4.01303368807 -0.619102016091 15.0859894753 4.47462427616 -0.122615925968 14.6379718781 1.74514497817 1.70225170255 12.7887331247 -0.897825956345 1.08307823539 13.8229874372 0.824352145195 1.79801699519 -14.126075983 -4.10962593555 -0.63145454973 12.748857379 -2.72508239746 -0.00447117892327 -12.9140096903 -3.87913960218 0.122622119263 12.5880492926 -0.431531202048 -0.85028398037 -12.8224096298 2.97158545256 1.2051962465 -12.6347234249 -1.99653810263 1.15240225196 -14.3233585358 4.60851794481 -0.619101494551 13.3556252718 4.47462135553 0.122620958835 15.8535654545 1.02702388167 -0.850281737745 -14.7359781265 -2.37609994411 1.20519582927 -14.2794940472 -3.56159520149 -1.00994175673 14.5676932335 -4.10962593555 0.631453923881 -14.6443755627 -3.87914001942 -0.122619668022 -12.3471217155 1.49330791831 1.08308282495 -14.2794940472 4.1570802927 1.00993998349 14.7649724483 4.60851711035 0.619101703167 14.7649741173 -4.01303327084 -0.619102276862 12.748857379 3.32056748867 0.00447126611834 13.8739215136 4.70510852337 0.63145340234 13.929828167 -4.43185377121 -0.0471128751524 -14.0504601002 2.70989283919 1.56444887817 13.2640227079 -2.37610182166 1.20519541204 13.0763373375 -1.99653726816 -1.15240225196 13.6766414642 4.60851669312 -0.619101911783 -15.2112660408 1.49330770969 -1.08308053017 13.076338172 2.59202089906 1.15240266919 -12.9140105247 4.47462219 -0.122621584684 14.5117874146 -4.43185377121 0.0471122525632 -15.590303421 1.27824291587 -0.138155385852 15.3652732372 2.59202256799 -1.15240423381 -15.59030509 -0.682724863291 0.138155542314 -13.5143989325 0.653280816972 -1.81351989508 15.0717017651 -0.0850996039808 1.63876101375 -12.3072434664 3.32056519389 -0.00447155581787 15.0859894753 -3.87914210558 0.122615665197 13.8036453724 1.74513871968 -1.70225284994 12.5880476236 1.02702283859 0.850279860198 14.4920740128 2.7098915875 -1.56444908679 -14.070171833 5.02733552456 0.0471124188043 -13.3620297909 1.745141536 1.70225222409 -13.2788912058 -3.56159895658 1.00993987918 14.7211096287 -3.56160062551 1.00993894041 -13.432305932 -4.10962677002 0.631452724338 12.7887356281 1.49330510199 -1.08308126032 14.4920740128 -2.11441025138 1.56444908679 15.3652749062 -1.99654206634 1.15240308642 13.9495390654 2.70989221334 1.56444887817 14.890294075 -0.312862060964 -1.75383165479 -13.488211751 -4.43185335398 0.0471124188043 -15.4119515419 -0.431550499052 -0.850278712809 -15.2511434555 -2.72508072853 -0.00447524245828 13.956014514 -0.057798255235 -1.81351989508 13.929826498 5.02733552456 0.0471126730554 -13.5143972635 -0.0578006869182 1.81351968646 13.9495390654 -2.11440962553 -1.56444887817 15.1775920391 -2.37610286474 -1.20519603789 14.485601902 -0.0578012019396 1.81351968646 13.7205059528 -3.56159687042 -1.00994092226 -13.5079243183 2.70989283919 -1.56444877386 -14.6443755627 4.47462260723 0.122617034242 -13.3620306253 -1.1496605128 -1.70225201547 14.5676932335 4.7051089406 -0.631453193724 -14.1015644073 3.50129842758 -1.34350892901 -11.9680809975 1.2782227844 0.138156207278 16.0319190025 1.27823081613 0.138154655695 -14.1015660763 -2.90581792593 1.34350830317 -13.4568200111 -2.90581709146 -1.34350861609 -14.4486818314 -0.31286033988 1.75383082032 -12.1464345455 1.02702461183 -0.850282154977 13.8739215136 -4.10962635279 -0.631453715265 15.1775903702 2.97158294916 1.2051962465 -13.5079243183 -2.11441087723 1.56444887817 -12.6347234249 2.59201735258 -1.15240329504 -12.1464328766 -0.431541528553 0.850279077888 13.3556252718 -3.87913960218 -0.122623031959 15.6528732777 -0.897827729583 -1.08308804035 -14.4486801624 0.908340007067 -1.75383165479 -14.9236626625 2.59201568365 1.15240339935 13.6766422987 -4.01303577423 0.619101181626 12.40969491 -0.682744733989 0.138149127364 15.6528766155 1.49330708385 1.08308272064 -12.9282957315 0.680578567088 -1.63875997066 -13.4568191767 3.50129926205 1.34350851178 -14.1770117283 -0.228871356696 -1.79801699519 13.3699096441 -0.0850986652076 -1.63875955343 -12.9282948971 -0.085097915493 1.63875976205 -12.3072434664 -2.72508427501 0.00447104283376 16.0319173336 -0.682751826942 -0.138161526993 -15.4119532108 1.02702064812 0.850279077888 13.8984355927 3.50129842758 -1.34350903332 14.5431799889 3.50130093098 1.34350809455 13.7205059528 4.15708112717 1.00993956625 -11.9680809975 -0.682740665972 -0.138154499233 -14.070171833 -4.43185418844 -0.0471123536117 13.2640235424 2.97158128023 -1.2051974982 -14.0504601002 -2.11440962553 -1.56444908679 13.5513198376 -0.312860652804 1.75383144617 15.8535671234 -0.43153487891 0.850280538201 14.5117874146 5.02733552456 -0.0471120472066 -12.8224096298 -2.37610223889 -1.20519676805 -13.4323067665 4.70510935783 -0.631452515721 -13.2788912058 4.15707945824 -1.00994060934 15.692759037 -2.72507801652 0.00447241921211 -14.126077652 4.70510852337 0.63145340234 -14.7359764576 2.97158065438 -1.20519728959 -12.3471208811 -0.8978317976 -1.08308063447 -15.2511401176 3.3205704093 0.00447131664259 -13.4882125854 5.02733552456 -0.0471125296317 12.40969491 1.27822038531 -0.138154838234 -13.2350267172 4.60851711035 0.619101285934 15.6927573681 3.32056352496 -0.0044706822373 Normals 124 1.69087804854 0.526169627905 -6.77227073908 -4.90450769663 -1.56782741845 -4.74193555117 -5.62636208534 -0.777611620724 4.09121972322 -1.69087804854 0.526169627905 6.77227073908 -1.47788929939 -2.56718659401 6.34223461151 -3.38175609708 -4.62379825115 4.02264463902 2.84148693085 3.45011755824 -5.38709676266 1.47788929939 -2.56718659401 -6.34223461151 3.38175609708 -4.62379825115 -4.02264463902 5.70647281408 3.96838271618 -0.828669093549 1.88293090463 0.84575945884 6.68852800131 -5.62636208534 -0.777611620724 4.09121972322 -1.69087804854 0.526169627905 6.77227073908 -2.02093577385 -5.10937845707 -4.33668011427 -6.57722705603 -2.3954282403 -0.017731253989 5.70647281408 -3.96838271618 0.828669093549 -6.16620379686 -0.474471285939 -3.27857303619 4.57466369867 1.8810082972 4.95300137997 4.91497522593 -1.62785726786 4.71053212881 -3.38175609708 4.62379825115 -4.02264463902 -5.70647281408 3.96838271618 0.828669093549 6.07177948952 0.466139726341 -3.45161291957 -4.5456097126 -1.90600302815 4.97009205818 -2.84148693085 -3.45011755824 -5.38709676266 2.02093577385 -5.10937845707 4.33668011427 -5.70647281408 -3.96838271618 -0.828669093549 5.47596687078 0.819269366562 4.28241819143 -2.84148693085 3.45011755824 5.38709676266 3.38175609708 4.62379825115 4.02264463902 3.38175609708 -4.62379825115 -4.02264463902 -6.57722705603 2.3954282403 0.017731253989 -2.02093577385 5.10937845707 4.33668011427 -2.05212557316 -6.68745988607 -0.255500961095 -1.37299725413 1.51869255304 6.69365537167 -4.5456097126 -1.90600302815 4.97030568123 -4.91497522593 -1.62785726786 -4.71053212881 -3.38175609708 4.62379825115 -4.02264463902 -5.62636208534 0.777611620724 -4.09121972322 -4.90450769663 1.56782741845 4.74193555117 5.70647281408 3.96838271618 -0.828669093549 2.05212557316 -6.68745988607 0.255500961095 -6.94445633888 0.684682779014 -0.551805175841 4.90450769663 1.56782741845 -4.74193555117 -6.94445633888 -0.684682779014 0.551805175841 0.891262575984 0.299722287804 -6.93633824587 3.4810937345 -0.244178600609 6.06793427467 6.57722705603 2.3954282403 -0.017731253989 5.70647281408 -3.96838271618 0.828669093549 -1.88293090463 0.84575945884 -6.68852800131 -6.07177948952 0.466139726341 3.45161291957 1.37299725413 1.51869255304 -6.69365537167 -2.05212557316 6.68745988607 0.255500961095 1.88293090463 0.84575945884 6.68852800131 2.8412733078 -3.45011755824 5.38709676266 2.84148693085 -3.45011755824 5.38709676266 2.02093577385 -5.10937845707 4.33668011427 -5.47596687078 0.819269366562 -4.28241819143 1.20978423953 -1.47981201112 6.73381775618 4.91497522593 -1.6280708909 4.71053212881 -1.37299725413 1.51869255304 6.69365537167 2.60798984766 -0.370433680713 -6.48536622524 2.05212557316 -6.68745988607 0.255500961095 -6.07177948952 -0.466139726341 -3.45161291957 -6.57722705603 -2.3954282403 -0.017731253989 -0.891262575984 -0.299722287804 -6.93633824587 -2.05212557316 6.68745988607 0.255500961095 0.891262575984 -0.299722287804 6.93633824587 -1.20978423953 -1.47981201112 -6.73381775618 4.5456097126 -1.90600302815 -4.97009205818 0.891262575984 -0.299722287804 6.93633824587 -2.84148693085 -3.45011755824 -5.38709676266 1.20978423953 1.47981201112 -6.73381775618 -5.70647281408 3.96838271618 0.828669093549 1.88293090463 -0.84575945884 -6.68852800131 2.02093577385 5.10937845707 -4.33668011427 -1.47788929939 2.56718659401 -6.34223461151 6.94445633888 0.684682779014 0.551805175841 6.94445633888 0.684682779014 0.551805175841 -1.47788929939 -2.56718659401 6.34223461151 1.47596669197 -2.60628065467 -6.32663971186 -2.60798984766 -0.370433680713 6.48536622524 6.16620379686 0.474471285939 -3.27857303619 -2.02093577385 -5.10937845707 -4.33668011427 4.57466369867 1.8810082972 4.95300137997 1.20978423953 -1.47981201112 6.73381775618 4.91497522593 1.62785726786 -4.71053212881 6.16620379686 -0.474471285939 3.27857303619 -5.70647281408 -3.96838271618 -0.828669093549 5.62636208534 -0.777611620724 -4.09121972322 -2.60798984766 0.370433680713 -6.48536622524 -4.90450769663 1.56782741845 4.74193555117 -3.38175609708 -4.62379825115 4.02264463902 -6.94445633888 -0.684682779014 0.551805175841 5.47596687078 0.819269366562 4.28241819143 3.4810937345 0.244178600609 -6.06793427467 1.47596669197 2.60628065467 6.32663971186 -1.69087804854 -0.526169627905 -6.77227073908 -3.4810937345 -0.244178600609 -6.06793427467 3.4810937345 -0.244178600609 6.06793427467 6.57722705603 -2.3954282403 0.017731253989 6.94445633888 -0.684682779014 -0.551805175841 -6.07177948952 0.466139726341 3.45161291957 -1.47596669197 2.60628065467 -6.32663971186 1.47596669197 2.60628065467 6.32663971186 -2.84148693085 3.45011755824 5.38709676266 6.94445633888 -0.684682779014 -0.551805175841 -2.05212557316 -6.68745988607 -0.255500961095 -4.57466369867 1.8810082972 -4.95300137997 -1.37299725413 -1.51869255304 -6.69365537167 -2.60798984766 -0.370433680713 6.48536622524 6.16620379686 -0.474471285939 3.27857303619 2.05212557316 6.68745988607 -0.255500961095 4.57466369867 -1.8810082972 -4.95300137997 2.02093577385 5.10937845707 -4.33668011427 2.8412733078 3.45011755824 -5.38709676266 6.57722705603 -2.3954282403 0.017731253989 -2.02093577385 5.10937845707 4.33668011427 -4.5456097126 1.90600302815 -4.97030568123 5.47596687078 -0.819269366562 -4.28241819143 -6.57722705603 2.3954282403 0.017731253989 2.05212557316 6.68745988607 -0.255500961095 -6.94445633888 0.684682779014 -0.551805175841 3.38175609708 4.62379825115 4.02264463902 6.57722705603 2.3954282403 -0.017731253989 Faces 240 20 104 31 0 1 0 47 24 40 0 1 0 36 20 65 0 1 0 74 9 6 0 1 0 81 76 105 0 1 0 21 77 100 0 1 0 28 83 123 0 1 0 29 40 32 0 1 0 113 39 114 0 1 0 7 70 67 0 1 0 50 0 48 0 1 0 95 52 17 0 1 0 76 26 86 0 1 0 26 98 86 0 1 0 86 18 99 0 1 0 92 49 121 0 1 0 4 109 34 0 1 0 42 0 50 0 1 0 18 84 53 0 1 0 2 80 101 0 1 0 42 21 60 0 1 0 15 55 61 0 1 0 8 61 106 0 1 0 48 0 64 0 1 0 85 46 81 0 1 0 121 49 30 0 1 0 7 82 70 0 1 0 31 103 28 0 1 0 119 72 19 0 1 0 48 107 102 0 1 0 24 4 91 0 1 0 25 5 63 0 1 0 116 27 95 0 1 0 79 23 108 0 1 0 117 19 75 0 1 0 61 5 106 0 1 0 99 15 8 0 1 0 90 3 33 0 1 0 98 66 84 0 1 0 52 3 66 0 1 0 75 113 114 0 1 0 113 120 39 0 1 0 43 2 101 0 1 0 32 91 87 0 1 0 6 123 42 0 1 0 94 81 118 0 1 0 56 30 107 0 1 0 64 67 97 0 1 0 44 73 96 0 1 0 82 32 87 0 1 0 62 43 41 0 1 0 78 80 22 0 1 0 46 76 81 0 1 0 40 91 32 0 1 0 24 54 4 0 1 0 31 104 103 0 1 0 53 84 78 0 1 0 64 97 48 0 1 0 110 45 58 0 1 0 28 103 83 0 1 0 17 98 26 0 1 0 109 12 38 0 1 0 0 60 64 0 1 0 22 80 2 0 1 0 19 51 120 0 1 0 38 59 104 0 1 0 57 69 109 0 1 0 33 52 95 0 1 0 55 78 5 0 1 0 107 30 36 0 1 0 59 12 10 0 1 0 5 78 22 0 1 0 46 17 26 0 1 0 21 100 88 0 1 0 16 92 121 0 1 0 23 63 1 0 1 0 56 121 30 0 1 0 103 10 83 0 1 0 116 95 122 0 1 0 71 85 94 0 1 0 96 89 44 0 1 0 65 31 28 0 1 0 10 69 45 0 1 0 96 1 89 0 1 0 18 98 84 0 1 0 1 62 89 0 1 0 43 101 41 0 1 0 68 29 7 0 1 0 10 12 69 0 1 0 84 80 78 0 1 0 29 47 40 0 1 0 112 99 8 0 1 0 0 42 60 0 1 0 88 100 115 0 1 0 91 34 14 0 1 0 57 109 4 0 1 0 42 123 21 0 1 0 62 41 37 0 1 0 99 18 53 0 1 0 94 112 73 0 1 0 115 47 29 0 1 0 107 36 102 0 1 0 80 3 90 0 1 0 89 37 117 0 1 0 72 27 116 0 1 0 59 10 103 0 1 0 73 108 96 0 1 0 50 6 42 0 1 0 58 45 57 0 1 0 35 14 16 0 1 0 123 83 93 0 1 0 19 120 113 0 1 0 8 15 61 0 1 0 55 53 78 0 1 0 63 22 2 0 1 0 17 52 98 0 1 0 83 10 45 0 1 0 44 94 73 0 1 0 60 7 67 0 1 0 49 38 30 0 1 0 73 112 79 0 1 0 34 109 11 0 1 0 97 16 56 0 1 0 20 31 65 0 1 0 112 8 79 0 1 0 70 87 14 0 1 0 91 4 34 0 1 0 109 69 12 0 1 0 67 35 97 0 1 0 45 69 57 0 1 0 123 93 77 0 1 0 44 71 94 0 1 0 77 93 110 0 1 0 97 107 48 0 1 0 49 109 38 0 1 0 8 106 13 0 1 0 30 20 36 0 1 0 14 34 11 0 1 0 89 71 44 0 1 0 68 115 29 0 1 0 30 104 20 0 1 0 35 16 97 0 1 0 114 46 85 0 1 0 36 111 74 0 1 0 60 67 64 0 1 0 33 3 52 0 1 0 37 119 117 0 1 0 63 43 62 0 1 0 90 33 27 0 1 0 79 13 23 0 1 0 30 38 104 0 1 0 14 11 92 0 1 0 23 25 63 0 1 0 75 19 113 0 1 0 51 116 122 0 1 0 82 87 70 0 1 0 15 53 55 0 1 0 111 28 9 0 1 0 14 92 16 0 1 0 101 80 90 0 1 0 86 98 18 0 1 0 40 24 91 0 1 0 60 68 7 0 1 0 61 55 5 0 1 0 85 81 94 0 1 0 13 25 23 0 1 0 119 90 27 0 1 0 105 86 99 0 1 0 93 45 110 0 1 0 102 36 74 0 1 0 110 58 115 0 1 0 73 79 108 0 1 0 118 105 99 0 1 0 97 56 107 0 1 0 6 9 123 0 1 0 119 27 72 0 1 0 63 2 43 0 1 0 102 74 6 0 1 0 5 22 63 0 1 0 1 63 62 0 1 0 11 109 49 0 1 0 80 66 3 0 1 0 41 101 119 0 1 0 71 114 85 0 1 0 101 90 119 0 1 0 37 41 119 0 1 0 67 70 35 0 1 0 122 95 17 0 1 0 74 111 9 0 1 0 65 28 111 0 1 0 84 66 80 0 1 0 52 66 98 0 1 0 9 28 123 0 1 0 13 106 25 0 1 0 38 12 59 0 1 0 51 122 120 0 1 0 19 72 51 0 1 0 58 57 54 0 1 0 48 102 50 0 1 0 46 26 76 0 1 0 89 62 37 0 1 0 122 17 46 0 1 0 75 114 71 0 1 0 89 75 71 0 1 0 87 91 14 0 1 0 123 77 21 0 1 0 36 65 111 0 1 0 94 118 112 0 1 0 92 11 49 0 1 0 99 53 15 0 1 0 100 110 115 0 1 0 7 29 82 0 1 0 47 54 24 0 1 0 76 86 105 0 1 0 72 116 51 0 1 0 83 45 93 0 1 0 60 21 88 0 1 0 88 115 68 0 1 0 16 121 56 0 1 0 115 54 47 0 1 0 106 5 25 0 1 0 114 39 46 0 1 0 89 117 75 0 1 0 39 122 46 0 1 0 102 6 50 0 1 0 77 110 100 0 1 0 108 1 96 0 1 0 115 58 54 0 1 0 118 99 112 0 1 0 27 33 95 0 1 0 60 88 68 0 1 0 117 119 19 0 1 0 104 59 103 0 1 0 79 8 13 0 1 0 54 57 4 0 1 0 70 14 35 0 1 0 81 105 118 0 1 0 120 122 39 0 1 0 108 23 1 0 1 0 29 32 82 0 1 0 criticalmass-1.0.0.orig/data/models/FlyBug.model0000644000175000017500000001613707630537344021030 0ustar danieldanielName FlyBug Scale 1.0 1.0 1.0 Colors 5 0.248120307922 0.894736886024 1.0 0.454135358334 0.0526315793395 1.0 1.0 1.0 0.3533834517 1.0 0.00751879950985 0.180451124907 0.0 0.0 0.0 Vertices 62 -0.438187469532 -0.46945727952 -0.20474159137 -1.69323060561 -1.30615273685 0.0197554354435 -1.69323071442 1.20393358874 0.0197554354435 -0.438187421315 0.367238189525 -0.20474159137 -0.438187421315 0.367238189525 0.213606087558 -1.69323071442 1.20393358874 0.438103139307 -1.69323060561 -1.30615273685 0.438103139307 -0.438187469532 -0.46945727952 0.213606087558 -2.94827382281 -0.0511096460917 0.000333948242126 -2.94827382281 -0.0511096460917 -0.137392465871 -0.019839846312 -0.469457251834 0.836695382792 -0.0198397474025 0.367238148887 0.836695382792 -0.0198397474025 0.367238148887 -0.418347691396 -0.019839846312 -0.469457251834 -0.418347691396 -0.0198397929908 1.62228130286 0.0 -0.0198398059989 1.88051732405 0.206225164384 -0.189061805626 1.6222814354 0.0879537881428 -0.189061805626 1.6222814354 -0.0790892794865 -0.0198396738581 -2.14284828249 -0.15641272894 -0.0198396738581 -2.14284828249 0.15641272894 -0.125337876182 -2.13162323812 0.0579043311217 -0.125337876182 -2.13162323812 -0.0490398099977 0.0890898631692 -2.13162308626 -0.0490398037638 0.0890898631692 -2.13162308626 0.0579043248878 0.152813696535 1.62228131156 -0.0790892732527 0.152813696535 1.62228131156 0.087953781909 2.91202560019 -0.0511094919472 -0.137392453403 2.91202560019 -0.0511094919472 0.000333948631743 0.401939427915 -0.469457239404 0.213606087558 1.65698256233 -1.30615265625 0.438103089436 1.65698255931 1.20393342249 0.438103089436 0.401939365932 0.367238304577 0.213606087558 0.401939365932 0.367238304577 -0.204741578902 1.65698255931 1.20393342249 0.0197554338851 1.65698256233 -1.30615265625 0.0197554338851 0.401939427915 -0.469457239404 -0.204741578902 -0.0198397022394 -2.97954347163 0.591632954227 0.327913616423 -2.97954359517 0.478641077146 0.54283674554 -2.97954344329 -0.182824674838 0.327913616423 -2.97954359517 -0.478641127017 -0.0198397022394 -2.97954347163 -0.591632954227 0.154037012449 -2.67838033862 -0.478641077146 0.261498567632 -2.49225166372 -0.182824600032 0.261498567632 -2.49225166372 0.182824649903 0.154037012449 -2.67838033862 0.478641077146 -0.193716306213 -2.67838021508 0.478641077146 -0.301177598035 -2.492251551 0.182824674838 -0.301177598035 -2.492251551 -0.182824550161 -0.193716306213 -2.67838021508 -0.478640977404 -0.367593020902 -2.97954334809 -0.478640877662 -0.582515867907 -2.97954321786 -0.18282450029 -0.582515867907 -2.97954321786 0.182824699774 -0.367593020902 -2.97954334809 0.478641077146 -0.193716416928 -3.28070660464 0.478641077146 -0.301177901583 -3.46683520902 0.182824724709 -0.301177901583 -3.46683520902 -0.182824450419 -0.193716416928 -3.28070660464 -0.47864077792 0.154036901734 -3.28070672818 -0.478640678178 0.261498264084 -3.46683546278 -0.182824400548 0.261498264084 -3.46683546278 0.182824749645 0.154036901734 -3.28070672818 0.478641077146 0.542836463428 -2.9795437254 0.18282477458 Normals 62 0.319433462585 -0.0388108345822 0.26732274388 0.0191120019465 0.3463365324 -0.233859521682 -0.0191120368385 0.346336530475 0.233859521682 0.304221479073 0.0332406668639 0.285222569142 -0.414930379578 -0.0480373649108 -0.0230961334688 0.0370233572378 -0.322087653667 -0.264373501518 0.0370233247888 0.322087657397 -0.264373501518 -0.414840090818 0.049463737431 -0.0217044928465 0.379080655944 1.90954239088e-08 -0.176917151007 0.346417797505 1.74500982553e-08 -0.23453619545 -0.418342904452 0.000117337778004 -0.00103415524739 -0.41834290444 -0.000117379924365 -0.000983085852459 -0.000586816554499 0.0488859674021 -0.415475050788 -0.000911812626224 -0.0361205454014 -0.416777330489 -0.00065001887296 0.273111414232 -0.316885600234 -0.418333876764 -0.00155280421402 0.000140440836066 -0.348096987421 0.228369225134 0.0410853274443 -0.261907816185 0.241179779654 -0.219636705323 -0.0016521054237 0.0637458574542 -0.413457821377 -0.397019051122 -0.0087119222791 -0.131541994388 -0.388027296872 0.0657680851895 0.141845242089 -0.371831273491 0.0775946086199 -0.175295697328 -0.371208343438 -0.0762314249584 0.177198036575 -0.387539782076 -0.0642875443153 -0.143836950049 -0.261194587994 -0.241983285896 0.219623938364 -0.3471761179 -0.229488713902 -0.0425280374616 0.346417797505 1.74500982553e-08 0.23453619545 0.379080655944 1.90954239088e-08 0.176917151007 -0.41487619625 -0.0494637792263 0.0210278237533 0.0370233572378 -0.322087653667 0.264373501518 0.0370233247888 0.322087657397 0.264373501518 -0.414966494833 0.0480373231064 0.0224577668114 0.303914535073 -0.033276755462 -0.28554174312 -0.0191120019465 -0.3463365324 -0.233859521682 0.0191120368385 -0.346336530475 0.233859521682 0.318973042056 0.0388560135763 -0.267858981099 0.0 0.0 0.418347716331 0.270511376171 1.36264652895e-08 0.319119892886 0.4011809004 2.02086791745e-08 -0.118557597999 0.270511376171 1.36264652895e-08 -0.319119892886 0.0 0.0 -0.418347716331 0.135255680693 0.234255427978 -0.319119892886 0.234165123015 0.307670145243 -0.15974506735 0.23435470932 0.30746250375 0.159834436064 0.135255680693 0.234255427978 0.319119892886 -0.135255704294 0.234255414351 0.319119892886 -0.23406584377 0.307949983991 0.159336512191 -0.233876259689 0.308139568091 -0.159247143477 -0.135255704294 0.234255414351 -0.319119892886 -0.270511376171 -1.36264652895e-08 -0.319119892886 -0.4011809004 -2.02086791745e-08 -0.118557597999 -0.4011809004 -2.02086791745e-08 0.118557597999 -0.270511376171 -1.36264652895e-08 0.319119892886 -0.135255680693 -0.234255427978 0.319119892886 -0.200599460303 -0.347428916883 0.118557597999 -0.200599460303 -0.347428916883 -0.118557597999 -0.135255680693 -0.234255427978 -0.319119892886 0.135255704294 -0.234255414351 -0.319119892886 0.200590467702 -0.347437924277 -0.118557597999 0.200590467702 -0.347437924277 0.118557597999 0.135255704294 -0.234255414351 0.319119892886 0.4011809004 2.02086791745e-08 0.118557597999 Faces 82 0 3 2 0 0 0 2 3 4 5 0 0 3 0 7 4 0 1 0 1 6 7 0 0 7 4 5 0 0 0 5 7 6 0 0 0 0 2 1 0 0 0 2 5 8 9 0 0 1 2 9 0 0 0 1 9 6 0 0 0 6 9 8 0 0 0 5 6 8 0 0 0 4 7 10 11 0 1 0 3 12 13 0 1 12 3 17 14 0 1 4 11 15 16 0 1 3 4 16 17 0 1 0 13 18 21 0 1 10 7 20 19 0 1 0 7 20 21 0 1 35 32 33 0 0 0 33 32 31 30 0 0 32 35 28 31 0 1 35 34 29 28 0 0 28 31 30 0 0 0 30 28 29 0 0 0 35 33 34 0 0 0 33 30 27 26 0 0 34 33 26 0 0 0 34 26 29 0 0 0 29 26 27 0 0 0 30 29 27 0 0 0 31 28 10 11 0 1 35 32 12 13 0 1 12 32 24 14 0 1 31 11 15 25 0 1 32 31 25 24 0 1 35 13 18 22 0 1 10 28 23 19 0 1 35 28 23 22 0 1 16 14 17 0 0 1 14 24 25 0 0 1 15 14 16 0 0 1 14 15 25 0 0 1 40 41 39 0 0 2 39 41 42 38 0 2 38 42 43 61 0 2 61 43 44 37 0 2 37 44 36 0 0 2 44 45 36 0 0 2 43 46 45 44 0 2 42 47 46 43 0 4 41 48 47 42 0 2 40 48 41 0 0 2 40 49 48 0 0 2 48 49 50 47 0 2 47 50 51 46 0 2 46 51 52 45 0 2 45 52 36 0 0 2 52 53 36 0 0 2 51 54 53 52 1 3 50 55 54 51 0 2 49 56 55 50 0 2 40 56 49 0 0 2 40 57 56 0 0 2 56 57 58 55 0 2 55 58 59 54 0 2 54 59 60 53 0 2 53 60 36 0 0 2 60 37 36 0 0 2 59 61 37 60 1 3 58 38 61 59 0 2 57 39 38 58 0 2 40 39 57 0 0 2 22 42 43 23 0 4 20 21 47 46 0 4 19 46 20 0 0 4 19 43 23 0 0 4 19 46 43 0 0 4 18 42 22 0 0 4 18 47 42 0 0 4 18 47 21 0 0 4 criticalmass-1.0.0.orig/data/models/Boss1_Teeth.model0000644000175000017500000000402510355351306021737 0ustar danieldanielName Boss1_Teeth Scale 1.0 1.0 1.0 Offset 0.0 1.20000016689 0.0 Colors 1 1.0 1.0 0.0 Vertices 20 6.14558458328 1.39076607297e-06 -1.80000007153 7.83937740326 -3.24717736244 -3.0 6.0 -6.0 -1.80000007153 2.04717707634 -3.63937783241 -3.0 1.28124182197e-06 -6.08528137207 -1.80000007153 -2.04717493057 -3.63937783241 -3.0 -5.99999821186 -6.00000143051 -1.80000007153 -7.83937740326 -3.24717772007 -3.0 -6.14558458328 1.53239290057e-06 -1.80000007153 6.14558458328 -1.78543388074e-06 1.80000007153 7.83937311172 -3.24718809128 3.0 5.99999034405 -6.00000929832 1.80000007153 2.04716277122 -3.63938355446 3.0 -1.63867612173e-05 -6.08528137207 1.80000007153 -2.04719316959 -3.63937067986 3.0 -6.00001358986 -5.99998641014 1.80000007153 -7.83938527107 -3.24715769291 3.0 -6.14558458328 8.04662295195e-06 1.80000007153 0.0 0.0 -3.0 0.0 0.0 3.0 Normals 20 3.8310495615 3.22092354298 -3.3086335659 -4.45014810562 -0.0562150944024 -4.02386534214 1.03952148557 -5.29044449329 -2.63240450621 0.21588794142 2.80690938234 -5.29831838608 5.49241626263 -0.467116311193 -2.36909079552 -2.66078674793 0.773827314377 -5.32157349586 -1.03952148557 -5.29044449329 -2.63240450621 -4.33625292778 -0.472975865006 -4.11963272095 -3.8310495615 3.22092354298 -3.3086335659 3.8310495615 3.22092354298 3.3086335659 -4.45014810562 -0.0562150944024 4.02386534214 1.03952148557 -5.29044449329 2.63240450621 0.21588794142 2.80690938234 5.29831838608 5.49241626263 -0.467116311193 2.36927390099 -2.66078674793 0.773827314377 5.32157349586 -1.03952148557 -5.29026138783 2.63240450621 -4.33625292778 -0.472975865006 4.11963272095 -3.8310495615 3.22110664845 3.3086335659 0.0 0.0756248664111 -5.99945068359 0.0 0.0756248664111 5.99945068359 Faces 24 18 0 1 0 0 0 19 10 9 0 0 0 18 1 2 0 0 0 19 11 10 0 0 0 18 2 3 0 0 0 19 12 11 0 0 0 18 3 4 0 0 0 19 13 12 0 0 0 18 4 5 0 0 0 19 14 13 0 0 0 18 5 6 0 0 0 19 15 14 0 0 0 18 6 7 0 0 0 19 16 15 0 0 0 18 7 8 0 0 0 19 17 16 0 0 0 0 9 10 1 0 0 1 10 11 2 0 0 2 11 12 3 0 0 3 12 13 4 0 0 4 13 14 5 0 0 5 14 15 6 0 0 6 15 16 7 0 0 7 16 17 8 0 0 criticalmass-1.0.0.orig/data/models/MiniBug.model0000644000175000017500000003111507630537344021163 0ustar danieldanielName MiniBug Scale 1.0 1.0 1.0 Colors 4 1.0 0.150375932455 0.13533835113 0.0 0.0 0.819548845291 0.0 0.285714298487 0.413533806801 1.0 1.0 0.0 Vertices 114 1.35285880831e-07 1.01464394664e-07 1.60493459933 -0.802466991799 1.38991426938 1.35285873171e-07 -0.775123555832 1.34255392998 0.415387697562 -0.694956810593 1.20370110343 0.80246723202 -0.567429801854 0.982817819385 1.13486009032 -0.401233428256 0.694957202334 1.38991407351 -0.207693652514 0.359736381169 1.55024772024 -0.359736079236 0.207693977405 1.55024772024 -0.694956803535 0.401233803764 1.38991407351 -0.982817395491 0.56743028847 1.13486009032 -1.20370072792 0.694957398205 0.80246723202 -1.34255354237 0.775124029124 0.415387697562 -1.38991374236 0.802467472241 1.35285873171e-07 -1.60493419347 3.91107104435e-07 1.35285873171e-07 -1.55024731438 3.72335580286e-07 0.415387697562 -1.38991393823 3.7503786409e-07 0.80246723202 -1.13485988739 3.71947889383e-07 1.13486009032 -0.802467029091 2.46285749549e-07 1.38991407351 -0.415387494633 1.8519167375e-07 1.55024772024 -0.325247671153 -0.947397001747 1.40162265998 -0.628330181816 -1.12238161216 1.25666046473 -0.888593223609 -1.27264442356 1.02605899726 -1.08830000607 -1.38794531132 0.725533267523 -1.21384070213 -1.46042606125 0.375563730362 -1.25666030628 -1.48514819848 1.35285873171e-07 -0.725533419748 -2.01627516522 1.35285873171e-07 -0.700811411337 -1.97345556479 0.375563730362 -0.628330439521 -1.84791487968 0.725533267523 -0.513029690708 -1.64820804699 1.02605899726 -0.362766670905 -1.38794509553 1.25666046473 -0.187781879443 -1.08486281421 1.40162265998 -8.72499924668e-08 -1.13517889148 1.40162265998 -2.03644748896e-07 -1.48514829336 1.25666046473 -3.43741554501e-07 -1.78567395545 1.02605899726 -3.24149982125e-07 -2.01627549056 0.725533267523 -3.74671052033e-07 -2.16123741524 0.375563730362 0.725532574155 -2.01627554534 1.35285873171e-07 0.700810707496 -1.97345594118 0.375563730362 0.628329754636 -1.84791510984 0.725533267523 0.513029035978 -1.64820839502 1.02605899726 0.362766326046 -1.38794542087 1.25666046473 0.187781715633 -1.08486291021 1.40162265998 0.325247561921 -0.947397118501 1.40162265998 0.628329877055 -1.12238197761 1.25666046473 0.88859269323 -1.27264509887 1.02605899726 1.08829939064 -1.38794574622 0.725533267523 1.21384021104 -1.46042678568 0.375563730362 1.25665981146 -1.48514879409 1.35285873171e-07 1.6049339229 -6.43553901568e-07 1.35285873171e-07 1.55024731438 -6.15719997966e-07 0.415387697562 1.38991380294 -4.42680758207e-07 0.80246723202 1.13485988739 -4.89108833773e-07 1.13486009032 0.802467029091 -2.71044753452e-07 1.38991407351 0.41538766374 -7.91960494437e-08 1.55024772024 0.359736381169 0.207693686336 1.55024772024 0.694956999405 0.401233191506 1.38991407351 0.982817819385 0.567429395996 1.13486009032 1.20370096814 0.694956404736 0.80246723202 1.34255392998 0.775123014689 0.415387697562 1.38991386352 0.802466315369 1.35285873171e-07 0.80246767517 1.38991306593 1.35285873171e-07 0.775124434982 1.34255300123 0.415387697562 0.69495753349 1.20370018678 0.80246723202 0.567430559042 0.982817057276 1.13486009032 0.401233905228 0.694956600606 1.38991407351 0.207694078869 0.359736113058 1.55024772024 3.79058059031e-07 0.415387596097 1.55024772024 5.75437930724e-07 0.802466961448 1.38991407351 8.52082574898e-07 1.13485975211 1.13486009032 9.31877887685e-07 1.38991339708 0.80246723202 1.10491719195e-06 1.55024690853 0.415387697562 1.01559004257e-06 1.60493378761 1.35285873171e-07 -0.660060358986 -0.564822089552 1.27801101066 -0.341672389643 -0.484097608033 1.41885118064 -0.933466349604 -0.634141772429 1.05396671418 -1.14325808044 -0.687332779774 0.761986519549 -1.27513854013 -0.720769823301 0.421968543576 -1.32012068796 -0.732174757228 0.0570842123991 0.341672384189 -0.48409779491 1.41885118064 0.660060138414 -0.564822493611 1.27801101066 0.933466118565 -0.634142522165 1.05396671418 1.14325770608 -0.687333358259 0.761986519549 1.27513829601 -0.720770692271 0.421968543576 1.32012030684 -0.732175497704 0.0570842123991 2.01517218257 1.1071520385 -0.358392841482 1.91636181102 1.04188743502 -0.192773643329 1.99274365235 0.756826295327 -0.192773643329 2.1011801522 0.786165260954 -0.358392841482 -1.99274353807 0.756827272652 -0.192773643329 -2.10118030407 0.786166322296 -0.358392841482 -2.01517201539 1.1071531545 -0.358392841482 -1.9163616537 1.04188846846 -0.192773643329 1.96630889298 -1.49921424933 -0.333744059783 1.87062282096 -1.46416992481 -0.188538316141 1.94092464071 -1.80040348671 -0.356577710922 1.84807984481 -1.73618746957 -0.205604257005 -1.96630911935 -1.49921368185 -0.333744059783 -1.87062304205 -1.46416923649 -0.188538316141 -1.94092491257 -1.80040292307 -0.356577710922 -1.84808024225 -1.73618678466 -0.205604257005 -0.524135112591 -1.7473255117 1.08363646195 -0.620594189526 -1.9143976052 1.01425909283 -1.02233279865 -1.52959300766 1.01002565964 -0.838326754905 -1.43313378812 1.08363646195 0.988464561053 -1.52959329475 1.01002565964 0.838326200293 -1.43313432056 1.08363646195 0.524134442895 -1.74732572613 1.08363646195 0.620593562245 -1.9143978342 1.01425909283 0.512336325552 -2.26749693129 0.325062156516 0.530409521095 -2.48327045964 0.0505017006772 -4.5159293916e-07 -2.62539337022 0.0505017006772 -3.94475244062e-07 -2.40477701483 0.325062156516 -0.512337107614 -2.26749658336 0.325062156516 -0.530410437202 -2.48327037955 0.0505017006772 Normals 114 -2.76385667399e-09 -0.0366083911015 0.56623520033 -0.281281953923 0.487199895423 0.0740480039738 -0.27442436464 0.475337657509 0.143887957773 -0.24716722414 0.428113855383 0.278528568061 -0.203580032416 0.352628528725 0.395176698361 -0.146364278898 0.253522659618 0.4860742619 -0.0791045990759 0.137030382022 0.544917833258 -0.137030370078 0.0791046197669 0.544917833258 -0.253522637518 0.146364317179 0.4860742619 -0.352628497985 0.203580085661 0.395176698361 -0.428113818061 0.247167288783 0.278528568061 -0.404302788791 0.317925045515 0.239634302293 -0.144424752869 0.478956916838 0.267757309768 -0.501780897036 -0.170919931352 0.202402496977 -0.522803875439 -0.0833818949475 0.20416884007 -0.493312802321 -0.0282615029652 0.278926849672 -0.404787679882 -0.0333700606439 0.396215727688 -0.289698094269 -0.0425827751795 0.486022312125 -0.151316999879 -0.058254783131 0.543757587789 -0.164928265937 -0.0868973000145 0.535912934968 -0.268952197975 -0.12653617983 0.483338138937 -0.372716368556 0.000450273265187 0.427836771254 -0.493589878995 -0.176686543046 0.217070106793 -0.409740414108 -0.296607616984 0.257072651345 -0.15429556872 -0.462297825684 0.290581271056 -0.451872969412 -0.327362793959 0.102967600036 -0.345909502405 -0.391851785162 0.220810592079 -0.341770703653 -0.417896717384 0.174695104615 -0.167733642005 -0.135212062063 0.524916560982 -0.146364317179 -0.253522637518 0.4860742619 -0.0841265845496 -0.149931627966 0.540744399357 -1.27419816004e-08 -0.168772661124 0.541731478909 -2.21017018277e-08 -0.292745912669 0.4860742619 -3.07410415058e-08 -0.407177434669 0.395176698361 -3.73225253062e-08 -0.494351829515 0.278528568061 -2.51322688922e-08 -0.332886989955 0.459509798416 0.451872919981 -0.327380178782 0.102967600036 0.345909443237 -0.391851837393 0.220810592079 0.342896253121 -0.414156283789 0.181258295823 0.167733621588 -0.13521208739 0.524916560982 0.146364278898 -0.253522659618 0.4860742619 0.0841265619106 -0.149931640669 0.540744399357 0.166538746664 -0.0858236625287 0.535601202495 0.268727063217 -0.125982072577 0.483597887813 0.374517360745 -0.0136632366623 0.426035778067 0.490559380879 -0.179803688419 0.221330106742 0.409740369322 -0.296607678853 0.257072651345 0.154295498915 -0.462297848982 0.290581271056 0.501780871228 -0.170920007118 0.202402496977 0.522803862849 -0.0833819738886 0.20416884007 0.493312798053 -0.0282615774534 0.278926849672 0.404787674843 -0.0333701217651 0.396215727688 0.287966394699 -0.044470386482 0.486888141713 0.153377732937 -0.0610082245515 0.542874407787 0.137030382022 0.0791045990759 0.544917833258 0.253522659618 0.146364278898 0.4860742619 0.352628528725 0.203580032416 0.395176698361 0.428113855383 0.24716722414 0.278528568061 0.404302836796 0.317924984467 0.239634302293 0.144424825189 0.47895689503 0.267757309768 0.281282027488 0.48719985295 0.0740480039738 0.274424436414 0.475337616072 0.143887957773 0.247167288783 0.428113818061 0.278528568061 0.203580085661 0.352628497985 0.395176698361 0.146364317179 0.253522637518 0.4860742619 0.0791046197669 0.137030370078 0.544917833258 1.1945771251e-08 0.158226535435 0.544917833258 2.21017018277e-08 0.292745912669 0.4860742619 3.07410415058e-08 0.407177434669 0.395176698361 3.73225253062e-08 0.494351829515 0.278528568061 4.1438239615e-08 0.548866117645 0.143887957773 4.24723995726e-08 0.562563981411 0.0740480039738 -0.277472229678 -0.0998158579219 0.484775449875 -0.203476165707 -0.0823775229121 0.523236783938 -0.392596432905 -0.108370507679 0.395072764989 -0.480065210579 -0.118552969882 0.278286118866 -0.523704371515 -0.076524313156 0.204549821999 -0.528830206951 0.0693377914255 0.193640030972 0.207355188362 -0.0802302373625 0.522041905285 0.2751517238 -0.0980495565516 0.486455226919 0.392596416542 -0.108370566959 0.395072764989 0.480065192678 -0.11855304237 0.278286118866 0.52370435996 -0.0765243922332 0.204549821999 0.528830217421 0.0693377115743 0.193640030972 -0.394397418255 -0.00457168996356 -0.407922081937 -0.446504612704 0.257470983576 -0.237296494762 0.483926934956 -0.025456204325 0.295170303159 0.395626932568 0.0373703166363 0.405012793056 -0.4839269388 -0.0254561312541 0.295170303159 -0.395626926924 0.037387692966 0.405012793056 -0.394397417565 0.00457174951592 0.407922081937 -0.446504651581 -0.257470916156 0.237296494762 0.387210795087 -0.00649394931846 0.414710388838 0.473017153897 0.106569525332 0.294720071774 0.394016456592 0.0490247381417 0.405341842121 0.431438745584 0.288468546645 0.229365258983 -0.387210796067 -0.00649389085126 0.414710388838 -0.473017137805 0.106569596755 0.294720071774 -0.39401644919 0.0490247976365 0.405341842121 -0.431438702027 0.28846861179 0.229365258983 0.519548249434 0.0133341433494 -0.227720132033 0.504378449563 0.11950540596 -0.230819903423 -0.463787110479 -0.164668458575 0.282372969808 -0.0681082250154 0.138017452289 0.546147345095 0.454331954941 -0.177881493266 0.289646141279 0.0813558434817 0.125670339039 0.547307590565 -0.521487773151 0.0158625214985 -0.223079150154 0.505175028886 -0.115193523999 0.231287451401 0.26084776521 -0.28497054591 0.415576252247 0.28860708215 -0.394726454943 0.287845181914 -3.33937694888e-08 -0.442313881649 0.355416586094 -2.40118227572e-08 -0.318046231133 0.469900057869 -0.260847808239 -0.284970506523 0.415576252247 -0.288607141752 -0.394726411364 0.287845181914 Faces 132 71 1 2 70 0 0 70 2 3 69 0 0 69 3 4 68 0 0 68 4 5 67 0 0 67 5 6 66 0 0 6 0 66 0 1 0 7 0 6 0 1 3 5 8 7 6 0 0 4 9 8 5 0 3 3 10 9 4 0 0 2 11 10 3 0 3 1 12 11 2 0 0 11 14 15 10 0 0 10 15 16 9 0 0 9 16 17 8 0 0 8 17 18 7 0 0 18 0 7 0 1 0 73 0 18 0 0 3 17 72 18 0 1 0 21 20 72 0 0 0 22 21 74 0 0 0 23 22 75 0 0 0 24 25 26 23 0 0 23 26 27 22 0 0 21 28 29 20 0 0 20 29 30 19 1 3 30 0 19 0 1 3 31 0 30 0 1 0 29 32 31 30 1 0 28 33 32 29 0 0 27 34 33 28 0 0 26 35 34 27 0 0 35 37 38 34 0 0 34 38 39 33 0 0 33 39 40 32 0 0 32 40 41 31 1 0 41 0 31 0 1 0 42 0 41 0 1 3 40 43 42 41 1 3 39 44 43 40 0 0 37 46 45 38 0 0 36 47 46 37 0 0 48 49 82 0 0 0 49 50 81 0 0 3 50 51 80 0 0 0 51 52 79 0 0 3 52 53 78 0 1 0 78 0 42 0 0 0 54 0 53 0 1 0 52 55 54 53 0 0 51 56 55 52 0 0 50 57 56 51 0 0 49 58 57 50 0 0 59 60 61 58 0 0 58 61 62 57 0 3 57 62 63 56 0 0 56 63 64 55 0 3 55 64 65 54 0 0 65 0 54 0 1 3 66 0 65 0 1 0 64 67 66 65 0 0 63 68 67 64 0 0 62 69 68 63 0 0 61 70 69 62 0 0 60 71 70 61 0 0 72 17 16 0 0 3 72 16 74 0 0 3 72 20 19 0 0 0 72 19 73 0 0 0 73 18 72 0 1 0 19 0 73 0 0 0 74 21 72 0 0 0 74 16 15 0 0 0 74 15 75 0 0 0 75 22 74 0 0 0 75 15 14 0 0 3 75 14 76 0 0 3 76 23 75 0 0 0 76 14 13 0 0 0 76 13 77 0 0 0 53 0 78 0 0 3 78 42 43 0 0 0 78 43 79 0 0 0 79 52 78 0 1 0 79 43 44 0 0 0 79 44 80 0 0 0 80 51 79 0 0 3 80 44 45 0 0 0 80 45 81 0 0 0 81 50 80 0 0 0 81 45 46 0 0 0 81 46 82 0 0 0 82 49 81 0 0 3 83 48 82 0 0 0 59 58 85 84 0 2 59 48 87 84 0 2 58 49 86 85 0 2 49 48 87 86 0 2 87 84 85 86 1 2 14 11 91 88 0 2 13 14 88 89 0 2 13 12 90 89 0 2 11 12 90 91 0 2 90 89 88 91 1 2 83 82 93 92 0 2 83 47 94 92 0 2 82 46 95 93 0 2 46 47 94 95 0 2 93 95 94 0 1 2 93 94 92 0 1 2 24 77 96 98 0 2 76 77 96 97 0 2 23 76 97 99 0 2 24 23 99 98 0 2 98 99 97 0 1 2 96 98 97 0 1 2 28 21 103 100 0 0 27 28 100 101 0 0 22 27 101 102 0 0 21 22 102 103 0 0 102 101 100 103 1 1 45 44 105 104 0 0 38 45 104 107 0 0 44 39 106 105 0 0 39 38 107 106 0 0 107 104 105 106 1 1 37 35 111 108 0 3 36 37 108 109 0 3 35 26 112 111 0 3 26 25 113 112 0 3 113 110 111 112 1 0 110 109 108 111 1 0 criticalmass-1.0.0.orig/data/models/HeroStinger.model0000644000175000017500000000341507630537344022064 0ustar danieldanielName HeroStinger Scale 1.0 1.0 1.0 Colors 2 0.7 0.7 0.7 0.9 0.8 0.1 Vertices 16 -0.230544677241 -0.199097516361 0.16495250222 -0.228129393399 -0.199718401807 -0.167539713738 0.088835365813 -0.20072703179 -0.267986791322 0.282314997655 -0.200729532367 0.0024256101708 0.0849273206483 -0.199722436471 0.269996858549 -0.121155072339 0.10649381153 0.0870297846245 -0.119876653326 0.106165173863 -0.0889644591561 0.047898701555 0.105631278767 -0.142133035363 0.150311086202 0.105629961882 0.00100137787781 0.04582994334 0.10616303681 0.142631755142 0.0885619829034 1.20027049238 0.267409053621 0.285949974176 1.19926339587 -0.000162085996135 0.0924703244806 1.19926592591 -0.270574698207 -0.224494496093 1.2002744669 -0.170127479549 -0.226909698961 1.20089544132 0.162364613693 -2.27850881935e-05 1.63679718679 -2.80157900274e-05 Normals 16 -0.744646007481 0.402346033006 0.532504933772 -0.736621940657 0.400639036508 -0.544816385682 0.290419622504 0.396545707052 -0.870841885022 0.918348045495 0.395711810462 0.00584525902682 0.277889787204 0.399283999871 0.873656283627 -0.802102502116 0.163855331614 0.57422301419 -0.793744493775 0.161810647114 -0.586258378015 0.312515212913 0.157924346894 -0.936671493459 0.987464700421 0.157549912483 0.00699196127387 0.298823588074 0.161185651753 0.940562264615 0.297556649589 0.201063361611 0.933269903773 0.979465141042 0.201454745648 0.0060292922574 0.310416440429 0.201310962374 -0.929013359207 -0.787278704679 0.200802877921 -0.582923880052 -0.796742236664 0.200639157755 0.570016621525 -0.987569814311 0.156886811157 -0.00556052622924 Faces 15 0 5 6 1 0 1 1 6 7 2 0 1 2 7 8 3 0 1 3 8 9 4 0 1 5 0 4 9 0 1 9 10 14 5 0 0 8 11 10 9 0 0 7 12 11 8 0 0 6 13 12 7 0 0 5 14 13 6 0 0 10 15 14 0 0 0 13 14 15 0 0 0 12 13 15 0 0 0 11 12 15 0 0 0 10 11 15 0 0 0 criticalmass-1.0.0.orig/data/models/ArmorPierce.model0000644000175000017500000001343307630537344022044 0ustar danieldanielName ArmorPierce Scale 1.0 1.0 1.0 Colors 2 1.0 0.0 0.0 0.0 0.375939846039 0.744360923767 Vertices 56 0.270598083735 0.468689590693 -0.653281509876 0.5 0.866025328636 -0.500000059605 0.653281450272 1.13151657581 -0.270598113537 0.707106769085 1.22474479675 -5.96046447754e-08 0.653281450272 1.13151657581 0.270598053932 0.5 0.866025328636 0.499999970198 0.270598053932 0.468689531088 0.653281450272 -0.270597964525 0.468689531088 0.653281450272 -0.499999880791 0.866025328636 0.499999970198 -0.653281271458 1.13151657581 0.270598053932 -0.707106649876 1.22474479675 -5.96046447754e-08 -0.653281271458 1.13151657581 -0.270598113537 -0.499999880791 0.866025328636 -0.500000059605 -0.27059802413 0.468689590693 -0.653281509876 -0.54119604826 5.2570896969e-08 -0.653281509876 -0.999999821186 1.0323826416e-07 -0.500000059605 -1.30656266212 1.60100654512e-07 -0.270598113537 -1.41421341896 1.29537085058e-07 -5.96046447754e-08 -1.30656266212 1.60100654512e-07 0.270598053932 -0.999999821186 1.0323826416e-07 0.499999970198 -0.541195988655 7.43876995557e-08 0.653281450272 -0.270598053932 -0.468689382076 0.653281450272 -0.5 -0.866025149822 0.499999970198 -0.653281450272 -1.13151633739 0.270598053932 -0.707106769085 -1.22474443913 -5.96046447754e-08 -0.653281450272 -1.13151633739 -0.270598113537 -0.5 -0.866025149822 -0.500000059605 -0.270598083735 -0.468689471483 -0.653281509876 0.270597904921 -0.468689531088 -0.653281509876 0.499999701977 -0.866025209427 -0.500000059605 0.653281092644 -1.1315164566 -0.270598113537 0.707106292248 -1.22474455833 -5.96046447754e-08 0.653281092644 -1.1315164566 0.270598053932 0.499999701977 -0.866025209427 0.499999970198 0.270597845316 -0.468689471483 0.653281450272 0.541195869446 -1.47823641328e-07 0.653281450272 0.999999642372 -1.98491022729e-07 0.499999970198 1.30656242371 -2.55353427292e-07 0.270598053932 1.41421294212 -3.20042602198e-07 -5.96046447754e-08 1.30656242371 -2.55353427292e-07 -0.270598113537 0.999999642372 -1.98491022729e-07 -0.500000059605 0.54119592905 -1.26006852952e-07 -0.653281509876 0.270597904921 -5.901065947e-08 1.65328145027 0.135298892856 -0.23434472084 1.65328145027 -0.135299056768 -0.234344676137 1.65328145027 -0.27059802413 5.20950109717e-08 1.65328145027 -0.135299012065 0.234344780445 1.65328145027 0.135298997164 0.234344780445 1.65328145027 -1.37867957051e-08 1.49011594175e-08 2.21923899651 0.270597934723 -4.81022652821e-08 -1.65328145027 0.135298922658 -0.234344750643 -1.65328145027 -0.13529907167 -0.23434472084 -1.65328145027 -0.270598053932 4.11866096783e-08 -1.65328145027 -1.5258797248e-07 1.49011736283e-08 -2.21923899651 -0.135299041867 0.234344810247 -1.65328145027 0.135299012065 0.234344810247 -1.65328145027 Normals 56 0.317911326885 0.550614953041 -0.771813094616 0.251533567905 0.435712754726 -0.864192605019 0.411175876856 0.71217995882 -0.568956553936 0.499984741211 0.866023719311 0.0 0.411175876856 0.71217995882 0.568956553936 0.251533567905 0.435712754726 0.864192605019 0.317911326885 0.550614953041 0.771813094616 -0.317911326885 0.550614953041 0.771813094616 -0.251533567905 0.435712754726 0.864192605019 -0.411175876856 0.71217995882 0.568956553936 -0.499984741211 0.866023719311 0.0 -0.411175876856 0.71217995882 -0.568956553936 -0.251533567905 0.435712754726 -0.864192605019 -0.317911326885 0.550614953041 -0.771813094616 -0.63582265377 0.0 -0.771813094616 -0.503097653389 0.0 -0.864192605019 -0.822351753712 0.0 -0.568956553936 -1.0 0.0 0.0 -0.822351753712 0.0 0.568956553936 -0.503097653389 0.0 0.864192605019 -0.63582265377 0.0 0.771813094616 -0.317911326885 -0.550614953041 0.771813094616 -0.251533567905 -0.435712754726 0.864192605019 -0.411175876856 -0.71217995882 0.568956553936 -0.499984741211 -0.866023719311 0.0 -0.411175876856 -0.71217995882 -0.568956553936 -0.251533567905 -0.435712754726 -0.864192605019 -0.317911326885 -0.550614953041 -0.771813094616 0.317911326885 -0.550614953041 -0.771813094616 0.251533567905 -0.435712754726 -0.864192605019 0.411175876856 -0.71217995882 -0.568956553936 0.499984741211 -0.866023719311 0.0 0.411175876856 -0.71217995882 0.568956553936 0.251533567905 -0.435712754726 0.864192605019 0.317911326885 -0.550614953041 0.771813094616 0.63582265377 0.0 0.771813094616 0.503097653389 0.0 0.864192605019 0.822351753712 0.0 0.568956553936 1.0 0.0 0.0 0.822351753712 0.0 -0.568956553936 0.503097653389 0.0 -0.864192605019 0.63582265377 0.0 -0.771813094616 0.940916180611 0.0 0.338572353125 0.470442831516 -0.814844191074 0.338572353125 -0.470442831516 -0.814844191074 0.338572353125 -0.940916180611 0.0 0.338572353125 -0.470442831516 0.814844191074 0.338572353125 0.470442831516 0.814844191074 0.338572353125 0.0 1.0 0.0 0.940916180611 0.0 -0.338572353125 0.470442831516 -0.814844191074 -0.338572353125 -0.470442831516 -0.814844191074 -0.338572353125 -0.940916180611 0.0 -0.338572353125 0.0 1.0 0.0 -0.470442831516 0.814844191074 -0.338572353125 0.470442831516 0.814844191074 -0.338572353125 Faces 60 41 0 1 40 0 1 40 1 2 39 0 1 39 2 3 38 0 1 38 3 4 37 0 1 37 4 5 36 0 1 36 5 6 35 0 1 5 8 7 6 0 1 4 9 8 5 0 1 3 10 9 4 0 1 2 11 10 3 0 1 1 12 11 2 0 1 0 13 12 1 0 1 13 14 15 12 0 1 12 15 16 11 0 1 11 16 17 10 0 1 10 17 18 9 0 1 9 18 19 8 0 1 8 19 20 7 0 1 19 22 21 20 0 1 18 23 22 19 0 1 17 24 23 18 0 1 16 25 24 17 0 1 15 26 25 16 0 1 14 27 26 15 0 1 27 28 29 26 0 1 26 29 30 25 0 1 25 30 31 24 0 1 24 31 32 23 0 1 23 32 33 22 0 1 22 33 34 21 0 1 33 36 35 34 0 1 32 37 36 33 0 1 31 38 37 32 0 1 30 39 38 31 0 1 29 40 39 30 0 1 28 41 40 29 0 1 34 35 42 43 0 0 21 34 43 44 0 0 20 21 44 45 0 0 7 20 45 46 0 0 6 7 46 47 0 0 35 6 47 42 0 0 47 48 42 0 0 0 46 48 47 0 0 0 45 48 46 0 0 0 44 48 45 0 0 0 43 48 44 0 0 0 42 48 43 0 0 0 41 28 50 49 0 0 28 27 51 50 0 0 27 14 52 51 0 0 14 13 54 52 0 0 13 0 55 54 0 0 0 41 49 55 0 0 53 55 49 0 0 0 53 54 55 0 0 0 53 52 54 0 0 0 53 51 52 0 0 0 53 50 51 0 0 0 53 49 50 0 0 0 criticalmass-1.0.0.orig/data/models/Boss1_Eye2.model0000644000175000017500000000637010355351306021477 0ustar danieldanielName Boss1_Eye2 Scale 1.0 1.0 1.0 Offset 4.80000019073 15.6000003815 7.2000002861 Colors 2 1.0 0.0580741949379 0.0 1.0 1.0 1.0 Vertices 33 0.0 0.0 2.53589594364 0.876737684011 0.0 2.36150157452 1.80000007153 0.0 1.80000007153 2.35181307793 0.0 0.97415292263 2.54558444023 0.0 -1.11271035053e-07 1.80000007153 1.80000007153 -2.14576729718e-07 1.66298282146 1.66298353672 0.97415292263 1.27279222012 1.27279222012 1.80000007153 0.619947239757 0.619947239757 2.36150157452 -7.10906746804e-08 0.876737684011 2.36150157452 -1.51728656306e-07 1.80000007153 1.80000007153 -2.50850177963e-07 2.35181307793 0.97415292263 -1.83152693012e-07 2.54558444023 -2.14576729718e-07 -1.80000042915 1.7999997139 -2.14576729718e-07 -1.66298317909 1.66298317909 0.97415292263 -1.27279257774 1.27279222012 1.80000007153 -0.619947239757 0.619947105646 2.36150157452 -0.876737684011 -1.39368570018e-07 2.36150157452 -1.80000007153 -3.03457312611e-07 1.80000007153 -2.35181307793 -4.02578876901e-07 0.97415292263 -2.54558444023 -4.10745656154e-07 -2.14576729718e-07 -1.7999997139 -1.80000042915 -2.14576729718e-07 -1.66298282146 -1.66298353672 0.97415292263 -1.2727920413 -1.27279257774 1.80000007153 -0.619947105646 -0.619947239757 2.36150157452 2.07646486672e-07 -0.876737684011 2.36150157452 4.5518601155e-07 -1.80000007153 1.80000007153 5.54307490575e-07 -2.35181307793 0.97415292263 6.38338747194e-07 -2.54558444023 -2.14576729718e-07 1.80000078678 -1.7999997139 -2.14576729718e-07 1.66298353672 -1.66298282146 0.97415292263 1.27279257774 -1.27279186249 1.80000007153 0.619947418571 -0.619947105646 2.36150157452 Normals 33 0.0 0.0 6.0 2.39600819349 0.0 5.50065600872 4.30622255802 0.0 4.17786204815 5.58177423477 0.0 2.20062875748 5.88463997841 0.0 1.17044591904 4.16101562977 4.16101562977 1.17044591904 3.94677579403 3.94677579403 2.20062875748 3.04495382309 3.04495382309 4.17786204815 1.6941434741 1.6941434741 5.50065600872 0.0 2.39600819349 5.50065600872 0.0 4.30622255802 4.17786204815 0.0 5.58177423477 2.20062875748 0.0 5.88463997841 1.17044591904 -4.16101562977 4.16101562977 1.17044591904 -3.94677579403 3.94677579403 2.20062875748 -3.04495382309 3.04495382309 4.17786204815 -1.6941434741 1.6941434741 5.50065600872 -2.39600819349 0.0 5.50065600872 -4.30622255802 0.0 4.17786204815 -5.58177423477 0.0 2.20062875748 -5.88463997841 0.0 1.17044591904 -4.16101562977 -4.16101562977 1.17044591904 -3.94677579403 -3.94677579403 2.20062875748 -3.04495382309 -3.04495382309 4.17786204815 -1.6941434741 -1.6941434741 5.50065600872 0.0 -2.39600819349 5.50065600872 0.0 -4.30622255802 4.17786204815 0.0 -5.58177423477 2.20062875748 0.0 -5.88463997841 1.17044591904 4.16101562977 -4.16101562977 1.17044591904 3.94677579403 -3.94677579403 2.20062875748 3.04495382309 -3.04495382309 4.17786204815 1.6941434741 -1.6941434741 5.50065600872 Faces 32 4 5 6 3 1 0 3 6 7 2 1 0 2 7 8 1 1 0 8 0 1 0 1 1 0 8 9 0 1 1 8 7 10 9 1 0 7 6 11 10 1 0 6 5 12 11 1 0 12 13 14 11 1 0 11 14 15 10 1 0 10 15 16 9 1 0 16 0 9 0 1 1 0 16 17 0 1 1 16 15 18 17 1 0 15 14 19 18 1 0 14 13 20 19 1 0 20 21 22 19 1 0 19 22 23 18 1 0 18 23 24 17 1 0 24 0 17 0 1 1 0 24 25 0 1 1 24 23 26 25 1 0 23 22 27 26 1 0 22 21 28 27 1 0 28 29 30 27 1 0 27 30 31 26 1 0 26 31 32 25 1 0 32 0 25 0 1 1 0 32 1 0 1 1 32 31 2 1 1 0 31 30 3 2 1 0 30 29 4 3 1 0 criticalmass-1.0.0.orig/data/models/E1.model0000644000175000017500000000036507630537344020101 0ustar danieldanielName ExplosionPiece1 Scale 0.8 0.8 0.8 Colors 0 Vertices 4 -1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.5 0.0 0.0 0.0 1.5 Normals 4 -1.0 0.0 0.0 1.0 0.0 0.0 0.0 1.5 0.0 0.0 0.0 1.5 Faces 4 0 2 1 0 0 0 0 3 2 0 0 0 1 2 3 0 0 0 0 1 3 0 0 0 criticalmass-1.0.0.orig/data/models/FourEye.model0000644000175000017500000004313007630537344021207 0ustar danieldanielName FourEye Scale 1.0 1.0 1.0 Colors 5 0.258646637201 0.649624049664 0.108270712197 1.0 1.0 1.0 0.0 0.0 0.0 0.258646607399 0.0 0.860150396824 0.965413510799 0.842105269432 0.183458670974 Vertices 172 0.597250437002 1.7419243056 -0.202518171314 0.786089969889 2.06900366786 -0.55942477098 0.724811440057 1.96286648042 -0.349812971121 0.670897812014 1.8694851593 -0.241985715034 0.523603061991 1.8694851593 -0.241985715034 0.469689433947 1.96286648042 -0.349812971121 0.408411003683 2.06900366786 -0.55942477098 0.219571570365 1.7419243056 -0.55942477098 0.342128356216 1.7419243056 -0.349812971121 0.449955637195 1.7419243056 -0.241985715034 0.523603061991 1.61436315319 -0.241985715034 0.469689384163 1.52098213078 -0.349812971121 0.408411003683 1.41484474421 -0.55942477098 0.786089770753 1.41484474421 -0.55942477098 0.724811390273 1.52098213078 -0.349812971121 0.670897712446 1.61436315319 -0.241985715034 0.744545137241 1.7419243056 -0.241985715034 0.852372393328 1.74192410646 -0.349812971121 0.974929154288 1.74192410646 -0.55942477098 -0.221921103324 1.74192410646 -0.55942477098 -0.344477914068 1.74192410646 -0.349812971121 -0.452305195047 1.7419243056 -0.241985715034 -0.525952619842 1.61436315319 -0.241985715034 -0.472038942015 1.52098213078 -0.349812971121 -0.410760636211 1.41484474421 -0.55942477098 -0.788439477957 1.41484474421 -0.55942477098 -0.727161097477 1.52098213078 -0.349812971121 -0.673247369866 1.61436315319 -0.241985715034 -0.746894844445 1.7419243056 -0.241985715034 -0.854722000964 1.7419243056 -0.349812971121 -0.977279060628 1.7419243056 -0.55942477098 -0.788439477957 2.06900366786 -0.55942477098 -0.727160948125 1.96286648042 -0.349812971121 -0.673247369866 1.8694851593 -0.241985715034 -0.525952619842 1.8694851593 -0.241985715034 -0.472038942015 1.96286648042 -0.349812971121 -0.410760511751 2.06900366786 -0.55942477098 -0.599600094422 1.7419243056 -0.202518171314 -7.06086997687e-07 -0.758481084488 0.0641877598813 0.230245343598 0.0114808970106 -1.01030758617 0.398797107808 1.10664687591 -0.799542663442 0.460491384172 1.50750578981 -0.511632588713 0.398797157592 1.10664747332 -0.223722513984 0.230245343598 0.0114808970106 -0.0129575912578 -0.230246712659 0.0114808970106 -0.0129575912578 -0.398798427085 1.10664747332 -0.223722513984 -0.460492678558 1.50750578981 -0.511632588713 -0.398798402193 1.10664687591 -0.799542663442 -0.230246687767 0.0114808970106 -1.01030758617 -8.45151736504e-07 -0.758481084488 -1.08745293731 -0.460492678558 -0.758480785784 -1.01030758617 -0.797596157193 -0.758480785784 -0.799542663442 -0.920984859275 -0.758480785784 -0.511632588713 -0.797596356329 -0.758480536864 -0.223722513984 -0.460492678558 -0.758480785784 -0.0129575912578 -0.230246737551 -1.22305172326 -0.0129575912578 -0.398798576437 -1.56314154743 -0.223722513984 -0.460492778126 -1.68762266074 -0.511632588713 -0.398798526653 -1.56314124872 -0.799542663442 -0.230246762443 -1.22305172326 -1.01030758617 0.230245194246 -1.22305172326 -1.01030758617 0.398796883779 -1.56314154743 -0.799542663442 0.460491085468 -1.68762266074 -0.511632588713 0.398796933564 -1.56314154743 -0.223722513984 0.230245194246 -1.22305172326 -0.0129575912578 0.460491185036 -0.758481084488 -0.0129575912578 0.797594613888 -0.758481084488 -0.223722513984 0.920983067049 -0.758481084488 -0.511632588713 0.797594613888 -0.758481084488 -0.799542663442 0.46049123482 -0.758481084488 -1.01030758617 -2.34512408495 2.33579495379 2.08728735504 -2.12837392558 2.33579495379 2.05295747465 -1.93284053001 2.33579495379 1.95332825629 -1.77766446833 2.33579495379 1.79815219461 -2.06814200566 2.33579495379 1.8145369193 -2.12193505676 2.50156784746 1.81178585316 -1.88603974715 2.66933927171 1.79815219461 -2.01157976703 2.57812933136 1.95332825629 -2.16976955546 2.46319749424 2.05295747465 -2.27814463514 2.54193673126 2.05295747465 -2.2177215445 2.72789964265 1.95332825629 -2.16976955546 2.87548104918 1.79815219461 -2.26276534895 2.60402101581 1.80458230145 -2.43684182252 2.60402101581 1.79567852514 -2.52047881357 2.87548104918 1.79815219461 -2.47252682453 2.72789964265 1.95332825629 -2.41210373389 2.54193673126 2.05295747465 -2.52047881357 2.46319749424 2.05295747465 -2.678668602 2.57812933136 1.95332825629 -2.80420862188 2.66933927171 1.79815219461 -2.57767211472 2.50156784746 1.78847497343 -2.63146436927 2.33579495379 1.78572370815 -2.9125839007 2.33579475465 1.79815219461 -2.75740763989 2.33579495379 1.95332825629 -2.56187444345 2.33579495379 2.05295747465 -2.52047881357 2.2083922142 2.05295747465 -2.678668602 2.09346057622 1.95332825629 -2.80420862188 2.00225043673 1.79815219461 -2.57767211472 2.17002206012 1.78847497343 -2.43684182252 2.06756889177 1.79567852514 -2.52047881357 1.79610865926 1.79815219461 -2.4725266254 1.94368986666 1.95332825629 -2.41210373389 2.12965317632 2.05295747465 -2.27814463514 2.12965317632 2.05295747465 -2.21772134536 1.94368986666 1.95332825629 -2.16976935632 1.79610865926 1.79815219461 -2.26276534895 2.06756889177 1.80458230145 -2.12193505676 2.17002206012 1.81178585316 -1.88603954801 2.00225063587 1.79815219461 -2.01157956789 2.09346077536 1.95332825629 -2.16976935632 2.2083922142 2.05295747465 -0.613400330371 -0.216906431472 -0.487852345045 -0.64218167974 -0.248745267767 -0.5186284414 -0.683364433052 -0.250474715594 -0.551647010133 -0.721218227058 -0.221434290072 -0.574296160371 -0.741284282505 -0.172716373549 -0.577924620472 -0.735897848321 -0.122929543864 -0.561146402712 -0.70711659852 -0.0910908569219 -0.530370306358 -0.665933845208 -0.0893613593105 -0.497351638057 -0.628080001418 -0.118401784833 -0.474702487818 -0.608014045539 -0.16711975114 -0.471074226853 2.33874475783 2.32993158849 2.07918510181 2.123296949 2.32993158849 2.04506152648 1.92893825768 2.32993158849 1.94603071231 1.77469455153 2.32993158849 1.79178700616 2.06522904181 2.32993158849 1.81107732667 2.11869909404 2.49470880132 1.80834278883 1.88241865509 2.66147219829 1.79178700616 2.0072045463 2.5708098824 1.94603071231 2.1644438578 2.45656864951 2.04506152648 2.27216776222 2.534834739 2.04506152648 2.21210769681 2.71968049649 1.94603071231 2.1644438578 2.8663753488 1.79178700616 2.25868325666 2.59654624064 1.80118244967 2.43171426536 2.59654624064 1.79233244013 2.51304605614 2.8663753488 1.79178700616 2.46538221713 2.71968049649 1.94603071231 2.40532195258 2.534834739 2.04506152648 2.51304605614 2.45656864951 2.04506152648 2.67028536764 2.5708098824 1.94603071231 2.79507125886 2.66147219829 1.79178700616 2.57169802971 2.49470880132 1.78517210097 2.6251672854 2.32993158849 1.78243716485 2.90279536241 2.32993158849 1.79178700616 2.74855145713 2.32993158849 1.94603071231 2.55419296494 2.32993158849 2.04506152648 2.51304605614 2.20329432833 2.04506152648 2.67028536764 2.08905329457 1.94603071231 2.79507125886 1.99839097868 1.79178700616 2.57169802971 2.16515477392 1.78517210097 2.43171426536 2.06331693633 1.79233244013 2.51304605614 1.79348782817 1.79178700616 2.46538181886 1.94018228222 1.94603071231 2.40532195258 2.12502843798 2.04506152648 2.27216776222 2.12502843798 2.04506152648 2.21210749767 1.94018228222 1.94603071231 2.16444365867 1.79348782817 1.79178700616 2.25868325666 2.06331693633 1.80118244967 2.11869909404 2.16515477392 1.80834278883 1.88241845595 1.99839137695 1.79178700616 2.00720414803 2.08905349371 1.94603071231 2.16444365867 2.20329432833 2.04506152648 0.617425071445 -0.207433175514 -0.480483311181 0.64603357062 -0.239080691736 -0.511074509605 0.686968996813 -0.240799734699 -0.543894639147 0.724595377316 -0.211933752459 -0.566407779384 0.744540855814 -0.163508615886 -0.570014334506 0.739186681689 -0.114020888724 -0.553337078783 0.710578381649 -0.0823734720704 -0.522745780791 0.669642955457 -0.0806543295397 -0.489925551681 0.632016574953 -0.10952031178 -0.467412411444 0.612071096456 -0.157945547921 -0.46380595589 Normals 172 0.0 0.0 0.835237622261 0.36050800214 0.624433619062 0.421557027539 0.336649174362 0.583113959635 0.494204141584 0.233235398039 0.403994287957 0.692798359616 -0.233235398039 0.403994287957 0.692798359616 -0.336649174362 0.583113959635 0.494204141584 -0.36050800214 0.624433619062 0.421557027539 -0.72101600428 0.0 0.421557027539 -0.673323838154 0.0 0.494204141584 -0.466496285508 0.0 0.692798359616 -0.233235398039 -0.403994287957 0.692798359616 -0.336649174362 -0.583113959635 0.494204141584 -0.36050800214 -0.624433619062 0.421557027539 0.36050800214 -0.624433619062 0.421557027539 0.336649174362 -0.583113959635 0.494204141584 0.233235398039 -0.403994287957 0.692798359616 0.466496285508 0.0 0.692798359616 0.673323838154 0.0 0.494204141584 0.72101600428 0.0 0.421557027539 0.72101600428 0.0 0.421557027539 0.673323838154 0.0 0.494204141584 0.466496285508 0.0 0.692798359616 0.233235398039 -0.403994287957 0.692798359616 0.336649174362 -0.583113959635 0.494204141584 0.36050800214 -0.624433619062 0.421557027539 -0.36050800214 -0.624433619062 0.421557027539 -0.336649174362 -0.583113959635 0.494204141584 -0.233235398039 -0.403994287957 0.692798359616 -0.466496285508 0.0 0.692798359616 -0.673323838154 0.0 0.494204141584 -0.72101600428 0.0 0.421557027539 -0.36050800214 0.624433619062 0.421557027539 -0.336649174362 0.583113959635 0.494204141584 -0.233235398039 0.403994287957 0.692798359616 0.233235398039 0.403994287957 0.692798359616 0.336649174362 0.583113959635 0.494204141584 0.36050800214 0.624433619062 0.421557027539 0.0 0.0 0.835237622261 0.0 -0.0197294204238 0.834982727967 0.188576548686 0.108129457666 -0.806433670937 0.38895507656 0.288600131332 -0.68043558809 0.38949037947 0.0810078771354 0.734372863553 0.38895507656 0.288600131332 0.68043558809 0.188576548686 0.108129457666 0.806433670937 -0.188576548686 0.108129457666 0.806433670937 -0.38895507656 0.288600131332 0.68043558809 0.0 0.0 0.835237622261 -0.38895507656 0.288600131332 -0.68043558809 -0.188576548686 0.108129457666 -0.806433670937 0.0 -0.0197294204238 -0.834982727967 -0.315543279634 -0.044174528414 -0.772047385225 -0.6389885313 -0.0850098420098 -0.531088490944 -0.829196428359 -0.100252987511 0.0 -0.6389885313 -0.0850098420098 0.531088490944 -0.315543279634 -0.044174528414 0.772047385225 -0.177080467543 -0.261427578166 0.77324543819 -0.343557008863 -0.544164966494 0.532388451843 -0.432186468083 -0.714694426655 0.0 -0.343557008863 -0.544164966494 -0.532388451843 -0.177080467543 -0.261427578166 -0.77324543819 0.177080467543 -0.261427578166 -0.77324543819 0.343557008863 -0.544164966494 -0.532388451843 0.432186468083 -0.714694426655 0.0 0.343557008863 -0.544164966494 0.532388451843 0.177080467543 -0.261427578166 0.77324543819 0.315543279634 -0.044174528414 0.772047385225 0.6389885313 -0.0850098420098 0.531088490944 0.829196428359 -0.100252987511 0.0 0.6389885313 -0.0850098420098 -0.531088490944 0.315543279634 -0.044174528414 -0.772047385225 0.0 0.0 0.835237622261 0.28123346221 0.0 0.786449360887 0.507331595992 0.0 0.663484619705 0.590582611367 0.0 0.590582611367 0.755045437981 0.138870655408 0.328925628337 0.586223769589 0.544904159946 -0.238766778461 0.477788451216 0.347125653438 0.590582611367 0.410443312729 0.298184455487 0.663484619705 0.227500102182 0.16530399023 0.786449360887 0.0868961157917 0.267468747175 0.786449360887 0.156764770018 0.482504145005 0.663484619705 0.182484388372 0.561676702325 0.590582611367 0.224033440217 0.597006146709 -0.539423783275 -0.0704039509128 0.51760413474 -0.651708105054 -0.182484388372 0.561676702325 0.590582611367 -0.156764770018 0.482504145005 0.663484619705 -0.0868961157917 0.267468747175 0.786449360887 -0.227500102182 0.16530399023 0.786449360887 -0.410443312729 0.298184455487 0.663484619705 -0.477788451216 0.347125653438 0.590582611367 -0.339121723689 0.361476625349 -0.672253232335 -0.603378703193 0.0825372926829 -0.571592389063 -0.590582611367 0.0 0.590582611367 -0.507331595992 0.0 0.663484619705 -0.28123346221 0.0 0.786449360887 -0.227500102182 -0.16530399023 0.786449360887 -0.410443312729 -0.298184455487 0.663484619705 -0.477788451216 -0.347125653438 0.590582611367 -0.723182655562 -0.37215701986 -0.189978517087 -0.387502129301 -0.65022971815 0.353039375301 -0.182484388372 -0.561676702325 0.590582611367 -0.156764770018 -0.482504145005 0.663484619705 -0.0868961157917 -0.267468747175 0.786449360887 0.0868961157917 -0.267468747175 0.786449360887 0.156764770018 -0.482504145005 0.663484619705 0.182484388372 -0.561676702325 0.590582611367 0.0497823740125 -0.573249251757 0.605392417899 0.439119792014 -0.330047213014 0.629174802281 0.477788451216 -0.347125653438 0.590582611367 0.410443312729 -0.298184455487 0.663484619705 0.227500102182 -0.16530399023 0.786449360887 0.320717783153 -0.422372739064 0.645233640637 0.0289568754541 -0.581686551589 0.598637519974 -0.285617768526 -0.653645401256 0.434480566513 -0.6081963547 -0.564429660268 0.0953333782861 -0.714235616926 -0.160613798316 -0.402082530969 -0.43376686249 0.282049148843 -0.655659115962 -0.0754765029366 0.515462972888 -0.652829689731 0.329639357252 0.602613970527 -0.475137450991 0.732002296836 0.401700164636 0.019856872238 0.643729714519 -0.102445140668 0.522217870812 0.0 0.0 0.835237622261 -0.28123346221 0.0 0.786449360887 -0.507331595992 0.0 0.663484619705 -0.590582611367 0.0 0.590582611367 -0.754968969693 0.138768685244 0.329180547523 -0.586351216736 0.545057096523 -0.238104028405 -0.477788451216 0.347125653438 0.590582611367 -0.410443312729 0.298184455487 0.663484619705 -0.227500102182 0.16530399023 0.786449360887 -0.0868961157917 0.267468747175 0.786449360887 -0.156764770018 0.482504145005 0.663484619705 -0.182484388372 0.561676702325 0.590582611367 -0.224007950788 0.59738848815 -0.538990413191 0.0706078725709 0.517910007893 -0.651427721331 0.182484388372 0.561676702325 0.590582611367 0.156764770018 0.482504145005 0.663484619705 0.0868961157917 0.267468747175 0.786449360887 0.227500102182 0.16530399023 0.786449360887 0.410443312729 0.298184455487 0.663484619705 0.477788451216 0.347125653438 0.590582611367 0.339427596842 0.361604072496 -0.672023827471 0.603557129199 0.0824863138241 -0.571413963057 0.590582611367 0.0 0.590582611367 0.507331595992 0.0 0.663484619705 0.28123346221 0.0 0.786449360887 0.227500102182 -0.16530399023 0.786449360887 0.410443312729 -0.298184455487 0.663484619705 0.477788451216 -0.347125653438 0.590582611367 0.723106187274 -0.372207998719 -0.190156943092 0.387527618731 -0.650484612443 0.352529561821 0.182484388372 -0.561676702325 0.590582611367 0.156764770018 -0.482504145005 0.663484619705 0.0868961157917 -0.267468747175 0.786449360887 -0.0868961157917 -0.267468747175 0.786449360887 -0.156764770018 -0.482504145005 0.663484619705 -0.182484388372 -0.561676702325 0.590582611367 -0.0499098273825 -0.573580664123 0.605061055317 -0.43927272859 -0.33020014959 0.628970886846 -0.477788451216 -0.347125653438 0.590582611367 -0.410443312729 -0.298184455487 0.663484619705 -0.227500102182 -0.16530399023 0.786449360887 -0.321023681198 -0.42252567564 0.644978696559 -0.0291098182535 -0.582017914171 0.598331646822 0.285617768526 -0.653951274409 0.433996267354 0.608247333559 -0.564480639126 0.0947725921705 0.714184638067 -0.160511840599 -0.402184488686 0.433970777925 0.28217659599 -0.655455200527 0.0756549351653 0.51579433547 -0.652549306008 -0.329664846681 0.602996361752 -0.474678641262 -0.731925828548 0.401827636675 0.0202392245692 -0.643857161666 -0.102394161809 0.522064934236 Faces 152 18 1 2 17 0 0 17 2 3 16 0 1 3 0 16 0 0 2 4 0 3 0 0 2 2 5 4 3 0 1 1 6 5 2 0 0 6 7 8 5 0 0 5 8 9 4 0 1 9 0 4 0 0 2 10 0 9 0 0 2 8 11 10 9 0 1 7 12 11 8 0 0 12 13 14 11 0 0 11 14 15 10 0 1 15 0 10 0 0 2 16 0 15 0 0 2 14 17 16 15 0 1 13 18 17 14 0 0 19 36 35 20 0 0 20 35 34 21 0 1 21 34 37 0 0 2 34 33 37 0 0 2 35 32 33 34 0 1 36 31 32 35 0 0 31 30 29 32 0 0 32 29 28 33 0 1 33 28 37 0 0 2 28 27 37 0 0 2 29 26 27 28 0 1 30 25 26 29 0 0 25 24 23 26 0 0 26 23 22 27 0 1 27 22 37 0 0 2 22 21 37 0 0 2 23 20 21 22 0 1 24 19 20 23 0 0 49 39 69 0 0 3 69 39 40 68 0 3 68 40 41 67 0 3 67 41 42 66 0 3 66 42 43 65 0 3 43 38 65 0 1 4 44 38 43 0 0 3 42 45 44 43 0 3 41 46 45 42 0 3 40 47 46 41 0 3 39 48 47 40 0 3 49 48 39 0 0 3 49 50 48 0 0 3 48 50 51 47 0 3 47 51 52 46 0 3 46 52 53 45 0 3 45 53 54 44 0 3 54 38 44 0 1 4 55 38 54 0 1 4 53 56 55 54 0 3 52 57 56 53 0 3 51 58 57 52 0 3 50 59 58 51 0 3 49 59 50 0 0 3 49 60 59 0 0 3 59 60 61 58 0 3 58 61 62 57 0 3 57 62 63 56 0 3 56 63 64 55 0 3 64 38 55 0 1 4 65 38 64 0 1 4 63 66 65 64 0 3 62 67 66 63 0 3 61 68 67 62 0 3 60 69 68 61 0 3 49 69 60 0 0 3 73 76 77 72 0 0 72 77 78 71 0 1 78 70 71 0 0 2 79 70 78 0 0 2 77 80 79 78 0 1 76 81 80 77 0 0 81 84 85 80 0 0 80 85 86 79 0 1 86 70 79 0 0 2 87 70 86 0 0 2 85 88 87 86 0 1 84 89 88 85 0 0 89 92 93 88 0 0 88 93 94 87 0 1 94 70 87 0 0 2 95 70 94 0 0 2 93 96 95 94 0 1 92 97 96 93 0 0 97 100 101 96 0 0 96 101 102 95 0 1 102 70 95 0 0 2 103 70 102 0 0 2 101 104 103 102 0 1 100 105 104 101 0 0 105 108 109 104 0 0 104 109 110 103 0 1 110 70 103 0 0 2 71 70 110 0 0 2 109 72 71 110 0 1 108 73 72 109 0 0 74 107 111 120 0 0 107 106 112 111 0 0 106 99 113 112 0 0 99 98 114 113 0 0 98 91 115 114 0 0 91 90 116 115 0 0 90 83 117 116 0 0 83 82 118 117 0 0 82 75 119 118 0 0 75 74 120 119 0 0 124 123 128 127 0 0 123 122 129 128 0 1 129 122 121 0 0 2 130 129 121 0 0 2 128 129 130 131 0 1 127 128 131 132 0 0 132 131 136 135 0 0 131 130 137 136 0 1 137 130 121 0 0 2 138 137 121 0 0 2 136 137 138 139 0 1 135 136 139 140 0 0 140 139 144 143 0 0 139 138 145 144 0 1 145 138 121 0 0 2 146 145 121 0 0 2 144 145 146 147 0 1 143 144 147 148 0 0 148 147 152 151 0 0 147 146 153 152 0 1 153 146 121 0 0 2 154 153 121 0 0 2 152 153 154 155 0 1 151 152 155 156 0 0 156 155 160 159 0 0 155 154 161 160 0 1 161 154 121 0 0 2 122 161 121 0 0 2 160 161 122 123 0 1 159 160 123 124 0 0 125 171 162 158 0 0 158 162 163 157 0 0 157 163 164 150 0 0 150 164 165 149 0 0 149 165 166 142 0 0 142 166 167 141 0 0 141 167 168 134 0 0 134 168 169 133 0 0 133 169 170 126 0 0 126 170 171 125 0 0 criticalmass-1.0.0.orig/data/models/Bonus1.model0000644000175000017500000001144107630537344021000 0ustar danieldanielName Bonus1 Scale 1.0 1.0 1.0 Colors 2 0.273684233427 0.574436128139 0.333834588528 0.860150396824 0.800000011921 0.0631579086185 Vertices 42 0.0 0.0 -1.44249784946 1.02332496643 -0.743480324745 -0.632457494736 -0.39086741209 -1.20298659801 -0.632457494736 -1.26490783691 0.0 -0.632457494736 -0.39086741209 1.20298659801 -0.632457494736 1.02332496643 0.743480324745 -0.632457494736 0.39086741209 -1.20298659801 0.632457494736 -1.02332496643 -0.743480324745 0.632457494736 -1.02332496643 0.743480324745 0.632457494736 0.39086741209 1.20298659801 0.632457494736 1.26490783691 0.0 0.632457494736 0.0 0.0 1.44249784946 0.601497173309 -0.437008112669 -1.20300674438 -0.229746848345 -0.707100093365 -1.20300686359 0.371752679348 -1.14411520958 -0.743505299091 0.601497173309 0.437008112669 -1.20300674438 1.20299768448 0.0 -0.743502736092 -0.743494153023 0.0 -1.2030030489 -0.973246693611 -0.707102417946 -0.743503272533 -0.229746848345 0.707100093365 -1.20300686359 -0.973246693611 0.707102417946 -0.743503272533 0.371752679348 1.14411520958 -0.743505299091 0.403499692678 0.131102964282 0.0 0.403499692678 -0.131102964282 0.0 0.249376341701 -0.343236714602 0.0 0.0 -0.424264073372 0.0 -0.249376341701 -0.343236714602 0.0 -0.403499692678 -0.131102964282 0.0 -0.403499692678 0.131102964282 0.0 -0.249376341701 0.343236714602 0.0 0.0 0.424264073372 0.0 0.249376341701 0.343236714602 0.0 0.973246693611 -0.707102417946 0.743503272533 -0.371752679348 -1.14411520958 0.743505299091 -1.20299768448 0.0 0.743502736092 -0.371752679348 1.14411520958 0.743505299091 0.973246693611 0.707102417946 0.743503272533 0.743494153023 0.0 1.2030030489 0.229746848345 -0.707100093365 1.20300686359 -0.601497173309 -0.437008112669 1.20300674438 -0.601497173309 0.437008112669 1.20300674438 0.229746848345 0.707100093365 1.20300686359 Normals 42 0.0 0.0 -1.0 -0.0324411764741 0.0235602892935 0.999176025391 0.0123905148357 0.0381176173687 0.999176025391 0.0401013232768 0.0 0.999176025391 0.0123905148357 -0.0381176173687 0.999176025391 -0.0324411764741 -0.0235602892935 0.999176025391 0.0123905148357 -0.0381176173687 0.999176025391 -0.0324411764741 -0.0235602892935 0.999176025391 -0.0324411764741 0.0235602892935 0.999176025391 0.0123905148357 0.0381176173687 0.999176025391 0.0401013232768 0.0 0.999176025391 0.0 0.0 1.0 0.432966083288 -0.314554274082 -0.844721794128 -0.165379807353 -0.508987724781 -0.844721794128 0.0165410321206 -0.0509048737586 -0.998565614223 0.432966083288 0.314554274082 -0.844721794128 0.0535294674337 0.0 -0.998565614223 -0.535172581673 0.0 -0.844721794128 -0.0433057658374 -0.0314645841718 -0.998565614223 -0.165379807353 0.508987724781 -0.844721794128 -0.0433057658374 0.0314645841718 -0.998565614223 0.0165410321206 0.0509048737586 -0.998565614223 0.0173039957881 -0.0532547980547 0.998413026333 0.0173039957881 0.0532547980547 0.998413026333 -0.0452894680202 -0.0328989550471 0.998413026333 0.0560014657676 0.0 0.998413026333 -0.0452894680202 0.0328989550471 0.998413026333 0.0173039957881 -0.0532547980547 0.998413026333 0.0173039957881 0.0532547980547 0.998413026333 -0.0452894680202 -0.0328989550471 0.998413026333 0.0560014657676 0.0 0.998413026333 -0.0452894680202 0.0328989550471 0.998413026333 -0.0433057658374 0.0314645841718 -0.998565614223 0.0165410321206 0.0509048737586 -0.998565614223 0.0535294674337 0.0 -0.998565614223 0.0165410321206 -0.0509048737586 -0.998565614223 -0.0433057658374 -0.0314645841718 -0.998565614223 0.535172581673 0.0 0.844721794128 0.165379807353 -0.508987724781 0.844721794128 -0.432966083288 -0.314554274082 0.844721794128 -0.432966083288 0.314554274082 0.844721794128 0.165379807353 0.508987724781 0.844721794128 Faces 80 12 14 13 0 0 1 12 15 16 0 0 1 13 18 17 0 0 1 17 20 19 0 0 1 19 21 15 0 0 1 16 22 23 0 0 0 14 24 25 0 0 0 18 26 27 0 0 0 20 28 29 0 0 0 21 30 31 0 0 0 23 32 24 0 0 0 25 33 26 0 0 0 27 34 28 0 0 0 29 35 30 0 0 0 31 36 22 0 0 0 32 37 38 0 0 1 33 38 39 0 0 1 34 39 40 0 0 1 35 40 41 0 0 1 36 41 37 0 0 1 9 41 36 0 0 1 11 37 41 0 0 1 10 36 37 0 0 1 8 40 35 0 0 1 11 41 40 0 0 1 9 35 41 0 0 1 7 39 34 0 0 1 11 40 39 0 0 1 8 34 40 0 0 1 6 38 33 0 0 1 11 39 38 0 0 1 7 33 39 0 0 1 10 37 32 0 0 1 11 38 37 0 0 1 6 32 38 0 0 1 5 31 22 0 0 0 10 22 36 0 0 0 9 36 31 0 0 0 4 29 30 0 0 0 9 30 35 0 0 0 8 35 29 0 0 0 3 27 28 0 0 0 8 28 34 0 0 0 7 34 27 0 0 0 2 25 26 0 0 0 7 26 33 0 0 0 6 33 25 0 0 0 1 23 24 0 0 0 6 24 32 0 0 0 10 32 23 0 0 0 4 30 21 0 0 0 9 31 30 0 0 0 5 21 31 0 0 0 3 28 20 0 0 0 8 29 28 0 0 0 4 20 29 0 0 0 2 26 18 0 0 0 7 27 26 0 0 0 3 18 27 0 0 0 1 24 14 0 0 0 6 25 24 0 0 0 2 14 25 0 0 0 5 22 16 0 0 0 10 23 22 0 0 0 1 16 23 0 0 0 0 19 15 0 0 1 5 15 21 0 0 1 4 21 19 0 0 1 0 17 19 0 0 1 4 19 20 0 0 1 3 20 17 0 0 1 0 13 17 0 0 1 3 17 18 0 0 1 2 18 13 0 0 1 0 15 12 0 0 1 5 16 15 0 0 1 1 12 16 0 0 1 0 12 13 0 0 1 2 13 14 0 0 1 1 14 12 0 0 1 criticalmass-1.0.0.orig/data/models/BigMouthBug.model0000644000175000017500000004036507630537344022014 0ustar danieldanielName BigMouthBug Scale 1.0 1.0 1.0 Colors 5 0.69924813509 0.815037608147 0.845112800598 1.0 1.0 0.243609040976 1.0 1.0 1.0 1.0 0.0 0.153383523226 0.0 0.0 0.0 Vertices 146 0.313849449819 -0.758610873231 -3.65574540312 0.31384945854 -0.92184786315 -3.04096313335 -0.322235192076 -0.921847853908 -3.04096312187 -0.322235003939 -0.75861086399 -3.65574539164 -0.217256058908 -0.191454117821 -3.06337910369 -0.217256059546 -0.539960982364 -2.81817199401 0.208869951429 -0.539960949809 -2.81817227739 0.208869952068 -0.191454518176 -3.06337930734 -0.517020565125 -2.12585630046 -3.40297845601 -0.517020738842 -1.68055856898 -2.47903044257 0.50863500354 -1.6805587411 -2.4790303426 0.508634980399 -2.12585631536 -3.40297847451 1.54296346363 -3.14707242463 -1.18445216023 1.10091897736 -1.58407912031 -1.08241464417 -1.10930505318 -1.58407967833 -1.08241440609 -1.55134850582 -3.14707269634 -1.18445285174 -0.00419290223879 1.24151641701 -1.29368356255 0.408693755591 1.19946501961 -1.48167055775 0.166917758543 -0.82382030458 -2.26917343792 0.311978330322 -0.489364861254 -2.54244921997 0.408904748484 -0.0632164441847 -2.67123278125 0.442940668895 0.389748691761 -2.63591801822 0.408904765171 0.800569907641 -2.4418806894 0.311978361157 1.10670343232 -2.11866198 0.166917798831 1.26154336417 -1.71546908073 -0.175092585248 1.26156556033 -1.71555345954 -0.319974221918 1.10674487959 -2.11881829035 -0.416781153163 0.800624301371 -2.4420845869 -0.450775144888 0.389807379793 -2.63613846043 -0.416781169851 -0.0631620504546 -2.67143667874 -0.319974252753 -0.489323630444 -2.54260549046 -0.175092625536 -0.823797971136 -2.26925804342 -0.416992203031 -0.885844196732 -2.0355789799 -0.766946430088 -0.603970136384 -2.11082292981 -1.00077833521 -0.21295529774 -2.10728573848 -1.08288934043 0.227672538009 -2.02550562474 -1.00077831852 0.650831034712 -1.8779335088 -0.766946399253 0.992097999973 -1.68703557137 -0.416992162743 1.19951925612 -1.48187433677 -0.417079563388 1.11175007814 -1.15131786478 -0.767107814855 0.829921739424 -1.07624687817 -1.0009893399 0.438937335565 -1.07989954884 -1.08311768445 -0.00167937835806 -1.16172002137 -1.00098935659 -0.424848671646 -1.30925159225 -0.767107845691 -0.766146386687 -1.50003405945 -0.417079603677 -0.973613512561 -1.70502252728 -0.00419294584629 -1.01566496808 -1.89300910894 -0.175303646916 -1.03569148289 -1.47122391656 -0.320364209242 -0.880851619405 -1.06803078091 -0.417290613256 -0.574718428423 -0.744812189783 -0.45132651698 -0.163897204645 -0.550775175034 -0.417290596569 0.28906775471 -0.515460155692 -0.320364178407 0.715216431799 -0.64424353547 -0.175303606628 1.04967193436 -0.91751923891 0.166706777451 1.04964952175 -0.917434820238 0.311588404668 0.71517502328 -0.644087500808 0.408395321765 0.289013400284 -0.515256287817 0.442389296803 -0.163955872186 -0.550554378524 0.408395305078 -0.574772487226 -0.744608174935 0.311588373833 -0.880893244379 -1.06787470638 0.166706737163 -1.03571397411 -1.47113943866 0.408606314658 -0.973667551432 -1.7048184042 0.758560551168 -0.766246502052 -1.49965719866 0.99239217515 -0.424979596028 -1.30875933985 1.07450300019 -0.00182098085159 -1.16118706669 0.992392388697 0.438806549029 -1.07940727706 0.758560385144 0.829821663363 -1.07587004699 0.408606354946 1.11169580288 -1.15111381007 0.758721800747 0.991998140367 -1.68665878006 0.992603410077 0.650700110331 -1.87744125639 1.07473144265 0.227531053429 -2.02497275891 0.99260319653 -0.213085985176 -2.10679317164 0.75872196677 -0.604070291053 -2.1104460394 0.408693715303 -0.885898354075 -2.03537501404 2.47286409368 1.34726883437 0.192769981329 2.72567770907 1.48578418074 -0.897677276093 2.91075004271 1.32766904156 -0.718551813173 2.97849134634 1.21495257345 -0.446441176943 2.91075005071 1.17783764742 -0.154256538245 2.72567772294 1.22626865824 0.0797108546825 2.72567772839 1.50841638456 0.154626669667 2.91075006016 1.66653192449 -0.0244987516407 2.97849135724 1.77924799647 -0.296609586279 2.91075005215 1.81636273763 -0.588794143364 2.72567771452 1.7679314565 -0.822761568358 2.47286407767 1.64693186872 -0.935820569085 2.47286447791 1.90900556428 -0.785303745438 2.47286448483 2.06070984835 -0.523915123967 2.47286449029 2.06139538496 -0.221694056676 2.47286449283 1.91087903521 0.0403802677563 2.47286449177 1.64949013804 0.192084513077 2.22005105285 1.50841647052 0.154626619554 2.03497852235 1.66653150431 -0.0244986561107 1.96723741559 1.77924801116 -0.296609568032 2.03497851435 1.81636314452 -0.588793931597 2.22005084213 1.76793189675 -0.822761638962 2.22005083667 1.48578418809 -0.897677266969 2.03497850491 1.32766889707 -0.718551678897 1.96723740468 1.21495278523 -0.446441060713 2.03497851291 1.17783766015 -0.154256522443 2.2200510474 1.22626866559 0.0797108638062 2.47286408715 1.0851948335 0.042253079632 2.47286408023 0.933490667906 -0.219135384621 2.47286387791 0.932805187686 -0.521356540627 2.47286387537 1.08332198899 -0.783430592943 2.47286387643 1.34471056875 -0.93513509592 -2.48125062887 1.34726898495 0.192770011486 -2.73406388043 1.7679320872 -0.822761392349 -2.91913640506 1.8163629408 -0.588793880949 -2.98687789754 1.77924808314 -0.296609478638 -2.91913639706 1.6665317335 -0.0244986851897 -2.73406386656 1.50841630667 0.154626886657 -2.73406387201 1.22626885604 0.0797111104183 -2.9191364065 1.17783773212 -0.154256433049 -2.98687790844 1.21495297568 -0.446440814101 -2.9191364145 1.32766912626 -0.718551707976 -2.73406388588 1.4857843193 -0.897677098966 -2.48125064488 1.64693205917 -0.935820322473 -2.48125064926 1.3447107592 -0.935134849308 -2.48125065032 1.08332219881 -0.783430484176 -2.48125064778 0.932805259661 -0.521356451233 -2.48125064232 0.933490542799 -0.219135393209 -2.4812506354 1.08519522103 0.042253424226 -2.2284366059 1.22626884869 0.0797111012946 -2.04336408126 1.1778377194 -0.154256448852 -1.97562337622 1.21495288237 -0.446440773112 -2.04336408927 1.3276691534 -0.718551507324 -2.22843661976 1.48578431195 -0.89767710809 -2.22843661431 1.76793207986 -0.822761401473 -2.04336407983 1.81636292808 -0.588793896751 -1.97562336531 1.77924771415 -0.296609476394 -2.04336407182 1.66653164217 -0.024498641756 -2.22843660045 1.50841629932 0.154626877533 -2.4812506245 1.64949032849 0.192084759689 -2.48125062344 1.91087875288 0.040380377641 -2.48125062598 2.06139557541 -0.221693810064 -2.48125063144 2.0607100388 -0.523914877354 -2.48125063836 1.90900575473 -0.785303498826 1.5308313175 1.74388885133 -1.31154349798 1.34796184345 1.93511509837 -1.02426419574 1.31329637191 1.66426153462 -1.01136174628 1.46569082368 1.97820939507 -1.18672149378 -1.31894630773 1.63553180383 -0.981465494857 -1.33782585611 1.95245900202 -1.01173455332 -1.47510893068 2.00283454856 -1.20129104431 -1.5726115572 1.72861350168 -1.33171965972 Normals 146 -0.495759265243 -0.249373997207 0.61137974751 -0.682658072169 -0.171530880106 -0.431582717641 0.68265805161 -0.171530899941 -0.431582742277 0.495759280061 -0.249374011612 0.611379729618 0.474642762756 -0.551657477572 0.389989761702 0.613689251182 0.501184889146 -0.232246715597 -0.613512810237 0.501477713486 -0.232025606456 -0.47454197297 -0.551646969658 0.390171184288 0.454030247291 -0.556959983991 -0.406652279671 0.562863430188 -0.603779573296 -0.0185856452087 -0.562863448403 -0.603779556941 -0.0185856248957 -0.45403027815 -0.556959970798 -0.406652263285 0.465445282599 0.678866900069 0.0651789157718 -0.500874655608 -0.623972777251 0.203708368347 0.500874644829 -0.623972791804 0.203708350271 -0.465445260521 0.678866913593 0.0651789325691 1.54170114116e-08 0.798002340407 0.211887638821 0.0134309190833 0.81406186708 -0.137318126101 0.133603502947 -0.640537734598 -0.503578430152 0.416761320194 -0.5432552958 -0.461405067008 0.476003489939 0.0462073495639 -0.673058312258 0.316168120041 0.195747388169 -0.737186235461 0.294119269321 0.474799567665 -0.608091935967 0.230668933207 0.688540451464 -0.392992003971 0.133603530893 0.805978305594 -0.119489303077 -0.133427126246 0.805988228323 -0.119559875199 -0.230391750105 0.688555332734 -0.393097865975 -0.293766481781 0.474854702374 -0.608228119814 -0.315764974007 0.195787358996 -0.737342542461 -0.475852325276 0.0464893849032 -0.673144609043 -0.416710956763 -0.543391201723 -0.461334181376 -0.133427154192 -0.640527811869 -0.503649002274 -0.322316639186 -0.688968631941 -0.321185532008 -0.556513376644 -0.48651687546 -0.367855024702 -0.709570302294 -0.21724457451 -0.36198566594 -0.762739562863 0.0811261585243 -0.305568196837 -0.709570290985 0.368168520715 -0.206569297498 -0.598796775939 0.461249327133 -0.332305935806 -0.0111630164686 0.812672512677 -0.145484446555 0.00826519315007 0.673484039292 0.477584141233 -0.569415085901 0.219993555067 0.555979732714 -0.70972147053 0.217329485216 0.361637760722 -0.762890741805 -0.0810362942191 0.305185010621 -0.70972148184 -0.368083621081 0.206221392921 -0.556614162059 -0.604835682117 0.0777819344816 -0.322392229327 -0.757507452048 -0.0630599214885 -1.54170114116e-08 -0.798002340407 -0.211887638821 -0.133603530893 -0.805978305594 0.119489303077 -0.230668933207 -0.688540451464 0.392992003971 -0.294119269321 -0.474799567665 0.608091935967 -0.316168120041 -0.195747388169 0.737186235461 -0.294119258011 0.110628708033 0.763528408634 -0.230668912121 0.402927315534 0.682757412332 -0.133603502947 0.640537734598 0.503578430152 0.133427154192 0.640527811869 0.503649002274 0.230391771191 0.40289233132 0.682878476952 0.293766493092 0.110573573323 0.763664592481 0.315764974007 -0.195787358996 0.737342542461 0.293766481781 -0.474854702374 0.608228119814 0.230391750105 -0.688555332734 0.393097865975 0.133427126246 -0.805988228323 0.119559875199 0.32231661124 -0.75754742306 -0.0629036147195 0.556513355558 -0.604910662155 0.0780592627307 0.709570290985 -0.368168520715 0.206569297498 0.762739562863 -0.0811261585243 0.305568196837 0.709570302294 0.21724457451 0.36198566594 0.573245296805 0.225850449539 0.549641512375 0.00133554970252 0.672218175501 0.479421476213 0.597612474668 0.468252115133 -0.324520341415 0.70972148184 0.368083621081 -0.206221392921 0.762890741805 0.0810362942191 -0.305185010621 0.70972147053 -0.217329485216 -0.361637760722 0.556614140974 -0.486591855499 -0.367577696453 0.322392201381 -0.689008602953 -0.321029225239 1.13210657175e-08 -0.211887638821 0.798002340407 0.399374231143 -0.0471171308907 -0.721117064601 0.632235457156 -0.253828621573 -0.466432135594 0.715063582267 -0.398991118619 -0.105951414574 0.632235467733 -0.451774541933 0.279099899635 0.399374249925 -0.398620713981 0.602748037342 0.399374258537 0.0471171192862 0.721117050188 0.632235481364 0.253828603202 0.466432112777 0.715063597684 0.398991097841 0.105951388769 0.632235470787 0.451774523562 -0.279099922452 0.399374239755 0.398620702376 -0.602748051755 -1.13210657175e-08 0.211887638821 -0.798002340407 -7.79325232477e-10 0.621502190994 -0.543588813892 8.34339020374e-09 0.804573631121 -0.185416168248 1.54170114116e-08 0.798002340407 0.211887638821 1.8920212733e-08 0.606627702146 0.560115865771 1.80021904314e-08 0.269978456899 0.780291457556 -0.399374231143 0.0471171308907 0.721117064601 -0.632235457156 0.253828621573 0.466432135594 -0.715063582267 0.398991118619 0.105951414574 -0.335571125087 0.707718719679 -0.261230879571 0.0116921962314 0.579475417265 -0.588054813359 -0.0428378134503 -0.216450837981 -0.795638176946 -0.352983462013 -0.423078333438 -0.614911809325 -0.715063597684 -0.398991097841 -0.105951388769 -0.632235470787 -0.451774523562 0.279099922452 -0.399374239755 -0.398620702376 0.602748051755 7.79325232477e-10 -0.621502190994 0.543588813892 -8.34339020374e-09 -0.804573631121 0.185416168248 -1.54170114116e-08 -0.798002340407 -0.211887638821 -1.8920212733e-08 -0.606627702146 -0.560115865771 -1.80021904314e-08 -0.269978456899 -0.780291457556 1.13210657175e-08 -0.211887638821 0.798002340407 -0.399374249925 0.398620713981 -0.602748037342 -0.632235467733 0.451774541933 -0.279099899635 -0.715063582267 0.398991118619 0.105951414574 -0.632235457156 0.253828621573 0.466432135594 -0.399374231143 0.0471171308907 0.721117064601 -0.399374239755 -0.398620702376 0.602748051755 -0.632235470787 -0.451774523562 0.279099922452 -0.715063597684 -0.398991097841 -0.105951388769 -0.632235481364 -0.253828603202 -0.466432112777 -0.399374258537 -0.0471171192862 -0.721117050188 -1.13210657175e-08 0.211887638821 -0.798002340407 -1.80021904314e-08 -0.269978456899 -0.780291457556 -1.8920212733e-08 -0.606627702146 -0.560115865771 -1.54170114116e-08 -0.798002340407 -0.211887638821 -8.34339020374e-09 -0.804573631121 0.185416168248 7.79325232477e-10 -0.621502190994 0.543588813892 0.399374249925 -0.398620713981 0.602748037342 0.632235467733 -0.451774541933 0.279099899635 0.715063582267 -0.398991118619 -0.105951414574 0.352958229586 -0.426600739754 -0.612509970867 0.0290540867904 -0.223024989523 -0.79443891104 -0.0249971159231 0.583577904397 -0.583573731604 0.34187081702 0.710111663555 -0.246122114547 0.715063597684 0.398991097841 0.105951388769 0.632235481364 0.253828603202 0.466432112777 0.399374258537 0.0471171192862 0.721117050188 1.80021904314e-08 0.269978456899 0.780291457556 1.8920212733e-08 0.606627702146 0.560115865771 1.54170114116e-08 0.798002340407 0.211887638821 8.34339020374e-09 0.804573631121 -0.185416168248 -7.79325232477e-10 0.621502190994 -0.543588813892 0.0116669968824 -0.712768288513 0.416612915273 -0.390806684668 0.578210524942 0.441217022675 0.356460841145 -0.365334692691 -0.648990826209 -0.0248963133631 0.767804358795 -0.302627857946 0.360996651012 0.369571990916 0.644062382377 0.386548118865 0.57994753965 0.442684696758 0.0233844024479 0.766273372254 -0.306585634194 0.00705563429484 -0.709423906129 0.422390965045 Faces 171 0 1 6 7 0 1 1 2 5 6 0 1 2 3 4 5 0 1 3 0 7 4 0 1 1 0 11 10 0 1 2 1 10 9 0 1 3 2 9 8 0 1 0 3 8 11 0 1 11 8 15 12 0 1 8 9 14 15 0 1 9 10 13 14 0 1 10 11 12 13 0 1 46 18 73 0 0 3 73 18 19 72 0 3 72 19 20 71 0 3 71 20 21 70 0 3 70 21 22 69 0 3 69 22 23 68 0 3 68 23 24 17 0 3 24 16 17 0 0 3 25 16 24 0 0 3 23 26 25 24 0 3 22 27 26 23 0 3 21 28 27 22 0 3 20 29 28 21 0 3 18 31 30 19 0 3 46 31 18 0 0 3 46 32 31 0 0 3 31 32 33 30 0 3 30 33 34 29 0 3 29 34 35 28 0 3 28 35 36 27 0 3 27 36 37 26 0 3 26 37 38 25 0 3 38 16 25 0 0 3 39 16 38 0 0 3 36 41 40 37 0 3 35 42 41 36 0 3 34 43 42 35 0 3 33 44 43 34 0 3 32 45 44 33 0 3 46 45 32 0 0 3 46 47 45 0 0 3 45 47 48 44 0 3 44 48 49 43 0 3 43 49 50 42 0 3 42 50 51 41 0 3 41 51 52 40 0 3 40 52 53 39 0 3 53 16 39 0 0 3 54 16 53 0 0 3 52 55 54 53 0 3 51 56 55 52 0 3 50 57 56 51 0 3 49 58 57 50 0 3 48 59 58 49 0 3 47 60 59 48 0 3 46 60 47 0 0 3 46 61 60 0 0 3 60 61 62 59 0 3 59 62 63 58 0 3 58 63 64 57 0 3 57 64 65 56 0 3 56 65 66 55 0 3 55 66 67 54 0 3 67 16 54 0 0 3 17 16 67 0 0 3 65 69 68 66 0 3 64 70 69 65 0 3 63 71 70 64 0 3 62 72 71 63 0 3 61 73 72 62 0 3 46 73 61 0 0 3 85 75 105 0 0 2 105 75 76 104 0 2 104 76 77 103 0 2 103 77 78 102 0 2 102 78 79 101 0 2 79 74 101 0 0 4 80 74 79 0 0 4 78 81 80 79 0 2 77 82 81 78 0 2 76 83 82 77 0 2 75 84 83 76 0 2 85 84 75 0 0 2 85 86 84 0 0 2 84 86 87 83 0 2 83 87 88 82 0 2 82 88 89 81 0 2 81 89 90 80 0 2 90 74 80 0 0 4 91 74 90 0 0 4 89 92 91 90 0 2 88 93 92 89 0 2 87 94 93 88 0 2 86 95 94 87 0 2 85 95 86 0 0 2 85 96 95 0 0 2 94 97 98 93 0 2 93 98 99 92 0 2 92 99 100 91 0 2 100 74 91 0 0 4 101 74 100 0 0 4 99 102 101 100 0 2 98 103 102 99 0 2 97 104 103 98 0 2 96 105 104 97 0 2 85 105 96 0 0 2 117 107 137 0 0 2 137 107 108 136 0 2 136 108 109 135 0 2 135 109 110 134 0 2 134 110 111 133 0 2 111 106 133 0 0 4 112 106 111 0 0 4 110 113 112 111 0 2 109 114 113 110 0 2 108 115 114 109 0 2 107 116 115 108 0 2 117 116 107 0 0 2 117 118 116 0 0 2 116 118 119 115 0 2 115 119 120 114 0 2 114 120 121 113 0 2 113 121 122 112 0 2 122 106 112 0 0 4 123 106 122 0 0 4 121 124 123 122 0 2 120 125 124 121 0 2 119 126 125 120 0 2 118 127 126 119 0 2 117 127 118 0 0 2 117 128 127 0 0 2 126 129 130 125 0 2 125 130 131 124 0 2 124 131 132 123 0 2 132 106 123 0 0 4 133 106 132 0 0 4 131 134 133 132 0 2 130 135 134 131 0 2 129 136 135 130 0 2 128 137 136 129 0 2 117 137 128 0 0 2 4 7 20 29 0 3 4 29 30 5 0 3 6 7 20 19 0 3 5 30 19 6 0 3 66 68 138 140 0 0 17 67 139 141 0 0 67 66 140 139 0 0 68 17 141 138 0 0 40 39 143 142 0 0 37 40 142 145 0 0 39 38 144 143 0 0 38 37 145 144 0 0 129 143 144 0 0 0 128 129 144 0 0 0 129 142 143 0 0 0 126 142 129 0 0 0 126 127 145 0 0 0 126 145 142 0 0 0 94 141 139 0 0 0 94 95 141 0 0 0 96 97 138 0 0 0 97 140 138 0 0 0 94 139 140 0 0 0 94 140 97 0 0 0 95 138 141 0 0 0 95 96 138 0 0 0 128 144 145 0 0 0 127 128 145 0 0 0 criticalmass-1.0.0.orig/data/models/IceSprayPierce.model0000644000175000017500000007033710265636020022476 0ustar danieldanielName IceSprayPierce Scale 1.0 1.0 1.0 Colors 1 0.654643833637 0.925999999046 0.159999996424 Vertices 290 9.78889393806 4.96242582798 4.23646461964 11.304243207 4.96242582798 3.9350425005 12.5888946056 4.96242582798 3.07666692138 13.4472687244 4.96242582798 1.79201719165 13.7486908436 4.96242582798 0.276667766273 13.4472687244 4.96242582798 -1.23868134618 12.5888946056 4.96242582798 -2.52333274484 11.304243207 4.96242582798 -3.38170686364 10.8604079485 6.03393900394 -3.3817102015 11.7687923908 6.94232428074 -2.52333274484 12.3757572174 7.54928910732 -1.23868134618 12.5888929367 7.76242649555 0.276667609811 12.3757572174 7.54928910732 1.79201719165 11.7687923908 6.94232428074 3.07666692138 10.8604079485 6.03393900394 3.9350425005 9.78889393806 6.47777426243 3.9350425005 9.78889393806 7.76242649555 3.07666692138 9.78889393806 8.62080061436 1.79201719165 9.78889393806 8.9222227335 0.276667609811 9.78889393806 8.62080061436 -1.23868134618 9.78889393806 7.76242649555 -2.52333274484 9.78889393806 6.47777426243 -3.3817102015 8.71737992764 6.03393900394 -3.3817102015 7.80899381638 6.94232428074 -2.52333274484 7.20203065872 7.54928743839 -1.23868134618 6.98889327049 7.76242482662 0.276667609811 7.20203065872 7.54928743839 1.79201719165 7.80899381638 6.94232428074 3.07666692138 8.71737992764 6.03393900394 3.9350425005 8.27354383469 4.96242582798 3.9350425005 6.98889327049 4.96242582798 3.07666692138 6.13051915169 4.96242582798 1.79201719165 5.82909703255 4.96242582798 0.276667609811 6.13051915169 4.96242582798 -1.23868134618 6.98889327049 4.96242582798 -2.52333274484 8.27354383469 4.96242582798 -3.3817102015 9.78889393806 4.96242582798 -3.6831291914 8.71737992764 3.89091265202 -3.3817102015 7.80899548531 2.98252570629 -2.52333274484 7.20203232765 2.37556254864 -1.23868134618 6.98889493942 2.16242516041 0.276667609811 7.20203232765 2.37556254864 1.79201719165 7.80899548531 2.98252570629 3.07666692138 8.7173807621 3.89091265202 3.9350425005 9.78889393806 3.4470769763 3.9350425005 9.78889393806 2.16242516041 3.07666692138 9.78889560699 1.3040510416 1.79201719165 9.78889560699 1.00262892246 0.276667609811 9.78889560699 1.3040510416 -1.23868134618 9.78889393806 2.16242516041 -2.52333274484 9.78889393806 3.4470769763 -3.3817102015 10.8604079485 3.89091265202 -3.3817102015 11.7687940598 2.98252737522 -2.52333274484 12.3757572174 2.37556421757 -1.23868134618 12.5888946056 2.16242682934 0.276667609811 12.3757572174 2.37556421757 1.79201719165 11.7687940598 2.98252737522 3.07666692138 10.8604079485 3.89091265202 3.9350425005 -9.81110823154 4.96242582798 4.23646461964 -8.2957597971 4.96242582798 3.9350425005 -7.01110756397 4.96242582798 3.07666692138 -6.15273344517 4.96242582798 1.79201719165 -5.85131132603 4.96242582798 0.276667766273 -6.15273344517 4.96242582798 -1.23868134618 -7.01110756397 4.96242582798 -2.52333274484 -8.2957597971 4.96242582798 -3.38170686364 -8.73959505558 6.03393900394 -3.3817102015 -7.83120977879 6.94232428074 -2.52333274484 -7.22424662113 7.54928910732 -1.23868134618 -7.01111090183 7.76242649555 0.276667609811 -7.22424662113 7.54928910732 1.79201719165 -7.83120977879 6.94232428074 3.07666692138 -8.73959505558 6.03393900394 3.9350425005 -9.81110823154 6.47777426243 3.9350425005 -9.81110823154 7.76242649555 3.07666692138 -9.81110823154 8.62080061436 1.79201719165 -9.81110823154 8.9222227335 0.276667609811 -9.81110823154 8.62080061436 -1.23868134618 -9.81110823154 7.76242649555 -2.52333274484 -9.81110823154 6.47777426243 -3.3817102015 -10.8826214075 6.03393900394 -3.3817102015 -11.7910066843 6.94232428074 -2.52333274484 -12.397969842 7.54928743839 -1.23868134618 -12.6111088991 7.76242482662 0.276667609811 -12.397969842 7.54928743839 1.79201719165 -11.7910066843 6.94232428074 3.07666692138 -10.8826214075 6.03393900394 3.9350425005 -11.326456666 4.96242582798 3.9350425005 -12.6111088991 4.96242582798 3.07666692138 -13.4694830179 4.96242582798 1.79201719165 -13.7709051371 4.96242582798 0.276667609811 -13.4694830179 4.96242582798 -1.23868134618 -12.6111088991 4.96242582798 -2.52333274484 -11.326456666 4.96242582798 -3.3817102015 -9.81110823154 4.96242582798 -3.6831291914 -10.8826214075 3.89091265202 -3.3817102015 -11.7910066843 2.98252570629 -2.52333274484 -12.397969842 2.37556254864 -1.23868134618 -12.6111055613 2.16242516041 0.276667609811 -12.397969842 2.37556254864 1.79201719165 -11.7910066843 2.98252570629 3.07666692138 -10.8826214075 3.89091265202 3.9350425005 -9.81110823154 3.4470769763 3.9350425005 -9.81110823154 2.16242516041 3.07666692138 -9.81110823154 1.3040510416 1.79201719165 -9.81110823154 1.00262892246 0.276667609811 -9.81110823154 1.3040510416 -1.23868134618 -9.81110823154 2.16242516041 -2.52333274484 -9.81110823154 3.4470769763 -3.3817102015 -8.73959505558 3.89091265202 -3.3817102015 -7.83120977879 2.98252737522 -2.52333274484 -7.22424662113 2.37556421757 -1.23868134618 -7.01110756397 2.16242682934 0.276667609811 -7.22424662113 2.37556421757 1.79201719165 -7.83120977879 2.98252737522 3.07666692138 -8.73959505558 3.89091265202 3.9350425005 -0.0111067295074 9.16242599487 4.23646461964 1.50424170494 9.16242599487 3.9350425005 2.78889393806 9.16242599487 3.07666692138 3.64726805687 9.16242599487 1.79201719165 3.94869017601 9.16242599487 0.276667766273 3.64726805687 9.16242599487 -1.23868134618 2.78889393806 9.16242599487 -2.52333274484 1.50424170494 9.16242599487 -3.38170686364 1.06040644646 10.2339408398 -3.3817102015 1.96879172325 11.1423244476 -2.52333274484 2.57575654984 11.7492892742 -1.23868134618 2.78889226913 11.9624266624 0.276667609811 2.57575654984 11.7492892742 1.79201719165 1.96879172325 11.1423244476 3.07666692138 1.06040644646 10.2339408398 3.9350425005 -0.0111067295074 10.6777760983 3.9350425005 -0.0111067295074 11.9624266624 3.07666692138 -0.0111067295074 12.8208007812 1.79201719165 -0.0111067295074 13.1222229004 0.276667609811 -0.0111067295074 12.8208007812 -1.23868134618 -0.0111067295074 11.9624266624 -2.52333274484 -0.0111067295074 10.6777760983 -3.3817102015 -1.08261990547 10.2339408398 -3.3817102015 -1.9910068512 11.1423244476 -2.52333274484 -2.59797000885 11.7492876053 -1.23868134618 -2.81110739708 11.9624249935 0.276667609811 -2.59797000885 11.7492876053 1.79201719165 -1.9910068512 11.1423244476 3.07666692138 -1.08261990547 10.2339391708 3.9350425005 -1.52645516396 9.16242599487 3.9350425005 -2.81110739708 9.16242432594 3.07666692138 -3.66948151588 9.16242432594 1.79201719165 -3.97090363503 9.16242432594 0.276667609811 -3.66948151588 9.16242432594 -1.23868134618 -2.81110739708 9.16242432594 -2.52333274484 -1.52645516396 9.16242599487 -3.3817102015 -0.0111067295074 9.16242432594 -3.6831291914 -1.08261990547 8.09091114998 -3.3817102015 -1.99100518227 7.18252587318 -2.52333274484 -2.59796833992 6.57556271553 -1.23868134618 -2.81110572815 6.3624253273 0.276667609811 -2.59796833992 6.57556271553 1.79201719165 -1.99100518227 7.18252587318 3.07666692138 -1.08261990547 8.09091114998 3.9350425005 -0.0111067295074 7.64707589149 3.9350425005 -0.0111067295074 6.3624253273 3.07666692138 -0.0111050605774 5.5040512085 1.79201719165 -0.0111050605774 5.20262908936 0.276667609811 -0.0111050605774 5.5040512085 -1.23868134618 -0.0111067295074 6.3624253273 -2.52333274484 -0.0111067295074 7.64707589149 -3.3817102015 1.06040644646 8.09091114998 -3.3817102015 1.96879339218 7.18252754211 -2.52333274484 2.57575654984 6.57556438446 -1.23868134618 2.78889393806 6.36242699623 0.276667609811 2.57575654984 6.57556438446 1.79201719165 1.96879339218 7.18252754211 3.07666692138 1.06040644646 8.09091281891 3.9350425005 13.988892436 -4.83757483959 4.23646461964 15.5042433739 -4.83757483959 3.9350425005 16.7888922691 -4.83757483959 3.07666692138 17.6472697258 -4.83757483959 1.79201719165 17.9486918449 -4.83757483959 0.276667766273 17.6472697258 -4.83757483959 -1.23868134618 16.7888922691 -4.83757483959 -2.52333274484 15.5042433739 -4.83757483959 -3.38170686364 15.0604081154 -3.76606166363 -3.3817102015 15.9687933922 -2.85767638683 -2.52333274484 16.5757565498 -2.25071156025 -1.23868134618 16.7888922691 -2.03757417202 0.276667609811 16.5757565498 -2.25071156025 1.79201719165 15.9687933922 -2.85767638683 3.07666692138 15.0604081154 -3.76606166363 3.9350425005 13.988892436 -3.32222640514 3.9350425005 13.988892436 -2.03757417202 3.07666692138 13.988892436 -1.17920005322 1.79201719165 13.988892436 -0.877777934074 0.276667609811 13.988892436 -1.17920005322 -1.23868134618 13.988892436 -2.03757417202 -2.52333274484 13.988892436 -3.32222640514 -3.3817102015 12.9173792601 -3.76606166363 -3.3817102015 12.0089939833 -2.85767638683 -2.52333274484 11.4020308256 -2.25071322918 -1.23868134618 11.1888917685 -2.03757584095 0.276667609811 11.4020308256 -2.25071322918 1.79201719165 12.0089939833 -2.85767638683 3.07666692138 12.9173792601 -3.76606166363 3.9350425005 12.4735440016 -4.83757483959 3.9350425005 11.1888917685 -4.83757483959 3.07666692138 10.3305176497 -4.83757483959 1.79201719165 10.0290955305 -4.83757483959 0.276667609811 10.3305176497 -4.83757483959 -1.23868134618 11.1888917685 -4.83757483959 -2.52333274484 12.4735440016 -4.83757483959 -3.3817102015 13.988892436 -4.83757483959 -3.6831291914 12.9173792601 -5.90908801556 -3.3817102015 12.0089939833 -6.81747496128 -2.52333274484 11.4020308256 -7.42443811893 -1.23868134618 11.1888951063 -7.63757550716 0.276667609811 11.4020308256 -7.42443811893 1.79201719165 12.0089939833 -6.81747496128 3.07666692138 12.9173792601 -5.90908801556 3.9350425005 13.988892436 -6.35292327404 3.9350425005 13.9888957739 -7.63757550716 3.07666692138 13.9888957739 -8.49594962597 1.79201719165 13.9888957739 -8.79737174511 0.276667609811 13.9888957739 -8.49594962597 -1.23868134618 13.9888957739 -7.63757550716 -2.52333274484 13.988892436 -6.35292327404 -3.3817102015 15.0604081154 -5.90908801556 -3.3817102015 15.9687933922 -6.81747329235 -2.52333274484 16.5757565498 -7.42443645 -1.23868134618 16.7888922691 -7.63757383823 0.276667609811 16.5757565498 -7.42443645 1.79201719165 15.9687933922 -6.81747329235 3.07666692138 15.0604081154 -5.90908801556 3.9350425005 -14.0111050606 -4.83757483959 4.23646461964 -12.4957591295 -4.83757483959 3.9350425005 -11.2111068964 -4.83757483959 3.07666692138 -10.3527327776 -4.83757483959 1.79201719165 -10.0513106585 -4.83757483959 0.276667766273 -10.3527327776 -4.83757483959 -1.23868134618 -11.2111068964 -4.83757483959 -2.52333274484 -12.4957591295 -4.83757483959 -3.38170686364 -12.939594388 -3.76606166363 -3.3817102015 -12.0312091112 -2.85767638683 -2.52333274484 -11.4242426157 -2.25071156025 -1.23868134618 -11.2111068964 -2.03757417202 0.276667609811 -11.4242426157 -2.25071156025 1.79201719165 -12.0312091112 -2.85767638683 3.07666692138 -12.939594388 -3.76606166363 3.9350425005 -14.0111050606 -3.32222640514 3.9350425005 -14.0111050606 -2.03757417202 3.07666692138 -14.0111050606 -1.17920005322 1.79201719165 -14.0111050606 -0.877777934074 0.276667609811 -14.0111050606 -1.17920005322 -1.23868134618 -14.0111050606 -2.03757417202 -2.52333274484 -14.0111050606 -3.32222640514 -3.3817102015 -15.0826182365 -3.76606166363 -3.3817102015 -15.9910101891 -2.85767638683 -2.52333274484 -16.5979733467 -2.25071322918 -1.23868134618 -16.811109066 -2.03757584095 0.276667609811 -16.5979733467 -2.25071322918 1.79201719165 -15.9910101891 -2.85767638683 3.07666692138 -15.0826182365 -3.76606166363 3.9350425005 -15.526453495 -4.83757483959 3.9350425005 -16.811109066 -4.83757483959 3.07666692138 -17.669479847 -4.83757483959 1.79201719165 -17.9709019661 -4.83757483959 0.276667609811 -17.669479847 -4.83757483959 -1.23868134618 -16.811109066 -4.83757483959 -2.52333274484 -15.526453495 -4.83757483959 -3.3817102015 -14.0111050606 -4.83757483959 -3.6831291914 -15.0826182365 -5.90908801556 -3.3817102015 -15.9910035133 -6.81747496128 -2.52333274484 -16.597966671 -7.42443811893 -1.23868134618 -16.811109066 -7.63757550716 0.276667609811 -16.597966671 -7.42443811893 1.79201719165 -15.9910035133 -6.81747496128 3.07666692138 -15.0826182365 -5.90908801556 3.9350425005 -14.0111050606 -6.35292327404 3.9350425005 -14.0111050606 -7.63757550716 3.07666692138 -14.0111050606 -8.49594962597 1.79201719165 -14.0111050606 -8.79737174511 0.276667609811 -14.0111050606 -8.49594962597 -1.23868134618 -14.0111050606 -7.63757550716 -2.52333274484 -14.0111050606 -6.35292327404 -3.3817102015 -12.939594388 -5.90908801556 -3.3817102015 -12.0312057734 -6.81747329235 -2.52333274484 -11.4242426157 -7.42443645 -1.23868134618 -11.2111068964 -7.63757383823 0.276667609811 -11.4242426157 -7.42443645 1.79201719165 -12.0312057734 -6.81747329235 3.07666692138 -12.939594388 -5.90908801556 3.9350425005 Normals 290 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 Faces 320 36 8 7 0 1 0 7 8 9 6 1 0 6 9 10 5 1 0 5 10 11 4 1 0 4 11 12 3 1 0 3 12 13 2 1 0 2 13 14 1 1 0 14 0 1 0 1 0 0 14 15 0 1 0 14 13 16 15 1 0 13 12 17 16 1 0 12 11 18 17 1 0 11 10 19 18 1 0 10 9 20 19 1 0 9 8 21 20 1 0 8 36 21 0 1 0 36 22 21 0 1 0 21 22 23 20 1 0 20 23 24 19 1 0 19 24 25 18 1 0 18 25 26 17 1 0 17 26 27 16 1 0 16 27 28 15 1 0 28 0 15 0 1 0 0 28 29 0 1 0 28 27 30 29 1 0 27 26 31 30 1 0 26 25 32 31 1 0 25 24 33 32 1 0 24 23 34 33 1 0 23 22 35 34 1 0 22 36 35 0 1 0 36 37 35 0 1 0 35 37 38 34 1 0 34 38 39 33 1 0 33 39 40 32 1 0 32 40 41 31 1 0 31 41 42 30 1 0 30 42 43 29 1 0 43 0 29 0 1 0 0 43 44 0 1 0 43 42 45 44 1 0 42 41 46 45 1 0 41 40 47 46 1 0 40 39 48 47 1 0 39 38 49 48 1 0 38 37 50 49 1 0 37 36 50 0 1 0 36 51 50 0 1 0 50 51 52 49 1 0 49 52 53 48 1 0 48 53 54 47 1 0 47 54 55 46 1 0 46 55 56 45 1 0 45 56 57 44 1 0 57 0 44 0 1 0 0 57 1 0 1 0 57 56 2 1 1 0 56 55 3 2 1 0 55 54 4 3 1 0 54 53 5 4 1 0 53 52 6 5 1 0 52 51 7 6 1 0 51 36 7 0 1 0 94 66 65 0 1 0 65 66 67 64 1 0 64 67 68 63 1 0 63 68 69 62 1 0 62 69 70 61 1 0 61 70 71 60 1 0 60 71 72 59 1 0 72 58 59 0 1 0 58 72 73 0 1 0 72 71 74 73 1 0 71 70 75 74 1 0 70 69 76 75 1 0 69 68 77 76 1 0 68 67 78 77 1 0 67 66 79 78 1 0 66 94 79 0 1 0 94 80 79 0 1 0 79 80 81 78 1 0 78 81 82 77 1 0 77 82 83 76 1 0 76 83 84 75 1 0 75 84 85 74 1 0 74 85 86 73 1 0 86 58 73 0 1 0 58 86 87 0 1 0 86 85 88 87 1 0 85 84 89 88 1 0 84 83 90 89 1 0 83 82 91 90 1 0 82 81 92 91 1 0 81 80 93 92 1 0 80 94 93 0 1 0 94 95 93 0 1 0 93 95 96 92 1 0 92 96 97 91 1 0 91 97 98 90 1 0 90 98 99 89 1 0 89 99 100 88 1 0 88 100 101 87 1 0 101 58 87 0 1 0 58 101 102 0 1 0 101 100 103 102 1 0 100 99 104 103 1 0 99 98 105 104 1 0 98 97 106 105 1 0 97 96 107 106 1 0 96 95 108 107 1 0 95 94 108 0 1 0 94 109 108 0 1 0 108 109 110 107 1 0 107 110 111 106 1 0 106 111 112 105 1 0 105 112 113 104 1 0 104 113 114 103 1 0 103 114 115 102 1 0 115 58 102 0 1 0 58 115 59 0 1 0 115 114 60 59 1 0 114 113 61 60 1 0 113 112 62 61 1 0 112 111 63 62 1 0 111 110 64 63 1 0 110 109 65 64 1 0 109 94 65 0 1 0 152 124 123 0 1 0 123 124 125 122 1 0 122 125 126 121 1 0 121 126 127 120 1 0 120 127 128 119 1 0 119 128 129 118 1 0 118 129 130 117 1 0 130 116 117 0 1 0 116 130 131 0 1 0 130 129 132 131 1 0 129 128 133 132 1 0 128 127 134 133 1 0 127 126 135 134 1 0 126 125 136 135 1 0 125 124 137 136 1 0 124 152 137 0 1 0 152 138 137 0 1 0 137 138 139 136 1 0 136 139 140 135 1 0 135 140 141 134 1 0 134 141 142 133 1 0 133 142 143 132 1 0 132 143 144 131 1 0 144 116 131 0 1 0 116 144 145 0 1 0 144 143 146 145 1 0 143 142 147 146 1 0 142 141 148 147 1 0 141 140 149 148 1 0 140 139 150 149 1 0 139 138 151 150 1 0 138 152 151 0 1 0 152 153 151 0 1 0 151 153 154 150 1 0 150 154 155 149 1 0 149 155 156 148 1 0 148 156 157 147 1 0 147 157 158 146 1 0 146 158 159 145 1 0 159 116 145 0 1 0 116 159 160 0 1 0 159 158 161 160 1 0 158 157 162 161 1 0 157 156 163 162 1 0 156 155 164 163 1 0 155 154 165 164 1 0 154 153 166 165 1 0 153 152 166 0 1 0 152 167 166 0 1 0 166 167 168 165 1 0 165 168 169 164 1 0 164 169 170 163 1 0 163 170 171 162 1 0 162 171 172 161 1 0 161 172 173 160 1 0 173 116 160 0 1 0 116 173 117 0 1 0 173 172 118 117 1 0 172 171 119 118 1 0 171 170 120 119 1 0 170 169 121 120 1 0 169 168 122 121 1 0 168 167 123 122 1 0 167 152 123 0 1 0 210 182 181 0 1 0 181 182 183 180 1 0 180 183 184 179 1 0 179 184 185 178 1 0 178 185 186 177 1 0 177 186 187 176 1 0 176 187 188 175 1 0 188 174 175 0 1 0 174 188 189 0 1 0 188 187 190 189 1 0 187 186 191 190 1 0 186 185 192 191 1 0 185 184 193 192 1 0 184 183 194 193 1 0 183 182 195 194 1 0 182 210 195 0 1 0 210 196 195 0 1 0 195 196 197 194 1 0 194 197 198 193 1 0 193 198 199 192 1 0 192 199 200 191 1 0 191 200 201 190 1 0 190 201 202 189 1 0 202 174 189 0 1 0 174 202 203 0 1 0 202 201 204 203 1 0 201 200 205 204 1 0 200 199 206 205 1 0 199 198 207 206 1 0 198 197 208 207 1 0 197 196 209 208 1 0 196 210 209 0 1 0 210 211 209 0 1 0 209 211 212 208 1 0 208 212 213 207 1 0 207 213 214 206 1 0 206 214 215 205 1 0 205 215 216 204 1 0 204 216 217 203 1 0 217 174 203 0 1 0 174 217 218 0 1 0 217 216 219 218 1 0 216 215 220 219 1 0 215 214 221 220 1 0 214 213 222 221 1 0 213 212 223 222 1 0 212 211 224 223 1 0 211 210 224 0 1 0 210 225 224 0 1 0 224 225 226 223 1 0 223 226 227 222 1 0 222 227 228 221 1 0 221 228 229 220 1 0 220 229 230 219 1 0 219 230 231 218 1 0 231 174 218 0 1 0 174 231 175 0 1 0 231 230 176 175 1 0 230 229 177 176 1 0 229 228 178 177 1 0 228 227 179 178 1 0 227 226 180 179 1 0 226 225 181 180 1 0 225 210 181 0 1 0 268 240 239 0 1 0 239 240 241 238 1 0 238 241 242 237 1 0 237 242 243 236 1 0 236 243 244 235 1 0 235 244 245 234 1 0 234 245 246 233 1 0 246 232 233 0 1 0 232 246 247 0 1 0 246 245 248 247 1 0 245 244 249 248 1 0 244 243 250 249 1 0 243 242 251 250 1 0 242 241 252 251 1 0 241 240 253 252 1 0 240 268 253 0 1 0 268 254 253 0 1 0 253 254 255 252 1 0 252 255 256 251 1 0 251 256 257 250 1 0 250 257 258 249 1 0 249 258 259 248 1 0 248 259 260 247 1 0 260 232 247 0 1 0 232 260 261 0 1 0 260 259 262 261 1 0 259 258 263 262 1 0 258 257 264 263 1 0 257 256 265 264 1 0 256 255 266 265 1 0 255 254 267 266 1 0 254 268 267 0 1 0 268 269 267 0 1 0 267 269 270 266 1 0 266 270 271 265 1 0 265 271 272 264 1 0 264 272 273 263 1 0 263 273 274 262 1 0 262 274 275 261 1 0 275 232 261 0 1 0 232 275 276 0 1 0 275 274 277 276 1 0 274 273 278 277 1 0 273 272 279 278 1 0 272 271 280 279 1 0 271 270 281 280 1 0 270 269 282 281 1 0 269 268 282 0 1 0 268 283 282 0 1 0 282 283 284 281 1 0 281 284 285 280 1 0 280 285 286 279 1 0 279 286 287 278 1 0 278 287 288 277 1 0 277 288 289 276 1 0 289 232 276 0 1 0 232 289 233 0 1 0 289 288 234 233 1 0 288 287 235 234 1 0 287 286 236 235 1 0 286 285 237 236 1 0 285 284 238 237 1 0 284 283 239 238 1 0 283 268 239 0 1 0 criticalmass-1.0.0.orig/data/models/SixLegBugRed.model0000644000175000017500000004016107630537344022116 0ustar danieldanielName SixLegBugRed Scale 1.0 1.0 1.0 Colors 3 1.0 0.0 0.0 0.915263175964 0.0977443605661 0.093233063817 0.268646597862 0.43909779191 0.842105269432 Vertices 148 -9.39038904493e-08 2.77016563464e-07 0.557004395311 -1.82090998612e-08 1.00260822144 0.482379935217 -3.61697738768e-09 1.46622756179 0.27850217418 1.33997527084e-08 1.71324811776 -2.43474362832e-08 -3.61697738768e-09 1.46622756179 -0.278502221132 -1.82090968763e-08 1.00260831535 -0.482379935217 -0.163699543009 0.811127164313 -0.482379982169 -0.283535846065 1.40491322714 -0.27850217418 -0.425618666982 1.62225396784 -4.69519605417e-08 -0.283535869541 1.40491332104 0.27850217418 -0.163699531271 0.811127164313 0.482379935217 -0.264871433305 0.309823162772 0.482379935217 -0.458770671206 0.536629285691 0.27850217418 -0.529742772706 0.619646090784 -4.69519605417e-08 -0.458770671206 0.536629191787 -0.27850217418 -0.264871433305 0.309823139296 -0.482379982169 -0.264871479917 -0.309822777595 -0.482379982169 -0.458770739359 -0.536628865434 -0.27850217418 -0.52974286593 -0.619645742999 -4.69519605417e-08 -0.458770739359 -0.536628959338 0.27850217418 -0.264871479917 -0.309822754119 0.482379935217 -0.163699647106 -0.811126833166 0.482379935217 -0.283536012101 -1.40491304761 0.27850217418 -0.327399200308 -1.62225366633 -4.69519605417e-08 -0.283535988625 -1.4049129537 -0.27850217418 -0.163699635368 -0.81112692707 -0.482379982169 -1.06331513806e-07 -1.00260793973 -0.482379982169 -1.40643759231e-07 -1.73656784191 -0.27850217418 -1.65349270263e-07 -2.00521606727 -4.69519605417e-08 -1.45837418963e-07 -1.73656821752 0.27850217418 -1.29626582893e-07 -1.00260793973 0.482379935217 0.163699413891 -0.811126788698 0.482379935217 0.283535799113 -1.40491294542 0.27850217418 0.327398921685 -1.6222537652 -4.69519605417e-08 0.283535775637 -1.40491275762 -0.27850217418 0.163699437367 -0.811126694794 -0.482379982169 -4.44680143159e-08 3.206305614e-08 -0.557004395311 0.264871315925 -0.309822388065 -0.482379982169 0.458770671206 -0.536628440556 -0.27850217418 0.529742772706 -0.619645339553 -4.69519605417e-08 0.458770671206 -0.53662853446 0.27850217418 0.264871315925 -0.309822528921 0.482379935217 0.264871339061 0.309823505351 0.482379935217 0.458770739359 0.536629898377 0.27850217418 0.529742772026 0.619646775942 -4.69519605417e-08 0.458770645456 0.536629898377 -0.27850217418 0.264871315585 0.309823622731 -0.482379982169 0.163699424084 0.811127678301 -0.482379982169 0.283535800818 1.40491408055 -0.27850217418 0.425618687369 1.62225534177 -4.69519605417e-08 0.283535824294 1.40491408055 0.27850217418 0.163699459298 0.811127678301 0.482379935217 2.25508348166 -0.177238063868 -1.70891238592 2.25508353518 0.177237371114 -1.70891238592 2.46776915535 0.177237303785 -1.70891238592 2.46776910183 -0.177238166411 -1.70891238592 2.86806367269 -0.196931322877 -0.48691511899 2.86806391997 0.196930327628 -0.48691511899 2.64599861273 0.196930396373 -0.567740195849 2.64599855326 -0.196931183705 -0.567740195849 1.52551029818 -0.196931014516 0.547169321185 1.52551035765 0.196930565562 0.547169321185 1.62538243635 0.19693050353 0.761345008776 1.62538237687 -0.196931135238 0.761345008776 0.737787302358 -0.196931001215 0.761345196584 0.73778736183 0.196930637553 0.761345196584 0.837658877098 0.196930669425 0.547169133377 0.837658817626 -0.196930910653 0.547169133377 0.821172522229 -1.1730916654 0.547169133377 0.889565905352 -0.785213735662 0.547169133377 0.791211692259 -0.767871216001 0.761345196584 0.722818309136 -1.15574928659 0.761345196584 1.59692875731 -1.30987861945 0.761345008776 1.66532223434 -0.92200059581 0.761345008776 1.56696745782 -0.904658029198 0.547169321185 1.4985739808 -1.29253595893 0.547169321185 2.60203949149 -1.48710683421 -0.567740195849 2.67043278071 -1.09922890448 -0.567740195849 2.88912448985 -1.13779020707 -0.48691511899 2.82073082502 -1.52566813681 -0.48691511899 2.41968672366 -1.4357690635 -1.70891238592 2.48124042103 -1.08667880466 -1.70891238592 2.27178660378 -1.04974636087 -1.70891238592 2.21023234299 -1.39883652581 -1.70891238592 2.27178692079 1.04974567481 -1.70891238592 2.21023276543 1.39883585833 -1.70891238592 2.41968715725 1.43576814497 -1.70891238592 2.48124074919 1.08667796145 -1.70891238592 2.88912464565 1.13778924068 -0.48691511899 2.82073166137 1.52566728497 -0.48691511899 2.60203994058 1.48710604842 -0.567740195849 2.67043311267 1.09922809803 -0.567740195849 1.56696773102 0.904657555987 0.547169321185 1.49857437113 1.29253550637 0.547169321185 1.59692915288 1.30987813719 0.761345008776 1.66532251277 0.922000092897 0.761345008776 0.791211924149 0.767870883158 0.761345196584 0.722818658163 1.1557489744 0.761345196584 0.821172876493 1.17309141741 0.547169133377 0.889566142479 0.78521346702 0.547169133377 -0.821343110318 0.78521372536 0.547169133377 -0.752949633291 1.17309165509 0.547169133377 -0.654595608006 1.15574918239 0.761345196584 -0.722988991129 0.767871111796 0.761345196584 -1.59709953321 0.922000585509 0.761345008776 -1.52870605618 1.30987860915 0.761345008776 -1.43035127967 1.29253594863 0.547169321185 -1.49874475669 0.904658018897 0.547169321185 -2.60221007958 1.09922889417 -0.567740195849 -2.53381679036 1.48710682391 -0.567740195849 -2.7525084995 1.52566812651 -0.48691511899 -2.82090160091 1.13779010287 -0.48691511899 -2.41120800431 1.08147492049 -1.70891238592 -2.34965355572 1.43056517933 -1.70891238592 -2.14019936285 1.39363273554 -1.70891238592 -2.20175362364 1.04454257061 -1.70891238592 -2.18505055505 -0.182441231807 -1.70891238592 -2.18505050152 0.172034214913 -1.70891238592 -2.39773593389 0.172034247027 -1.70891238592 -2.39773598741 -0.182441281859 -1.70891238592 -2.79984103103 -0.196930467048 -0.48691511899 -2.79984115937 0.196931218672 -0.48691511899 -2.57777585213 0.196931185141 -0.567740195849 -2.5777759116 -0.196930406675 -0.567740195849 -1.45728765652 -0.196930575864 0.547169321185 -1.45728759705 0.196931015952 0.547169321185 -1.55715967574 0.196931031033 0.761345008776 -1.55715973522 -0.196930654687 0.761345008776 -0.6695646607 -0.19693078871 0.761345196584 -0.669564601228 0.196930897009 0.761345196584 -0.769435928689 0.19693091209 0.547169133377 -0.76943598816 -0.196930679726 0.547169133377 -0.758189059567 -1.07008417801 0.547169133377 -0.860127812213 -0.689643037494 0.547169133377 -0.763659558949 -0.663794448368 0.761345196584 -0.661720712399 -1.04423563584 0.761345196584 -1.51907171622 -1.27396205892 0.761345008776 -1.62101056277 -0.893520824498 0.761345008776 -1.52454155828 -0.867672094516 0.547169321185 -1.42260271173 -1.24811314113 0.547169321185 -2.50491136655 -1.5381167389 -0.567740195849 -2.6068500253 -1.15767559838 -0.567740195849 -2.82134875105 -1.21515030603 -0.48691511899 -2.7194097167 -1.59559135264 -0.48691511899 -2.31305081844 -1.53464119594 -1.70891238592 -2.40479546106 -1.19224400984 -1.70891238592 -2.19935752501 -1.1371969989 -1.70891238592 -2.10761250677 -1.47959399719 -1.70891238592 Normals 148 0.0 0.0 0.393861591816 1.66415515326e-08 0.110212015512 0.378115312809 3.4760494156e-08 0.230208350082 0.31956553721 5.94714464341e-08 0.393861591816 0.0 3.4760494156e-08 0.230208350082 -0.31956553721 1.66415515326e-08 0.110212015512 -0.378115312809 -0.142702247319 0.0557370812602 -0.362837802176 -0.207526466839 0.165275979778 -0.291089994801 -0.279538667243 0.277447276263 0.0 -0.0908596693154 0.182140120397 0.337174940439 0.0575160380196 0.0636101964005 0.38440180471 -0.0205663320397 0.0390171468745 0.391373443095 -0.356142638762 -0.144553294742 -0.0859675314202 -0.392443215018 0.0332595897471 0.0 -0.330167238431 0.0299180005084 -0.21264702566 -0.196083381129 0.0153616781539 -0.341225720835 -0.196083385768 -0.0153616189384 -0.341225720835 -0.33558829812 -0.0349903697117 -0.20316319915 -0.391241233217 -0.0453155992306 0.0 -0.391409500593 0.010649839979 -0.042454884154 0.0596796192653 -0.132785705493 0.365963018574 0.0409403452088 -0.0632736478759 0.386577441182 -0.177079669824 -0.145550980513 0.320274723098 -0.340143930692 -0.198547441405 0.0 -0.269249557246 -0.120020345056 -0.26118408439 -0.148952696164 -0.0505563872403 -0.361070835569 -1.32402784249e-08 -0.0876864016126 -0.383969071966 -3.5658910148e-08 -0.236158290329 -0.315202268041 -0.393861591816 5.94714464341e-08 0.0 -3.5658910148e-08 -0.236158290329 0.315202268041 -1.32402784249e-08 -0.0876864016126 0.383969071966 -0.0419740906094 -0.0609537624617 0.386841874623 0.15984285635 -0.149024830878 0.327655054824 0.340143870732 -0.198547544126 0.0 0.269249521001 -0.120020426367 -0.26118408439 0.148952680897 -0.0505564322228 -0.361070835569 -0.0 0.0 -0.393861591816 0.196083381129 -0.0153616781539 -0.341225720835 0.335588287553 -0.0349904710566 -0.20316319915 0.391241219532 -0.0453157173821 0.0 0.392587457857 0.00923135349089 -0.0301703731979 -0.0557731384565 -0.130057133563 0.367549666176 -0.0557730991804 0.130057150406 0.367549666176 0.34538463153 -0.155912359365 -0.107315173451 0.392443225062 0.0332594712325 0.0 0.330167247466 0.0299179008007 -0.21264702566 0.196083385768 0.0153616189384 -0.341225720835 0.142702264152 0.0557370381653 -0.362837802176 0.207526516751 0.165275917107 -0.291089994801 0.27953875103 0.277447191845 0.0 0.0932036422514 0.180577472668 0.337379298847 -0.0485129888891 0.0655334234042 0.385327345232 0.206492724787 -0.170156119449 -0.28901053942 0.206492776173 0.17015605709 -0.28901053942 0.186154839538 0.232095485599 -0.258058844516 0.186154769447 -0.232095541816 -0.258058844516 0.304384171498 -0.239547986129 0.071315068762 0.304384243839 0.239547894208 0.071315068762 -0.203079111742 -0.334482426122 -0.0447386950082 -0.203079010732 0.33448248745 -0.0447386950082 -0.0893812802079 -0.316608606619 -0.216553569633 -0.0893811845947 0.316608633611 -0.216553569633 0.117351967194 0.24815431072 0.282423531496 0.117351892254 -0.24815434616 0.282423531496 -0.0636222554258 -0.202910775804 0.331513496513 -0.0636221941484 0.202910795017 0.331513496513 0.127977720683 0.303434584942 -0.216036698975 0.127977629049 -0.303434623591 -0.216036698975 0.107158902841 -0.0959321856625 -0.36666018476 0.176118084894 0.242889508083 -0.255162025931 0.0282231582179 0.234559618763 0.31513014983 -0.117964984486 -0.175432883923 0.332306820314 0.0724809750816 -0.264766060404 0.282423531496 0.158664946676 0.224005972136 0.282423531496 -0.0330431205629 0.327318484684 -0.216553569633 -0.143002804757 -0.296270629058 -0.216553569633 -0.14141605731 0.364965357718 -0.0438732500611 -0.257698297946 -0.294623865628 -0.0436568895579 0.341730575917 0.182801150421 0.0701731618677 0.258635770106 -0.288601885133 0.070257299781 0.141908892526 -0.260991767111 -0.258575715174 0.222623713095 0.196504051137 -0.258731971298 0.231903194708 0.130513867378 -0.290356769509 0.17320915594 -0.202093448359 -0.290308690701 0.231903155294 -0.130513937411 -0.290356769509 0.173209216971 0.202093396051 -0.290308690701 0.141908971343 0.260991724256 -0.258575715174 0.222623653752 -0.196504118368 -0.258731971298 0.341730520713 -0.18280125362 0.0701731618677 0.258635857261 0.288601807027 0.070257299781 -0.141416167527 -0.364965315011 -0.0438732500611 -0.257698208972 0.29462394345 -0.0436568895579 -0.0330432194103 -0.327318474705 -0.216553569633 -0.143002715285 0.296270672244 -0.216553569633 0.0724810550387 0.264766038515 0.282423531496 0.158664879029 -0.224006020052 0.282423531496 0.0282230873829 -0.234559627286 0.31513014983 -0.117964931507 0.175432919547 0.332306820314 0.000372670352237 0.319361202222 -0.230496846403 0.176118011544 -0.242889561269 -0.255162025931 -0.193955861853 -0.238874807576 -0.245858494949 -0.00453151711008 0.32314752644 -0.225111855621 0.127725276045 0.176538730237 0.328087764092 -0.0215520171821 -0.22749182377 0.320791593756 -0.158664946676 -0.224005972136 0.282423531496 -0.0724809750816 0.264766060404 0.282423531496 0.143002804757 0.296270629058 -0.216553569633 0.0330431205629 -0.327318484684 -0.216553569633 0.257638199437 0.294623865637 -0.0440535514585 0.141187671207 -0.365157696389 -0.0429717460082 -0.258635770086 0.288734101854 0.0697043758867 -0.341874812298 -0.182524697255 0.0701491224639 -0.222347260064 -0.197249284435 -0.258407439347 -0.141872833511 0.260390758535 -0.259200763148 -0.173257234866 0.201312144267 -0.290813541657 -0.231590682483 -0.130670135288 -0.290537088514 -0.206216323067 -0.170408482609 -0.289058618228 -0.206492724894 0.169446945299 -0.289431228987 -0.186118710439 0.231446454432 -0.258671872789 -0.185830295957 -0.232816691238 -0.257650174652 -0.304552519629 -0.239307500145 0.0714112263772 -0.304360132069 0.239716285428 0.0708342630791 0.202934774278 -0.334686822361 -0.0438732500611 0.203079111732 0.334410307911 -0.0452675794988 0.0893811845947 -0.316608633611 -0.216553569633 0.0893812802079 0.316608606619 -0.216553569633 -0.117351892254 0.24815434616 0.282423531496 -0.117351967194 -0.24815431072 0.282423531496 0.0741397564239 -0.200795258643 0.330611995395 0.0741398170624 0.200795236254 0.330611995395 -0.147041451298 0.30425201315 -0.202309776839 -0.14704154318 -0.304251968745 -0.202309776839 -0.102555244542 -0.0920496729033 -0.368956018251 -0.182248246819 0.246207093823 -0.247565339571 -0.029990033635 0.252758019651 0.300561825085 0.123434062357 -0.161165099913 0.337511515568 -0.0491260619689 -0.270078914613 0.282423531496 -0.177584467195 0.209329520847 0.282423531496 0.00438737475002 0.328953228918 -0.216553569633 0.168280925138 -0.282675970646 -0.216553569633 0.285813164301 -0.268287982652 -0.03813967912 0.282122997792 -0.272567113351 -0.0351106203376 -0.355794022156 0.155131056838 0.0668075396942 -0.358594684021 0.149205168155 0.0653410949795 -0.234343241596 0.177452305729 -0.262121644614 -0.238634394066 0.167439589507 -0.264838167671 -0.242661121192 0.103793331793 -0.29234009075 -0.237792999791 0.112243439729 -0.293205532763 Faces 156 36 6 5 0 0 2 5 6 7 4 0 2 4 7 8 3 0 2 3 8 9 2 0 2 2 9 10 1 0 2 10 0 1 0 0 2 11 0 10 0 0 2 8 13 12 9 0 2 7 14 13 8 0 2 6 15 14 7 0 2 36 15 6 0 0 2 36 16 15 0 0 2 15 16 17 14 0 2 14 17 18 13 0 2 13 18 19 12 0 2 20 0 11 0 0 2 21 0 20 0 0 2 18 23 22 19 0 2 17 24 23 18 0 2 16 25 24 17 0 2 36 25 16 0 0 2 36 26 25 0 0 2 25 26 27 24 0 2 24 27 28 23 0 2 23 28 29 22 0 2 22 29 30 21 0 2 30 0 21 0 0 2 31 0 30 0 0 2 29 32 31 30 0 2 28 33 32 29 0 2 27 34 33 28 0 2 26 35 34 27 0 2 36 35 26 0 0 2 36 37 35 0 0 2 35 37 38 34 0 2 34 38 39 33 0 2 33 39 40 32 0 2 41 0 31 0 0 2 42 0 41 0 0 2 39 44 43 40 0 2 38 45 44 39 0 2 37 46 45 38 0 2 36 46 37 0 0 2 36 47 46 0 0 2 46 47 48 45 0 2 45 48 49 44 0 2 44 49 50 43 0 2 51 0 42 0 0 2 1 0 51 0 0 2 50 2 1 51 0 2 49 3 2 50 0 2 48 4 3 49 0 2 47 5 4 48 0 2 36 5 47 0 0 2 52 53 54 55 0 0 52 59 58 53 0 0 53 58 57 54 0 0 54 57 56 55 0 0 55 56 59 52 0 0 56 63 60 59 0 0 57 62 63 56 0 0 58 61 62 57 0 0 59 60 61 58 0 0 60 67 66 61 0 0 61 66 65 62 0 0 62 65 64 63 0 0 63 64 67 60 0 0 83 82 81 80 0 0 83 76 77 82 0 0 82 77 78 81 0 0 81 78 79 80 0 0 80 79 76 83 0 0 79 72 75 76 0 0 78 73 72 79 0 0 77 74 73 78 0 0 76 75 74 77 0 0 75 68 69 74 0 0 74 69 70 73 0 0 73 70 71 72 0 0 72 71 68 75 0 0 84 85 86 87 0 0 84 91 90 85 0 0 85 90 89 86 0 0 86 89 88 87 0 0 87 88 91 84 0 0 88 95 92 91 0 0 89 94 95 88 0 0 90 93 94 89 0 0 91 92 93 90 0 0 92 99 98 93 0 0 93 98 97 94 0 0 94 97 96 95 0 0 95 96 99 92 0 0 115 112 113 114 0 0 115 114 109 108 0 0 114 113 110 109 0 0 113 112 111 110 0 0 112 115 108 111 0 0 111 108 107 104 0 0 110 111 104 105 0 0 109 110 105 106 0 0 108 109 106 107 0 0 107 106 101 100 0 0 106 105 102 101 0 0 105 104 103 102 0 0 104 107 100 103 0 0 116 119 118 117 0 0 116 117 122 123 0 0 117 118 121 122 0 0 118 119 120 121 0 0 119 116 123 120 0 0 120 123 124 127 0 0 121 120 127 126 0 0 122 121 126 125 0 0 123 122 125 124 0 0 124 125 130 131 0 0 125 126 129 130 0 0 126 127 128 129 0 0 127 124 131 128 0 0 147 144 145 146 0 0 147 146 141 140 0 0 146 145 142 141 0 0 145 144 143 142 0 0 144 147 140 143 0 0 143 140 139 136 0 0 142 143 136 137 0 0 141 142 137 138 0 0 140 141 138 139 0 0 139 138 133 132 0 0 138 137 134 133 0 0 137 136 135 134 0 0 136 139 132 135 0 0 10 102 103 11 0 0 9 101 102 10 0 0 9 12 100 101 0 0 11 103 100 12 0 0 42 96 97 51 0 0 50 51 97 98 0 0 43 50 98 99 0 0 42 43 99 96 0 0 11 129 128 20 0 0 11 12 130 129 0 0 19 20 128 131 0 0 12 19 131 130 0 0 19 22 132 133 0 0 21 135 132 22 1 1 20 134 135 21 0 0 19 133 134 20 0 0 41 64 65 42 0 0 31 71 70 41 0 0 42 65 66 43 0 0 40 43 66 67 0 0 40 67 64 41 0 0 40 41 70 69 0 0 32 40 69 68 0 0 31 32 68 71 1 1 criticalmass-1.0.0.orig/data/models/BigFoot.model0000644000175000017500000002104107630537344021157 0ustar danieldanielName BigFoot Scale 1.0 1.0 1.0 Colors 4 1.0 1.0 1.0 1.0 0.0 0.273684233427 0.0731578841805 0.649624049664 0.0781954973936 1.0 1.0 0.0 Vertices 78 1.43016683876e-07 0.0 0.754416255213 0.534340085319 0.435723978867 -0.653343675683 0.925504021707 0.754695996523 -0.377208085196 1.068680001 0.871447957733 -6.35925355458e-08 0.925504021707 0.754696081344 0.377208085196 0.534340042908 0.435723978867 0.653343590861 -0.534339661212 0.435723978867 0.653343590861 -0.925503512778 0.754696081344 0.377208085196 -1.06867949207 0.871447957733 -6.35925355458e-08 -0.925503343135 0.754695996523 -0.377208085196 -0.534339618801 0.435723978867 -0.653343675683 -1.79715603639e-07 1.51672662975e-14 -0.754416255213 -1.06867949207 6.4449435534e-08 -0.653343675683 -1.8510071952 1.06455199768e-07 -0.377208085196 -2.13735932342 9.21700819013e-08 -6.35925355458e-08 -1.85100753448 1.1213717118e-07 0.377208085196 -1.06867949207 4.60850409507e-08 0.653343590861 -0.534339788444 -0.435723851634 0.653343590861 -0.925503852064 -0.754695911701 0.377208085196 -1.06867966171 -0.871447703269 -6.35925355458e-08 -0.925503682421 -0.75469582688 -0.377208085196 -0.534339830855 -0.435723851634 -0.653343675683 0.534339703622 -0.435723936456 -0.653343675683 0.925503512778 -0.754695911701 -0.377208085196 1.06867932242 -0.87144778809 -6.35925355458e-08 0.925503512778 -0.754695996523 0.377208085196 0.534339703622 -0.435723894045 0.653343590861 1.06867949207 -1.13860647872e-07 0.653343590861 1.8510071952 -1.79912778101e-07 0.377208085196 2.13735898413 -2.27721295744e-07 -6.35925355458e-08 1.8510071952 -1.74230796578e-07 -0.377208085196 1.06867966171 -1.35066023106e-07 -0.653343675683 -0.49360651039 -2.25955182052 1.43279088305 -0.195992991982 -2.00874329405 1.60990055201 -0.472734822941 -1.62096704359 1.60990055201 -1.0872129052 -1.57474305773 1.43279088305 1.08721256591 -1.57474305773 1.43279088305 0.47273473812 -1.62096704359 1.60990055201 0.195992801133 -2.00874329405 1.60990055201 0.493606171104 -2.25955182052 1.43279088305 -1.81750558626 2.65725507052 0.443862686703 -1.07683406152 1.8557341278 1.2359999116 1.07683440081 1.8557341278 1.2359999116 1.81750626483 2.65725507052 0.443862686703 -0.9970914176 0.813071934717 -0.188604063803 -1.38825526917 0.377348040672 -0.377208085196 -1.99418334413 9.93126408346e-08 -0.188604063803 -1.60301949256 0.435724021277 -6.35925355458e-08 -1.60301949256 -0.435723809224 -6.35925355458e-08 -1.38825543881 -0.377347871029 -0.377208085196 -0.997091672065 -0.813071765074 -0.188604063803 -1.4956375081 -0.406535840126 -0.188604063803 -1.49563733845 0.40653605218 -0.188604063803 1.38825560845 0.37734791344 -0.377208085196 0.997092011351 0.813071934717 -0.188604063803 1.60301949256 0.435723851634 -6.35925355458e-08 1.99418300484 -2.00976046161e-07 -0.188604063803 0.9970914176 -0.813071849896 -0.188604063803 1.60301915328 -0.435724021277 -6.35925355458e-08 1.38825535399 -0.377348040672 -0.377208085196 1.49563716881 -0.406536009769 -0.188604063803 1.4956375081 0.406535882537 -0.188604063803 -2.02300857408 1.64964960377 -1.46834093124 -1.77340654864 1.44611311763 -0.805836321402 -3.03451362451 0.82482497153 -1.46834093124 -2.6601099926 0.72305672846 -0.805836321402 2.66011033189 0.723056389174 -0.805836321402 1.77340739685 1.44611311763 -0.805836321402 3.03451430308 0.824824632244 -1.46834093124 2.02300993122 1.64964960377 -1.46834093124 2.66010982296 -0.72305672846 -0.805836321402 3.03451362451 -0.82482497153 -1.46834093124 1.77340654864 -1.44611311763 -0.805836321402 2.02300891336 -1.64964960377 -1.46834093124 -2.66011033189 -0.723056389174 -0.805836321402 -1.77340688792 -1.44611277835 -0.805836321402 -3.03451362451 -0.824824632244 -1.46834093124 -2.02300925265 -1.64964960377 -1.46834093124 Normals 78 0.0 0.0 0.711534321308 0.0712468057596 0.287983881845 -0.646715129849 -0.147509774839 0.485937544026 -0.498358507748 -0.208441968004 0.329654904002 -0.595098659475 0.378795901282 0.055177732899 0.599767404529 0.0712468057596 0.287983881845 0.646715129849 -0.0712468057596 0.287983881845 0.646715129849 -0.378795901282 0.055177732899 0.599767404529 -0.208441968004 -0.329654904002 0.595098659475 0.147509774839 0.485937544026 -0.498358507748 -0.0712468057596 0.287983881845 -0.646715129849 0.0 0.0 -0.711534321308 -0.197736497934 0.0 -0.68350030632 -0.478380711686 0.0 -0.526696522995 0.0 -0.711534321308 0.0 -0.525697622589 0.050487300047 0.47681723937 -0.117000244346 0.250873012015 0.655466291333 0.0112483528579 -0.0236910295583 0.711034892311 -0.406743059053 -0.547195462358 0.203447529591 -0.267767249642 -0.659222950788 0.0 0.147509774839 -0.485937544026 -0.498358507748 -0.0712468057596 -0.287983881845 -0.646715129849 0.0712468057596 -0.287983881845 -0.646715129849 -0.147509774839 -0.485937544026 -0.498358507748 0.267767249642 -0.659222950788 0.0 0.406743059053 -0.547195462358 0.203447529591 -0.0112483528579 -0.0236910295583 0.711034892311 0.117000244346 0.250873012015 0.655466291333 0.381879417306 0.176064954334 0.573948290985 0.0 0.711534321308 0.0 0.478380711686 0.0 -0.526696522995 0.197736497934 0.0 -0.68350030632 0.247224902876 -0.104905005791 -0.658897236224 0.272587973621 -0.0903125480294 -0.650992975016 0.0674032572797 0.192785466924 0.681567648422 -0.0963275905493 -0.344877097792 -0.614859270083 0.0963275905493 -0.344877097792 -0.614859270083 -0.0674032572797 0.192785466924 0.681567648422 0.272587973621 0.0903125480294 0.650992975016 -0.247224902876 -0.104905005791 -0.658897236224 -0.242925343405 0.0104883290161 0.668690684311 -0.295562407283 -0.0201732049194 0.646910558587 0.295562407283 -0.0201732049194 0.646910558587 -0.242925343405 -0.0104883290161 -0.668690684311 -0.0472083393814 0.708363948068 -0.0475123502434 -0.0579572486631 0.333520177389 -0.62582533301 -0.566717215619 0.0 -0.430216942918 -0.449651838963 0.551429878917 0.0 -0.449651838963 -0.551429878917 0.0 -0.0579572486631 -0.333520177389 -0.62582533301 -0.0472083393814 -0.708363948068 -0.0475123502434 -0.331609255 -0.628257419906 -0.0398469649372 -0.331609255 0.628257419906 -0.0398469649372 0.0579572486631 0.333520177389 -0.62582533301 0.0472083393814 0.708363948068 -0.0475123502434 0.449651838963 0.551429878917 0.0 0.566717215619 0.0 -0.430216942918 0.0472083393814 -0.708363948068 -0.0475123502434 0.449651838963 -0.551429878917 0.0 0.0579572486631 -0.333520177389 -0.62582533301 0.331609255 -0.628257419906 -0.0398469649372 0.331609255 0.628257419906 -0.0398469649372 0.278233862366 -0.490845104016 -0.43349588768 0.0322032965859 0.619376015008 0.34869894257 0.286420409529 -0.522505535044 -0.38884992102 0.114133871365 -0.652817061394 -0.258994416265 0.114133871365 0.652817061394 0.258994416265 -0.0322032965859 0.619376015008 0.34869894257 -0.286420409529 -0.522505535044 -0.38884992102 0.278233862366 0.490845104016 0.43349588768 0.114133871365 -0.652817061394 0.258994416265 -0.286420409529 0.522505535044 -0.38884992102 -0.0322032965859 -0.619376015008 0.34869894257 0.278233862366 -0.490845104016 0.43349588768 -0.114133871365 -0.652817061394 0.258994416265 0.0322032965859 -0.619376015008 0.34869894257 0.286420409529 0.522505535044 -0.38884992102 -0.278233862366 -0.490845104016 0.43349588768 Faces 98 11 1 31 0 0 1 1 2 53 0 0 1 30 53 61 56 0 1 29 55 28 0 0 1 28 4 5 27 0 1 5 0 27 0 0 1 6 0 5 0 0 1 4 7 6 5 0 1 1 10 9 2 0 1 11 10 1 0 0 1 11 12 10 0 0 1 12 13 45 0 0 1 8 47 7 0 0 1 7 15 16 6 0 1 17 0 16 0 0 1 14 48 15 0 0 1 13 49 51 46 0 1 21 20 49 0 0 1 11 21 12 0 0 1 11 22 21 0 0 1 21 22 23 20 0 1 24 19 50 0 0 1 19 24 25 18 0 1 18 25 26 17 0 1 26 0 17 0 0 1 27 0 26 0 0 1 24 58 25 0 0 1 31 30 59 0 0 1 11 31 22 0 0 1 18 17 33 32 0 1 15 18 32 35 0 1 17 16 34 33 0 1 16 15 35 34 0 1 35 32 33 34 1 0 25 28 36 39 0 1 27 26 38 37 0 1 26 25 39 38 0 1 28 27 37 36 0 1 39 36 37 38 1 0 8 7 41 40 0 3 3 8 40 43 0 3 7 4 42 41 0 3 4 3 43 42 0 3 43 40 41 42 0 3 0 6 16 0 0 1 50 20 23 0 0 1 50 23 57 0 0 1 49 13 12 0 0 1 49 12 21 0 0 1 19 48 51 50 0 1 14 46 51 48 0 1 48 19 18 0 0 1 48 18 15 0 0 1 47 14 15 0 0 1 47 15 7 0 0 1 13 46 52 45 0 1 14 47 52 46 0 1 8 44 52 47 0 1 45 9 10 0 0 1 45 10 12 0 0 1 44 8 3 0 0 1 44 3 54 0 0 1 57 24 50 0 0 1 59 23 22 0 0 1 59 22 31 0 0 1 30 56 60 59 0 1 29 58 60 56 0 1 24 57 60 58 0 1 58 29 28 0 0 1 58 28 25 0 0 1 55 3 4 0 0 1 55 4 28 0 0 1 3 55 61 54 0 1 29 56 61 55 0 1 53 30 31 0 0 1 53 31 1 0 0 1 2 9 44 0 0 1 54 2 44 0 0 1 45 52 65 64 0 2 52 44 63 65 0 2 9 45 64 62 0 2 44 9 62 63 0 2 62 64 65 63 1 2 2 54 67 69 0 2 54 61 66 67 0 2 61 53 68 66 0 2 53 2 69 68 0 2 69 67 66 68 1 2 57 23 73 72 0 2 60 57 72 70 0 2 59 60 70 71 0 2 23 59 71 73 0 2 73 71 70 72 1 2 50 51 74 75 0 2 20 50 75 77 0 2 49 20 77 76 0 2 51 49 76 74 0 2 77 75 74 76 1 2 criticalmass-1.0.0.orig/data/models/DoubleWingBlue.model0000644000175000017500000001255107630537344022503 0ustar danieldanielName DoubleWingBlue Scale 1.0 1.0 1.0 Colors 5 0.348872303963 0.559398531914 1.0 1.0 1.0 1.0 0.0 0.13533835113 0.421052604914 0.0375939682126 0.270676672459 0.616541385651 1.0 0.0150375859812 0.616541326046 Vertices 50 -8.60939607503e-07 -0.924824291223 0.0782648384401 0.280740668495 0.0139987834338 -1.23187910207 0.486257680135 1.34934665291 -0.974891124041 0.561482186822 1.83811831578 -0.623839217483 0.486257740838 1.34934738133 -0.272787310926 0.280740668495 0.0139987834338 -0.0157993328984 -0.280742337807 0.0139987834338 -0.0157993328984 -0.486259288744 1.34934738133 -0.272787310926 -0.56148376508 1.83811831578 -0.623839217483 -0.486259258393 1.34934665291 -0.974891124041 -0.280742307455 0.0139987834338 -1.23187910207 -1.03050276622e-06 -0.924824291223 -1.32594327341 -0.56148376508 -0.924823927009 -1.23187910207 -0.972517727658 -0.924823927009 -0.974891124041 -1.12296692314 -0.924823927009 -0.623839217483 -0.972517970466 -0.924823623498 -0.272787310926 -0.56148376508 -0.924823927009 -0.0157993328984 -0.280742368158 -1.49128035784 -0.0157993328984 -0.486259470851 -1.90595560422 -0.272787310926 -0.561483886484 -2.05773678868 -0.623839217483 -0.486259410149 -1.90595524001 -0.974891124041 -0.280742398509 -1.49128035784 -1.23187910207 0.280740486389 -1.49128035784 -1.23187910207 0.486257406975 -1.90595560422 -0.974891124041 0.561481822608 -2.05773678868 -0.623839217483 0.486257467678 -1.90595560422 -0.272787310926 0.280740486389 -1.49128035784 -0.0157993328984 0.561481944013 -0.924824291223 -0.0157993328984 0.972515845889 -0.924824291223 -0.272787310926 1.12296473786 -0.924824291223 -0.623839217483 0.972515845889 -0.924824291223 -0.974891124041 0.561482004715 -0.924824291223 -1.23187910207 -2.26425936306 -0.391531824169 -0.09525086953 -2.8985711716 0.294934852399 -0.09525086953 -3.0160350803 0.950860265617 -0.09525086953 -2.42166048112 1.25485902283 -0.09525086953 -1.27332245508 0.826819088482 -0.623839217483 -1.76056867099 1.40944732108 -0.271446975397 -1.7713754885 1.97140146772 -0.271446975397 -1.20942134186 2.12269667014 -0.271446975397 1.2028105051 2.12269667014 -0.271446975397 1.76476453034 1.97140146772 -0.271446975397 1.75395771282 1.40944732108 -0.271446975397 1.26671149691 0.826819088482 -0.623839217483 2.41504952295 1.25485902283 -0.09525086953 3.00942412214 0.950860265617 -0.09525086953 2.89196021343 0.294934852399 -0.09525086953 2.2576484049 -0.391531793818 -0.09525086953 1.11635596497 -0.924823927009 -0.623839217483 0.554872746213 1.83811831578 -0.623839217483 Normals 50 0.0 -0.0240562983479 1.01810358276 0.229933450611 0.131843431684 -0.983293404931 0.474257183671 0.351893300129 -0.829662562913 0.47490988437 0.0987737915781 0.895428873466 0.474257183671 0.351893300129 0.829662562913 0.229933450611 0.131843431684 0.983293404931 -0.229933450611 0.131843431684 0.983293404931 -0.474257183671 0.351893300129 0.829662562913 0.113474861842 -0.0798768543746 1.00890373531 -0.474257183671 0.351893300129 -0.829662562913 -0.229933450611 0.131843431684 -0.983293404931 0.0 -0.0240562983479 -1.01810358276 -0.384745375865 -0.0538624861794 -0.941365830253 -0.77912571275 -0.103653431169 -0.647562012104 -0.985531192539 -0.116178865318 -0.228845636348 -0.77912571275 -0.103653431169 0.647562012104 -0.384745375865 -0.0538624861794 0.941365830253 -0.215916152998 -0.31876150853 0.942826629352 -0.418902822647 -0.663506301921 0.649147068662 -0.526969692713 -0.871434739889 0.0 -0.418902822647 -0.663506301921 -0.649147068662 -0.215916152998 -0.31876150853 -0.942826629352 0.215916152998 -0.31876150853 -0.942826629352 0.418902822647 -0.663506301921 -0.649147068662 0.526969692713 -0.871434739889 0.0 0.418902822647 -0.663506301921 0.649147068662 0.215916152998 -0.31876150853 0.942826629352 0.384745375865 -0.0538624861794 0.941365830253 0.77912571275 -0.103653431169 0.647562012104 1.01104828429 -0.122239565381 0.0 0.77912571275 -0.103653431169 -0.647562012104 0.384745375865 -0.0538624861794 -0.941365830253 -0.341046206685 -0.0305832010005 -0.959112794113 0.0 0.0 -1.01841437817 0.0 0.0 -1.01841437817 -0.221355239491 -0.0211347323987 -0.993829733323 -0.241588642456 0.0494179791233 -0.988079836252 0.25495323937 -0.197019215795 0.96607485396 0.0 0.0 1.01841437817 0.273850176574 -0.199319177658 0.96041819551 -0.273850176574 -0.199319177658 0.96041819551 0.0 0.0 1.01841437817 -0.25495323937 -0.197019215795 0.96607485396 0.241588642456 0.0494179791233 -0.988079836252 0.221355239491 -0.0211347323987 -0.993829733323 0.0 0.0 -1.01841437817 0.0 0.0 -1.01841437817 0.341046206685 -0.0305832010005 -0.959112794113 0.356368875344 -0.0305832010005 -0.953518294743 -0.296663257266 -0.208798725801 0.951591302539 Faces 52 11 1 31 0 0 3 31 1 2 30 0 3 30 2 3 29 0 3 29 3 4 28 0 3 28 4 5 27 0 2 5 0 27 0 1 4 6 0 5 0 1 2 4 7 6 5 0 3 3 8 7 4 0 3 2 9 8 3 0 3 1 10 9 2 0 3 11 10 1 0 0 3 11 12 10 0 0 3 10 12 13 9 0 3 9 13 14 8 0 3 8 14 15 7 0 3 7 15 16 6 0 2 16 0 6 0 1 4 17 0 16 0 1 2 15 18 17 16 1 1 14 19 18 15 0 3 13 20 19 14 0 3 12 21 20 13 0 3 11 21 12 0 0 3 11 22 21 0 0 3 21 22 23 20 0 3 20 23 24 19 0 3 19 24 25 18 0 3 18 25 26 17 0 2 26 0 17 0 1 4 27 0 26 0 1 2 25 28 27 26 1 1 24 29 28 25 0 3 23 30 29 24 0 3 22 31 30 23 0 3 11 31 22 0 0 3 14 32 36 0 0 0 32 35 36 0 0 0 32 33 35 0 0 0 33 34 35 0 0 0 8 36 14 0 0 0 8 39 36 0 0 0 36 39 37 0 0 0 37 39 38 0 0 0 48 43 47 0 0 0 47 43 44 0 0 0 47 44 46 0 0 0 46 44 45 0 0 0 49 48 43 0 0 0 49 43 40 0 0 0 43 42 40 0 0 0 42 41 40 0 0 0 criticalmass-1.0.0.orig/data/models/IceSpray.model0000644000175000017500000007033110265636020021340 0ustar danieldanielName IceSpray Scale 1.0 1.0 1.0 Colors 1 0.347190618515 0.307313710451 0.886220097542 Vertices 290 9.78889393806 4.96242582798 4.23646461964 11.304243207 4.96242582798 3.9350425005 12.5888946056 4.96242582798 3.07666692138 13.4472687244 4.96242582798 1.79201719165 13.7486908436 4.96242582798 0.276667766273 13.4472687244 4.96242582798 -1.23868134618 12.5888946056 4.96242582798 -2.52333274484 11.304243207 4.96242582798 -3.38170686364 10.8604079485 6.03393900394 -3.3817102015 11.7687923908 6.94232428074 -2.52333274484 12.3757572174 7.54928910732 -1.23868134618 12.5888929367 7.76242649555 0.276667609811 12.3757572174 7.54928910732 1.79201719165 11.7687923908 6.94232428074 3.07666692138 10.8604079485 6.03393900394 3.9350425005 9.78889393806 6.47777426243 3.9350425005 9.78889393806 7.76242649555 3.07666692138 9.78889393806 8.62080061436 1.79201719165 9.78889393806 8.9222227335 0.276667609811 9.78889393806 8.62080061436 -1.23868134618 9.78889393806 7.76242649555 -2.52333274484 9.78889393806 6.47777426243 -3.3817102015 8.71737992764 6.03393900394 -3.3817102015 7.80899381638 6.94232428074 -2.52333274484 7.20203065872 7.54928743839 -1.23868134618 6.98889327049 7.76242482662 0.276667609811 7.20203065872 7.54928743839 1.79201719165 7.80899381638 6.94232428074 3.07666692138 8.71737992764 6.03393900394 3.9350425005 8.27354383469 4.96242582798 3.9350425005 6.98889327049 4.96242582798 3.07666692138 6.13051915169 4.96242582798 1.79201719165 5.82909703255 4.96242582798 0.276667609811 6.13051915169 4.96242582798 -1.23868134618 6.98889327049 4.96242582798 -2.52333274484 8.27354383469 4.96242582798 -3.3817102015 9.78889393806 4.96242582798 -3.6831291914 8.71737992764 3.89091265202 -3.3817102015 7.80899548531 2.98252570629 -2.52333274484 7.20203232765 2.37556254864 -1.23868134618 6.98889493942 2.16242516041 0.276667609811 7.20203232765 2.37556254864 1.79201719165 7.80899548531 2.98252570629 3.07666692138 8.7173807621 3.89091265202 3.9350425005 9.78889393806 3.4470769763 3.9350425005 9.78889393806 2.16242516041 3.07666692138 9.78889560699 1.3040510416 1.79201719165 9.78889560699 1.00262892246 0.276667609811 9.78889560699 1.3040510416 -1.23868134618 9.78889393806 2.16242516041 -2.52333274484 9.78889393806 3.4470769763 -3.3817102015 10.8604079485 3.89091265202 -3.3817102015 11.7687940598 2.98252737522 -2.52333274484 12.3757572174 2.37556421757 -1.23868134618 12.5888946056 2.16242682934 0.276667609811 12.3757572174 2.37556421757 1.79201719165 11.7687940598 2.98252737522 3.07666692138 10.8604079485 3.89091265202 3.9350425005 -9.81110823154 4.96242582798 4.23646461964 -8.2957597971 4.96242582798 3.9350425005 -7.01110756397 4.96242582798 3.07666692138 -6.15273344517 4.96242582798 1.79201719165 -5.85131132603 4.96242582798 0.276667766273 -6.15273344517 4.96242582798 -1.23868134618 -7.01110756397 4.96242582798 -2.52333274484 -8.2957597971 4.96242582798 -3.38170686364 -8.73959505558 6.03393900394 -3.3817102015 -7.83120977879 6.94232428074 -2.52333274484 -7.22424662113 7.54928910732 -1.23868134618 -7.01111090183 7.76242649555 0.276667609811 -7.22424662113 7.54928910732 1.79201719165 -7.83120977879 6.94232428074 3.07666692138 -8.73959505558 6.03393900394 3.9350425005 -9.81110823154 6.47777426243 3.9350425005 -9.81110823154 7.76242649555 3.07666692138 -9.81110823154 8.62080061436 1.79201719165 -9.81110823154 8.9222227335 0.276667609811 -9.81110823154 8.62080061436 -1.23868134618 -9.81110823154 7.76242649555 -2.52333274484 -9.81110823154 6.47777426243 -3.3817102015 -10.8826214075 6.03393900394 -3.3817102015 -11.7910066843 6.94232428074 -2.52333274484 -12.397969842 7.54928743839 -1.23868134618 -12.6111088991 7.76242482662 0.276667609811 -12.397969842 7.54928743839 1.79201719165 -11.7910066843 6.94232428074 3.07666692138 -10.8826214075 6.03393900394 3.9350425005 -11.326456666 4.96242582798 3.9350425005 -12.6111088991 4.96242582798 3.07666692138 -13.4694830179 4.96242582798 1.79201719165 -13.7709051371 4.96242582798 0.276667609811 -13.4694830179 4.96242582798 -1.23868134618 -12.6111088991 4.96242582798 -2.52333274484 -11.326456666 4.96242582798 -3.3817102015 -9.81110823154 4.96242582798 -3.6831291914 -10.8826214075 3.89091265202 -3.3817102015 -11.7910066843 2.98252570629 -2.52333274484 -12.397969842 2.37556254864 -1.23868134618 -12.6111055613 2.16242516041 0.276667609811 -12.397969842 2.37556254864 1.79201719165 -11.7910066843 2.98252570629 3.07666692138 -10.8826214075 3.89091265202 3.9350425005 -9.81110823154 3.4470769763 3.9350425005 -9.81110823154 2.16242516041 3.07666692138 -9.81110823154 1.3040510416 1.79201719165 -9.81110823154 1.00262892246 0.276667609811 -9.81110823154 1.3040510416 -1.23868134618 -9.81110823154 2.16242516041 -2.52333274484 -9.81110823154 3.4470769763 -3.3817102015 -8.73959505558 3.89091265202 -3.3817102015 -7.83120977879 2.98252737522 -2.52333274484 -7.22424662113 2.37556421757 -1.23868134618 -7.01110756397 2.16242682934 0.276667609811 -7.22424662113 2.37556421757 1.79201719165 -7.83120977879 2.98252737522 3.07666692138 -8.73959505558 3.89091265202 3.9350425005 -0.0111067295074 9.16242599487 4.23646461964 1.50424170494 9.16242599487 3.9350425005 2.78889393806 9.16242599487 3.07666692138 3.64726805687 9.16242599487 1.79201719165 3.94869017601 9.16242599487 0.276667766273 3.64726805687 9.16242599487 -1.23868134618 2.78889393806 9.16242599487 -2.52333274484 1.50424170494 9.16242599487 -3.38170686364 1.06040644646 10.2339408398 -3.3817102015 1.96879172325 11.1423244476 -2.52333274484 2.57575654984 11.7492892742 -1.23868134618 2.78889226913 11.9624266624 0.276667609811 2.57575654984 11.7492892742 1.79201719165 1.96879172325 11.1423244476 3.07666692138 1.06040644646 10.2339408398 3.9350425005 -0.0111067295074 10.6777760983 3.9350425005 -0.0111067295074 11.9624266624 3.07666692138 -0.0111067295074 12.8208007812 1.79201719165 -0.0111067295074 13.1222229004 0.276667609811 -0.0111067295074 12.8208007812 -1.23868134618 -0.0111067295074 11.9624266624 -2.52333274484 -0.0111067295074 10.6777760983 -3.3817102015 -1.08261990547 10.2339408398 -3.3817102015 -1.9910068512 11.1423244476 -2.52333274484 -2.59797000885 11.7492876053 -1.23868134618 -2.81110739708 11.9624249935 0.276667609811 -2.59797000885 11.7492876053 1.79201719165 -1.9910068512 11.1423244476 3.07666692138 -1.08261990547 10.2339391708 3.9350425005 -1.52645516396 9.16242599487 3.9350425005 -2.81110739708 9.16242432594 3.07666692138 -3.66948151588 9.16242432594 1.79201719165 -3.97090363503 9.16242432594 0.276667609811 -3.66948151588 9.16242432594 -1.23868134618 -2.81110739708 9.16242432594 -2.52333274484 -1.52645516396 9.16242599487 -3.3817102015 -0.0111067295074 9.16242432594 -3.6831291914 -1.08261990547 8.09091114998 -3.3817102015 -1.99100518227 7.18252587318 -2.52333274484 -2.59796833992 6.57556271553 -1.23868134618 -2.81110572815 6.3624253273 0.276667609811 -2.59796833992 6.57556271553 1.79201719165 -1.99100518227 7.18252587318 3.07666692138 -1.08261990547 8.09091114998 3.9350425005 -0.0111067295074 7.64707589149 3.9350425005 -0.0111067295074 6.3624253273 3.07666692138 -0.0111050605774 5.5040512085 1.79201719165 -0.0111050605774 5.20262908936 0.276667609811 -0.0111050605774 5.5040512085 -1.23868134618 -0.0111067295074 6.3624253273 -2.52333274484 -0.0111067295074 7.64707589149 -3.3817102015 1.06040644646 8.09091114998 -3.3817102015 1.96879339218 7.18252754211 -2.52333274484 2.57575654984 6.57556438446 -1.23868134618 2.78889393806 6.36242699623 0.276667609811 2.57575654984 6.57556438446 1.79201719165 1.96879339218 7.18252754211 3.07666692138 1.06040644646 8.09091281891 3.9350425005 13.988892436 -4.83757483959 4.23646461964 15.5042433739 -4.83757483959 3.9350425005 16.7888922691 -4.83757483959 3.07666692138 17.6472697258 -4.83757483959 1.79201719165 17.9486918449 -4.83757483959 0.276667766273 17.6472697258 -4.83757483959 -1.23868134618 16.7888922691 -4.83757483959 -2.52333274484 15.5042433739 -4.83757483959 -3.38170686364 15.0604081154 -3.76606166363 -3.3817102015 15.9687933922 -2.85767638683 -2.52333274484 16.5757565498 -2.25071156025 -1.23868134618 16.7888922691 -2.03757417202 0.276667609811 16.5757565498 -2.25071156025 1.79201719165 15.9687933922 -2.85767638683 3.07666692138 15.0604081154 -3.76606166363 3.9350425005 13.988892436 -3.32222640514 3.9350425005 13.988892436 -2.03757417202 3.07666692138 13.988892436 -1.17920005322 1.79201719165 13.988892436 -0.877777934074 0.276667609811 13.988892436 -1.17920005322 -1.23868134618 13.988892436 -2.03757417202 -2.52333274484 13.988892436 -3.32222640514 -3.3817102015 12.9173792601 -3.76606166363 -3.3817102015 12.0089939833 -2.85767638683 -2.52333274484 11.4020308256 -2.25071322918 -1.23868134618 11.1888917685 -2.03757584095 0.276667609811 11.4020308256 -2.25071322918 1.79201719165 12.0089939833 -2.85767638683 3.07666692138 12.9173792601 -3.76606166363 3.9350425005 12.4735440016 -4.83757483959 3.9350425005 11.1888917685 -4.83757483959 3.07666692138 10.3305176497 -4.83757483959 1.79201719165 10.0290955305 -4.83757483959 0.276667609811 10.3305176497 -4.83757483959 -1.23868134618 11.1888917685 -4.83757483959 -2.52333274484 12.4735440016 -4.83757483959 -3.3817102015 13.988892436 -4.83757483959 -3.6831291914 12.9173792601 -5.90908801556 -3.3817102015 12.0089939833 -6.81747496128 -2.52333274484 11.4020308256 -7.42443811893 -1.23868134618 11.1888951063 -7.63757550716 0.276667609811 11.4020308256 -7.42443811893 1.79201719165 12.0089939833 -6.81747496128 3.07666692138 12.9173792601 -5.90908801556 3.9350425005 13.988892436 -6.35292327404 3.9350425005 13.9888957739 -7.63757550716 3.07666692138 13.9888957739 -8.49594962597 1.79201719165 13.9888957739 -8.79737174511 0.276667609811 13.9888957739 -8.49594962597 -1.23868134618 13.9888957739 -7.63757550716 -2.52333274484 13.988892436 -6.35292327404 -3.3817102015 15.0604081154 -5.90908801556 -3.3817102015 15.9687933922 -6.81747329235 -2.52333274484 16.5757565498 -7.42443645 -1.23868134618 16.7888922691 -7.63757383823 0.276667609811 16.5757565498 -7.42443645 1.79201719165 15.9687933922 -6.81747329235 3.07666692138 15.0604081154 -5.90908801556 3.9350425005 -14.0111050606 -4.83757483959 4.23646461964 -12.4957591295 -4.83757483959 3.9350425005 -11.2111068964 -4.83757483959 3.07666692138 -10.3527327776 -4.83757483959 1.79201719165 -10.0513106585 -4.83757483959 0.276667766273 -10.3527327776 -4.83757483959 -1.23868134618 -11.2111068964 -4.83757483959 -2.52333274484 -12.4957591295 -4.83757483959 -3.38170686364 -12.939594388 -3.76606166363 -3.3817102015 -12.0312091112 -2.85767638683 -2.52333274484 -11.4242426157 -2.25071156025 -1.23868134618 -11.2111068964 -2.03757417202 0.276667609811 -11.4242426157 -2.25071156025 1.79201719165 -12.0312091112 -2.85767638683 3.07666692138 -12.939594388 -3.76606166363 3.9350425005 -14.0111050606 -3.32222640514 3.9350425005 -14.0111050606 -2.03757417202 3.07666692138 -14.0111050606 -1.17920005322 1.79201719165 -14.0111050606 -0.877777934074 0.276667609811 -14.0111050606 -1.17920005322 -1.23868134618 -14.0111050606 -2.03757417202 -2.52333274484 -14.0111050606 -3.32222640514 -3.3817102015 -15.0826182365 -3.76606166363 -3.3817102015 -15.9910101891 -2.85767638683 -2.52333274484 -16.5979733467 -2.25071322918 -1.23868134618 -16.811109066 -2.03757584095 0.276667609811 -16.5979733467 -2.25071322918 1.79201719165 -15.9910101891 -2.85767638683 3.07666692138 -15.0826182365 -3.76606166363 3.9350425005 -15.526453495 -4.83757483959 3.9350425005 -16.811109066 -4.83757483959 3.07666692138 -17.669479847 -4.83757483959 1.79201719165 -17.9709019661 -4.83757483959 0.276667609811 -17.669479847 -4.83757483959 -1.23868134618 -16.811109066 -4.83757483959 -2.52333274484 -15.526453495 -4.83757483959 -3.3817102015 -14.0111050606 -4.83757483959 -3.6831291914 -15.0826182365 -5.90908801556 -3.3817102015 -15.9910035133 -6.81747496128 -2.52333274484 -16.597966671 -7.42443811893 -1.23868134618 -16.811109066 -7.63757550716 0.276667609811 -16.597966671 -7.42443811893 1.79201719165 -15.9910035133 -6.81747496128 3.07666692138 -15.0826182365 -5.90908801556 3.9350425005 -14.0111050606 -6.35292327404 3.9350425005 -14.0111050606 -7.63757550716 3.07666692138 -14.0111050606 -8.49594962597 1.79201719165 -14.0111050606 -8.79737174511 0.276667609811 -14.0111050606 -8.49594962597 -1.23868134618 -14.0111050606 -7.63757550716 -2.52333274484 -14.0111050606 -6.35292327404 -3.3817102015 -12.939594388 -5.90908801556 -3.3817102015 -12.0312057734 -6.81747329235 -2.52333274484 -11.4242426157 -7.42443645 -1.23868134618 -11.2111068964 -7.63757383823 0.276667609811 -11.4242426157 -7.42443645 1.79201719165 -12.0312057734 -6.81747329235 3.07666692138 -12.939594388 -5.90908801556 3.9350425005 Normals 290 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 0.0 0.0 14.0 5.91583007574 0.0 12.6883144379 10.2144844532 0.0 9.57359528542 13.0241398811 0.0 5.13480043411 14.0 0.0 0.0 13.0241398811 0.0 -5.13480043411 10.2144844532 0.0 -9.57359528542 5.91583007574 0.0 -12.6883144379 4.18329417706 4.18329417706 -12.6883144379 7.22281551361 7.22281551361 -9.57359528542 9.2091435194 9.2091435194 -5.13480043411 9.89916682243 9.89916682243 0.0 9.2091435194 9.2091435194 5.13480043411 7.22281551361 7.22281551361 9.57359528542 4.18329417706 4.18329417706 12.6883144379 0.0 5.91583007574 12.6883144379 0.0 10.2144844532 9.57359528542 0.0 13.0241398811 5.13480043411 0.0 14.0 0.0 0.0 13.0241398811 -5.13480043411 0.0 10.2144844532 -9.57359528542 0.0 5.91583007574 -12.6883144379 -4.18329417706 4.18329417706 -12.6883144379 -7.22281551361 7.22281551361 -9.57359528542 -9.2091435194 9.2091435194 -5.13480043411 -9.89916682243 9.89916682243 0.0 -9.2091435194 9.2091435194 5.13480043411 -7.22281551361 7.22281551361 9.57359528542 -4.18329417706 4.18329417706 12.6883144379 -5.91583007574 0.0 12.6883144379 -10.2144844532 0.0 9.57359528542 -13.0241398811 0.0 5.13480043411 -14.0 0.0 0.0 -13.0241398811 0.0 -5.13480043411 -10.2144844532 0.0 -9.57359528542 -5.91583007574 0.0 -12.6883144379 0.0 0.0 -14.0 -4.18329417706 -4.18329417706 -12.6883144379 -7.22281551361 -7.22281551361 -9.57359528542 -9.2091435194 -9.2091435194 -5.13480043411 -9.89916682243 -9.89916682243 0.0 -9.2091435194 -9.2091435194 5.13480043411 -7.22281551361 -7.22281551361 9.57359528542 -4.18329417706 -4.18329417706 12.6883144379 0.0 -5.91583007574 12.6883144379 0.0 -10.2144844532 9.57359528542 0.0 -13.0241398811 5.13480043411 0.0 -14.0 0.0 0.0 -13.0241398811 -5.13480043411 0.0 -10.2144844532 -9.57359528542 0.0 -5.91583007574 -12.6883144379 4.18329417706 -4.18329417706 -12.6883144379 7.22281551361 -7.22281551361 -9.57359528542 9.2091435194 -9.2091435194 -5.13480043411 9.89916682243 -9.89916682243 0.0 9.2091435194 -9.2091435194 5.13480043411 7.22281551361 -7.22281551361 9.57359528542 4.18329417706 -4.18329417706 12.6883144379 Faces 320 36 8 7 0 1 0 7 8 9 6 1 0 6 9 10 5 1 0 5 10 11 4 1 0 4 11 12 3 1 0 3 12 13 2 1 0 2 13 14 1 1 0 14 0 1 0 1 0 0 14 15 0 1 0 14 13 16 15 1 0 13 12 17 16 1 0 12 11 18 17 1 0 11 10 19 18 1 0 10 9 20 19 1 0 9 8 21 20 1 0 8 36 21 0 1 0 36 22 21 0 1 0 21 22 23 20 1 0 20 23 24 19 1 0 19 24 25 18 1 0 18 25 26 17 1 0 17 26 27 16 1 0 16 27 28 15 1 0 28 0 15 0 1 0 0 28 29 0 1 0 28 27 30 29 1 0 27 26 31 30 1 0 26 25 32 31 1 0 25 24 33 32 1 0 24 23 34 33 1 0 23 22 35 34 1 0 22 36 35 0 1 0 36 37 35 0 1 0 35 37 38 34 1 0 34 38 39 33 1 0 33 39 40 32 1 0 32 40 41 31 1 0 31 41 42 30 1 0 30 42 43 29 1 0 43 0 29 0 1 0 0 43 44 0 1 0 43 42 45 44 1 0 42 41 46 45 1 0 41 40 47 46 1 0 40 39 48 47 1 0 39 38 49 48 1 0 38 37 50 49 1 0 37 36 50 0 1 0 36 51 50 0 1 0 50 51 52 49 1 0 49 52 53 48 1 0 48 53 54 47 1 0 47 54 55 46 1 0 46 55 56 45 1 0 45 56 57 44 1 0 57 0 44 0 1 0 0 57 1 0 1 0 57 56 2 1 1 0 56 55 3 2 1 0 55 54 4 3 1 0 54 53 5 4 1 0 53 52 6 5 1 0 52 51 7 6 1 0 51 36 7 0 1 0 94 66 65 0 1 0 65 66 67 64 1 0 64 67 68 63 1 0 63 68 69 62 1 0 62 69 70 61 1 0 61 70 71 60 1 0 60 71 72 59 1 0 72 58 59 0 1 0 58 72 73 0 1 0 72 71 74 73 1 0 71 70 75 74 1 0 70 69 76 75 1 0 69 68 77 76 1 0 68 67 78 77 1 0 67 66 79 78 1 0 66 94 79 0 1 0 94 80 79 0 1 0 79 80 81 78 1 0 78 81 82 77 1 0 77 82 83 76 1 0 76 83 84 75 1 0 75 84 85 74 1 0 74 85 86 73 1 0 86 58 73 0 1 0 58 86 87 0 1 0 86 85 88 87 1 0 85 84 89 88 1 0 84 83 90 89 1 0 83 82 91 90 1 0 82 81 92 91 1 0 81 80 93 92 1 0 80 94 93 0 1 0 94 95 93 0 1 0 93 95 96 92 1 0 92 96 97 91 1 0 91 97 98 90 1 0 90 98 99 89 1 0 89 99 100 88 1 0 88 100 101 87 1 0 101 58 87 0 1 0 58 101 102 0 1 0 101 100 103 102 1 0 100 99 104 103 1 0 99 98 105 104 1 0 98 97 106 105 1 0 97 96 107 106 1 0 96 95 108 107 1 0 95 94 108 0 1 0 94 109 108 0 1 0 108 109 110 107 1 0 107 110 111 106 1 0 106 111 112 105 1 0 105 112 113 104 1 0 104 113 114 103 1 0 103 114 115 102 1 0 115 58 102 0 1 0 58 115 59 0 1 0 115 114 60 59 1 0 114 113 61 60 1 0 113 112 62 61 1 0 112 111 63 62 1 0 111 110 64 63 1 0 110 109 65 64 1 0 109 94 65 0 1 0 152 124 123 0 1 0 123 124 125 122 1 0 122 125 126 121 1 0 121 126 127 120 1 0 120 127 128 119 1 0 119 128 129 118 1 0 118 129 130 117 1 0 130 116 117 0 1 0 116 130 131 0 1 0 130 129 132 131 1 0 129 128 133 132 1 0 128 127 134 133 1 0 127 126 135 134 1 0 126 125 136 135 1 0 125 124 137 136 1 0 124 152 137 0 1 0 152 138 137 0 1 0 137 138 139 136 1 0 136 139 140 135 1 0 135 140 141 134 1 0 134 141 142 133 1 0 133 142 143 132 1 0 132 143 144 131 1 0 144 116 131 0 1 0 116 144 145 0 1 0 144 143 146 145 1 0 143 142 147 146 1 0 142 141 148 147 1 0 141 140 149 148 1 0 140 139 150 149 1 0 139 138 151 150 1 0 138 152 151 0 1 0 152 153 151 0 1 0 151 153 154 150 1 0 150 154 155 149 1 0 149 155 156 148 1 0 148 156 157 147 1 0 147 157 158 146 1 0 146 158 159 145 1 0 159 116 145 0 1 0 116 159 160 0 1 0 159 158 161 160 1 0 158 157 162 161 1 0 157 156 163 162 1 0 156 155 164 163 1 0 155 154 165 164 1 0 154 153 166 165 1 0 153 152 166 0 1 0 152 167 166 0 1 0 166 167 168 165 1 0 165 168 169 164 1 0 164 169 170 163 1 0 163 170 171 162 1 0 162 171 172 161 1 0 161 172 173 160 1 0 173 116 160 0 1 0 116 173 117 0 1 0 173 172 118 117 1 0 172 171 119 118 1 0 171 170 120 119 1 0 170 169 121 120 1 0 169 168 122 121 1 0 168 167 123 122 1 0 167 152 123 0 1 0 210 182 181 0 1 0 181 182 183 180 1 0 180 183 184 179 1 0 179 184 185 178 1 0 178 185 186 177 1 0 177 186 187 176 1 0 176 187 188 175 1 0 188 174 175 0 1 0 174 188 189 0 1 0 188 187 190 189 1 0 187 186 191 190 1 0 186 185 192 191 1 0 185 184 193 192 1 0 184 183 194 193 1 0 183 182 195 194 1 0 182 210 195 0 1 0 210 196 195 0 1 0 195 196 197 194 1 0 194 197 198 193 1 0 193 198 199 192 1 0 192 199 200 191 1 0 191 200 201 190 1 0 190 201 202 189 1 0 202 174 189 0 1 0 174 202 203 0 1 0 202 201 204 203 1 0 201 200 205 204 1 0 200 199 206 205 1 0 199 198 207 206 1 0 198 197 208 207 1 0 197 196 209 208 1 0 196 210 209 0 1 0 210 211 209 0 1 0 209 211 212 208 1 0 208 212 213 207 1 0 207 213 214 206 1 0 206 214 215 205 1 0 205 215 216 204 1 0 204 216 217 203 1 0 217 174 203 0 1 0 174 217 218 0 1 0 217 216 219 218 1 0 216 215 220 219 1 0 215 214 221 220 1 0 214 213 222 221 1 0 213 212 223 222 1 0 212 211 224 223 1 0 211 210 224 0 1 0 210 225 224 0 1 0 224 225 226 223 1 0 223 226 227 222 1 0 222 227 228 221 1 0 221 228 229 220 1 0 220 229 230 219 1 0 219 230 231 218 1 0 231 174 218 0 1 0 174 231 175 0 1 0 231 230 176 175 1 0 230 229 177 176 1 0 229 228 178 177 1 0 228 227 179 178 1 0 227 226 180 179 1 0 226 225 181 180 1 0 225 210 181 0 1 0 268 240 239 0 1 0 239 240 241 238 1 0 238 241 242 237 1 0 237 242 243 236 1 0 236 243 244 235 1 0 235 244 245 234 1 0 234 245 246 233 1 0 246 232 233 0 1 0 232 246 247 0 1 0 246 245 248 247 1 0 245 244 249 248 1 0 244 243 250 249 1 0 243 242 251 250 1 0 242 241 252 251 1 0 241 240 253 252 1 0 240 268 253 0 1 0 268 254 253 0 1 0 253 254 255 252 1 0 252 255 256 251 1 0 251 256 257 250 1 0 250 257 258 249 1 0 249 258 259 248 1 0 248 259 260 247 1 0 260 232 247 0 1 0 232 260 261 0 1 0 260 259 262 261 1 0 259 258 263 262 1 0 258 257 264 263 1 0 257 256 265 264 1 0 256 255 266 265 1 0 255 254 267 266 1 0 254 268 267 0 1 0 268 269 267 0 1 0 267 269 270 266 1 0 266 270 271 265 1 0 265 271 272 264 1 0 264 272 273 263 1 0 263 273 274 262 1 0 262 274 275 261 1 0 275 232 261 0 1 0 232 275 276 0 1 0 275 274 277 276 1 0 274 273 278 277 1 0 273 272 279 278 1 0 272 271 280 279 1 0 271 270 281 280 1 0 270 269 282 281 1 0 269 268 282 0 1 0 268 283 282 0 1 0 282 283 284 281 1 0 281 284 285 280 1 0 280 285 286 279 1 0 279 286 287 278 1 0 278 287 288 277 1 0 277 288 289 276 1 0 289 232 276 0 1 0 232 289 233 0 1 0 289 288 234 233 1 0 288 287 235 234 1 0 287 286 236 235 1 0 286 285 237 236 1 0 285 284 238 237 1 0 284 283 239 238 1 0 283 268 239 0 1 0 criticalmass-1.0.0.orig/data/models/Boss1_Leg1.model0000644000175000017500000004044210355351306021461 0ustar danieldanielName Boss1_Leg1 Scale 1.0 1.0 1.0 Offset -16.2000007629 1.80000007153 0.0 Colors 1 0.0 0.306997478008 1.0 Vertices 160 1.06406773768 1.26810696173 8.32223939896 0.938177173121 3.45166197309 3.62132012844 -1.37561769517 3.31524583343 7.68874669075 -2.48748184058 2.08724498422 7.83937740326 -3.50375318993 0.779032393086 7.68874597549 -4.38537783898 -0.559118295528 7.24264025688 -5.09847471548 -1.8757819103 6.51820421219 -5.61564015653 -3.12036071998 5.54327738285 -5.91699988926 -4.2450260866 4.35532522202 -4.44828231105 -3.36805065069 3.00000071526 -4.2920251302 -4.12949663642 1.52938717604 -4.70342857397 -3.78428812618 1.17054247856 -5.25527930913 -2.69089970385 2.29610109329 -7.08857792674 -3.26195529543 3.33342146873 -7.10677645468 -1.86914915188 4.24264061451 -6.85186512247 -0.404512528745 4.98881757259 -6.3336406326 1.07566844909 5.54327666759 -5.57201812065 2.51451242926 5.88471114635 -4.59626657028 3.85672533452 5.99999892712 -3.44388317381 5.05072632935 5.88471150398 -0.0359543606696 4.26905546034 2.77163797617 -0.686848141724 4.81521977624 1.49999928474 -4.82585375387 6.21033720852 3.18478274345 -6.00531091572 5.03905368229 3.2471755743 -6.95398842675 3.67412307855 3.18478274345 -7.63542823879 2.16799758472 2.99999964237 -8.02344338983 0.578557988475 2.6999284029 -8.10312139134 -1.03311640474 2.29610037804 -7.87140100417 -2.60508867838 1.80403482914 -5.79449738345 -2.2384419742 1.24264106154 -4.97831967412 -3.55362708383 0.633493244648 -5.07484837885 -3.47262987571 5.40387745218e-07 -5.98384539051 -2.07956011644 4.65550968443e-07 -8.14629183036 -2.37442786591 3.40198738513e-07 -8.45299114056 -0.739541266571 5.40693463336e-08 -8.43484702923 0.923766196027 -2.56737948234e-07 -8.09255560496 2.55157255814 4.49318608986e-08 -7.43927218444 4.08132407191 -3.67792249989e-08 -6.50010153423 5.45423199777 -5.30165095824e-07 -5.31113751155 6.61753820188 -5.03765051008e-07 -0.915411709871 5.00700739993 -7.30786609893e-07 -0.686848141724 4.81521977624 -1.50000053644 -4.82585409869 6.21033679758 -3.18478345871 -6.00531068297 5.03905284693 -3.24717664719 -6.95398877157 3.67412266761 -3.18478238583 -7.63542846867 2.16799731076 -2.99999946356 -8.02344307179 0.578557254758 -2.69992858171 -8.1031210733 -1.03311713845 -2.29610019922 -7.87140073021 -2.60508890826 -1.80403411388 -5.79449710949 -2.23844220408 -1.24264007807 -4.97831940016 -3.55362731371 -0.633492082357 -4.7034283685 -3.78428829859 -1.17054113746 -5.25527889819 -2.69090004866 -2.29609966278 -7.08857783858 -3.2619563031 -3.33342039585 -7.10677586268 -1.86915011547 -4.24263954163 -6.85186471627 -0.404514270137 -4.98881685734 -6.33364077432 1.07566716745 -5.54327595234 -5.57201814743 2.5145112846 -5.8847104311 -4.59626550887 3.85672326123 -5.99999928474 -3.44388347454 5.05072541458 -5.88471221924 -0.0359545464683 4.26905468254 -2.77163904905 0.938177055812 3.45166113783 -3.62132012844 -1.37561795182 3.31524441481 -7.68874669075 -2.48748095771 2.08724269817 -7.83937597275 -3.50375317263 0.779030744594 -7.68874454498 -4.38537784372 -0.559119692101 -7.24263882637 -5.09847430928 -1.87578365169 -6.51820349693 -5.61563993139 -3.12036184259 -5.54327559471 -5.91699993808 -4.24502697934 -4.3553237915 -4.4482819686 -3.36805093804 -2.99999892712 -4.29202489049 -4.12949683757 -1.52938592434 -3.80674144556 -4.53669803535 -1.65539520979 -3.49636419855 -4.16680486258 -3.24717521667 -4.53502907 -5.40463739991 -4.71416831017 -3.85672531296 -4.59626658836 -5.99999821186 -3.03020916357 -3.61126386826 -7.05525183678 -2.08724523838 -2.48748209417 -7.83937597275 -1.06406859313 -1.2681078779 -8.32223725319 -1.68879686509e-07 -1.62826418434e-06 -8.48527908325 1.06406721161 1.26810530234 -8.32223939896 2.08724343572 2.48747987198 -3.91968905926 3.23631007808 1.52329885276 -3.62132012844 3.50375254437 -0.779033718801 -7.68874669075 2.48748064711 -2.08724585018 -7.83937525749 1.37561595377 -3.31524623962 -7.68874454498 0.210887560009 -4.41584419138 -7.24263882637 -0.961944540734 -5.34674411293 -6.51820135117 -2.09781090619 -6.07217115653 -5.54327523708 -3.15305882203 -6.56424823384 -4.35532307625 -2.54444652862 -4.96555870311 -2.99999856949 -3.3214580061 -4.94389922853 -1.52938556671 -2.91005463083 -5.28910768131 -1.17054086924 -1.73744973601 -5.64270947755 -2.29609930515 -1.98148119549 -7.5473186802 -3.3334196806 -0.606675018978 -7.32338237981 -4.24263846874 0.791445181361 -6.81801291979 -4.9888150692 2.15915021665 -6.05063082105 -5.54327523708 3.4438808845 -5.05072627579 -5.88470971584 4.59626482889 -3.85672574072 -5.99999713898 5.57201774905 -2.51451398485 -5.88471186161 4.21044133792 0.705905595391 -2.77163869143 4.86133539293 0.159741049612 -1.50000035763 6.95398860307 -3.6741250939 -3.18478310108 6.00530890037 -5.03905385861 -3.24717450142 4.82585064269 -6.21033646533 -3.18478167057 3.46093727492 -7.14295949693 -2.99999839067 1.96302235288 -7.8010825175 -2.69992643595 0.389669643719 -8.15941489708 -2.29609876871 -1.19865811806 -8.20418529724 -1.80403339863 -1.19823179867 -6.09516709225 -1.24263963103 -2.63516373614 -5.51976855125 -0.63349172473 -2.53863489443 -5.60076587431 8.27180883789e-07 -1.00888365463 -6.25404906496 6.92249372491e-07 -0.923767291863 -8.43484610971 6.44945131967e-07 0.739539392939 -8.45299003524 9.65282424659e-07 2.37442544436 -8.14629026529 1.30382574071e-06 3.91806409318 -7.52653401059 5.58755175462e-07 5.31113385245 -6.61753699893 4.0011416047e-07 6.50009951888 -5.45423217409 9.73947322791e-07 7.43927236076 -4.08132608726 2.53807364459e-07 5.08989896108 -0.0320465740754 -6.13164687024e-07 4.86133539293 0.159741049612 1.49999892712 6.95398894789 -3.67412468296 3.18478310108 6.00530866762 -5.03905302325 3.24717628956 4.82585043959 -6.21033559463 3.1847820282 3.46093695689 -7.14295876321 2.99999928474 1.96302148693 -7.80108132402 2.69992858171 0.389669051721 -8.15941393348 2.29610055685 -1.19865839202 -8.20418506736 1.80403465033 -1.19823207262 -6.09516686237 1.24264097214 -2.6351640101 -5.51976832137 0.633493334055 -2.91005497328 -5.28910739396 1.17054221034 -1.73745014694 -5.64270913273 2.29610037804 -1.98148155761 -7.54731744265 3.33342075348 -0.606675884934 -7.32338118634 4.24263954163 0.791443953285 -6.81801048876 4.98881578445 2.15914981045 -6.05062907966 5.54327487946 3.44388036336 -5.05072467138 5.88470935822 4.59626376748 -3.85672366743 5.99999821186 5.57201804979 -2.51451307007 5.88471186161 4.21044152372 0.705906373188 2.77163726091 3.2363101269 1.52329974549 3.62131869793 3.50375280103 -0.779032300187 7.68874669075 2.48747949027 -2.08724333425 7.83937454224 1.37561566251 -3.31524436125 7.68874239922 0.210887290789 -4.41584256492 7.2426366806 -0.96194576881 -5.3467416819 6.51820135117 -2.09781140528 -6.07216980404 5.54327487946 -3.15305904717 -6.56424711122 4.3553237915 -2.54444687107 -4.96555841576 2.99999946356 -3.32145841704 -4.94389888371 1.52938681841 -3.80674175024 -4.53669777968 1.65539610386 -3.49636441563 -4.16680468043 3.24717593193 -4.53502959998 -5.4046369552 4.71416795254 -3.85672551153 -4.59626548804 5.99999713898 -3.03021002955 -3.61126220791 7.05524897575 -2.08724458965 -2.48748077112 7.83937311172 -1.06406813857 -1.26810639192 8.32223439217 -8.37487252114e-07 6.05306095848e-07 8.48527765274 2.08724369867 2.48748058504 3.91968691349 Normals 160 2.25080620392 2.68240612863 4.87203598022 3.02887843706 4.82407804447 1.88476216793 0.822564916258 3.88084297853 4.50123596191 -1.75886054272 1.47585937086 5.54313790798 -2.46941736824 0.562106397997 5.43913078308 -3.0874864378 -0.373319022489 5.13095498085 -3.59013680347 -1.29539731457 4.62941372395 -3.95788632617 -2.16980041588 3.9528182745 -3.87923680384 -4.57666012126 0.0721457563341 -3.07249362024 -4.82620436581 -1.80730605125 -4.2010957445 -3.97002779255 1.60899692774 -4.63397262836 -3.60680092495 1.23142182827 -2.58631366494 -5.23415782518 -1.38322091103 -3.89859422883 -4.56041731157 0.0551164280623 -5.02128227267 -1.27750518584 3.02536082268 -4.83546441785 -0.250443274819 3.54319882393 -4.46775493377 0.784863871831 3.92699968815 -3.93258607659 1.78985083646 4.16302978992 -3.24994332599 2.72702650149 4.24250006676 -0.38825607819 4.89684252351 3.44505143166 2.52179806078 5.24956904103 1.44254887104 2.1830430507 5.53381827166 0.780602395535 -1.19734030002 5.5757448592 1.86443674564 -4.24628963244 3.56306039803 2.29602956772 -4.91013606851 2.61011275093 2.25299853086 -5.39003811745 1.55875142355 2.12518697977 -5.66755323562 0.447762210637 1.91753894091 -5.73175583973 -0.68134702195 1.63719588518 -3.91163945002 -4.54947107026 0.0298471022397 -2.26144562735 -5.50675450122 -0.74855799973 -4.92321191069 -3.36410032711 0.666341140866 -5.02476817067 -3.27888449883 0.0 -2.14740506402 -5.60244590481 0.0 -3.91612812828 -4.54570462164 0.0 -5.9812983523 -0.471955972082 0.0 -5.95973826014 0.692934579901 0.0 -5.71378401971 1.83040651616 0.0 -5.25351988679 2.89824601318 0.0 -4.59626626968 3.85672569275 0.0 -1.48138956951 5.81409051878 0.0 2.06409314534 5.63362910272 0.0 2.1830430507 5.53381827166 -0.780602395535 -1.19734030002 5.5757448592 -1.86443674564 -4.24628963244 3.56306039803 -2.29602956772 -4.91013606851 2.61011275093 -2.25299853086 -5.39003811745 1.55875142355 -2.12518697977 -5.66755323562 0.447762210637 -1.91753894091 -5.73175583973 -0.68134702195 -1.63719588518 -3.91163945002 -4.54947107026 -0.0298471022397 -2.26144562735 -5.50675450122 0.74855799973 -4.92321191069 -3.36410032711 -0.666341140866 -4.63397262836 -3.60680092495 -1.23142182827 -2.58631366494 -5.23415782518 1.38322091103 -3.89859422883 -4.56041731157 -0.0551164280623 -5.02128227267 -1.27750518584 -3.02536082268 -4.83546441785 -0.250443274819 -3.54319882393 -4.46775493377 0.784863871831 -3.92699968815 -3.93258607659 1.78985083646 -4.16302978992 -3.24994332599 2.72702650149 -4.24250006676 -0.38825607819 4.89684252351 -3.44505143166 2.52179806078 5.24956904103 -1.44254887104 3.02887843706 4.82407804447 -1.88476216793 0.822564916258 3.88084297853 -4.50123596191 -1.75886054272 1.47585937086 -5.54313790798 -2.46941736824 0.562106397997 -5.43913078308 -3.0874864378 -0.373319022489 -5.13095498085 -3.59013680347 -1.29539731457 -4.62941372395 -3.95788632617 -2.16980041588 -3.9528182745 -3.87923680384 -4.57666012126 -0.0721457563341 -3.07249362024 -4.82620436581 1.80730605125 -4.2010957445 -3.97002779255 -1.60899692774 -3.69064885952 -4.39834362557 -1.74156922102 -3.64592226775 -4.34504055413 1.95617544651 -3.85637259897 -4.59584546894 -0.078005310148 -2.70372162218 -3.22216965495 -4.27857291698 -2.12121687765 -2.52796759795 -5.01083421707 -1.45949889916 -1.73936289362 -5.55357527733 -0.743520509399 -0.886093155289 -5.88738656044 0.0 0.0 -6.0 2.25080620392 2.68240612863 -4.87203598022 3.62685451384 4.32231649203 -2.04004025459 4.22483059061 3.82055493958 -1.88476216793 3.67904749158 1.48396927872 -4.50123596191 1.75886054272 -1.47585937086 -5.54313790798 0.982376349444 -2.33429270857 -5.43913078308 0.168488639492 -3.10540676475 -5.13095498085 -0.652296951837 -3.76053788132 -4.62941372395 -1.4495569182 -4.27453889403 -3.9528182745 -3.83350839409 -4.61503081662 -0.0721457563341 -4.21935091526 -3.86387674245 1.80730605125 -3.18020197455 -4.82665945859 -1.60899692774 -2.74732509068 -5.18988632619 -1.23142182827 -4.70553087056 -3.45592328308 1.38322091103 -3.8141509691 -4.63127362631 -0.0551164280623 -0.386160971701 -5.16683412406 -3.02536082268 0.593030662549 -4.80549192107 -3.54319882393 1.54875713546 -4.26358965907 -3.92699968815 2.44554505779 -3.56203714704 -4.16302978992 3.24994332599 -2.72702650149 -4.24250006676 4.88986848603 0.467969733742 -3.44505143166 4.73191096689 3.39506394303 -1.44254887104 5.07066597698 3.1108147124 -0.780602395535 5.69895270786 -0.210932601946 -1.86443674564 4.24628963244 -3.56306039803 -2.29602956772 3.42309504971 -4.38229906151 -2.25299853086 2.47104031913 -5.03747721078 -2.12518697977 1.42511948031 -5.50369740653 -1.91753894091 0.32431259536 -5.76299228796 -1.63719588518 -3.80110574791 -4.64221986762 -0.0298471022397 -5.03039890814 -3.18332660704 0.74855799973 -2.45808580836 -5.43258692403 -0.666341140866 -2.35652954837 -5.5178027523 0.0 -5.14443947148 -3.08763520345 0.0 -3.79661706965 -4.64598631624 0.0 0.573855107936 -5.97238333783 0.0 1.71730450483 -5.74886977579 0.0 2.7947862214 -5.3091323034 0.0 3.76647886799 -4.67043232375 0.0 4.59626626968 -3.85672569275 0.0 5.98300197735 -0.449278261528 0.0 5.18961588233 3.01100388134 0.0 5.07066597698 3.1108147124 0.780602395535 5.69895270786 -0.210932601946 1.86443674564 4.24628963244 -3.56306039803 2.29602956772 3.42309504971 -4.38229906151 2.25299853086 2.47104031913 -5.03747721078 2.12518697977 1.42511948031 -5.50369740653 1.91753894091 0.32431259536 -5.76299228796 1.63719588518 -3.80110574791 -4.64221986762 0.0298471022397 -5.03039890814 -3.18332660704 -0.74855799973 -2.45808580836 -5.43258692403 0.666341140866 -2.74732509068 -5.18988632619 1.23142182827 -4.70553087056 -3.45592328308 -1.38322091103 -3.8141509691 -4.63127362631 0.0551164280623 -0.386160971701 -5.16683412406 3.02536082268 0.593030662549 -4.80549192107 3.54319882393 1.54875713546 -4.26358965907 3.92699968815 2.44554505779 -3.56203714704 4.16302978992 3.24994332599 -2.72702650149 4.24250006676 4.88986848603 0.467969733742 3.44505143166 4.73191096689 3.39506394303 1.44254887104 4.22483059061 3.82055493958 1.88476216793 3.67904749158 1.48396927872 4.50123596191 1.75886054272 -1.47585937086 5.54313790798 0.982376349444 -2.33429270857 5.43913078308 0.168488639492 -3.10540676475 5.13095498085 -0.652296951837 -3.76053788132 4.62941372395 -1.4495569182 -4.27453889403 3.9528182745 -3.83350839409 -4.61503081662 0.0721457563341 -4.21935091526 -3.86387674245 -1.80730605125 -3.18020197455 -4.82665945859 1.60899692774 -3.69064885952 -4.39834362557 1.74156922102 -3.64592226775 -4.34504055413 -1.95617544651 -3.85637259897 -4.59584546894 0.078005310148 -2.70372162218 -3.22216965495 4.27857291698 -2.12121687765 -2.52796759795 5.01083421707 -1.45949889916 -1.73936289362 5.55357527733 -0.743520509399 -0.886093155289 5.88738656044 0.0 0.0 6.0 3.62685451384 4.32231649203 2.04004025459 Faces 144 2 0 159 1 1 0 0 2 3 158 1 0 158 3 4 157 1 0 157 4 5 156 1 0 156 5 6 155 1 0 155 6 7 154 1 0 154 7 8 153 1 0 153 8 9 152 1 0 152 9 10 151 1 0 10 9 12 11 1 0 9 8 13 12 1 0 8 7 14 13 1 0 7 6 15 14 1 0 6 5 16 15 1 0 5 4 17 16 1 0 4 3 18 17 1 0 3 2 19 18 1 0 2 1 20 19 1 0 20 21 22 19 1 0 19 22 23 18 1 0 18 23 24 17 1 0 17 24 25 16 1 0 16 25 26 15 1 0 15 26 27 14 1 0 14 27 28 13 1 0 13 28 29 12 1 0 12 29 30 11 1 0 30 29 32 31 1 0 29 28 33 32 1 0 28 27 34 33 1 0 27 26 35 34 1 0 26 25 36 35 1 0 25 24 37 36 1 0 24 23 38 37 1 0 23 22 39 38 1 0 22 21 40 39 1 0 40 41 42 39 1 0 39 42 43 38 1 0 38 43 44 37 1 0 37 44 45 36 1 0 36 45 46 35 1 0 35 46 47 34 1 0 34 47 48 33 1 0 33 48 49 32 1 0 32 49 50 31 1 0 50 49 52 51 1 0 49 48 53 52 1 0 48 47 54 53 1 0 47 46 55 54 1 0 46 45 56 55 1 0 45 44 57 56 1 0 44 43 58 57 1 0 43 42 59 58 1 0 42 41 60 59 1 0 60 61 62 59 1 0 59 62 63 58 1 0 58 63 64 57 1 0 57 64 65 56 1 0 56 65 66 55 1 0 55 66 67 54 1 0 54 67 68 53 1 0 53 68 69 52 1 0 52 69 70 51 1 0 70 69 72 71 1 0 69 68 73 72 1 0 68 67 74 73 1 0 67 66 75 74 1 0 66 65 76 75 1 0 65 64 77 76 1 0 64 63 78 77 1 0 63 62 79 78 1 0 62 61 80 79 1 0 80 81 82 79 1 0 79 82 83 78 1 0 78 83 84 77 1 0 77 84 85 76 1 0 76 85 86 75 1 0 75 86 87 74 1 0 74 87 88 73 1 0 73 88 89 72 1 0 72 89 90 71 1 0 90 89 92 91 1 0 89 88 93 92 1 0 88 87 94 93 1 0 87 86 95 94 1 0 86 85 96 95 1 0 85 84 97 96 1 0 84 83 98 97 1 0 83 82 99 98 1 0 82 81 100 99 1 0 100 101 102 99 1 0 99 102 103 98 1 0 98 103 104 97 1 0 97 104 105 96 1 0 96 105 106 95 1 0 95 106 107 94 1 0 94 107 108 93 1 0 93 108 109 92 1 0 92 109 110 91 1 0 110 109 112 111 1 0 109 108 113 112 1 0 108 107 114 113 1 0 107 106 115 114 1 0 106 105 116 115 1 0 105 104 117 116 1 0 104 103 118 117 1 0 103 102 119 118 1 0 102 101 120 119 1 0 120 121 122 119 1 0 119 122 123 118 1 0 118 123 124 117 1 0 117 124 125 116 1 0 116 125 126 115 1 0 115 126 127 114 1 0 114 127 128 113 1 0 113 128 129 112 1 0 112 129 130 111 1 0 130 129 132 131 1 0 129 128 133 132 1 0 128 127 134 133 1 0 127 126 135 134 1 0 126 125 136 135 1 0 125 124 137 136 1 0 124 123 138 137 1 0 123 122 139 138 1 0 122 121 140 139 1 0 140 141 142 139 1 0 139 142 143 138 1 0 138 143 144 137 1 0 137 144 145 136 1 0 136 145 146 135 1 0 135 146 147 134 1 0 134 147 148 133 1 0 133 148 149 132 1 0 132 149 150 131 1 0 150 149 152 151 1 0 149 148 153 152 1 0 148 147 154 153 1 0 147 146 155 154 1 0 146 145 156 155 1 0 145 144 157 156 1 0 144 143 158 157 1 0 0 158 143 142 1 0 159 0 142 141 1 0 criticalmass-1.0.0.orig/data/models/DarkAngel.model0000644000175000017500000001742507630537344021471 0ustar danieldanielName DarkAngel Scale 1.0 1.0 1.0 Colors 3 0.0 0.00300751277246 0.0 1.0 0.0 0.0 1.0 1.0 0.0 Vertices 74 0.653281470701 0.0 -0.270598004611 -0.65328149543 0.535756886005 -0.191341792195 -0.82413794171 1.46803724766 -0.582753541701 -0.446020247672 1.96825885773 -0.761404071149 -7.04403297442e-09 2.14391350746 -0.824137806892 0.446020362641 1.96825885773 -0.761404003802 0.824137910494 1.46803724766 -0.58275341726 0.653281464718 0.535756766796 -0.191341663749 0.653281450272 0.757674515247 4.93213784302e-08 0.824137866497 1.75731611252 7.18807422445e-08 0.446020305157 2.4647359848 4.33336599322e-08 -6.92647084765e-08 2.71314954758 9.66005774242e-09 -0.446020305157 2.4647359848 -2.40135339887e-08 -0.824137985706 1.75731611252 -5.2560625301e-08 -0.653281509876 0.757674634457 -4.93213829303e-08 -0.653281524322 0.535756886005 0.191341693552 -0.824138029703 1.46803712845 0.58275341726 -0.446020362641 1.96825885773 0.761404003802 -1.3148538252e-07 2.14391350746 0.824137806892 0.446020247672 1.96825885773 0.761404071149 0.8241378225 1.46803712845 0.582753541701 0.653281435826 0.535756766796 0.191341762392 0.653281429842 0.0 0.270598103254 0.499999932449 0.0 0.499999978144 0.270598004611 0.0 0.653281411097 -1.12989717311e-07 0.0 0.70710670948 -0.270598162858 0.0 0.653281370237 -0.500000097354 0.0 0.499999902646 -0.653281530306 0.0 0.270598034413 -0.653281524322 -0.535756886005 0.191341693552 -0.500000086297 -0.989949405193 0.353553316991 -0.270598148412 -1.29343116283 0.461939672068 -9.73535909074e-08 -1.39999985695 0.499999940395 0.270598019057 -1.29343116283 0.461939712927 0.499999943505 -0.989949405193 0.353553392489 0.653281435826 -0.535756766796 0.191341762392 0.653281450272 -0.757674515247 4.93213784302e-08 0.499999970198 -1.39999985695 3.7748948382e-08 0.270598053932 -1.82918787003 2.0429585158e-08 -5.96046447754e-08 -1.97989881039 -4.50002558613e-15 -0.270598113537 -1.82918787003 -2.0429589658e-08 -0.500000059605 -1.39999985695 -3.7748955132e-08 -0.653281509876 -0.757674634457 -4.93213829303e-08 -0.65328149543 -0.535756886005 -0.191341792195 -0.500000032912 -0.989949405193 -0.353553392489 -0.270598078661 -1.29343116283 -0.461939712927 -2.18556986434e-08 -1.39999985695 -0.499999940395 0.270598088808 -1.29343116283 -0.461939672068 0.49999999689 -0.989949405193 -0.353553316991 0.653281464718 -0.535756766796 -0.191341663749 0.500000007947 0.0 -0.499999902646 0.270598103254 0.0 -0.653281370237 -6.21957223991e-09 0.0 -0.70710670948 -0.270598064215 0.0 -0.653281411097 -0.500000021856 0.0 -0.499999978144 -0.653281489447 0.0 -0.270598133056 2.47992231629 -0.803635120392 -0.287012389828 2.47992229462 -1.13651180267 1.87228928541e-07 2.47992227295 -0.803635120392 0.287012764286 2.47992226397 0.0 0.405897268127 2.47992227295 0.803635120392 0.287012764286 2.47992229462 1.13651180267 1.87228928541e-07 2.47992231629 0.803635120392 -0.287012389828 2.47992232526 0.0 -0.405896893669 3.07279253006 3.17091206625e-08 2.20664700073e-07 -2.47992226397 0.0 -0.405897327732 -2.47992227295 -0.80363535881 -0.287012794088 -2.47992229462 -1.13651192188 -1.87228928541e-07 -2.47992231629 -0.80363535881 0.28701241963 -3.07279253006 -3.48800256234e-07 -1.07417858835e-07 -2.47992232526 0.0 0.405896953274 -2.47992231629 0.80363535881 0.28701241963 -2.47992229462 1.13651192188 -1.87228928541e-07 -2.47992227295 0.80363535881 -0.287012794088 Normals 74 0.267616840167 -0.0384990982711 -0.420575568737 -0.351725790414 0.0693380534649 -0.348521408171 -0.431943695648 0.0165257733315 -0.2512741713 -0.266762257535 0.180013433099 -0.382656355971 3.25025530522e-08 0.254280209541 -0.430509358644 0.266762315314 0.180013433099 -0.382656315691 0.431943733589 0.0165257733315 -0.251274106078 0.397518825105 -0.182119205594 0.242484852881 0.434217363596 -0.247871339321 3.27824996439e-08 0.481124311686 0.136066779494 3.63238757794e-08 0.323191016912 0.38149663806 2.44002434843e-08 0.0 0.5 0.0 -0.323191016912 0.38149663806 -2.44002434843e-08 -0.481124311686 0.136066779494 -3.63238757794e-08 -0.434217363596 -0.247871339321 -3.27824996439e-08 -0.351725843039 0.0693380534649 0.348521355062 -0.431943733589 0.0165257733315 0.251274106078 -0.266762315314 0.180013433099 0.382656315691 -3.25025530522e-08 0.254280209541 0.430509358644 0.266762257535 0.180013433099 0.382656355971 0.431943695648 0.0165257733315 0.2512741713 0.351725790414 0.0693380534649 0.348521408171 0.267616776662 -0.0384990982711 0.420575609146 0.359813187571 -0.0628223493695 0.341425863251 0.161427626291 -0.0549790933728 0.470015567808 -3.75473427357e-08 -0.0514999851584 0.497329622507 -0.161427697262 -0.0549790933728 0.470015543433 -0.359813239125 -0.0628223493695 0.341425808921 -0.267616840167 -0.0384990982711 0.420575568737 -0.252891660474 -0.149708554149 0.404507558326 -0.394177100913 -0.109103672206 0.287591129584 -0.249092101986 -0.181081578135 0.3938871136 -3.35612785719e-08 -0.228873565793 0.444532603025 0.249092042511 -0.181081578135 0.393887151212 0.394177057488 -0.109103672206 0.287591189103 0.252891599395 -0.149708554149 0.404507596512 0.424527752936 -0.101306192577 -0.243949679272 0.455732911825 -0.205648973584 3.44068783798e-08 0.324396491051 -0.380459010601 2.44912542517e-08 -3.7748950632e-08 0.0 0.5 -0.324396491051 -0.380459010601 -2.44912542517e-08 -0.455732911825 -0.205648973584 -3.44068783798e-08 -0.4245277161 -0.101306192577 -0.243949743374 -0.252891599395 -0.149708554149 -0.404507596512 -0.394177057488 -0.109103672206 -0.287591189103 -0.249092042511 -0.181081578135 -0.393887151212 3.35612785719e-08 -0.228873565793 -0.444532603025 0.249092101986 -0.181081578135 -0.3938871136 0.394177100913 -0.109103672206 -0.287591129584 0.252891660474 -0.149708554149 -0.404507558326 0.359813239125 -0.0628223493695 -0.341425808921 0.161427697262 -0.0549790933728 -0.470015543433 3.75473427357e-08 -0.0514999851584 -0.497329622507 -0.161427626291 -0.0549790933728 -0.470015567808 -0.359813187571 -0.0628223493695 -0.341425863251 -0.267616776662 -0.0384990982711 -0.420575609146 0.164616869764 -0.21672719717 -0.419431107729 3.7748950632e-08 0.0 -0.5 0.164616806431 -0.21672719717 0.419431132585 0.126361855104 0.0 0.483764151338 0.164616806431 0.21672719717 0.419431132585 -3.7748950632e-08 0.0 0.5 0.164616869764 0.21672719717 -0.419431107729 0.12636192815 0.0 -0.483764132258 0.5 0.0 3.7748950632e-08 -0.126361855104 0.0 -0.483764151338 -0.164616806431 -0.21672719717 -0.419431132585 3.7748950632e-08 0.0 -0.5 -0.164616869764 -0.21672719717 0.419431107729 -0.5 0.0 -3.7748950632e-08 -0.12636192815 0.0 0.483764132258 -0.164616869764 0.21672719717 0.419431107729 -3.7748950632e-08 0.0 0.5 -0.164616806431 0.21672719717 -0.419431132585 Faces 80 55 1 2 54 0 0 54 2 3 53 0 0 53 3 4 52 0 0 52 4 5 51 0 0 51 5 6 50 0 0 7 0 50 6 0 0 6 9 8 7 0 0 5 10 9 6 0 0 4 11 10 5 0 0 3 12 11 4 0 0 2 13 12 3 0 0 1 14 13 2 0 0 14 15 16 13 0 0 13 16 17 12 0 0 12 17 18 11 0 0 11 18 19 10 0 0 10 19 20 9 0 0 9 20 21 8 0 0 20 23 22 21 0 0 19 24 23 20 0 0 18 25 24 19 0 0 17 26 25 18 0 0 16 27 26 17 0 0 15 28 27 16 0 0 28 29 30 27 0 0 27 30 31 26 0 0 26 31 32 25 0 0 25 32 33 24 0 0 24 33 34 23 0 0 23 34 35 22 0 0 34 37 36 35 0 0 33 38 37 34 1 1 32 39 38 33 0 0 31 40 39 32 0 0 30 41 40 31 1 1 29 42 41 30 0 0 42 43 44 41 0 0 41 44 45 40 0 0 40 45 46 39 0 0 39 46 47 38 0 0 38 47 48 37 0 0 37 48 49 36 0 0 0 49 48 50 0 0 47 51 50 48 0 0 46 52 51 47 0 0 45 53 52 46 0 0 44 54 53 45 0 0 43 55 54 44 0 0 49 0 63 56 0 0 36 49 56 57 0 0 35 36 57 58 0 0 22 35 58 59 0 0 21 22 59 60 0 0 8 21 60 61 0 0 7 8 61 62 0 0 0 7 62 63 0 0 63 62 64 0 0 2 62 61 64 0 0 2 61 60 64 0 0 2 60 59 64 0 0 2 59 58 64 0 0 2 58 57 64 0 0 2 57 56 64 0 0 2 56 63 64 0 0 2 1 55 65 73 0 0 55 43 66 65 0 0 43 42 67 66 0 0 42 29 68 67 0 0 29 28 70 68 0 0 28 15 71 70 0 0 15 14 72 71 0 0 14 1 73 72 0 0 69 73 65 0 0 2 69 72 73 0 0 2 69 71 72 0 0 2 69 70 71 0 0 2 69 68 70 0 0 2 69 67 68 0 0 2 69 66 67 0 0 2 69 65 66 0 0 2 criticalmass-1.0.0.orig/data/models/Bug1.model0000644000175000017500000001537607630537344020442 0ustar danieldanielName Bug1 Scale 1.0 1.0 1.0 Colors 3 0.754887223244 0.238721847534 0.529323339462 1.0 1.0 0.375939846039 1.0 0.0 0.0 Vertices 62 0.0 0.0 1.61801259761 0.572463219078 -0.235961775888 1.49484867425 0.841772488608 0.407828909075 -1.08481821989 1.49377448027 0.621773510131 -1.36388266014e-07 1.3800675829 0.574443781282 0.61918663389 1.05625810782 0.439660293703 1.1441076312 0.571642775463 0.237942423336 1.49484867425 0.235961775888 0.572463219078 1.49484867425 0.43600048507 1.0577739952 1.1441076312 0.569662042773 1.38204821329 0.61918663389 0.616597780018 1.49591823104 -1.36388266014e-07 0.569662042773 1.38204821329 -0.619186770278 -0.574443781282 1.3800675829 -0.619186770278 -0.621773441937 1.49377434388 -1.36388266014e-07 -0.574443781282 1.3800675829 0.61918663389 -0.439660259606 1.05625803962 1.1441076312 -0.237942423336 0.571642775463 1.49484867425 -0.572463219078 0.235961775888 1.49484867425 -1.05777392701 0.436000450973 1.1441076312 -1.38204821329 0.569662042773 0.61918663389 -1.49591823104 0.616597780018 -1.36388266014e-07 -0.905150274583 0.406889159825 -1.09786832654 -0.903763887859 -0.393984920424 -1.09786832654 -1.49377434388 -0.621773441937 -1.36388266014e-07 -1.3800675829 -0.574443781282 0.61918663389 -1.05625803962 -0.439660259606 1.1441076312 -0.571642775463 -0.237942423336 1.49484867425 -0.235961775888 -0.572463219078 1.49484867425 -0.628332831009 -1.09215447652 1.13620747728 -0.569662042773 -1.38204821329 0.61918663389 -0.30700497453 -2.61106333659 -0.154796794861 -0.283537088858 -2.55412832772 -0.464390111806 0.288515806121 -2.55313787613 -0.464390111806 0.312180636448 -2.60999132482 -0.154796794861 0.574443781282 -1.3800675829 0.61918663389 0.618001078887 -1.03782618838 1.11936830002 0.237942423336 -0.571642775463 1.49484867425 1.05777392701 -0.436000450973 1.1441076312 1.38204821329 -0.569662042773 0.61918663389 1.49591823104 -0.616597780018 -1.36388266014e-07 0.843158943526 -0.393045137077 -1.08481821989 -2.00937940888 0.286819818033 3.36007850645 -2.00937940888 -0.285234048713 3.36007850645 -2.58143325857 -0.285234014616 3.36007850645 -2.58143325857 0.286819886227 3.36007850645 -2.86745991065 0.572846811076 2.21597080706 -2.86746018342 -0.571260922416 2.21597080706 -1.72335248403 -0.57126099061 2.21597080706 -1.72335248403 0.572846674687 2.21597080706 1.70897088693 0.572846811076 2.21597080706 1.70897061415 -0.571260922416 2.21597080706 2.85307831355 -0.57126099061 2.21597080706 2.85307831355 0.572846674687 2.21597080706 1.994997539 0.286819886227 3.36007850645 1.994997539 -0.285234014616 3.36007850645 2.5670513887 -0.285234048713 3.36007850645 2.5670513887 0.286819818033 3.36007850645 -0.502831246873 -1.21991107015 0.881647166642 0.0023908692547 -1.38105789809 0.61918663389 0.507052020444 -1.21816284536 0.881647166642 0.00864195691307 -1.17409620577 0.946065526893 0.00959069926426 -1.23861822111 0.797853762098 Normals 62 0.0 0.0 1.14410769939 0.44563880515 -0.166167433453 1.04054549763 0.549375617989 0.287292642054 -0.96152950127 1.05824814901 0.403075641616 -0.162850385581 0.932967888931 0.659956018949 0.0541554330583 0.745047430621 0.747212253374 0.442147163249 0.446337113072 0.185790499808 1.03691416005 0.184219255838 0.446965624299 1.03691416005 0.318088976132 0.771758526967 0.782373148352 0.405589618329 0.9840156983 0.419626050823 0.460443376358 1.04480531234 -0.0727659103053 0.370568419032 0.853009176874 -0.666345741018 -0.367041861735 0.861912875656 -0.656743734314 -0.461525787734 1.04491005853 -0.0638272918651 -0.409011429438 0.982619082456 0.419626050823 -0.320777529826 0.770641234292 0.782373148352 -0.185790499808 0.446337113072 1.03691416005 -0.446965624299 0.184219255838 1.03691416005 -0.748015375678 0.745885468322 0.439388744665 -0.934259758587 0.658349910729 0.0518160290634 -1.06041297176 0.405100802784 -0.142598833571 -0.566310096553 0.294520367726 -0.949448433249 -0.585723636435 -0.201642566996 -0.961878655231 -1.09686573639 -0.317076395548 -0.0725913248006 -0.954092317318 -0.61690403987 0.134498214472 -0.180134018106 -0.754754251708 0.840718548282 -0.443962797943 -0.153108683195 1.04326896672 -0.145776228383 -0.462468537526 1.03625076752 -0.556847717337 -0.830627726033 0.555800221357 -0.480590173655 -0.763692865886 0.703357220184 -0.495045590902 -1.00335944149 0.239038098471 -0.413690228904 -0.755696967402 -0.752798921332 0.412014255794 -0.745641060549 -0.76365795049 0.497524652219 -1.0049307025 0.226956996352 0.483488253822 -0.762400928036 0.702798573846 0.532580801009 -0.793895570036 0.628531207742 0.158101738274 -0.477866704565 1.02741689953 0.759607628154 -0.733350431957 0.44057590223 0.956641209428 -0.613133040703 0.133555464681 1.09686573639 -0.311245353914 -0.0946236131565 0.570919065227 -0.194100602759 -0.972283784239 -0.575912137354 -0.575912137354 -0.803497644934 -0.575912137354 0.575912137354 -0.803497644934 0.575912137354 0.575912137354 -0.803497644934 0.575912137354 -0.575912137354 -0.803497644934 0.847701832084 -0.754265436162 0.146334891769 0.847946239857 0.754090790988 0.145741312987 -0.676192223689 0.847981155253 -0.364143781567 -0.676262054481 -0.848923939142 -0.361839297231 0.679090269759 -0.847178101143 -0.360687055062 0.678985523571 0.84773674748 -0.359499897498 -0.847911324461 0.754474928539 0.144135153621 -0.847876409065 -0.754544759331 0.143785982612 0.575912137354 -0.575912137354 -0.803497644934 0.575912137354 0.575912137354 -0.803497644934 -0.575912137354 0.575912137354 -0.803497644934 -0.575912137354 -0.575912137354 -0.803497644934 -0.334394943469 -0.945433026309 0.550667521742 0.00157124077349 -0.793197262114 0.824482411737 0.323920017766 -0.908631107714 0.615123286475 0.0222068695986 -0.912436954083 0.689844552728 0.00558663386128 -0.969455568961 0.607476610146 Faces 73 40 2 3 39 0 0 39 3 4 38 0 0 37 5 6 1 0 0 6 0 1 0 0 0 7 0 6 0 0 0 5 8 7 6 0 0 4 9 8 5 0 0 3 10 9 4 0 0 2 11 10 3 0 0 11 12 13 10 0 0 10 13 14 9 0 0 9 14 15 8 0 0 8 15 16 7 0 0 16 0 7 0 0 0 17 0 16 0 0 0 15 18 17 16 0 0 14 19 18 15 0 0 13 20 19 14 0 0 12 21 20 13 0 0 21 22 23 20 0 0 20 23 24 19 0 0 18 25 26 17 0 0 26 0 17 0 0 0 27 0 26 0 0 0 25 28 27 26 0 0 24 29 57 0 1 1 23 30 29 24 0 0 22 31 30 23 0 0 31 32 33 30 0 1 33 34 58 0 0 0 29 58 61 57 0 0 28 60 27 0 0 0 36 0 27 0 0 0 1 0 36 0 0 0 35 37 1 36 0 0 37 35 59 0 1 1 33 39 38 34 0 0 32 40 39 33 0 0 41 44 45 48 0 0 44 43 46 45 0 0 43 42 47 46 0 0 42 41 48 47 0 0 56 53 49 52 0 0 53 54 50 49 0 0 54 55 51 50 0 0 55 56 52 51 0 0 18 48 47 25 0 0 18 19 45 48 0 0 24 46 47 25 0 0 19 24 46 45 0 0 5 37 50 49 0 0 37 38 51 50 0 0 4 5 49 52 0 0 4 52 51 38 0 0 41 42 43 44 0 0 53 56 55 54 0 0 12 11 2 0 0 0 21 12 2 0 0 0 21 2 40 0 0 0 22 21 40 0 0 0 22 40 32 0 0 0 31 22 32 0 0 0 59 34 38 0 1 1 59 38 37 0 1 1 60 35 36 0 0 0 60 36 27 0 0 2 34 59 61 58 0 0 35 60 61 59 0 0 28 57 61 60 0 0 58 29 30 0 0 0 58 30 33 0 0 0 57 28 25 0 1 1 57 25 24 0 1 1 criticalmass-1.0.0.orig/data/models/Hero.model0000644000175000017500000005231707630537344020535 0ustar danieldanielName Hero Scale 1.0 1.0 1.0 Colors 4 0.739849627018 0.739849567413 0.739849627018 0.860150396824 0.198496207595 0.183458656073 0.403984963894 0.333834558725 0.784962415695 1.0 1.0 0.348872184753 Vertices 196 4.14109563828 -0.0667105497579 0.24240252084 4.17936372757 -0.0284421989761 -0.0296751347696 4.21180677414 0.00400012727263 0.000981144781918 4.23348379135 0.0256773957988 0.0468615416485 4.24109601974 0.0332894430128 0.100981155003 4.23348379135 0.0256773985181 0.155100763966 4.21180677414 0.00400012598094 0.200981140312 4.17936372757 -0.0284422029479 0.231637446829 4.14109563828 -0.0125909362657 0.231637447522 4.14109563828 0.0332894535428 0.200981141592 4.14109563828 0.0639457411323 0.155100765639 4.14109563828 0.0747108191815 0.100981156813 4.14109563828 0.0639457458635 0.0468615433213 4.14109563828 0.0332894473839 0.000981146062195 4.14109563828 -0.0125909285687 -0.0296751340767 4.14109563828 -0.0667105299439 -0.0404401972248 4.10282754898 -0.0284421989761 -0.0296751347696 4.07038450241 0.00400012727263 0.000981144781918 4.0487074852 0.0256773957988 0.0468615416485 4.04109525681 0.0332894504634 0.100981155003 4.0487074852 0.0256773985181 0.155100763966 4.07038450241 0.00400013343152 0.200981140312 4.10282754898 -0.0284422029479 0.231637446829 4.08697557449 -0.0667105492874 0.231637445156 4.04109525681 -0.0667105479473 0.200981137221 4.0104393959 -0.0667105459418 0.155100774829 3.99967432022 -0.0667105435762 0.100981150632 4.0104393959 -0.0667105486611 0.0468615376101 4.04109525681 -0.0667105466556 0.000981141691057 4.08697557449 -0.0667105453156 -0.0296751364423 4.19521570206 -0.0667105492874 0.231637445156 4.24109601974 -0.0667105479473 0.200981137221 4.27175188065 -0.0667105459418 0.155100774829 4.28251695633 -0.0667105510268 0.100981150632 4.27175188065 -0.0667105486611 0.0468615376101 4.24109601974 -0.0667105466556 0.000981141691057 4.19521570206 -0.0667105453156 -0.0296751364423 4.19521570206 -2.06671047081 -0.0296751344581 4.24109601974 -2.06671047215 0.00098114367525 4.27175188065 -2.06671047416 0.046861535869 4.28251695633 -2.06671047652 0.100981145165 4.27175188065 -2.06671047889 0.155100776813 4.24109601974 -2.06671048089 0.200981154106 4.19521570206 -2.06671048223 0.231637462042 4.08697557449 -2.06671047081 -0.0296751344581 4.04109525681 -2.06671047215 0.00098114367525 4.0104393959 -2.06671047416 0.046861535869 3.99967432022 -2.06671047652 0.100981145165 4.0104393959 -2.06671047889 0.155100776813 4.04109525681 -2.06671048089 0.200981154106 4.08697557449 -2.06671048223 0.231637462042 4.14109563828 -2.06671047034 -0.0404401952406 4.14109563828 -2.0667104827 0.242402537725 -4.14290475845 -0.0669205145697 0.242402565534 -4.10463619232 -0.0286521675132 -0.0296750900753 -4.07219409943 0.00379016246083 0.000981196926805 -4.05051660538 0.025467430987 0.0468615900681 -4.04290485382 0.033079478201 0.100981199697 -4.05051660538 0.0254674337063 0.155100823562 -4.07219409943 0.00379016116913 0.200981199907 -4.10463619232 -0.028652171485 0.231637491523 -4.14290475845 -0.0128009048028 0.231637492216 -4.14290475845 0.0330794812804 0.200981201187 -4.14290475845 0.0637357688699 0.155100825235 -4.14290475845 0.0745008469191 0.100981201508 -4.14290475845 0.0637357736012 0.0468615917409 -4.14290475845 0.0330794751215 0.000981198207081 -4.14290475845 -0.0128008971058 -0.0296750893824 -4.14290475845 -0.0669205022063 -0.0404401525305 -4.18117332458 -0.0286521675132 -0.0296750900753 -4.21361541748 0.00379015501025 0.000981196926804 -4.23529291153 0.0254674235364 0.0468615900681 -4.24290466309 0.033079478201 0.100981199697 -4.23529291153 0.0254674262557 0.155100823562 -4.21361541748 0.00379016116913 0.200981199907 -4.18117332458 -0.028652171485 0.231637491523 -4.1970243454 -0.0669205140992 0.231637489851 -4.24290466309 -0.0669205202097 0.200981196816 -4.27356100082 -0.0669205182042 0.155100819524 -4.28432607651 -0.0669205158386 0.100981195326 -4.27356100082 -0.0669205209235 0.0468615860297 -4.24290466309 -0.066920518918 0.000981193835943 -4.1970243454 -0.066920517578 -0.029675091748 -4.08878517151 -0.0669205140992 0.231637489851 -4.04290485382 -0.0669205127591 0.200981196816 -4.01224851608 -0.0669205107536 0.155100819524 -4.0014834404 -0.0669205158386 0.100981195326 -4.01224851608 -0.0669205134729 0.0468615860297 -4.04290485382 -0.066920518918 0.000981193835943 -4.08878517151 -0.066920517578 -0.029675091748 -4.08878517151 -2.06692051758 -0.0296750897638 -4.04290485382 -2.06692051892 0.000981195820133 -4.01224851608 -2.06692052092 0.0468615842886 -4.0014834404 -2.06692052329 0.10098119731 -4.01224851608 -2.06692052565 0.155100821508 -4.04290485382 -2.06692052766 0.2009811988 -4.08878517151 -2.066920529 0.231637506736 -4.1970243454 -2.06692051758 -0.0296750897638 -4.24290466309 -2.06692051892 0.000981195820133 -4.27356100082 -2.06692052092 0.0468615842886 -4.28432607651 -2.06692052329 0.10098119731 -4.27356100082 -2.06692052565 0.155100821508 -4.24290466309 -2.06692052766 0.2009811988 -4.1970243454 -2.066920529 0.231637506736 -4.14290475845 -2.06692051711 -0.0404401505463 -4.14290475845 -2.06692052947 0.24240258242 0.282458871603 2.99999999091 0.207888719443 0.350036233664 3.0 1.3113416486e-07 -0.357070505619 3.0 1.3113416486e-07 -0.289602458477 2.99999999092 0.207738232617 -0.112859450281 2.9999999853 0.336220544581 0.105648644269 2.9999999853 0.336277943854 0.215106964111 -1.03992656912 0.919431819759 -0.215381503105 -1.03992656912 0.919318690143 -0.607500016689 -1.0370099841 0.678187622994 -0.941711008549 -0.744500000462 0.435999956966 0.981988549232 -0.744447727188 0.435999956969 0.6228043437 -1.03409364816 0.680960848429 0.731778383255 -1.33584323592 0.697096408627 0.800499975681 -1.00800004185 0.586499944972 0.699662923813 -2.96099617003 0.43599986008 0.759588599205 -2.50117925131 0.755355606422 0.759588599205 -2.15474275499 0.852169121492 0.759588599205 -1.6899445418 0.82612739567 4.00431108475 -0.696656231724 0.105510502404 4.00431108475 -0.797194488229 0.167758906804 4.00431108475 -0.935046680747 0.181316036837 4.00431108475 -1.11539936638 0.130915533424 4.00431108475 -1.35934257512 0.00110811409503 4.00431108475 -0.652560710937 0.00068375991865 -3.99568891525 -0.696656231724 0.105510502404 -3.99568891525 -0.652560710937 0.00068375991865 -3.99568891525 -1.35934257512 0.00110811409503 -3.99568891525 -1.11539936638 0.130915533424 -3.99568891525 -0.935046680747 0.181316036837 -3.99568891525 -0.797194488229 0.167758906804 -0.761091470718 -1.69091728961 0.826127395627 -0.761091470718 -2.15571502596 0.85216912145 -0.761091470718 -2.50215199911 0.755355606379 -0.700337171555 -2.96099617003 0.43599986008 -0.800499975681 -1.00800004185 0.586499944972 -0.730336129665 -1.33391216462 0.696606816159 -0.00140432245098 -2.01462371669 1.70954290167 0.217103689909 -2.01462371518 1.67493453756 0.414222627878 -2.01462371079 1.57449749247 0.570657074451 -2.01462370395 1.41806295649 0.671094179153 -2.01462369534 1.22094407812 0.705702424049 -2.01462368579 1.00243607298 0.570657074451 -1.59899668307 1.00243597194 0.542658388615 -1.61933880421 1.22094397619 0.461403101683 -1.67837435245 1.41806297118 0.334844946861 -1.77032429902 1.57449738394 0.175372377038 -1.88618786504 1.67493454318 0.0661183595657 -1.80681021382 1.67493454665 0.127031445503 -1.61933881966 1.57449739054 0.175372362137 -1.47056085109 1.41806298027 0.20640912652 -1.37503939243 1.22094398687 0.238389730453 -1.27500419448 1.0522676149 -0.242327988148 -1.27500419448 1.0522676149 -0.209217891097 -1.37503939243 1.22094398687 -0.178181096911 -1.47056085109 1.41806298027 -0.129840165377 -1.61933881966 1.57449739054 -0.0689270347357 -1.80681021382 1.67493454665 -0.178181052208 -1.88618786504 1.67493454318 -0.337653666735 -1.77032429902 1.57449738394 -0.464211851358 -1.67837435245 1.41806297118 -0.5454672575 -1.61933904263 1.22094397619 -0.573465883732 -1.59899668307 1.00243597194 -0.708511292934 -2.01462368579 1.00243607298 -0.673903048038 -2.01462369534 1.22094407812 -0.573465883732 -2.01462370395 1.41806295649 -0.417031347752 -2.01462371079 1.57449749247 -0.219912365079 -2.01462371518 1.67493453756 -0.178181022406 -2.14305932691 1.67493453195 -0.33765360713 -2.25892312256 1.57449748179 -0.464211761951 -2.35087305545 1.41806294179 -0.54546713829 -2.40990882488 1.22094406084 -0.573465824127 -2.4302506885 1.00243605481 -0.21991224587 -2.68712238879 1.00243604358 -0.209217682481 -2.65420823666 1.22094405016 -0.178180932999 -2.55868679523 1.4180629327 -0.129840031266 -2.4099083635 1.57449747519 -0.0689269825816 -2.22243697812 1.67493452848 0.0661184340715 -2.22243697812 1.67493452848 0.127031639218 -2.4099083635 1.57449747519 0.175372585654 -2.55868631839 1.4180629327 0.206409424543 -2.65420775982 1.22094405016 0.217103943229 -2.68712238879 1.00243604358 0.570657432079 -2.4302506885 1.00243605481 0.542658746243 -2.40990834805 1.22094406084 0.461403340101 -2.35087305545 1.41806294179 0.334845155478 -2.25892312256 1.57449748179 0.175372466445 -2.14305932691 1.67493453195 -0.21991224587 -2.88712243647 1.00243603484 0.217103943229 -2.88712243647 1.00243603484 -0.000103029313323 -4.35792878843 0.812955010181 Normals 196 0.0 0.0346537461404 0.498794527377 0.149403363466 0.149403383274 -0.453154080536 0.257957696915 0.25795771186 -0.341914106061 0.328897982836 0.328897990852 -0.183385715413 0.35354167223 0.35354167223 1.54537973104e-08 0.328897982836 0.32889797482 0.183385744166 0.257957696915 0.257957681969 0.341914128612 0.149403363466 0.149403343658 0.453154093597 0.0 0.211279625754 0.453154096302 0.0 0.36480300124 0.341914133282 0.0 0.465147844882 0.183385750122 0.0 0.5 2.18556941434e-08 0.0 0.465147860914 -0.183385709457 0.0 0.364803031131 -0.34191410139 0.0 0.21127966537 -0.453154077831 0.0 0.0346537897464 -0.498794524347 -0.149403363466 0.149403383274 -0.453154080536 -0.257957696915 0.25795771186 -0.341914106061 -0.328897982836 0.328897990852 -0.183385715413 -0.35354167223 0.35354167223 1.54537973104e-08 -0.328897982836 0.32889797482 0.183385744166 -0.257957696915 0.257957681969 0.341914128612 -0.149403363466 0.149403343658 0.453154093597 -0.200445577502 0.0428174497515 0.456053348267 -0.355281233788 0.0718405543233 0.344386133712 -0.455992311239 0.0894497403295 0.18456069026 -0.490829199553 0.0952940434217 4.16543493342e-09 -0.455992311239 0.0894497564643 -0.18456068244 -0.355281233788 0.0718405844305 -0.344386127431 -0.200445577502 0.042817489621 -0.456053344524 0.200445577502 0.0428174497515 0.456053348267 0.355281233788 0.0718405543233 0.344386133712 0.455992311239 0.0894497403295 0.18456069026 0.490829199553 0.0952940434217 4.16543493342e-09 0.455992311239 0.0894497564643 -0.18456068244 0.355281233788 0.0718405844305 -0.344386127431 0.200445577502 0.042817489621 -0.456053344524 0.19133579731 2.01915211186e-08 -0.461928158998 0.35354167223 1.54537973104e-08 -0.35354167223 0.461928158998 8.36355332936e-09 -0.19133579731 0.5 -0.0 0.0 0.461928158998 -8.36355332936e-09 0.19133579731 0.35354167223 -1.54537973104e-08 0.35354167223 0.19133579731 -2.01915211186e-08 0.461928158998 -0.19133579731 2.01915211186e-08 -0.461928158998 -0.35354167223 1.54537973104e-08 -0.35354167223 -0.461928158998 8.36355332936e-09 -0.19133579731 -0.5 0.0 0.0 -0.461928158998 -8.36355332936e-09 0.19133579731 -0.35354167223 -1.54537973104e-08 0.35354167223 -0.19133579731 -2.01915211186e-08 0.461928158998 0.0 2.18556941434e-08 -0.5 0.0 -2.18556941434e-08 0.5 0.0 0.0346537461404 0.498794527377 0.149403363466 0.149403383274 -0.453154080536 0.257957696915 0.25795771186 -0.341914106061 0.328897982836 0.328897990852 -0.183385715413 0.35354167223 0.35354167223 1.54537973104e-08 0.328897982836 0.32889797482 0.183385744166 0.257957696915 0.257957681969 0.341914128612 0.149403363466 0.149403343658 0.453154093597 0.0 0.211279625754 0.453154096302 0.0 0.36480300124 0.341914133282 0.0 0.465147844882 0.183385750122 0.0 0.5 2.18556941434e-08 0.0 0.465147860914 -0.183385709457 0.0 0.364803031131 -0.34191410139 0.0 0.21127966537 -0.453154077831 0.0 0.0346537897464 -0.498794524347 -0.149403363466 0.149403383274 -0.453154080536 -0.257957696915 0.25795771186 -0.341914106061 -0.328897982836 0.328897990852 -0.183385715413 -0.35354167223 0.35354167223 1.54537973104e-08 -0.328897982836 0.32889797482 0.183385744166 -0.257957696915 0.257957681969 0.341914128612 -0.149403363466 0.149403343658 0.453154093597 -0.200445577502 0.0428174497515 0.456053348267 -0.355281233788 0.0718405543227 0.344401392501 -0.455992311239 0.0894497403295 0.18456069026 -0.490829199553 0.0952940434217 4.16543493342e-09 -0.455992311239 0.0894497564643 -0.18456068244 -0.355281233788 0.0718405844312 -0.34440138622 -0.200445577502 0.042817489621 -0.456053344524 0.200445577502 0.0428174497515 0.456053348267 0.355281233788 0.0718405543227 0.344401392501 0.455992311239 0.0894497403295 0.18456069026 0.490829199553 0.0952940434217 4.16543493342e-09 0.455992311239 0.0894497564643 -0.18456068244 0.355281233788 0.0718405844312 -0.34440138622 0.200445577502 0.042817489621 -0.456053344524 0.19133579731 2.01915211186e-08 -0.461928158998 0.35354167223 1.54537973104e-08 -0.35354167223 0.461928158998 8.36355332936e-09 -0.19133579731 0.5 -0.0 0.0 0.461928158998 -8.36355332936e-09 0.19133579731 0.35354167223 -1.54537973104e-08 0.35354167223 0.19133579731 -2.01915211186e-08 0.461928158998 -0.19133579731 2.01915211186e-08 -0.461928158998 -0.35354167223 1.54537973104e-08 -0.35354167223 -0.461928158998 8.36355332936e-09 -0.19133579731 -0.5 0.0 0.0 -0.461928158998 -8.36355332936e-09 0.19133579731 -0.35354167223 -1.54537973104e-08 0.35354167223 -0.19133579731 -2.01915211186e-08 0.461928158998 0.0 2.18556941434e-08 -0.5 0.0 -2.18556941434e-08 0.5 0.219458594918 0.344004618413 0.288934007423 0.144795075059 0.247596648316 0.409527878855 -0.150090023875 0.248237532458 0.40722374213 -0.226111635566 0.343287455516 0.284615621075 -0.103350929916 0.347453221528 0.344355628181 0.100344859064 0.347315892381 0.345377996844 0.146488845348 0.151997412301 0.453245646445 -0.148930326104 0.154103199763 0.451734996618 -0.254310727119 0.104937877883 0.417493228731 -0.118396557868 0.088457876427 0.477645192437 0.114902190864 0.0863521038777 0.478881184061 0.25600451231 0.0939664732025 0.419064913327 0.158665731549 0.179418291339 0.438886680101 0.146137878299 0.163884381687 0.449186689865 0.156346321106 -0.0789819266459 0.46830653799 0.238792076707 -0.222663061481 0.378658404154 0.303491324186 -0.0817285871605 0.388851579432 0.232093259692 0.134937565963 0.421796327767 0.333628356457 0.167287201047 0.332712806623 0.351222276688 0.0941953658067 0.343165371959 0.373928040266 -0.0220801565276 0.331186859835 0.397946089506 -0.118411828834 0.2785882004 0.187627792358 -0.131138061045 0.444502079715 0.232902005315 0.105120990266 0.429761652773 -0.333674132824 0.167317718629 0.332636512679 -0.232627332211 0.106006022387 0.429685358866 -0.187749877572 -0.130817611576 0.444547856096 -0.398129224777 -0.118411828823 0.278328800986 -0.374034851789 -0.0220191195034 0.331064789525 -0.351298570633 0.0940427704675 0.343119595585 -0.233115628362 0.135395344567 0.421094393688 -0.304574728012 -0.0820185115632 0.387936022273 -0.239204078913 -0.223059804877 0.378170093084 -0.156804099679 -0.079073479373 0.468138661504 -0.125949889421 0.185964520121 0.446699418806 -0.157719656825 0.18245489471 0.437971123088 0.0 -2.18556941434e-08 0.5 0.168355360627 -2.05790498808e-08 0.470793783665 0.303704947233 -1.73614268929e-08 0.397183150053 0.409588903189 -1.2534324777e-08 0.286751925945 0.476912736893 -6.56331189434e-09 0.150151073933 0.473082661629 -0.00561541280725 0.161717578523 0.380901515484 0.264214000858 0.187322628126 0.387813955545 0.264641247625 0.171926033144 0.331369966269 0.240745248777 0.286751936469 0.245704516768 0.178502750917 0.397183157856 0.136188849807 0.0989562439764 0.47079378799 0.0520187988877 0.160115340635 0.470793790664 0.0938444137573 0.28884242229 0.397183162679 0.126560255885 0.38953824578 0.286751942973 0.153599664569 0.420209338445 0.223197135816 0.192312389612 0.330622271529 0.322016074804 -0.194067195058 0.331293658324 0.320261254487 -0.153370767832 0.420133044487 0.223502326495 -0.126560255885 0.38953824578 0.286751942973 -0.0938444137573 0.28884242229 0.397183162679 -0.0520187988877 0.160115340635 0.470793790664 -0.136188849807 0.0989562439764 0.47079378799 -0.245704516768 0.178502750917 0.397183157856 -0.331369966269 0.240745248777 0.286751936469 -0.387829214334 0.264473400937 0.172124412295 -0.381542414427 0.264397106396 0.185750913256 -0.473677784204 -0.00555437571165 0.15996277308 -0.476912736893 -6.56331189434e-09 0.150151073933 -0.409588903189 -1.2534324777e-08 0.286751925945 -0.303704947233 -1.73614268929e-08 0.397183150053 -0.168355360627 -2.05790498808e-08 0.470793783665 -0.136188849807 -0.0989562851345 0.470793779339 -0.245704516768 -0.17850278564 0.39718314225 -0.331369966269 -0.240745273846 0.286751915422 -0.385830253363 -0.280312514908 0.15015106168 -0.368083745241 -0.269737848629 0.204306143653 -0.218649864197 -0.311319335576 0.32444225381 -0.147373884916 -0.453566080935 0.150151054107 -0.126560255885 -0.389538270848 0.286751908918 -0.0938444137573 -0.288842457013 0.397183137427 -0.0520187988877 -0.160115381793 0.470793776666 0.0520187988877 -0.160115381793 0.470793776666 0.0938444137573 -0.288842457013 0.397183137427 0.126560255885 -0.389538270848 0.286751908918 0.147373884916 -0.453566080935 0.150151054107 0.218482002616 -0.311182006485 0.324686394441 0.367732793093 -0.269951471691 0.204641851904 0.385830253363 -0.280312514908 0.15015106168 0.331369966269 -0.240745273846 0.286751915422 0.245704516768 -0.17850278564 0.39718314225 0.136188849807 -0.0989562851345 0.470793779339 -0.211752682924 -0.041947712346 0.450987277582 0.211203351617 -0.0417645994386 0.451261935793 4.57777641714e-05 0.00331123642003 0.499984741356 Faces 212 15 1 36 0 1 0 36 1 2 35 1 0 35 2 3 34 1 0 34 3 4 33 1 0 33 4 5 32 1 0 32 5 6 31 1 0 31 6 7 30 1 0 7 0 30 0 1 0 8 0 7 0 1 0 6 9 8 7 1 0 5 10 9 6 1 0 4 11 10 5 1 0 3 12 11 4 1 0 2 13 12 3 1 0 1 14 13 2 1 0 15 14 1 0 1 0 15 16 14 0 1 0 14 16 17 13 1 0 13 17 18 12 1 0 12 18 19 11 1 0 11 19 20 10 1 0 10 20 21 9 1 0 9 21 22 8 1 0 22 0 8 0 1 0 23 0 22 0 1 0 21 24 23 22 1 0 20 25 24 21 1 0 19 26 25 20 1 0 18 27 26 19 1 0 17 28 27 18 1 0 16 29 28 17 1 0 15 29 16 0 1 0 29 15 51 44 1 0 28 29 44 45 1 0 27 28 45 46 1 0 26 27 46 47 1 0 25 26 47 48 1 0 24 25 48 49 1 0 23 24 49 50 1 0 0 23 50 52 1 0 30 0 52 43 1 0 31 30 43 42 1 0 32 31 42 41 1 0 33 32 41 40 1 0 34 33 40 39 1 0 35 34 39 38 1 0 36 35 38 37 1 0 15 36 37 51 1 0 68 54 89 0 1 0 89 54 55 88 1 0 88 55 56 87 1 0 87 56 57 86 1 0 86 57 58 85 1 0 85 58 59 84 1 0 84 59 60 83 1 0 60 53 83 0 1 0 61 53 60 0 1 0 59 62 61 60 1 0 58 63 62 59 1 0 57 64 63 58 1 0 56 65 64 57 1 0 55 66 65 56 1 0 54 67 66 55 1 0 68 67 54 0 1 0 68 69 67 0 1 0 67 69 70 66 1 0 66 70 71 65 1 0 65 71 72 64 1 0 64 72 73 63 1 0 63 73 74 62 1 0 62 74 75 61 1 0 75 53 61 0 1 0 76 53 75 0 1 0 74 77 76 75 1 0 73 78 77 74 1 0 72 79 78 73 1 0 71 80 79 72 1 0 70 81 80 71 1 0 69 82 81 70 1 0 68 82 69 0 1 0 82 68 104 97 1 0 81 82 97 98 1 0 80 81 98 99 1 0 79 80 99 100 1 0 78 79 100 101 1 0 77 78 101 102 1 0 76 77 102 103 1 0 53 76 103 105 1 0 83 53 105 96 1 0 84 83 96 95 1 0 85 84 95 94 1 0 86 85 94 93 1 0 87 86 93 92 1 0 88 87 92 91 1 0 89 88 91 90 1 0 68 89 90 104 1 0 117 106 111 112 0 0 111 110 113 112 0 1 109 114 113 110 0 0 109 108 115 114 0 0 107 106 117 116 0 0 118 123 125 124 0 0 123 122 126 125 0 1 122 121 127 126 0 0 121 120 128 127 0 0 118 124 129 119 0 0 141 130 135 136 0 0 136 135 134 137 0 1 137 134 133 138 0 0 138 133 132 139 0 0 141 140 131 130 0 0 112 118 117 0 0 0 112 123 118 0 0 0 147 148 149 146 1 2 146 149 150 145 1 2 145 150 151 144 1 2 144 151 152 143 1 2 152 142 143 0 1 2 153 142 152 0 1 2 151 154 153 152 1 2 150 155 154 151 1 2 149 156 155 150 1 2 148 157 156 149 1 2 157 158 159 156 1 2 156 159 160 155 1 2 155 160 161 154 1 2 154 161 162 153 1 2 162 142 153 0 1 2 163 142 162 0 1 2 161 164 163 162 1 2 160 165 164 161 1 2 159 166 165 160 1 2 158 167 166 159 1 2 167 168 169 166 1 2 166 169 170 165 1 2 165 170 171 164 1 2 164 171 172 163 1 2 172 142 163 0 1 2 173 142 172 0 1 2 171 174 173 172 1 2 170 175 174 171 1 2 169 176 175 170 1 2 168 177 176 169 1 2 177 178 179 176 1 2 176 179 180 175 1 2 175 180 181 174 1 2 174 181 182 173 1 2 182 142 173 0 1 2 183 142 182 0 1 2 181 184 183 182 1 2 180 185 184 181 1 2 179 186 185 180 1 2 178 187 186 179 1 2 187 188 189 186 1 2 186 189 190 185 1 2 185 190 191 184 1 2 184 191 192 183 1 2 192 142 183 0 1 2 143 142 192 0 1 2 191 144 143 192 1 2 190 145 144 191 1 2 189 146 145 190 1 2 188 147 146 189 1 2 112 158 157 0 0 1 112 113 158 0 0 1 113 136 158 0 0 1 136 167 158 0 0 1 136 168 167 0 0 1 136 137 168 0 0 1 137 177 168 0 0 1 137 138 177 0 0 0 138 178 177 0 0 0 138 139 178 0 0 0 112 157 123 0 0 1 123 157 148 0 0 1 123 148 147 0 0 1 122 123 147 0 0 1 122 147 188 0 0 1 121 122 188 0 0 0 121 188 187 0 0 0 120 121 187 0 0 0 113 114 141 0 0 0 113 141 136 0 0 0 115 131 140 0 0 0 116 119 129 0 0 0 106 107 108 0 0 0 106 108 109 0 0 0 106 109 110 111 0 0 131 132 133 0 0 0 131 133 134 0 0 0 131 134 135 0 0 0 131 135 130 0 0 0 127 128 129 0 0 0 126 127 129 0 0 0 125 126 129 0 0 0 125 129 124 0 0 0 139 193 178 0 0 0 139 195 193 0 1 3 193 195 194 0 1 3 178 193 194 0 0 0 178 194 187 0 0 0 120 187 194 0 0 0 120 194 195 0 1 3 120 195 139 0 0 3 114 140 141 0 0 0 114 115 140 0 0 0 117 118 119 0 0 0 116 117 119 0 0 0 116 129 128 120 0 0 115 139 132 131 0 0 107 116 115 108 0 0 115 116 120 139 0 0 criticalmass-1.0.0.orig/data/models/NextGenShippy.model0000644000175000017500000025304610265636020022374 0ustar danieldanielName NextGenShippy Scale 30.0 30.0 30.0 Colors 1 1.0 1.0 1.0 Vertices 768 -0.897970795631 -0.883077263832 -0.0554563552141 -0.536056280136 -1.05695307255 -0.128453865647 -0.275935262442 -1.16826474667 -0.164025887847 -0.112912908196 -1.2211587429 -0.175340071321 -8.21046519661e-09 -1.23555576801 -0.176776692271 0.112912885845 -1.22115886211 -0.175340086222 0.275935232639 -1.16826486588 -0.164025887847 0.536056280136 -1.05695307255 -0.128453880548 0.897970676422 -0.883077263832 -0.0554563552141 1.25177288055 -0.698359131813 0.0397811233997 1.48478460312 -0.554887652397 0.116491869092 1.59877169132 -0.448904633522 0.16082803905 1.63075649738 -0.35198995471 0.175213247538 1.59877181053 -0.223255217075 0.15950807929 1.48478472233 -0.00458249915391 0.104776442051 1.25177299976 0.367821276188 -0.0046177925542 0.897970676422 0.897970736027 -0.166925251484 0.536056280136 1.42000794411 -0.327426761389 0.275935262442 1.76530241966 -0.43348044157 0.112912893295 1.9349398613 -0.485530644655 -1.10276077159e-09 1.9827464819 -0.500184357166 -0.112912893295 1.9349398613 -0.485530614853 -0.275935232639 1.76530241966 -0.43348044157 -0.536056280136 1.42000806332 -0.327426761389 -0.897970795631 0.897970676422 -0.16692520678 -1.25177311897 0.367821276188 -0.00461776927114 -1.48478472233 -0.00458258669823 0.104776479304 -1.59877169132 -0.223255231977 0.159508094192 -1.63075661659 -0.35198995471 0.175213247538 -1.59877181053 -0.448904633522 0.16082803905 -1.48478472233 -0.554887712002 0.116491861641 -1.25177311897 -0.698359072208 0.0397811383009 -0.883293747902 -0.871616363525 -0.00560228666291 -0.540475189686 -1.05255639553 -0.0629086196423 -0.28483992815 -1.16154646873 -0.0908219069242 -0.11862449348 -1.20990943909 -0.0996918901801 -9.50795708832e-09 -1.22206556797 -0.100814215839 0.118624538183 -1.2099095583 -0.0996904745698 0.284840583801 -1.16154646873 -0.0908173322678 0.54047781229 -1.05255627632 -0.0628968775272 0.883300483227 -0.87161642313 -0.00557776587084 1.20538294315 -0.667769789696 0.0692250058055 1.40985488892 -0.503611147404 0.129490286112 1.50615715981 -0.382129073143 0.164335936308 1.53211593628 -0.276070207357 0.175665140152 1.50615715981 -0.145087644458 0.163519963622 1.40985488892 0.0646873340011 0.121742255986 1.20538282394 0.408268302679 0.0395065993071 0.883300483227 0.882922291756 -0.0805013999343 0.540477871895 1.33690035343 -0.196880817413 0.284840613604 1.62943840027 -0.272409021854 0.118624553084 1.76940464973 -0.308813035488 -1.66791391809e-09 1.80777847767 -0.31887447834 -0.118624471128 1.76939129829 -0.308819919825 -0.28483992815 1.62941086292 -0.272424936295 -0.540475130081 1.33685934544 -0.196909531951 -0.883293807507 0.882874488831 -0.080545604229 -1.20537090302 0.408226847649 0.039449673146 -1.40983867645 0.0646584555507 0.12167866528 -1.50613820553 -0.145104706287 0.163454607129 -1.53209638596 -0.276078879833 0.175601199269 -1.50613820553 -0.382132828236 0.164276063442 -1.40983879566 -0.503612339497 0.129438102245 -1.20537078381 -0.66776996851 0.0691850483418 -0.810162425041 -0.803707957268 0.0071159186773 -0.514585196972 -0.983584702015 -0.0250135604292 -0.280450284481 -1.08259439468 -0.0405858047307 -0.119615517557 -1.12155711651 -0.0454821772873 -7.74775532619e-09 -1.12978541851 -0.0460768565536 0.119616046548 -1.1215569973 -0.0454724058509 0.280455082655 -1.08259427547 -0.0405543185771 0.514603734016 -0.98358476162 -0.0249329712242 0.810208797455 -0.803707897663 0.00728420633823 1.06853866577 -0.585196256638 0.0494568943977 1.22071659565 -0.401727199554 0.0835220366716 1.286419034 -0.265689253807 0.103309057653 1.30235874653 -0.153158783913 0.109888985753 1.28641891479 -0.0270095765591 0.103510417044 1.22071671486 0.157437592745 0.0818389281631 1.06853866577 0.439612567425 0.0406427048147 0.81020873785 0.80761384964 -0.0169850327075 0.514603674412 1.13878214359 -0.0699320882559 0.280455112457 1.33982539177 -0.102501660585 0.119616039097 1.4298568964 -0.117319576442 -3.53991569391e-09 1.45272052288 -0.121171325445 -0.119615502656 1.42976558208 -0.117366917431 -0.280450254679 1.33963608742 -0.102611169219 -0.514585256577 1.13849949837 -0.070129185915 -0.810162425041 0.807286322117 -0.0172883179039 -1.06845593452 0.439328670502 0.040251981467 -1.22060465813 0.157239630818 0.0814026594162 -1.28629004955 -0.0271268878132 0.103062145412 -1.30222439766 -0.153218194842 0.109450288117 -1.28628993034 -0.265715390444 0.102898322046 -1.22060465813 -0.401735812426 0.0831637904048 -1.06845593452 -0.585197508335 0.0491826720536 -0.748854517937 -0.746176183224 0.00800363905728 -0.490183144808 -0.922571122646 -0.00667194277048 -0.274024397135 -1.01279258728 -0.0135582583025 -0.118899464607 -1.04429411888 -0.0155710838735 -1.64656075441e-08 -1.04952573776 -0.0157419424504 0.118901155889 -1.04429388046 -0.0155404703692 0.274039626122 -1.01279246807 -0.01345955953 0.490241020918 -0.922571063042 -0.00641931546852 0.748999774456 -0.746176123619 0.00853119231761 0.959246039391 -0.520224511623 0.0284753944725 1.07268917561 -0.325395673513 0.0448420159519 1.1160017252 -0.18077018857 0.0546102188528 1.12467694283 -0.065223544836 0.0582808032632 1.11600184441 0.0555083453655 0.0562895461917 1.0726890564 0.219057247043 0.0488685555756 0.959245979786 0.453461438417 0.0361004844308 0.748999834061 0.740865528584 0.0209662206471 0.490240991116 0.981142818928 0.0105163464323 0.274039655924 1.11541879177 0.00631451932713 0.118901178241 1.16940236092 0.00554707460105 1.5644461282e-09 1.18113255501 0.00566134927794 -0.118899457157 1.16911673546 0.00539870979264 -0.27402433753 1.11482524872 0.005971216131 -0.490183115005 0.980256915092 0.00989853125066 -0.748854458332 0.739838957787 0.0200155060738 -0.958986520767 0.452571690083 0.0348756872118 -1.07233774662 0.218436837196 0.0475009605289 -1.11559736729 0.0551405884326 0.0548843219876 -1.12425529957 -0.0654097124934 0.0569056235254 -1.1155974865 -0.180852234364 0.0533227585256 -1.07233774662 -0.325422674417 0.0437190271914 -0.958986580372 -0.520228266716 0.0276157874614 -0.714259564877 -0.713451683521 0.0136352190748 -0.475197792053 -0.885734379292 0.00567017635331 -0.269161164761 -0.969894349575 0.00239361566491 -0.117798425257 -0.996798276901 0.00175611418672 -9.3366008258e-09 -1.00027382374 0.00186800945085 0.117802508175 -0.996798217297 0.00182523753028 0.269197642803 -0.969894349575 0.00262120133266 0.475336313248 -0.885734379292 0.00626182928681 0.714607298374 -0.713451564312 0.0148826362565 0.900228500366 -0.486047357321 0.0271365325898 0.994188249111 -0.287183314562 0.0377191454172 1.02638018131 -0.139494135976 0.0445868372917 1.03148078918 -0.023702211678 0.0480546429753 1.0263800621 0.0924989581108 0.0488030388951 0.994188249111 0.24283708632 0.0481599234045 0.900228559971 0.44950735569 0.047769587487 0.714607298374 0.692413032055 0.050045710057 0.475336283445 0.884484112263 0.0559801496565 0.269197702408 0.98434138298 0.0621126033366 0.117802537978 1.02014088631 0.0661549344659 -2.74148925783e-09 1.02627789974 0.0674955323339 -0.117798402905 1.01945745945 0.0657999515533 -0.269161075354 0.982921540737 0.0612912029028 -0.475197821856 0.882364451885 0.0545019619167 -0.714259505272 0.689956843853 0.047771025449 -0.899607777596 0.447378575802 0.0448392033577 -0.993347585201 0.241352707148 0.0448882095516 -1.0254124403 0.0916191339493 0.0454421080649 -1.03047168255 -0.0241476148367 0.0447670780122 -1.02541232109 -0.139690473676 0.0415117666125 -0.993347644806 -0.287247866392 0.0350412540138 -0.8996078372 -0.486056447029 0.0250926800072 -0.68544870615 -0.68542021513 0.031707175076 -0.459220051765 -0.850693881512 0.0220715831965 -0.261550843716 -0.929049670696 0.0182467661798 -0.114875845611 -0.952535510063 0.0176115278155 -7.45512362954e-09 -0.954886853695 0.0178052354604 0.114883288741 -0.952535569668 0.0177054591477 0.26161685586 -0.929049670696 0.0185936968774 0.459470331669 -0.850693881512 0.0230447649956 0.686077296734 -0.68542021513 0.0338502898812 0.858163833618 -0.463228493929 0.0494425222278 0.942533373833 -0.267310470343 0.0632098987699 0.969704449177 -0.121792197227 0.072617419064 0.973302125931 -0.0090050585568 0.0782133415341 0.969704508781 0.101219944656 0.0812032595277 0.942533373833 0.23877774179 0.0834861472249 0.858163893223 0.420774579048 0.087034098804 0.686077296734 0.62541615963 0.0937379524112 0.459470331669 0.776858389378 0.102897882462 0.261616885662 0.848101496696 0.110487863421 0.114883281291 0.868934333324 0.114886008203 -2.20734808209e-09 0.870447933674 0.116150684655 -0.114875853062 0.867699146271 0.114244423807 -0.261550784111 0.845535337925 0.109003312886 -0.459220021963 0.773027300835 0.100226305425 -0.68544870615 0.620976984501 0.0896268188953 -0.857041835785 0.416927188635 0.0817383080721 -0.941013932228 0.236094966531 0.0775759890676 -0.967955291271 0.0996297895908 0.0751378163695 -0.971478462219 -0.00981004256755 0.0722918137908 -0.967955350876 -0.12214705348 0.0670996308327 -0.941013872623 -0.267427116632 0.0584373436868 -0.85704189539 -0.463244855404 0.0458451248705 -0.642916142941 -0.643039882183 0.0666931346059 -0.431305170059 -0.796719372272 0.0483858957887 -0.24591177702 -0.868538439274 0.0399041436613 -0.10808031261 -0.889361679554 0.0374952815473 -1.34184583445e-08 -0.891118824482 0.0373157113791 0.108089789748 -0.889361739159 0.0375216081738 0.245995998383 -0.868538379669 0.0401524268091 0.431624382734 -0.796719312668 0.0493371225893 0.643717765808 -0.643039882183 0.0690903663635 0.804150938988 -0.434671998024 0.0957888886333 0.882330834866 -0.25025755167 0.118595309556 0.907196879387 -0.113287940621 0.133905574679 0.910354316235 -0.00769932474941 0.143031612039 0.907196938992 0.0935459285975 0.148179963231 0.882330775261 0.213373661041 0.152358978987 0.804150938988 0.359405934811 0.15852651 0.643717706203 0.504397749901 0.169291377068 0.431624412537 0.588055968285 0.183257356286 0.245995998383 0.609111666679 0.194527074695 0.108089789748 0.602653682232 0.200955703855 8.45603476129e-10 0.595636487007 0.202810481191 -0.108080305159 0.601078271866 0.200137495995 -0.245911747217 0.605839192867 0.192633807659 -0.431305110455 0.583170294762 0.179850265384 -0.642916083336 0.498736470938 0.164048433304 -0.802720010281 0.35449936986 0.151773989201 -0.880393028259 0.209952369332 0.144830539823 -0.904966115952 0.0915179997683 0.140471547842 -0.908028542995 -0.00872591417283 0.135540768504 -0.904966175556 -0.113740466535 0.126989036798 -0.880392968655 -0.250406324863 0.112711846828 -0.80272012949 -0.43469285965 0.09149222821 -0.591364741325 -0.591461777687 0.102958485484 -0.396691888571 -0.73370796442 0.075599566102 -0.226163551211 -0.800618231297 0.0612975209951 -0.0993970483541 -0.820316195488 0.0560893528163 -5.88005732993e-09 -0.822121858597 0.0550910197198 0.0994044989347 -0.820316255093 0.055933367461 0.226229563355 -0.800618231297 0.0611253120005 0.396942257881 -0.73370796442 0.0757977068424 0.591993331909 -0.591461777687 0.104203529656 0.739535331726 -0.399331927299 0.140061706305 0.811433196068 -0.229571193457 0.169476747513 0.834301292896 -0.103480495512 0.188660293818 0.837204933167 -0.00603725994006 0.199870198965 0.834301352501 0.0866113901138 0.206395968795 0.811433196068 0.188322588801 0.213197290897 0.739535272121 0.293597489595 0.22596155107 0.591993272305 0.365461736917 0.249751225114 0.396942228079 0.36073115468 0.280623406172 0.226229593158 0.313676029444 0.305506080389 0.0994044840336 0.269119858742 0.31982088089 2.15476703147e-09 0.25013846159 0.324284225702 -0.0993970632553 0.267884552479 0.319179296494 -0.226163506508 0.311109960079 0.304021567106 -0.396691918373 0.356900155544 0.277951806784 -0.59136480093 0.361022531986 0.24564011395 -0.738413274288 0.28975006938 0.220669075847 -0.809913694859 0.185639843345 0.207310736179 -0.832552134991 0.0850212424994 0.200402289629 -0.83538120985 -0.00684223463759 0.194111511111 -0.832552194595 -0.103835336864 0.183464199305 -0.809913694859 -0.229687809944 0.165246903896 -0.738413274288 -0.399348318577 0.137242659926 -0.55397439003 -0.55402803421 0.124610543251 -0.371544539928 -0.689251124859 0.0922571644187 -0.211797073483 -0.753814220428 0.0740534588695 -0.0930748283863 -0.773473203182 0.0666215494275 -6.91756962823e-09 -0.7755843997 0.0648708418012 0.0930789411068 -0.773473083973 0.0663114860654 0.211833581328 -0.753814160824 0.0734933614731 0.371683031321 -0.689251065254 0.0916728302836 0.554322123528 -0.554028093815 0.12449529022 0.692475318909 -0.373005270958 0.163810044527 0.759798109531 -0.213682502508 0.194972261786 0.781211018562 -0.0953342095017 0.214769035578 0.783929944038 -0.00334040494636 0.226118758321 0.781211078167 0.0842285379767 0.232937008142 0.759798109531 0.17513205111 0.241594821215 0.692475378513 0.254898011684 0.260051429272 0.554322183132 0.27933806181 0.295429766178 0.371683061123 0.215766891837 0.341363638639 0.211833611131 0.122653000057 0.378370881081 0.093078956008 0.0520730391145 0.399722903967 -3.32697869254e-09 0.0249392371625 0.406550526619 -0.0930748358369 0.0513895489275 0.399367898703 -0.211797058582 0.121233157814 0.377549469471 -0.371544539928 0.21364723146 0.339885443449 -0.55397439003 0.276881873608 0.29315507412 -0.691854536533 0.252769201994 0.257126033306 -0.758957386017 0.173647686839 0.238358914852 -0.780243217945 0.0833486989141 0.229685008526 -0.782920897007 -0.00378579995595 0.223078295588 -0.78024315834 -0.0955305173993 0.212182074785 -0.758957386017 -0.213747039437 0.193117886782 -0.691854536533 -0.373014301062 0.162947192788 -0.528078973293 -0.52810138464 0.136521324515 -0.354126065969 -0.658525645733 0.101826049387 -0.201845064759 -0.721525251865 0.0812108144164 -0.0886950045824 -0.741197049618 0.0721683055162 -9.1838305849e-09 -0.743533909321 0.0698251649737 0.0886967107654 -0.741196990013 0.0717854723334 0.201860323548 -0.721525251865 0.080450668931 0.35418394208 -0.658525586128 0.100796476007 0.528224229813 -0.52810138464 0.135563120246 0.659873247147 -0.354736596346 0.175329402089 0.72402626276 -0.202633082867 0.205832406878 0.744431078434 -0.0896393209696 0.22469907999 0.747021973133 -0.00139613810461 0.235293358564 0.744431018829 0.0829639434814 0.241770520806 0.72402626276 0.16847038269 0.250908136368 0.659873187542 0.236966192722 0.271453499794 0.528224289417 0.241549551487 0.311251342297 0.354183971882 0.154066383839 0.362932175398 0.201860323548 0.0425707809627 0.404563128948 0.0886967182159 -0.0382365584373 0.428609013557 -3.8546859038e-09 -0.0684867724776 0.436369001865 -0.088695012033 -0.0385222248733 0.428460627794 -0.201845049858 0.0419773608446 0.404219835997 -0.354126065969 0.153180480003 0.362314373255 -0.528078913689 0.240522950888 0.31030061841 -0.659613788128 0.236076459289 0.270234197378 -0.723674893379 0.167849987745 0.249579578638 -0.744026660919 0.0825962051749 0.240484073758 -0.746600329876 -0.00158229307272 0.234187588096 -0.744026601315 -0.0897213742137 0.223943844438 -0.723674952984 -0.20266006887 0.205607309937 -0.659613788128 -0.354740381241 0.175757467747 -0.500581622124 -0.499976754189 0.145282834768 -0.335661649704 -0.623876750469 0.109358675778 -0.191309556365 -0.683923244476 0.0867797955871 -0.0840623453259 -0.70280456543 0.0762162655592 -8.52834247667e-10 -0.705106496811 0.073289707303 0.0840628966689 -0.70280456543 0.0758427083492 0.191314399242 -0.683923304081 0.0860150381923 0.335680156946 -0.623876750469 0.108250491321 0.500627994537 -0.499976754189 0.144073665142 0.625399112701 -0.335612654686 0.182866185904 0.686200559139 -0.191496610641 0.211382776499 0.705539405346 -0.0843563526869 0.228373765945 0.707994878292 -0.000445385812782 0.237620070577 0.705539405346 0.0801506116986 0.243250638247 0.686200618744 0.162170678377 0.251351892948 0.625399053097 0.228205785155 0.269723713398 0.500627994537 0.233229786158 0.305360019207 0.335680127144 0.149976372719 0.351628482342 0.191314414144 0.0434936285019 0.388897418976 0.0840628966689 -0.0337542071939 0.41043266654 -6.16118889241e-09 -0.0626376345754 0.417406618595 -0.0840623602271 -0.0338453538716 0.410385340452 -0.191309526563 0.0433043502271 0.388787895441 -0.335661679506 0.149693787098 0.351431399584 -0.500581681728 0.232902273536 0.305056720972 -0.625316381454 0.227921962738 0.269338071346 -0.686088502407 0.161972761154 0.250951856375 -0.70541036129 0.0800332948565 0.242912441492 -0.707860350609 -0.00050477363402 0.237431168556 -0.70541036129 -0.0843825191259 0.228456482291 -0.686088502407 -0.191505223513 0.211856976151 -0.62531632185 -0.335613876581 0.183785811067 -0.459456473589 -0.45374840498 0.145604804158 -0.308075726032 -0.563721418381 0.110879473388 -0.175582632422 -0.615859925747 0.0875515714288 -0.0771506428719 -0.631488084793 0.075882948935 -5.24323429119e-09 -0.633053064346 0.0724588483572 0.0771507024765 -0.631488025188 0.0755960196257 0.175583347678 -0.615859866142 0.0869571641088 0.308078348637 -0.563721358776 0.109996937215 0.459463179111 -0.453748375177 0.14459310472 0.573974847794 -0.30583012104 0.179373890162 0.629776775837 -0.175019234419 0.203331112862 0.647525370121 -0.077126942575 0.216726437211 0.649779081345 -6.49156354484e-05 0.223597034812 0.647525370121 0.0745448321104 0.227648049593 0.629776835442 0.153267979622 0.233108326793 0.573974847794 0.223941415548 0.245090648532 0.459463149309 0.248581066728 0.268166869879 0.308078408241 0.197823286057 0.298104137182 0.175583332777 0.120545819402 0.32221788168 0.0771507173777 0.0613933689892 0.33615398407 -5.00131402958e-09 0.0386957526207 0.340673744678 -0.0771506354213 0.0613800920546 0.336147129536 -0.175582647324 0.120518215001 0.322201937437 -0.308075726032 0.197782069445 0.298075467348 -0.459456443787 0.248533323407 0.268122673035 -0.573962807655 0.22389999032 0.245037540793 -0.629760444164 0.153239116073 0.233071982861 -0.647506654263 0.0745277330279 0.227665543556 -0.649759590626 -7.35766370781e-05 0.223721042275 -0.647506594658 -0.0771307572722 0.217037752271 -0.629760503769 -0.175020501018 0.203905120492 -0.573962807655 -0.305830270052 0.180232033134 -0.405329942703 -0.384170085192 0.121671140194 -0.271781057119 -0.468579500914 0.0938673987985 -0.154896378517 -0.504427671432 0.0737498626113 -0.0680609345436 -0.512352406979 0.0630124285817 -4.10523615102e-09 -0.511831581593 0.0597056485713 0.068060927093 -0.512352347374 0.0628699362278 0.154896363616 -0.504427671432 0.0734538510442 0.271781027317 -0.468579471111 0.0934254676104 0.405329883099 -0.384170085192 0.121159054339 0.506349861622 -0.263352900743 0.146468669176 0.555577337742 -0.152672469616 0.162239044905 0.571234941483 -0.067810356617 0.170087352395 0.573223054409 -3.79945852558e-10 0.173619300127 0.571234941483 0.0666500627995 0.175501212478 0.555577337742 0.142374143004 0.17735221982 0.506349861622 0.224324554205 0.180627927184 0.405329883099 0.286184608936 0.186607211828 0.271780997515 0.293674558401 0.194324418902 0.154896363616 0.267566621304 0.200540363789 0.0680609196424 0.239682838321 0.204132989049 3.79945852558e-10 0.227543637156 0.205298632383 -0.0680609345436 0.239682853222 0.204132974148 -0.154896363616 0.267566621304 0.200540363789 -0.271781057119 0.293674558401 0.194324404001 -0.405329912901 0.286184608936 0.186607226729 -0.506349921227 0.224324539304 0.180629819632 -0.555577397346 0.142374143004 0.17736569047 -0.571235001087 0.0666500553489 0.175542160869 -0.573223114014 -4.93230123411e-09 0.173712149262 -0.571235001087 -0.0678103715181 0.170270785689 -0.555577397346 -0.152672454715 0.16254851222 -0.506349980831 -0.263352900743 0.146912500262 -0.367523044348 -0.322755426168 0.0737940147519 -0.246430873871 -0.379209935665 0.0573274306953 -0.140448540449 -0.395539283752 0.0446786098182 -0.0617125891149 -0.393376111984 0.037608101964 -3.88644494365e-09 -0.389870554209 0.0353617928922 0.0617125853896 -0.393376111984 0.0375696532428 0.140448495746 -0.395539194345 0.0445987433195 0.246430829167 -0.379209905863 0.0572081953287 0.367523014545 -0.322755396366 0.0736558437347 0.459120482206 -0.228599563241 0.0873560085893 0.503756284714 -0.135743409395 0.0949594378471 0.517953336239 -0.0611824691296 0.0981419980526 0.519756019115 3.57868756851e-09 0.0992301777005 0.517953395844 0.0611847527325 0.099647603929 0.503756284714 0.135763600469 0.0994355529547 0.459120452404 0.228676080704 0.0980825424194 0.367522984743 0.322947502136 0.0951056107879 0.246430844069 0.379552841187 0.0911991074681 0.140448510647 0.396003603935 0.088052533567 0.0617125853896 0.393910735846 0.086233921349 -3.57868756851e-09 0.390427917242 0.0856438651681 -0.0617125928402 0.393910765648 0.0862339362502 -0.140448510647 0.396003603935 0.0880525410175 -0.246430844069 0.379552811384 0.0911991000175 -0.36752307415 0.322947472334 0.0951056107879 -0.459120512009 0.228676065803 0.0980830639601 -0.503756344318 0.135763600469 0.099439188838 -0.517953395844 0.0611847341061 0.0996586382389 -0.51975607872 -6.75882283474e-09 0.0992552265525 -0.517953455448 -0.0611824728549 0.0981914922595 -0.503756344318 -0.135743424296 0.0950429290533 -0.459120541811 -0.228599578142 0.0874757394195 -0.355050951242 -0.284757047892 0.0304696392268 -0.238068088889 -0.318064808846 0.0226072203368 -0.135682314634 -0.316739112139 0.016340162605 -0.0596183389425 -0.304765701294 0.012743758969 -4.35643299213e-09 -0.298172295094 0.0115819964558 0.0596183240414 -0.304765701294 0.0127396369353 0.135682299733 -0.316739112139 0.0163316018879 0.238068044186 -0.318064719439 0.0225944388658 0.35505092144 -0.284757018089 0.0304548311979 0.443539947271 -0.210069462657 0.0365968644619 0.486660987139 -0.12829439342 0.0396893136203 0.500376343727 -0.0587859377265 0.0407548323274 0.502117812634 1.2897102275e-09 0.04096345976 0.500376343727 0.0594807825983 0.0409467667341 0.486660987139 0.134461477399 0.0404401645064 0.443539917469 0.233441382647 0.0387738347054 0.355050891638 0.343435078859 0.0353328473866 0.238068059087 0.422805577517 0.0308410879225 0.135682299733 0.458581984043 0.0272231176496 0.0596183240414 0.468052357435 0.0251320581883 -1.2897102275e-09 0.468416512012 0.0244535971433 -0.0596183314919 0.468052327633 0.025132060051 -0.135682314634 0.458581954241 0.0272231176496 -0.238068073988 0.422805547714 0.0308410916477 -0.355050951242 0.343435049057 0.0353328473866 -0.443539947271 0.233441382647 0.0387738905847 -0.486661046743 0.134461447597 0.0404405593872 -0.500376343727 0.0594807714224 0.0409479513764 -0.502117872238 -6.87307499803e-09 0.040966141969 -0.500376403332 -0.0587859563529 0.040760140866 -0.486661076546 -0.12829439342 0.0396982654929 -0.443540036678 -0.210069477558 0.0366097055376 -0.353553384542 -0.250232994556 -0.00402648793533 -0.237063929439 -0.257241398096 -0.00718723144382 -0.135110020638 -0.234851256013 -0.00973310973495 -0.0593668818474 -0.210750564933 -0.0112045388669 -3.36306449356e-09 -0.200233772397 -0.0116819534451 0.0593668594956 -0.210750535131 -0.0112045397982 0.135110005736 -0.234851226211 -0.00973310787231 0.237063914537 -0.257241398096 -0.00718723330647 0.353553324938 -0.250232964754 -0.00402648746967 0.441669136286 -0.195910617709 -0.001603844692 0.484608352184 -0.124251008034 -0.000423279823735 0.498265773058 -0.0581434071064 -4.77859866805e-05 0.499999940395 5.95056337538e-10 -1.04890204966e-07 0.498265773058 0.0593816302717 -3.19568789564e-05 0.484608352184 0.135241016746 -0.000282790424535 0.441669106483 0.237560391426 -0.00107141805347 0.35355335474 0.354799777269 -0.00268976716325 0.237063914537 0.443894058466 -0.00480117322877 0.135110005736 0.48762139678 -0.00650184368715 0.0593668743968 0.501734316349 -0.00748477224261 -5.95056337538e-10 0.503616273403 -0.00780369108543 -0.0593668706715 0.501734256744 -0.00748477224261 -0.135110005736 0.487621366978 -0.00650184368715 -0.23706394434 0.443894028664 -0.00480117416009 -0.35355335474 0.354799777269 -0.00268976762891 -0.441669136286 0.237560361624 -0.00107141968329 -0.484608381987 0.135240986943 -0.000282791676 -0.498265862465 0.0593816228211 -3.19581595249e-05 -0.5 -2.62583466082e-09 -1.06869265437e-07 -0.498265862465 -0.0581434071064 -4.77868343296e-05 -0.484608411789 -0.124251015484 -0.000423280231189 -0.441669166088 -0.19591063261 -0.00160384550691 -0.355050981045 -0.197813734412 -0.0423395186663 -0.23806810379 -0.162870287895 -0.0433478355408 -0.135682329535 -0.106570467353 -0.0441600047052 -0.0596183352172 -0.062823869288 -0.0446294136345 -1.78415682228e-09 -0.0459214001894 -0.0447817184031 0.0596183314919 -0.062823869288 -0.0446294136345 0.135682314634 -0.106570459902 -0.0441600084305 0.238068088889 -0.162870272994 -0.0433478392661 0.355050951242 -0.197813749313 -0.0423395186663 0.443539977074 -0.175439298153 -0.0415666624904 0.486661046743 -0.119156643748 -0.0411900468171 0.500376343727 -0.0577564127743 -0.0410702601075 0.502117872238 5.87805359942e-10 -0.0410550497472 0.500376343727 0.0597635582089 -0.0410652123392 0.486661046743 0.136971220374 -0.0411452315748 0.443539947271 0.242952749133 -0.0413968116045 0.355050951242 0.367314457893 -0.0419130846858 0.238068073988 0.465430438519 -0.0425866544247 0.135682314634 0.516305744648 -0.0431291908026 0.0596183352172 0.534502744675 -0.0434427596629 -5.87805359942e-10 0.537698328495 -0.0435444973409 -0.0596183389425 0.53450268507 -0.0434427633882 -0.135682314634 0.516305804253 -0.0431291908026 -0.23806810379 0.465430408716 -0.04258665815 -0.355050981045 0.367314457893 -0.0419130884111 -0.443539977074 0.24295270443 -0.0413968116045 -0.486661106348 0.136971205473 -0.0411452278495 -0.500376403332 0.0597635470331 -0.0410652123392 -0.502117931843 -2.39224284826e-09 -0.0410550497472 -0.500376403332 -0.0577564127743 -0.0410702601075 -0.486661076546 -0.119156651199 -0.0411900505424 -0.443540006876 -0.175439313054 -0.0415666624904 -0.367523133755 -0.143394067883 -0.100269526243 -0.246430948377 -0.0590483210981 -0.100416496396 -0.140448540449 0.0380324646831 -0.100534871221 -0.0617126040161 0.105742692947 -0.100603289902 -5.94172533397e-09 0.130515486002 -0.100625492632 0.0617125965655 0.105742752552 -0.100603304803 0.140448525548 0.0380324572325 -0.100534871221 0.246430888772 -0.0590482801199 -0.100416496396 0.367523103952 -0.143394038081 -0.100269526243 0.459120541811 -0.157158568501 -0.100156888366 0.503756403923 -0.116892501712 -0.100101992488 0.517953515053 -0.059058573097 -0.100084535778 0.519756197929 5.77532799362e-10 -0.100082315505 0.517953515053 0.0620031543076 -0.100083805621 0.503756463528 0.143027380109 -0.100095458329 0.459120571613 0.256204158068 -0.100132137537 0.367523133755 0.392060041428 -0.100207358599 0.246430903673 0.502919197083 -0.100305557251 0.140448540449 0.563069760799 -0.100384622812 0.0617125965655 0.586233735085 -0.100430332124 -5.77532799362e-10 0.590945720673 -0.10044515878 -0.0617126002908 0.586233735085 -0.100430347025 -0.140448540449 0.563069760799 -0.100384630263 -0.246430903673 0.502919197083 -0.100305557251 -0.367523103952 0.392060011625 -0.10020738095 -0.459120571613 0.256204128265 -0.100132122636 -0.503756463528 0.143027365208 -0.100095465779 -0.517953515053 0.062003146857 -0.10008379817 -0.519756197929 -7.56245199796e-09 -0.100082315505 -0.517953574657 -0.0590585842729 -0.100084543228 -0.503756463528 -0.116892509162 -0.100101999938 -0.459120631218 -0.157158568501 -0.100156873465 -0.405330061913 -0.152944043279 -0.176776707172 -0.271781146526 -0.0558389499784 -0.176776692271 -0.154896438122 0.0545169785619 -0.176776692271 -0.0680609568954 0.131093144417 -0.176776692271 -4.10523259831e-09 0.159031033516 -0.176776707172 0.0680609494448 0.131093218923 -0.176776692271 0.154896408319 0.0545170046389 -0.176776692271 0.271781116724 -0.0558389350772 -0.176776692271 0.40533003211 -0.152944013476 -0.176776707172 0.506350040436 -0.171253859997 -0.176776692271 0.555577635765 -0.128370568156 -0.176776692271 0.571235120296 -0.0650723129511 -0.17677667737 0.573223233223 -2.70824873638e-09 -0.176776692271 0.571235060692 0.0684346333146 -0.17677667737 0.55557757616 0.158213108778 -0.176776692271 0.50635010004 0.284350663424 -0.176776692271 0.405330061913 0.436887413263 -0.176776707172 0.271781116724 0.562680184841 -0.176776692271 0.154896423221 0.631861507893 -0.176776692271 0.0680609419942 0.659051477909 -0.17677667737 2.70824873638e-09 0.664781451225 -0.176776692271 -0.0680609494448 0.659051477909 -0.17677667737 -0.154896408319 0.631861507893 -0.176776692271 -0.271781146526 0.562680244446 -0.176776692271 -0.405330091715 0.436887383461 -0.176776692271 -0.50635010004 0.284350663424 -0.176776707172 -0.55557769537 0.158213093877 -0.176776707172 -0.571235120296 0.068434625864 -0.176776692271 -0.573223292828 -8.467622159e-09 -0.176776707172 -0.571235120296 -0.0650723204017 -0.176776692271 -0.555577635765 -0.128370568156 -0.176776692271 -0.506350159645 -0.171253859997 -0.176776692271 -0.461607038975 -0.274461209774 -0.229220867157 -0.308959007263 -0.242273747921 -0.229836344719 -0.17583578825 -0.180102333426 -0.230136245489 -0.0771913900971 -0.129741325974 -0.230231657624 5.60407345529e-11 -0.109914340079 -0.230243757367 0.0771913826466 -0.129741281271 -0.230231642723 0.175835758448 -0.18010237813 -0.230136245489 0.308958917856 -0.242273673415 -0.229836344719 0.46160697937 -0.274461179972 -0.229220852256 0.577749073505 -0.235835775733 -0.228417858481 0.634856462479 -0.158531889319 -0.227771088481 0.653356492519 -0.077809676528 -0.227397277951 0.65585321188 -0.00296778674237 -0.227275982499 0.653356552124 0.0746500119567 -0.227409377694 0.634856462479 0.176071316004 -0.227878570557 0.577749013901 0.317396610975 -0.228825315833 0.461607009172 0.486352026463 -0.230243772268 0.308958977461 0.623337566853 -0.231662243605 0.17583578825 0.697037994862 -0.232608929276 0.077191375196 0.725050330162 -0.233078166842 -2.85000845146e-09 0.730614423752 -0.233211562037 -0.0771913826466 0.725050389767 -0.233078151941 -0.17583578825 0.697037994862 -0.232608929276 -0.308958917856 0.623337566853 -0.231662243605 -0.461606949568 0.48635199666 -0.230243757367 -0.577749073505 0.317396610975 -0.228825286031 -0.634856522083 0.176071316004 -0.227878585458 -0.653356552124 0.0746499970555 -0.227409377694 -0.655853271484 -0.00296779652126 -0.227275982499 -0.653356611729 -0.0778096839786 -0.22739726305 -0.634856522083 -0.158531874418 -0.22777107358 -0.577749013901 -0.235835805535 -0.228417888284 -0.515335917473 -0.413543015718 -0.240864023566 -0.341721266508 -0.459859728813 -0.245086729527 -0.193046331406 -0.458759069443 -0.24714449048 -0.0843418985605 -0.44283413887 -0.247798994184 -1.4951141436e-09 -0.433972209692 -0.24788209796 0.0843418911099 -0.442834168673 -0.247798994184 0.193046316504 -0.458759099245 -0.24714449048 0.341721236706 -0.459859728813 -0.245086744428 0.515335917473 -0.413543015718 -0.240864023566 0.651292920113 -0.310908347368 -0.23535476625 0.721050977707 -0.198575094342 -0.230917230248 0.745545268059 -0.102582998574 -0.22835251689 0.749668359756 -0.0203617308289 -0.227520376444 0.745545208454 0.0650575533509 -0.228435620666 0.721051037312 0.178258061409 -0.231654837728 0.651292860508 0.337442666292 -0.23815010488 0.515335917473 0.529027283192 -0.24788209796 0.341721266508 0.685464084148 -0.257614046335 0.193046316504 0.770374596119 -0.26410934329 0.0843419060111 0.803091526031 -0.267328560352 2.42643682924e-09 0.809753298759 -0.268243819475 -0.0843418985605 0.803091526031 -0.267328590155 -0.193046316504 0.770374536514 -0.26410934329 -0.341721236706 0.685464143753 -0.257614076138 -0.515335917473 0.529027283192 -0.247882112861 -0.651292920113 0.337442666292 -0.23815010488 -0.721050977707 0.178258016706 -0.231654837728 -0.745545268059 0.0650575384498 -0.228435605764 -0.749668359756 -0.0203617289662 -0.227520376444 -0.745545268059 -0.102582991123 -0.228352501988 -0.721051037312 -0.198575124145 -0.230917230248 -0.651292920113 -0.310908347368 -0.235354751348 -0.57432860136 -0.529698908329 -0.228000685573 -0.373120844364 -0.630870699883 -0.24123750627 -0.207289293408 -0.674519956112 -0.247687876225 -0.0895713120699 -0.684684216976 -0.2497394979 -7.19178672171e-09 -0.684341609478 -0.25 0.0895712897182 -0.684684216976 -0.2497394979 0.207289263606 -0.674519896507 -0.247687831521 0.37312078476 -0.630870580673 -0.24123750627 0.574328541756 -0.529698848724 -0.228000685573 0.741041600704 -0.385850936174 -0.210731044412 0.833270609379 -0.253465592861 -0.196820929646 0.869835972786 -0.150000989437 -0.188781321049 0.877654194832 -0.0638271868229 -0.186172842979 0.869835913181 0.0286809075624 -0.18904183805 0.833270668983 0.157023742795 -0.199133038521 0.7410415411 0.344893664122 -0.219493538141 0.57432860136 0.580051004887 -0.249999985099 0.373120844364 0.78176265955 -0.280506491661 0.207289263606 0.897970438004 -0.300866961479 0.0895713120699 0.946718156338 -0.310958147049 1.60385116299e-09 0.958083927631 -0.313827186823 -0.0895713046193 0.946718096733 -0.310958147049 -0.207289263606 0.897970438004 -0.300866991282 -0.373120844364 0.78176254034 -0.280506491661 -0.574328660965 0.580050945282 -0.25 -0.741041600704 0.344893634319 -0.219493508339 -0.833270668983 0.157023698092 -0.199133053422 -0.869836032391 0.0286808870733 -0.189041823149 -0.877654254436 -0.0638271793723 -0.186172828078 -0.869835972786 -0.150000974536 -0.18878133595 -0.833270728588 -0.253465622663 -0.196820899844 -0.7410415411 -0.385850906372 -0.210731044412 -0.664631307125 -0.644793689251 -0.195246592164 -0.41699141264 -0.778278768063 -0.226916968822 -0.224822893739 -0.851518392563 -0.242350116372 -0.0951714739203 -0.880203127861 -0.247258856893 -7.52643281032e-09 -0.886212289333 -0.247882142663 0.0951714515686 -0.880203008652 -0.24725882709 0.224822863936 -0.851518332958 -0.242350116372 0.41699141264 -0.778278768063 -0.226916998625 0.66463124752 -0.644793689251 -0.195246592164 0.886678814888 -0.482079654932 -0.153927221894 1.02117598057 -0.344442218542 -0.120645806193 1.0812548399 -0.240785077214 -0.101410314441 1.0964807272 -0.152712926269 -0.0951692089438 1.08125472069 -0.0506554469466 -0.102030232549 1.02117609978 0.10331043601 -0.126147866249 0.886678814888 0.344728767872 -0.17477889359 0.66463124752 0.666456758976 -0.247597187757 0.416991353035 0.962927162647 -0.320363283157 0.224822878838 1.14729321003 -0.368897616863 0.0951714590192 1.23218333721 -0.392937749624 1.76449757583e-11 1.2544901371 -0.399768352509 -0.0951714590192 1.23218345642 -0.392937749624 -0.224822893739 1.14729321003 -0.368897616863 -0.416991442442 0.962927103043 -0.320363253355 -0.664631307125 0.666456758976 -0.247597187757 -0.886678814888 0.344728708267 -0.174778863788 -1.02117621899 0.103310421109 -0.12614788115 -1.0812548399 -0.0506554655731 -0.102030202746 -1.09648084641 -0.152712926269 -0.0951692089438 -1.08125472069 -0.240785107017 -0.101410314441 -1.02117621899 -0.344442248344 -0.120645821095 -0.886678814888 -0.482079654932 -0.153927236795 -0.79135966301 -0.777731776237 -0.135113433003 -0.478829950094 -0.934283852577 -0.192352727056 -0.249705672264 -1.03092849255 -0.220245718956 -0.103186391294 -1.07506155968 -0.229117482901 -8.15815326405e-09 -1.08654725552 -0.230243951082 0.103186368942 -1.07506167889 -0.229117453098 0.249705642462 -1.03092861176 -0.220245704055 0.478829920292 -0.934283852577 -0.192352741957 0.79135966301 -0.777731657028 -0.135113418102 1.09052741528 -0.60531938076 -0.0604351945221 1.28383302689 -0.468234807253 -0.000284240872134 1.37658321857 -0.366623401642 0.0344809256494 1.40209114552 -0.276004731655 0.0457607582211 1.37658321857 -0.160408869386 0.0333859100938 1.28383302689 0.0297721549869 -0.0100031411275 1.09052741528 0.347018390894 -0.097267717123 0.79135966301 0.791625738144 -0.227585971355 0.478829950094 1.22291994095 -0.357416987419 0.249705642462 1.50443768501 -0.443780273199 0.103186376393 1.64092206955 -0.486445844173 3.96720167828e-09 1.67886781693 -0.498537003994 -0.103186368942 1.64092195034 -0.486445873976 -0.249705657363 1.50443768501 -0.443780273199 -0.478829979897 1.22291982174 -0.357416987419 -0.791359722614 0.791625738144 -0.227585941553 -1.09052741528 0.347018301487 -0.0972676947713 -1.2838331461 0.0297721475363 -0.0100031355396 -1.37658333778 -0.160408869386 0.0333859138191 -1.40209126472 -0.276004701853 0.04576074332 -1.37658321857 -0.366623401642 0.0344809256494 -1.28383302689 -0.468234807253 -0.00028424221091 -1.09052753448 -0.60531938076 -0.0604351907969 Normals 768 -0.502059996128 -0.78432571888 -0.364299446344 -0.426770836115 -0.754814267159 -0.498062074184 -0.331949830055 -0.784600377083 -0.523575544357 -0.189275801182 -0.840540766716 -0.507553339005 0.0 -0.871333956718 -0.49067658186 0.189275801182 -0.840540766716 -0.507553339005 0.331949830055 -0.784600377083 -0.523606061935 0.426770836115 -0.754814267159 -0.498062074184 0.502059996128 -0.784295201302 -0.364390999079 -0.166844695807 -0.188390761614 0.967803001404 -0.258613854647 -0.0947599709034 0.961302518845 -0.282540351152 -0.0627155378461 0.957182526588 -0.256569117308 -0.0179754029959 0.966338098049 -0.16660054028 0.0826441273093 0.982543408871 0.000823999755085 0.230048522353 0.973174214363 0.839350581169 0.427900016308 -0.335154265165 0.804803609848 0.434400469065 -0.404370248318 0.175603508949 0.412152469158 0.894009232521 0.122531816363 0.401501506567 0.907589972019 0.0621051676571 0.398846387863 0.914883852005 0.0 0.40043336153 0.916318237782 -0.0621051676571 0.398815870285 0.914914369583 -0.122501298785 0.401440471411 0.907620489597 -0.175511941314 0.412060916424 0.894070267677 -0.804864645004 0.434492021799 -0.404156625271 -0.839442133904 0.428052604198 -0.334727019072 -0.000244148075581 0.229743346572 0.973235249519 0.167058318853 0.0825220495462 0.982451856136 0.256874293089 -0.017914365977 0.966246545315 0.282754004002 -0.0625629425049 0.957121491432 0.258796960115 -0.0945463404059 0.961272001266 0.166966766119 -0.188146606088 0.967833518982 -0.178441718221 -0.598651111126 0.780846595764 -0.292275756598 -0.766350269318 0.572038948536 -0.264076650143 -0.823816657066 0.5015411973 -0.15543076396 -0.837488949299 0.52385020256 0.0 -0.838679134846 0.544602811337 0.15543076396 -0.837488949299 0.523819684982 0.264076650143 -0.823908209801 0.501419126987 0.292367309332 -0.766563892365 0.571703255177 0.178838461637 -0.599169909954 0.780358314514 -0.00195318460464 -0.377697080374 0.925901055336 -0.133823662996 -0.209875792265 0.968504905701 -0.161656543612 -0.113254189491 0.980315566063 -0.0792260542512 0.029663991183 0.996398806572 0.102084413171 0.22028259933 0.97006136179 0.312356948853 0.377513974905 0.871700167656 0.462996304035 0.471022665501 0.750816345215 0.566850781441 0.547166347504 0.615832984447 0.535416722298 0.577867984772 0.615924537182 0.430463582277 0.590380549431 0.682699084282 0.264870136976 0.613422036171 0.743980228901 -9.15555283427e-05 0.636005759239 0.771660506725 -0.264992207289 0.613299965858 0.744041264057 -0.430433064699 0.590166926384 0.682912707329 -0.535081028938 0.57756280899 0.616473913193 -0.565996289253 0.54673910141 0.616992712021 -0.461531430483 0.470442831516 0.752067625523 -0.310831010342 0.377025663853 0.872463166714 -0.100711084902 0.219946891069 0.970274984837 0.0802026465535 0.0296945106238 0.996307253838 0.162358477712 -0.112857446074 0.980224013329 0.13443402946 -0.209234908223 0.968565940857 0.00253303628415 -0.376995146275 0.926175713539 0.044618062675 -0.153355509043 0.987151682377 -0.0690939053893 -0.321848213673 0.944242656231 -0.0961027890444 -0.426709800959 0.899258375168 -0.056550797075 -0.445600748062 0.893398821354 -3.05185094476e-05 -0.441877484322 0.897061049938 0.0564592443407 -0.445783853531 0.893337786198 0.0961333066225 -0.427289664745 0.898953199387 0.0696432366967 -0.323313087225 0.943693339825 -0.0432447269559 -0.155644401908 0.986846506596 -0.167912840843 -0.0401318408549 0.984954357147 -0.242530599236 -0.0153202917427 0.970000326633 -0.275185406208 -0.0181279946119 0.96121096611 -0.271492660046 0.00204474013299 0.96243172884 -0.237922295928 0.0356151014566 0.970610678196 -0.151036098599 0.0808130130172 0.985198497772 0.0442518405616 0.19421979785 0.979949355125 0.242011785507 0.345439016819 0.906674385071 0.289956361055 0.433088153601 0.853419601917 0.228034302592 0.455580323935 0.860469400883 0.124240852892 0.46003600955 0.879146695137 -0.000396740622818 0.460737943649 0.887508749962 -0.124912261963 0.459639281034 0.879238247871 -0.228095337749 0.454695284367 0.860896646976 -0.288766145706 0.43144017458 0.854640364647 -0.238441109657 0.342570275068 0.908688604832 -0.0390331745148 0.191076382995 0.980773329735 0.155522331595 0.0787377581 0.984679698944 0.24127933383 0.0348521396518 0.969817221165 0.274086743593 0.00225836969912 0.96169924736 0.277321696281 -0.0171208847314 0.960600614548 0.244453266263 -0.0136417737231 0.969542503357 0.169682919979 -0.0379039905965 0.9847407341 0.0107119968161 -0.101016268134 0.994811832905 -0.0699789449573 -0.239020973444 0.968474388123 -0.0750755369663 -0.329203158617 0.94125187397 -0.036591693759 -0.349497973919 0.936185777187 -0.00012207403779 -0.348673969507 0.937223434448 0.0363170281053 -0.350108355284 0.93597215414 0.0751976072788 -0.3311868608 0.940549969673 0.0719016119838 -0.243842884898 0.96713155508 -0.00552385021001 -0.108340710402 0.99407941103 -0.107577748597 -0.0202642902732 0.993987858295 -0.17337565124 -0.00708029419184 0.984801769257 -0.201910465956 -0.0155949583277 0.979247391224 -0.198095649481 -0.00775170139968 0.980132460594 -0.171300396323 0.0050050355494 0.985198497772 -0.0902432352304 0.0286873988807 0.995483279228 0.10040589422 0.1405377388 0.984954357147 0.242072820663 0.289956361055 0.925901055336 0.253303617239 0.378093808889 0.890408039093 0.181554615498 0.401196330786 0.897793531418 0.0891750827432 0.402294993401 0.911130070686 -0.00115970335901 0.400402843952 0.916318237782 -0.0910977497697 0.400952190161 0.911526858807 -0.182012394071 0.398052930832 0.899105787277 -0.25025177002 0.372020632029 0.893826127052 -0.231879636645 0.280129402876 0.931516468525 -0.0834986418486 0.130191966891 0.987945199013 0.106204412878 0.0226447340101 0.99407941103 0.184301272035 0.00302133243531 0.982848584652 0.209143340588 -0.00708029419184 0.97784358263 0.211493268609 -0.0127262184396 0.977294206619 0.181951358914 -0.00207525864244 0.983275830746 0.115054778755 -0.0133365886286 0.99325543642 -0.141422778368 -0.216071054339 0.966063439846 -0.130314037204 -0.295052945614 0.9465315938 -0.0854823440313 -0.335459470749 0.938138961792 -0.0335398428142 -0.339548945427 0.939970076084 -0.000244148075581 -0.336924344301 0.941496014595 0.0329294726253 -0.340495020151 0.939664900303 0.0853297561407 -0.338847011328 0.936948776245 0.133304849267 -0.303384512663 0.943479716778 0.151097133756 -0.229407638311 0.961516141891 0.139866322279 -0.151280254126 0.978514969349 0.130436107516 -0.100619524717 0.986327707767 0.142307803035 -0.0613116845489 0.987914681435 0.175786614418 -0.019226660952 0.984221935272 0.215277567506 0.0283516962081 0.976134538651 0.288888216019 0.11056856066 0.950926244259 0.356273084879 0.238685265183 0.903347909451 0.326700657606 0.326212346554 0.887020468712 0.247352525592 0.3610034585 0.899136304855 0.151676997542 0.355998426676 0.922055721283 0.0666219070554 0.344553977251 0.936368882656 -0.00244148075581 0.33848080039 0.940946698189 -0.0709860548377 0.341868340969 0.937040328979 -0.153691217303 0.349681079388 0.924161493778 -0.243476673961 0.349192798138 0.904843270779 -0.311655014753 0.308725237846 0.898617506027 -0.329020053148 0.220221564174 0.918271422386 -0.25568407774 0.0979644134641 0.961760282516 -0.183233126998 0.0238349568099 0.982757031918 -0.14612261951 -0.0182195510715 0.989074349403 -0.115695670247 -0.0556047260761 0.991698980331 -0.107760854065 -0.0898770093918 0.990081489086 -0.122623369098 -0.137089148164 0.982909619808 -0.285012364388 -0.351817369461 0.89159822464 -0.171147808433 -0.360728770494 0.916806519032 -0.0828577503562 -0.340525537729 0.936552047729 -0.0273140668869 -0.322092354298 0.94628739357 -0.000274666585028 -0.31528672576 0.948973059654 0.0263374745846 -0.322244942188 0.946256875992 0.0814233869314 -0.342356652021 0.936002671719 0.171300396323 -0.366679877043 0.914426088333 0.290353089571 -0.362468332052 0.885586082935 0.407361060381 -0.306558430195 0.860255718231 0.494613468647 -0.21198156476 0.842829704285 0.554490804672 -0.109012119472 0.825006842613 0.594439506531 -0.0289010293782 0.803613364697 0.618366062641 0.062593460083 0.783349096775 0.611468851566 0.20029297471 0.765465259552 0.525254070759 0.327341526747 0.785424351692 0.371135592461 0.379375576973 0.847529530525 0.218939781189 0.363383889198 0.905514717102 0.112887963653 0.330515444279 0.937009811401 0.0419629514217 0.309823900461 0.94985806942 -0.00415051728487 0.302591025829 0.95309305191 -0.0498367249966 0.307535022497 0.950224339962 -0.118961147964 0.324900060892 0.938199996948 -0.220191046596 0.352885514498 0.909360051155 -0.363505959511 0.364726692438 0.857203900814 -0.508590936661 0.313180953264 0.801995933056 -0.589190363884 0.19083224237 0.785119175911 -0.594347953796 0.0589007250965 0.802026450634 -0.570970773697 -0.027863400057 0.820459604263 -0.532273352146 -0.103671379387 0.840174555779 -0.475997179747 -0.202032536268 0.85589158535 -0.394848465919 -0.294198423624 0.870357394218 -0.288583040237 -0.386791586876 0.875820159912 -0.146855071187 -0.363078713417 0.9200720191 -0.0579241327941 -0.316995769739 0.946623146534 -0.0147099215537 -0.286019474268 0.958098113537 0.0 -0.275337994099 0.961333036423 0.0139469588175 -0.284524053335 0.958555877209 0.0550553910434 -0.314737379551 0.947569191456 0.141727954149 -0.361827462912 0.921384334564 0.282570868731 -0.388409078121 0.87707144022 0.439191877842 -0.352092057467 0.826502263546 0.561113297939 -0.255500972271 0.787285983562 0.632282495499 -0.139408558607 0.762077689171 0.66438794136 -0.049592576921 0.745719790459 0.67641222477 0.0486465059221 0.734885692596 0.643269121647 0.200018316507 0.739005684853 0.516830980778 0.344126701355 0.783867895603 0.322733223438 0.397137373686 0.859096050262 0.160130620003 0.373577088118 0.913632631302 0.0651570186019 0.341563165188 0.937589645386 0.0127262184396 0.324350714684 0.945829629898 -0.00534073915333 0.319437235594 0.947569191456 -0.0231330301613 0.323984503746 0.945768594742 -0.0746787935495 0.340433984995 0.937284469604 -0.167790770531 0.371257662773 0.913205385208 -0.326975315809 0.393810838461 0.859035015106 -0.518234789371 0.341227442026 0.784203648567 -0.643391191959 0.198095649481 0.739432990551 -0.676473259926 0.0484023578465 0.734855175018 -0.66512042284 -0.0470900610089 0.745231509209 -0.63380843401 -0.134495064616 0.761680960655 -0.564256727695 -0.249794006348 0.786858737469 -0.444257944822 -0.347575306892 0.825708806515 -0.216437265277 -0.368053227663 0.904232919216 -0.0955229327083 -0.338511317968 0.936063706875 -0.0247199926525 -0.286751925945 0.957670807838 0.00140385143459 -0.248237550259 0.968688011169 0.000701925717294 -0.233588665724 0.972319722176 -0.00100711081177 -0.245277255774 0.969420433044 0.0218512527645 -0.280892372131 0.959471404552 0.0870387926698 -0.330668061972 0.939695417881 0.200872823596 -0.360942423344 0.910672307014 0.331492036581 -0.337260037661 0.881099879742 0.436445206404 -0.260109245777 0.861293375492 0.498794525862 -0.159581288695 0.851863145828 0.526688456535 -0.0747093111277 0.846736073494 0.54405349493 0.0134891811758 0.838923335075 0.533433020115 0.152653589845 0.831934571266 0.432294696569 0.308572649956 0.847254872322 0.248695328832 0.386974692345 0.887905538082 0.0961333066225 0.379192471504 0.920285642147 0.0157170332968 0.356242567301 0.934232592583 -0.0172124393284 0.343424797058 0.938993513584 -0.00473036896437 0.340128779411 0.940336287022 0.00830103456974 0.344767600298 0.938627302647 -0.0233771782368 0.359477519989 0.932828783989 -0.102694787085 0.385937064886 0.916776001453 -0.257423639297 0.398632764816 0.880214869976 -0.447981208563 0.321268349886 0.834315001965 -0.555711567402 0.160985141993 0.815607190132 -0.569597482681 0.0177312549204 0.821710884571 -0.553514182568 -0.0703451633453 0.829828798771 -0.525528728962 -0.155003502965 0.836512327194 -0.461806088686 -0.258705407381 0.848384022713 -0.353282272816 -0.340647608042 0.871272921562 -0.143467515707 -0.338572353125 0.92989897728 -0.0467848740518 -0.308206439018 0.950132727623 0.00766014587134 -0.252418577671 0.967558801174 0.0182805880904 -0.206122010946 0.97833186388 0.00149540696293 -0.18744468689 0.982268750668 -0.016296884045 -0.202948093414 0.979033768177 -0.00915555283427 -0.245582446456 0.96932888031 0.0386059135199 -0.297860652208 0.953794956207 0.12512588501 -0.327036350965 0.936674118042 0.21927548945 -0.308450579643 0.925595879555 0.289498567581 -0.247077852488 0.924710810184 0.326914280653 -0.164830476046 0.93053984642 0.340037226677 -0.0911282673478 0.93597215414 0.355815291405 -0.0289315469563 0.934080004692 0.376781523228 0.062410350889 0.924192011356 0.336130857468 0.198736533523 0.920590817928 0.21097445488 0.303415030241 0.929197072983 0.0765404254198 0.340433984995 0.937131881714 0.00247199926525 0.334360778332 0.942411601543 -0.022003846243 0.325510412455 0.945249795914 -0.00274666585028 0.32169559598 0.946806252003 0.0177617724985 0.328409671783 0.944334208965 -0.00323496200144 0.341929376125 0.939695417881 -0.0733359754086 0.35795161128 0.930845081806 -0.214636683464 0.333872497082 0.917844176292 -0.358836621046 0.22891934216 0.904873788357 -0.415845215321 0.081667535007 0.905728340149 -0.401043742895 -0.0209967344999 0.915799438953 -0.385753959417 -0.0863979011774 0.918515563011 -0.370494693518 -0.161992251873 0.914578676224 -0.327860355377 -0.249855041504 0.91106903553 -0.248817414045 -0.31714835763 0.915128052235 -0.06891079247 -0.29291665554 0.953642368317 0.00366222113371 -0.261513113976 0.965178370476 0.0415662117302 -0.202520832419 0.978362381458 0.0358897671103 -0.151463359594 0.987792611122 0.00201422162354 -0.130924403667 0.991363286972 -0.03259376809 -0.149815365672 0.98815882206 -0.0406811721623 -0.198644980788 0.979216873646 -0.00766014587134 -0.254982143641 0.966887414455 0.0568559840322 -0.284737706184 0.956907868385 0.11767937243 -0.268776506186 0.955961763859 0.150456249714 -0.218939781189 0.964049220085 0.157170325518 -0.154148995876 0.975432574749 0.14984588325 -0.0948820486665 0.984130382538 0.149815365672 -0.0667134597898 0.98644977808 0.174565881491 -0.07229834795 0.981963574886 0.203711047769 -0.0686056092381 0.976592302322 0.157444983721 -0.123172707856 0.979796767235 -0.179906606674 0.653218150139 0.735465586185 -0.267555773258 0.610522806644 0.745384097099 -0.236274302006 0.662434756756 0.710867643356 -0.00195318460464 0.721762776375 0.692129254341 0.231147184968 0.661091923714 0.713766872883 0.260841697454 0.607776105404 0.749992370605 0.172582164407 0.648518323898 0.741355657578 -0.155217140913 -0.106723226607 0.982085645199 -0.220435187221 -0.0311288796365 0.974883258343 -0.209601119161 -0.0527359843254 0.976348161697 -0.188268691301 -0.0598773173988 0.980285048485 -0.187322616577 -0.0913113802671 0.978026688099 -0.192419201136 -0.152439951897 0.969389915466 -0.180486470461 -0.221778005362 0.958220183849 -0.13934750855 -0.275704205036 0.95107883215 0.0496536158025 -0.196264535189 0.979277908802 0.0820947885513 -0.16373179853 0.983062207699 0.0890224948525 -0.110415965319 0.989867866039 0.0581682808697 -0.0653096139431 0.996154665947 0.00210577715188 -0.0474562831223 0.998840272427 -0.0543229468167 -0.0655537620187 0.996368288994 -0.0862453058362 -0.110599078238 0.990112006664 -0.081118196249 -0.163426622748 0.983184278011 -0.0518509484828 -0.195348978043 0.979338943958 -0.03259376809 -0.19031342864 0.98117005825 -0.038300730288 -0.162327945232 0.98596149683 -0.0599688701332 -0.1247901842 0.990356147289 -0.0848109349608 -0.0873744934797 0.992553472519 -0.0974150821567 -0.0941190868616 0.990752875805 -0.0983306393027 -0.220954015851 0.970305502415 -0.0409253202379 -0.673268854618 0.738242745399 0.159947514534 -0.964751124382 -0.208868682384 0.329966127872 -0.76192510128 -0.557237446308 0.383404046297 -0.718863487244 -0.579821169376 0.308938860893 -0.769890427589 -0.558397173882 0.00106814783067 -0.842158257961 -0.539201021194 -0.305612355471 -0.767723619938 -0.563158035278 -0.377056181431 -0.714712977409 -0.589037775993 -0.320627450943 -0.754814267159 -0.572191536427 -0.151036098599 -0.960051298141 -0.235480815172 0.0368358418345 -0.675008416176 0.736869394779 0.0850245654583 -0.214331492782 0.973021626472 0.0826746448874 -0.0911282673478 0.99237036705 0.0707724243402 -0.0849940478802 0.993835270405 0.0470595434308 -0.122714929283 0.991302251816 0.027954954654 -0.161809131503 0.986419260502 0.0262154005468 -0.191106900573 0.981200575829 0.221015051007 -0.0242927335203 0.974944293499 0.183812975883 -0.00552385021001 0.982940137386 0.1422162503 0.0209662169218 0.989593207836 0.0801721215248 0.0447096154094 0.995757937431 0.00173955503851 0.054506059736 0.998504579067 -0.0768456086516 0.0438245795667 0.996063113213 -0.139225438237 0.0191045869142 0.990050971508 -0.181066319346 -0.0082094790414 0.983428478241 -0.21860408783 -0.0271919928491 0.975402057171 -0.268166154623 -0.0386059135199 0.96258431673 -0.319437235594 -0.0541703552008 0.946043252945 -0.360972940922 -0.0664998292923 0.930173635483 -0.390636920929 -0.0650959834456 0.91821038723 -0.403881967068 -0.107150487602 0.908505499363 -0.412884920835 -0.306588947773 0.85760062933 -0.363475441933 -0.831080079079 0.420880764723 -0.0784630849957 -0.934537768364 -0.347056478262 0.160374760628 -0.707693696022 -0.688039779663 0.224463641644 -0.612048685551 -0.758262872696 0.180211797357 -0.592120110989 -0.785424351692 0.000213629566133 -0.598223805428 -0.801293969154 -0.179631948471 -0.591845452785 -0.785729527473 -0.223639637232 -0.611499369144 -0.758964836597 -0.159276098013 -0.70659506321 -0.689413130283 0.0795617550611 -0.933408617973 -0.3498031497 0.363902717829 -0.832300782204 0.418103575706 0.411023288965 -0.305764943361 0.858790874481 0.40162357688 -0.106051817536 0.909634709358 0.388836324215 -0.0633869469166 0.9190954566 0.359813213348 -0.0642719790339 0.93078404665 0.319406718016 -0.0517899096012 0.946195840836 0.269569993019 -0.03598132357 0.962279140949 0.380626857281 0.210058897734 0.900540173054 0.253761410713 0.19098483026 0.948210060596 0.162266910076 0.165654465556 0.972716450691 0.081667535007 0.154972985387 0.984527111053 0.00106814783067 0.153202921152 0.988189339638 -0.0796227902174 0.15408796072 0.984832286835 -0.160374760628 0.163762316108 0.973357319832 -0.251686155796 0.188207641244 0.949308753014 -0.378307431936 0.207037568092 0.902188181877 -0.518875718117 0.177159950137 0.836268186569 -0.616595983505 0.0944547876716 0.781579017639 -0.665364563465 0.0114749595523 0.746391177177 -0.687032699585 -0.0331125818193 0.725821733475 -0.691488385201 -0.105349898338 0.714621424675 -0.683248400688 -0.31052583456 0.660847783089 -0.609332561493 -0.717001855373 0.338511317968 -0.316263318062 -0.910336613655 -0.266823321581 -0.00143436994404 -0.768822312355 -0.639423787594 0.127353742719 -0.644001603127 -0.754325985909 0.124301888049 -0.598651111126 -0.791283905506 0.0 -0.592242181301 -0.805719196796 -0.124240852892 -0.598620533943 -0.791314423084 -0.127292707562 -0.64394056797 -0.754387021065 0.00152592547238 -0.768730759621 -0.639545857906 0.316324353218 -0.910245060921 -0.267098009586 0.609363079071 -0.71706289053 0.338297665119 0.683248400688 -0.31037324667 0.660878300667 0.691610455513 -0.104892119765 0.714560389519 0.687429428101 -0.0322275459766 0.725516498089 0.666127502918 0.0128482924774 0.745689272881 0.617938756943 0.0962858945131 0.780266702175 0.5208594203 0.179631948471 0.834498107433 0.451490819454 0.460524320602 0.764213979244 0.238837853074 0.3877376616 0.890255451202 0.117435224354 0.296548366547 0.947752296925 0.0470900610089 0.246406450868 0.967986106873 0.000396740622818 0.232032224536 0.972685933113 -0.0463270992041 0.24585711956 0.968169212341 -0.116733297706 0.295358121395 0.948210060596 -0.238013848662 0.38602861762 0.891232013702 -0.450575262308 0.458937346935 0.765709400177 -0.688955366611 0.403820931911 0.601855516434 -0.832972168922 0.235267192125 0.500778198242 -0.884151756763 0.0766624957323 0.460829496384 -0.895382523537 -0.00921658985317 0.445173501968 -0.89248329401 -0.102786339819 0.439161360264 -0.865840613842 -0.297860652208 0.401959300041 -0.776512980461 -0.592120110989 0.21536912024 -0.529068887234 -0.823450446129 -0.204840242863 -0.216467782855 -0.801324486732 -0.557634234428 -0.0181279946119 -0.693105876446 -0.720572531223 0.0456556901336 -0.629291653633 -0.775780498981 0.0 -0.612231791019 -0.790643036366 -0.0456556901336 -0.629291653633 -0.775780498981 0.0181279946119 -0.693105876446 -0.720572531223 0.216467782855 -0.801324486732 -0.557634234428 0.529068887234 -0.823450446129 -0.204840242863 0.776512980461 -0.59208959341 0.21536912024 0.86587113142 -0.297799617052 0.401928782463 0.892574846745 -0.102664269507 0.439008772373 0.895504593849 -0.00897244177759 0.444898843765 0.884395897388 0.0770592391491 0.460310667753 0.833368957043 0.235847041011 0.49983215332 0.68962675333 0.404797524214 0.600421130657 0.395184189081 0.607318341732 0.689168989658 0.137333288789 0.470320761204 0.871730685234 0.0292977690697 0.335367888212 0.941618084908 -0.00405896175653 0.268166154623 0.963347256184 6.10370188951e-05 0.248817414045 0.968535423279 0.00421155430377 0.267983019352 0.96340829134 -0.0292062144727 0.334940642118 0.941770672798 -0.137180700898 0.469710379839 0.872066378593 -0.394970536232 0.606830060482 0.689718306065 -0.722586750984 0.55858027935 0.40720847249 -0.919858396053 0.319986581802 0.226844087243 -0.97769099474 0.107119970024 0.180639058352 -0.984954357147 -0.00088503677398 0.172765284777 -0.979827284813 -0.103732414544 0.170628979802 -0.944761514664 -0.291665405035 0.149357587099 -0.846827626228 -0.529679238796 0.0477919876575 -0.643177568913 -0.738425850868 -0.202520832419 -0.368602544069 -0.793145537376 -0.484755992889 -0.145420700312 -0.736350595951 -0.660756230354 -0.02493362315 -0.677724540234 -0.734855175018 0.0 -0.656697273254 -0.754112362862 0.02493362315 -0.677724540234 -0.734855175018 0.145420700312 -0.736350595951 -0.660756230354 0.368602544069 -0.793145537376 -0.484755992889 0.643177568913 -0.738425850868 -0.202520832419 0.846827626228 -0.529679238796 0.0477919876575 0.944761514664 -0.291665405035 0.149327069521 0.979857802391 -0.103732414544 0.170598462224 0.984954357147 -0.000854518264532 0.17270424962 0.97769099474 0.10718100518 0.180516988039 0.919888913631 0.320047616959 0.226599931717 0.722678303719 0.558763384819 0.406750708818 0.254493862391 0.623889863491 0.73888361454 0.00253303628415 0.42295601964 0.906125068665 -0.0577105022967 0.293801695108 0.954100131989 -0.0502639859915 0.240089118481 0.969420433044 0.0 0.225592821836 0.974211871624 0.0502639859915 0.240089118481 0.969420433044 0.0577105022967 0.293740659952 0.954130709171 -0.0025025177747 0.422864466906 0.906155586243 -0.254463344812 0.623828828335 0.738944649696 -0.65709400177 0.643879532814 0.391918689013 -0.92535173893 0.369884341955 0.0829493105412 -0.993041753769 0.117313154042 0.00677510909736 -0.999969482422 0.000274666585028 0.000152592547238 -0.994628727436 -0.10345774889 -0.00143436994404 -0.958586394787 -0.284310430288 -0.0158696249127 -0.863429665565 -0.498184144497 -0.07907345891 -0.686880111694 -0.687063217163 -0.236823633313 -0.447553932667 -0.774071455002 -0.447737038136 -0.225684374571 -0.761955618858 -0.606982648373 -0.0733054578304 -0.725638628006 -0.684133410454 0.0 -0.709219634533 -0.704947054386 0.0733054578304 -0.725638628006 -0.684133410454 0.225684374571 -0.761955618858 -0.606982648373 0.447553932667 -0.774071455002 -0.447737038136 0.686880111694 -0.687063217163 -0.236823633313 0.863429665565 -0.498184144497 -0.07907345891 0.958586394787 -0.284310430288 -0.0158696249127 0.994628727436 -0.10345774889 -0.00143436994404 0.999969482422 0.000274666585028 0.000152592547238 0.993041753769 0.117313154042 0.00677510909736 0.92535173893 0.369884341955 0.0829493105412 0.65709400177 0.643910050392 0.391857653856 0.0236518457532 0.651844859123 0.757957696915 -0.170476391912 0.420667141676 0.891018390656 -0.17981505394 0.313150435686 0.932493031025 -0.126560255885 0.274727612734 0.953123569489 0.0 0.269417405128 0.963011562824 0.126560255885 0.274727612734 0.953123569489 0.17981505394 0.313150435686 0.932493031025 0.170476391912 0.420667141676 0.891018390656 -0.0236518457532 0.651844859123 0.757957696915 -0.522995710373 0.774956524372 0.354777663946 -0.899014234543 0.43244728446 -0.0688802748919 -0.978545486927 0.123569443822 -0.164677873254 -0.985351085663 0.000488296151161 -0.170415356755 -0.979766249657 -0.10074160248 -0.172826319933 -0.944059550762 -0.273049116135 -0.184850618243 -0.852137804031 -0.469466239214 -0.23111666739 -0.689687788486 -0.638386189938 -0.3416852355 -0.478041946888 -0.730430006981 -0.487746804953 -0.272316664457 -0.749473571777 -0.603381454945 -0.107211522758 -0.740379035473 -0.663533449173 0.0 -0.733115613461 -0.680043935776 0.107211522758 -0.740379035473 -0.663533449173 0.272316664457 -0.749473571777 -0.603381454945 0.478041946888 -0.730430006981 -0.487746804953 0.689687788486 -0.638386189938 -0.3416852355 0.852137804031 -0.469466239214 -0.23111666739 0.944059550762 -0.273049116135 -0.184850618243 0.979766249657 -0.10074160248 -0.172826319933 0.985351085663 0.000488296151161 -0.170415356755 0.978545486927 0.123569443822 -0.164677873254 0.899014234543 0.43244728446 -0.0688802748919 0.522995710373 0.774956524372 0.354777663946 -0.291848510504 0.847987294197 0.442335277796 -0.482284009457 0.640308856964 0.597796559334 -0.490554511547 0.583239257336 0.647389113903 -0.375316619873 0.638813436031 0.671559810638 0.0 0.739219307899 0.673421442509 0.375316619873 0.638813436031 0.671559810638 0.490554511547 0.583239257336 0.647389113903 0.482284009457 0.640308856964 0.597796559334 0.291848510504 0.847987294197 0.442335277796 -0.329874575138 0.943296611309 -0.0365611761808 -0.798699915409 0.459395110607 -0.38859218359 -0.891567707062 0.119296856225 -0.436872452497 -0.900051891804 0.000610370188951 -0.435743272305 -0.893734574318 -0.0909756794572 -0.439191877842 -0.860866129398 -0.243964970112 -0.44648578763 -0.780510902405 -0.415051728487 -0.467390984297 -0.643910050392 -0.563188552856 -0.517838060856 -0.470809042454 -0.659596562386 -0.585833311081 -0.292825102806 -0.706564545631 -0.644184708595 -0.12851344049 -0.724387347698 -0.677266776562 0.0 -0.72719502449 -0.68639177084 0.12851344049 -0.724387347698 -0.677266776562 0.292825102806 -0.706564545631 -0.644184708595 0.470809042454 -0.659596562386 -0.585833311081 0.643910050392 -0.563188552856 -0.517838060856 0.780510902405 -0.415051728487 -0.467390984297 0.860866129398 -0.243964970112 -0.44648578763 0.893734574318 -0.0909756794572 -0.439191877842 0.900051891804 0.000610370188951 -0.435743272305 0.891567707062 0.119296856225 -0.436872452497 0.798699915409 0.459395110607 -0.38859218359 0.329874575138 0.943296611309 -0.0365611761808 -0.248481705785 0.786492526531 -0.565355360508 -0.523758649826 0.698294043541 -0.487868905067 -0.5671864748 0.667683959007 -0.482131421566 -0.283059179783 0.434949785471 0.854762434959 0.0 0.53181552887 0.846827626228 0.283059179783 0.434949785471 0.854762434959 0.346201986074 0.346568197012 0.871761202812 0.523758649826 0.698294043541 -0.487868905067 0.248481705785 0.786492526531 -0.565355360508 -0.260292381048 0.636890769005 -0.725638628006 -0.577166080475 0.32169559598 -0.750541687012 -0.670400083065 0.0909146368504 -0.736381113529 -0.683797717094 0.000274666585028 -0.72963654995 -0.677755057812 -0.0708029419184 -0.731864392757 -0.656361579895 -0.188024535775 -0.73061311245 -0.607745587826 -0.323313087225 -0.725302875042 -0.522171676159 -0.453108310699 -0.722464680672 -0.405743569136 -0.558458209038 -0.723502278328 -0.268959611654 -0.630695521832 -0.727896988392 -0.124485000968 -0.671437740326 -0.730491042137 0.0 -0.683370471001 -0.730033278465 0.124485000968 -0.671437740326 -0.730491042137 0.268959611654 -0.630695521832 -0.727896988392 0.405743569136 -0.558458209038 -0.723502278328 0.522171676159 -0.453108310699 -0.722464680672 0.607745587826 -0.323313087225 -0.725302875042 0.656361579895 -0.188024535775 -0.73061311245 0.677755057812 -0.0708029419184 -0.731864392757 0.683797717094 0.000274666585028 -0.72963654995 0.670400083065 0.0909146368504 -0.736381113529 0.577166080475 0.32169559598 -0.750541687012 0.260292381048 0.636890769005 -0.725638628006 -0.0150761436671 0.229194000363 -0.973235249519 -0.0913724154234 0.194494456053 -0.976622819901 -0.0974761173129 0.155583366752 -0.982970654964 -0.0697347968817 0.139286473393 -0.987762093544 0.0 0.138767659664 -0.990295112133 0.0697347968817 0.139286473393 -0.987762093544 0.0974761173129 0.155583366752 -0.982970654964 0.0913724154234 0.194494456053 -0.976622819901 0.0150761436671 0.229194000363 -0.973235249519 -0.111301004887 0.203466907144 -0.972716450691 -0.214636683464 0.121921442449 -0.969023704529 -0.256782740355 0.0415356904268 -0.965544581413 -0.269417405128 -0.000183111056685 -0.963011562824 -0.269112229347 -0.0359508059919 -0.96243172884 -0.279091775417 -0.0946379005909 -0.955565035343 -0.296792507172 -0.179082617164 -0.937986373901 -0.297891169786 -0.284646123648 -0.911160647869 -0.262916952372 -0.38944670558 -0.882686853409 -0.186101868749 -0.467513054609 -0.864131569862 -0.0875270888209 -0.511368155479 -0.854853987694 0.0 -0.525864422321 -0.850550830364 0.0875270888209 -0.511368155479 -0.854853987694 0.186101868749 -0.467513054609 -0.864131569862 0.262916952372 -0.38944670558 -0.882686853409 0.297891169786 -0.284646123648 -0.911160647869 0.296792507172 -0.179082617164 -0.937986373901 0.279091775417 -0.0946379005909 -0.955565035343 0.269112229347 -0.0359508059919 -0.96243172884 0.269417405128 -0.000183111056685 -0.963011562824 0.256782740355 0.0415356904268 -0.965544581413 0.214636683464 0.121921442449 -0.969023704529 0.111301004887 0.203466907144 -0.972716450691 -0.0561235398054 -0.000183111056685 -0.998413026333 -0.0319223627448 0.0216071046889 -0.999237060547 -0.0210577715188 0.0308236945421 -0.999298095703 -0.0119632557034 0.0326548069715 -0.999389648438 0.0 0.0333262123168 -0.999420166016 0.0119632557034 0.0326548069715 -0.999389648438 0.0210577715188 0.0308236945421 -0.999298095703 0.0319223627448 0.0216071046889 -0.999237060547 0.0561235398054 -0.000183111056685 -0.998413026333 0.0936918258667 -0.0182805880904 -0.995422244072 0.132328256965 -0.016296884045 -0.991058051586 0.153721734881 -0.0025025177747 -0.988097786903 0.156132698059 -9.15555283427e-05 -0.987731575966 0.151615962386 0.00088503677398 -0.988433480263 0.120578631759 0.0012817773968 -0.992675542831 0.0397656187415 -0.0371410250664 -0.998504579067 -0.0555742047727 -0.130191966891 -0.989928901196 -0.108066044748 -0.236915186048 -0.965483546257 -0.0913724154234 -0.30732139945 -0.947202980518 -0.0424207299948 -0.336954861879 -0.940549969673 0.0 -0.345103293657 -0.938535749912 0.0424207299948 -0.336954861879 -0.940549969673 0.0913724154234 -0.30732139945 -0.947202980518 0.108066044748 -0.236915186048 -0.965483546257 0.0555742047727 -0.130191966891 -0.989928901196 -0.0397656187415 -0.0371410250664 -0.998504579067 -0.120578631759 0.0012817773968 -0.992675542831 -0.151615962386 0.00088503677398 -0.988433480263 -0.156132698059 -9.15555283427e-05 -0.987731575966 -0.153721734881 -0.0025025177747 -0.988097786903 -0.132328256965 -0.016296884045 -0.991058051586 -0.0936918258667 -0.0182805880904 -0.995422244072 -0.151676997542 -0.0889919772744 -0.984405040741 -0.0811487138271 -0.0487075410783 -0.995483279228 -0.0378734692931 -0.0170903652906 -0.999114990234 -0.0128482924774 -0.00439466536045 -0.999877929688 0.0 -0.00158696249127 -0.999969482422 0.0128482924774 -0.00439466536045 -0.999877929688 0.0378734692931 -0.0170903652906 -0.999114990234 0.0811487138271 -0.0487075410783 -0.995483279228 0.151676997542 -0.0889919772744 -0.984405040741 0.237617120147 -0.101229898632 -0.966032922268 0.302011162043 -0.066866055131 -0.950926244259 0.336069822311 -0.0216071046889 -0.941557049751 0.345866262913 -0.00161748100072 -0.938261032104 0.342814415693 0.00927762687206 -0.939329206944 0.317026287317 0.0255745109171 -0.948057472706 0.228644669056 0.00286873988807 -0.973479390144 0.0881679728627 -0.0892971605062 -0.992065191269 -0.0146183660254 -0.198797568679 -0.979918837547 -0.0333262123168 -0.258857995272 -0.965330958366 -0.0150761436671 -0.279519021511 -0.959990262985 0.0 -0.284066289663 -0.958800017834 0.0150761436671 -0.279519021511 -0.959990262985 0.0333262123168 -0.258857995272 -0.965330958366 0.0146183660254 -0.198797568679 -0.979918837547 -0.0881679728627 -0.0892971605062 -0.992065191269 -0.228644669056 0.00286873988807 -0.973479390144 -0.317026287317 0.0255745109171 -0.948057472706 -0.342814415693 0.00927762687206 -0.939329206944 -0.345866262913 -0.00161748100072 -0.938261032104 -0.336069822311 -0.0216071046889 -0.941557049751 -0.302011162043 -0.066866055131 -0.950926244259 -0.237617120147 -0.101229898632 -0.966032922268 -0.237250894308 -0.139439076185 -0.961363554001 -0.154179513454 -0.108829006553 -0.981994092464 -0.0855739042163 -0.0746177583933 -0.993530094624 -0.0333567298949 -0.0571001321077 -0.99780267477 0.0 -0.0522476881742 -0.99862664938 0.0333567298949 -0.0571001321077 -0.99780267477 0.0855739042163 -0.0746177583933 -0.993530094624 0.154179513454 -0.108829006553 -0.981994092464 0.237250894308 -0.139439076185 -0.961363554001 0.311960190535 -0.129184857011 -0.94125187397 0.361369669437 -0.0807519778609 -0.928891897202 0.391033649445 -0.0276497695595 -0.919949948788 0.40128788352 -0.00317392498255 -0.915921509266 0.398419141769 0.00308236945421 -0.917172789574 0.379528194666 0.00994903407991 -0.925107598305 0.312936782837 -0.0134281441569 -0.949674963951 0.186071351171 -0.0957060456276 -0.97784358263 0.0826441273093 -0.183507800102 -0.979522109032 0.040620137006 -0.22891934216 -0.972594380379 0.0242622159421 -0.244361698627 -0.969359397888 0.0 -0.247291475534 -0.968932151794 -0.0242622159421 -0.244361698627 -0.969359397888 -0.040620137006 -0.22891934216 -0.972594380379 -0.0826441273093 -0.183507800102 -0.979522109032 -0.186071351171 -0.0957060456276 -0.97784358263 -0.312936782837 -0.0134281441569 -0.949674963951 -0.379528194666 0.00994903407991 -0.925107598305 -0.398419141769 0.00308236945421 -0.917172789574 -0.40128788352 -0.00317392498255 -0.915921509266 -0.391033649445 -0.0276497695595 -0.919949948788 -0.361369669437 -0.0807519778609 -0.928891897202 -0.311960190535 -0.129184857011 -0.94125187397 -0.31730094552 -0.235053554177 -0.918729186058 -0.245490893722 -0.239051491022 -0.939451277256 -0.165746018291 -0.229316085577 -0.959105193615 -0.0807519778609 -0.225226595998 -0.970915853977 0.0 -0.225074008107 -0.974333941936 0.0807519778609 -0.225226595998 -0.970915853977 0.165746018291 -0.229316085577 -0.959105193615 0.245490893722 -0.239051491022 -0.939451277256 0.31730094552 -0.235053554177 -0.918729186058 0.372295290232 -0.196874901652 -0.906979560852 0.412488162518 -0.131534770131 -0.901394724846 0.444318979979 -0.0577715374529 -0.893978714943 0.461287260056 -0.00347911007702 -0.887203574181 0.462263852358 0.0198980681598 -0.886501669884 0.454390078783 0.0309762880206 -0.890224933624 0.423078089952 0.0218817722052 -0.905819892883 0.350779742002 -0.0239265114069 -0.936124742031 0.277382731438 -0.0736106485128 -0.957914948463 0.222388371825 -0.0979949310422 -0.970000326633 0.147953733802 -0.0991546362638 -0.984008312225 0.0 -0.08957182616 -0.995971560478 -0.147953733802 -0.0991546362638 -0.984008312225 -0.222388371825 -0.0979949310422 -0.970000326633 -0.277382731438 -0.0736106485128 -0.957914948463 -0.350779742002 -0.0239265114069 -0.936124742031 -0.423078089952 0.0218817722052 -0.905819892883 -0.454390078783 0.0309762880206 -0.890224933624 -0.462263852358 0.0198980681598 -0.886501669884 -0.461287260056 -0.00347911007702 -0.887203574181 -0.444318979979 -0.0577715374529 -0.893978714943 -0.412488162518 -0.131534770131 -0.901394724846 -0.372295290232 -0.196874901652 -0.906979560852 Faces 768 0 32 63 31 1 0 32 0 1 33 1 0 2 34 33 1 1 0 3 35 34 2 1 0 4 36 35 3 1 0 5 37 36 4 1 0 6 38 37 5 1 0 7 39 38 6 1 0 8 40 39 7 1 0 9 41 40 8 1 0 10 42 41 9 1 0 11 43 42 10 1 0 12 44 43 11 1 0 13 45 44 12 1 0 14 46 45 13 1 0 15 47 46 14 1 0 16 48 47 15 1 0 17 49 48 16 1 0 18 50 49 17 1 0 19 51 50 18 1 0 20 52 51 19 1 0 21 53 52 20 1 0 22 54 53 21 1 0 23 55 54 22 1 0 24 56 55 23 1 0 25 57 56 24 1 0 26 58 57 25 1 0 27 59 58 26 1 0 28 60 59 27 1 0 29 61 60 28 1 0 30 62 61 29 1 0 31 63 62 30 1 0 32 64 95 63 1 0 33 65 64 32 1 0 34 66 65 33 1 0 35 67 66 34 1 0 36 68 67 35 1 0 37 69 68 36 1 0 38 70 69 37 1 0 39 71 70 38 1 0 40 72 71 39 1 0 41 73 72 40 1 0 42 74 73 41 1 0 43 75 74 42 1 0 44 76 75 43 1 0 45 77 76 44 1 0 46 78 77 45 1 0 47 79 78 46 1 0 48 80 79 47 1 0 49 81 80 48 1 0 50 82 81 49 1 0 51 83 82 50 1 0 52 84 83 51 1 0 53 85 84 52 1 0 54 86 85 53 1 0 55 87 86 54 1 0 56 88 87 55 1 0 57 89 88 56 1 0 58 90 89 57 1 0 59 91 90 58 1 0 60 92 91 59 1 0 61 93 92 60 1 0 62 94 93 61 1 0 63 95 94 62 1 0 64 96 127 95 1 0 65 97 96 64 1 0 66 98 97 65 1 0 67 99 98 66 1 0 68 100 99 67 1 0 69 101 100 68 1 0 70 102 101 69 1 0 71 103 102 70 1 0 72 104 103 71 1 0 73 105 104 72 1 0 74 106 105 73 1 0 75 107 106 74 1 0 76 108 107 75 1 0 77 109 108 76 1 0 78 110 109 77 1 0 79 111 110 78 1 0 80 112 111 79 1 0 81 113 112 80 1 0 82 114 113 81 1 0 83 115 114 82 1 0 84 116 115 83 1 0 85 117 116 84 1 0 86 118 117 85 1 0 87 119 118 86 1 0 88 120 119 87 1 0 89 121 120 88 1 0 90 122 121 89 1 0 91 123 122 90 1 0 92 124 123 91 1 0 93 125 124 92 1 0 94 126 125 93 1 0 95 127 126 94 1 0 96 128 159 127 1 0 97 129 128 96 1 0 98 130 129 97 1 0 99 131 130 98 1 0 100 132 131 99 1 0 101 133 132 100 1 0 102 134 133 101 1 0 103 135 134 102 1 0 104 136 135 103 1 0 105 137 136 104 1 0 106 138 137 105 1 0 107 139 138 106 1 0 108 140 139 107 1 0 109 141 140 108 1 0 110 142 141 109 1 0 111 143 142 110 1 0 112 144 143 111 1 0 113 145 144 112 1 0 114 146 145 113 1 0 115 147 146 114 1 0 116 148 147 115 1 0 117 149 148 116 1 0 118 150 149 117 1 0 119 151 150 118 1 0 120 152 151 119 1 0 121 153 152 120 1 0 122 154 153 121 1 0 123 155 154 122 1 0 124 156 155 123 1 0 125 157 156 124 1 0 126 158 157 125 1 0 127 159 158 126 1 0 128 160 191 159 1 0 129 161 160 128 1 0 130 162 161 129 1 0 131 163 162 130 1 0 132 164 163 131 1 0 133 165 164 132 1 0 134 166 165 133 1 0 135 167 166 134 1 0 136 168 167 135 1 0 137 169 168 136 1 0 138 170 169 137 1 0 139 171 170 138 1 0 140 172 171 139 1 0 141 173 172 140 1 0 142 174 173 141 1 0 143 175 174 142 1 0 144 176 175 143 1 0 145 177 176 144 1 0 146 178 177 145 1 0 147 179 178 146 1 0 148 180 179 147 1 0 149 181 180 148 1 0 150 182 181 149 1 0 151 183 182 150 1 0 152 184 183 151 1 0 153 185 184 152 1 0 154 186 185 153 1 0 155 187 186 154 1 0 156 188 187 155 1 0 157 189 188 156 1 0 158 190 189 157 1 0 159 191 190 158 1 0 160 192 223 191 1 0 161 193 192 160 1 0 162 194 193 161 1 0 163 195 194 162 1 0 164 196 195 163 1 0 165 197 196 164 1 0 166 198 197 165 1 0 167 199 198 166 1 0 168 200 199 167 1 0 169 201 200 168 1 0 170 202 201 169 1 0 171 203 202 170 1 0 172 204 203 171 1 0 173 205 204 172 1 0 174 206 205 173 1 0 175 207 206 174 1 0 176 208 207 175 1 0 177 209 208 176 1 0 178 210 209 177 1 0 179 211 210 178 1 0 180 212 211 179 1 0 181 213 212 180 1 0 182 214 213 181 1 0 183 215 214 182 1 0 184 216 215 183 1 0 185 217 216 184 1 0 186 218 217 185 1 0 187 219 218 186 1 0 188 220 219 187 1 0 189 221 220 188 1 0 190 222 221 189 1 0 191 223 222 190 1 0 192 224 255 223 1 0 193 225 224 192 1 0 194 226 225 193 1 0 195 227 226 194 1 0 196 228 227 195 1 0 197 229 228 196 1 0 198 230 229 197 1 0 199 231 230 198 1 0 200 232 231 199 1 0 201 233 232 200 1 0 202 234 233 201 1 0 203 235 234 202 1 0 204 236 235 203 1 0 205 237 236 204 1 0 206 238 237 205 1 0 207 239 238 206 1 0 208 240 239 207 1 0 209 241 240 208 1 0 210 242 241 209 1 0 211 243 242 210 1 0 212 244 243 211 1 0 213 245 244 212 1 0 214 246 245 213 1 0 215 247 246 214 1 0 216 248 247 215 1 0 217 249 248 216 1 0 218 250 249 217 1 0 219 251 250 218 1 0 220 252 251 219 1 0 221 253 252 220 1 0 222 254 253 221 1 0 223 255 254 222 1 0 224 256 287 255 1 0 225 257 256 224 1 0 226 258 257 225 1 0 227 259 258 226 1 0 228 260 259 227 1 0 229 261 260 228 1 0 230 262 261 229 1 0 231 263 262 230 1 0 232 264 263 231 1 0 233 265 264 232 1 0 234 266 265 233 1 0 235 267 266 234 1 0 236 268 267 235 1 0 237 269 268 236 1 0 238 270 269 237 1 0 239 271 270 238 1 0 240 272 271 239 1 0 241 273 272 240 1 0 242 274 273 241 1 0 243 275 274 242 1 0 244 276 275 243 1 0 245 277 276 244 1 0 246 278 277 245 1 0 247 279 278 246 1 0 248 280 279 247 1 0 249 281 280 248 1 0 250 282 281 249 1 0 251 283 282 250 1 0 252 284 283 251 1 0 253 285 284 252 1 0 254 286 285 253 1 0 255 287 286 254 1 0 256 288 319 287 1 0 257 289 288 256 1 0 258 290 289 257 1 0 259 291 290 258 1 0 260 292 291 259 1 0 261 293 292 260 1 0 262 294 293 261 1 0 263 295 294 262 1 0 264 296 295 263 1 0 265 297 296 264 1 0 266 298 297 265 1 0 267 299 298 266 1 0 268 300 299 267 1 0 269 301 300 268 1 0 270 302 301 269 1 0 271 303 302 270 1 0 272 304 303 271 1 0 273 305 304 272 1 0 274 306 305 273 1 0 275 307 306 274 1 0 276 308 307 275 1 0 277 309 308 276 1 0 278 310 309 277 1 0 279 311 310 278 1 0 280 312 311 279 1 0 281 313 312 280 1 0 282 314 313 281 1 0 283 315 314 282 1 0 284 316 315 283 1 0 285 317 316 284 1 0 286 318 317 285 1 0 287 319 318 286 1 0 288 320 351 319 1 0 289 321 320 288 1 0 290 322 321 289 1 0 291 323 322 290 1 0 292 324 323 291 1 0 293 325 324 292 1 0 294 326 325 293 1 0 295 327 326 294 1 0 296 328 327 295 1 0 297 329 328 296 1 0 298 330 329 297 1 0 299 331 330 298 1 0 300 332 331 299 1 0 301 333 332 300 1 0 302 334 333 301 1 0 303 335 334 302 1 0 304 336 335 303 1 0 305 337 336 304 1 0 306 338 337 305 1 0 307 339 338 306 1 0 308 340 339 307 1 0 309 341 340 308 1 0 310 342 341 309 1 0 311 343 342 310 1 0 312 344 343 311 1 0 313 345 344 312 1 0 314 346 345 313 1 0 315 347 346 314 1 0 316 348 347 315 1 0 317 349 348 316 1 0 318 350 349 317 1 0 319 351 350 318 1 0 320 352 383 351 1 0 321 353 352 320 1 0 322 354 353 321 1 0 323 355 354 322 1 0 324 356 355 323 1 0 325 357 356 324 1 0 326 358 357 325 1 0 327 359 358 326 1 0 328 360 359 327 1 0 329 361 360 328 1 0 330 362 361 329 1 0 331 363 362 330 1 0 332 364 363 331 1 0 333 365 364 332 1 0 334 366 365 333 1 0 335 367 366 334 1 0 336 368 367 335 1 0 337 369 368 336 1 0 338 370 369 337 1 0 339 371 370 338 1 0 340 372 371 339 1 0 341 373 372 340 1 0 342 374 373 341 1 0 343 375 374 342 1 0 344 376 375 343 1 0 345 377 376 344 1 0 346 378 377 345 1 0 347 379 378 346 1 0 348 380 379 347 1 0 349 381 380 348 1 0 350 382 381 349 1 0 351 383 382 350 1 0 352 384 415 383 1 0 353 385 384 352 1 0 354 386 385 353 1 0 355 387 386 354 1 0 356 388 387 355 1 0 357 389 388 356 1 0 358 390 389 357 1 0 359 391 390 358 1 0 360 392 391 359 1 0 361 393 392 360 1 0 362 394 393 361 1 0 363 395 394 362 1 0 364 396 395 363 1 0 365 397 396 364 1 0 366 398 397 365 1 0 367 399 398 366 1 0 368 400 399 367 1 0 369 401 400 368 1 0 370 402 401 369 1 0 371 403 402 370 1 0 372 404 403 371 1 0 373 405 404 372 1 0 374 406 405 373 1 0 375 407 406 374 1 0 376 408 407 375 1 0 377 409 408 376 1 0 378 410 409 377 1 0 379 411 410 378 1 0 380 412 411 379 1 0 381 413 412 380 1 0 382 414 413 381 1 0 383 415 414 382 1 0 384 416 447 415 1 0 385 417 416 384 1 0 386 418 417 385 1 0 387 419 418 386 1 0 388 420 419 387 1 0 389 421 420 388 1 0 390 422 421 389 1 0 391 423 422 390 1 0 392 424 423 391 1 0 393 425 424 392 1 0 394 426 425 393 1 0 395 427 426 394 1 0 396 428 427 395 1 0 397 429 428 396 1 0 398 430 429 397 1 0 399 431 430 398 1 0 400 432 431 399 1 0 401 433 432 400 1 0 402 434 433 401 1 0 403 435 434 402 1 0 404 436 435 403 1 0 405 437 436 404 1 0 406 438 437 405 1 0 407 439 438 406 1 0 408 440 439 407 1 0 409 441 440 408 1 0 410 442 441 409 1 0 411 443 442 410 1 0 412 444 443 411 1 0 413 445 444 412 1 0 414 446 445 413 1 0 415 447 446 414 1 0 416 448 479 447 1 0 417 449 448 416 1 0 418 450 449 417 1 0 419 451 450 418 1 0 420 452 451 419 1 0 421 453 452 420 1 0 422 454 453 421 1 0 423 455 454 422 1 0 424 456 455 423 1 0 425 457 456 424 1 0 426 458 457 425 1 0 427 459 458 426 1 0 428 460 459 427 1 0 429 461 460 428 1 0 430 462 461 429 1 0 431 463 462 430 1 0 432 464 463 431 1 0 433 465 464 432 1 0 434 466 465 433 1 0 435 467 466 434 1 0 436 468 467 435 1 0 437 469 468 436 1 0 438 470 469 437 1 0 439 471 470 438 1 0 440 472 471 439 1 0 441 473 472 440 1 0 442 474 473 441 1 0 443 475 474 442 1 0 444 476 475 443 1 0 445 477 476 444 1 0 446 478 477 445 1 0 447 479 478 446 1 0 448 480 511 479 1 0 449 481 480 448 1 0 450 482 481 449 1 0 451 483 482 450 1 0 452 484 483 451 1 0 453 485 484 452 1 0 454 486 485 453 1 0 455 487 486 454 1 0 456 488 487 455 1 0 457 489 488 456 1 0 458 490 489 457 1 0 459 491 490 458 1 0 460 492 491 459 1 0 461 493 492 460 1 0 462 494 493 461 1 0 463 495 494 462 1 0 464 496 495 463 1 0 465 497 496 464 1 0 466 498 497 465 1 0 467 499 498 466 1 0 468 500 499 467 1 0 469 501 500 468 1 0 470 502 501 469 1 0 471 503 502 470 1 0 472 504 503 471 1 0 473 505 504 472 1 0 474 506 505 473 1 0 475 507 506 474 1 0 476 508 507 475 1 0 477 509 508 476 1 0 478 510 509 477 1 0 479 511 510 478 1 0 480 512 543 511 1 0 481 513 512 480 1 0 482 514 513 481 1 0 483 515 514 482 1 0 484 516 515 483 1 0 485 517 516 484 1 0 486 518 517 485 1 0 487 519 518 486 1 0 488 520 519 487 1 0 489 521 520 488 1 0 490 522 521 489 1 0 491 523 522 490 1 0 492 524 523 491 1 0 493 525 524 492 1 0 494 526 525 493 1 0 495 527 526 494 1 0 496 528 527 495 1 0 497 529 528 496 1 0 498 530 529 497 1 0 499 531 530 498 1 0 500 532 531 499 1 0 501 533 532 500 1 0 502 534 533 501 1 0 503 535 534 502 1 0 504 536 535 503 1 0 505 537 536 504 1 0 506 538 537 505 1 0 507 539 538 506 1 0 508 540 539 507 1 0 509 541 540 508 1 0 510 542 541 509 1 0 511 543 542 510 1 0 512 544 575 543 1 0 513 545 544 512 1 0 514 546 545 513 1 0 515 547 546 514 1 0 516 548 547 515 1 0 517 549 548 516 1 0 518 550 549 517 1 0 519 551 550 518 1 0 520 552 551 519 1 0 521 553 552 520 1 0 522 554 553 521 1 0 523 555 554 522 1 0 524 556 555 523 1 0 525 557 556 524 1 0 526 558 557 525 1 0 527 559 558 526 1 0 528 560 559 527 1 0 529 561 560 528 1 0 530 562 561 529 1 0 531 563 562 530 1 0 532 564 563 531 1 0 533 565 564 532 1 0 534 566 565 533 1 0 535 567 566 534 1 0 536 568 567 535 1 0 537 569 568 536 1 0 538 570 569 537 1 0 539 571 570 538 1 0 540 572 571 539 1 0 541 573 572 540 1 0 542 574 573 541 1 0 543 575 574 542 1 0 544 576 607 575 1 0 545 577 576 544 1 0 546 578 577 545 1 0 547 579 578 546 1 0 548 580 579 547 1 0 549 581 580 548 1 0 550 582 581 549 1 0 551 583 582 550 1 0 552 584 583 551 1 0 553 585 584 552 1 0 554 586 585 553 1 0 555 587 586 554 1 0 556 588 587 555 1 0 557 589 588 556 1 0 558 590 589 557 1 0 559 591 590 558 1 0 560 592 591 559 1 0 561 593 592 560 1 0 562 594 593 561 1 0 563 595 594 562 1 0 564 596 595 563 1 0 565 597 596 564 1 0 566 598 597 565 1 0 567 599 598 566 1 0 568 600 599 567 1 0 569 601 600 568 1 0 570 602 601 569 1 0 571 603 602 570 1 0 572 604 603 571 1 0 573 605 604 572 1 0 574 606 605 573 1 0 575 607 606 574 1 0 576 608 639 607 1 0 577 609 608 576 1 0 578 610 609 577 1 0 579 611 610 578 1 0 580 612 611 579 1 0 581 613 612 580 1 0 582 614 613 581 1 0 583 615 614 582 1 0 584 616 615 583 1 0 585 617 616 584 1 0 586 618 617 585 1 0 587 619 618 586 1 0 588 620 619 587 1 0 589 621 620 588 1 0 590 622 621 589 1 0 591 623 622 590 1 0 592 624 623 591 1 0 593 625 624 592 1 0 594 626 625 593 1 0 595 627 626 594 1 0 596 628 627 595 1 0 597 629 628 596 1 0 598 630 629 597 1 0 599 631 630 598 1 0 600 632 631 599 1 0 601 633 632 600 1 0 602 634 633 601 1 0 603 635 634 602 1 0 604 636 635 603 1 0 605 637 636 604 1 0 606 638 637 605 1 0 607 639 638 606 1 0 608 640 671 639 1 0 609 641 640 608 1 0 610 642 641 609 1 0 611 643 642 610 1 0 612 644 643 611 1 0 613 645 644 612 1 0 614 646 645 613 1 0 615 647 646 614 1 0 616 648 647 615 1 0 617 649 648 616 1 0 618 650 649 617 1 0 619 651 650 618 1 0 620 652 651 619 1 0 621 653 652 620 1 0 622 654 653 621 1 0 623 655 654 622 1 0 624 656 655 623 1 0 625 657 656 624 1 0 626 658 657 625 1 0 627 659 658 626 1 0 628 660 659 627 1 0 629 661 660 628 1 0 630 662 661 629 1 0 631 663 662 630 1 0 632 664 663 631 1 0 633 665 664 632 1 0 634 666 665 633 1 0 635 667 666 634 1 0 636 668 667 635 1 0 637 669 668 636 1 0 638 670 669 637 1 0 639 671 670 638 1 0 640 672 703 671 1 0 641 673 672 640 1 0 642 674 673 641 1 0 643 675 674 642 1 0 644 676 675 643 1 0 645 677 676 644 1 0 646 678 677 645 1 0 647 679 678 646 1 0 648 680 679 647 1 0 649 681 680 648 1 0 650 682 681 649 1 0 651 683 682 650 1 0 652 684 683 651 1 0 653 685 684 652 1 0 654 686 685 653 1 0 655 687 686 654 1 0 656 688 687 655 1 0 657 689 688 656 1 0 658 690 689 657 1 0 659 691 690 658 1 0 660 692 691 659 1 0 661 693 692 660 1 0 662 694 693 661 1 0 663 695 694 662 1 0 664 696 695 663 1 0 665 697 696 664 1 0 666 698 697 665 1 0 667 699 698 666 1 0 668 700 699 667 1 0 669 701 700 668 1 0 670 702 701 669 1 0 671 703 702 670 1 0 672 704 735 703 1 0 673 705 704 672 1 0 674 706 705 673 1 0 675 707 706 674 1 0 676 708 707 675 1 0 677 709 708 676 1 0 678 710 709 677 1 0 679 711 710 678 1 0 680 712 711 679 1 0 681 713 712 680 1 0 682 714 713 681 1 0 683 715 714 682 1 0 684 716 715 683 1 0 685 717 716 684 1 0 686 718 717 685 1 0 687 719 718 686 1 0 688 720 719 687 1 0 689 721 720 688 1 0 690 722 721 689 1 0 691 723 722 690 1 0 692 724 723 691 1 0 693 725 724 692 1 0 694 726 725 693 1 0 695 727 726 694 1 0 696 728 727 695 1 0 697 729 728 696 1 0 698 730 729 697 1 0 699 731 730 698 1 0 700 732 731 699 1 0 701 733 732 700 1 0 702 734 733 701 1 0 703 735 734 702 1 0 704 736 767 735 1 0 705 737 736 704 1 0 706 738 737 705 1 0 707 739 738 706 1 0 708 740 739 707 1 0 709 741 740 708 1 0 710 742 741 709 1 0 711 743 742 710 1 0 712 744 743 711 1 0 713 745 744 712 1 0 714 746 745 713 1 0 715 747 746 714 1 0 716 748 747 715 1 0 717 749 748 716 1 0 718 750 749 717 1 0 719 751 750 718 1 0 720 752 751 719 1 0 721 753 752 720 1 0 722 754 753 721 1 0 723 755 754 722 1 0 724 756 755 723 1 0 725 757 756 724 1 0 726 758 757 725 1 0 727 759 758 726 1 0 728 760 759 727 1 0 729 761 760 728 1 0 730 762 761 729 1 0 731 763 762 730 1 0 732 764 763 731 1 0 733 765 764 732 1 0 734 766 765 733 1 0 735 767 766 734 1 0 736 0 31 767 1 0 0 736 737 1 1 0 738 2 1 737 1 0 739 3 2 738 1 0 740 4 3 739 1 0 741 5 4 740 1 0 742 6 5 741 1 0 743 7 6 742 1 0 744 8 7 743 1 0 745 9 8 744 1 0 746 10 9 745 1 0 747 11 10 746 1 0 748 12 11 747 1 0 749 13 12 748 1 0 750 14 13 749 1 0 751 15 14 750 1 0 752 16 15 751 1 0 753 17 16 752 1 0 754 18 17 753 1 0 755 19 18 754 1 0 756 20 19 755 1 0 757 21 20 756 1 0 758 22 21 757 1 0 759 23 22 758 1 0 760 24 23 759 1 0 761 25 24 760 1 0 762 26 25 761 1 0 763 27 26 762 1 0 764 28 27 763 1 0 765 29 28 764 1 0 766 30 29 765 1 0 767 31 30 766 1 0 criticalmass-1.0.0.orig/data/models/FlankBurster.model0000644000175000017500000010142310265636020022220 0ustar danieldanielName FlankBurster Scale 1.0 1.0 1.0 Colors 1 0.52902251482 0.160123050213 0.689760863781 Vertices 330 -9.53837871552 -16.1927014589 -1.7252317071 -14.3299511075 -12.7351659536 -2.65165060759 -16.7798602581 -8.52473706007 -2.65165060759 -17.9737150669 -4.83968496323 -2.65165060759 -18.353433609 -2.10200183094 -2.65165060759 -18.4016489983 0.043771835044 -2.65165060759 -18.353433609 2.1895455569 -2.65165060759 -17.9737114906 4.92722779512 -2.65165060759 -16.7798602581 8.6122789979 -2.65165060759 -14.3299493194 12.8227069974 -2.65165060759 -8.78837585449 16.2802398205 -1.7252317071 -9.78578031063 -16.7919105291 -0.976741164923 -14.8970559239 -13.4724014997 -1.50123417377 -17.4883031845 -9.01906728745 -1.50123417377 -18.7510299683 -5.1214183867 -1.50123417377 -19.1526603699 -2.22579449415 -1.50123417377 -19.2036545277 0.0437718210742 -1.50123372674 -19.1526603699 2.31333822012 -1.50123417377 -18.7510299683 5.2089612186 -1.50123417377 -17.4883031845 9.10660922527 -1.50123417377 -14.8970523477 13.5599425435 -1.50123417377 -9.03577834368 16.8794506788 -0.976741164923 -9.86739635468 -16.9895857573 -0.400671064854 -15.0841373205 -13.7156072259 -0.615824460983 -17.7220129967 -9.1821411252 -0.615824908018 -19.0074598789 -5.21436005831 -0.615824460983 -19.4163161516 -2.26663291454 -0.615824908018 -19.468229413 0.0437719887123 -0.615824460983 -19.4163143635 2.35417619348 -0.615824460983 -19.0074598789 5.30190244317 -0.615824908018 -17.7220129967 9.2696839571 -0.615824460983 -15.0841355324 13.8031482697 -0.615824460983 -9.11739349365 17.0771241188 -0.400671511889 -9.87719625235 -17.0133197308 -4.47034835815e-07 -15.1066017151 -13.7448102236 -4.47034835815e-07 -17.7500760555 -9.20172303915 -4.47034835815e-07 -19.0382516384 -5.22551938891 -4.47034835815e-07 -19.4479715824 -2.27153599262 -4.47034835815e-07 -19.4999992847 0.0437719188631 -4.47034835815e-07 -19.4479715824 2.35907971859 -4.47034835815e-07 -19.0382516384 5.31306266785 -4.47034835815e-07 -17.7500724792 9.28926497698 -4.47034835815e-07 -15.1065981388 13.8323521614 -4.47034835815e-07 -9.12719428539 17.1008598804 -4.47034835815e-07 -9.86739635468 -16.9895857573 0.400670617819 -15.0841391087 -13.71560812 0.615823566914 -17.7220129967 -9.1821411252 0.615823566914 -19.0074598789 -5.21436005831 0.615823566914 -19.4163161516 -2.26663291454 0.615823566914 -19.4682312012 0.043771835044 0.615823566914 -19.4163143635 2.35417641699 0.615823566914 -19.0074598789 5.30190289021 0.615823566914 -17.7220129967 9.2696839571 0.615823566914 -15.0841355324 13.8031509519 0.615823566914 -9.11739349365 17.0771241188 0.400670617819 -9.78578031063 -16.7919123173 0.976740717888 -14.8970559239 -13.4724014997 1.50123327971 -17.4883031845 -9.01906728745 1.50123327971 -18.7510317564 -5.12141883373 1.50123327971 -19.1526567936 -2.22579471767 1.50123327971 -19.2036545277 0.0437718769535 1.50123305619 -19.1526585817 2.31333866715 1.50123327971 -18.7510299683 5.2089612186 1.50123327971 -17.4883031845 9.10660922527 1.50123327971 -14.8970523477 13.5599425435 1.50123327971 -9.03577923775 16.8794506788 0.976740717888 -9.53837871552 -16.1927014589 1.7252317071 -14.3299511075 -12.7351677418 2.65165060759 -16.7798602581 -8.52473706007 2.65165038407 -17.9737132788 -4.83968496323 2.65165038407 -18.353433609 -2.10200183094 2.65165016055 -18.4016489983 0.0437718629837 2.65165038407 -18.353433609 2.1895455569 2.65165016055 -17.9737114906 4.92722824216 2.65165038407 -16.7798602581 8.61227989197 2.65165038407 -14.3299502134 12.8227069974 2.65165060759 -8.78837585449 16.2802416086 1.7252317071 -9.18349832296 -15.3331786394 2.24703758955 -13.516484499 -11.6776585579 3.45365703106 -15.7636553049 -7.81565845013 3.45365725458 -16.8587100506 -4.43555921316 3.45365703106 -17.2070074081 -1.92443020642 3.45365703106 -17.2512316704 0.0437720026821 3.45365680754 -17.2070074081 2.01197460294 3.45365725458 -16.8587100506 4.52310249209 3.45365703106 -15.7636535168 7.90320217609 3.45365725458 -13.5164809227 11.7652004957 3.45365703106 -8.43349635601 15.4207187891 2.24703781307 -8.91036719084 -14.6716538072 2.41917639971 -12.8904050589 -10.8637556434 3.71823146939 -14.9815383554 -7.26992234588 3.71823146939 -16.0005569458 -4.12452757359 3.71823191643 -16.3246715069 -1.78776416928 3.71823169291 -16.3658237457 0.0437719607726 3.71823169291 -16.3246679306 1.87530823052 3.71823146939 -16.0005569458 4.21207129955 3.71823213995 -14.9815365672 7.35746562481 3.71823146939 -12.8904023767 10.9512975812 3.71823146939 -8.16036522388 14.7591939569 2.41917662323 -8.72039794922 -14.2115485668 2.43984572589 -12.4549511075 -10.2976647019 3.74999977648 -14.4375577569 -6.89034953713 3.74999977648 -15.4036903381 -3.9081966877 3.75 -15.7109820843 -1.69270925224 3.74999977648 -15.7499992847 0.0437720026821 3.75 -15.7109802961 1.78025320172 3.75 -15.40368855 3.99574041367 3.75 -14.4375559688 6.97789236903 3.74999977648 -12.4549493194 10.3852075338 3.75 -7.97039598227 14.2990887165 2.43984572589 -8.53042781353 -13.7514415383 2.41917617619 -12.0194980502 -9.73157465458 3.71823146939 -13.8935762644 -6.51077583432 3.71823146939 -14.8068210483 -3.69186557829 3.71823146939 -15.0972926617 -1.59765467048 3.71823146939 -15.1341748238 0.0437719607726 3.71823169291 -15.0972926617 1.68519817293 3.71823146939 -14.8068210483 3.77940952778 3.71823124588 -13.8935735822 6.59831777215 3.71823102236 -12.019495368 9.81911838055 3.71823146939 -7.78042674065 13.838981688 2.41917662323 -8.53042781353 -13.7514406443 -2.41917639971 -12.0194989443 -9.73157644272 -3.71823102236 -13.8935762644 -6.51077583432 -3.71823102236 -14.8068210483 -3.69186557829 -3.71823102236 -15.0972926617 -1.59765455872 -3.71823102236 -15.1341748238 0.0437718629837 -3.71823102236 -15.0972926617 1.68519817293 -3.71823102236 -14.8068210483 3.77940952778 -3.71823102236 -13.8935735822 6.59831777215 -3.71823102236 -12.019495368 9.81911838055 -3.71823191643 -7.78042674065 13.838981688 -2.41917639971 -8.72039794922 -14.2115476727 -2.43984594941 -12.4549511075 -10.2976647019 -3.75 -14.4375577569 -6.8903490901 -3.75 -15.40368855 -3.90819624066 -3.75 -15.7109802961 -1.69270914048 -3.75 -15.7499992847 0.0437720585614 -3.75 -15.710978508 1.78025297821 -3.75 -15.4036867619 3.99574041367 -3.75 -14.4375550747 6.97789147496 -3.75 -12.4549484253 10.3852075338 -3.75 -7.97039598227 14.2990887165 -2.43984594941 -8.91036629677 -14.6716529131 -2.41917729378 -12.8904050589 -10.8637529612 -3.71823191643 -14.9815365672 -7.26992100477 -3.71823191643 -16.0005551577 -4.12452667952 -3.71823191643 -16.3246679306 -1.78776361048 -3.71823191643 -16.3658201694 0.0437720026821 -3.71823191643 -16.3246679306 1.87530778348 -3.71823191643 -16.0005533695 4.21207040548 -3.71823191643 -14.9815347791 7.35746383667 -3.7182328105 -12.8904014826 10.9512966871 -3.71823191643 -8.16036432981 14.7591930628 -2.41917684674 -9.18349742889 -15.3331750631 -2.24703937769 -13.5164818168 -11.6776549816 -3.4536588192 -15.7636499405 -7.81565487385 -3.45365971327 -16.8587064743 -4.43555787206 -3.45365971327 -17.2070038319 -1.92442953587 -3.45365971327 -17.2512280941 0.0437719188631 -3.45365971327 -17.2070038319 2.01197348535 -3.4536588192 -16.8587046862 4.52310070395 -3.45365971327 -15.7636499405 7.90319949389 -3.45365971327 -13.5164782405 11.7651969194 -3.4536588192 -8.43349456787 15.420717001 -2.24703937769 9.53837871552 -16.1927014589 -1.7252317071 14.3299511075 -12.7351659536 -2.65165060759 16.7798602581 -8.52473706007 -2.65165060759 17.9737150669 -4.83968496323 -2.65165060759 18.353433609 -2.10200183094 -2.65165060759 18.4016489983 0.043771835044 -2.65165060759 18.353433609 2.1895455569 -2.65165060759 17.9737114906 4.92722779512 -2.65165060759 16.7798602581 8.6122789979 -2.65165060759 14.3299493194 12.8227069974 -2.65165060759 8.78837585449 16.2802398205 -1.7252317071 9.78578031063 -16.7919105291 -0.976741164923 14.8970559239 -13.4724014997 -1.50123417377 17.4883031845 -9.01906728745 -1.50123417377 18.7510299683 -5.1214183867 -1.50123417377 19.1526603699 -2.22579449415 -1.50123417377 19.2036545277 0.0437718210742 -1.50123372674 19.1526603699 2.31333822012 -1.50123417377 18.7510299683 5.2089612186 -1.50123417377 17.4883031845 9.10660922527 -1.50123417377 14.8970523477 13.5599425435 -1.50123417377 9.03577834368 16.8794506788 -0.976741164923 9.86739635468 -16.9895857573 -0.400671064854 15.0841373205 -13.7156072259 -0.615824460983 17.7220129967 -9.1821411252 -0.615824908018 19.0074598789 -5.21436005831 -0.615824460983 19.4163161516 -2.26663291454 -0.615824908018 19.468229413 0.0437719887123 -0.615824460983 19.4163143635 2.35417619348 -0.615824460983 19.0074598789 5.30190244317 -0.615824908018 17.7220129967 9.2696839571 -0.615824460983 15.0841355324 13.8031482697 -0.615824460983 9.11739349365 17.0771241188 -0.400671511889 9.87719625235 -17.0133197308 -4.47034835815e-07 15.1066017151 -13.7448102236 -4.47034835815e-07 17.7500760555 -9.20172303915 -4.47034835815e-07 19.0382516384 -5.22551938891 -4.47034835815e-07 19.4479715824 -2.27153599262 -4.47034835815e-07 19.4999992847 0.0437719188631 -4.47034835815e-07 19.4479715824 2.35907971859 -4.47034835815e-07 19.0382516384 5.31306266785 -4.47034835815e-07 17.7500724792 9.28926497698 -4.47034835815e-07 15.1065981388 13.8323521614 -4.47034835815e-07 9.12719428539 17.1008598804 -4.47034835815e-07 9.86739635468 -16.9895857573 0.400670617819 15.0841391087 -13.71560812 0.615823566914 17.7220129967 -9.1821411252 0.615823566914 19.0074598789 -5.21436005831 0.615823566914 19.4163161516 -2.26663291454 0.615823566914 19.4682312012 0.043771835044 0.615823566914 19.4163143635 2.35417641699 0.615823566914 19.0074598789 5.30190289021 0.615823566914 17.7220129967 9.2696839571 0.615823566914 15.0841355324 13.8031509519 0.615823566914 9.11739349365 17.0771241188 0.400670617819 9.78578031063 -16.7919123173 0.976740717888 14.8970559239 -13.4724014997 1.50123327971 17.4883031845 -9.01906728745 1.50123327971 18.7510317564 -5.12141883373 1.50123327971 19.1526567936 -2.22579471767 1.50123327971 19.2036545277 0.0437718769535 1.50123305619 19.1526585817 2.31333866715 1.50123327971 18.7510299683 5.2089612186 1.50123327971 17.4883031845 9.10660922527 1.50123327971 14.8970523477 13.5599425435 1.50123327971 9.03577923775 16.8794506788 0.976740717888 9.53837871552 -16.1927014589 1.7252317071 14.3299511075 -12.7351677418 2.65165060759 16.7798602581 -8.52473706007 2.65165038407 17.9737132788 -4.83968496323 2.65165038407 18.353433609 -2.10200183094 2.65165016055 18.4016489983 0.0437718629837 2.65165038407 18.353433609 2.1895455569 2.65165016055 17.9737114906 4.92722824216 2.65165038407 16.7798602581 8.61227989197 2.65165038407 14.3299502134 12.8227069974 2.65165060759 8.78837585449 16.2802416086 1.7252317071 9.18349832296 -15.3331786394 2.24703758955 13.516484499 -11.6776585579 3.45365703106 15.7636553049 -7.81565845013 3.45365725458 16.8587100506 -4.43555921316 3.45365703106 17.2070074081 -1.92443020642 3.45365703106 17.2512316704 0.0437720026821 3.45365680754 17.2070074081 2.01197460294 3.45365725458 16.8587100506 4.52310249209 3.45365703106 15.7636535168 7.90320217609 3.45365725458 13.5164809227 11.7652004957 3.45365703106 8.43349635601 15.4207187891 2.24703781307 8.91036719084 -14.6716538072 2.41917639971 12.8904050589 -10.8637556434 3.71823146939 14.9815383554 -7.26992234588 3.71823146939 16.0005569458 -4.12452757359 3.71823191643 16.3246715069 -1.78776416928 3.71823169291 16.3658237457 0.0437719607726 3.71823169291 16.3246679306 1.87530823052 3.71823146939 16.0005569458 4.21207129955 3.71823213995 14.9815365672 7.35746562481 3.71823146939 12.8904023767 10.9512975812 3.71823146939 8.16036522388 14.7591939569 2.41917662323 8.72039794922 -14.2115485668 2.43984572589 12.4549511075 -10.2976647019 3.74999977648 14.4375577569 -6.89034953713 3.74999977648 15.4036903381 -3.9081966877 3.75 15.7109820843 -1.69270925224 3.74999977648 15.7499992847 0.0437720026821 3.75 15.7109802961 1.78025320172 3.75 15.40368855 3.99574041367 3.75 14.4375559688 6.97789236903 3.74999977648 12.4549493194 10.3852075338 3.75 7.97039598227 14.2990887165 2.43984572589 8.53042781353 -13.7514415383 2.41917617619 12.0194980502 -9.73157465458 3.71823146939 13.8935762644 -6.51077583432 3.71823146939 14.8068210483 -3.69186557829 3.71823146939 15.0972926617 -1.59765467048 3.71823146939 15.1341748238 0.0437719607726 3.71823169291 15.0972926617 1.68519817293 3.71823146939 14.8068210483 3.77940952778 3.71823124588 13.8935735822 6.59831777215 3.71823102236 12.019495368 9.81911838055 3.71823146939 7.78042674065 13.838981688 2.41917662323 8.53042781353 -13.7514406443 -2.41917639971 12.0194989443 -9.73157644272 -3.71823102236 13.8935762644 -6.51077583432 -3.71823102236 14.8068210483 -3.69186557829 -3.71823102236 15.0972926617 -1.59765455872 -3.71823102236 15.1341748238 0.0437718629837 -3.71823102236 15.0972926617 1.68519817293 -3.71823102236 14.8068210483 3.77940952778 -3.71823102236 13.8935735822 6.59831777215 -3.71823102236 12.019495368 9.81911838055 -3.71823191643 7.78042674065 13.838981688 -2.41917639971 8.72039794922 -14.2115476727 -2.43984594941 12.4549511075 -10.2976647019 -3.75 14.4375577569 -6.8903490901 -3.75 15.40368855 -3.90819624066 -3.75 15.7109802961 -1.69270914048 -3.75 15.7499992847 0.0437720585614 -3.75 15.710978508 1.78025297821 -3.75 15.4036867619 3.99574041367 -3.75 14.4375550747 6.97789147496 -3.75 12.4549484253 10.3852075338 -3.75 7.97039598227 14.2990887165 -2.43984594941 8.91036629677 -14.6716529131 -2.41917729378 12.8904050589 -10.8637529612 -3.71823191643 14.9815365672 -7.26992100477 -3.71823191643 16.0005551577 -4.12452667952 -3.71823191643 16.3246679306 -1.78776361048 -3.71823191643 16.3658201694 0.0437720026821 -3.71823191643 16.3246679306 1.87530778348 -3.71823191643 16.0005533695 4.21207040548 -3.71823191643 14.9815347791 7.35746383667 -3.7182328105 12.8904014826 10.9512966871 -3.71823191643 8.16036432981 14.7591930628 -2.41917684674 9.18349742889 -15.3331750631 -2.24703937769 13.5164818168 -11.6776549816 -3.4536588192 15.7636499405 -7.81565487385 -3.45365971327 16.8587064743 -4.43555787206 -3.45365971327 17.2070038319 -1.92442953587 -3.45365971327 17.2512280941 0.0437719188631 -3.45365971327 17.2070038319 2.01197348535 -3.4536588192 16.8587046862 4.52310070395 -3.45365971327 15.7636499405 7.90319949389 -3.45365971327 13.5164782405 11.7651969194 -3.4536588192 8.43349456787 15.420717001 -2.24703937769 Normals 330 4.42625194788 9.10153537989 11.070894599 6.76046043634 7.22052678466 11.2764367461 9.51445072889 4.2362742126 10.7943964005 10.2990818024 2.35801264644 10.6469920278 10.5920594931 0.849177539349 10.5865654349 10.6250193715 0.0 10.5874809623 10.5920594931 -0.849177539349 10.5865654349 10.2990818024 -2.35801264644 10.6469920278 9.51445072889 -4.2362742126 10.7943964005 6.60115376115 -7.38486886024 11.2640762329 3.93276751041 -9.28052634001 11.1084321141 6.6524246335 11.3959166408 7.13217571378 9.302957654 9.29380148649 7.21594914794 12.2295293212 5.47730952501 6.74031794071 13.1350135803 3.02179031074 6.5828423202 13.4682762623 1.08493298292 6.51326045394 13.5154268146 0.0 6.50547802448 13.4682762623 -1.08493298292 6.51326045394 13.1350135803 -3.02179031074 6.5828423202 12.2295293212 -5.47730952501 6.74031794071 9.04385536909 -9.5414596796 7.22190007567 5.98590061069 -11.7346724868 7.17337578535 7.73140668869 12.5238803029 2.89223916829 10.5156102777 10.2935877442 2.90643028915 13.4678184986 6.03991806507 2.66975931823 14.3975642323 3.31522576511 2.59056374431 14.732657969 1.18747517467 2.55439929664 14.78164047 0.0 2.54753261805 14.732657969 -1.18747517467 2.55439929664 14.3975642323 -3.31522576511 2.59056374431 13.4678184986 -6.03991806507 2.66975931823 10.2157661319 -10.5888542533 2.91512802243 6.99026450515 -12.9486984015 2.90871910751 7.94793516397 12.7207249403 0.0 10.75868994 10.4519793391 0.0 13.6907556653 6.12781137228 0.0 14.6186712384 3.35963018239 0.0 14.9514752626 1.20258182287 0.0 15.0 0.0 0.0 14.9514752626 -1.20258182287 0.0 14.6186712384 -3.35963018239 0.0 13.6907556653 -6.12781137228 0.0 10.4506060481 -10.760063231 0.0 7.19214454293 -13.1629380584 0.0 7.73140668869 12.5238803029 -2.89223916829 10.5156102777 10.2935877442 -2.90643028915 13.4678184986 6.03991806507 -2.66975931823 14.3975642323 3.31522576511 -2.59056374431 14.732657969 1.18747517467 -2.55439929664 14.78164047 0.0 -2.54753261805 14.732657969 -1.18747517467 -2.55439929664 14.3975642323 -3.31522576511 -2.59056374431 13.4678184986 -6.03991806507 -2.66975931823 10.2157661319 -10.5888542533 -2.91512802243 6.99026450515 -12.9486984015 -2.90871910751 6.6524246335 11.3959166408 -7.13217571378 9.302957654 9.29380148649 -7.21594914794 12.2295293212 5.47730952501 -6.74031794071 13.1350135803 3.02179031074 -6.5828423202 13.4682762623 1.08493298292 -6.51326045394 13.5154268146 0.0 -6.50547802448 13.4682762623 -1.08493298292 -6.51326045394 13.1350135803 -3.02179031074 -6.5828423202 12.2295293212 -5.47730952501 -6.74031794071 9.04385536909 -9.5414596796 -7.22190007567 5.98590061069 -11.7346724868 -7.17337578535 4.42625194788 9.10153537989 -11.070894599 6.76046043634 7.22052678466 -11.2764367461 9.51445072889 4.2362742126 -10.7943964005 10.2990818024 2.35801264644 -10.6469920278 10.5920594931 0.849177539349 -10.5865654349 10.6250193715 0.0 -10.5874809623 10.5920594931 -0.849177539349 -10.5865654349 10.2990818024 -2.35801264644 -10.6469920278 9.51445072889 -4.2362742126 -10.7943964005 6.60115376115 -7.38486886024 -11.2640762329 3.93276751041 -9.28052634001 -11.1084321141 1.51387061924 6.2308113277 -13.5598316789 3.45439016819 4.6427808702 -13.838160038 5.82888275385 2.57087923586 -13.5795164108 6.34983345866 1.44154183567 -13.5126802325 6.54026895761 0.520035400987 -13.4888756275 6.54622033238 0.0 -13.4957429767 6.54026895761 -0.520035400987 -13.4888756275 6.34983345866 -1.44154183567 -13.5126802325 5.82888275385 -2.57087923586 -13.5795164108 3.43653671443 -4.71144765615 -13.8198494911 1.2927640602 -6.23859375715 -13.5790577531 -1.19296856225 3.66313666105 -14.4964447618 0.432599885389 2.37769715488 -14.8036131263 2.32596829534 1.01031526923 -14.7839292884 2.53059491515 0.566728748381 -14.7738575935 2.59376809001 0.202795495279 -14.7724843025 2.57637262344 0.0 -14.7766041756 2.59376809001 -0.202795495279 -14.7724843025 2.53059491515 -0.566728748381 -14.7738575935 2.32596829534 -1.01031526923 -14.7839292884 0.541550964117 -2.35801264644 -14.8031553626 -1.1233863607 -3.5303811729 -14.5348978043 -2.98287905753 2.01055951416 -14.561906755 -1.51066627353 0.979186333716 -14.8915064335 0.0508133182302 0.0119022186846 -14.9995422363 0.0425733206794 0.00411999877542 -14.9995422363 0.0283822137862 0.0 -14.9995422363 0.0109866634011 0.0 -14.9995422363 0.0283822137862 0.0 -14.9995422363 0.0425733206794 -0.00411999877542 -14.9995422363 0.0508133182302 -0.0119022186846 -14.9995422363 -1.33121743798 -0.889919735491 -14.9139377475 -2.69859910011 -1.79677728564 -14.6452224255 -3.62010553479 1.4662617445 -14.4822531939 -1.87780380249 0.398724339902 -14.8764002323 -0.672933161259 -0.288857705891 -14.9816885591 -0.737937558442 -0.163426618092 -14.9807730317 -0.765861980617 -0.0590533157811 -14.9798575044 -0.772728659213 0.0 -14.9798575044 -0.765861980617 0.0590533157811 -14.9798575044 -0.737937558442 0.163426618092 -14.9807730317 -0.672933161259 0.288857705891 -14.9816885591 -1.75969731063 -0.325479917228 -14.8924219608 -3.24427016079 -1.23142182827 -14.5925778151 -3.62010553479 1.4662617445 14.4822531939 -1.87780380249 0.398724339902 14.8764002323 -0.672933161259 -0.288857705891 14.9816885591 -0.737937558442 -0.163426618092 14.9807730317 -0.765861980617 -0.0590533157811 14.9798575044 -0.772728659213 0.0 14.9798575044 -0.765861980617 0.0590533157811 14.9798575044 -0.737937558442 0.163426618092 14.9807730317 -0.672933161259 0.288857705891 14.9816885591 -1.75969731063 -0.325479917228 14.8924219608 -3.24427016079 -1.23142182827 14.5925778151 -2.98287905753 2.01055951416 14.561906755 -1.51066627353 0.979186333716 14.8915064335 0.0508133182302 0.0119022186846 14.9995422363 0.0425733206794 0.00411999877542 14.9995422363 0.0283822137862 0.0 14.9995422363 0.0109866634011 0.0 14.9995422363 0.0283822137862 0.0 14.9995422363 0.0425733206794 -0.00411999877542 14.9995422363 0.0508133182302 -0.0119022186846 14.9995422363 -1.33121743798 -0.889919735491 14.9139377475 -2.69859910011 -1.79677728564 14.6452224255 -1.19296856225 3.66313666105 14.4964447618 0.432599885389 2.37769715488 14.8036131263 2.32596829534 1.01031526923 14.7839292884 2.53059491515 0.566728748381 14.7738575935 2.59376809001 0.202795495279 14.7724843025 2.57637262344 0.0 14.7766041756 2.59376809001 -0.202795495279 14.7724843025 2.53059491515 -0.566728748381 14.7738575935 2.32596829534 -1.01031526923 14.7839292884 0.541550964117 -2.35801264644 14.8031553626 -1.1233863607 -3.5303811729 14.5348978043 1.51387061924 6.2308113277 13.5598316789 3.45439016819 4.6427808702 13.838160038 5.82888275385 2.57087923586 13.5795164108 6.34983345866 1.44154183567 13.5126802325 6.54026895761 0.520035400987 13.4888756275 6.54622033238 0.0 13.4957429767 6.54026895761 -0.520035400987 13.4888756275 6.34983345866 -1.44154183567 13.5126802325 5.82888275385 -2.57087923586 13.5795164108 3.43653671443 -4.71144765615 13.8198494911 1.2927640602 -6.23859375715 13.5790577531 4.42625194788 -9.10153537989 -11.070894599 6.76046043634 -7.22052678466 -11.2764367461 9.51445072889 -4.2362742126 -10.7943964005 10.2990818024 -2.35801264644 -10.6469920278 10.5920594931 -0.849177539349 -10.5865654349 10.6250193715 0.0 -10.5874809623 10.5920594931 0.849177539349 -10.5865654349 10.2990818024 2.35801264644 -10.6469920278 9.51445072889 4.2362742126 -10.7943964005 6.60115376115 7.38486886024 -11.2640762329 3.93276751041 9.28052634001 -11.1084321141 6.6524246335 -11.3959166408 -7.13217571378 9.302957654 -9.29380148649 -7.21594914794 12.2295293212 -5.47730952501 -6.74031794071 13.1350135803 -3.02179031074 -6.5828423202 13.4682762623 -1.08493298292 -6.51326045394 13.5154268146 0.0 -6.50547802448 13.4682762623 1.08493298292 -6.51326045394 13.1350135803 3.02179031074 -6.5828423202 12.2295293212 5.47730952501 -6.74031794071 9.04385536909 9.5414596796 -7.22190007567 5.98590061069 11.7346724868 -7.17337578535 7.73140668869 -12.5238803029 -2.89223916829 10.5156102777 -10.2935877442 -2.90643028915 13.4678184986 -6.03991806507 -2.66975931823 14.3975642323 -3.31522576511 -2.59056374431 14.732657969 -1.18747517467 -2.55439929664 14.78164047 0.0 -2.54753261805 14.732657969 1.18747517467 -2.55439929664 14.3975642323 3.31522576511 -2.59056374431 13.4678184986 6.03991806507 -2.66975931823 10.2157661319 10.5888542533 -2.91512802243 6.99026450515 12.9486984015 -2.90871910751 7.94793516397 -12.7207249403 0.0 10.75868994 -10.4519793391 0.0 13.6907556653 -6.12781137228 0.0 14.6186712384 -3.35963018239 0.0 14.9514752626 -1.20258182287 0.0 15.0 0.0 0.0 14.9514752626 1.20258182287 0.0 14.6186712384 3.35963018239 0.0 13.6907556653 6.12781137228 0.0 10.4506060481 10.760063231 0.0 7.19214454293 13.1629380584 0.0 7.73140668869 -12.5238803029 2.89223916829 10.5156102777 -10.2935877442 2.90643028915 13.4678184986 -6.03991806507 2.66975931823 14.3975642323 -3.31522576511 2.59056374431 14.732657969 -1.18747517467 2.55439929664 14.78164047 0.0 2.54753261805 14.732657969 1.18747517467 2.55439929664 14.3975642323 3.31522576511 2.59056374431 13.4678184986 6.03991806507 2.66975931823 10.2157661319 10.5888542533 2.91512802243 6.99026450515 12.9486984015 2.90871910751 6.6524246335 -11.3959166408 7.13217571378 9.302957654 -9.29380148649 7.21594914794 12.2295293212 -5.47730952501 6.74031794071 13.1350135803 -3.02179031074 6.5828423202 13.4682762623 -1.08493298292 6.51326045394 13.5154268146 0.0 6.50547802448 13.4682762623 1.08493298292 6.51326045394 13.1350135803 3.02179031074 6.5828423202 12.2295293212 5.47730952501 6.74031794071 9.04385536909 9.5414596796 7.22190007567 5.98590061069 11.7346724868 7.17337578535 4.42625194788 -9.10153537989 11.070894599 6.76046043634 -7.22052678466 11.2764367461 9.51445072889 -4.2362742126 10.7943964005 10.2990818024 -2.35801264644 10.6469920278 10.5920594931 -0.849177539349 10.5865654349 10.6250193715 0.0 10.5874809623 10.5920594931 0.849177539349 10.5865654349 10.2990818024 2.35801264644 10.6469920278 9.51445072889 4.2362742126 10.7943964005 6.60115376115 7.38486886024 11.2640762329 3.93276751041 9.28052634001 11.1084321141 1.51387061924 -6.2308113277 13.5598316789 3.45439016819 -4.6427808702 13.838160038 5.82888275385 -2.57087923586 13.5795164108 6.34983345866 -1.44154183567 13.5126802325 6.54026895761 -0.520035400987 13.4888756275 6.54622033238 0.0 13.4957429767 6.54026895761 0.520035400987 13.4888756275 6.34983345866 1.44154183567 13.5126802325 5.82888275385 2.57087923586 13.5795164108 3.43653671443 4.71144765615 13.8198494911 1.2927640602 6.23859375715 13.5790577531 -1.19296856225 -3.66313666105 14.4964447618 0.432599885389 -2.37769715488 14.8036131263 2.32596829534 -1.01031526923 14.7839292884 2.53059491515 -0.566728748381 14.7738575935 2.59376809001 -0.202795495279 14.7724843025 2.57637262344 0.0 14.7766041756 2.59376809001 0.202795495279 14.7724843025 2.53059491515 0.566728748381 14.7738575935 2.32596829534 1.01031526923 14.7839292884 0.541550964117 2.35801264644 14.8031553626 -1.1233863607 3.5303811729 14.5348978043 -2.98287905753 -2.01055951416 14.561906755 -1.51066627353 -0.979186333716 14.8915064335 0.0508133182302 -0.0119022186846 14.9995422363 0.0425733206794 -0.00411999877542 14.9995422363 0.0283822137862 0.0 14.9995422363 0.0109866634011 0.0 14.9995422363 0.0283822137862 0.0 14.9995422363 0.0425733206794 0.00411999877542 14.9995422363 0.0508133182302 0.0119022186846 14.9995422363 -1.33121743798 0.889919735491 14.9139377475 -2.69859910011 1.79677728564 14.6452224255 -3.62010553479 -1.4662617445 14.4822531939 -1.87780380249 -0.398724339902 14.8764002323 -0.672933161259 0.288857705891 14.9816885591 -0.737937558442 0.163426618092 14.9807730317 -0.765861980617 0.0590533157811 14.9798575044 -0.772728659213 0.0 14.9798575044 -0.765861980617 -0.0590533157811 14.9798575044 -0.737937558442 -0.163426618092 14.9807730317 -0.672933161259 -0.288857705891 14.9816885591 -1.75969731063 0.325479917228 14.8924219608 -3.24427016079 1.23142182827 14.5925778151 -3.62010553479 -1.4662617445 -14.4822531939 -1.87780380249 -0.398724339902 -14.8764002323 -0.672933161259 0.288857705891 -14.9816885591 -0.737937558442 0.163426618092 -14.9807730317 -0.765861980617 0.0590533157811 -14.9798575044 -0.772728659213 0.0 -14.9798575044 -0.765861980617 -0.0590533157811 -14.9798575044 -0.737937558442 -0.163426618092 -14.9807730317 -0.672933161259 -0.288857705891 -14.9816885591 -1.75969731063 0.325479917228 -14.8924219608 -3.24427016079 1.23142182827 -14.5925778151 -2.98287905753 -2.01055951416 -14.561906755 -1.51066627353 -0.979186333716 -14.8915064335 0.0508133182302 -0.0119022186846 -14.9995422363 0.0425733206794 -0.00411999877542 -14.9995422363 0.0283822137862 0.0 -14.9995422363 0.0109866634011 0.0 -14.9995422363 0.0283822137862 0.0 -14.9995422363 0.0425733206794 0.00411999877542 -14.9995422363 0.0508133182302 0.0119022186846 -14.9995422363 -1.33121743798 0.889919735491 -14.9139377475 -2.69859910011 1.79677728564 -14.6452224255 -1.19296856225 -3.66313666105 -14.4964447618 0.432599885389 -2.37769715488 -14.8036131263 2.32596829534 -1.01031526923 -14.7839292884 2.53059491515 -0.566728748381 -14.7738575935 2.59376809001 -0.202795495279 -14.7724843025 2.57637262344 0.0 -14.7766041756 2.59376809001 0.202795495279 -14.7724843025 2.53059491515 0.566728748381 -14.7738575935 2.32596829534 1.01031526923 -14.7839292884 0.541550964117 2.35801264644 -14.8031553626 -1.1233863607 3.5303811729 -14.5348978043 1.51387061924 -6.2308113277 -13.5598316789 3.45439016819 -4.6427808702 -13.838160038 5.82888275385 -2.57087923586 -13.5795164108 6.34983345866 -1.44154183567 -13.5126802325 6.54026895761 -0.520035400987 -13.4888756275 6.54622033238 0.0 -13.4957429767 6.54026895761 0.520035400987 -13.4888756275 6.34983345866 1.44154183567 -13.5126802325 5.82888275385 2.57087923586 -13.5795164108 3.43653671443 4.71144765615 -13.8198494911 1.2927640602 6.23859375715 -13.5790577531 Faces 280 11 0 1 12 1 0 2 13 12 1 1 0 3 14 13 2 1 0 4 15 14 3 1 0 5 16 15 4 1 0 6 17 16 5 1 0 7 18 17 6 1 0 8 19 18 7 1 0 9 20 19 8 1 0 10 21 20 9 1 0 12 23 22 11 1 0 13 24 23 12 1 0 14 25 24 13 1 0 15 26 25 14 1 0 16 27 26 15 1 0 17 28 27 16 1 0 18 29 28 17 1 0 19 30 29 18 1 0 20 31 30 19 1 0 21 32 31 20 1 0 23 34 33 22 1 0 24 35 34 23 1 0 25 36 35 24 1 0 26 37 36 25 1 0 27 38 37 26 1 0 28 39 38 27 1 0 29 40 39 28 1 0 30 41 40 29 1 0 31 42 41 30 1 0 32 43 42 31 1 0 34 45 44 33 1 0 35 46 45 34 1 0 36 47 46 35 1 0 37 48 47 36 1 0 38 49 48 37 1 0 39 50 49 38 1 0 40 51 50 39 1 0 41 52 51 40 1 0 42 53 52 41 1 0 43 54 53 42 1 0 45 56 55 44 1 0 46 57 56 45 1 0 47 58 57 46 1 0 48 59 58 47 1 0 49 60 59 48 1 0 50 61 60 49 1 0 51 62 61 50 1 0 52 63 62 51 1 0 53 64 63 52 1 0 54 65 64 53 1 0 56 67 66 55 1 0 57 68 67 56 1 0 58 69 68 57 1 0 59 70 69 58 1 0 60 71 70 59 1 0 61 72 71 60 1 0 62 73 72 61 1 0 63 74 73 62 1 0 64 75 74 63 1 0 65 76 75 64 1 0 67 78 77 66 1 0 68 79 78 67 1 0 69 80 79 68 1 0 70 81 80 69 1 0 71 82 81 70 1 0 72 83 82 71 1 0 73 84 83 72 1 0 74 85 84 73 1 0 75 86 85 74 1 0 76 87 86 75 1 0 78 89 88 77 1 0 79 90 89 78 1 0 80 91 90 79 1 0 81 92 91 80 1 0 82 93 92 81 1 0 83 94 93 82 1 0 84 95 94 83 1 0 85 96 95 84 1 0 86 97 96 85 1 0 87 98 97 86 1 0 89 100 99 88 1 0 90 101 100 89 1 0 91 102 101 90 1 0 92 103 102 91 1 0 93 104 103 92 1 0 94 105 104 93 1 0 95 106 105 94 1 0 96 107 106 95 1 0 97 108 107 96 1 0 98 109 108 97 1 0 100 111 110 99 1 0 101 112 111 100 1 0 102 113 112 101 1 0 103 114 113 102 1 0 104 115 114 103 1 0 105 116 115 104 1 0 106 117 116 105 1 0 107 118 117 106 1 0 108 119 118 107 1 0 109 120 119 108 1 0 122 133 132 121 1 0 123 134 133 122 1 0 124 135 134 123 1 0 125 136 135 124 1 0 126 137 136 125 1 0 127 138 137 126 1 0 128 139 138 127 1 0 129 140 139 128 1 0 130 141 140 129 1 0 131 142 141 130 1 0 133 144 143 132 1 0 134 145 144 133 1 0 135 146 145 134 1 0 136 147 146 135 1 0 137 148 147 136 1 0 138 149 148 137 1 0 139 150 149 138 1 0 140 151 150 139 1 0 141 152 151 140 1 0 142 153 152 141 1 0 144 155 154 143 1 0 145 156 155 144 1 0 146 157 156 145 1 0 147 158 157 146 1 0 148 159 158 147 1 0 149 160 159 148 1 0 150 161 160 149 1 0 151 162 161 150 1 0 152 163 162 151 1 0 153 164 163 152 1 0 0 154 155 1 1 0 156 2 1 155 1 0 157 3 2 156 1 0 158 4 3 157 1 0 159 5 4 158 1 0 160 6 5 159 1 0 161 7 6 160 1 0 162 8 7 161 1 0 163 9 8 162 1 0 164 10 9 163 1 0 176 165 166 177 1 0 167 178 177 166 1 0 168 179 178 167 1 0 169 180 179 168 1 0 170 181 180 169 1 0 171 182 181 170 1 0 172 183 182 171 1 0 173 184 183 172 1 0 174 185 184 173 1 0 175 186 185 174 1 0 177 188 187 176 1 0 178 189 188 177 1 0 179 190 189 178 1 0 180 191 190 179 1 0 181 192 191 180 1 0 182 193 192 181 1 0 183 194 193 182 1 0 184 195 194 183 1 0 185 196 195 184 1 0 186 197 196 185 1 0 188 199 198 187 1 0 189 200 199 188 1 0 190 201 200 189 1 0 191 202 201 190 1 0 192 203 202 191 1 0 193 204 203 192 1 0 194 205 204 193 1 0 195 206 205 194 1 0 196 207 206 195 1 0 197 208 207 196 1 0 199 210 209 198 1 0 200 211 210 199 1 0 201 212 211 200 1 0 202 213 212 201 1 0 203 214 213 202 1 0 204 215 214 203 1 0 205 216 215 204 1 0 206 217 216 205 1 0 207 218 217 206 1 0 208 219 218 207 1 0 210 221 220 209 1 0 211 222 221 210 1 0 212 223 222 211 1 0 213 224 223 212 1 0 214 225 224 213 1 0 215 226 225 214 1 0 216 227 226 215 1 0 217 228 227 216 1 0 218 229 228 217 1 0 219 230 229 218 1 0 221 232 231 220 1 0 222 233 232 221 1 0 223 234 233 222 1 0 224 235 234 223 1 0 225 236 235 224 1 0 226 237 236 225 1 0 227 238 237 226 1 0 228 239 238 227 1 0 229 240 239 228 1 0 230 241 240 229 1 0 232 243 242 231 1 0 233 244 243 232 1 0 234 245 244 233 1 0 235 246 245 234 1 0 236 247 246 235 1 0 237 248 247 236 1 0 238 249 248 237 1 0 239 250 249 238 1 0 240 251 250 239 1 0 241 252 251 240 1 0 243 254 253 242 1 0 244 255 254 243 1 0 245 256 255 244 1 0 246 257 256 245 1 0 247 258 257 246 1 0 248 259 258 247 1 0 249 260 259 248 1 0 250 261 260 249 1 0 251 262 261 250 1 0 252 263 262 251 1 0 254 265 264 253 1 0 255 266 265 254 1 0 256 267 266 255 1 0 257 268 267 256 1 0 258 269 268 257 1 0 259 270 269 258 1 0 260 271 270 259 1 0 261 272 271 260 1 0 262 273 272 261 1 0 263 274 273 262 1 0 265 276 275 264 1 0 266 277 276 265 1 0 267 278 277 266 1 0 268 279 278 267 1 0 269 280 279 268 1 0 270 281 280 269 1 0 271 282 281 270 1 0 272 283 282 271 1 0 273 284 283 272 1 0 274 285 284 273 1 0 287 298 297 286 1 0 288 299 298 287 1 0 289 300 299 288 1 0 290 301 300 289 1 0 291 302 301 290 1 0 292 303 302 291 1 0 293 304 303 292 1 0 294 305 304 293 1 0 295 306 305 294 1 0 296 307 306 295 1 0 298 309 308 297 1 0 299 310 309 298 1 0 300 311 310 299 1 0 301 312 311 300 1 0 302 313 312 301 1 0 303 314 313 302 1 0 304 315 314 303 1 0 305 316 315 304 1 0 306 317 316 305 1 0 307 318 317 306 1 0 309 320 319 308 1 0 310 321 320 309 1 0 311 322 321 310 1 0 312 323 322 311 1 0 313 324 323 312 1 0 314 325 324 313 1 0 315 326 325 314 1 0 316 327 326 315 1 0 317 328 327 316 1 0 318 329 328 317 1 0 165 319 320 166 1 0 321 167 166 320 1 0 322 168 167 321 1 0 323 169 168 322 1 0 324 170 169 323 1 0 325 171 170 324 1 0 326 172 171 325 1 0 327 173 172 326 1 0 328 174 173 327 1 0 329 175 174 328 1 0 criticalmass-1.0.0.orig/data/models/Boss1_Leg2.model0000644000175000017500000004025210355351306021461 0ustar danieldanielName Boss1_Leg2 Scale 1.0 1.0 1.0 Offset 16.2000007629 1.80000007153 0.0 Colors 1 0.0 0.306997478008 1.0 Vertices 160 -1.08836379228 1.24731703066 8.32223939896 -3.26513082448 1.46050380275 3.62132012844 -3.48805228177 -0.846564079658 7.68874669075 -2.4467014762 -2.13490276413 7.83937740326 -1.31132517754 -3.34119808545 7.68874597549 -0.125555160147 -4.41909365052 7.24264025688 1.06503943098 -5.32716569239 6.51820421219 2.2147055768 -6.03051790005 5.54327738285 3.27926206567 -6.5021209197 4.35532522202 2.63988399339 -4.91548516127 3.00000071526 3.41633236589 -4.87882123895 1.52938717604 3.01167351726 -5.23191178838 1.17054247856 1.84611699643 -5.60809728633 2.29610109329 2.12689101257 -7.50763786232 3.33342146873 0.748015598966 -7.31029854472 4.24264061451 -0.659605693077 -6.83202811286 4.98881757259 -2.04187791063 -6.09120697544 5.54327666759 -3.34568227512 -5.11630435041 5.88471114635 -4.52091424714 -3.94478547046 5.99999892712 -5.52240991829 -2.62167081487 5.88471150398 -4.22329233446 0.624447022725 2.77163797617 -4.86351506228 0.0658120256446 1.49999928474 -6.88172408393 -3.80775900557 3.18478274345 -5.90685820913 -5.15410997207 3.2471755743 -4.70499617129 -6.30239230597 3.18478274345 -3.32232340063 -7.2084774742 2.99999964237 -1.81197651104 -7.83754532494 2.6999284029 -0.231995144805 -8.1654201691 2.29610037804 1.35690162624 -8.17950251174 1.80403482914 1.31573892491 -6.07088584343 1.24264106154 2.74128901325 -5.467839443 0.633493244648 2.64634281114 -5.55068603533 5.40387745218e-07 1.12949511074 -6.23339540153 4.65550968443e-07 1.0865173917 -8.41542993123 3.40198738513e-07 -0.57612862809 -8.46569896732 5.40693463336e-08 -2.21663509087 -8.19063611445 -2.56737948234e-07 -3.77195610722 -7.60081104608 4.49318608986e-08 -5.18232367029 -6.7188913434 -3.67792249989e-08 -6.39353682894 -5.57876833646 -5.30165095824e-07 -7.35905158293 -4.22425804299 -5.03765051008e-07 -5.08833129802 -0.130354895027 -7.30786609893e-07 -4.86351482716 0.0658117561771 -1.50000053644 -6.88172373124 -3.80775940977 -3.18478345871 -5.90685734784 -5.15410987126 -3.24717664719 -4.7049958186 -6.30239271017 -3.18478238583 -3.3223231655 -7.20847774367 -2.99999946356 -1.81197573698 -7.83754512416 -2.69992858171 -0.231994370742 -8.16541996832 -2.29610019922 1.35690189571 -8.17950227661 -1.80403411388 1.31573919438 -6.07088560831 -1.24264007807 2.74128928271 -5.46783920787 -0.633492082357 3.01167371936 -5.23191161203 -1.17054113746 1.84611740063 -5.60809693364 -2.29609966278 2.12689202176 -7.507637931 -3.33342039585 0.748016642496 -7.31029810881 -4.24263954163 -0.659603909824 -6.83202798075 -4.98881685734 -2.04187666631 -6.09120731359 -5.54327595234 -3.34568114836 -5.11630455382 -5.8847104311 -4.52091203469 -3.94478474234 -5.99999928474 -5.522409061 -2.62167125341 -5.88471221924 -4.22329182986 0.624446988385 -2.77163904905 -3.26513031989 1.46050376841 -3.62132012844 -3.48805091989 -0.846564552539 -7.68874669075 -2.44669908114 -2.13490224528 -7.83937597275 -1.31132354619 -3.3411983232 -7.68874454498 -0.125553781095 -4.4190938711 -7.24263882637 1.06504121423 -5.32716556028 -6.51820349693 2.21470672072 -6.03051785117 -5.54327559471 3.27926294012 -6.50212110595 -4.3553237915 2.63988433023 -4.91548486736 -2.99999892712 3.41633260168 -4.87882103321 -1.52938592434 3.89366025429 -4.46232233638 -1.65539520979 3.57619625145 -4.09849324142 -3.24717521667 4.63857669721 -5.3160325598 -4.71416831017 3.94478549166 -4.52091422864 -5.99999821186 3.09939852327 -3.55205911081 -7.05525183678 2.13490297538 -2.4467017665 -7.83937597275 1.08836456518 -1.24731801745 -8.32223725319 1.58258169817e-06 -4.18568837121e-07 -8.48527908325 -1.08836223416 1.24731625437 -8.32223939896 -2.13490180379 2.446699941 -3.91968905926 -1.00467331205 3.43289609234 -3.62132012844 1.31132638752 3.34119724271 -7.68874669075 2.44670214724 2.13490145114 -7.83937525749 3.48805241388 0.846562296406 -7.68874454498 4.3953594605 -0.474309424042 -7.24263882637 5.13375577925 -1.77695318227 -6.51820135117 5.67486405442 -3.01131078777 -5.54327523708 5.99789076682 -4.12994469022 -4.35532307625 4.51250807418 -3.2815017014 -2.99999856949 4.37098790151 -4.04582364425 -1.52938556671 4.77564668279 -3.6927331536 -1.17054086924 5.30627486905 -2.58888975268 -2.29609930515 7.15026141571 -3.12442810029 -3.3334196806 7.14155362805 -1.73153049579 -4.24263846874 6.85840022963 -0.272091349616 -4.9888150692 6.31168207625 1.19780378332 -5.54327523708 5.52240951146 2.62166856136 -5.88470971584 4.52091437925 3.94478368721 -5.99999713898 3.34568375456 5.11630374279 -5.88471186161 -0.0465120715472 4.26895263723 -2.77163869143 0.593710925749 4.82758786944 -1.50000035763 4.70499818967 6.30239216861 -3.18478310108 5.90685807177 5.15410795369 -3.24717450142 6.8817228687 3.80775604668 -3.18478167057 7.59212702731 2.31507381182 -2.99999839067 8.01076996973 0.733424921959 -2.69992643595 8.12156410235 -0.876409106535 -2.29609876871 7.92025080204 -2.45256345087 -1.80403339863 5.83665280583 -2.12610131315 -1.24263963103 5.0460309847 -3.45680567533 -0.63349172473 5.14097732153 -3.37395896543 8.27180883789e-07 6.02289675474 -1.96359163749 6.92249372491e-07 8.19063503658 -2.21663603138 6.44945131967e-07 8.46569758564 -0.576130308323 9.65282424659e-07 8.41542801062 1.08651524121 1.30382574071e-06 8.04175919497 2.70740691344 5.58755175462e-07 7.35904982877 4.22425461385 4.0011416047e-07 6.39353669158 5.57876631808 9.73947322791e-07 5.18232568867 6.71889120604 2.53807364459e-07 0.818527161482 5.02375479011 -6.13164687024e-07 0.593710690621 4.82758813891 1.49999892712 4.70499783698 6.30239257281 3.18478310108 5.90685721048 5.15410785288 3.24717628956 6.88172197707 3.80775598062 3.1847820282 7.59212625325 2.31507361103 2.99999928474 8.01076865673 0.733424250916 2.69992858171 8.12156305882 -0.87640954245 2.29610055685 7.92025053257 -2.45256368599 1.80403465033 5.83665253637 -2.12610154828 1.24264097214 5.04603071523 -3.45680591045 0.633493334055 4.77564634595 -3.69273344751 1.17054221034 5.30627446485 -2.58889010538 2.29610037804 7.15026013705 -3.12442826674 3.33342075348 7.14155231505 -1.73153116683 4.24263954163 6.85839763798 -0.272092187106 4.98881578445 6.311680293 1.19780365121 5.54327487946 5.52240784577 2.62166829452 5.88470935822 4.5209121668 3.94478295908 5.99999821186 3.34568289727 5.11630418133 5.88471186161 -0.0465125761422 4.26895267157 2.77163726091 -1.00467401875 3.43289595033 3.62131869793 1.31132502563 3.34119771559 7.68874669075 2.44669948272 2.13490069715 7.83937454224 3.48805051306 0.846562299032 7.68874239922 4.39535781198 -0.474309438586 7.2426366806 5.13375318759 -1.77695401976 6.51820135117 5.67486264102 -3.01131107178 5.54327487946 5.99788962289 -4.1299447391 4.3553237915 4.51250773735 -3.28150199531 2.99999946356 4.37098749731 -4.04582399694 1.52938681841 3.8936599546 -4.46232259788 1.65539610386 3.57619603792 -4.09849342773 3.24717593193 4.63857617591 -5.31603301466 4.71416795254 3.94478437387 -4.52091425472 5.99999713898 3.09939674901 -3.5520597097 7.05524897575 2.13490176853 -2.44670092103 7.83937311172 1.08836316734 -1.24731733864 8.32223439217 -7.2749945547e-07 -7.33842591683e-07 8.48527765274 -2.13490246762 2.44670031103 3.91968691349 Normals 160 -2.30219816609 2.63843045566 4.87203598022 -4.29783815019 3.73823782209 1.88476216793 -3.70702470267 1.41263006768 4.50123596191 -1.73002558175 -1.50955721158 5.54313790798 -0.937105224963 -2.35283228867 5.43913078308 -0.108474938395 -3.10808190784 5.13095498085 0.724811682309 -3.7472369875 4.62941372395 1.53185107773 -4.24574269753 3.9528182745 3.92193459575 -4.5401240533 0.0721457563341 4.29319627633 -3.78165738594 -1.80730605125 3.27283774355 -4.76433211297 1.60899692774 2.84705749284 -5.13585242733 1.23142182827 4.77140574182 -3.36438925135 -1.38322091103 3.9028945186 -4.55673773004 0.0551164280623 0.485888566046 -5.15841142868 3.02536082268 -0.500099888687 -4.81605013977 3.54319882393 -1.46611515472 -4.29270923411 3.92699968815 -2.3762865781 -3.60860943631 4.16302978992 -3.19666338328 -2.78929185448 4.24250006676 -4.8979953592 0.373432519209 3.44505143166 -4.79660539276 3.30303172117 1.44254887104 -5.12980681446 3.01229231573 0.780602395535 -5.69381536174 -0.320970983614 1.86443674564 -4.17667547439 -3.6444146545 2.29602956772 -3.33781050361 -4.44760013747 2.25299853086 -2.37327832236 -5.08426672102 2.12518697977 -1.31854734717 -5.53019753521 1.91753894091 -0.212937416071 -5.76818148761 1.63719588518 3.89006316226 -4.56793390349 0.0298471022397 5.09094785563 -3.08556845969 -0.74855799973 2.5625600324 -5.38409453289 0.666341140866 2.46266869737 -5.47125606782 0.0 5.20311882492 -2.98769216387 0.0 3.88564807191 -4.57178635027 0.0 -0.458388900146 -5.98235349859 0.0 -1.60594225697 -5.78096784938 0.0 -2.69171669727 -5.36212443038 0.0 -3.67556484829 -4.74231225741 0.0 -4.5209145546 -3.9447851181 0.0 -5.97320789501 -0.564758715951 0.0 -5.24680664146 2.91020253483 0.0 -5.12980681446 3.01229231573 -0.780602395535 -5.69381536174 -0.320970983614 -1.86443674564 -4.17667547439 -3.6444146545 -2.29602956772 -3.33781050361 -4.44760013747 -2.25299853086 -2.37327832236 -5.08426672102 -2.12518697977 -1.31854734717 -5.53019753521 -1.91753894091 -0.212937416071 -5.76818148761 -1.63719588518 3.89006316226 -4.56793390349 -0.0298471022397 5.09094785563 -3.08556845969 0.74855799973 2.5625600324 -5.38409453289 -0.666341140866 2.84705749284 -5.13585242733 -1.23142182827 4.77140574182 -3.36438925135 1.38322091103 3.9028945186 -4.55673773004 -0.0551164280623 0.485888566046 -5.15841142868 -3.02536082268 -0.500099888687 -4.81605013977 -3.54319882393 -1.46611515472 -4.29270923411 -3.92699968815 -2.3762865781 -3.60860943631 -4.16302978992 -3.19666338328 -2.78929185448 -4.24250006676 -4.8979953592 0.373432519209 -3.44505143166 -4.79660539276 3.30303172117 -1.44254887104 -4.29783815019 3.73823782209 -1.88476216793 -3.70702470267 1.41263006768 -4.50123596191 -1.73002558175 -1.50955721158 -5.54313790798 -0.937105224963 -2.35283228867 -5.43913078308 -0.108474938395 -3.10808190784 -5.13095498085 0.724811682309 -3.7472369875 -4.62941372395 1.53185107773 -4.24574269753 -3.9528182745 3.92193459575 -4.5401240533 -0.0721457563341 4.29319627633 -3.78165738594 1.80730605125 3.27283774355 -4.76433211297 -1.60899692774 3.77491630389 -4.32623667695 -1.74156922102 3.72916848367 -4.27380746216 1.95617544651 3.94442396224 -4.52050065251 -0.078005310148 2.76545486207 -3.16934503698 -4.27857291698 2.1696499668 -2.48652380792 -5.01083421707 1.49282318629 -1.71084757934 -5.55357527733 0.760497083315 -0.871566442722 -5.88738656044 -0.0 0.0 -6.0 -2.30219816609 2.63843045566 -4.87203598022 -3.70966536163 4.25145594094 -2.04004025459 -3.12149257308 4.76467405978 -1.88476216793 -0.897371629504 3.86423084363 -4.50123596191 1.73002558175 1.50955721158 -5.54313790798 2.45809939159 0.609699403222 -5.43913078308 3.09412131097 -0.313613250841 -5.13095498085 3.61448825129 -1.22581062834 -4.62941372395 3.99905864641 -2.09294737643 -3.9528182745 3.96691332873 -4.50087725172 -0.0721457563341 3.16514069102 -4.76595753839 1.80730605125 4.27699486423 -3.88814124094 -1.60899692774 4.70277511494 -3.51662092658 -1.23142182827 2.68693122553 -5.18322567298 1.38322091103 3.98595340588 -4.48426357498 -0.0551164280623 5.04502115809 -1.18027864528 -3.02536082268 4.83939982229 -0.156997476067 -3.54319882393 4.45176152729 0.871014075429 -3.92699968815 3.89728074473 1.86547655086 -4.16302978992 3.19666338328 2.78929185448 -4.24250006676 0.29359902703 4.90342839211 -3.44505143166 -2.6227253305 5.19988016071 -1.44254887104 -2.28952390881 5.49061956614 -0.780602395535 1.08941902956 5.59783189493 -1.86443674564 4.17667547439 3.6444146545 -2.29602956772 4.85880467025 2.70446725203 -2.25299853086 5.35892469494 1.66257156235 -2.12518697977 5.65784728077 0.557149919375 -1.91753894091 5.74384714021 -0.570508586346 -1.63719588518 3.99878476222 -4.47306740152 -0.0298471022397 2.36738911172 -5.46204646464 0.74855799973 4.98727257538 -3.26837882102 -0.666341140866 5.08716391041 -3.18121728608 0.0 2.25521814243 -5.55992276046 0.0 4.00319985257 -4.46921495474 0.0 5.98929862429 -0.356336575373 0.0 5.94524219057 0.807920233545 0.0 5.67736306984 1.94042927171 0.0 5.19655901492 2.99917937197 0.0 4.5209145546 3.9447851181 0.0 1.36881156283 5.84161962727 0.0 -2.17252408181 5.59270934705 0.0 -2.28952390881 5.49061956614 0.780602395535 1.08941902956 5.59783189493 1.86443674564 4.17667547439 3.6444146545 2.29602956772 4.85880467025 2.70446725203 2.25299853086 5.35892469494 1.66257156235 2.12518697977 5.65784728077 0.557149919375 1.91753894091 5.74384714021 -0.570508586346 1.63719588518 3.99878476222 -4.47306740152 0.0298471022397 2.36738911172 -5.46204646464 -0.74855799973 4.98727257538 -3.26837882102 0.666341140866 4.70277511494 -3.51662092658 1.23142182827 2.68693122553 -5.18322567298 -1.38322091103 3.98595340588 -4.48426357498 0.0551164280623 5.04502115809 -1.18027864528 3.02536082268 4.83939982229 -0.156997476067 3.54319882393 4.45176152729 0.871014075429 3.92699968815 3.89728074473 1.86547655086 4.16302978992 3.19666338328 2.78929185448 4.24250006676 0.29359902703 4.90342839211 3.44505143166 -2.6227253305 5.19988016071 1.44254887104 -3.12149257308 4.76467405978 1.88476216793 -0.897371629504 3.86423084363 4.50123596191 1.73002558175 1.50955721158 5.54313790798 2.45809939159 0.609699403222 5.43913078308 3.09412131097 -0.313613250841 5.13095498085 3.61448825129 -1.22581062834 4.62941372395 3.99905864641 -2.09294737643 3.9528182745 3.96691332873 -4.50087725172 0.0721457563341 3.16514069102 -4.76595753839 -1.80730605125 4.27699486423 -3.88814124094 1.60899692774 3.77491630389 -4.32623667695 1.74156922102 3.72916848367 -4.27380746216 -1.95617544651 3.94442396224 -4.52050065251 0.078005310148 2.76545486207 -3.16934503698 4.27857291698 2.1696499668 -2.48652380792 5.01083421707 1.49282318629 -1.71084757934 5.55357527733 0.760497083315 -0.871566442722 5.88738656044 0.0 0.0 6.0 -3.70966536163 4.25145594094 2.04004025459 Faces 144 2 0 159 1 1 0 0 2 3 158 1 0 158 3 4 157 1 0 157 4 5 156 1 0 156 5 6 155 1 0 155 6 7 154 1 0 154 7 8 153 1 0 153 8 9 152 1 0 152 9 10 151 1 0 10 9 12 11 1 0 9 8 13 12 1 0 8 7 14 13 1 0 7 6 15 14 1 0 6 5 16 15 1 0 5 4 17 16 1 0 4 3 18 17 1 0 3 2 19 18 1 0 2 1 20 19 1 0 20 21 22 19 1 0 19 22 23 18 1 0 18 23 24 17 1 0 17 24 25 16 1 0 16 25 26 15 1 0 15 26 27 14 1 0 14 27 28 13 1 0 13 28 29 12 1 0 12 29 30 11 1 0 30 29 32 31 1 0 29 28 33 32 1 0 28 27 34 33 1 0 27 26 35 34 1 0 26 25 36 35 1 0 25 24 37 36 1 0 24 23 38 37 1 0 23 22 39 38 1 0 22 21 40 39 1 0 40 41 42 39 1 0 39 42 43 38 1 0 38 43 44 37 1 0 37 44 45 36 1 0 36 45 46 35 1 0 35 46 47 34 1 0 34 47 48 33 1 0 33 48 49 32 1 0 32 49 50 31 1 0 50 49 52 51 1 0 49 48 53 52 1 0 48 47 54 53 1 0 47 46 55 54 1 0 46 45 56 55 1 0 45 44 57 56 1 0 44 43 58 57 1 0 43 42 59 58 1 0 42 41 60 59 1 0 60 61 62 59 1 0 59 62 63 58 1 0 58 63 64 57 1 0 57 64 65 56 1 0 56 65 66 55 1 0 55 66 67 54 1 0 54 67 68 53 1 0 53 68 69 52 1 0 52 69 70 51 1 0 70 69 72 71 1 0 69 68 73 72 1 0 68 67 74 73 1 0 67 66 75 74 1 0 66 65 76 75 1 0 65 64 77 76 1 0 64 63 78 77 1 0 63 62 79 78 1 0 62 61 80 79 1 0 80 81 82 79 1 0 79 82 83 78 1 0 78 83 84 77 1 0 77 84 85 76 1 0 76 85 86 75 1 0 75 86 87 74 1 0 74 87 88 73 1 0 73 88 89 72 1 0 72 89 90 71 1 0 90 89 92 91 1 0 89 88 93 92 1 0 88 87 94 93 1 0 87 86 95 94 1 0 86 85 96 95 1 0 85 84 97 96 1 0 84 83 98 97 1 0 83 82 99 98 1 0 82 81 100 99 1 0 100 101 102 99 1 0 99 102 103 98 1 0 98 103 104 97 1 0 97 104 105 96 1 0 96 105 106 95 1 0 95 106 107 94 1 0 94 107 108 93 1 0 93 108 109 92 1 0 92 109 110 91 1 0 110 109 112 111 1 0 109 108 113 112 1 0 108 107 114 113 1 0 107 106 115 114 1 0 106 105 116 115 1 0 105 104 117 116 1 0 104 103 118 117 1 0 103 102 119 118 1 0 102 101 120 119 1 0 120 121 122 119 1 0 119 122 123 118 1 0 118 123 124 117 1 0 117 124 125 116 1 0 116 125 126 115 1 0 115 126 127 114 1 0 114 127 128 113 1 0 113 128 129 112 1 0 112 129 130 111 1 0 130 129 132 131 1 0 129 128 133 132 1 0 128 127 134 133 1 0 127 126 135 134 1 0 126 125 136 135 1 0 125 124 137 136 1 0 124 123 138 137 1 0 123 122 139 138 1 0 122 121 140 139 1 0 140 141 142 139 1 0 139 142 143 138 1 0 138 143 144 137 1 0 137 144 145 136 1 0 136 145 146 135 1 0 135 146 147 134 1 0 134 147 148 133 1 0 133 148 149 132 1 0 132 149 150 131 1 0 150 149 152 151 1 0 149 148 153 152 1 0 148 147 154 153 1 0 147 146 155 154 1 0 146 145 156 155 1 0 145 144 157 156 1 0 144 143 158 157 1 0 0 158 143 142 1 0 159 0 142 141 1 0 criticalmass-1.0.0.orig/data/sounds/0002755000175000017500000000000010355431301016620 5ustar danieldanielcriticalmass-1.0.0.orig/data/sounds/prriarr.wav0000644000175000017500000020236407630537344021045 0ustar danieldanielRIFFWAVEfmt DXdata !*2;>>=52*'  gF Do\VY`ab\WSTY\``_YWSVX]afiiiiea]\YYWXVTROMMMLLLHEA@ACFHID@721037<<>;:51)'  {~~h\RSX`hsz~~tge]`Z^Z]]cejjkjhbb^^^Z\UPFD<<<6," 8[q{hR8 (?\iqi[G4# 5NdrrodP5!3ADG?8&{]I?Oo M}^R=%g#?D^]yοʮ !؞O "5N@>0x4Ӻ&?ʐƄF+462)E 8 C~FD<? <4Y?p>2=rjߤзxef$-0,#A ۥRv^{qԟҊ< 5Q+ن  $,12 0,)?Y6^  09;3f#n )_fѡMKxt"՘;;$/32. '96Fԇx|˰ХԟՀ)ʽA3!r|Jѹ؞nvٙI|4zȍ̎MMV 30  /5țʞ,T6O"*v( J̾w~И3Э]:|ϿϐϠH$OΑΠH MΝQϐ iЪнv]d)ͮ;̄W$ܔ%NJP%ҳ[r@T+eГѳ7ϒΈ͂А`ҿj˥s-*;}h 1Q!ċӴ׭`ˣʹpКk)h̔ɳ@*@۩pވ%ncʼfˆq/Ԋby_v%vhԠѹΒέ[МIЇσXzEΌΔkͲCΐΏ[= 5bl~]7 8΢/ϵ; ΕqϽ(Lʩ+Зسumqˉp$(=NyμNjyS6 Λ ΍lh:α$(ҫ҈Ωȉͯ3dUx͜͸ͬrU74BKjr͓ͮ5D-Cx?@ͬȦ[Dj >,]| ̯Ḱ̬·b2h̓zz^aG>&Nͳ"΢μ΋^4J̗ˮ̻E,'50%˥8͖w̫ʅ̾ AerП^Џc̸VH!e7ڛұS+hϡ91g' IIǾnӶoɁ͗ϳϦ̞qm̌Y5΂vP_̎%z͙͖9ͦ ̮[ξϫРН̆̆͒Yb)D?bM 4$ .F˨ǖʏ΀53߅*&mEԺ`j*ȶ)kX#& NCp@駻hFݩ_ LӅ7t9DO3qѴͩ ȱs܏ߘ? 5AW[=­t75?C+c%uͺ3H@5XIuvO~HMo̲|YPĭCۻv: uүɶ:2v8a^߲&y^q(]1U82]yPs^prs&Ib5~QQXe毪#YNHxv߅ն˽Tn!i`/ӰF6";[`]~Bhۯwv9D򰵰y9ïȯ߰öo<Ȫ`MWү,hUTҜќNսLH6vꯌ$]ϰıra@{D'5#4ܮE$-֯qV[\dM⪡䭫ܽoǒdׇև䫈RDžrE&˫کo #tΆbކ ֪ṳ~ߨ=\۰' Kcԝi B4- L͞ՠF03{A{6Эʷjѱ'ԥB} ,w ɝNKШkȟ?M[G]횜D]Ğ͠b ৅ V3YȜH)˜~1P*KT@ɝu:7e=N' V~mӜQp2=b̝L0iƩ_OߛPۜ&@~ ƛ ?ԜϝӞ ǠşߛJPJ Rvq aU=͚֚RÜ2ȞLtfßKC:su˱\^K̜9|ՠ˦ì!^ݶ ̟͞ ip}ÛݜKA{~KǙ웿4͜@ı #3+1]񨤧飣:♷rcuͶQ`% q6כ]cݞsܤCР֛; ֘ۘ$# ˘T6ꞎß֟sÕ8t̪4{'n̝mܔ͓zŞ%Ө;C]%P͚9Ԣf֠%`Ϫ~СlR֘]㳤od)* ʣ2ˠiG y^Ԣ8b4򔯐.roBu_mTS/m CWgЙ@ 􎯎XMҤEwͤʚ'8n2qY9p>h®굷4ə%^ݩ%Ш)ĖHĕHڐr,(ɴιzI.ZD tK/m~dј"Ә}y[ /۞kXk^0=YpWtSZK9ޔtmg\铮R]𣊰ܼųiJMPO2aC0ܴٶyAKdSъʐ$̗НNRq2͑At;ܨV ˲讉ѠA㒫>lLד8֘O|-긿i^ކrҖƢgft@KʉNڐlӜ ZJ@=ᛓwkܴ|_z}Jb~IsʢFܽf?٥܌EiȅX8喟õ9f6ˇߓض(͠ɏA#Ӕ4OjCOИDݖ"DҀj˙yX<72{I=dݜrzП4WnÁnZykO¿RdjQɬ5t'/ɡPNO$.듡ҷ4*>KǒĞ~A}ޠ/IXaKƞϝژE6檪m]ȶ͞cong/zۿ~o:OʪRKHNO[玸ژڴÐŋɹEl*¹/Y۹Sгɫ/ѥ**?೯(BlG+S8. 󣈭'A+MDI>;?Ιۗt/עĨ61ޔъd4jˊ$~ڥonȤ䤰桐-PnVۣS뷒jѱ{k +Q^ćEƼW뺺ݷȸúz lHT׎ڛt_LyԶZ)K ٕə v&¦G˟Ŗ0~7ݪ&pbv`C гV1lӢ E/˂Ib˳VŴV4-Kλ{[e3ެE0ۦk)04YG϶ѳѐ^^֨٨}c(!Z x!ڬ(ʌϤҵғ~!3̡Ej~Ȋΐљ;ΓuKŅ^мxK{-KyaF)lwAЮ H N`V*g ΅ӅҰd9dHLq\{ǽHj ³>83/B[ˀͦơnYS 9Aǧg,ŷ3̈;ǡ;a>ϻi(ƿ|dz(ҡ@URʿɯmOJڡԢY沐>0ʪσӴFҪ 2wMYµȺGŵǩ|1UͶG=ĸ[_gϱճ}չjƧpü?|&djGĊġS-C ȣyɫĨɹz1ň>ϯ}MƬ0dm@7‹џӨnω/H}չҵ_9BGQ:ϛMŊgvNc-2c͖ṉȰǡ>ǞbeÕYֹ& 6ɸ˗˳ Oaâ#f\Tṳ̑Ѷָ(ܗo˾ŅºÊgQ˳ O)J^Qn YIlG?ПΞ˚ ƉѾ1ʼs*gA˦ϾuqԭҕMˈ>9U{?Ĺ w=F}ґgѵКkt  L|>ǜ2ҋԨM+U?M:tƶȳ˙ ҧJث؂φ|PJܒې%ӝ%~Ǝt!Q̿'x:Ѹ\> /2ve}<ثDWҊΊP"iJxދ $ڲ=ȐŮ8ĆŞ\r RVՂPђοʞzİųǴʑAהp<~*XӜЭ43H3G#,W.C19]ֻ z\$B9ƻƴ̵302#=B ٛQ|Թ:dzOZ̰ςұ؉ڵV|hV ָPnԋӃ"q5L.;, gJzjYe+=!3(w_܃הӲ6ϮUϐA6=p[O/umljrBf8z&ځ؃סKq0C{O3~.6E޺ڻuէ/Ԡ/^3^Bn2QijEb|//;$YݖHپٷ߃MI.Q,C!׽ ؤאc4ާ Y ArvGAc#W7߾Uی&uGߞI } #:||-z- 9cG4{]ou ry޻h.۴7iF޽VFޓ.+Jn1 =N[gJslce]sqݖ-(": %W xF1,Hk3~8^#OO$]{fEG@b )fa!x ~[Ib[ s _3/D5]p   9A  Z \~1;xu [[{s'u1X&l"2 } u5  EX3  h  }n$4(2*}) &N  G  p$m&4&#BbuRXK -9zU#&))q($]7  |lo!iCa $ L E"&5)*($ Z"$%# -"s#%ZJ_!N$%&%# _aafJKD!5"""*"(!IlF !!e""3"U '8 $'R*&+*v'$ X1"%B'?)*+ +})^'b%$|#"g"m! j w!#&),.//H/.+($ 65: "%F()*{**})('&%5%z%Y&F'{'&%$$"!  U"$'2*+,,$,y*'#E c.H E#V&)j-02"3Y20T/-G,r*W(L&$#"g"A"i"q#O%'* -B/%134%6V652/,3)%!&z]L $(u-1g5m77d6b4T20/.-,,+++*)4(L'''()U+6--/0)1/0.[+(&%$$%F'*a-0K3<567V87X63 1.=-,,,,A-..r/9/d.?-,,-/q0133/431m/,*a)(-) *+4.158;v;}:8\63<1.\,++,-/u1246!7777q77777e76f6585310... / 13r6h9*<>??o>;863L21g0M0&124S67Y8899876555D6666(65t543 323f57:<>?Y@?D>;740-+ +H+,0/2C6z9;<=R>>?@@??a?>=;9520Y/>/S0206:]?CGJ;K KhIPFA<61.+|**,.159=?ACCCMCBl@>=<>@BDCB?r<8t5200X136':<=?sABCDEEEKEwDoCWBbA@@?f?>%>=};t:9'::;<=~===\>>]??`@AABC,EYFFFdECA?>==>?mAiCQEG>HHWH!GmEXCA@?@bA CDEFEDCB-BAqAAAqBSC|DEFGIH~HH'GE+DB>AR@???@EAAAAYA3AABUD_FiH{JLMFNN NLJGvD@=:99:L=?B"E)GHPIIWIIHNIIJJKoKKJH{F+DA?>>?ADG{JMNOONLJHECBkBBIDEF7GKG:GGNGG?HH>IIIIzIIH#HGGGGGSRPNLJHFEEFHKM/OqONMKIkGEDhEFHrJKMhOQTVWVUQROM/KXJyJKcMN*OmNLKIHWH$HwH1IJLpNOYOTNL KIfHGGKGJHJDL0NOwPQeQmQPOPNSM(MM OPPEQQRGRRQON6MMMNOPQSJS_RPLIGEwE FFeHJLM!OOtOONNM?MLLMORST UOTkSURQIO=MhK8JJ|JkK7LMMNOPOONNLOEPPiQdQQQ?RCRtQPXNMLLfM]NOPRT6U_UTSlR7QOUNLKOKLM#OPcQ!RRSSSbSRnRR_SS TSRR;QpPOO0NMLL*MM~NbOpPRSOUUMUTR:Q.PbONuNNO@QRSTS~SRQlPNL*KJK.L'M NN)OOPQnRRlR,RQQQR=STWXLYvXVTQOMLLeL}MEO`QS~T\UVVAWXXXpXWW4WV VTScQONMLdLLZNPSSUWYZ[[A[YVSPNMtMPNORTVX)YXWVUSUTTTrUiV]WXW&WUSQOMKIKKLNPQRRPRQQVQ0Q;QQR5T3V XYA[\k]t]{\ ZVPSPN>NNqOPRST:U U-T-S9RQRRTUW0Zx\]j^w][XURAPgNMLwMNP RUS8T-UV WX%Y^Z~[\)].]c\8[YaXVTRfndac^9[X3W)WTXZb]`cfh igecv`^]6^D_aDcRe!gh^hgEfFda^_ ][Zm[\\o]:^m^X^]}]\6\[+[[]_beh1i!ih.fca_ _<_Y`bcBeRf/g^gf~e&cV`N]ZDYXY[^Jbeghge-c(`1]mZXWXs[4_?cofihhgJeb_\ZYZZ[t^acbefffd+b`{^^^`ab,cba9`]IZVSQQSW~[I`9eilnnWnli"fbz_]!\I\]N`bdeoedb_2].[YYZ]B`wceffdRb^[kXoV&VWZM^tbeMhii_hfc`^^P^_MaxcejgphZhf d`][Z[W]_LbdQff fc`]YWVVfX[_dpim=pq1pmidH_ZV&UTUbWXPZu[u\]]]>^ _`gcwfikjm_m6li}fb^[|YYZL\"_Hb{e0hjjvig-d1a^\\Q\,]_aceffed ca` `j`aceghZh9gDech`^[ZZ\^a\evh+klmlkhnebk`^]K]Y]]^E`abbbxb7ba6bbhcdefgSfZda^\\^Z YXY[^@behj6kjif cC_[XWWY[^adfEgfdb`%``bd fhhiWjWjpigue8c1a__9_0`btdfhGi!igfecaJ`+_^^_babcddadc[ba `_`bceg@iEjjjMhfPc` _]]\^`Cb elghhgd@bu`l_m_`saPcfeghi igecna_][=[\]*`Vb/d#ee edba___`b_d"fxg:hfhgecja_I_3`adfhCjjdjh1fb"`^6]]_beil1oPp3pnlli;fc`^*]]`beSg!hg@fTdb_][%[[']|_7bdhgcijkmkj4igffffff5fXe7db`^_y^R^._`>cevhj lLl'kh^ea^(\[[6\H^`dfi$jOjiphg^eca5` ___Bacdfgbh[hgfeddewfDgggg4gtfec:b`ababc$efihijjajigedccccd[dddeddkdVdddddeeefff+fd!cpa_^]]]^w`beqgi#k/lfjeTdba``SaQb#cc}cc}baKa``a&cBe[gQi\jjzji9hLfMd@b` ```acdxfHhijMkjj@iXhg=gg-gwgggLgeZdbNa``aa-cd9fghBihZhYgofneddcccccwc'c"cLccccccbd&e.fVg"hhhhhfnecVb/a``7aabcdneeOfdffagbhijkkkiYhxfFd@bG`^^]_^F_``b{d~fbhiiihaged5c"b=a```%aaEb cSdeufgffeedcHbaaab^cSdeef{ghTijMj]j;jimihg'fdjc9bOa`m``oabchddddddef`fAfecdb`U_^^_[abdefmg5hhhhggg hh iiYh=geca.`^r^^_1abd5fsg hgf7ecb+bRbb1cicccZdddXdcba:a``axcegijj=jhSgvec:bga aab>def@gYg1gyfedccTd`eAff#ggfffdQcpa `Y__abZewgDijiZheb`2^@]u]^\`be?hFjkkjJigecHb``6abdFfgggf_adfhRjkjTi>gGecbbbdfefggf(e(cTaU```Vbdgk!nppoGm?jfca#_ ^^3`cTfNikl mk{igf8c`F___y`obVd0fghhRhgec`a`Mab eg3jl-mmkif9c`___a+ceg4ihxgd4b_]q\\*]s_cgkwofqqQpm3j~fTc a^``bte+hj=l8m$m/l)jge dcc3efgii7jihb'cMdTe6ffOfedcbaaX`____J`N`Z`A`L`y``alaab1ccccba`_^^]]^_yacdefgg}gf{ecb a_^]}]]a^_`bbdcicHcb+bMa_`~_^^[]\b\%\#\m\]]_ `a%cdtfgVhXhgf2eKc.a._z]\7\\]_`bYdedffff2eGddcmba`__k^]`]\}\N\+\\\\\g]]^_`@aaaAa`5`_^N^&^^_YabMdoef@feedba`4`__i_ _^y^y^a^v^o^^__`$aaaTa`p_][Z XVUUVWY[^3aucdeedca_][dZ@YX$X^\[F[R[[\i]]^]]x]X]]_^j_`aWckdedwca#^ZWyUS4SSGUWZ]`a0ba`^\ZMYMXDXXY[K\S]]J^^]\[&[M[g\^z`bdeedb_x\YWVV XLZ\_accca_][nZ5YXTXX`_s^ ][[Zb[^\]_`anaG`U^[)YVTSSTMWY\Z^Y_,__^\[YVUTlTTU*W@X7YYYYWdVTSRCSBT#VaXZ*]^__^l]\ZY:YX`YZu[\]^v^]\[Z%ZxYNOQTW Y ZYX:VKS PfMKKKM^P9S V$X|YYXWUaTmSSOTUWZ\y]^l][XUQbN]LzKLMPSVXY\YWUROMUKJKUMOQSTUTTSR QdP3PP*RTVXlZ[ZLY!WTRdQP4QORSUW;YYYXVT1RpPAO OgOPQgSTAU4U%TRxPkNLxKMKLMOrRTVVzVUaT SQP(P)PPQRTUvUUUUTSRRoQQ R.STUVhWWWVTSQYPO)P7QRT=V~W&XWVTRP6O&NMNNlPQSSYSR(QOGNMMLK3LL N+OSPQQR RQQiQQQ7QQRSTUV~WWlW_VTcS,R>QPP(QQRRRR%RsQPOOLOkOzOO*PP Q(QQnPOfNDM9LKK~L NPQR#TxU#V:VUJU}T^SdRqQPPPPQRSTUUUTSsRQP POOOOPQsQyQUQQPP"POOOOO(POON3N;M6LWKJJJLMmO QCRSL%LKFJHdFBDBuAXAAECDrFGCI2JaJJIGFErEeEEFG&IiJ8KTKJINHFBE DyCCDNF_HiJKLKKJHzFDBAVAAYC)E6GHKJJJIHGE^EjE9FAG|HIHJJHJgIGFNDB>BBBCEGI*K LLJGI2GCECJBAAWBCREGHIJJJ*JMIHG|G~GGH1H+HGG FDCCBCDETG(IJLLuLRK}IGnDBQ@}?g?U@ACE^GHAI6IfHMGEDvDDGEVFGI-JJ6K KVJUIGFE&EOEFxGH4JJJ$JHOGqECA@@B@ASBCdEFFF2FBEPDCCCDFGHIJJJvIGEC1B%A@=AFBCEFG|H}HHFEDCC^CCDEFG'HGFEDaCBhBBCEFUHIIIHGEPDC;B$BB]C`DnElF,GGGvGFOECBBABBCE}FG6H1HNGF\DBAcAArBCVEF HHHmHGF|EWDCKCC~DEFG}HRHGuFDWCA@??E@ABBCjDDDnDC0CBDBGBeBBCbCC:DDEUE8EEDDDcE%FFGrHH~HGtFD~C*BPA@@ABDFcGGGF]ECA`@> >=>?@NBCEEEEELD}CCBCCrD~EFGZHHHFKECA@#@@@AB6D*EEiEDCBA@@@cABDoFHHHGFDA?c>==>8@AWCvD&E"EtDJCAL@?>>?@7BCDE]F7F_E$DBAA@AABCDEFED,C1AR?=:==>@KCEHdII IGBEB9@><<<=>-@4AAA]A@?>(>=>?MAB[DgEEEDB@><;;<7>\@BDFGGFEB@(?/>=J>)?|@ABNC$CB<<;<=?AxCJDEDfCA@)><;;{<>=@LB DDE+DB@><;::j;<=V?@ABAA?>=$=O=6>?VA6CD5FFE7D B?=;;:p;<>?@AA A?7>?@@@M?c>==!==>?@ BBBB B@(?@=x;,:99:<=?o@XAAA@?>>=t==>>J???[?\>=;T:K98899O;<}>?&@??=W<:9889:_;<=>w??r?>=r>>>>V=<<<<===^>>R>=<;:9=9 9^99:<_=a>?*>=;:98899:f;{>>%>=<;:9U99L99T:;;<<<;:9v87?7W7789;;l0.-k--b/F1{3^5667664h321012h3455u54E31/.-,J-.0274j555430.,+++*-.024565F42u1c0//0135X6665^42\1 0D///024*66n6A5v3g1I/-,p,:-.0 35t6h776{53f1}/O.-1./Z0183V444P31/#. -,A-D./13&55543 200/G.-V./11/3466 6420{.,W+++,G./;15222-2!1/}.~-'-X-.=/012B3220^/a.-_.M/0a2%456C76531/-,r,,-/1i34Z5A5g43\1/.,,,-.S0W1$2o2I210h/.$-,,,x-j._/X00!10/x.1-C,++j,-4/ 1&3456Y531/-y,++,X.01232"2 1/o.-'--j./41y283_321/-.,*X**+-/1333[2=0-+(''Z(*=,.c1335554/321H/-,,o-.02343443u1z/- ,]++,.023s442.1/,/+,***Q,A.01221<0@.,:*((-)*,.12_331o/,2*3(R'')p+b.s14666k5U30+.,*D**,-/1111/.,+*){*+-0123-2k0-g+( '&?&'),[.g012g1/-+)())*-{/1M33a31/),|)'&&('*,/Y2d4t5#53a1.+)' '7'A(&*P,i./0S0'/e-F+\)('^()8,`.<0?1q10/,*(5'''),.0214u431V/,)('4'&()I,.01221/-U+))('J()+./00/-+M)R'%t%%p'j)+-.Y//D.,+X*))*K,-/0111/e-*<(=&%$%'>*-/12241.,$*4('&^'(* -. 00!/e-P+*)]'H&&'(j+-/01-0e.,i)'N%$2%&(*,...-+I)&$##$&|)^, /)1210.,*)))w)G*+p-/0M0/?.o,c*p(&%%I&(4*v,+. /..,*~(&D%$%'(*.,(-l-,+ *(8&+%$%g'^)+-\/n00/.+.)8'%%6&'o)+-/n080A/-+)'&0&&'`)++,O-6-u,+y)'&%$i%&(*,--H-E,*(}&$#$%&(*~,-_..,3+)(8(()*,1./b0*0 /-*r(&%'%%&(O+-'///6.Z,)~'%%S#z""$/&(*<,--G,*F)'&&t&l'()*+,,,+)A(&:&Z&+'(`*\,W./020. -*)'&&7'_()+,-a-,9+)' &$##$%&^()**!* )'&$$$$%&(*,-..-m,@*(%$X$$&&')+T-..;-+e*)=(''#(()*+++)(F'%%a$j$%`&#(*+},,+*(&$C#""#]%''(**/+**(H'%%$F%C&'b)+T, -, ,*J)(3'&7''()}*+,,=,*M)'9&?%$.% &J'(=*1++3+=*(&$"  % !"$&j()*)?)(&i%$$$&k')* ,--_,*(&%$$%&(t*,-[-,+ *-([&$#H##$"&'()(#('%$#]##$%'())N)8(&$3#!"!:!:"#%')++++*b)p'%B$#~#$m%')*c,-,+}*('&!&B&&'()k*#*=)'%d#++'+)'<%" ur!#%8'''&@%k#! >!#$f&G''b'&Y%#w"!I!!#$P&'(\)7)(='%$###$%F'~()))(&%5#! X t!"F$%N&j&%$ #!a hXg !#%&z'H'|&'%#!t {h= !"v$%&!'&z&%$c$a$$%c&''''P'?&$G#!  T D!"!$%&'&&$]#! $8 "+###S#s"X!< w%j !*#v$x%&\&0&%$#"Y"=""#$r&'(,) )N(&x%#"! ! !""##2$j$~$Z$%$####$$J$^$!$# #W"!V!! !E!X!]!-! |  bn= }! "o"}"Q"!7! 9UUk 1!!H"""K####$$4$2$$##a#""*"!d!#!!!M!e!!!!!!j!4!! e  p74>h K z \ O I \ [ c O B : 1 H e f!!"I"d""""""j"!>! j>U !Z!h!b!#!  !?m7Lz }J>4IG_ !    B .!!"""M#d#O#""!X! ,  8  r>`eB4TM8e !{"#!#""(!O b<=j ! Xze*@G@7  q2E}f& Ov !!!"="!y! ;T ;!j!W! dumm$cEgY "o<)l !"""! e2eg{8YGl cU$@D$ jhXF%EcVYR!!""!!.zd5S v}2bnvxK !L"C"! IC8Nr((iDb{6s"0? '9DgrqpK b(Td6,diVVH0wC kNCl*, l^}9.  qJ~=TmF2SJrQ})id]T"^Y1 ^R3$) VIRvMQM`5w jH \wa7=~E~=AIoNrTy}:sFh  ,9U;\sr]lW?S]H9w8 2zKJ?k #Nn+'?Efp<&mj0fv|v'l+ofF'!)i`p`\eWC|+e#m td-.]:QM ]VG$L,Tlu0Rf['6r[Q|[AxR^37zsxK,,8Keka/yHj*&= A _8l.b8`Z.N|Hg3DV`CpU6oi\8,O=x =%3Q 8"Mp6| ybnCB.m]yO?D f)Iz_h@3+`q.SPN-]vtT%"XGxOg%H%.:0LYG$7&]e$5-W:;jivLDV|R_#`%]<5vg%I\sNd c<Inm]5/fp;mBr _ " i 1kw + O ]]W}A8KXyjQ1gyJ\ Y  7 Vd;|  B Ba M 0 kZcIK=4c#uE }7 |   j J  E    6 t n x a q 'Q" ?  YyG r  $ & i  ,  K F 2 c & c 3   & t.X v <     = n m  ; I   s `  z }>UO w , Z \ @ 4 R V F^  m X z F F } 8     i L : = > i 4 b   ! . e H y  6 } F # 9 } / r  rZ 5  3 1 * H * O U  J J *  O - . F @ 5  G 4    ?  G[.  W } z } V C 6 $ W ; = P N cRgt.>Z p   E 9 ? M <  R L  _  D } b  { 7 rCiiN!,A:5>sC  v " g j  ( G m*1440Iqe4`n[j!c | ~ > . [ {  ? @ 3 #     | : *||k DU8n7o &8Qo0 S { ~ p X 1 l z S  iF^?Iww+kUbx?:6 1 o n 1 Y `gJ k : Ie-M$ S],(Uo7 +]a2 ) q M 7 ! < QWRJ>h bI>\u beOK}gv/RooT*t VJl 5B#B?YAGbbSM% 4  ?'Q6'4ufxv-H^&X}w>e`.W% #jh8WR"faG "](; >.c-`[\ k8EU:} m5.e %[jo2&WK`!- 2#M7k|DP9x;uB[*B/M4?-V9T?,*&P1YcH RV~$9& H$"Fnf ycyt[RHf8WT),Q[~l3Wzo2.U3JF d*S:Q-MA=1oTL6~-Fx9.Os5ZAqV;U=<rN^$N>% z6U>yt%pPOzL#Ql*w<) FG }x K/RUF0 b/8(}tv~VwUAr{4.^!p~$p%pK}# {8rl+RTu+GFnfPGcY,OEIFGZYJ?D'= zL ^\R/gWlFpcAL`1$?gq4l~&OFj}&zbBKv{"2$l15r%m",($,147.kOQXJd K9_r'W.g  l}>Xfln]1vij=;(*F"q<@@L, HYf  s< u5hr?x }[sR|\Sr LbB}*_/>E=&13*e={ln>A` fZ ,L4Z\"#YJlA#%Dn*R]o'fmH" "o0kqG|@_,cg xv1 9MwJ3:gGTEZDnp:pTRc@cS,{c $[X R&26& Lt;k>'l8,fk02: a?hH ]|QX L5dqjS2 vLz_Sjb[#o FnrF>FJ/LME 'lp=OO7gcTI+K(]h9GW!ASw>spRsud7Ss`|+V|V J/kdT#2(S ts Zm)bLT3K yK]K ed"9XP7:YvOy_u W\HBJni_dH!<kK!.ZUA?D%!D/{!#ZAbu/ ?!9FoUn3ns8/pl8s eTh ; 5C]qb|4(ZlAn;P7':2|+mhp(,IN&cSo;J)}SN[|z&{$ihgXb,w1*U" O\([`}Wn1L\8j8"zv9)O jm-f=3u+RIHuwF:b5VED!v q0K5`[5=](@VejF&go'9 VXHAY n,tKHgbB5VwV |H 6`~X$s]VgS}yoy LUF!`:'6]Pz8 'Js,$VQ W]h(`73VykE8`lW,{E+x I|E=00 | XF+&{1uyU7 G^<(-9FJY>c)4E![l&Dmy[JKUvK @1t_-UP!7T4$Q|gH8J9VKUq,,H9 @#:R$ u_.g8X.7x*QZP}eaD<8U 2xID!7n0Bvk.ro8#*Dd1Tu.c- 1tQid4IAM=qw=i\NxfWlZ*"hehiV4OJ Pw^ J#a14 ;/7`k`cLK8Ng-Rb?*xm / fQQ"so;1dxtVyhIO i^K321r2 }%ZmW%aUfv#s`^^`o|S+M8gI"xXTc%>GNDvmIeVfv&m$"TsTp]!  Y"9`cojK/(|!/(zy' jTt-!},pXRWTSB<$y^a sp43a{>i7 %NPh^8dydXznmvuSe*NaBj[,i> 1a7l= 9h)cY)-es`\nLz|~j)#TLw6 Vz]El[t6Y&* MZW2?'cHV Jx`2 A_NW R69R gzB,&6EOI1 i9!H=:A)T2(1TWF?oo(MDEYI)e1#uVO^qMd0,u%@]<;U~Oiigzc,M_Z2F',>JL,ah:.:l]<!B`oq^E%2qwf"kYYYWO=/#fC  Az@WnuuxE2`8qK5hsPRzxZ vr*Wx~xx3: K<'yIU;dKj'u)%yTGV|8q   C_f[27w=-EPdcZ7 xghu'XlUMSk R(%K|rn[SEMXlm[>{jg}gx5oXR,$!! (4@=.Ms,w}w4Qfu!G EfnV)@bK9%%U#F[V^ QD}n=q05qm)eWNQd"Bu6~W|mA lWYazt^<c0 xM1*Gh5SQKBCck zM,1G^kcX@2$ b:zuKvX'  $*9LYacgkIj{zY*#eU0n/#>Pi"Ph5[M,1WpMGTyTvnsqc;+` F4, uSKEOb%;Z{j(w)BC#N2q !-(9MYXTPWTI2bi+/}uLbiNE~4FTZUP2C+5XB}k@Lnf5x}jFgUj <{_^ym9b4 M V~m)Tj|=WB|> ]X\LZLvq5{1:`mecceju 8XuJW&}I:Hw<]kV%}%N&',:Q;HtvkglqztfCw? 0Qrs>%>Uu"Ba~MT1?>, >`9_(AA$dG) n44IN[YcVP6# 6U}^ !&%pQF=9<=KUa_YM9' eT>9(iVOWf1m*2HZ4ETTE &zAX9)6S~Cd5 &\Q kF*&WAUZ; bMN[oN'ndyM1G\{b"iTM`[Z=.BjFc 1d_)&Iw~C N!:IOD2(( E~NffX:$1n,NR> nl<$/=NO?';Yk<',=S`s0On_?|cXR\Y[A mp7IWYfjuvokfl~Ir~V~nS: %.8?=DAHDBDJXfy|lH'Ny4Six}xkI#s]I=8:K]}v^M8/ 1B]x,HUdi`U;$xJvS>FVlBqlq~|vkg^UK?;15) -^#"  +CUir|vhN++IV\L&M* 5[$Q{i7 ,DMC6!oN8:V%vkE8#  %3J`py p<%2Z2FHFIJ\nylK6!Sf6 #[oJ822AFNA7r}np@#:Xx~aNK\ MN@RY'<<5?jp= ?$(A 8UceM5!Y[! 8RmoL}UD;I[y]1,\||X!*EaifH#,\]?'  %1<<:!fodShKanXA*E[`g`^RE7*$kZJOd)1[b( #6R`ptvxi]@- o_X_v(* oF%$4\315( -=bzi[;/:1#?T^f^YK;* /6;6 $IotU#=[xaWKIID<,*1AFNRMW[p}x^2 =bppW<%3fVq *2*3.%~prq{z~}fK22=]5=8!kA*$0Jf^95PfqwogPB8Xyt{}{aL.9Vk{xvaUD>J`W( &Gaf\V`sxQ+ +DXmsyon`[VU]dwnG.2\{vI+ ,AUW]I?&!:]{eQ;9Gf 0LB*nXMWm}| [11dyxx%,-nM>9Us++ 3ANH>*(,/'ieh9V\Y;n\Zp "-/%%5;FB;* 5CPD9! 6WggY3 *9HKC6/FTdhdU=" 4KdsuubM* /Tg{|ueG- "154/4Wl|vlR3-QxvW9 9Mcv{{gV=+##1>R[ed[R>4#%';Vs}P%+\_1-Hi|zwlP?1'+/I^j^R[lb?! #>Urs^B/ ,Hd{= 5rmI;5Fb}jYGFCN^i{}rhTILUm cH34?brgbjgI?8FUq_MBQd woww_QWg '.7.*  !% 3MZihfZF7%5=G@9"%59- Ch_H+  *55' 2@FLC=0%%-=GKME@0-"9Ppi^HC>FQ]nqzniYH:++*=J^nwqd[QOEE>AEJPKKAB<@CLZg|vnaa^cqzlcZafvtntuumnq  /38& $378&#G^qpcK& &7IEF4$I`ggaZI?(;FOE?2($!$;Nhy~zfW?.1DPZYWG6 1I]XF&2FY`XK* !)AZq}s]I7&#4Mco{to\O;-(!&%1.41,$ &=FMI<. #1@Wfx{vhU@1#)/BWcojhXN;*!!8MnpTD;9FTjzvZ? %4KWfkkh^XJKJWft{xj\N;2,4@Wo{cJ7)(*7EXjzqe]\`l{s`KA89DObpp`NE@EN]l{tkjq}tlnv (-( ##  $(-112+$ 0?OY`]VLA;69>DNS[[[QC1  $16:2-" 11#(;Lds~r]QCCHWi|w_N<97@Tg}ueWIIJYj}}jYLHIRbunT;+-7Vuxngnzwgeen} o[VWo u[TYrwt!20-!!#*4:5"|so   (,-% !"" !#! ""   0/2+&"",2?GLKE@2(  !/4=4-1Wrol_YVPSLMD>2*'%29LRPM>8/5:DE@8&%2>IW`jloi_S@0 #(29>CCEBC@:8//(,0;QevWH60*#"!"02?DLPRVWahtz{     !/7AEPX`kpwvywusnmcd]]]_fgprwz|~zypl_VJ>3&!  !+>L^n{wm_^X_fuvsmmnz~~!18B@B62%!  %$! 3JYfeaPD1#!7Iaq}~xpcZPIE=A@FEKLNOLKEIGOSTQG=.$ +Ic}{\=$.GghP@9I_vfekyqfehrvcZbyxtx  $0261,#"0<@:.  $%%"  "5Si~|xnaSC=586;:;;HOX]aa][UOIA?:>AMU`dfe`_[ZVURONIG@@@EMS[]bfkry"'*+*'&#%#%&'**-059?CGIHF?91,((-16=?DFHFFA>:9;>FLV\begiggddb`chq{    "'+.002/.-.04:AHMTUUTQOMPSX^fmry{|yuplkilntwz|{{ywurrqrtvy{|{{z{{ %*1342/,)&%(),.134432/,*(((*-169=?@AAAAABEIOTZ]^^\\XXXXY\`cjouz}~~~#%)+---,)(%$$%(,.13321.,)()-16?@BCDEGHKLMMMMLLMMNQRUVWYZZZZZ[[\\^^_`acdefhiijlnorstvvwxzz{||LIST@INFOICRD 2001-12-03IENGXMAN98ISFTSound Forge 4.5criticalmass-1.0.0.orig/data/sounds/explosion.wav0000644000175000017500000014720207630537344021403 0ustar danieldanielRIFFzWAVEfmt "VDdata *Gin*{niV*M%I_6 MP ApA:BBC HS@]]!^]^<]_bY0N*`]V_\!UD[{`s\ bjPNQafYSOMoXVRMQU#9=#>=Wy206767662j) -G H !#I('8&'((:*N+,---./x0e1r23W567.8839%:;=">>M???g@MA9BB`CCD8DDEERFFHGWH~IL"PtTRY`g@hGh/h.hhe'egeau]r\_egggghggeay\bVO:Iw;*;p7/Vl fɫM8Hвgӻzfϩ2̷ ̣Bι `եEkѧϑϧЀcDԅ՝S:8WSϗ 4pϞϑ2Ͻ[c0Zң}/ѯѢ U,c.D՛UԎՃx׈/ujܪ.n`>cHJ|R<ښ>hY9 >JB CY b}2n3&*}6;4 9 P b )lbv 3Dh + ] M3 !o!!Kbz l!{')(*t( 'l%=$$'-,,j-/2J56!42.N, )h%!~!!S #" &+T'%N()**w1.,7-,v- /$1[222\2#2%2(22235/8t;?ACE=MOLMORTVWY^acdef`]|\XXpX\]K][XQJIPSGQMNMcM9GI"KdMqQ&SSSOQTXX XVUSRQPMI.HVHaFD3A <40Z.#.j+D$%9#uGtW  C>ZG(Z Y( l  ' $&(z++&$%&'''+6>kGZRfVrUWWXUZXUUpRO2S~XRacVc2_`XVPLLL{R\aWGC> ;5V6N78559567?I?@>=r<9T9b<< :67r5410031,*A'D5N} Ebq#ӘɸļW]b%_"ۜ֜IʢѣURy[ﲸD#6у_62?GӼ^mڠ/EOaJK u8i !#'`+3:AFIMN?MMNVVZ3Yc[Y\XSqKL0MPbPRX-^`Na=babababaaaaaaaaaaaaaaaaaaaaaaaaaaa\aa _!^`_a_E[WS7QO7OID:37}>\?=49+%s%)--+,&[&n  X#"T"!J"# $$&)++%N&a*.U/?02-I(,/49>:3(W"L $$~.:9<=z87:c=9+*&#~)++[-+'H&q/+4o-/76p756S7w7;<71g/0_55e2j01101368;:E;}=t<7=;='=9z9,:3m+g&q%o!?G!!R GR/eAk""n#n#%7&`+a2:AEMJBz906G846612'5%8;w733,k'o&<$r!?Qe8#M e  ! &+%%L/N185h7 :9854e37~?A*@==;<=u?<=~>L?F@=6*07-,147z5.&!~ / P N@/ h  ^iSuvaJ]PId?tDE8FNEA>>UAEAs;9N=RN]I'C@BA?;=x;5K1-++)(j)')+2;2.1455C9V=}?xBBIRPCNNOSW[[[[[[[[[[[[[[[y[[ZLZ[D[ZWzRN"MYPUTWjXWPlD@@<.BDEOFD?8a:;[74H32236y?<7n69@&?C_GGCA`A AQ@m?9<9w8.64 3/{*&*1!43U58<>=>;[:=B6D?A,DA@DGEGIEBD+IFWEFIIGCGD4CCIOPQuPMlOPDQ"VkXJRIJBqAC@@@>;: 9788$4+&)u)%"""5 @`w x_;X3 "'i&&+--*)+ +'B&1#\z W Nav#} ݬiYW\@-ܭg؎'xXI%ԥѨϣf̨(͐ѓԁҧΒͲ̔ʣSF57эB$RH8;O܍ݯ޳u֝q+|H.dՂհլ֘mדKaSN}ަ&o7o[k2 `#!,$h#e$'&'<('$+" {!#k$W#V#Z$"#`%'L(&'* -W.-,u.- /6@BTCEFG@HGEFhGH9K#KKKjJII KKYIHHGD:CC_CA?*@?5=9l7.54E6y641J/++/510.++))-H/,)(**&))M--)(,(;(*,-,y.".-00Q22I2&0.--,*-,,.X,+/22|1027:8760./^1O3347m: =??>?MAuBdAM@DI,JL T]VO)KrJHEDFdJKMPM+LNQnRMHwE DB?>;764674n44m273t85:633321.H)'A*. 1144469D:964/((%(x0577i4.@2 77 63{0..;,)Q'%$h#P!C'J{ Q 8J^ kBo7CsKi m< $  _w+KU#x5Cw|$')I,-,*)z**)(X(e'k&&G&%*%-%X#H  BOQ7" :~ ;e _#y9 {mCZXM$&'&\# !P\P6%o!q"$')N++*9+**+-0.0354!568K:z;==`=<.=<964@2-++x)b&()?'"E"L" : i $&nJlo% t[a2(<5F{;rwkyf]c-Qԣэτ#Dz5aʼn,]p@M#ʰɝ}ʓʡXrеͺ9EʰԱ nxvvvvwuwuwvwvwvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvuziU?򺊻X E,4[ȊʾBϕ*ӭlщϰj>ˮ˵v{г8- j)PYܠޥNhYEݖpݱނT+QY=5XCYy7wbT#qz;D]ڡOχ&҈̏ʓ?˥Ṳ,Ϗnmf͠ɝ@jȽ<Ƹ7ɿI%aXȪN˖ʆElʏɚ;$\!R$c2 R}i&r2 L  X;c] G!#7%&:(|&$;&#"#!S# &]$&))}***&+v+=+`+I,,-..V..0'34N5568Z8a9<;;;;<>B^DQF GdG-I(KL(MLKRKKL?KyJUJeJJ)KLCLLwMGLKJ JJIJK KJKVMgMO~PYPxP2N'IGHJIJ6KNP+PO4OOiPPN?NNYMLfKJ)KKaLKJHFDC1C CBYBABB?>BCBA=;;v<==@@>2?BCA?@9@?=K>M@AXCPDC!B@~@?w=F;#<>=&?"?;7;8:O<{<^;z=<8,<??i???=E;#;F;;<;;U;;:?:y9k8764/|)$$3##""""e"""I#"&#"A###""L#%)a07555g8q98o65530-.12I30*2$ N0-`((Eo Mc?-z_9LFzJ  j @9'sKZX-V@qWQ @  =Fh1{  G =B  "!&>OD#?) N~ Q V <cG \ : (P  #*( z ~OrVM 0/F 1NN 0J q% {  "|  3 > gA {1  O  '^` #r  ./ I K#  <  "5 ,jdb(9X  n ;\ ] i 5 }D IJ Y m0\s '7 ;Kj^3 0g r>  j,p r!S"m"#$!%y" !#9" "!!*!e$'\#Jnr`q62yR!2#>#r%(*!-04g7=>525 :AJ`MJJjJGEGbJ`JD{AG-KIRKJ2G+G\DDeDGA;7654Z776f7985O33.6+X*%'%,+p-,.00.+"*'#5 G!# {Q-j^ {U =   _{.:} ub " {5]y $ ~,4 i|Rg|lpql[){L^"#nk ~}8`K] (Wrv\+TM[gDMN<4 ]fqh5'o!{y o p91E $ X k NZo:nf}B !!p?lEZ&ho;(9'jցճԯs{׆K6Jaݪkߑ ݽI*ڪXހިpݺڏH~=~Yյ8Hːv˭aAn×#wF_@v~gLἉ CtԺH߼o)ij{ŢXƩɤ^m)"9rQjߛ޶޸c'gY3p<\:qތ*l5ۨ6l݀Kyaި0R-[AUmc=)6JLH &V0rnh > FG{OF4 , "&*+*($^%+-v+!#0t53.j(<$"!J!p!C# $$%%%$L#"!"#"- 1C "Qac,d>dq]<1#Vf~ !9 _  R o  n q3 * :sM8/ yG"_vRo s 0 L Q M:!`IV &D(P%"q#t"!R"I$&@&r)---24d6g:@DEEvGHF$DB?5;;z>>T>UBFRGB@?<:72/&-,/-/W("llH q9  H S *Z $#5!8]dQ0|unwtlv=#גFtoo c(TXp͕ ) r܌hRٛڋw( + +m> yߗOesڔ6ӫ~6#؋UصMǹog`4v!v.}tqιȹ~|Fć'Ō,/ģŬE /l٥٢b= DDc9;z J8 i.lLܞB؝.ٕDLcnز;ٰ2.CG lޑޢ( ۇڡ%ݧس.8+bnX2&} r$ijUvP|o őpN;˾/MoG ń.yu"“~Ajulj[”SĈQXɘM˙ȓ8؟]ۗ}ۭ<ۿضהQ,Ѽ7͈̕'ϊffCcIήΧ^̟δbж̷|rծT׫؝ڎܡ۳ۆހ=,%NH OgM3*cp !z$'())(&W&'((@)0))&#$$##$;&I'V*+v+-1356`644+7T8b88O7`435\5322R0.L+)#(3b/c0L-*(7*,80\4G9':<=B~K  Z*:4]'@vK5<U#z5Q.d5B]Jڱۯ;pemX:"9>YPaK t,i sK'sb.XM$*v%L:Ec X:9"X #HN {6 ) W .Bi*Y q9(?K/(j&F  OT  %/353/369P:'<@@;\9:@<88 953_1.81/:)(,.4/1.++J+ +A*'#u!<N`1iS"\ xCHR_{(yABY D QeLhVjN۔e@2zw#sDlt W, 7u>8R$!(/03(52h0 1126884@/r,)"h"&%"&)G**-48t71](M"sb~t:~W Z & FVQZ:]f8 mlJ. KllxK (D!&(u%! +*   dF-`{!|X>{!Gk?4. ,*Z'g O|ֺ׶Y|Ѱύ_GmͶ˼Ơʶ)֖܂"j޺Tm׹>lo!",AX`Hs ܷ{v[SP:k)-!USqH;J9aoXShnFID08p5>CgNWz5}u?+R\3YPY-O/ܶ=֢<}w{|Pa_z!Nöú)=ȳQʉЉJYjHћќZʲ,˾.ȟʋ=5ΆѢܷR Gz!_B3Wio6Ar& *]\8PR d*"(8]8Voa)V$(+!..../005.,$+*,",\+{,/w247U:6<33j5)54E43c3+3Z323689 8t520*.+)w)&#!g6 _ZiJh !E!( - !#4&-)))*+-/n1 4R66#6u5m5=9: :O;;;888631g13^66-65w5c4n3321/P+&s$##3$A$#0#3!> 5HNs38v(C] h^S2 L3  w]v d  B Y/3L+Ehw!%a(()b*W,.`0]10.d-+**7*T)((()*Y++++*%D"J!""! %#'Ze c ; n  F x $ S4n~ k:ou 13TVu9G " VF 8 QMN *! !8#%$"p #30I#(.1/-)()U'0!8> !#$$$"-` v U d--+n uj+[U5e@Qc#>%k5bgKO%ЋΚΪ в6Bln /֊k^q̟u\Нe8d|Mҳ͔6-Ȩǰ(њыJh<`lIfJc*3 {,%a36W =!!#U$#%m&&&&j'%#<#"#5< B P BTc+L8 29q Pw+h Y{4n4z )3geӔpgгͯpӋ ،IЛƉAqK+ڳٓkڱ*lM(L o  % =7 *  ' ;SLsZP K   _ n>K[RLRL{?R-D NlR9C<0PE*x(oQ:3&bU>/c7 ED/* 8 7$EN(] vlH<1Qd9%w 9I=d1nB+?=2 p' K"$ ''i)y*8)()*K*A**9+,/0j012521111284$52//P001320.=./ 1#345s66V7$7p66f5322b10c110/p/-@+))f' $!Bfi #"!k! eV,s*{q h ( 0 y  L ] S U1^b(YODPA=| A46'y5PvyH5,WR XyCO>{n dp3WZ^0+\{9(X(3J_$vLc>&6U2"?\%a@Y\m'p*޸ܔ޳VC%?*q(?mV:|'.%ݾ_|ޑ֏7riq3ѧҰӽ,B,C-٨gDҧ2ѪҘԻz_׭"ڥڃٶֱ[і͚\b-[&cp-q O :`V8&vݚ~Tܢ޲., [7\0xuG^X\֒ק،Yhی^""=\T7"&3f7,۷ۇhX֓zdeشٯ4ڧVܸ0/++o {SO4uP/9 7 j Q J M } c =} :~/+) !"E#F"i!"!4k!H"X! !:]O[4GqJ"2&a)d+,0./0U0R.+(R%#$%;%%R''&2&g%u#(!=!% )A++N+*0)&$v!t j"${%%%$;$'$=$$&`((3'&G'&]&(&$#$/&<')D*h*)M))))($' &8%#/"!"G#Z#"!T F r 8 w  Q Lg ,""#7%%%&(''()4)((k')'&o&U&&&$#q"v"! hz4 ZU) !!w"T$'w)+|-../E12C2110|011Z/k-3-/132100.-S-A,1,)$V""#####"#""{!9! NY0"7k- n]S4[{*OSa0רW#R^LjF!|ohۘܞ7]": A:!% ()*F,/1B2108-(O%"J## WRn 'Cg o$"W |  n>Q: [ 3LR';QԒB; %,Vً,bx*v&H fpC&]xSG BAoOY-| 6q2uqR3Y( QH  M  &m. GR;\_^> s'p*.g_Y 2 5Mk-b ߤ߼o2כU_1׌Y#+ذӯ'֥M޿߀ i2@E86[4d#ATn) VkJ;2P$2y#T*xމܖ۴۽yۜ۞r۷=!+GPF-RjN'PI@Wj)H! $ g P T . 8N6_S|B^yWwUHNr !xHP# w!0"["p"""#%$|%''3)++,0,,-.n/0///Y/.,|*)('%#z!es(Db3w  h +s{bpRJj{%[oX@?Mm7kW ]WS{Cޕܕ}ݗ߱"wL݃+d`u[nG"XAi9~:g{K;f#DIV3Wjӊ* zؤؼ w. ֖գՕo״eׁր۸'ܙUۇښvݟmEo[;R N܏ܧ- kMh|{u31A1\I2;^?Z |heF8=d}G%|*/&}^neQ~MXndE#Ia{xfi)\)y,+WqXE-ZkQW^ IRZi}G`G 2KPWOsIy:R\&j|}VOEr@X) > >^ B X n ?9x  7 |x&s \  3h    # ? @ ]  c ySzL^,  9  YV0"vdm c ! & \("1"AG m - _jQ pp   ,N  Q mC:Kf=8d =oA`נ\{xs?+  [9]/,@(kTt({_$x'''&z$ eH;61Q1y $ Q FD   l99w=H}8}!yU<N;\.0>d8G`;kRy^Qc DY~4HJFa  * & , P"aCPj N !!"#&#! :1 "$'''&~$`" Q t)!"."!!$!(<oV"J4o*w_\~@,iM`4 t a 4 l W(  D c M]"\cQ^^sSG'@ݜE܍]nr0ۦۣ_gݝ)V|',((f/=%Tit>T&9i QgD/ l  J  , t   >  8x:\ "uO o z @ myy > r4I,|X   & q a C A<$i ' 2  ` ; +{ c_ 9 O G  P m ?1>|=h g@ : #7=)kMdߩݲ3'۾cݳߪ3$&i0Dx2qX9)7ieqb ۇ[ڛbLh(p3f9R0s>8;(O.--]0k+S_EeOU|!l BTRt1!C y n ;  -:L))~az$Z\~^73y8 y 1 9PzL4A ^?JeFK 9zr1.}S ? L>6`gZ$ BL/ U $a}m_[f?1C)Z48cjP~B 7"##,#L$V$K##F"#I v?!" #u$p%$B#T#!q  O kEP/_m/aK% :IfC N NGb@ DI/zO(ah5 V1OF]sc"`|hshEv9 E Z'=Ub &#0] &)[rJ AtD])WRiQYMNtKH\,Qe'n(-80]ZpL *gog% mD )ik!!{!%""R""s"!X!!C"!"T""""$$$I#!H ~,LBTrs^ie { +  5 /&<,8+Ua1IP/mN)U>T~t<ݥ4aS ?L^Bߎߌޔlfl'.  b,dSraZT;d"42^2>L(g vd`?G *Vw- D i p i P# ? -gv m N X L  B A > n ) f gw_E Y P   )=. #M  Ynz6(T(OTC,Onx%:q1~u?OfqnA~^ PSJd`yjX^\c 1 \   UBguwKr<`):O^( t# !O#-#q;?]mK[' *WU 3 W,MK '> k pnp1449 1 =&W68p[-ߊak߅"'b*y܁@߷gh|X**=# YUV"@O4>LmWdpeT#)j p, jr]S7-ET C3gd 6(1q.O%"[DYnR0 MkjW% D  `  wVL0}Ud7cIu10,yz7 (2 ;Z #Ssz QIK ZJ r:  )?!    m(  O X 4@ 6 ?  '  AiCs -k p  VF n  0 = q Zo J'P  |`K|<Y*}v,1g?"_6(R;Nr#i1. $O8i+ Ij.9LDYR  5 d^ <  , a c J N; 8 o 3 U & = g / Is"O9-k3Vx*~5>d=~]obR0 eF4;h:eT'8 ,KMk[}p#0 WNR}T+Ns*K6^=kyjk(zJ Lv+<g7[T;OUYjq"a+^w+Y}ex$ux#\sUJ}UGB ' r`Y5ql$";~$x(r+5G, c$.C*4IG+ JB",gyH6fhF V.`a.nsb]?C% s | n  7 F 6 mF* P@sy**a .o4_p3Y)#[H 5% ;V`hq7Y;_um?+r~m]Qh?K/~Dg;ycu(ez@ e6 C{3aq9|4(f;;hb6M>`2{Mb1w_B8%<_^5/9b]aagA)V8r k[4Bf4.fk$|U%2"E2:*x8A*6uaz'l]i[Z_)kXHNQ7 d) *)+2vl%h;?8d"_opI 'p}PO(L8cK%oL,@WU3#W#L7? w,=1DWzgzIz`!6  b 7X!>H|5cC2< P!(T<pbM&Oux~#)iQ*/z#<u_noO Cb ]3excWG0a(F i??;VUY|F  k D _ ~&dzt' x"8\guE:x_f +3'j.Qk*@t2NNpFf#k[r}&~ f t C  7  Z  ^^ERL%Oa!> ,3@)^F?>~jMFF ! J OcM7HnNpJV*vCVKYwh&<YG|=(* _y;#[rT=>yNuDQ[5.wI!A_ EBFh3=3s? d21F72j:\bb0M   % z _ $ T Z 6 < r W z a qCM d J ,  5 z 3i 4 E l >m9EOE]R49"# _ D # -   , J { n'^; } $ j ( k,S+'ZimA >+QP81_'xXg'on*`UpTR}82BoyE9n5".y4}QWZ}`r Z_C d % i * P ezsCd*q!U<=DfP6.Cfe^ {>fO{%Ocet7kD ] ; 2 b e } 2 R  T ~ N >E1r>T\tqXw.,Aq)!2~ejfBE |9W:\X 1 jJf";a'U)@^88#x2Aw GL{ ^ZNN9c 6:;5sUZyXs=*ni{3,Vpy,}0gp{llj8PuZLR1=e-bdeciI('%8x8S,#&F } q q > ,3<  $ ' [ } v Z {bzOd| 7z4\(])Kry/&^o.K>~=uY>$F3PSQhf=O_hU<.j;5/do#gi.n~z^Fkmg3 Rd !v6QCsAnsnsMi Mb6>1]1GTrO T 5 q F -   Fq Eh1(r UXH9'rW!n  ;IWZ o{I  $ 1 h ( b a H * s + R   l f S q]<A^2/b{wc KO5E&^*fD2s`GzKih}]?f]#v^'9Sae`@F . | Ao:O%2vY,9#e{sP]D7]+6\Z1 k } m 8 O}%b[;wU$e[G?fmTh3c.K%k%wq,e'Dh}$a"2w ; (c]s1)8~<]lN2`UUzSc9s_R m0y\2PZt1\9&=sFm<(f _ {  { v*;e/vt7|,JP3tt(/]zZ~o- ~ % u"%QK. psk\}nB|Fu Ac_M=}.p*fok]?02i ClMBv!}3b NEuuwi~P{&@pl3"Nx \b,, q ` ; ]Dn1P 3  c L U Y R4J SH>.i0er99cNIWKc\Ig.CbS(G)E % %  ; J c [YZ7JcU7n\;<)=4&IP2z\nbINDC\HgiSla,qW#,DgHf=}{eJ$o:rC5EIaWTYd\Rp~,;> 9iR f  t(F 2.V + > E T J {* B   J ( t 3 T  z X @?NtR8u>x0rdS  6 ` d #  U y &~qE*8uVNX@WV88 3mQX"%y}$>:!gW .6?"aB@h<v+. d = A\q  u  c J h g < L y } : } w l & ? Y f & i N`t TFv(M8{&|L!g+=(S$$3*u, y~EuN:S GBQ` qOFIr:S@e>dq  !P1 g s i  U t w{L_  @Qi0-&3IZoMvm ` f 6 ( V L K ^ vH/cOs?N"9Y9M/T5jD M MIq[V_+QW_{T4.g&UwQTDM33P C$;twD9h'<  y > y H m . 6 @ C D ? C V g i S  v ^   1  +c   o f  S ) unk]Bu*%Hpc:'h$#{Y??F %MzH`ACn[] vaM^*D2 .,Vv*vE* ^aQDNX u   : GI> G   E{<Ru{asnSfrPj~VVaGm)q,V'. ixk: sT I !  / o E Z iAgC Y . ] /   #  : ^ p =  B 6 -  x r^~es$7V\M za L J T 2 rw ShwP<#'j(s r=C`:^$Y$@/V6N V|(I9YftEPTMT `9`=},%"Q\0=NZt/YG cPq'm'Z/7J3BDWF }(BM|0g2mq]ogokyS}(#t<N*cc^BFS^LKiTZ!7r4ZstLu>N -G) A 3^'t)%LP%J15jF\AqT   F / b   Dsn44PU\Y)W0dIXPbcZ,O ` } } ' l a!yi~SxjC$[8[x;/ 4&QtZ\u]Tn?*w| fWu~ W t 4 ; j x5iJv o ` w c \ 3 4 l<2UKp(g=5$wWq1ytOpqQ?L?!Z\@i9qdS=L:B1PG}+qXggX5CTu#Zmos%dXG>GO' hy2sJw=@'Xk'n .0!n$(K1r*PN}ZEw%o6QkAC:T$w/vWVe|}zK(TZO&uy4't--o9@2?}.}4s{ l0sg2xJ;/l"a' xn\F-cEPC sW065 |sZPSSTa 0Y Jz S3utPYN9ijMS$P{Gr;DmhP?Z [ F x %   $ 1 T Y @ @ R P > 0 b 1      w u w l H ; 7  y ` )   m c O .  qD[> B|%Ds#L>y7I()HvIt9t?(XdQZ_l(N5\4 a#VA(`&` !bB8VF7q 9`s"4?[+=9/@3& &$1/,*Is j ! Y  & > H < 2 &   P  , V t  5 P  | q d 4 m @  g : f )  B  g/oG])RT&zZ,L Ud* l+d(l>`zx xX KCU,i3z[_|{ZUS= =KemH,# %F]i=Ps"v 4EV@Ob_Ql{zZ,/?D8c?1758e,W|0e7aDC5d#G;g8iV 2 C K k v X D S P / ) > E ? H G A - - C ' z \ H  uC<&m:sw-2SOv5N"OA#uBRL$}<vhMn 9:T?CP q|C+t\+ d&  'K[_AaGGTXH5e'QmR}&2r % s  N  ' - _ |  D X W j w b A C >    y { ] : # % y  V L k | ` M c S  Y J Y 6 A _f '-W0w"sZ~ %&D]Z~)k427 !K\^ Jqox#lJM}P1n#uJ F04@Hanymq`bR4=`a6 ;^ghsd<;#W!"V894+NN<+$ "5&-HQ.-54 d6i1`\Ue,&{=we>qZ]O86(Y$yR-~DuzlE*&/=Dgusg/'EKT|1CeCi,R|0]t.dL] R~ .5IFGDp -V&S?z:n #NmqrCLOur\gj_9pME7   &7BPpzusyh\ckNOphXSO-`dX8`o5hT/Mu7z@*.R n >/LE1/G3#<px{eV@q)` [ pT@bbW%"6 jD*!.elD/9<&*0+_Ct6}Z1o= ~%Z  8 5 : [ Q 3 , *  i%h#Ajf'i1Q[EtZhP70cUkuO&~ZVXWJdpSF[uz 9M[\f0,2J^`p%6Y{6a{vr|kbmnv'SsDnv$k@}~h]IrjeD2(oU5jk{ryySFE307tg5hK(x@b r? !-PXDLLA\kh22LP)(35OkXME L %+  $% #5:S,7`8>t+>gAzDq,{3b0Ps(cpO'KJIjiW~te  pcoF'b_d;,' ruR/(oP}feT:9C)6E7*6'yo4^.Z*]N9lK9+ aJB~l^?(,&  $+(45'#-:=3\%Hx YK,qB>@NVSW]NF:&]@$lM0u}yqomWIE4%">Uapyg[B5+xfP7+m\YI7&qkj_YVI:6* " kVH3!vi_\TORNKKQMJIDKY\annt ',4?GVdt)CCCCA>>CGIIIEA>>AACEIMQW[________abdfgggebdjptx{~~{wtrpmkhfdcba_][[YYUSQQQQQQQOOOOOMMMKKIIGIKOSW[[]bgjhfiqyzxvtqokgc_]YWSSQQOMKIIIGGGGGIKKMOOQSSUUUWY[]_bcefhknpsvxz|~}{zxvsssrqponmljhhhgeca_]YSMGC>62.22>O_kv{vromlklopmieca_][[YYWSQQOOMKIGCGKOKGGMUWYYYYYY[[WUUY_adfhkkjhghhggfeedcb_[USSQSSUUSU[bcddfhkpvyyy}tponprvqnsxz{zjYKEAESamx{wspmifbYOE>6.&"*6>EKQYaipx|rnjlps{ż~m]QE>:6>IQY_it}{xuqnid]WWWWWWWY[[[[]_adfhhhhijnquwy{|~}y~||{zxvutsqpoppoljd]WE2&""*6:CIQW_fms{xy{}xoe]WQG>62*"  "&&*.266::>CEIKOSW]cgikosxyz|~ɴ|smg_SG>2&*6>CGIEC>:622266::66622222666::>>A>>ACEGIIMOSUWYY[_befhjmorvy{}~|wromkiihgec_][]__[YYYYY[[[[[[[YYWWWWUUUUUUWWSQOQSSUUUWWUSQOKIKMOSUQMMQWYYY_ekpuxxwx{}{xuuvwy{{wtrqpqstqonnnoprqpprttsqqsuuuuwxxvsrqprtvwyz|}|{y|~|yvtsr|zposx|pdWG::>CKS]gq{vlhjlpuyxvtpkgc_]]]][[]_][WWYY_gkhddgkic]chnrxzxvuuuutsssvxqkf_[SMGA::662..*&&"""""""""""&&&***..22266:AGGIIKOQU[_ejihipvxwvz}{{|zwuqnkgd_]YWUSSQQOMMKIGC>>::::::::66::>>::66>KW[aeeec]WQKC>:62.*&&&"""&****..2266666::>EKQY[SMIGEKU]isɾyrlf_YSOGA:6.****&""""&&**.26:>CGKOSW[_cgjnqtx{ž}yvtsqjd_][[]_YUQW_egihd__abluzuppsvscWQKKOSQOOYbjpwyrssrrqomjc]UKA>:::>>CIIC>>AECA>>::2.26>AEGKOQOKE>2& "*6AKW_hpx|zwtqonmoprsstuvzjQCMWaktrlgdacmwzuqi_WA*"&.6AMYeefiw~rfWICIMU[djpv{ɼznbWME>6.&  "&*.266::>EKQY_flptw|žŸyph_WQKE>:6.&"   "&*.2266:>AIQUY]__abcdgjloprtvx{~}yŸxqjd]WSMKIGC>:6222.....22222266:::>>>ACEGIKMMOOQSUUUUWY[]_abccdfkoqstrommmoswz{}|yuoih|ͺź~|zyxvutrpmihfefghkms|yp]K>2&&*.....2266:>EGIKMOU]gs{tnf_WQG>6:>A>>>:66666222.*"6GUSQSUY[_cglpqtvwy{}~}|{ywusrqpnljgefghijjihfdbdgiloonmmllgc]WOOSWUSQOMG>2&"*2>CKS[dkqxž~si_UKC:2*""""""&**.26:>>>>CGMOSWY]]__YSOOMKIGKOScq}}~~}}|||zywwwwyzzyxxyz|~|wrmjfb]WUSQOMKKKIEC6& *6AKS[doyżżwnid]YSOKGEEEECCCAA>>ACGIIKOQSUUUSSSUUWY]aeiknopqv{ym_QIMOOMMSY_n|źp_SMGUesg[UW[aflkighiiklmmmoqssttvwyz|zxv~tld[QE>6.**& &:I[p~}}~~|{{}}zxvuutuuuuvtsqrtuwyzz{~~|vqmlkihgfeddeefghhhfc____eiklmlkihhgeca_][YWWUUWYYWUSQOSW[]aba_]WSUW[eopdWQSSMGA>>EWkzxniloqtviYI6&""&*>Yomlic]YUOIC>::62**&&&&&&""""&**.*&&*26>GUeoicfržyrkd[UMIC>:622..**&&&******..222666:::::>>AGKIIGIKOQUSQOMIGC>>>>McxżrcWWYWQME>6.& &*2>Qe_WQ[eh_WYbinqu{ɸthijnt|}{y{}{xxwnd[WSOMIECAACCCEGIMOQSW[_bdglpuy|{{zytpoprrrqqpng_YSMGA::6:AKQSUW[_gow~}~~|xrnjgdjpv|utwzžźžugcdfb]WK>622."  "*..*.26>AECCA:62.&&""&*.26:>ACEGIMQU[aehlpsvx{|}~uk_SG:2*"&&*2:AKUYY[]]]WOIE>6*  "..22.**&" ".CYjr{{yvj]O>."2GUbmrxytph_UKA>O_pž}zyxx{}wgYSKOYbdghb]WOIMU]WQI:*&.26:>CGMWbkryrbQU]eilnopprsvy|}|zwspsx}}n_UOKIKKIIGC>>:6666::>IS_p|{{{|}}{zuohYKA:2*&"&&*2:AKSdxth[MC6.&"  ".6CMOQOGA6*"&*.226:>AEKOSQOQSWY]_iqy~~xqle__jsx|žziir{zzz|~|xuuvw{}wncW[_elszŴ~{wtpke_]YWSQOOMIECA>AKSW[_YSKC:2*&&*..22*&   "&*.2:>GMQUSQWhw|~shmrx}{xvsqnkheb_[WSWYamxyxvnf]WOIEC>>:6.*&"""&*..**&&&"""""&*.***..26::66:::>>ACEIOSW]bfjmpqsuvxy|xsnp{žym]M>62.&"""&&*C]u|smh]SGSbkgc]UKOW_kv~xm_UMGA>:>AG6" &26::>CIS_b]WSMG2".6EUf}oe_YUUSSQQMKE>22..6:>EIKKKE:2*" &.6>CIOU_is{{}~ɺhK>2&"""""&&*.6666.*&""""&&**& &6IWWY[]_kzygUU]etŨtgYW]cn{yrk_SG:*&.6:>C>6.***E]wuk_cfiiilrx~|zxuqmg_WOG>>AGS_n{zmf_Y[]_adffglpuwz{}~}n_QE:.".:G[p~}xx{~wbK>6.:GSQOOOOQUYSMGA>6.&&*.:KY]a_SIA:2..*"*.6:>EIOS[b_SIGEEGGG>2.26>EMSY]acfkorux{~|vph]S[bkwżwmd[SKC:2&*:GE>:CKQQQSW][[Ybkpmifc_behmrxͼѼwfW[]doyymhggc]YOG>.".>Kgxqkmrx|yqpv|xqmhefhjosuuvronsyżn]MIGEA>:>CGMQOOMGA:.""&&&&" &2>IQYUQMMKKOQU[_irzupmljgb[YWUUUW_gkmpommryzrks|ż}shbcekt|~}}}}|wromkqz|ywvspmkihqz}yu|xqh]SKE>:6666>EOatzvhb[WSQQSUaqxphc_YOE:."""2EWalrrrl_UI>2&&.266:>AACEGKMOQ[fp{|rnjgytmw~wppqszŴsbE& &.6GWekqv|{uqmjd]WG:.*&.AQ[agb]S>*&*.2:AACCEGGIKIECA>>CEM[iu~{zxvvwtnhkry{|}|{z{{sfY[agkoplhaYQIC>ACGKOOMIIGGQYbjqx~ɺ}xvuuwz|sj_UK>2"&.:EKOSKE>2*" &.226>CIKOSW[dnw~}|wpje_YOC:.&""""&&.2:>AKWcddddeb[UQMIMOSQOMQSYaix~|zxutzż}zwtplihgghjlnprtw|uhea]YWW[_flrx~}wrnic]ajsqbWQKOU[]adfigc]WOI>2.6>IWejmpmkhc]WMECEEKQYfs|}{z|y}żxnc_digb]][[_bis~zpcUGCA:."  "&&.26:>CIOYcmy|vnfYMA6." "&*26:CMYWWSE:26::::CKU]fq~{vpqw~{umedhlrx~}zwurpomoprvz{yxvtrqpnieba_fnurpoqtrnihggffdb_][YWSOU]dls{~unljjkmpuz}yrnlihhhfda][]elrx{ɺɼ~vqkhfc_[UE2*&&"*6>CIKIG>6..**.2266:>CCEC:6." """"&&  &.:COUY]bglkjijkou|vmsywohaYSKGCA>6.*&""""&**...2226666:>CGIMU[adhihgfdbcdgmszżzpg]UMGA>:62*" &.:CKU_d[QKIEGKOQQSWYYWSW]behms{{uommmqw|zqdUEMWa_]_ad_UKMSW[__SGCCCEEGGIKQWYWW_jsvyxph_YSQQQfy~~~}xvusqpmjfedd_[WSOMIGIKMMOOMKIGEEGGIKMQW[afkpv}ɾ{smf]WSOMOQSUWWYYYWUME:. *Gbqsurniihjuwogec_[WQKCEEGMQW[adegb]W_fozp]SSSSUUWWYUSSY_cdea][biiaWE*&26>AEKQW[UOIC>:662.*"&*2:AIQ]kx|~{qfYQKCEEEA>:62.&""""""&&  &.6>GOOMMKGE>:CMWfvuttu|~xrlllnrxvnf[QGC>:::62.26:6.*******&& *6>IUetž|w}{trqokhghjq{{wsrpquxwtqqpptwxvsstuxz}|oc][Y[[]_aba_][WY]bkt}ż|~}umeYK>2* "*...*&""&*.26:AEKQUY]cgkoty}~|tmbWOKIEA>:2....22.*&&&&&***&"  "*.26>GIMOQSUSQMICIQW[_bcddddba_][]gpsttlc]emsx}~~~ͼyrqpne[USQOMKGCA>:2*"   "*.26::66.*""&.2:>EIOSY]bfjmquy~žż}~voibYQKOQUY]djppppmkklmligc_[[YYYYWUQOKIGECEGKS[YWUQMIGE>:22.....*&&"".:KYjy~snhhmquwy{|~ž~wrnjhffhknrv{{qhc]]djrz}yxwuroeWI>6." "&*6CO[hljgb[UWY[_dhknrx~}umotyuqmjfc_[YYWY]_ab_[YSMG>:2*"  *2>Oarxtpmjhfeddefmt|ztsqlc[[[]hruk_[YWY]bjqy}unpsx}yxwvtsnf]SG>>ACGIIC>6.&*.26::2****:GOMIC>66::AIOW_[QGKQWUUQKECGKS[beikkjihgkpv{ź{toid]WQI>62.*&" ".66:AIOU[aflpuz}ɼteUK>>EMSY_dimprtvyywvwwy}{rh]SI>2&  .>QQSSOMQ]kopqke]UKA2""*2>GOOOOMMMOOSW[dmty}žxmcWM>.".:>EKUaged_YQG>6:AGMU[_deeffehnu}}xrponljhpy}tkd[YWUWY[]__][YWUME>>>>>>ACGIMQ_nx||unbUMKGKSYjzѾypg[QG>:6.&"*.26:>>CGKMOUY__aa___][YWUUUUY[][[]bfv{ri_UKECA>>:.& "&*..26:>CGMU]diou|žžxqkd______YQIA:2" ".:AAA>622.2:CMU_a_]WSK>2*&&*26GWfpz~{xmbUC.*2:EMW[]abcj{żžyi]QMKKUaklmlheiqz|zurpkfaYSOMIGEC>62222222.*.26::>GMQOMQU[[[]bhid_][[_cfdcbcdjs|ywtvwy|~{xvtsssrpnnnnpqpkffjnt|xiYY]bgkpz{wsrstx}{rh]UQOMOOMMKKMOQSY]bhmrrqqrr|qbYUOU]dkqx~ž{xtpg]Y[]dkr{{vpmifdca_][]__aa____aabba__]][YWY[__]][WUWY[]]afkpu{~~}ž~ymaUKC>:>ISY]b__[WQOUY[[[]_b_]_kuxwwutrpnljijnqqpplhea]WSMGA:2*&&*& &*2::::662*".>UoŶ~paUOIC>6666.**2::66:>CEGGC>>>>>>>2&"&*..2222>EQbq{ž~xrmt{~qdahoty~uh]UMGA:>AEIMOMKKIIQ[aWOIIIGEAEGKQW]_cdefa[UOKEA::>ACGIGECA>CKSap}~}zxvtrpmid_WOIC>:2.....26:>EOY]cis}ռ~}{|}xcMCEGEA>>>AIS]fov~~yune[QG>>:62.&  *6:CA>>EIS_lv~}uohd_WOG>622.2:>GQYahowž{xuoeYUUSMGCMWalv|}wph_][[]bdcbchloprjaYUQOQQWakqw}~uohb][YWUOGA>::6.6GWj}~}|xtrqpqsuy}}zwustvtojhggntz{{ytoqyzocUI>." &.62..6:>GOU]c[USY][UO>..:GOWWQKA:22..262.*& "*6>EMKKIGEA:622.26:CIKIGC>:CKQSUSIA:2****.2:>AGMSUUYdn{źɸzupqͺ}cIA626:62.*&"  "*26622..***2CWcluz~~{|}reWQKGOY_cfjmpuzysrtv{wj__]bluz|~paWakomkhebcegkopqqrtune]][]_cgkplhdgjje_YQIGECKQW[]__abbcdehouvspmjhgghnswxzvqme]SE:2.*..2:AIQY_cggednwŸ}yvsttrnjd]W[]aced_]]_b]WQG:." "*2:GQ]lz}|}~~~~}}|xtrtvxy{ywvtsrqponlifcb__][SC6*""*6>IUet}zzɼyl]O>62*2>IWdp{vlgbWI:* "*26:CKQQOQW[[YWY[]_cca]YQKC:.&"*2:CMUY[ahosuwy|~~}{xurppv}ŴtaQA6:>>:::>>IU]chnu|vnrvz{||{zwurw}{vpjcWMA>:66::62266::>EKQUYahpoomkhgknquyzzzyxwwvsokgdaehknqtwz}}zxwv{;zqid_[OE>ACIS[][[_eikmpuz}vkd_Y[]]UMIKMS[ehknmlkkkjgec_]WSQSSQOKIIGCA>:62.&.:CKU_hpx~~zvsqtwz~wpib[SI>::62..222.****2>EQ[emtż~si]___[UQKGC>::66>CCA>>:6.""*6>EMW_hlptzż~{xurl_SG>6.&"*2:CIGECEGIOSSSQOKGC>6.*&""*26>AGMQW_glquwx|{uqomf_WUQMIECAA>>::::62.& &2>KYca_[UMS[cnyźɾxqkfca_][]chlorpnmpsspnjfcjptsrplh_UK>2& "&**..**&&**...*&*26:>CO[env}zwtrqppje_YSMG>>::662.*&" "**&&.6:AGIGEA:662222266::>CGKMOU]emt{}~~~~żxrmmrw|{xtsqqsvwy{ywvtsxž|uojea[UQKGGIMQUY_elw~{|}}zwtuvz{pdYOE>6.&&"""""&*2:CO[fikh]SQQSW[]YWSKECCCA>:62266:AGS_lvź~oe]UOIEGIKMOQUYYWWUSQOMOOQYbiijifcbaa__]behloruyyyzzz{|zwutspkfa[UQKGC>>ACEGIMQUY_dfgkorx}}wphb]WSMG>62.....**&" &6IU_kkkid_[YUUWYY[[_bb]WQICCGIKMOOQOMKGC>:6222266::>CIOSW[_da[WWWUOIIOU_ir{ɺ{ywvtrrrrqqqsty~xogYG62.*"  ""&&&&&""""&.26:>CEGEE>:2266.*""*.*&&&&.6>CIKIGIMOQUY]djqx|}wrtvzxmcYOEA>:>>>>::::6622..***..26::>>CGSeu{~}|{zvroljhjknsx{|~žvi]SIEA>>::2.*..26:AIOQSSUUSQMKIGGIIKMIC>>:::::AEGIIOUY]bfjnoppv||unf_[WSMIGGGMSWWYY[]_cfiloligfdcba_[YYYWSOIE>>>>>::>ACCCEIKKIKSY]__cfjqx|xsqpnljgd_][YWYY_elrx~~~Ÿ|mjgefhd[S[gspoke_WQKKOSW[_goog]]_b]YUWY[YWUSQQSSMIGKMMKIGCA>::AEKOUQKGA:62.26:>AEKQWY]_bcefhlpsuvwxyzyzŶŸ~~}}}}xrlf_YQIC:62*&"&**..**&"&26>EIMOMKKIGKOSW[]aeedcbba][Y[]eq|zyxwwwy{}{skbglqz~{|}|wsokfa][W]djnqwzxwvwyz{|~vmgb_]]bgmqvwmbYSMGA:. """"""""".:EKSYahijmrw|ž~ywvx{}{|||}}~n[MA2..*6>ACEEGGOWaks{|zyxx~{slgb][YWQME>62*& "*..26:AGMMKGIKMQW]fptwz~zwvvtqopstrqpqruy}xjeb_ceghihgehknruz}rkjiijkllmqv}wpg_UQMIEA:2*"&.26:AEKQU[_diotwz|}~~ż}yusqonljd]WQKGC>>::62...226>GOSY[YWSKECA>:62*&""&""&***&&&&&*...22.**..6:>>>:622226:>CEIOSWWYYYY[]][WWWWWYY[]]_bflqw~ż|uomkigeca_[WUSOQSUQMIC>6&""*6CQaq~wqomotz|||~xiYKSYbnzrf[OG>6.&  """""*2:AIQYabcdeffdcba__abeilprvy|~ž~zwtrqpomlkigffefghloqtwvuttuvwxz{|zxź|qrtvtqpnmlmmoqsstuwzwl_UI>6.*&"" ""&&&**.226::>>>AA>:6:>>CEEGGA>:>>AEIIKKSY]adlxżzrld]UOIC>:2.**&"&**.*&&*26>EIMQW[eoz}umgd__abehklnnmkllmjgeedfkpu|}zuqmhccddgiheabeinswwwvvuvxzzz{xlbYOKECKU]dkqw}Ŵż~ysnf]UMC>>>:62.*&  """""&&*.2266::>CECAEKQW]ba__]]][YUSQ[djlmje_hpxtqqv|żzpf]UKA6."  "*6666666222666:::>COYckry~{xqkgv|zywvtqnigggiloligfeefghikheca__cgkorsttssrstsqplhdcb_[YUSQSUWUSSQOOQQQOOW]ekquy|~|ywxz{|}żź~uljmoty~wqkd][]_jw}snkgggfa[UMC>62..**.26>>:::::62.266:::662..6:62.226:>CKSUWY[_bfjmpsuuutrqw~~{|}}}|~zrmhcb_]SKGIIIGGEECEGIKMMKKSYadhjiiknpnjiotx{~}xsppoqtwrlfikmoqrrrssssstwy{}~}|{ywvxzyvsttvy|~}{yvsrqpolje_YQIGIIIIKMQQKEEIKIECCECA>>ACGKKGA>>AA>>ACGKQU]cfghkorx~~}}}~|yxvtqppqplh_UKIIGECA>::>ACGKS[epz~}}{vpomlmnoqtvy|{ywxyxsojeaadfda_][WQMKIIGGEA>>CIE:226:AKQSUUSSKE>:62*&&***..6:>>>AEIGCACEECA>:2.*&&*****&""&&&***&&*.226:AGOW_hpuz|zwtqke_][[]]WOGEEA:226>::666:COW]esžž}z{}~|ywustwz|}~{wspljkkheaejlfa[WUSQOMIE>62:>>ACKU]WQKC>2&  "&*26::>EIOW]abdjpxyponmlkifc[UMG>6.&   ""&&***.266:>EIMOOMIEA>>>>:66:>CIOW]chnqtwy{}~vohaYUSOKEA>>>:62*""  "&**&&&&&*.6:CGKOQUWUSUbnxѸ}oaSG:."*.6:AIMOSSSSSQQQQQSSSSSUWWYY[_bfjmoqtx||pf_YUQK>.""&&&**.26:>EMUboxxxxwvz~wqkd_YUQMIEA>6.&""&&**266::>>A>::>>>:6::>AEGIKIGCEIKOQU[begjnqvy}}sqrtx|{wrmieadhkmpojffhimprrrrponmlgb][Y[enponnoomljigfdbbaa_]]_abcekqvrnllkkkkifdba_acdefeca[UQSSU[_dgjhfda_[YWWYYYYY[__abcdenv}{yxv}|{}~~zz|}wqmkhhijosuroh_UUWYepy{wpjedccdefghkmoppqsuqlhd_]][YWUQKEA>>IU_isw{~}vpkgcba_][[YWWWWY]_cgjmppponlkpuyz||||~}{{||}~zvqnpqsx|}snpsrnid_[_cgjmnkheb_YSOOMKGCEIOSW[[][YUUUUWY[YWSMGGKOOMMKIGGGIMQUY_lwzywy~{yyy{~vkcccehlkigc_[YWUSOSYaa___aabcccc_][_adfglry}yqnrw}~vpib][W]bhqzrf]YUWY[dlsvy|}{yvtrnhacglqv|ysng_[[][WSMIEIMOSUWUSW]bipvwxz|}ž}skcYQGA:6622.*&"""&&""*26>CKSWUSOKGMQUSQQSU[biiijmprstvy|}xtqomljnrvxy{{{{|}{zxyyxtqpppomkjjg]UQSSOKGECA>:62.**&&&&&&*.26:AEIMKIE>662.226626:>A>>>:::::>AACECA>:66:>>CEA>:62.2:>ISY]aehigedefkpuvwvngb_[[[[[[YUQOOOSY_flqrrux|zupsvz}yvtoida_]_begjloqsux|yrlllmnoonlkllnqt}~}~}{yvsqpnpsvspld[WWUUWWUSQOMKMOOOOQSUUSSSQMC:662222:>CEIKOQW]bbabcehlpqsux{~vncWMICA>>>:::66622.&*.26>CKQUSQSUY[[]]]]befgghhimqv|ɺ~xrjc[WSKA62.*" &.66::CIQW_dinv{wspomkjhfdb_]]][YWUSOMIGEA>>>>>>>AAEIOU[cdddba___aceffgeca_]]__]YWWUUUSQMG>2&&**.26>CO]jrz{vpjc_]]_cfowž~}|wsqtwxz{zxwz|~}{yurqpoljhfda]YYWWYY[]aba_behjlmkie_YWWW]bhlptx|{ywxxyxwzzqqrrtuvwy{~~wpqrv}xkc[UOIC>:2.&" "*6CQ]elrw|}}|zywxyz|}~žžytqnid_[WQKC>6.&""""""  "&.6COYepw|~}|}ž}voligc_[UOIC>:::AIOMKKMMOSYYWWQMIMOOKEEEEEGIMSSQMIC>AEIS]ejpsw{{{}~}~|yqjhkoruxz}|wsnjgd_YUUWWWWUSOQQSW]bgloqtsqpppprtvy{}paUSQOQQSW[]]ahow|yurolhb[WWUUUUSQOKGA>:622..*&&""""&&&***...22666::::::66666::>ACGIMOQQQQSUWUSUW[cmw}}}}}~~~~}}~~|yvoe[UQMIGC>::>>AGKOSW[_a_][WUUSSQOMKIMQU[_ejnqsuwy{}|zyz{|}~zwttttvxxtpjc]WQMIE>:662..**.2:AKQSUUWW[afhjmrwz}}||{}|zwvwxwtrlf_YUOICA>>:62..*&""*.:CO[hpsvwxyvsqqqppoquyz{}~}ulb__][YUMGA:66222222..*&    *QtU6"*26:::>>>>>CEGEECA>ACEIMSY_cdfhjlkjgb][]]][[]_aaabegiknsy|}}~unfb_[]_b_][[Yalv~~void]YUQIC>>:>AGMSYckqtvvtrj_UY[]][]_acfiihijlpx~{yvu}{tuwy}zsmf]YWSW]bhnsy}{|}}|{~~{vpke_[WSQMIECA>>AEIKKMIEA:6.*"&*.22.....2262..**..26>CIOU[bhot~}vpjotz~}unf]UME:2&""""  &.2:>EMSW]bfkry~|zxvtspnljihijje_[UQMIGECAEGKQUY[]_bdb_][WUSQQQQOMMMMOQUY_dhlprtx{~{|źzqiabccdeeffghilorvz}~~{yvsnh_WOGA:.& &.6:>CGGEGIMMKKIGEEGIMOQQQQSSUWWWWWYY[]_aacgklmmmmnw~|{yxxxy{|~}|{zzwsonmlkjihfb]YUSOQSSQMOQUWWYYYWSOOSWWUUSSQSWWY[[[[bhnprux{}~}zvuwywtpjb]iu~|wohc_[YUUWWUSQMIC>66222..222...226:>>>>>ACEGIKMOOOMKMMOUY][YY[[[Y[gs}||}}|zyxvvx{ywtuvwxzywtrqopprw{{vpigfeedc]YWY[_ejnruvxxxwvuspmjihe_YSOIIKKMOOQSW[__aa_]][Y[[]adgjlligb[UOKEA>:::>AGEECGIMQUY]aa__][YYWY[_abckqx}zupnmlorutsrrqrtvy}~wuuurolkjjihiijbYQKE>:22.*.6:AGKIIKOSWY_gpxypke__]]acdddcba_][YWQKECAA>:::6:AIOW]bfjptz}|{wrnhc]YSOMKMQUeu|n_[]accdefeca_________bdedcdfgmrvutuy|zutsroliea[UOOOOKEA>66666:::::::>AECA>>:>IU_iqw}~zvrpomkigc_][YY[]aeieb]WQMIEECC>:2*""&*..26:>CEIKMOSWYY[[[]_aabbccdcbcdfedb_[YUQOKIKKMKKIIGIKOU]ekpssrstvxy{}~}xyzzzzzyyyyz|~|{yx|{oid____][YSOMKKKIGC>:66::>>:::::>ACEIIGGECCGIIGGEA>:66666:::>>>AA>>>ACGKOOQQQQQSUY]cccdfhkmpqrrtvx{}~~}zuqmhbdfhhiijkklllmmprv{xwvvz{vpke_[[Y[]_bdgknpppprsrponlkklnpsrqplgdfgkqxz{|}~ytqnjjiilopqqqponmlkjhfdcbbbbbdefffffffffjmpty}|wsolkjhfddeda]]_a__]]]]][]_bglptwz}~|{zyyyyyz{}~~~}}|{ywuutvy|~zuvxyz{|}~~}|}~ż|vpkehlpuz~{tmfa[WSQOOOOOOOQQSUUWYY[[]__][[[[]]_abdefghhjkmkihhggggfdccddb_bgloqsojeb__diloqqqquy}}zywvvvxyzyxxwvvwwuqoljjqxzwurpmoprvyywvspmga[YUQOMKKIGEC>::::>>CIOU[_ba_]YUUSUY]__acehknqw|~}|{{{xvy~}{zyxz|~}|{zxwwwwvvrnjhgfeec_[UOKKIIGGIIKMMOMKKMMOOQQQQQQSWY[]_____]][YWUQOMKOQSQOQSUW[]]__]YWSOOOOSWY[_]YUUSSSSSUW[_bccccccccdfhikmmnnoppppomjhfdddeghlpuy}|xstuuutsrpmid_[W[_fnu}|yvtqrtvz}}zwuttsrqrsuvxyz{zxvtsrpppuy|~~zyyyyyxyzzyxy~yrmhghhknqtwz|~~}|{}}ytpnlkorrokjkkllnrw|~vnljihhghijmprtvwxz}}zxusrrrssvy{|}~}~~~~~~{xusqpmiefilptwyz{}}yusqpqsvz~~}{xyyz{|~~~{ywwxz}}uoidehkkklptxz}~}{{{|~~zxvusqpomlighhilopmjhfda][[YYYWY[_chlnprqqqtvwxxxxxz|||{|~|wroonoqssrruy|}{yxyzyxvusrqpppqpnloqtz}vpkea]YUSOMIE>:62....22222266:>AEKMMMKKIKMOSY]aeimquy|ztplifca][[[[[[]_aaaacdeedb_[]]_acejnsx~~{xtrssrolieb[UQSUUY[[YYWUSOMKIIIKMKKIIIKMOSUWYY[_dghhikmnopruy~|yvuvvy}~{xuromke]UMICA>>>>AGMQW]dkprtx}~{xurokihfedefhhiiiiihgfghhhhggfedcbabcdfhjklkhec_]aeilortwy{|}}}~~~zyz{|}~}{|~}ywuttsrqpnkifdb_]_accddgiknqtwz}~}}~}||{|}}{ywusrrqsuvwwy{}}{zwurtuurponmlkjfca_____][YWUSUWY[]_cfjmpsvz~~~~}}}}|}}~}{zyxvsqppqrtutrrsuuvvxz|}|yvsrpomkjiigeccccbb_YUQKGECCA>>ACGIMQUWYYYWUWY[]acdegiknpstvx|~|zywwxywuspnllkllmopqsttsrpmifc__]]_ba_[WQMMKMQUY[_elruwyz{ywttvwz~{vsssssstuutrqpomjhea]][[[YYWUUWWYY[[]]___aba__][Y]_bfjmpsuvxz|~||||{zxtqle_abfovz{|}}~}|ysmheba__abb_[UOG>6****26>CGMQUY]bdgjnrvy{~~}zwsqpnnoopprw|~yrkaWQMIIKKOSUWYYYYY[[_befhknqtwz{||{yxvtrolmmnopqrsuxz|~}{yvsqollllpruvxz}}|{wphaYSSQQUWWSMOSW]bglptx|}zwusqommlkjhd_YWUSSUUWYYWUSQOKIGC>:62.*&2:CIOSUW[_cjqwz}~{xwwvuux{~~|z{}|xutssuvy|~|zwurpnkhiijjkjihfda]YUUUUWWWYY[_acegikkigc_[WUSUUSMIIGGMQSSSSQQOOMOQQQOQSUY[_hotuwxyz{|}}}{xusrpmjijkmnpponkhe_[YUSMEA>::::>AEEEEEGKOU[_cgkoquy}~yurpnmlmnoqstssux{~}|||}~}}|{zyz|~~|{xurokhgeeddeefhijjjlnppqrrqqrrstvwyz|~~}}~|ursutqokheddca_adgmrwy|~~~~}|zvsrrstuvxz{~~~}}~|zvrnkhedccegilnprsrrpnklmnnnoqtuvvvwxxxwusqpnpqtwz}~~yuqoligea][WUSQOMKIGECCCEIMOSW[adeffedeghgggjlptx~}yxvttsrqpmifb]YWSQQQQSSQQOMKGA::::::::::>>ACGGIIIKKKKIIGIKMMOMKGGECCAAAAAEGIKMOSW]cjpuz~}zvrojfghijknqtwz}~~~~~~|{{{}}zvrnieb___adghhiihhijjjjihfa]WSQMKIIGGA>::::>ACEGIKKIECA>>ACEGIIIKOSUWY[]__aabcegiloquyzyyyz{|yvspomnopomljifb]]]]_cfjmnmlmmnopqrssqprux}}{zxvsqonmnqswz}~~}||||~}zvqmidbccddeeffdcbba_][YUSQOOQSSUW[_cfhjmpqrtwz}~~~}{zzyxxwxxxwvvvvwy{}|yxwy~}||||}~~||}}~|yvtrppqqpppqqrtuwz{|||~~}|{yxwxz}|yxyzz{{|||{yxxwwxy|zwspnkjlmlkjjkknprux|~||{zyxvtrpnkigfeeinrtvwxyyyxxxxz{}}~~~~~{xurrqppooqsrqpqrtx|~|{|}}}|}~~~}||}}{xvtrqrstuvvvvwxxwwvutuwwwwvtrolihhhjmopqvz|xuqnmmmoqsuvy|}{yxwwvussuvvuusrqqppnllnoonnnmnprux{}}{|~}}}|~zxwvwxz|~~|z{|}}}}~~~}|}}|ywtpnkiggggfecba__]_bdhkorvwxyyz{|zywwxyyxwvvvrolifdefiloqsuwxyxwwwwxyz{|}}~}{yxwvvvvvwvutsssuvx||yxxxz|~~~}wrponoopqsuxz}}|||}~}{zxxwwz|~|ywy|}zxwwvvvvvvwy{||{{||}~~{vrnjiiijklkjigfeddfiklmnnmnoppqrrsstttsstvx{~~{xvutrpnmlkjiijjlmooopqrrqppqqtwz}}zwvwwwvvvuuvvvvvtrpqqqrrrrrsstvwy{~~}|{yxuqokheb_]YWWWWWWWWWYY[_ejpw|}{xvtrojeca____bcdefeeddcccbcdegikllmlklmnoqsuwy~}ywvtqonmmrx~~}~~}|{{yxwy|~|zwuspmhca_][YUSOOMMKIGC>>>>>>>AEGKMOQQQSSSUUUWWY[[YWWUUWY[_acdffeeca_bcfilmnnprttuvxy{}~}|{ywttttqnljhggghjkmprsuwxz|~~}|{xurponnmmkjhfcegihhfecbaacfhjlnqtwy{|||{{{{{{zzxtqpnmjgc_[WSQMKIMQSUWY]bccchmqx}|{z{|}~~~}|}~|{zyyyyyyxvuuvvxz|}~}|{zz|}~~{ywvutrpmjgda]]_aaaa_]]]]][[YYWWWWY[[[[YWUSQQSWY]_dgjmprssttutttrppqsuuvspnljiiijloppqrstuvwxyzzz~|yvvvvvuutstvxz{|zxwwvutsttuwyzyxxxxyz{~~yuroljhgffgghgfdb_____aabcddccdefghlprrqqrrtvy}~{xtrpnmlkkkmprsssuvxyzz{{}~}|zzyyxwwxyxvtqnkhdaabbdeeddca____cefeeffgmquvvvwwy{}~zxvvwxwwwuttuuvvvxyzyxy{}~}~~}zxvtrokhgedcbbabdgikmlkjjihfcbaa_[YWSQQSSQQOMKKIIIKMOSUWY[_adgjnruwywutuuvxz|~~~}|{|~zwusrrqqqqrtusrrtvutrrsrollnpsvz}~}{xvutttssrrqrrtx{|}~|ywtqnlkihgefghjmnmlmnpqrstuvwx{~~{xuqnjhgfeb_[UQOMKMOOQQQOOMMKMOQSUUSSOKIIKMQUUUUSQOOOQSUUUUWY[[[]_acfikmprvxxy{~~}}|}~~|||{{{yxvvvwvutrpprtwy{{{zzyxvtuuvvvvvuvwxyz{yxvutssstuvtsrssssstuvuuuwz{|}}||}}~~~}||}}||{|||{{zzzywwxywtqomkihhijjkkigegikmnpqsssspnllkjihggfffghijkklnoqsuwyyyx{~~}}~~~~}}|zxvuttvwyyzxvtvxy{}~~}|zywxyyzz{|}}~}}||}~~}|{zz|}~{yyyxxwwwxy{{{zzzz{{|}~~~}}|xtponmlkllmopqrrstuwy|~~}|{yvtrqoligggggghjkihhknpsvx{}~}||{{zzyxvtqomnnrw|~~}}}~|yurqpoljhijkmooppmkijklmonmloprstuwxyz{}~~}|zyxwwvutuuvwwxyz{}}{zxxz{{zyzzz|~~~}|zyxwusqqstssrpmkjiihhknpruvwwxxxxxxz{|||~|vpje_][YWUUWWWUUY]biotx}~}|{{{yvtqpnkhfggiloqtwxyz|~~~~{wspnkkkklnopqqpprtvuuuvwwwwwwwwxxyyz{|||}}~~}{{zz{}~~~}{z{{{zzyxxxxxz{|}~}{yyz||}}{zywusqponmpqstuvxyzz{|}~~~~~~~~|zxwvvusrrqrstvvwwwwusrsuwy||||{zyxwvvux{~yusqpppqrtwz|{zywutsrrrrsstvxyyzzzz{{{{{{{{{|||||||{zyxwvsqonmnnomkjjklmnoqrtvxy{|~~}{{zwrnid_]YWY[_flquy{}~~~~|xvutsqomkihgghiihhijknprrsuwy{}}z{{||||~~|z{|}}{zzz{{{{{{{|zxvvuspmjigijlnopsuvvvwxyzzz{{}}}}}}|}}}}||~|ywxy{~}}|zwutrpmjijjiihgffffgghhgghiloqstuwy{|}~|zwusstsrqppppqqpppooprtuvxyz{|}~~~}z{}~}|{zzyywvtrppppooppqppoqrsrrrqqstvz}}{{{{}~~}||{{{{{|{{{yvtssrrqqpomjhhiijjklnnnnoppppqqrsuvy{}~|{{{{{{{zyy{}~}|}~}{}|zxxwwvtttusqppqrsuuuttttrqpppqrtqoliecbabcdccbdfghiiiijlnrw{}}|{}~}~|{zxwtqrtuuuuutttsuvx}}{zyvtqppomjihfedbbbbfiklmoruvvwz|~}{xvuuuvxxwwtqponnnnmmlllkigc_[]]_acdddfhklnoopprtwz~~}}}|||||||{{zyz|~~~~~}~~~~~~~}{zywvvuutrstuvvxz|~~|zwtrokgb[WSOKGA>::626:>>CEGGIMQUWYY[[]bejnqrsttuvxy{}~~~~~~~|zwrnkhfdba_____aeilnpsuwwxxyz{|}~~}{zxvtttstttuutrpnljklmprtuwxyz{|~}|||}~~}||}~}|zywvuuuuvvwxyz|}~~}|||}~~~~~|zywvvxyzz{{z{}zurooopnmknqsuxy{|||}~~~}||zxvxz{{{{{{yxvvvvvusqonmmkigghgfedcbdegilpv|~~~}}~~yvromkifcbccddegiknpswz{{|}~}}~~~~}~~|zywvwxyz{|~}zwtttttssttuuuuuuuuvxy{~~~}}}}||{||}}~}zxwusqomjhfdbdegiknquvwy}}}}}}}}}~~~}{ywwxxvtrqqpnmkjheb_][[YWWYYYYYY[[[]_adegiijjjjjklmnoprssrrrrrrrrssrrrrrrstx}~{wtqoooonmmlloqsrqqsttttuuuvvvwwy{~~|{zzzxvtqplhd_[WUUSW[_bfhikjjimprtvvusuvxxxyyzzzyyxwwxy{|}}}~}{yxxxxy{}}{ywurppnmkihhggfffffghkmpsvy{}}{zyyyyyyyxxxxyz|}~}}|{zyz|~~}|~~~|{zzzzxwwxyxwwxz{}~~|zwvvvvwwvtssrtwyz{|}~~~~~{xusqpnllkkkjjiijklmopqrrpopqrsttqooprtuvwxz{|}~~}~~~}~~~~~~}|zxvutsrqqpppqrssttttuuwxzzzyyyzz{|~~}}~~|zxvuuvvutsttuwxz{||||~~~}zxwyzzyyyz||}~}}}~~~~}{yvttsstuuutttttuwz}~}{zyxusqrstuvvuutttuwxxxy{|}~~|{zxxxwxxyyyyyxwvttssstuwxyz{||}~~}||{zxwvvuuuvvwvvvwxyzz{{|||||||{z{|}~~~}|||}}~~~~~~|{yzzz{{||}~~~~~~~~}|{zxyz{}|||||||}~~~}}}~}|z{|}}|{zyyxxxyzzyywvusrstvtrqponmmnpprtvxz||}~~~}}|{{zzz{{||}~~~~~|zxxxxxyyxxxwxyzzyxxyy{|}~~}||||}}}}~~~~{zyxxyyxwvtsqommmmnooppqqqqqqqqpqrrtuvwxyz|}~}}|{yxwuutttssrrrssuwy{|~~}{yxxwz}~~}}}}}|~~~~~~~~~|{{{{{{||||||{zywvuvvvvvwwxwwwxxxwvvvvvutsrrrqrrstuutsrqppppqrrsstttuvxy{|~~~~|{zxxyyyyxvtrrrqpoooooppppppppppppqpppppppppppqqqqqqpppqqrstvxz{}~~~~~~~~~~~}}||}~~~~}}}~~}|{{z{||}~~~~}||{zz{|}~}|{z{|}}~~~~~~~~~~~~~~}}~~~~}|{yxwwxxyz{zzywvvuvwxxxxyz{|}~~~~}}~}||{xvttsrrqqqpqqrsssttuuvwxxxwwxxxxwwwvtrqqqqqqppoooonmoprsstvwxyyzzzyxx{~~~~~~~~}~~~|{{{{}~}{ywvutsrqponnmnoooopqrstuvwyz{|||}~~|yvroooonmllkllmnpqrstuuwy{{|}~~}zxusqpnmkihgeedcbbacdefghiklmnnmmnoonmmnnopppoonmmnnljiihhgfffffffghhiiijjjkklmopppqqqqqrsuwyz{|}~}{ywusqomkjhda_][YYWWWWUSSQQOOMMMMOOOQQQSSSSSSSUWYY[[]___aabccddfijlmnoprtw{~~}{yxvutrqppponmljihgfeefffffffghiijjkkkkklnoopppqqrsrrrqppqrsuvx{~}{{{|zwuttsrqrtvvvvwwxxwxyzzzzzzywuuvvwxyyyyyyyyyzz{|}~~}|{yxwvussrqrstvwxxxxwwwwwxxxwwyz|{zzz{{{{{{{||}}~~~}}||}}~~~}{zzzzxvutsrqpppppppoonnmnnoqsuvwy{}~~~~~~}}}}}}}||{{{{zz{{|||||||||||||||}}~~~~~}|{zyxwwwxxyyyyyzz{{{{{{{{{{{|||}zyyyxxyz{|}~}|{{zzzzzz{|}}}}}|{|||{{{{zyxwwwvvuutttsstvvuutssttuvxxxxyyyz{|~}{yxxxxwwwwvussssrrqqqqrrssttuuvwwxxyyyyyxxxxxyyyyzz{|}}}}~~~~}|{zyxwuuvvvuuuuvwxyzz{{{|||}}~~~~~~~~~}}}}}{zzzz{{|}~~|{zyyyxxwxxxxxxxxxwxyz{||}}~~~}|{{zzzzzz{|}}~~}}|{{{|||||||}}}~~~~~}}}}}||{{|||||}}}}}~~~~~}}|{{zyxxwwwvuvvwwwwwwwwwwwvwxxwwwvuuuttttsssttttttssssrqpppppqrtvxz|}~~~}}|{zxwwvvvuuutttstttuuuuttssstttssssttttuuuuvvwwxxz{||}~~~~}}}|{zz{{{{||||}}}}}~~~~~}}}~~~~}}||{{{||{{{{{{zzz{{||}~~~}||{zzzzyyyyyxxwwvvuuuvwwwxxyyyyyyyyz{{|}}}~~~~}}|{zyxxxxwvuuuuuttssrrrssttuvvvwxyyz{||}}~~}|||}~~~~~~~~~~~~~~~~~~~~}}}}}~~~~~}}}}}}||{{{zzzyyxxwwwvvvvwwwwxxyzzzzzzz{{{{{zzzzzzzzzzzyyyzzz{{|}}~~~~~~~~~~}|||||{{zzzzyyyxyyyyyyyyyyyz{||}~~~~~~~~~~~~~}}}}}||{zzyyyyyyyyyyyyzz{|||}}~~~}|{zyxxxwwvvutssrqpnnmllkkjiiihijkllmmmmnooppqqrstuvxyyz{{|}~~~~~~}}}||||}}||{{zyyyyyyyyyzz{{{{|||||||{{{{{{{{{||}}}}~~~~~~~~~~}}}}}}}}|||{{{zzyyyxxxxxxxxxxyyyzz{{|}}~~~~~~~~~~~}}~~~~~~~~~~~~~~~~~~~~}|||{{zzyxxwvvwxyyzzzyyyxyyyyyxyyyyyzzzzzyyyyyxxwwwxxxxxxwxxxyyzz{{|||}}~~~~~}}}~~~~~~}}}}}}~~~~~~~~~~~~~~~~~~~~~~}||{{zzzzzzzzzzzzyyyxyyyyyyzzzyyyyxyyyyzzzzyyxxxxxxxyyyyyyyyzzzzz{|}}~~~~~~~~~~~~~~~}}}}}||{{{{{{z{{||||||}}~~~~}}||||{{{{{zzzzzz{{{|}}}}||{{zzzzzyyyyyyyyzzzz{{{|}}}}}}~~~~~~~~~~}~~~}}|||{{{{{{{{{|||||{|||}}}}}}}}~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}|||{{zzzz{{{||||||}}~~~~~}}||||||}}}~~~}|{|||}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~}}}}}}}}~~~~}}|||{{{{||||{{{{zzzzyyzzzz{{{{||||||||||{|||}}}}}}}}|||}}~~~~~~~~~~~~~~~~~~~~~~~~}}|{{z{{{{{||||||}}}||||||||||{{{{{{|||}}}}}}}}}}}}~~~~~~}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~}~~~~~~~~~~~~~~~~~~~~~~~~~~~~}}}}|||||||||||||||{{||||||||||}}}~~~~~~~~~}}}}}}}}}}}|||}}}}}}~~~~~~~}}|||{{{{{{|||}}}}}~~~~~~~~}}||||||||||||||||||||||{}~{{{|||||||||||{{zzzzzzzzz{{{||}}}}}}|||}}}}}}}}}}}~~~~~~~~~}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~}}}}}}}}}}}}}}~~~~~~criticalmass-1.0.0.orig/data/sounds/beep.wav0000644000175000017500000000473407630537344020300 0ustar danieldanielRIFF WAVEfmt "VDdata 2'lJ . nLN * _ P =!iK}8 H%y07:831$}շh$L7(<8L[a_SUC -nXmx9>J&,C2V!ac]O: t϶饄)< 6L[_caCX8G0ª󟡚㝋8V/U (@S_c^Q=$%% 5R3~h|4JZb)bYH2#ƩR؝Bѿg %>!R^xc_!S?&O 亶 㛔7ì m1GXab~ZJK5r s=~CꜮH0e";7P]b_TB)KO6M/:8.dEV`bu[LV7W@RٛoS|*8(M[a_,UC,(ľ^Q#-36+CU`Jc\N9 ea@>co) 56KZ8b`VE./<1lMa' (@S^qbG]O;# v K࡭#z33IYa+aRX3H'2 #qѝ=`& %=^Q]Ebj^YR?>&6 AрqU]KP0$G_XabY9J{4(Z3`YTxUY"];ZO\*b^S@t( ԊשE(o-DV`Q]Yb]TQ>;%5 `f䯨4T0GX``YIN4M5ɱǢ؝σ>o#ATP_ b`\O:!?ε6ޛsbOHl4rJYa aWG0]9ýY >$ %Q>Q ^lb] Q=$H уçy6[2HXVa;aXH2{(3eWύEt#8Zai88,qaa{D@TQ^]/'+]kby$4Zmoq8gw3`{] #*L~   +,/1*07#+PmaQ"kvahm?XitzanC*yaHnj;y\QdO@COiyyr^P>)_)  v]||~`pkrte]E bWO?.&ZX$$5KxoN<1+1 # x,'#wf@/{~\\{mYAQDFH)III I%IWII?JJJ)KKuLLNMMN>OOPQQNRRFROLKKK^KK8M LG EEFWECCUCwA?K?@2CCKC]BABC|DDEGH"JqKLtN_P;RSSSS9SRRnRRRRRR RPhPhQSSySSUWXYXVS}R3RQQQRRPNNOOYOMOKOYN MLMOPP>POPPQNQQ;RRSuT+UUVWXYY%YXYX XWWWWW XWiVUUWWWWXJZ[ \[0[YYXXYXWXXX>X0WVW=W"WVVV'VUUVgWWWPWFWrWWX1XvXX@Y@XWWVTRPPPOPKReRPONMLLLwM+NSOQQTVW[]m^^a^]O]\\\\\\\\\["\>\5\-\)\\[[?[ Zx\!]](ZVUURNKzLMOTSSSRRHRuRuRRQRUXXUPBOLJHE1FEQCO>g<>A_DGJLLbLBNnT:\ZbZdTdd~dxcMccb`_0``K_\[VXOqIFEC<65: @9N4M0+.+&\#{&T.\4688;,<:9;@DERDBB CCDDC0B?t<7o1O-'(G"I> X CidF ( \r-a e&'{M| } f^AFozJ'%0ѩͺj3 ^  T27q'l bnf;+Sݣٴ#rȁaa򴹴b?WRԌ׈-?ZؠXLդպӡ!̈́\A3˸ğM5:1: Gɽdo]ѷ>`;lIfFbSP[tJYO '`]eV0«,ZðET{f 6-rD.UZd*A+oyފ?A6ҽsF0ũYuƓЄS;MܴVB1s+Aw=3߉w-߀|,Zև77ѦBAՐq{ɟmس孁ΩҬ}7f-\čd MĄêij[g›FzvյڄAJ!֥y֡aƟǷlŗBĵR߮w+jǩ鱻G"xƇ("˫͘I(QZ Iґӝ;#`J,h[On+ߧ` 2DGДʊ'Eܦ-ϐɻg ľ|2PzDrOzڄD3gR S&Q P e MA|v#3 J EԺӽ֡ڄyߖ)רӤr z#-]7657:95o3/,.0f.'" ۈ;w}tغZd1[dj<<@D D>82p*< 8|?C/M_UhaG  " 3 Z"$c"#(:-+')/587+2;)Y M1Fm҇UӲ״7ܢ؃"eTY]`fW . <)*Jz^lUq-B7MŅPIÝ"Ɖk foμͨם%-6oVwWg*^_$d轞ǽ*ȥE ŀı™՞ަHoI*̛I̫̫ӘՔ_ڻ-'ّ'RN Ì.dz]xO/ w*%  ~q4y; r S ()} w]n#H& <c !Q""-""" E- o + pe  ].ܹوׅ>ϟλrC%sX g)O.0-s*(#]$##T$$&),. /1331K+! *2:O.;x_FP=K):AAA-BDABA@@/A}BC3EEFH+JjJIFT?3($y#!%*L))1.11x1E00//1J45d6678;@$DlFH}K%RxX[[[(\Z_Q3ID@B?=>DNCS~S1T\S(R8NOG>679;Q=?>W@=8550!'k 2Ts Qd9p (g,#&Q((.( $;E[  dt#&%k"IW! Q $*0\7Z:72i17/#%<% d"%##'x)&(  ,H(  91`& Z b L [8h OSu~2ݱ*{C7pԫ[)ȟ?KƼ8;ahF=2ʲiѻG)G Ď7JѺηqjd5㭴a9ţR"ZϚuљʢn1˧@բu!HDѺڼjbȫﻀ˞͛ʥXǏ i$uɶN\АՌ|JנBڮޖ$1i{?_#YҪʼnxUI—3&(Ǧµģ$.8ܘUNU/c"l   J hlžΥ%!!)n8lBrSV¤TEkՑaOwރbߖLݶޘ5֫&L䭫X;wÕȻߴwQxԆڽ K:/#Fg+85|l8ӱd]* K?#cEXTߖڿk.FϯͣKt FҾUЦbVxg9׸٭9Κ5@3&PGmǂŘƬɺx6 ޒz3T}i8znuAY2eBϜڣʫ>2ŵZ ߵ`تԯOUez߰.ϙJûKqݥ\ڄyՍTÞ㳍+.I~Qpe{q |1+͗O_.q؏9mڵ#}?VۈROۉڸV}qk+k~e0wob+4 96 7 ysR 0 E"e ^ wJNcrx]J"^z #%(%*t+( #!""*#Xsև5֋pnk |!()O"` ti-Ӑ׭;ݽ;뾞09hڑ(J - ab?Gv^?J+Y=ّg.1֘BրhJٰض֛[ъҮӔѸem_l&݀ݨ|b=eɺk V `A[[B&]3OE-&2kg X)\4V9Y:;(>@>AA*A?=(;85u4S31/\/l/z///.!- -,l,,/38; @DmI0M/NM}NO`PPuQQgQPPPPbP OM KJXJJ&J`IHHHG4GuGIPID>740(Q"{e ##%;(/E<GK;JM9PPPuOOPQQQQ(QO_MJDi:1%+%= %8DFIQjTHTSdSKS1SRQPK=}. oC+]f]* ="2AI7NTXXYVJ= 511a,0C F!a 5 6f Or 9 vJ+?7:%ƦT;p,Ɵ0kH I =ՓҘtƥ}7֭Hi.Y+%˜33ض)~ޭFhΨ0nP6ŗ.Ƚ]+ٸ#Q10hg"yգA^CDC A@BC+EOF:HKPUYZYY\?\WPJHKOuQN%LxMRVPVSOMNtOVPPoQRTDUTBRVQQOLbGzDsD|FHHFD-EFGJFCjA<85334]651,l+(-603l7<CFHyITHMFB@7=1T+% )8!%)(#3%P)*z,+."-* '#"!!# %]'-*-I1F441+#v } a4ja{_D66HI\ӦPD2 Ғ%بڮւmҰEOia܌ݒ\3 <ʝ&xܡp8@t@roظ"4xtUqdQڂ׎?hү (ªƜYfR 0hѰpպ|ٌܮKk|POQ1  3]V1`cJ!#&-* .D2M5z5T7:q>A(DbFHJ/LHMN.PQ^PLL%H EmB?@K??K@AtA@><<<<=:75220i//(-)%'!&at3Mn1\!#J$####%&(,04^9=?l>%=>??6=:999:@EPJOS*TDS@SV2^d%bi^ZXWWWXZ[\x[_ZYYuYY.\z_x``>c=hmok`e`&^ZVGTeQN\LOK[J!IHG-ECDE^EED|CAc=60(,($ z{lHd+I vDqAejL~b8S?O_O@dc2X#of֩ѓΛΦ)wDfT&* 3$2hXw[ 1m1|!! ~  S b co !+12q567W8{875z/($."!'/37=xCD]DCBt?>>>=;k::5<<:;?GCPSVA[^^\ZXS$O0KFGCQA?o=a:&74o3d5`9>!BUCDjEEnEaED>Rc9 +\r=>Kgd |H9!6aw*L} eSa" a,o;}@7Gؗփԏ\͢UʲYpSERWK+Nyf®ÜDj2}3Yŷ(ŗϢDկз˹%H jtK϶9#-{H) sY!ǖ8tꖘ; YÁ2_}Eéթ=ǥtNHR>Z$JƁV'6.408xO̙ Ϡsҕԯ֦٥.!D:y>2бk*@4f?яj kŞsB$ķFajeJˏɾlb!e"9ɡNYКoԥvԹwVט؈0ת}ظrmgW ~hPk5ODnK:2`1߼A߃ۆٕأ7+DrO C 0PQ9sɉ{$yLӾӔԾ2<:m4ΰѡMjRCY@9  z ] tSVg_"x',2.-+)()+.2&6\77W7K7[521 1n2|11*2U1.q,1*^)((s)+..\.-,*'& %5$q! &E+o LY<)lY0Q"ۄ$QmpۑةlМ5M{vK ^ͧ)̐'YœFƹƅǭ3˦GɎ!ŎL%Һ .ٜܾߴO4J~~R^;[ D>!'.A36i65432(210U/-+({%" !]$'J*'.1394M3I212-32o1/..,c*"'=$c"G! I Z Y! i3L r *)M0f#Ng/ { &>Ud! t?Z h!@!> mPU !# bnv/;wj(V 5!*"*##!h U<\7bKS?QWEF j XD{/P-*@1gQ{S)h%UH'#l3(!<[p{^c|K)] ( ^fNmE@#0k}#כܶf S 7~r-t>Z#ހ"4 %ܥol߭ݯgܤs F oQmd\xPn1uLm6 ; rI~l|q X13?1 7 roivS1bUmEr6hٿ#Aِ~ۂ.kߟh9,N+;ܲ\"B2-lBewQ PK'6XEb>\>$\S { PO&D  1YeFg _3Yb@ONt:b S!y r-Zj 0O:d5( G?uw C +?* [ /Ju5  38Sw Os?u<d X 4e;1" ?(nO{%k h L l)P#j)Y;YB2 + H  b   b C = M Q  JjK/!!>`>f\U5~  "%_(V+-/23R5!66c7.76;65 53 20w00"12"3456F7^89:==>>?>>>S  pDsn H <Q^VI}$\>(#W YI_e9@:MC75+Ez=QC.S~O2uQyXC,QYIN * { p  w Q TuO{ftf/FlPc R qT*  & % a * p}KNfhZI| T =}JJdB>bl M L]/ 96C $  W AsF8Q1 3 W |/ m L +T'& }b |S(qhQ*m_|o or&R?!H v 2<b:JBq1 \Kw@\KCR|OC&b ` }B*kt.]8  y # e,|4SK}(}g>X"o~>!Ekf<FNA\rh0m%^h!Bd{7M Y  ~ mM$,-s PJewd="_G>(<R'bR-O 7 V^"  Q  p!>-9 I / 09y. _eI2.C @ & . 8 p @ / < 4P?Z>MD0e ) V , k  K  g 8 MM V" $`%&m&&$"+ rI#AYrB2aX6 d$%(JooG(z0 Mv*Mq` E  t  _l C y   J@>Ovl- I   1 H9H q9t%?*4Eri,D@+ <~+|nQl_fX` )buX_~T}[(hS[q;>G!4*.9w=r=I>'o`P29O\^j3mbuhv9dfl ~Sei@/==lwbfVuc! d]3/=EMl*>> MDOFGf+xiAeHzhY)"!of4]CBq" e 3   k P Kg C T 1wVhRXZQ*?}&$  4  N  $& m ^ ] c L e  ' a  { L ! 1r J1*|=kIX'V\ o&c ']f6%zEa":]!#$U&'()**)))h)p)() )'&%$d#"""""S"".#y####$u$6%Z&'"))*|)({'&Z&)&2&f&''(*)*++<+****++++p,,,,,,$,6+)('$" EX,o?n !R"4"!8! w^rVI !  ji8m !!!!U!)4 (+ ! #j$%&Q'u''&$#"!!# l {# w !>!8!#!!)!!""\##F#A" yIP WGc@ZF!,#$ %%%$$#i#"y BDL] 6!\!Q! s kr0Q\$iU1' !"#L$$$=#")"I"I"!! H>A%Y4c0WUe x [ ~   l 3Z3L[H e%hsf_  j/]x* # N   [dm). A w t U  D?O; Q > Z ~;h}d=@FVZ{ a7P`x9  O L.0('\ZG+ - |};!Rv6S W0R` C B GM8F^MP ]_tee d K F k df=b]"d} T D !   xO&}j%}%OXoR/ ? G :t E I 6 h j T }SgiNP>FA#ZqVKEsAK1 K T  mJ 3 gT(qlMF2] 0sc51[1F L ' r   FV)&/W1 ehs`FT ]Roy3klMBrbSI ; 1  ?zhYJ g g I 1cU~cF\u*6>I,q+Su3{$  % F }q6?"~Tc:#NQXqlcV>c}ge >o$1V$KG9Q8qYD2MIa V    pTm<W;%*}i2 Z Y 3  d E | ^ m)'Yr  QXD`\2X+8ZX>m@_:x cJi=2z]/5Y #  HNlA=q*Lrm 7_,/^)WEG<O8ib !"##>##$$$U$e$$$$$%$$###2#"0"!"'">":"2":"! v*W2 _ 8  ^ d  4>:H&,jzx!L" ?g V  R|0(C?MLYrh^7Lw * / < (U%)N+*OC[j>?!_vuF } [ z M V7" egji] #~QOPwxmt 8sY:L>O @p1}YOGVK,P7 k5n+ SC=gRXL Y P Y l2lrw ` l> v O Y } # z , )  CqCh9  U } z '=_o ~   2z/ L y & y m / M n|l*X `5_$  { vFLXl ! v R|x  Tf`.1HGqEQ R _H ] R d u 8 %:t{c#*gt@ > g s!LN>  i D N[ph #  E2 Z) ' f {    c P qd`rN  u~+D83UK xao)hseh3md~,xvs~;I oN lE%&@{vf_ i SGFC QMfKBrL4mpO;m ' ;mW( nA\A& "1sr N ^ G C  S w  3 2 ` { \  j +=,:>=ENuOt!xB? / h  9V,e aM 4 0  - }p-ml < )  o 8 j P > ' O\"X}}=^Wi<p}ve&-#z r^0T!RPC^2 k9sGW}nF{;fa0_KaE<I6^GChsC{E-j*!f'|7&Jqvh>{`Zj0)tL$0Un}r`6KY4(E0_pߒVrQ{޻ߥkScrQYqwLMgfY[Iy&DK@P&tw;/&>$B PDDcyS~x dCuaw3rByqGP|tu[0K+u3&6Wg?;E}Z8QO^ %JIHFBd'=6BdZ hud) 7>oTO\G|Ki\-)6(J:)o pQQr\6THIq=KPj3}><a-ge*NM$f+(Nc6xe($IWMM_G"Wl^C:oNqB:=r\,+VZ\ (C:H*i3yMh1!@W!l`{{/gt%e, -;g~O6AtxFW^js\ qGf',bU)saL]tivJKC6+I 9>hoFf#O33B_S<MyhZ+e3do?I|> XZ  '  A Y m   G * ; %Yt{[JM] l l T * 2 i m :  ic4)9R,:&) g?wxw|l`dxO ?#/tskq+phv)N!5O|xLW I  } c=1S^'lBh 7Z F/dO+/m+mfl}PG.}"E|tjHZqd^FS\Si3g#HIUgAm%ECzP~tT(1XJhH%I[C_9" ;*l8 O%aivK#4YI_=:Dah+{-Obu|.tVcg6StFIx sjBa\p-a* D( h`q\HJ_7B8UD$kZ0>*K/36vZb9H3<2tHB]6BP0M<=[a0D{i @qv BYY0@w : nLxX$O.*h:%Okx(&o;D60M@mbQw}`:\I"L|rh?w;h%NX EK[%[9-N $xfj[D0b}%%kruv5|_*TGU>EN 2gmgX^, 53 /o(0r #\4SsiKC"j|9,xJoWuqO_F ,>]4=ml|=mT2Bn  q + K S  j X 4 =+u Q  < H h W N J1 |/mP E . H + r +~2u3  I   V ^ 0\s1YrD7k l} PpW I+ndxh6 L   8 h N ) P   |  [ 9w:,(4G { \   ' c==b 4fhY-xk@L fh!U :us,}{lvU8 ^ @ 0 6 !;gma  ' 3 F Y  M  c7s8,t,5bu,k9n*}6E"# '8i6 |K 1rq 7 r3~t h C /  Z `68 x 0Vs%$14  a E ' 7 P | v f r Y V  Z 3 l ` L F   ? M %=Vai7&$z/`.l9eg%1V *hp$>yb[BX[d62wW2Q6 Pz,p78F{X q]J[3LO'B3}hRX,{Vk;vE`(#H u Yz09zD'rvKMUZ%8I0#lElDuS !n B }a z   # O  f \!'gH]@:MJ(4.PI\t%  PU9*n98+j_*Kj)`'kc=H;1^7uqB }[g_$my`O"`4=U"&@xaiu`4.tioJ )KBwOYfA}UP |sABQqTqA nKw;bm}-.: COsTF-wR 9 o0,Qi,9*_ @z;fNoZ"ZsqOq`./ xa ^/ 4w g85%+s 0 k'/q1 )cB=IOI{M'hiZSzc,x{0QLXb!$x`/~a v+jd.9~ |]3O]j(MZyx mdwue_*+Piea#\;z QlkJG3q EYtM1Had' &\L?ZfV7WE&L&!(WlNbRQ/QHk@"!OZa4>1)BKBisZ1~K vtgEvl)3k|7M dq{'8X59lhr.d:9V3/BMr#l<L}U\>~]Pnz: JZ7_k(?W'7oQ/}_/bz )6a'Y.MMd7 j G : 7ou0i]LLz8r|[Z3z z9==*l[fE;p7ztl1{j=0fEtd_`X:xQ# 609=mt>)I.'Y#s d~u]B VQ/!0v\Ncb?c4M> ]\DW13n "1 ~Nr#Fj;at/FT`q 6[/WH-]_/H;]zGY&^|\uk{aOz-NpQ@xCKuo";<+k0gAy0?y1Cf[f5|e3{gM_IZ]BVJ0LOdh*S/iwd >T[,)M$ *xe osi }C~dX>:gVbE4-jHcJax.B NAYD uiK0~EXw u*dDicaYZ@E|86NzaPX[ (Fx EtEOqYWJh`X8:k7 HRr,FM1mqb.dMs=+w*J`5>C!,{D&koMGzxx!S{/ D+ $hWVFqhoN 9T m( O[S;bIq5<iPiL)vB2D 2S?)%LH(*IIlW}?k|c|xW;k_LkHo 'PYo0 s8?Q;7}9 :`_3'\B+AVL[k1t-:6zi<84c`&J$ O#-|x-G"Y' kNpebX;GGiB*{/  7[=8gHNs1T~l<~I*_ 9:obBa <J8$d7)948g @7<lAob9p>l(.A1m2@&GbRA<IE>jKtU|[=0t2 h j Y z  Oq`N+$ W<W 1qB>/rq[1  1q  r P B ; Y U n OsfyZ:Jd4="&<m{jBxRAhqSC6y]!*KK<Y Hi{ }C |6lp #aL0~ *9YU27e _ b  [ |C$Fg= : ^4gE(wMy@fOgQ 'tu1c :6v7}0&"o[5CDA9RI'c "(81>Ip $qX N h#Eqtfh}d  N i <  & @VHEc1L j%(a|OR5  ]M61fpFtk&DjyPiU]>Gy(J>O.;8n9}B"g]t*'#,PD&`l=+H|t'XA^ ;9ElpsAQ4=.e9c F8p'IAQGvNp01/!+ dA K!h*}TRu;Q]*s~Ws\K"nGAGY0n`A)U 7 / Tu=$49AUORW qeL/9'!~IU^EkG&dP}hx\RdT"5=G:5\dC#^(h[1CfOTZWE_LIV, ,s{W$\).Efq/9IGt`&;7yeZ,JY"i" W|kw1 QnrIX i(qD{a+t$TOT3c-"Y",Jh9 R5W+Xr~.Ca&u_AcTNc$ r?+ 4P3oTaH>uzM3&ONh_FFo*L:7e WImff$JMDYv?:z?XMMdT KP}3 O$+Qf%(-EReLw7A i? GX/s^Nc7JlX;FEToug[0a08,!+V}joB D^zOXUQXG 6 ,sEc{R8B_hN1G1%dv)26"Z!"gLy p>pS#qVwkZuOQ<@>Hs ZA#Bo_[ Q~=Jy"[&C|Ja>=u6hgeh_';3~ANduH32PpFt_%l) ,EYpEo F Z  8 H   0  yp _ z  Q  + " m s  = P N %   uyMJhtkIf_R%  pxUgj-)wh`v4PVC{cm Ta9qhgX[}*){HQ W2%"iiH)'`a(5 L@E#vi.C^?i _  ) P " !   + + 1 :)C  7 o 1 + j = 8  w  H S N [  >I{,X 1  : \ i 5 ~d %BA'K  : 0)5Iq 4V6  T ? n OnYzG! S Q  . y~y|`9F,t|QL ji@>^]Uq')+dmk^gbh5I yk e/aL.# v%OTes9r0*qm\? \KGFeB&~ OQu+s{*< X)cyEF<50JF\26DW_zbkA"Io]\k>Wn\Y_5)e;7^)TQI!SQ<#;yA1A0}O8=M@f/+]4aD4cBcV~jqc s9-Ey-|spet>*2W(G-j6jvr\z. YjSu;_>"0B]ndrtzzilP-& }?cC+rL;n(*'Q))WUWT3/80PbL.g3o&nXT>r+`ao3b|R*2;VorIc[}x}[(km8r3 :vzh]MF!jmGL \ vc=OI?&AgzlOKw%G^r X%^8*Ioy$HqG/]q=~^Qo<X&_ ml\8'S^SVJ=5 I"=  UI?32|wn2 URQ8iPwxi~fg~sT70a*Ha^a[wUY'";^9Ri*f$LNnTEab~x3M,,  <ox,U-[NJD!K!6iRB[_qtw|^zNy+alW8)RS;fMkO.7yAo@ExXXg1.H>_G"l)BE)1TX}g_.=W.%4D6OJ_BWG&11\}G"kI^VUj(tkTMy5+V=:d>}]H\#?jIK9$p:{cQG6 ziKR0|6YiEef_So^1B0#!p^lX(h1%Q!Zt\)jX|-:Xi<OXNOl,:SrXO.~GS`qpQ6##0he oV| "Z G=& eN#gL~{!:5~ /^AH=U|Jzh" ,Ra? > R k t B  }i>h%Eh~LfB "/] ( 3_/o{PHB{W<h?=.y8VJ{z^Tl8%cDR6BxcCG?_9($5)-KltSu==3fOgoOm*qs3~;=km=Gm C 5$dh) 1b(t[:S_ ,c5>d~tN7& ")C`k-('H&{V$jl#[/ n^V2 4e6g0(Ng>GmnuPTD>,AuJ'H&9  (02`F HenW;==Ty [   & + *    7 ; &  . WE*_5FRA D[r K5 L #?!ePL*kr&/YP{y|h j(0E_o*&l[ E~Q}VFbcj%WqkubKSV#LAyZt>9Al1d@]7xw<DOw<g0=5_'n>!p_}^{D6Z"mV.Az[_  y j B W ~W@?%k(EwYbn}(Rf,e|N^9J>$2d#ZqS'X`8# ."n{L IwWv]> %':RD$My{rfc1g]5I M(6`: m  @ [ZC9AVY  D E H )  /:p`r8' +'(;qDG}qN1W~xe}yKZ==d!|8Y96)0FDZu"2umsn6qwz\c]..r%Vv]S@/LzL{ 1_2"Hm>L*G s;x{J91B0,"Fx'uBcFiyaJ!Kerzpdc;$3AaH[_J|ix}i]THGVaz@LzCg3zyF], %7:Qb[V0s[eec^ZP=C}Y?))u7 1KiwDm'gq=;O47Es(i0LYtn[fN8fbP@:^ A|YsxW; Ek0FHM@rD+Mr+MrgLP.Nk W$?g%_xx3 79HBai F*?R9z* u ! 2 #   w { { d - / X!PitU>!G c xE#i9tkY3v'QzD(?u)GD/#3~Ft-T){O!Qys`FKG yp_55c+c-\;n6?HO?@) zFP 2]}/r y6vvu *p%Ibmvv~nO@.j* n6(Eie*4Qx10VToHE0C% Z?K*@?9k   ,C^sU4#Ek{0zziSC<Gb=EV=,}uz{neY>#fwfpe4v`vreUD+*(% Y{T72%@FWjvd*v5N)T[UT*\"&N{!/14*#&Bq''\+`'ub2!wYE'/LP\2iD C)1![S`0%.)+ X];\V];"&<P\uGHo{u@/ReeY;sM0"#!+'  m> %3->>@}L1"S*pg`X`qq,Zi|r}pP!wbN\?0-&S"CSegXLCSS\cNG,zx_TINZkTPRK"e;\miy?xL":h}rpaWau39J1hQlWWQ/  \) !W K J]Crh~qjeB-2ra;\.TL0/z\?76#&&*768B@@;>KPWQL?1S2SUbnn`T<fY3)u_L<5lTF7) "5Tu(\~lcO7*) %>FCC2,""5)WC;fm /@6&xmt{qON?9.12TThY.Dmq}$@HNRD* }iP:!%7h 2Hkx (?[riZD* qR,y"7KZaKELaiovxvojmvvzzaE0 (?TamrzcR<(A`s|eUZLA83,& !&#Ej~~jjbqD7R94saG;)/Ij  !6ATRLDCAAKUiU`qgjaYC@7.$ &;QezwtiR6$}: ,>Qi~v]O;)YI+ %)**.47;<@:66-#  ')2LI\XaeQLB>B. +28@DC>>?;3-&#!!""%+*&%#1HLY`ijUMB63}vx{-DU^flrrmh`^ehnvzwph]O?)"C%ux~ztrqq{pB\GD(+%*!(2HUfjmqmmqlc]SJBB;- 3CLSYXY[WPJGF:@:5-( (2/ !"vmicgv&$$"&$  !&))% $"!&)*./.+) %3>GNTadjlmqx{~xuqnhdhjpprrni`]XTONHFKOSSSXWUWU]_cejhay~{urlifhhnnytpLIST@INFOICRD 2001-11-18IENGXMAN98ISFTSound Forge 4.5criticalmass-1.0.0.orig/data/sounds/humm.wav0000644000175000017500000001262007630537344020324 0ustar danieldanielRIFFWAVEfmt "VDdatad_```&,lJnAO!An<)!`/iCnq[ROMMMg0j>RZ]__/P/@\W'>Gn<R m0 Y)[(>i:(!`|BM % 0  {LnPemp#R  P>pR< z!Kj#[4/كѼ\)¼ڸδs̮ɪWn̜:,Cŗ.^Ӛd=]cձG8۹ :y;Lg93W\ f"p'+_04U9=LBFJNRW[_cefEgigwg}gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggfc_q[]WRN.IODm? :4/)8$ l wDSM?-Lj&׼Ků9e!?ė.ۛŠ+ʷójՄ}iU2?K&]9  9~nC!&*.37<@EINSSW]\,a ef!g[grg{g~ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggd._QY SL'F?9N3\-'! gj]XVUU!$w!0Yص(m~ٟݚ*ߗ+ƒӜ٢wy8e - 3 Q %   -b#)/5I ; ]Op !'@-2*9?FM ; : : : :    "'I-x3]9?FL SZ^bd~fgYgqg{g~ggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggc]V OG5@81,*"* ^ 2^Fo_YVUUgGJz*#&նtą9JŠ98×Ol̿&~?    Y F > ; : u m j  - 8}l$v &+Y1 7==#CkIOSV\XcefBghgwg}gggggggggggggggggggggggggggggggggggggggggggggggggggggggggggb:]WP7JC=a7q0B){"]. s[FLBZ- #wE2*xu}TsLfBLƗrwF\ӵڎuUy?I v P [ )  [ G ? S %,83B:zADIFQ_Ya[ef-g`gtg|gggggggggggggggggggggggggggggggggggggggggggeD_WOGZ@8 1(VH+oe[Wg"zFycZW7ІǸѵa;.o]ɗ)`\R6.6 V w n k i i x T! `(19VCL3W&aef g[grg{g~gggggggggggggggggggggggggggggggge^,VL?Dk<4{-%)|g P~L|S$'a}ޚ|uD:ė1S3j$Ѵ؏Aن٣KMb%Ԍ4?=فC7UG /O!'-38}=?AD HIK0LLLK@J4IGBF*DAw? =:631-G+>(&#! hAPrl)uD 6!!"!!t! ; v*>h  kT3criticalmass-1.0.0.orig/data/sounds/chrblub.wav0000644000175000017500000012216407630537344021004 0ustar danieldanielRIFFlWAVEfmt DXdata !%),049<?BEGGFFED@?=;962-%"  "+3;BIU^fnzztplhdd_[[YUMFA=:;:5,,.25/0,%"/'%!  }qg[MB?7/*$',04\1z^M)m@ AlGr="$4:>.2OeW*<%|!j^gnr&'GSCl[[.lH# $1 P{U;,4Nl @b|nl]]i[CCP^z;zb $:Md+l\{bRAnW)[nNh=#[ 00u}7jF`*FzQCUb{)@IX|_doix3YPr@ l3mO! ':hHv1iEr&JNz&v6DgunbXN6j@4,oZ^}/f0GV^i}pWbT)}4#=Z~g65*L BJ"n,Y` ,j0740'^lCwx<6T7UF+Ct(GF>qiy*oo2@Z{C`uWS1rf:nI8t~*/vc[ie4? 7p=YmX.E} A-^&eV2`x]xo* )CV~9-vH\jh(ahf|- x]'uL^p/1y4:=#h-My&}~sjR!Y  p,jA x 8 z9 t p z 0 B  e f  5  j 3Y AN #| e 2  {k2  e  !  | 1  *  % C ~ f L x Qv5vjJ'jh';9Oh.0-HhbaGl{7g%E;m{'s6-<$(!CI-ymH<YA^x<!R5](`JaW7SyaiCR_3`|$+NQt:BF)/E6'X,+(K96wa{>Y )X 4CL>`a)nd=qd}7?R* =*^   x I Xmn G JKi0 } s 2  8 i;B H EJheb?vfIg77c[n=hJr$xp&   P(}Wku(k/_ }+BX 0 : a8r do;]O&UhQPR\DZ|A7J8pLaCL~R(I~E) <;ofF8; _&-( ~dC&l|ccX*H&nwjcCXbI*x#'G^+3}Q7^#  X'0hcy#h bWD urWo  >t 0 0 y '`vFd4pXD[gl0NO~ A_7 H a,#} "n%"S"$'](z%"#9$e(Q)5$n  !:!U6F0L q~ 0.Aq)RL/::K7CܲԥОNFJrҔk#[hj׌OؿQ_o`~wM B2}M FeV\9b(lVH:  ) H H Q3k6L5'8I1V E 4HT{?ccf Kec0h`]ZVEp /^gMhI$:%4 My *)$G+++H*+1Z5|2y0248t9 :9o86:6f5:56~698U4367O2l+)a4b72H) ;"# H )B9rwn;q٪MɬÕ DŠˍʝ=eĒ)GǍ!{ˏvĕȀʌˈ̑VѢҭ,sYI#)(=$`(3_95(+3E9;>9!7a6!78.;<==6<7.}*(.55%&F& Tl%guܠv݊B3HӺW\j{,qʣҀٴqe^sf S&T?: N"-("$[06.- !p0q897635g30-++++*,/22-#b!!0 d V:="!ڎlt@f ]&\v'b>/=_MSX M D ? "u"F(`"5$G "b C <. :kF0["Gȵ F-ԕsݍk< O  #.3+k")5L/s!!--2.+& 8 ?3^""!; e^)7* D8 #z $LB$Нgzӯ$ կ''ޱͰʺ~MY!62T K}-) 8j  ~2  .^: ] Lphnoފ(X\U3\5~]a P?Kpf2-IjDkwE5cqMH - K  O `?:Pd?qDFPfGFD vD be U A!^+ )9 f (*'#,'07j6p*g&.88' (5:-"#3*+"5m ^Df_4}ĴOtad:įvjÍcèåÁˇȕ{xO*-\/=4]#4@@H@7 8?P@BBBCDD_FFGGFnG%GFFE<9p>@>9)/1794V" lPtIc٨Aڎͻ̤̳7͏g-ːʉFƓBè ֫ӣA"% !#s"r"'01]0.3+P)((((()I+4-./Q1356477j8987653i+ MG T)wbj 2CXOj֍U~{Ԅ*מr!1 B8*.@+&/+048A8454O5+420}0111]0//011G1182.l&@f sCNzݓ~y׽ Y˾ۿhȽÉѿvҁєл ͟ԏ>Ҹ3BV *'ANOiD-9:CIdFOB>u;85y321.)-+#+*&++,--.. -&/#2e/ 3w GNƺSﯱ+잲;VyNšJ9T^.ΰic)oV2Z\ *]/04>LS/KB?LUX"VQR SNPjMJHEA>;;:F84L2'"S$+,= -, { i|{޹Cv.}x#Gͪª3C7'MߪFfLm R_RqSH - w2_/fhBhѧHx8s׈S٭X%6p R P1!'e(c%%,,M9B.B =73`8/==Y:78R86534[4i1-y-.1j2_-%Y'',/a/'q-I=\xX)GپvΣ]ϊ|͓Γ(ѢѰjmкԔ^L` ߤ-/cX83#x i/  ;a  'O8QGr[2Z46'Cުz1ѿnōtCb>uĦ29ȧLɭN=v xPX"$s*1228A3GCBFyL9RT UUVZ=ZTN8OTnS}LECDC<1'#"?lu>,~ԺuD5Ot%ɼ_ɷs?x#?14.O-3@PNXQ]`dj%nEmkco#ywi`ZXgYhk\`LED=.V A syCϟÔH 0Ӌo9ҩe!cVx#(-5?.E7GI4OVVQKT5%ha |~b"'-7FQU)UOo@B4.'|b !97.R / ]J%76DHGEHFQ=/$!Yc y$Q*x.'),:M[-TD9J63(K e,!/660*X%wj1j ߂:eI L:7e8NF@#A[X PP*q F V lCr  k$-[  :c!<L1#Bo'V7T~ :"1E D k x8 ~%!!T  M9C{]Oau lF"nC(X)w] 6J2$vjU%PkJ7MT/`ossC_i&kK  %$!1#N' &)'k'*2E7B2("$2(&$!%!" %u$C!  1 CZ5mbR״[MԄ،ʁDμizӬث1qާؚی +)ZHN8e& / cS  ?C=[-EB I .+im WuQT4|R7K A  j nt]F7(#Y";!+/j"Ne  c y{ h`Nmb]m].@*2y=a fD{l j! '*)-)g+}18 <<;:=\>@DIgI+HGHJmKJdHND>5A]DEFE?>CyGxC83H21U._'H%'S)j#E#C*> Nބ~ˣʂďۼнv@^Dz1"ʱ޳7ǴͰρ֍"_|%V9n #LC 7$0*/,((W0;66102\1)!D%M'X#% po !V(-'f9%Ek9Ԅԅ33טiͭ6ҍ ަ?~2rjm&8a,)!dE[O'& _ C Uxt  $\ C)#a'l)' l>'n.(#"q%X.0%%15*l72](X Z(*e(%%I#h!"$$s _+uL{(}jykZ&MFR GP^}_%<@dg us ';0&p'b:K \  6' {+Wg`$KmۄܪԄڬ0=xհEVa}; *cNmGUUy4+NG95JhS2Y Zl J vR?  =r(6$'%P!79$W*4+Q(c$!#R&(I(W%#&s(3)(t(O(&U$"$'(('!R'!(,'PX&+)# $#%k! ( $$!z(&Mrg"=' &#+ /T"" ~3 e>|Q L8if `<'8=>"قӱRhҊ =UΙu}hgΓPȎy uʾ/6)*齖)8L2sP۷MJuP̨‰Gnʦ*Ɇ]8D7jR>bA|6J  cI!73 -'8$QY<^ 9>el= % \oXfuw)%pfw+vnk g S A] {  cMOl2G 6\ H]?d9E ~6 I  ` g} v   / 1E4 R<zyz 4^ lO)OM iyhg  Sh<Uw~'?'J l  9 9 yS; Q fmr -eS w9A},|`22 =; m~-r[21d,%Dk!)qgxGQGVgZy}1a&  % [ | _lf  W0 6Jw.('`q)SH# g . % kO C$35pfWB'i`{ %'bu(OblB0cQ >C tY   OiT j Q~`D]fDHu\*H-#&8t+_ ] 0 P([ {'\@LED\SV-P  ?3 q  @h 3   lx i( qnI "0#m$<\[  z - _ et5:_A|9,Bl*IC]/%ZbI= ~w{\T0P Q  Kq % A  a (  rXJ|gcpHag*q#|ޒ.1ڂFذ٥ً֪֊ۃܩ#(ܩݢ_ޣX3d|~Bmh, wu<fU """ #1%%%%]&&%J$#%i(Y(%" "z$# BsgZ i~oR{5Y1cdf+)iAA=!-lT*T  G yD b Y F  B,XpF[ykw~:E" d Wf3M:n7lRj`/l'A:.XZPv99{jE A&6 YvBO ; 2 *" &2fpQ<iLd!sU<H6_*R`(:  % /0 p    Z bu D M E & x / >  ( Q "   V  _ C  ~ l  G@ J7(cR(b"nf>i"7kh8un&5YVRye8=r1ݦ\ .(!6+P7Yv< ! o  V :+GYZ_b2Lz*~7+ C   ],np|o9\LS1*)mdlBYq  !  9 ! x #~B-S.km^b K (e  < C 4 Sx5A'g.>JX 6E2) *=vnbtNjC .8 dX/3ya.S 4v8|{.DFkvSH !R\ G p [ w  7 U ( C !T"| A]PFY9ڡۿ(أi T%:۸Hڣ}R܎+ ބxJR\YeKp) . x d / W e j"q0s{7H~j,v9&a*GY~ka&j2PJ S N W |n4q7H p V d( LwGdITu* " #EFuGbOq"f:JZn([S?dV]}F 7 C+E-totpAM `   PvF> ,7K%4./0 XnF]ٞڈvsq\ED?/3}I5 + U * b t  a/75(ZL.6N zfzp {J=eN4O\%Rڎo8a)Tױ؂0گQfBgCSGP  zh" $%`(* -.D013=566 77#877/6#5421M.+'X$!E #mSiJTн̤cqO|0iÒDɔЫ\9߲L!i (|%]+059=@+CnDDCCBA?5S,!  -_NܭM@]Nȣ^y!b ˵l<!**5?{GMRRUW\X/WSMF=4)|Yډd̤O|ڢ"\2n[ /.9DBMTZ]][MXcSLrC\7) VߗLl1ٗСh0Eoj%q1;ELmRTrSjO@IGA7m, >߰HYģ 4jm8ྤQP +[8BCJLRUUQ|KC8,d G K߭ "10>G4OTWIWRH=0"#K aF BBѳ&!0=G NUQROnJA6)) fɽNo '\~ d(a6MBKQVT5SNG>C3$k5“G*љ`K ,y6=5@@=8."٧y\:׾iAl&f/k57540'-\rQN< ;$x/98>FBA<4*^Wg 0;*5b=APC`A6<<4\*#ݸFܾ h`!$%x$* =ߘB+ǀȼ̚܇F 3  zBƯBH5̝գ-f) *t * ђҪ־ i> n eJ 8 ^rZ] eI#{2h Qs/?U ib,%)E'XNFyzHiTDM%FX\bH'qS [ 4e # (N "` f  H%HSN5v(>Mx)@xE71l&['eD  dE3U?8uq@&z1 5 %$\V x p.'3l)Arg\i8[Do9}FLq5+`wJRQd(?-|F%'|lz|KP%YX(GqL]?aaLxaYcQ42InX+B6 |3+L|_N89r.+[@pi(XXr+Gl5s G|%,dkE O00;rXc_R  : / g q 7 { ~ % <c` H 4]\C9\Y?fdXa 1 5eI6Vxx[}n5DQ=LGN9exax A.r+0wyKWhtV:3 5D#>Y* +p7kP5C~V I&yB ira4%zRN@ 8  B   v t  M  -  F w 3@]{9\Xb_%q;(g>fc~ v o R e ;1fY|+y<22~ Tz=,i0FzHp!&<w]ee[_HeZ X% Z< +g P U @  i s l= v{XB`m09V fo@s3W3j3C9~ !7~+kg d ( Tqc %~I,)/ w 0 uf"rSDc9#Ejq?wWOgi/S*FD=5E6  x =ghv:KR?keX%W'9"7Hw:~{m^U:<<*FDIN'I_#sjoxA4CYV,t/8'b- "A( pEIfE4 nh`96 IlJ$EY2D[ `:j i|a8H[7| !bZ. @tS O"YN(6Pz  9|{nh Zns;0[h XS:v o0s)~?uxqWN #  ;  I P P R x |  5 ^ysI VFNjb4mCD&YJ\v,kq{9' S r H :vz:~FjW:EN  F A  |w{XW*~*e~en5 8Mb9%!KA)M^(L`}b-RU9[y'AqsFqKH_@F59*S[./(!<1p ~GltzM]@knz~NkP>]r3/2F<T8vsa  : [ X ? w 1 "  f I X . ( 6  Q qAh7~MmY nqnahp$+Rsz+l:%S%y x   elF.7qF3>)>!A.x z  m{,>I/J?+h/=BZ-*Yf~a>U<Rvz {^LOW7 nza(-")P*Ud n  .  4  X f N  q m WhuHX ai`,4&~HR@,C>(- n']@+FTWb_/{-G7[TL1Vm8 ^)b@hAJi{vZ0sB",@%U{IL8`n\j+$ \L6}L~^tc)b0aO{GQ7JdfSW~.:BD3A=- =Ylp&~R  wF, @ _ > E * $  0 p @_)@ekA7EK`?2*4{H,V.`L:?2.%SpX "Y:1SI 6v%D_5H_|.j<*-dNL&2 =pTDKZ:.srkw94AxcK)qy9}zUg tMf YX* p>*#s&5.3{bJ-k d=3Kw 0;-fE?~d[uP9J[zHN$ ]#yW  / S t h g ) tC--b-aW v#2FOA~'\ Dy.y| ib8P,EKK  $ 4 % _ e"@o/{Xon f)^B!pM2}/Fd1Teq  Y !  & 18ffF&1C<7G1_*t q$\\VLW {$=Tm m   y @'-&9I: C7E P ) _  Kg$ i/u dEu)1/gFN,%b_4Dh]HV x[mX~o66Q"HI?<fat?liosxgh+2`D?:jdw2~k4H c = Tj@M6@4K  1 7'-*(<1hBhi݁~bNo׸זp=&ׄSeqB#c3DK-p- sL 7"+%'*k,.02445677777796430v.+(%!<U c+\p7ӻeGZƻzˀEЬ]Rۘ, -pz"%%'()))(8'$!D Kj֚.<š!澽m 1]N1%=,=27x<$@BiDmEEDB?h;6'0)"G  WYɪNFhMdȦݠ' 1&`.49~=7@AA+@?=83T-% BNіܹjMӼC ԋd"'+16:=?'?םCo d" +169:=9D5/&{b)ܭӽ̷\ȱ.^?hH< VC&-{2y5V640**" ?s{u&bϥM݀xSF$7+G0}3m42.c( L98YPԓd^ $' (% J$߼քТsF, Q!v#9# y0Ucz a"&2(&"bgUGT>F6 ^4FH!5" ] [nL*% hG( -e;N3 O h# & gnXs= :vR{>| * - I=  @Pq>:"  < P2@: l kOkP5\:u@ fP] 9i/  ^:"  Q,] R ;%-S >  mN B 5RB W |GU " kw-~#|H+c+eY 9'k6ZwD;N%#<Sc=[ZI2 < hRNiywcfe/NSo6E+kV0*uDV#3AA,e'|+85` h),-f8U$_6-&8:2??|6(q.Y#gO"T.#a M X ^  N h D z /  l5nx-w(1O@)?M{vo\=Vz\) v _ 08Nb/TgF.^Y#kS T l H 9X vXyL^7lE S;vE2y \8!z"#|]C0->e:7:x uvcZ&( =SLCynmG'}~Z(NIkjHukOJx:NI33H}3i`w@  @ Eo-Aa UMNz&fYIt UCO  }RH-M0r}a]xhCU2oZ;NSo(WAz[#X`b, r%$W3-J K;Uc7;^>ws!at,n E (  h 6  v $Y#.r;MZ1J]hzo4@X0$j#?$Trxkd%mFu>P;v_Hv&x!>Fz43O$,!v`G~W|37""'.0GD5zW_UGYhQ-{$@a~A,Xaam%!4 Ip4.u,"OYDiNxi7=Y #!aP  TB~:1_O3B0Ue(AI= <Pz_e`#c1@ _ w s ^ U H % UK+m maC[X(9tQ"  / ? ( `  Hgr/u'sy)E|> Pb8@.~ R(nf0AI#Iq O j  / my8m%LD@OaQgoiM\_[C #I.&#;Ue/msRor N9#k :xa }5YHg/C4WM~4f+gM[PR!N$Afby8,OR$6{_bP1}aXLV  1 " # [ Q h + 7 f E =    *Gmz|pW(~?,s b/S'2^t-fS]9Z=nirrh/%d5a`xx|m61uq\3Z'UAtD n " ? A _  x u  ` W~DgWO|}~=%e'F_UXC$Nt]Ak6(\g1ZEv?A0`>4Pl,+rgtt4O}'C*R`.: ,m`1I~w$.DXt_xP_c(X>IR4&;g]dH!,`D>-NR7"D(S nB+?%.{7 YQR6kelLXt ?_1^vCTP;~.L="LWiY|!5b$ IoLc bBT~<'@8  - u m R O O ) a zb P4T<8,zg:>yaqnAAIdnz`,s 67ja&nRJ)/A3l6+$TR-b_lH@ '{}f-U aB W$ pY[n" N+p 2Uq ,><1G};cfQkk5@bV?cz/sW)}X8DHC"gP10aUqchJ(P+Vxd5()g=|({Hv~spHBfx (:${Y!iQ]}PV{& &Cqm5nuByyDtj/?,@rS18;0!{fV03X:;x$lnJ)?nDa o,^O"-zJwA^(rMz< l[vtX9:fuW~;RLWf >$ I&F~:FSLp{pR32o9=^vh{ "o/;EiwU8zrd&0y 5;d)3B:}PUI(US_or#zwwsQeD0!EsQ~f nY1(_ 3>%fOMAN+ d  d ` S f W * R~]Zyp =>t v".u.y_L7cydOi^#W=H{ ;zh$'%TVe/XbR R!pN7+'#>^l!N)@$2e5/Uix#>7$tO0vIO\Z(!0A\{6s,!A> gaHG!CJJQ`fWHAEUS>f ZI=.nM'`B/ppvsG|P&a#s 'PsD<ZK)5t'x7~ kEczX4 /pJO|VSaw J m0| 9 A 8 {DPL2lQzx P  ZWJ[=t|2t"#\#znoT^y aHn"J UC[0)~ O-{$ PW.:RU + 1,$y"p;_}2EN HCrXhf~4~ R n@">d$  VK<7|4m+k8 z5> p+`;Z 6fYHG~x, &e\= q 2T{{vlg H lj#P&Y =3U%{3B>"j \@vZo  |OW( vj UX f*i` 'N_5 W Rz W lvbA:: z y Ld'k*&p :P| - !> Y CMa~ ~ Q  y*4UWXdQ;V[V hHg.@4]0r=&R > ) v 'QP,l;@S!c8P3 }0x,{fn7i{`[$(,!uY0e.d-AJcGIs%|$SJ6k"cLmCfn1`{Hcm~[9XDOV=heFsFn6qPA3 db=;h"43X277!*9NK5=rDGvn{\gn$h( MLUtLIh:FP@$#VV,(H,qg=un>sh; Du1X]I$6X[=&rI<S|\C"(W}(X|iHE[wctHX`}@N^^B>+@^pn'+#L)@[mx}29( u`B15FOOLK@ -Hb*g&B[gp2q#Xz[KKNH5kedE|)y_5zMqK8QoIcm Z>/rAk%;O`ss\G9, N#f~>X :y0n*e2}lff^K2(9Lp!]>o$nTR$]$OuuviA6<:Da lD7CD3 ypd""%0|fdsa>..*.G  " ,Xxrp1QPLXl?a}Iuy|]3cL@-c'l3TD=8/(;A. ,Of{>k!?i%4AQaddgmthR>/(iA.t[A }^4zi_WXR?&$Fm$Q)b+Pr%/:GRZ[WNDGVeiaRIEACL^uuS-%11x_H1!!%/7???608Txyogjqt|uw{vqZNJJC4$|ubB{gXRTQKEA@9+ &Eg UDh &A`y*Lr zxub: jD!pO#y^A% L[#?hFp Cn-7/pZN@'n_FzS[(e3j<;]|;e 6X~ $<Wff[LEOUL1 V0tQ/ jAybH(%=XwO]how|~yrkaZVM<* weS?-wncTF=9;=6248;@FMT\jw#1:I[kzxcI1lVD3)1- (7I\my%0359?A90*'()%  ')*2F]o}hN7%n\LHC4 #7N`m{-@HKRbwxl`M?2$   $-8CNSW\``\VRRRRVZdkkdXOKKHEDDC?9-! !,:GT`jrz}zzzzxtphaXMC;2+$  %,8CMX_ckt|woLIST@INFOICRD 2001-11-18IENGXMAN98ISFTSound Forge 4.5criticalmass-1.0.0.orig/data/sounds/puididl.wav0000644000175000017500000010126607630537344021015 0ustar danieldanielRIFFWAVEfmt DXdataB)3trWu:z*N4@?<J3:*%<*,,6%  1\''32H''-c29/'$-9.''-6CB7?:R\02'1-#%    % 'A4#<J, .M1 :    )(@gF|}s[tLo[`YW~QapP47dX>؀޻Rβ8گyѭ3ݬ 3w!񰽱wv~ڹ&TT;RĖŌƓNjȊcC Yv 7/)e&ݪϴ(_Нa߇uȉ=ʀebŢÇTȶc!Х?]H'{ Z$ᒻܳ6Pڸ1š6mGU$d0Otթ1H8 S >$F4ef>7-kKe 75ٸGyH@fMDZX9#a(5I]>͊[ԕ?GfJVT-GS;O3Ŭ/Pb<'5ߎa2 ֊:$] M7;; = %0\B@=5t:Bb)'(6!| H6 3ѱPb7B[у,?c>4(ǡ%2:o!4>(d ҵ"6 x0CF>*+DMH?@GE ]-GL0|PѦ#1cM,>8a>fΒ-m$88!?&:1޼#:{p0>@1 I"/=BGG$4 FIKD;<-:# :TQRP) Fz#3?7 0ږ %O994=xE}"1/$J 0),Z,3ǿt(:07;r&rf;Eo+f-H=P/pTRR?JUXR- BRA&q 9"-0 0)'7Z6#83q647C6p8]*%)m"q->c;X?p<\9..BG)CI|80""#]>/FUEFFGF-c]@6D@9@H<'@((4<4?)?@++XWISu 4b6,8c,=%?e?uCK@4d==/)BPNQOQR4@N-` j73INLMKLBJzLAl={#.2305#`1%3/E#  2:=!?AC!GQ>="G (67=JNO%QRFQhNRSSISRCHc2!%@9D@ ;A C?=(  (J++-...1^su Nצ׳<-7G?6$' >(06;:s7%p-*+%*+Ar܈тѢAI b> - rSqb^w#D.3e11I:xHQRH:2}3;IREQ9P,NYL5; ( -uݭ} A !$ ˺] -.5[-z3 2LVY\I*D0G,J5l\kTBKԙ !;##,-,-0Pqĕ]&U69OkxZ2p)LIZ'Z&R6=))2 ?"; N |4ge}޼0bL.@DS5h Fd -;[B=+Y|$~A! vT O/5W@ivtR2^;-6'Ve456vB' $ \*~f nt 8Mb  '+%sr y Gm6!"!!h;y{!9-͠q=ngj^cr o KeD-7R KAzu!r \W#w-3-!X  PBG %(p(*")&r2  @ cM): X l  .%( ,T22(GT0M 3)*'#e CHI [EayRc4b/?H}"`#>T) \mK;XoJ  2/SP*?e P#r!&E)%  R4Q.Ihi" ! Hu`  .]D\ D XF!9'([%M" <3  7#?Qo0<  7 Cj  aSQ)-$^% +H + 5~#C^b=/oFQzwPwICF]w7VB|\a.o< }(coI l [    2&yF+ l H +s> CwR"%V#~wh ;v.G j{Ntx?,"2  Ez$b5h0z` /NOh`^&qQuO6X.'8?5qVnQJ`L\ e߀dҪ9xi[9z\] L:\ { p v [s?' z  *t8q Z6p 3Lnv#6 ,?B&",M.4-n)$P"" _x- Y/}Z~L  .Hhw y c(Y#K c.G a"Q" > Hlcۈ0G( -U=H _|PD# ?H!vL .F hCfr3ݑHܒ% pނQXSK \ o ) E d{N+G r G 9#(!. n [ -pM% M ( @#cE&P|< ^ubL8&Qx3 m0)+[gz3P  d fF$ -y&AGX-M|~}Y 0G&`.QNݚ޶1OjnLֆL£`¦ٮa\otyPWK}קjqkKؽޢ `q!|b,Pn8$@nFӝ 9)0طڅ#^,h#.ޏy8+ؿ>Nү)Dai' E:  BQاFL`˓ʓʏHС>mپ߂cU` cK ʜzʯpփSZZK$Q | {#&ݚ՟ȸziњظ`F"]Seef]kQscݦT֘g)Ad'c#1j"R  b#' 8t1IL5,j2%Ni@1Xi\:]fP_&nN'n?=%]=;'d[;Qx{ mXz< J s t3t Y`W'&F   /+zsUy`n`##~c j2sS`0.rASo.WlSG ."/.wugr#$ky4~ *A5@']L- _"/ju.zR0K<yV G1^]yb A 5Iq +qq+gpdi_MJG/$(x"rAa8NKwcU88U]u:H2%x)(:#^@uUp  h]tc{GO 72qI8Jx_q } n >9Y <]. C 5 N % {  xxX Cr =Ut  x~:fA; X 0,g`\J_SZ ?5 S FWm| *{K'g  x 9kJ;7]\($l'eYMBL B  u[Jv^eT1&{S,&*86hOVH$|fc`qe{;AA^}|.1h\!mLrk58O@m=Lqm{K ?4JCsj ! p3*7vVK , ;  mW3!R\SX r)E}JWu =4#jy3T _*8xNG7+oe4  xTvf(y353 NP:TqC<L~gxe#IDqD,4KRpNd4b'WnVeR@(1}`wL /:S4ZP+}D ;?T~}(xt4TFvy~ ^Hkbh:CGB - #X?b@1Z [|)t2q\zC1J]M))If^o%Zo%eIJ-%jd |#Vh;|vhpr-,}LN !~Q  W= &]M L0`iRcBs92: >xex v _&jf%\a |X fOzi=c/ I   ?WA@<   D 4, ` o  O  K V /) 9MC 9  R,)UUc-_% Nv?pCUy &K #BeO< k9jL lZ V\ ?I  X n ?GN3o 3>$ Z!O  USx1}l V+&D yI| $D^O#9 \ tK^/$ "Z^& L= ~ 'U> C+hzv xr|5   W t\g n J + XR.  y717 L v]g %A> M x n3 D]\ t f ) r r{!s$d%%! l a o$#,4 9y w 9}NuZ ; Q ?qy(w( :$!W$&%%X$" ] A 8'ex" gM Q ;%m#B\W R9%g*@--l+P&k )` _z @'^   *`4!^$s%$# $j eS D(kvF 61 I  d 9?pZU IwG !p<h 3v !n,  \ = Y !%}"  > Yk.8b)t^ 1X Llj @ 2H&[ Cy  ~ =B3k g Y:  j-0 pqsqG BVxik}6s{+);&P(WLVy5Y_#Nt, xOb && = }q:E U R 4 = }v   tCHvSpw0dE}  O {xF'WH 3 [ L sau."} @s D 5H   17 d! &C qs b>Y!bE&h"!o L^r  L*>\"L( _|  ^ Gq^Rr /_?.K +o  c H p - 8 pfh (4mvS u O / ]W?$_j@T |X b7?0)e=,.K{P1LG*(p / K p. )Ca , > uE1    bD/}21`s]Ck|mE[u~ailQ/;>oKe#.~5K@JBD?V7<*n3YTwy$/x,0Q<9O%?;= $o,p3K#]2T 7><>l<bd^\^ (S 2M^f?K(N jJ%h^O[C9j-n3'GQ6 mrtd .yCdXSdM["qs\N^ ,}A=4g.z1!@ ;hqEc!h]g|8_+xQyyHr!dnQDJ$H her#DJw3N/IOM_w|R}NBb'Bh,vXH\:Ic m]=}'  ^XV."ikSayQaxCtBZw*@8; wzCt8Tg230Mo 3n} 4y[W,.~g&&g)\ J%AC?KSl ^nhI);Im!Y//:+s\$`YCo_>`qPsxZ> U lK!KYe=doL9 LPKuqwgntcf2p_f#lJsB[wW3]%D}L Pc|6VP!s U % %'Fv6|,2}IXGPFJ}@lm ,jp!i PUcNc^=bK`dZp&qVG^ ^I~>V;2CZyD8O*dj/jI  W  R W1 /C  ] { <,> S!% w  } T  0 p +j\L* :y~G,[O NP/XY)t,yk88wc__K'59-.1KNx\~j9|=Qh/h#RjczaGI[11N3;tyeDUfAt5rY,>BU~@v'b?Vcm?htlu @ }% t + , m# a > x 1   xj  \ <2|9>V0[rwWK7 v  / PjHP$4i o {w I 8   |/[[%g[*(st~Jm-xu-F+ P$9?X!>Ht$|iWQzdB@p#Je&K~u@mBK iQ?rO<5> [dFd( | b#-]d5:}obd Rd<E2f>HsTfzT]L74ks,7GJ* M1;0 Z#Z0#ac v#0k-" IvVJT"w|/w t5XHHTO+k0{FWd ]F}%XuIJ$m)+j U7-&8HJo(Cg)!~=p5C$ Q 5  LUh.4A.lvbhQCjr^GZ}`Vrl tE{e8?[Cg0g;E!FHEs6#x7&\pq4/9>!TFO<Y+= U-&}s4  Xz`B'(RiZI#*{4 X P p 6O3s(7])Q M 1  0 ? a$,Y,>MAW qt;%H+S/r}a3f)2e}a,' E5(F|?8 m,mk:a H L    Ni|c|= f}8}V(ClUz'GR A FlX(R${qfC<;bS |jnQ~h\]4gmpxo$Qjd KakH >wDH]: 6 \J"(( ) & 2"0&y_>K-2k PAkTlCo\  pv%+.  LiXa 7 $,_ S ! {kKt9J)mWn(zDOm st ` k?<N & MB}4 8,  t Z\ CqWbcv(uEr"v%.ofiL ' "55ov h" ptK'cRc~fBw& N  *P3 mNi+f' r@-qP?F7  9#1|wx\Q'!H}OP$d'1^\HvHyA0 A / J) u1  5 c   xDt } }q $ =U#"'{ gN 4 ~ m|y 0eu H`-e  0 - '' c ~oF&J~2Iz 2    -' V  ) v@. |  Y[%i 5 L^q M   W > I\c4~  i<j :< A%hx;gaf"  8 < ]  & . 0N [  fS & +]_ MErzpO\ce#2KcWy"j@}h3 J V J EKzz`{ m C @/wU2q 8 t" y}LF_|:nbo8 +RbQ :WTRm< Y;iA<yK w oA<4 M , UK~ zIP<@*  B +[%izHLoXO7n'gTm Ca:u|R+l'6|K.k*F5^\kW ~P&}r PZI]W["o  1TY+ lNZ`!?Ss2}T[}K C\ 2)~S@*3}N bewFYX:W  ~woi p <.l]sLU; @$6+VA/=[Z:T\\ V;lh$:Z"z$a0W`Ew.y  zfGl5NH\}PO3GYe(g76L7bD>pWx*"ayaQp<8@b!x33i[eTb.}78JY ?4`I*v9}cWn;H%l{># 5Pm$cFg^@QEW/V%^aXYM:+e+k/'ZAF"HX/<5M]256z/6yVJ n3MkzvwZ!nvt6~13i!NQQ,.w]= *TA. 0$U 4 j(4T9olG31SLw3C#( Mp :LLfew|5VMrm HDbb> =\V#t5F>=K^+7$ I]Wa LXjv 3#Fxt8->[ohP_4Z3}Oy"7H!VjQAy,2pFG52;R!Oc&0-;~:JXuJE - 'vQ3\yLN_C jEiVzi2)Ir&>KQW(QY X=Y+Dlh@;EfsvMe~?JOA25m*7 Ltw;[ :@&X6?,LoPXPY)/-@U]=,*)8p" ot`j4>0}%X}dCoEtdZG1*FOYD2Z -7+dPl^<\)W7 GG,fuXQ1if0W ~-tRS\[x\= \Ke^)JUnofzPN,_xv>1{fNf(Hr{{mTcr Q=k4E`<{:xWhrD,m^rEef,. ^@FwYAG] o B>6e[fli -nECy[@-G]feJN?Yc^OT+EGO*gE6 iV9te'g>s/'{}yqdYC{+$Y`qbpX#W7l@d Ma>-Qjs*2{: EOQ !~SKD1bJ)~Z%,,1Ngti5]xRM[NkmKfN},iv,ql l$D<`LT(D}YIG#h4 dT\_%Jax(B/[FPAdic}1 +KP$r`Qq"t2W@^wHEFa'don;f^rOkdq-&aRf?#QM)d;!9Lb\>dcmeE*-KP|D}l:vd c:DC,` L?w(N%[(DmAqzT?i+{ QX$ESusciK-@  %MD+ 3{U[jFHXrvbqwts]IPqk|`O*FtaSMYS}{JK(%PSH ~"vS\3At?3bI[SUDhR?Prk1{U :_z}n^'U^WE~FI[m|{znwXJ-#PX$~U(LwohHA]~zYK|4=\&cuYs+OWB|B5 0<VU>U-@r&I+:w-SW|zRh78wi~}Zfq9K5k=]Bg FcdY1VyC JNHurWOHO2!NVBESQH5zhb6(M@N;E]MNnN4$8CO7 yLh`[Cw5[h<chUq`a/l<yP6SCWW8;()>h0lmW(,*KfaxFSHjP 'u*/COmU;O1[MuIxmBsFlgW2n7$[6wRQd3kT0g!%`.:-cnDe ,j[b,&<C|R3Y<e$72saug,BkRu9j;jzU] 8#'z~s; c +Am>vwAi`[,Q |F\M[1l89SWSiww9~R>~((yK(aFee[W?ca=}e~'?T/{#faw2'xc|o L#n,:4,($sa<77KZOO&PLt1b13Z?Twc 6C"9%!T8\T_\EmkvFCG;lJ8jl?e\&cjl*'b_i U`QCi '[O+ f\S6[/`_n& P> Q^W`"fY'WwS_lX= ZMc1M]%B>L?f#?\G#nnm"4 ;54 6)~(#}xtkbO204?>) IOv:<-zql"S9 P(Gr&ag6WpGX NrI/  Hkw?(?o{U!<',2:SGlh_$&, aody"y+MWGVQ0$-`pYU>7`0""j[HPz "PlF ik@${.k(fb6%?=C0U6l#-ZA!ut|eZp_(W{4)s0I QZswQn}f+]$/Q( x7V+|}%1I;geJ3i Y#W"V"{iaT s,j)t(C~:Y>z0UZ1,JR t^\ ECQ i)S! ;y9~1v.k@n+ko\!qe=|EYmc5MHI3lVoES;z/(reZOJdnJk63x<BjLkxeS!Um;CF\i =|sbl8\\s  B gr+uPK`). )  4 L V  %`)f6V`QU{5o 6fS o&andWHF7 Y|[ XA8 z:.4!_] w 4 ? 1 > np}#9lV[$T5 ts 7`f rW7 z: `[$bn8 e_b  'fTTNuwLFj_ ] 3 U  k * H GFy7 /f5X 1 {0Sx HHU8 /cM_^jC ' !EbQ= uaQ3\NOG!) EseRKUR? UxMzM*I7\n R_3?4 Sj| >|w >{=PD Qv6H v{(B~-ݒ%? N+$d mu#9.K=Q-hdC[j|v<*"fnjvM)\q:!5Tf _]1Ji?bDr$rXKc  t s : o+YI\$+7 -?6k) T!qLNKUk_ j) *W  } 3@Qff{vw"q R]\ PS H ~g .BSQ3  (K g l w w o gr\: Y_ 5 HrT.a" E^6D<G=84fcQ  g2-! E$![_t #[޼1u;nAVxX,.r PzW$Q/"'* F A l6'-o 8cm_ L? rrji2 S 1 Y 3w | ] K1 .B TW8B _ >]wp/o : 9c!fX d `u4K 4 G#bS'& ?} &oj;aYw|<jD(.0-  |M 2 o # 1 J*T Jj*l"*e W /c.X( X.$M3{ߍ `\Vk}i C J~i &-F Rm+w/UnZt o z Y, )L3LtcIE q S, Z$!}sZ#A 3r݁Wsܤ _ޭrH3j>j" ]9'DB m^IM=X JY Vr0f> Lm v `JB{Dy R $l8T rK  |>cgSBVnZ + j9# A !};A/ TY8 R  4{I.9 B.Z&vix `XvN ao޼}{]jn ]AxOrLNP!> I#X= / ARx s`h; Ul 8T 3:ms8 ms  4W g9-S& Xs Ckc ey&-H] Wo @1 NRJ\ 9qG 9 Z*0sx g= C# _a % uwl VBlOmT-|4(O veyU y mPP b|~ Hr 3h 8X$}q%" !5>:tAT WK=߿"+7-NY )l\ &1q( ;&U Z wD2 # '' `E8TBv <X "u$rL$CbDd :SB!Y H#& "&Z(9j;$C{vVn"Q"'m1m&%0mS*<"'{0d{N  c [pJ ;jL? 1-$ \riGd^ vqs" 9# g+ 1 `ҝ] +x?SB֧r(} )$4(% h_՞=((--(13$q $02:ߥ̇kK|%-L-(S F . 0w GXU։.!Z"rG UD  qs؛iWتu)c #t%~=HM\1ma/L-%J&`<V)#` ^"P mPXυ%O'i Orx"H ;] lxo '.?<,0 $o XF/+q(j Ci?q"Zq d!1}zel-qza P!Db۲<3p-)+e > M&ݼ [HFaވ )g [4!Gi?-(  w rؓ*''*b? ! V v 6Z vS &3*-n-{ Q7d$7ݑ++e"S- r  yׅ\9cm sH%k5/ ++6ܳs".PH3'.# 6u D"m%x9ص%ѕ'9d Wx vjb<U$$zk;h2 k7`( {Gc{ V BoX 1L :݀#6$e`c]- F4 #]hM+%:βs/4ƴu H!T&w!  K#.?v#^f>',il(N *#Er Q m?p|#e/ b4 %1d+,< e ] Bko j#<տV3k,k-: l}1-Լ,hYR&@nz% ~{w' mX'T./.٫-5Q" "K 9n = iڴ #7 xό, "kfRY[v ۘJ U؉clY<YTu 2%:Y yb A B H ?Y0# f3mVZ#(*b8gB k, O#2 h/i#v,%n[ B R O#P(9ׂz/Q]hƂ#8 7 э:Z/J#_ 3@Pg&^f94e  a'-Bt V)>~ܶIb"ve% I2 iGG?jٿ /Ƴ͊&cT̿;!p,cR1 =Tgw }#V$ &uԥ&+Ё&DH' %bٹ˯iۓ.*Z yx 3 $\X@D Cg Mv eU ߘ#|ccbU >ubK p  I&{UF 'D7 $3  dgP)%Q!6w92c,Ke;A(pYsX jv ?ywO."g!#r:&sI^* +ߖ#p * 5,99 qF-&ݠ7 ,*7}M 9Dy .<5ڌ~ !p +PN)&exMpn *ͨ۱ /!/7*k7+a /kwt} 46q4 ],U J + fQZ$1we%5#D1k8״u$cט> NHAz۪}\B' Xz Q6q֭;Fj<B)AoA6׈ 8hȀ<ߋ= .vN3^X]')H h5 :XxA@=F5#ތF &'<2B?f{3Pl4x z_ +H%R Kk H !U dqތrvL9 &w0 J "yݑ:& [CH(* & &&ugi P iHUSۧ՜| 0I>u=+d#<6/DhB&$k,4Y*F#/!Սq2L+ܙ]C5,_uEX7Ty %!ڨ3K87> ڤ?9HG99/)K%>ɔ$;^A ]8reuϬԓv%( w)B#B1C\G= TEA:~*7hL1 * MB>r ss oږ@ 5 $ C "r%'5 D_V/Mշ 1+ ϲ*"-9$ CՕ9} Z; $v))m2&1DDv"(rۍ "ʔƁ4a #t%8$0<n\X$3` ZJ b + "d5 .mF{@v' }Vߖ' ٽPQC# %,}Ay ~Y% W 'UDz<-05Ƥ(`) 8#~9 01͖s't ɸ s溿L$͏ Rّۣ l!5n3wN/%*7&2l ,+q ӏ҈ˬ ,  dMIG _  !"!$+,:& K('$ vg) ! 3!ɈwiXѲBi@3] $&)O@d+<-3)n ).6$'(%l(n͐G 1mrΌF.# t j%yf"6LTYdb=5CHy,2#f 6*!!N. LPv 7KLjQ݀2J́+L RH -&7&lf1.DD Ab' i25!s6 <9MTaիP EZM0S%څۚX(d7o GV$t+L ** d|/& +[&LS\ a|iC{YĈɒ2~l_Qu12.+$8BXdH"HS9m ) 701 ìت d1˟YV"̦_j6 9 i''#9I6 HW,C5:G#:9 +4Av'Еӥd"oMu#X!^'ZpN ^/*A (94&g had2A2$[0))..RA;B5/ܻѦ׾TxC߭۳"t #$MX;`/UZi7bnGH H+U 55X_d% w_>"ٲuѪ}*%xh H0j(8$Ƴ}D2([8 7B&<1k< J+_.=t-P0ڑaD^ v̩1VݤѮJl 7 -ApaV9RX*,&5 UY#&#,  2tt _̗ЋIڐgn_VO 5Ҡژ*$=Kt u/GF0Dg%AG36Pze^.)6 > %ճ9JS{{ +1g-@ &5*C;/,& q!}'4 pY  .fFgm$߶60Lc0/ȭϷ$DACg#LEW@<} G+sC\Q$-TX 6D>%״"֗ y'BMUӯ,Om),]M^d-z4M/35:o.##u2O"6' MxWٓd?֢< X -5оh1= #FiEDw8J  WJ 1Ÿ6 V^º1D rAp$!/ /L(=EJ7'> 2=A),ZC%%xs7b;nɋ|עqÃ̐)لn OK# (;` 1<& 4 ' %Q Mtևיݻ[*zĜĆ'f38>['N6^<9r;T(St#L:H-0"H;u'3k$Ѽ{fWքeEy-ӽ İ`*$H@5 L9zN>'LN2 &c#r@eA%1FT!{7p-QԥA0}w6*яtSqaX  QH;*   2UB2 .G>a ?Y-o6?#~ۼ>=DīP& ϬѸ'h /30Ο5JVGr*.@JZG_#)G>U?t"A)@, ؒ5ץ ٤ߚC 7 !  g+1(  )%5 GJ557,7N ,mC߽O.Y7>8 :kЪ#j uե9 /GQٿ2D2E< P 0;ZA<S# +a@Q>0ON1611+~_+Iڤs`iX:cSme"18 !>>_.` ;3KS;I{iLi78[S}_ TJޱ殷ÐY.!<<ց)0J ~- 5{m:iC2#*4FG5 D!2x% RA\c_9Ŀ`gl~5ʫ@G{?$k U5?::&@N9; K E,];z7XZ%P-,sAi&ksU>cAYځZ0kQ&Ѷɚ#V.)L+Z.KJD0QZ+WrR71v egJO0B߅>z+*-Bv?T,d^^ & 7tUgeڢ VI [ ITX! p@g(B.+R*-"W{l+E 7ϼʝ]"\#򴿮&J!d߼R!-6$XezƱ^$E=ba-{=TQ @" :(0a0@Ff0HST0U<9-gsR +Z+^Mq[ Kʮp  DuBGf+E4+,  kD'5-}k|# C O6Sgf8 NaO ǯ>ts mj*F@-$50Z hP 7205?M&#!@%*M} @޼8u]"vPE"d֟ #JFaV) :7!g5;tKc'B9f1EXP!%i@_ K4-DMՈ.C5h{ lT00 p$߱v+>IK$0G?J> 4f (-_ن)+$vǽT s κ<μ .ܬ`LB8&'.=,U*Kb< rފC0NB"M" C[N;0Ҿ BI"Ϗa;BՕEL0%>wҰ+ww̭@#q:!xׂ@)I3Aw-u _/J&9zS #86`ި hLgTԟsDiCՃٸ|T Cæ ehz4%$M?cR5:;I#j@63l%EW EA2A1Y>)jώX 6 ~Z !'#. le382d-tVٹ~;40e i&$&%Aկq C Uʕ= $ZVrZa - EC# _x -0*?j$c ' z &+ |3%' 7XQl8 ,V&'Y~frP,gY  ]Y Uc 0r 9%  % 4ݠ `i-d 8D rD@rJ!Fq{*=-"3[C& BS[ؕ@"fqݐS[ڈ٬*Lu*/ui6^ GL%,&c}AQ/(+cb Q;QORףZ ]Έ2X   -c!h0rat1 -M=(P)yGٞӑL)T0  M(6fE VŌv (-8m+O&13m$ "5.MINX:!1(]If<޾!4E -M M$ݾ` "lTL>/7 g&4} On/t(i~"'> aɥ5:G <0  pbG b8-hh#T! h/N$! !B: G͖#2;#O ˋV! -cb[&g{hVE6 }мOu$w`ڕ- .|0R F4 q!q%F+/K~)4' C^'; )lYכB _QM5M<M/zҚI48^ b 2-k>X167M f"*~+i,&dzQ޼*8 r ^'3$yjBiƔ|K(.ؼkYZC54.K޻O,'i8e.0HV#8S%_qƽf -8 Ɣێy %`MF@74Z~ 99< MOä1 #){/'5 =/@܊fЩ2<<Yt)!#=+ 4;] N?۫ +;SV ý pU̠n! #rIi=4#C "e6)7L,#+ jX8 )&5#?_ ;dqлO֬gW os g !nCB`>r)1:5*nz$77}#LV3m/<5#2GE Xѡ P#i ["/ӫO+2HsH",:,csfO J% iikL#XRo ~  7J&S'eL1 DDA T |ߵD =8#t s 9!3)07 r Jp CS/!xgL-> Y[Ra.04Z-W| N^k #!!qWE*% +f՟+/1-){_C9#hd lUȻi  "Ƞνiao grKYRݯ&^,+^r(82ut֨C(-!K %ALƅǦP'&̿߼aʻ$0( *Ҕk1 ?7!LG!=O=0'GJ!!y-4#dϽCǽ' 'a YR5\¯ $2Y/E<{E֪ف"HHT/ 4ǖSA1o-V+<4AK֙Y 0%¼d*-` x M,H *k+m ۖb  [,6HyG(ksT=*FF:1"wW 4#&7)d1H%#&O A һ(9 # CG#MYw%IM9Y&7R 3,+e4V'Pć3H 3%u<ːշP'WPAjCY; #(!ی]s4BE78:,("@%7 ɠx#ӽs-ӫ"/" ;M3+;&$l"})1c{ɔY * EP-4$cռ 1k;U9$.yXʨb [̛ȿl}7?> rD0H$خ=H'o.)j!!"Y-2& qx]a a?-0z|>\TӁݪf .  %i-r''h3; w/;=% T$F R\\{iL}5bؗ1&5޲5i<92?#݉3# Qq9sj įreSQ o L869= g@ (8& 'B%VWXۘb^UC?Kћ,8 1$)5&e2-K@#(:  T "vνxƪֺ$6*tOд&8&NMU߂&J &!$'n0,(8~LA,!rؒ)P,W-I64{vyzzي&  Sg<@8 %u6'j.2- Q!YHr/6 YUgk  } |ϋ&ŗp9r۞^28 ,N/# !)4,:  |0qDD,g \2N'$ *Z {cEɖR!& `6=v}' yA$P,"F.-V-# f-~ 'fFܧ1`EJӶx8@9)+O tީ "| 7޻ŭh| t҇]܅io ~&b3 r$^wx =$-{'vC {H:ι> p'  kl]A΋еCj97 tբV2@%bOW 'O 2 "|  |WIx)D!Erv>:~2 WΙ t CJ?ss  VC ' P  BzCK7 aU; ~#S (]$ iX[LI9 )a)0eS5? ge% M%2wWS#?=!@VgTϸ#U''' #,#vʝ]N%&2k11тu = R/W^% f,ľƱ!D 6*M+{;Y.& ! J ҬW )Y " 5H}{0 } X E@1  7HQ} ]I f 7  +S X ;; N 6^-4 Z e@ W1 1) R $B  V*,, ! C O   ado u  x # 1 /J /!5+ wMFgi~B H(c\.:)J;u z hF 5!4,{ ݮ /&e/t1$w  D$a"J [V$ )321cXI:V ^b+.VY!M+Z.js{j%( y HN z 7d^UM{גӉeZ] Tc!'c*S&"-|b;ݼQvz $S61.8?z۲ B*5b&#!zHRmqnR&^1P/J)%#=a ) )R_ "l.)O / 02V  |e۷F#'K"d΄qBH RW^Ƅ1   }9ۯ0:13 ~8:A%jf!|A#R ,, (Qz۳fv cz4 { Y_֝">D ض}  L*T%'S#} "w/Y-}( "JwV% 9 %m(q @є * ?<8ӽц18%)-1,'cAcL&c$)_hɍ R 2&7:5=0i ?@[{A0Qr#_ #[-]=\v"L$AgZ9:JۉX') [E{Gы8&s7, g |܅Ҽv!B4U* So:k.*tK7"dxG Pk34CD{P%kw !E(!LѠˎK%~ =)*#.#CA Ql- ^KI  03"SjcD^ PuDWNde ' DI. > UҴηgw"g#; y lx.  (%34!(J N!q(X0J JWqK'\# E{ڠӕUd1LZmiZ)Zѻ;-5-sTn!l /5 .: !hϬݏ.+3*p ]]4߃ k3 8N+ti1LZu7 hkKA<7NQUBe'U ;?| dr #'#" WqT%5{[BZ 0 iѵNL` -B}mGWhօa (-~f1$ %(T,ah2 \e q &V.k' 8\#G4ۙE|fH%!=>G˜CYl Y GRQ v aڒYu`gH6@]d 39{!s!01#E3q/  p^ IM8c| H {T ˤҝ JC0GR ůe ([(c2 + %)4x*GAvђЖ"0!o6~=E*|XJ<*r+Yb DScz[`gQv ՛,ٝ^C(HD !> w . 0]Bn"EW^ $ |oP_LSOo/\g a 0 Ox]$) ,W  eHۍݘ ]Yu!f" ] S KI 9o%'&9#H a "n\2j ,Fd~?~UI7'RsKװڇ$rgYyu+#[4%#* F|l" 2-1-^oףւrRz[ 4]2'~řי@PJHe Aξ֭\c>^ $h6 M E):_A6F\8f */;,ZBq ImL)/oL)cLt b&3Qp1tV} jߊf # C9GGh5 )̤| +:>KEZ(0'^! &$;:t+þa4>>*n&nZm@Ͳw} 3"V$aW&^05Q ?+3 ޟ5C!-.#  ?%s m23ذR7  {{ie8I}i "  C Qa^j|z/ w8 )Hs ?:9;۴ T dc)+Z'F=i rJDF),,~  *  @ wV$09R4Cnm@ 6TL̩^}.&y3ӉkD u22!d)Uk*A0<8*EO6]A59T$! _b:d&ug2 'Xu iХ@sm*/pu}@\jĆ3t# _E./a9$-5@(zBֳ #{%":T:Y@YD sei *(eu WM%>˵|:]nIݵD'5A'̣޷w֑f&'&Ѿ/ ق~ ɣȷV %*-*'&~') $  *5:< 3"c',""a'BFF-)^rD Z - GQܻα^)y$P) d?Ȳ- P sT %`,?+ O#9)  v:zNI,l8 M/2+!  7=" [ >XyF"O ktD5@84l[NRڢtp(ߏ=9 9% !  #"` Q 6F157&C  D4 ,6* Y 1g B I!qF-Fѫ޽[4"{^FJO:>ױ^ . `  &'%"#5(&.Cdj|} >&%)"`l{w*3bיۜ&f 0mLvbcҶ^ؠu R' iwTx#k-/M'. GXc "#6(.\10m1*1#dS BA hJ;dG%rvLqoq4 h?$d6d+a <B  {`RGn n ###q%%! @Q rA 7y; r) ?"3ETgP YE-[$J`v=6c"[ ~pNԓTp.!# e+ SN\&Q,aN   < =%#67l41(%׿θۇD h  u ,W `\YGxL kFDy 7 VQKޱژ~1<}/G pNWܷ. -oY}X i x۵r   K"Y) eŹ=?a-3?['8cыб J'!;+@B'<72VoOh>k63eG6yb* )C*g39&ϔU [  >ڶLʯ5 W AhhYVD re&MB0(e/q(j gg-&AI7  u 5GB#=Ӊs TU! t 7}5VԻA)t ot]z#U7Hkf>bhWD)57~* b&e4I +p>|VP0O u.ߐ gEV#уC|sU *f  G MM~ qP3F<<9.6."I FB&E$"r(-&-)ga&R*/_+AW]:`գ6l}Y|UST ],AA6/ h{!*)P.$&I&(U/P"NV=*{) &   640@;|\`UbA_k&u`|# z%,4)> /Kp6<.0,+9 9/.&NZN(`$93H$5$|79#' n݇77ӿ6 L%ί&`yr]nM̃'rtC c Q K7f4xk zP %0}?F&C;H1# y" 2X9;5 "? O G ݏ4q_۴=z  -Ȫ! zC34vF]'.( v7r*685" >W$29X5|&Em!/,S)-&El$-/O7_GgݘɵEmE Md1JY8҈26 #R Qk7@HbA+b u!!p_p6NPD)4?'!~-6p.M@JEYe5u dE9  ڹY$GY c.H M(4](ֽ,tSdݺZh/xFF/z 5<$0iAX9FMM:i  > %>m6w?P/on5 ]a0"K#OߩJ jXݷF_h$ ( ܫz̝bp I_+/(|Yc#3IA>3$!H$%&W%@8>04 &.39%0Jٺ8"t]L?NdҩOύi ‰alɥu38*59$-@sy91K "251%- F"r?-";4"Ovx@^'F:?B).-G RSs T iۿ ̢  Hʫާc%%1Sk3 Y&E#O)(aK %:(JUNIK;B >yn)9@Y;& J>{vXn2tݛ{w G6h@K &Lc  dտd9  P,4y[1o %C8 IrT E $5N'GeO P + WC =)HZ" b I~8 /"j 4  =ux&oS-\;ZVbN  F WQB@i:wq$(y,&}m,'&zU D l % k %=8u s  ̐۟B(   oT4t$ %kɐ{?oJ:P>y/6D= ,:th804+,7;,ٺ>MV% &30 ,!n " 2Ex8\/VkiJ@0'Voާ ,W@>!"'>e:|%^t4%{)763vD1ҜF/(2$# ;w "'5,i }d'8hr r6MaMi-@p(p9'Rȳ)'~+ I}#&+&@;ذ43!ŭg!F,M .X!\ r[NJ3  -O-*#EH  ,-$gy^)!$Nd/ 1)=mY0#TTg%:{4 b >^!+n8 =@`ɽӖ@ n O9#0)4\0h=Uϼ؃W<"()#   @?yէ> I| 4Lj  Rge'_s$b V+(?_a'% <'^"$" %֡g$2k^P߿ԧiKݓj41*n3P 3]ԭyv gd* 0,q%|  F 5#/ >3/t4Lbb ݡj:BߨiG:]tR 2oJ?tQ#9 : B'+ޘw^.x`%*K80''2B6xcU; t7PC^ %o ,i6vߝހdde+0; ʾŚ2HWh-h jD]) )3C,9'އ _%L'&!!'VHfW"ft`oĽY %d .TI KQ uCt 4a%cpgb QF24ʱRͶ C/VH4uSb9 &#n 3sM)+V]?kq*CZQ;["زQ  O ??hQC# S8n `mm&Yb=ԪB:)'ٝ:Ro & 1Yy=. y _8*LAVig0ejqf 73"6k PR#@BS; [BE 3 ,1G@%H ieآh q$9gczܡް1 Cs؄:Nb3RNxY](1ug 1tUd:$&7[+)I9& +^ډ{+ ('f " d,_-ԮE(Pa_@0QTߣ٠8 8OrnP G oVJt] Tg? vfE V YJ')#2 KHX!FM, ?y ,Gkڍ)۵}Ctހ 2 dDyWWxZD " ^l/-kq|q J5/ HO P#Nu2 NS)ph[~}Bw"("ո/ )sT@$y  ٯi Uk)#G]! h 9c$m!w(!% ; Y]D Mp ' G\ Sp)% \fZ#[IH.܉.1 e-J E  k$،ݮ"+<~m!{r0Z%x\ߓ_ J P"r)$+D VF$g +t> u!$: -!VL۾% N&Y߳ŠV?N}"zrM &) "R<6* ^m D& "k|gi M: >) &&* )H:i!'h< HLIy=! H>+֣Jڃޡt/ eFTQG%'ݛ9 M+:N~H%''K(' O J Z t'1a- 16 pu_Z6,};8.p$J  4o<eńG#F  * *?ǃ`.}USjֳZ{ Vr  {X &a j &k7e-<<( Zy |o5q9k$9tz*4,/nځ/ ζk GؙoZ/$-,pO _w)-8EE2**5 /{_ɠнՂu(~,B!m*f !`@"K,e(,@< '1G2'͙~44i!M†yڌ}=TV܈U 1&Z |2-c?s- ].T3k8%AA2+2}3" ! z&d.iGY/*&v 6!2&ZA KߜnGY#u2!& 9ع01C 9G$)* 2H>ǧW,,J]IZ#J&H$# eKl Sp&>.2,&@ b}ڬ`#U'88[<9861a) ef dOW /0 !")N/%! 3PK.Nܐm0s NA4kx^/C$,]7   <=Lt BL`M D& X?b&:vO #33/295'f:9 uY4 6={"u&#V&05o) ]U{iP@AO)!s\t# N)MKlbg 1. TOe G /+K,\<w . Xd'1?cl  w.r$Ji +Z RwyyԤ"Ј?oZ"a p \$51{-B.Ƀˍ p 3Po  ]'8 zZw d E $.( '  E ?ٓ^ "|#g "/CZOhb`ݱm$P  !O] ;nV |&$ψ˅v@U? p~ m {)1 ,y#) 2x/<?G[1G+#   0mU.EP  ) f J* hir 8 h3!'-Z # vc28\6hC_]2 Qe)!hkk  c> o+ 3 WH q6@ +2L9*V(0 6dg8zϥ5cPal5k kd&&)JE? /uZM*t& kGD" " 5|[$ A:J: 'pRL&#l4Zm4 ӷ4)7,# d\ @**"k;5l ǀ׏ h9(:&KD/@ FrXA 7} H*YP:#+K."V%6 DdO2 '`./7/X p 8 f'9fN%y&)%%r %c<"Z:J@*bJ Lx Va`)8 bo ,6".%Apc #g"$fmZz(k !էn X+W7)"V|G(vpJځC9 |v y42 81-( /N9dk3+P!Q G Auy9<#%% ṿI!zccAMz+55(`{p3 O& -:s a&yuo  y &>bR  ] ( (q1/&_ ]n[0v0U'!W _6gM  #  v"SI64Cq9mg9O=!!9 )  $&a P R"20>/ | ?cl3 I# fO n x/ 4u$:=fI<w d>/,x D78ϼ,W=M`%JDj#,`!b R>bgao@^> %$apG)+p9 w :J 'DҰ!J:Kl"-)5~o @3$#p^8r O u &0 $fP֗?[p!#&WSm5)jѨs K!<Jn>'v#*$1{񳗴+t Q  T'-r(%-B5'MoJ}fq_6T  i5Q^ =6  S7|RYR 9XXڪjp)8 FSٻ [b Q '_LVE  k!+&ied\Li F 9#Pn(~/A'z ]T<@{t-BDPA݉/ [1R]k38VrEJz$! b'   @E6[< >2-c\-} k_/T s E XEtf F8H-4N>P3 +8$y#" E+ e5h:~$˟-"OCRvw ! l;^ }! >C } +sYiYu n V<%01 \v Bc1wۨm/l4j~1KEWu| v {\Ld3+#2w 8 k"vEFI n0 #=>a1P0]3+z41'Up/vRwZF/ L 0<{o)#')U  .!&<ԵdO%"P=ۦ: RK_.88a0"iQOh|Z\]2λB  y .(L QT5 .*1 C]. r  @%k@''o K8sI2vgk,m 07D!n,?$#jq ##7 C (lKt֑И%(* "R z~`''F, Hb'iGg2>T V)H4{e.6'ufA 0N xbѮo B^ )%8L8" 46к :#9i2 }N Zz6/ t'e(Wj(QQ E)E..a# N p%8l7L'1B7U6hCSg&_,a"' N 0P:$ Hr 0EC f9'f tUMS| ICM$!! N<5  b Pߪ֦\ۑ: }f Y3jdw8  MZ /W[s6:\   }CZi)9 P#(> bJ*! zu +8M2>ME  B& - WB*8 J?F uKL$aAM  {,[5f P&/,~3G2PKB}4a6vM RTvYK+9H:`^|uUFL;n iPr$e%8&(+6I@p@7#MA++O/4fiM%*"tBIگyV 7ߘ7##N +W<] mM!+ p0\BZm~YCE) INS!7 w)Y'7G  D&x߂`  A'6/3f'q%+ qtҁ' Wy8Md \5[K[]I2$q > & 5 7/އ 4 m d9> %#7j&bAY=  x8L0KE)e5y"H)"F$. vsGS\,{(  Bg*#` +h TS {_ ;WqvWL'+U/# \-:  ^n8"$  S Dw  ;6rUfGa X tb BpIHs.v Z4 , cD61؟p EP 4 %T! XށνHoh9B 4!)(E"q 4 ~dg9^L fj2 Y CA 4}h#{*N%xv@#OLPva*,%B}! r &ϏV3/I? &#r" l#Q,G55+-x|7ȇؕB~/r    ]"  r   E,z'p(/n*v} K0a3x"SD" :=.Dg'nZ[Sw<{Ap6a9#jXZ 88a߲l~ `&-0-a KeSw} y R iD17!r#w^p ^,<1Wy/Kc#)3q.4e:,) 5 }11t3ebb}wt"#VoNiG k&U$,^C5> YVɟ5`"a`6sC!t"MY[N 'w k /"~tQ'M ݄3DFS; i o Gg -R  uG(  G ,g)_k6g{ J[l^2l.i d %\(aD Jj^kۀ%) $.w0.p&M < (]5ծ_7F~^am)7'Q F( U FncMd ' \ p#a>  t;\RB4 D  #fa;]P (MP=^j 2Y )t? % \7E(4kc 9 X(+m&tRW^T_?QaY1\ K#M d Z]= [ 0 ~G6   :R m Z IGZ 0i {Ji $CloߙF ; mc T!f++j&!vP  QK }ޣ/Q>%oSPT-[! pP  (J J C؊k J Z\1K + )L  a<>Mz&-t*{ Up   P  F pJ7 ex8 K;8 0 XyS[ i=5gnR Z ^N aQp>X *  {   J!t&1OŻŪ  B'2%0|+4 ] = Q "]X[m|E:U[^Y!   RaU݋G<j+1> aB8@ J +$od@:>׳5J>: EuLA';0(48%5(N0*] nx^%o( 6D\.?&6p`"!'cY 'C v]Ҧ# G@h{yN  &("T/l!!E% 3 yK߯<6@Q )Z0* UY   Ba7l˅KYJ  ?]H C#1M992&#pd gxkkb]jkP Gh];!`*P(*pq .5)R 3%e`~L'RBq<)4X '![=(f2L; zNuI[ iek5\~c k#o't 5k M+tXxM has " W< C 6l,,jJV]a #d 3,HsKG GT p =CqӘcAR ~wt5"#xl   =mc_W #WNd <%ߧh <$"o#W%IGr )F\E]8y`lVt  cU! !9!8$U1!$#(  eFX?^k^ݖ߬DF0Y8s(f.`/|+# *gf!9$2Ldio9LF\\i 2%_^ )H: JrKU3 #+~\KxI6A%THo +  3Ri  y g p4 \{[2 =j  2  |  )I pU.fS6!B  RD~{N TY_1X V-E ~ $d]B7 * tMOhڣx!Sre5/:v g 3 !OiL v f U %>jolI"mE]jC cAczAcRY28pWnx/vf`'is,VOWu-c ~o9A H-.K߻+ߪ 3%"v.lH= jF# :n+hStBNdiM} V Wg 1aLV XlKL_ tb'3*'!qY E,"8  AF,ݓGD{5l9 5 $&b!  W 2Wn v *N=q9 !' C ~ v ,P/D (.! tj ) ed'\O1L}quso8Wpl J :BNM>Z #` [)\*'\ )ItY[  z M[`D!qr{#C6ARf5xW ) m*[#W=w ' bQ Pֻڔ>:Qz=b [ <%%"E=> #> 9)%x)MP:a BH D ?eKpU_ < */.#aMcR6N$F 'gBTnp + g1]  9i( ;C޽v[pW?@I jD Bl Y#%d#  { l/ c eD׷*܏ovaa  @#zS  n!~Y )}= (_! sv ;_0k^?%C#Rp^6=] j }1l_Mc RizNz s 3n_5/"#$$E!d8  z _2!Xx/Oz 6q zj-.@si(Y e #  !#"L m9uGUgE g E e]vtr 0>OA5!] 8ܵ؝ib4/s]{ &j C%+,(!z   !9)-J[x9uw  JD XR 81:> ^z p/, e oA b Ua׭3/n gBb  # B  %(c" t LVw  S i} #d MNR: m [4] 4?Bm l: %߿-YN [` M<GO,od_ OK&@ yMW[qfO9 i%a$&$Y-Ti ]  M / h ! !!!W^~(L1w vQ _ӜWD{lV/  a|`)7[s:)! H  n c Tb m51ؐκV˂a= j&T M  PV WD#nVZ!l 1K Vk- 4tY+WO)!=4"uyn~ B_x &+0352&7o84{''RܫЈܯ۹GoSR#:)z($6[-M  _PWu= MG-רB֋  DCZ"h& {5M6 X B Uw- ! +X4xS76Z0 ^ [b}o,u.>&uYM.9" ]1 z Rg(<gBVkU/ 8ե҆1 _in:z/v R MVR * m3  "8lan^ ^Dq{KCxZ ]$ do ^|c@pl v=%z Ts + {h H V/r ApJ*kbݑ[wݏ`"'^ZOK<% T  [`1w# %rX0 z= xoT!FrX  hI!dRKQ1D jT Z # q W 74k~9$)7Dq?# _{ 2!=CqDx Rj0 iX4MAaSO]xQ-vL<O+h ,dz/_   Wts G$#1Ux? uA7A_12Ib2 ]L $Sb$<tQAc&3(VWc O Fb& c p7 p0k߹܁/ 4 8E d{ ,UP{ "e J*65Iߛ-mlp +  /?|y/"#I+Q7:=4#^ Dr';{D <ՊC֦0 | n; 4 X* Q# (.X^Pښj# j ]3xm' t< mx"~  6  z<H X kJ9 em'2jHoBy I&:! ,  lXjc;uLlUxa!` ]W 4 Yzu X* ^ ZؕڸP _QOC{K80\ __GRGeS_xfA b9 = gS8A93U B[FQRj67_ 1z>U  6_1[8 j e < P  h a( d' |Z K"+xteq- r { WH& 'fnw* 7N% 9 z d}OJ@?rO3Z u!qX5QW? YA(RDc }0R "* Vg5k8 eq|8Q]Pe!dL_ g!I(UL7 Z#_@59 S _ AdI^PXro c_I|H S`  :~{;L;`[>a%u >D9}K+; 1b Q `@&H d o1jV BY k w d- #]O)Lxh>rKR~iTg 4  4  sgW/ݑ9(Gpaxt M pS m.y U Y Yvcݶ;y N Dnc  1 > DSXF4w""5]]> *j q f{ /r |=|OntY[lpTjj  3%% $/[A + A)VZ 2fSBPuYm e9 GD S | lzUYuU.A < y/= 8=p,dRwT?zL N $123MI "80U. Wmc h;53. Vy: o QKHj7 X% ,#pu3"qJt-z< i4"  &  +UMqe}w(j N! NC&;P7CF,vg|=CF4Gd\p 3 m'()"RK*(YEX Vx[`&st_g4 =rS f`C +[~jU?D6<O D )M k""_ { G 9mY M<}~ i 9 ݿد}iEa)(W h;( _ aS./@jTF o{ Iq2)!q]2 ') & n 9,X, , 'P jfQ:\FeF5?3T  y  r Tz ?D ]ܚ!!8ia \'*)&%! 3 B9$"5lc kU4.K+*M"`&X"v*VA4!!$p#"8" <BR S!zh'   7l8C{ i߄A WY ]z [[ ]1XBc }0D #[\|+BErm K3tf`^ uf's,mWZy  < O |$:6" )a p,uYNB~j  0 |joZ 3wg g~\ 4 n p o<]tּӂ֞֯؊ܴALlEr] } zc JR ^1KV8 RLIH=^"VZrCk6%G{0IpdCRe+L  N j b   f a moJ `s)Vfqir-tz$SY fzw &}($~p  g.#  <PKk o,`&s1ACB zA >) MC3Y"N  |0v. *F nE_pW5MG =6lc4x"2H/j\ONZLH! e v '!|#%w&g'`('S"\`7OJ%ecYT 3^ W"W[Kkl r6N#';'%$#$W@ [  9d p.7TLoFaly [$T.K!q oc8B'xHl *ugaPD L 2 5k) :'n9kׁ@4// 7_sfX1 %$*!,)h''($+ K \   l  &a6 &B8r-[.݃$'C`70 7 :B6 {V/J9  <RX"q,:8VZA+/@ErX#Cdte!(J#B~{#T>Ds ? BR E(VxZ g5g /  Sv D3? aQ>o? =(pX/1w<%~Q 4 h ES==6Nd'rUS  !y=k Kb?74cx)\ZWi.>|J{"c(+,`*%B$Y yC  0rv!qe!q_~1UߔwzZJ7 "B dRl8  <( Pe  @jY ix4+{';- A^N 9 Cw Y"z&%d#_$%# x&s:XZ[ G  1  ^a #W JߛdB0;{K7 7 Izk)& }ia QJ*V xHTHblp& ?3.J ak2A'C<<^Y|, v a:89mUy~?D%W/XPdu{0R PeRQjt}zNJ%y/e '`'6 ! 8_CnVZHUh6 3(!dEk_QVJ 2 m  7h8l oF 4 f r c KWO~_%6UZH* \+ h  Ub a  =f ;U0KS i T  zC+/U"OBVZ<q\a \ n V&h5  t gT]t2A}.6l8yL0bt''UKh Hn3!q$\we'sX $ 3 L  ;wb  3De ,>k &D_X]{\OE{ZBx<|aTZif#~x?%sb !h'T%L## 9lGpwVZ1Lp~1p$TRJwuDڀ/-XVa k #J')& nIep /6NFTLu5M"F> t c7 Ij g5y]l( U!W" 91kP\j < T G~in U  , tv  K/%)$(t0L'H | x z_6$B$G~ nH:(ܺۏ߶T ?Nd5M}v t';ndq^]jZx P  D a @ i  -= :m=%g ` N 1?oW,cpW?ba5 e e `PF2Q Pe koV2 w Y &{7ڲڷ޵ Lc$vn +  7R߆Dq1 Ipr.>?u  e `n ( 2!#D qo f~'a&H6N۝Z>$U}T }&`v]O2@V u X [ [ W ga1   E+uW3$4j3 ;  Z'Pڮ}>ۊnq;KO  X M  \|GNWk7y`jD  @ |  fSp"X[\@q8 yCn`B w YN6nv M[k7[&fGGUr'P-/!f''#Y ; PM.0ߌD" >Y#SY0Y aVX$ ga2Y=2 /x /#g &  l f ' l^;C݋|q"fn_%dk*I*wZQf J A R ep u DicaG c" E  oc   gqm ^]5N,W&) {w}zMmI;O,. z<  KM J  r: G `o~ U?)3M9r j )  nc >XRL=dDa^A <\PdA vH g1YG%e5., W& : :` Q=?YN e`3M(QX#Sal}%o~ i  3yRA;1 o $FFF o+ | dRi?^%,yutKU7+bl-AFS!qIs>T;!   re/o(P_PJIn+gmE` ( c&BE q87NW"v*O |hJUZ5} R _PJo8 h7#Sip83 w . !9m8Eh =cR>7y=% 0Spqe(:]2 TY; GeKF)Od l 4b Q Z =Mg xgaG)I*b < +f(s-J XC8Ob c ` B zG;C*+IxI D  * )d'|1qF lazBwwgpz [ ^a6/V & [`&2LW"qdR@' s $" A&nv A5/]2  ^ <nd%e~ۄܥyߓray:iy  d4Z [ E Evs-Y#~>o {n #&2$1F C94x< ^LNc5Mp`|1A8[\{N@*b^joc FeFl$LS e _]  \~1LV"ws@ [PY/ <D  v?71w|G sJ i ,sG)Z,=t _bQ]  $ 9 d $ U9O5! e ?m 5 dpdS}4W D#v>^Ip,U54_L p Kc# =))Ic| } c;{<}1qac4@Ra k o8&Xy"=Gkpq-jb\ yhxt:LVZ+  h a vxGT[1Xk)!|x  A T3xeS4@ppKV"s x d. I ]  G-wC`2}i(g8Fl}   l %hKh)0LVn8#Q#r9~L*  & lI+SY?BRY[  N+IU z / D m;{P3z=Q5"zw_P s:1@Q^]G T ^'?O5M*<BSY[\1w#F  !,hCS&CrFT-D}$eS!q9BSLnc e5}> 94U!8 9/UwHBRc?94xh0>2V@$> o w _B :1L|>CE~i*g`E=C m+:@%2ANd %  Q ^q, (?i6Ms   r-G,J>Do8,u.@CsJI V! j*Il7N :\ ZA /= c`@0 xeSlJZ   \B+91yhp@(;2?Dz0K7a|:RX . .u  e'BWm*7AEj h(H25/g(|*BR5l"]]nu:$  Sq<~1AC K*YJ_QKIHb]]Km+.C$FRK|jj"nbl 75seSL&T4M +" F x Z el*t6`% g ;O^mNo';aW[7"Bju7A q1@(*t-?|i^%]o~2LIA_se Q X ,1 x . 1k^%j*yw/vd1w/kT4,#FSY"S p+t4x=PW;z/kc uf's,U;z9z.=Io8AR`>>~i7EXJHn_%j3V;OE~@Y#r-u.U! vgmb^]\ 0Vue`b&i)@VunN f=F;P4?Q8@|[q_%e7y0K4tQba&s9 h?Dn>PIjb6 .T`]$j)j(W5,aZ\[$rQn90l*{h9r`%d'{m8E~:z,=W"f(3/b5uS>|1X#r-@}a%V!q-u9A}1vgM3tN T4X#e(@zg`%f(eb'qc&< d'a%e(> d'URc&d'U! d'd'd'= da&d'= U! d'd'W"U!W"W"U!BW"criticalmass-1.0.0.orig/data/sounds/voiceShield.wav0000644000175000017500000020253407630537344021621 0ustar danieldanielRIFFTWAVEfmt DXdata{{xtrpnpqqrrpnlllkjhcba`ab`^\YYYZ[YXVTSRRPOPSPOOOOOOMLIHGIQD=AA?A@@@@@@>;99;<<:99:=ACFIKMLNRWXUVWWTTTUUX_cefikmmikkmqzzxvw{~{xy|z~}yy||y{{urkkotqohbdppia`ea^_a_cc\PMLLJDEGIJJIGD@?CHJEACGH@845720124<7322/.-.17.0."Rt+XiQ;2&)0%./,&$$$''%  $""  '-+&"##)"    %* !)-*,+&.-(! &&$$(*))/259:6/-2;B@:69AFKLKHDLVWUV^jo`YWXYQB9:?99?B72026=88:==9329AGLQZPRRNINI@^%(!8'FV1 #&#'.6HZY)  ./,)*   #'))+-!(+'$$" &$ X  " #)((02231?INOLKQXV_jhbdlrpjfoqrvvZkzijb`lgrRGTqx{sf^h^WUNi~eRMOXbb_[GPVUO^aXQZmeaiu  '%/427M[_^enu =EOZhx{   |srzqgY?@@@BKZMNWJB?92.1) :7<>9.5ANYXYakp`\SB),.+%% (+1):KRI?ADJYo~_dYn" 5743:MWXK(!0EP:'H-;7&}rbUXbnohf{mp~xoa]H5(#-1478-8FOT{{|sng^XRUXN)-D6*&0S[ZX\m~yk^F.%  !'037BP\ZJ04CFCLjulr}nkunfqGz[@yg>Fk~ErsPlC,$%$4X&I-S^W"1gy)W #J"t8+2A S)&WpG1-]{%B9!r[>4 VDoM8HGwd~'E %O%=M?fWd\iS>2OW0Q A<%O=$ueJ$aN-V RW WyY*ZM.A7S.}l*7Ep>:9\I)bh|k i Ew\b4cxUl>WR(.pg]-iL/yU' 7"%c>JPCmZ~FhzAiD13`sQkn\!5/M: Z T]_Bi"1XW6pWwb"1X^B >&N5+'(o,7+]@a<|>7%dInw\`M82Z|[RC6P` Zow:>Xy  ^u uL.;)PhcYEb MH"Lbc b%CK(-v w V X?u W}1}FcbnH7U<~ ^|zfpjHSBS$k+s ,:FK?A CnH.AT?Y};f1SELf}?;+  CQq8CZHhWBz a& *|d  Oq )kC!c :  Y`@nj 9ezSr6<  |w9 > H`D :Sto ) WOFI])n|uj }!v"{< # z rF-EJ0>D b8|2g[n l+}Xy6S*KK83rv$>  bVP W.9: #|L/y Y ޝp8K} * rL!2aVVtI V 3E > kއ68! F&(--g' ' 8ܸV fk 0 (T_(#4;"0An] d'K$%q Mp(' l.|* e  !Hyd {9E uU E  8'g+[$j\':J#G# FFu9< Qd-1 `",rFle.v5(   (݋y>@0k .F#[:   U}a%|&;!1 wb2Mc -%#p!!"L$%&%AduXD/*763(~.f%y3~P!%q "$di>k+ l=8D #_$^o9 &%"InE u3<dK.+TuUv f69)& 1 B <u֫wg]/Py|Mݓ܈w4p:l7  o* r  grf*%Tj/ 2 X$Q5!;R@\߇ !Ee]%`7m%'6}-tԃ̬NHrPg}4;8 3+~"W/VG %>(T߆ަCS!'.E 7fh.7z+:2/׎ه:Q8_ ݇x$.<=5y һQ.o90q]T/7j/F,K:7# bLa. /P$ *F+}' #!=qNF7FHٶ)022-,Z/.1:/n'>ĝVЂ4@6m"?!L6?* /*Sl̂8y&(h9 i 1?<̝oI (6*Hu҂ڣ F \]. Z,*B}ht\ v:Ox2) @)EJ C++MP  z Dx !Q/e#@ X|\ P JDc[A 62xVټI(@ *#!?:k*Hbk CJD*c8 $*7`8<,*=|K,3#A?O3M2[>HOoחA 5<N ,],' bA  hr.SڮdNy N2' Kbۧ٠o, a7ԓ#:;90*&A " վ@!0,sOUjGg%/%uܭ g5ݾ׉܊Ubn2F4$O@LF֝85 ?*C( s2T 8.x}4 t] )9/$-1 / < l3_j67u 751MSLL?&616&dqY /] B078<>r8}"r \ *:.r~μ׋y;MV MWBQUKUN5Cϲѫ/iO> XܥAY]X\:] +,8d2lT! =HD-Dמl_ε5 JRH5e} h,^6'PNķpgR "ʴΞ=&2EL>PL#>![9' "+RA䭬L4g j":8CA?AJD+&QCC|3; 4@:H&L<3'E:ʞϾԪ:ӵbI=2+VJS FG'q )5Z5Z.!BWۉbΦ]B ;]q-%2&,@#%A:KO+A$ Vfw0-;BC;)VU = !.J%y  R] 5"$'k$%80O̱*́j [ic;Q*>@F/BC"مs4J]m*(6w@8|*}oC ϱgϤְ*FIs܃!-3;;a$ n >BXۧ 4@@:. m})΀ħq2L)59T8c4.B%Ei''KSŌ|@<WF +9@SB>5M*[z~R"% (]**)+4G7n. '+;E;%j  M 1B$D=3 -\'!G9"$b(N-q2W41-X+)S*3:>?9H5m0q([9 ,.!K  2=>9++ 7  d}Śsߏ< $h! #'T2`1L%wŞ01)-Pc@GEZ2*`"dlO,'.|#Sݕ6ߚ_T a :,} ' O|INk FDG%*&L/x-";" $5k@۫O ۱_ѿ3TEf_BkǷFuN. ͡qʳY8$KÉS*4lدҿ#Ik~̓簲UA+Ɗ\Ȃ<&jC qohppq".:E"QY]-]RYSK%@1! Q 0T*8$EOVJYU ME _ m NF !O T5@  2 eJ7O]od ]nWi$ f+l '9( *1!&#S$y$O# = Y#'*++($s!"$&(=((P(),0343e/+(1(B)l)R)* -/0.H.t/2e4301/v/2575^211621+]&6##%'& 9%(*,,)"oO# q j=;_  ;Ee+ J0 R "wCdu9B; c 4z R 8!9d _ bmW"+')***Q)U&o!M! ' +b--,))+/2d2/+'Q%%'*=.2p9l@FMUX9Z[\YUfQ1N'M~ID?F>=;98;LDMSlW"XTOFKHILOR@TDTjS[NRF =5-'n&5(*_++.52Tߢ}kG@0 z2Lt'9u61P|m{aWwC0 TG{ ;eYd jY3;38pum ;zq zcأԵ a!ҵPv5wAHlޕیԘdoǺ6N6ǯa\i- c7,gˠ^v>ůIb~AM¨'3 xCr¥k R6Vkfkoyl^\#Cb#:tݬ:^щJe#<T`dcPbH_\[Z\VOG1MvԚmC:S]`Oa=^[Za[0^bcX;CJ)? [F (*S9FPVY"YTkNG{A;730y+:%z+ ] z[.SXyw ( ?vBccX692$ +1hoJԹ^+0+e h$$" B])݁_\g z );163:k;;6;;<;[94*xjG0s'W7mF'S[]/ZQsE27)XF<|RzZ7 #'+0578d7E4y/)#(g vnn).%,1N20-:) #"n7.ڙM#vc5p[ p {!=1۰-*ݞE9t+@tS ~Lz n  &'&"pw5X 5vVV <<&[,-R+Y& v~/" N _ 3-Ln kZ |E=mP7? N OI  /|J ,X>y8:C'K~!dhO`>> D z oc*uaA59C #*,b3a40V*2+.12200V2>6:X>DLSR)NH!C>;:50-!*,% _#(.s4i: AF)J?JSG2B3;3+s#$,s23T !D  I;DZ  *Ucܲ{{pkGdSte ED%| H vpM3^ ;4 W pXc9 (!#%<(+.>.&[pK%yi-F `|;  D*Yo#_VhΌlZqgz@"z r)P𢓤&]G۬u+GhSkL68:YlU6MYP_e`I)Jz^fά¬/'H>R\]]]]^t_`Q3#hۗ1/8KPSUUYW XY{\]yO 4pRcMը˦Ѝ4]0CH JJJ[JKKeI)D>80t'u} 1hUp p g$*V+(Y!`_%YũlZ8!JWةn8xz[?F܈^ha6ú9)!*,1( 4 -mԲu7+ $5.59T:j;NSx +U62UH~-~/F ~%T !%*. /<+$%0F z ?3(G2%:?@@<=82,'!M F  . *j&s.5G:e<<;g94G-Q$c..YZS *D""a lYl/ 2׾Yפ2[T; 3 s[9GSs(ȥ:ɵb;7 > }k@T_ W~X_#:;8 G 0 "9Hr%|'u#)6<6 ($)<01j,V(r%"d F p!b&..5/:98h9;<`8{200`0<*<#O m#+%& ']% _,9I~t-##TBGn h^Ro8~`xUsOg%K$j$3i^z>u(. cs X .1st sF0 k Bq0 ! P f slTFZ1J 8 9 Ga1LxR(P0G7"B $Ո~#Z¨/ %@.Xkd?ghhggf^dG\(Ӛ1D,6JYY^QcdcffffI]UJ92;h_glג.s8(7DOW7[7][^t^\UdC,FEvҥšJѡʤHɿؾ $n4,j'+%#u*  a ':!{"4"5#Y)04461,))A,712t-%9 p%_-T5; >>=;72". ( .m L AW$&?'a''(&#`=; _A1 O@ *yr_z/ j!!M7 )LHB J $(+6,|*S&!G5^ @L n\j !##! v I  ? v@i4o[|4FOL'JcIe.,_K P $-:ݿچ;3  &5H_1!OI=}a.PR8 R<:js/?rRf©Q^ ͻIJmè(5O&!нީ?5bpM䡳5̤ۤTq贞m qPK ɲ~D #;FP_dbda^MWUH5! eݎT;h&: LYkbVbd^xZcW9URNIKA6):]  (15;B^ED>m3v%>%+ީd%a1B֤jcũɰͰϛ̎R`Ϗ+DUoHܲ˯ a#KPԱؔSأ!fL*c,lF( woMg&Aܚ /u80;&.4541,(%^!MEc7 g#,]5<C:FF EA=822 +#eBn8 =!k!$"Q#$&('%k 3  wS F  p*BmgjwDtNN9P/YM/3ؠ ZeСؒ 4? $$! |x/7g,N a%*#/2H31U.q)M# :> Mg A"+2^7998s5T0]) {J<u Ui#C`:#1 @v^^[  QTs: bq~5_E0H(N5#)(*$+ !!|e& -=2n46s;O@"C'@)9R2,(%$"Q!"&F(M*-k26P6,2r,'#!> Y d 3 k   _ P &O 8TyX ߖڕ_6i܅֮Н c5,Ѡݰ#!B= N!!!t!m ]LPk &=4 f `vv~;5_n8>kK$|ңe؉݃jSeZ`|nj0 1T!5 65p@0!!$%&'(*r+*?(v%N#!Z UJG2KuD T@pho[5sT+%߷߻+JIAl- \1HST U$w"(,0W0,# v%,X.%=r!d*+'=%&-366 6689j8%4N/..-<)="Y 2"2!q!$& ' '<''=))&!` 9V   | P lco'nC"x3-kNAWR[ZQC(!!RgK6YM|!#Cq D Xk!#W"|uY;| ?;_!&{+f-, *K&b!pL AD=j,r 3  @GK I(Rg#   0YjFP~OTqFScJEJ?BC@'zv&V+dHVt+-+byM=%DrXP.15G\T'A߅iCh5ߞhۆ+2kVdĎ\˩Lުd+RW SԺƧP֙C=;Ҽ2|>Ȇ"U}d , i I UD^-$i^"^) 1}8>B5DYA;c47+ keDOG2u#&'%% 8 v < 8OYEqtrTd\'vq ̫,ڜ 2$(2ȷŠoޭͬ =A2Ն׵zNM?ud|4W @  _ {e:XUh"5%(,1467~7 631<0/u/Y.!,n)&k%%&S()*+[+)&s$\#$m')l+*(&*%$%'((&J#o g9?VX:cj[$,L|۬.$dz xޖ3[_jUSZ,1"/eij B d2e3 !s""a!S  ID!$'-*F,-[. ///&/-r+ )&$3#""#$%8&&u'-((w('&?%#!NgrA?7E e9q?]jrQeT||k[2.)~tP@TocR U+hq > GP.P/d[ -i%5@9]-*57NRC .&&D 4 8$)I06 =?<62.8>>L>5r&[f"="  ;  nc#KlH * .9RL/()&s86 PV\? k aVGJ$ `i]-WK?5v@{`<Vf^h/CLlkU,g^m ]w )#a   i{jc,#+VC NvZ%o4{/ Z_-oAZLXVn9(Qh A  cq|\;RZm  o% a c6OTHJ h->i.!?P-޸9޵m $]?tKmt%?L4֩:%?ǎ̅iR/ rڪp0-pPﮕFaє|o7 B(R̭ҾvƼmվ `ax$zwbWm#w {EH!&(*A,,,T,+^)&"* ;W P^~i a"[!/ C e( F/i66ئڢe'fK!kI%7܃nxTyؑ'?zYPߚJq_/RK:`# ^ G @ 1!#<$=#!z r<p-!J$1&G'i'&%=$#'"!$!{ )ee-IO y I *W7vALSn v8F!iNud+ dTZG4UV~UC\T c > )m  F >E !y!!!{!!!2!w pKEU "#%w')*j**4)'%" m9hz0h + ( N]1pnonnM 'f't{]Ls_UV4|mPr 6& \tDY3XA+}l!q#$&&'&y%#!qi,bVFM( Q )^c2,td* .z )i d*!zh}/ _Rj[c+F mS $5n  4 kbI"$&)*(`''*,*I']$$(**(\&%'&)*+)'&&&n&h$"J zII$ ! -  XxZ MX? 2;6w5NpkAyt.Xn'tm:Sjhn<8z$d$!h"4 .^%y8 0""*#""3!C ,e&9[dM3 ! FOqr\]K #@_Zq,ߨzFޟޟ`%=w^(@r[j%X/r  k J ^ 1 W `(5 1,I';+$t( Z' p>=~4 q  e 5 _(i s  k f O u \?gE\ / C  LJ2T ] H xTfV"0 { f V : !7V5I6U T.QfMnl@bLF$%A Z.d~*gPgIyq  Q] = b ' C . -{F6 N-C%_1W;p\Jmkqe/.l&y97 $Ci T l   lV`e2@S]Uh?- a }  ) 3Ev 5  % UE`wRI Y<)QNi3u\$ew[%M-{W6$Tzz1"7$' _W: ?]7p1B &&/Ris;Af OfJa0&ua~aNqUSFOV[Kng0+ING҅Չԧըגݸޮ5~o> e!"%'***a,-I,)-.i.-,+E++,-./R0(1K2{345+7688q87Y6%53P2w0f.,+d)z'%#! iq ?QyoRi-I s߉߁߿4joc|5reQnJW)~ 'Ah=8\>vi~U F!"#r$$$'$#"W!\fbgRgt{34t pV7Kv;+B S]OHR/^j_(GSHlMk~4 gr^h buNp0]11DtM  g 4 $ ( b w A  ?[ [L 4dZK7 C}TRlL(Qm|Z5 G  M C  R e ^ h >Hl` 8  ) 5 ? & J/LHgM ueclP+^Ya,fv\&S3m+ RJ)"5 8.=h5|4u><,JT % * . y~ ^ "3Tuf({1O  6 x - j rJFQWIv_\,K4,]#!%+99/&$%/0z64,$:',/090,.*O)+ 4::J56..8A^D?7}9~?E_GB><<=bAC>B=>94 6f872*)##&&9!L?6 "a'C%N+! gGf ax Kt RZT#[||' 80eP F s%CD[bE~ S11kPPg:6<@B9By dm!b?f\GEF,e/zO7J-JM7n A d U w ' A ` c q$om[? =qpW p ( G$  X CjAcUb]')Ww߭x,݌'`I jRR[L:=`\l4h | L y Z 5 8 Q8 T{'8'%ge\%  X8 O RdZ0A``/`hmUyJf<h!޿qhG@>=}=mD +D)Gc&-hX i f J2~)9' ufc* G ] S  Z 1B7z9w(N8!vw:NH#G1UM1Ay,e$U > "f-K!b] !sUv4]N0  EC:59 SlY w T#=X* Tm '!|+T*sB'p#c'# #N)2*B' "F!',)Sl'(#F"[(@*'! "&(& {]Vy)  }Qu e q Gn8==G{P'z)2 n5  a K7>v #f[}/BU'V]b1LL  /7 Y  CHF: LE2 6Si ~k3o2HpX&aoP]Vn9;5<wfuaCE@9&A6Ej5?py*]hJ@5Yj,yJE/gCYzݶ [p&PZ|G!rQ3>}L\{!^pP[;H1d/# s |],x8b6BP4gdpPn{#ܪ9mBgC8*d;}N1 }e~N߸oD|53n{@%|ߡ)ǎIƻ`h0Ū*ƨvjYk=pFqdz 4nˋ֘|Y{snU eYr(ZQ!!"4"m#&),-...-g-,,,-.+/s013332J21111 1U0/,)H&c"$?u [ Rz&V{+,TZO݉݉ @ס8qӧaI(2NKZe83S͌W[5^;"sX6^L = 2W!h"#$|&(/))n**+5-.u///~/>//.t..-N-,M,b+V*)z'%$"7 @p`s ^f<'"dU +8J-s-p5XB*xvD3Wf@m< j ! lvN]}v& 3"#%&'e(()f***)))).)F(R'&0&%%.%$$m#"\!9 ;pb*87+8qk  NL 7byR:"D7~(f]vX_7++ %mY!e["RR k 9!=G,c"!(~j ;:`iD GL\7^NotJ0gen y4ZKy[epoq8|>seS~ph7)!6tKz6p<9oSv"^u dmY]Jcx8 kU''1(k)ISB!]!9QVU!(IPZztQMimY>I\5wMT]2m$4Br2')uTRw<^7iY|Abf[o4 Jdx<H5PFYv upQ=Qi$OVxW[28z܅=6۱ܝݕܷځ׮ΤYhĻ̿>CWk "p޹׺sW4]s}Ʉ:^a h H'*;^?_*  gVsM "$%k$g"q! 5 +k@0fNS 3 hAb1m'lEޡ%>_4ݎ޾C9ۿU޿`05F"YdN@1ROnG QM9*n:X  B GWQ- |"##g#$%%#!m  3&>S } |aiJ#jMFz;H@ fk#4ߣbDGiv\9~;haX#^|X ! 2DHW9.{ "$##$a#" ##$S$"~! !%!  U;r _ r (=3{b}q #D_@Zp2KP a tk U#%&&/' (V)*S,\-,Y,,o,W-{-,+* ++a,,+) )\('&N%t$#]#"!r Z")0 7# KRF|lm5W6G52p6*R67:frFMt G2sR  ` 2 N,!G-VsMe/ v M<Pm;F{KD v2}T('6Q >;H?^w}d x o$SFo Fx^SuXerG8- = O 8 " - I l7c:w 9=-GwE y y n G 3\pg%j2_?&,'Lq*1\- +/9MA>p97U=IyNJB=3F8NQNF=9:d==::C;t:N71,S*u(% l a, ;.a z:= &j!(Pf zB b GAu-!$&$"$%k')C)x(''('s%!xXtLuH ;x 3qQ 2`VV6M GQW  l w7Y8oG{.^0|E7 % A q k j:w dt,zW!3=4WFxl^Z>+a!$+ A04h=  urRp vAs>}uR!}=5S k%^o bo9Oze]=^*%+0LS5Wa.mx#&cn"YUfBUu9rJS \~pL,[TlWfu8ܿ+߈ݗڞֻ֘uGWsDШrDЌώ̝GόήK̓wдT{bff | 1M"*$%+')-268C98+87k53D212|3|32.[*B&"K ZUP{ |!H}g;# nM4d#?u+ޫ=+ڳn܈+T HL85[mc z EXejK2 EW&e s l @y1%|o&%hi* p-"jfO`_ NGvGw[RgJ \ S 6 e4=cF$/naS  '  R h DYbm\H)hHr?mAK%!4@>'c>=>u0  - ; ` V L C * m  ]   L C  }  9 . f    =)`)4} u2p&5c CMS:AM kU ~y!UfX0mWz;u}f@^ ;L%?t.5)|fb.4I(>vfQ'A]L1[^RxmU  e m S _ < M = { \ , \  - t AKxKaa39OU)a/Lzc/ :fK1]w,|u"r{( [ | . f r ` M 1  D u,DWn`I4KPXL@@[GA  U/'Ya[WY|Cuv+ "9H?nei`)v` I @ / a T .  <  8 ^ L  $ | 9 ! ,"[!y/"zyJL1 x@y^qT>2ufp1pFA-  b %{[, i 1%4*5--**+-V/00h/,i)(( )('&&$"PBg0 z$Lt?$Nx]CS=3ZI * E -5JVJ ?k)D6vi C  C G}  = r `EPyZ+{joS;JVB #U!6Te'5  Qtme~'TiN   T >M /1F6u~5?sU5~*lb)[KYVyCURw.43l f Dp  "*   l   $ ;~PS}yXK2&KO&\h,BEL/z/i>` f | eY !%zr kl\J /]RI<&hQkV*9r `U}eU>M`J@I`P7R]*b3JU*u}&m7/gm6xovtA{#"?L\XVdN#|*g3k73DyiC?,o8v 1bihWl?um2(S>%d&h(g D.Pz?Q'7:EO^S`~IvvmlKAhicQNhsN794i1(2B\zq3 H Y'J4G!SlS4k/TN:c$@Jnvn&=/c(; !nId;@ |F=4x,6S7R#Q*y Ne6Ba*e Vs:3hZ!tl\L ~! ,d^ h6yQ1e$n ?Nkvq qPbVbXjmeR= rO@tetd`$6N7Z8*$>LQ:)xS=^ EmQ^xorpnjw4~JS88#\7UmO-o%F{br0{7@s  . ' a e " Irus5GXZA&LJzh^c\KfKFu7my-$mU_hAIR''"t?UMS$(T'V6p|xI06SAK\4mj:m{>{ k?Vck*P 3/=~3moceH$sKQ Ww/&bN d  }&[8'Qne'I=p:#bcI~V$+.t kWT-U[+=V\Pw"9fj0/PU? &k= RK|{<kg 7VCEIA8! B!xY]rV,?RW4( R\"JRV \M"XbY@" O g>"Fihg[p3tf;'Ffk^ ;J)d>DzWwsj=C{F)NnxoE/N&eGݭݢݠݐwRܨܮ;ݩ*޸Vyh8il`%0  ,]qQ#{kVh v =QXE~V  Y S~r!9I_I{u:>&aW(.[uNO6WN U@3UBd*=_en n&p.K0)lWSJrj9h&v:X$I*is7;L ~1uJ';4=#p3O^NLF5kuykz5tcU*|6g$o/pz&c#NQH9.Z!f^\bz|qlU'QzjV p*f} }\X_es25d@E\g 76L}G#]#~jagtX i{}JDMjt]KDG#^):{&'/Hp_V4 g/l7Q/Z@;j ^'NqO=yP ` (Q" i1tN tQ"3q 7j<g7nc_</DLOWX> I~~"/?SswcJ@cpoQK71|5d&p\fQRc+{*bOCJ??n]_nE D 5 a w ^ S i u ] F 5 & '   N Z  Tk!lt>1fKs-v4]>LmKL;6fm^[k8m>|I`>I?$h  I     (   a   T'o?M.uO=lWwH^&WZ0;qh+ PO j]3$X #  O I J B xjnE 6d~v_187;A?Jk2u+1l&Z  Y 3 P <Y4~6UJFPbq{T!XTN:aV? h h  5 9  *q(,@|3`W~8(i! N{yVlNve8_(Ll+f% ' G V W e c N  u V  x ( YV4i=<t,N\&;i{AC?@U'uI2`&/V0+S1/K|HVP^jr ::2,6{%^&,=SsB_C5Ch d}C& ,Fu:_ty|xN@.!>g k!Wr}z{n]QZ[RJP!A#3)%7gn=_px--#@EDe bߌޛݪ;۸>ڲ(٨2qֳ֢֏ֆJ'EpM{7`{{lYOE/qa?CfTTF0eHkC#UJ}!& 0Ms,To}LA^h+WsV!n:_7s VTdy$IfyYP{bDCM]ZIHl  7Q"'DS[[<?>(dVTPI@$9|:c?{Y#)b7}7imE;^ SqI?Z-b|-Gf}dVNCSSM<hB|<kK oZ-y^O[%^gY[_^V]}Vc%KjN?m Cq'g/WyZFQIE?,|`)W e<Gm%Tr)Y] )AnMpD8eZ,e%~  ( 7 J d ` 8 % \\ `8)Or1JY$R.$O*c"Jk~ A*w8qbwA|dfDKfa7HV\YM1y->fR4z; vAF~n\Dq*}3~gU &;e-8F[v - !ASZ_fpso|rfhy .HUCCapN@ t Y 6 p F w - F b K # 3o-t 1  J 1   <  } j 4  & l vl~.o~>Z;8K k4],xFpacV^A7l ( uk` a  T x r E (  W    Y Z F ; * QR$  Z'C8~C$ r3rUFHRDNa{  ynNK7<TQ];cCJ$9ay~~tw(K|y6LTZotgdpW9"qZ; `_6[V,d|XX`lrQZ=<;;>Idn{_<"g2%4FWi 8tCoY %*25gEL8$"uN?(+7S* {/{(\(B]Vz-&bMH?( #>UxLCSNeA% 7*{\3R}%[Es"L~)M10p 2b=YgD7b1g8q Q0k:T|$W ^:}[3q7}H`#CiK'YuFvv}lL# ylodyJMvMC%=CAB&(5R  2@S]XF*(1=W{qn< %1?TownigS@1*8GLUlV^o~unYRTE87%/9;0)'uhZ2!(&/IbpttyrfYPszoaebKBR^jjktskY> mak`IA<;F. r`<7CL`N  "# vwwvtmU\fsziFp0.<%\+Y, <m&;ZbR@PXT[kgNDA?.iF pT=!d@uoq`B)i[^V  oeZLUx+Ki~N%Hh$WpC3Uz1\#,!  uF#X4W\v;>|npvu3m%Gj&3=HYo037*' }vD udJ- ogC#vaE${kVWQILcz/@dhp}@b?DPHHhFi$Yv\P\['ifHa]a1uY`km]:&uuaKOY[RSW[`cilnqrph\NA6-'%" $+8HYk| .?RexCk3J_py}|yuqonmje`[VPIB7(iA\1,h %$).Y3G7:=@BDD'DBjA]@D?=;#97666687777C766C6J5/3/;,(:%{"B r  O @(<~ anB)o`0=O ~  i /j !`""[###$%+'()?+,-N/024555556544)4i3c2010. .V-,,M+j*i)](R'L&A%$"2!gw+rc[ U C  aM @ZX|CQfDLhj@#&jC D b B Z?^eL $ 8 r ~wgI!jH(N#^;6]krM߃,޶ޛޏޏޗެqo1c c ICGl^bP7o#-'v(vIbsY!ybB7H%!a{!(B<-$\޷ޠޒސޒޥ/Rut!b-T)~R(q5)TV/U~*4#:8/ WMju08\s1HW'-{>&7mQ|aW =@=+NU ^, hVT/A )yn: 1 y  ~ . ) e O Fab,L2sM>KpGlezPu;,s0a9rt]9}`@52,#GC'q`ezNQ5+sL%$o_YZg%h]qyHLSe/q^C4)uIPEj-tSy&AwMr?5g0_;m_i<9QM+p:_~qghw"Vf߳ݓܴۢ/ںKزI׽טף k؆A5e\*x.L<Zlpiq#1+]uX a.VbGZYLKbOx?^9 %HF>/!4!?6;75 t$m{sf>*B&|J8t4k>GLYB6,!G Y7  B^Z7WWKU;]O@4 c +YCe C m } K , < + S 4@VYn8smeD422+ kcpz=o`#:z4/B1 3Q{ cS{hE gm;X';e!|HW2]b-v}9tA#~KP+vxHa?c&6OGL^|&Ux]2dS _0[sOT uU4)sZ94EKLPc|kYGCF>527^qy_4 LV+)Y~Tsd.X-[cR8ANM>?L#\&0S #1;4,5I^|n]LEDC;, snvcv-a 8].:QoE0[S2T}$ *G>+ &><8Js57>Xt~H$:YveE#p=&Om @i'7Qnxl2 :w5 ^  w U M h J   [ mVkKZuqG<};>AVq8y+5 y ) ~ c  x `:U\G/:2   H YguOF#Aet!P]W=nMs}-v!~8ELtQ(Th-R"6Krq=U_6c Vs72=T^emsrr^iJhzk[@)|9pSF.4`U"_yyDz6G_#Gl1x rz6:Z| , W u  5 I Z h v " / K j V ' y 6 0 q H  uU2d*|L3o05CTu} x  ! z 2 J u  S t[:IO4 r> 5 6]pP-21]&Yf_Q>'+G$+e|CHTaY:dF"*}g# Ui.i'rS/2RofdZE-4&  *G;@YqflBN/?.y)fHU!;}u w3^ ^ J [ t a - Q s % | *  H s A w N j E $  K L Y /  R `|M@=.  n  | H ' w ^ F )  r g U 7  x P #   0 ` + D e + i  L  J .\~ua6  { d E ~ u \ B 5 F ? ; 1   Y  _ Y { ` U 8  K ave3rE).T9S_~gLI} rfD j :  + R # x   o ^ p U r  6 9 1 / D A 4 4 G g g l v / U R C ; . "  Z +  ) r 1 e  Q @ j Q :   % ; N \ I 5 0 7 B M S Z R # A > N [ A   E n _  ^ f < 8 F    u  S  hGm,]A+9n RJw     ! H n )    4 n z d M +    4 S y _ ( o 9   X A D G N a e T K I H S Q 7 > & +@pgimoki~rsp9>) <  ?p;$)F{V`I[thljq%  :IOaW5h|}t|}X_=o[, X  . F 9  [ 4 W c x  8 G  } V 1  a  W,l=v3qoD*CfJEwVLIOcxN{@!Ln{lg,H\4r:> ^C0uE#bQ+TH}ZDH%L;@/,H0a0x-}TW c>   _E2 _@' ~X??;3&\!73s,4;DECA>9/Kq-V 5^:^ #$/4$h<$ /9NKXfm Gfgd;+$7Sds}d8gV3;^4%{iQ0%oI7%vm@.%zO/firnpxlQH yXE"Y& s[WI/;FLC6L]xS2;IWad^]biG#zcTK4OyF/-6Vp0p vna@rAs|0]}CMxwwJe+l=RY5  #`G2g?bRTM "Mq.Yp!LmI 6J^r%>Z%.8AF@3*2ST^WMk]Z$)[}o^Ll~ClAY">3> ,9JPQ]=! xX. xNKhY<Jdqnbf|n!6&B@mjZ"AlvmDugg\4;B;you{}dA(1HqU_kE+3pvfN7 O`p~FeN n2 $Qa?+/C1EspMBec}yZTI:HSrwfbq}wrgU;Ln~}tY8 )9??ajm4c1C@-# !1AD(,8FMB762&29Tawz qnwE*_v(g$|FMZG~M0nm E9j4tp%0N:GL,  )7[]p:1Y2^F;a\Hf.83:[1L 3u4p$kCxM1[G?: 'I?xgg' WP2g v?6jO -pKhz 9rmn6/:~uUZ|j,}ivxY V/&$  >bvuhgsydMSC}%Yzyhdu+6FO\xsK26CE;23WGD=j@06BJF) 5B, `TXUF#  ,LRAn%% 8_bEQkkNzT"ODT 1 }2NO:QlqI7PhVy};?-Spf;"Lkd!I5Ya/k5b(~X=+#79 Z10BW^RCDScm`Zhyr[LPUPRWX[D;DZm#>Rdy0FOO3R)dpS  !&,**5X3P\QPV^lnqsmeedZF@50,~|hOCRX^dcNHIKE -xG ,TMPYLn ,4)&! (&  7Z^ahvzS=+1=9  ?Zqtq}{vogZMG=-w5}xQhL>   yjSD8+%5>?(zeK/ {bM2"8CLVWVbs mdgdVA;, *9@<(  %(*9COae~ /1,,=\lzvi`eq}xrtm{}rElK-&-% (,:Mo$@cm} $vt}odcb_YY_]VR?"   '-;_U\cgjR<8GTciig`r~w~LJ.".2?800.! %&"#'141/!)8=G<03M^fims}AUbo}.I]anzwi^RG922285115( xpg\SMLMPOGLUWfnk`WP<-%   xl_\QA49<;3" |^e5K> #:Qhpv}'>Rhty{tojbchnrbapi~cQbg}wpqv}ssovxnkg^YRG9ADDFQ\^]]VMJMTSXZXSMHCA?=?AC@GJLMC?=;552340.4>HH?91,7AC@8063*%$!  !'(&+23.)5>?=ALWgv||zv}~ uuuxcv}uiXU[`enpkhgiXh~xrj`VU]YRD74FKMF4+03+ st{{u~}|z|}{yzxtqjjptquy~ "'!&05:BOEBENewno|sv !',//,,-5>@<:=AA=65;HX\YUXckke[VW\egpx   !!! "}zm~FFk~v}|z{}|tfirs_SF;6FPRMCJNQOD=AKUUGBBABB?;9=??;78?FIEINV^[PIN\_ZXXWTWVQMZFIRP[bkruxtontqld\[^_\UKJOTTJ@CLQK<* !""###''''#).12....,-*'')-+)&&"""   "%%%%&#&*-...036989=BEFGIORVX[^bejmmmoqsutsrtwvustx{}~~~vYy|}xpoz|vrpqrpmlmmmmllmoppolggfda^]]]\\ZXVUVVRNKMMONIIKQUOKPQPRHGFHQRSRONNNONKIKNRROLKMQQNLLLKKJEDDDDCCBCDEEEEEEEEECC@??><===@@@?>:720251.,)'$!      !"!  "$%&&&%%%'(''&&&&&&''()*,,+*****))))))('&&%%%%&(****)))))))))))(%$$#$%%%$&&&&/7-#LIST@INFOICRD 2001-10-23IENGXMAN98ISFTSound Forge 4.5cue dataLIST<adtlltxt@rgn lablRecord Take 001criticalmass-1.0.0.orig/data/sounds/ieow.wav0000644000175000017500000022536407630537344020334 0ustar danieldanielRIFF*WAVEfmt DXdata*  $+127@NPPD4F\cYMV]ajuz~o!"u}wtt}f^]U`j^MPmxraP?C==?A<3PF:12*'%.%$$~oa^m|YO]fqnb\ZUI<>C^fiaQQXbkbI-&?W]F ,PKF2103=)?W`RLR^^ept[IBMUP>*5NYTSRY^otWW`fO;CRoTH"-5GP7;jq{A7+(.0'. .OXkbK%Iv}R+Hv1OiP^*GzwKafi~M;BeLK4:@LdtY'15Ebblv]H^x{aZpquZK('O[M$)ML/   ylbOFCIL?D?"  ^MbrqdJ<6NGRIGk[@()8$f 6CYlfNTwp^ah8yvantWE@HkyM{{r|uLQt7qtpmt;Tm=Jnot|}dLww289<83Nvvem5VjIQMu/;,3jgSVvtc|.D#)DH09ClS"#F5(*7::UhNUP>Fdn+[rb+ Q`'%M7?fCgmd(u'& _p}8ka)(Y@]~+-HOi9:ucR}R40(U_21tT(SLU2mB8iK'1).qhF$Y]4IvYa'|:RiK5ln ce/!**WYk<+vYKky+CWjH&Hjz))?J1Tc~j4lfbV`s;AJ'k3O481C0(5XQ,n2;}P  I&_>`}Yi*G y1J(?r8\F.*&Q%lZEeQHlV0*#/P=TTjXyzC[ Ujza99X"s\P=vZQr%/ s38#pZoHwPX;Q b~&t~33Ak0MgJ$L:B@4\0{$P+^~HKuz{Ji,lFSL8D548{2d'8,&=PW:DSD{1P`|6Rg&(D`*=,gX*11"8`{n2{[G@k6uR{ V0|=Yo5(2|AY[;W2}iF HL$D{"BgBYni@AD^P6X=1Q7;.! "Zy*"c lki8gIL {tb"/%1+[DtqrSZ4V~PYiGpK#T]F}4o-o]J Peo R*nB?\Jfk=0EXA-KP%>AoTj Bf6"="3OCM71j(jA7[x;J}f;$S*ZPVrk}pra(40'z -vzgXn-lP)y#dn&!BXHL"RA3hz`(ixa~U[`pLf| &;Lu /joJ/E"&o*Gx132_nW/7AR-N4=9yyJ)d4Y7_k6cL  ^6~lvhO?r&\ ebmaMG<ceKR", x  V$*vS\KJBK4Ar!vdi=afxY<aFsP!^@dnWM}cR 4XT-l[ nBu9GqR,<[YEj<\T:l#0J21&dYITv%S4h_~DBz9<2>XJ5e=ECuQ53~xOr Mae, <a.ADD.DcF+rTe d) 0yw/p=mxh ugyLXE4,{9+&r*qC'Yj$1Md;e*@1OW O %  (  7kF _ \ o g B [ 6 M # j  u <  $ v~ P 9 S7H  <2\5[K\I:e )OOQ4Rv ^zG8~P:3Z VSRb]Nge Scv"'y f)}24N;eq4]<`s\G?CR] _V#1N-#FIPr ^#KeU<vJ1F\ dJA8}CCLNW_*n@|Ar._$avzA\T[#D,iGTZ=b'.N ! A]]W6Ff$P:l9eC}f2O3Fd'Bs4 \  [ R- d Y  / F k 3 p & V 6 ` ` g 4 x O 1 & [ } 6 \ 0 -  GjR M . Z ;qVRR{l5zx]B  p.JY w54?$^ybS^[>;xf H@:8 Sau6{B#& ]BQxya>C*:9+NxV/Yf 0 U7U\O {1{aHSwHa:E5>OWH%yGR6z 0OB% U> o%>|KmS  wf  X G t  & { O { ! Q i H p )7l1dP ? & FN8 % t G zV  T 4 G Y # M T-RXF=B?tc a{9M6R\ /IdS1Mu 5C:p7k$zrZG5B 4"Kn"+f))Yd ,jzB LW=v{'VdX]`- hjY< <>O8x5#c (O\<v +Qdy&npG&k T\)+)#Kk&jO.y 1  HD4dw. B ? D  z  _ { A" + Q  %  ?Z[ ,h<8v i lq 9 3! r "  { U I & k @ '   OcdgrnjD\U!A6w:p,O?$NOY:o6 g+%+.Z11ru@0nw9xhui\~c E~!3QEv-#KDixW(E>,GK{GELR9,(%Y&nC5dMDeM0 |.^ b7 XT e1C. 8B/P:~L3{DW'UP}K3a :ds5} \N6m6`pqKe5t#\" o M +7BZ v _  ` f|  d  U + e 9# C v _0I  H 4.q{   H jF %N ^ < p O  \  0 h @LiI(\}.U(A}4[o!63ry;S1OpT\sfX=yxK i6SHP(a=>rXb[9H=TNhXGUo0!0N'rV.49pR2E' E3azig}MMkK9ma3 `P2E~Q X440NNA@0FDqH`J!P eVK8YfK-$GrhTXg6Jiox B e  ) ? H 14 . = y )jX p { < mm  o G>Q   X N  ; ! JU  e Y @.$DZidukN%l };0) @sBpKZ bn paWtQ*86mQ{t.)]NAHF4O>L 7(whjc lk';A0:"w!@b ^.^\3MaP ZH*22G.N fO$ '+:Y,Gpk>(b: J M < y k M & x  & F I K #  }  , Z 4 B7 z K , C s 3 h c | 9 H ; | 9 1 Dv3 G {$eqU1 $E`h"0%LZw@R^SspPP\'}s9tI0*~eY9D8-^U1 U|5YmK .K%g/n MVR*)w${^ey'6CF| ~{$+k+nHpB_#x^+`Us96yxfMe<5`\B*m4o#[,Lvet-;1DXNbs&w[5ffi?cwJkq c!qD?ES0wIrliB ;4i MEHI:Z}Q i    ^ Y   " y ]   3 p Q  = F 3 # B ;  F 7   7  . H + ^  t  Q N ` ykF 8w}[cz<iKEEZezkG@(`e93mBG9C G%kQ[Qn2,KY-uD^@]WJ1^`qUR'_d[O-0}ehE~3ob#'?>a/3 `w f5 n { a d f HB z {  $  ] & 5 t O  rE0x`W^e>wH-6h  zwF>o>-%7M3m[~tWtmpqIj.[.#?Kh,  )Y+GOP$ X(<%+}\-X^[*4]2q&hU+|sI7%hAcT_%jw|`& 59aCyPO]\'z6| 4 B}|??hSC=mI "q1F;IGRlUJ57Sf7>=5_^X0o P  n wi 6Fw/   q   4 T, + Fu  J k(^ 5 . # O ( N]^f  &  S _  I / h 4\ , ~ 6 s]H&M*NG 1j Jg* %~yrl`+';U^WA.&*e]IS2gqMB[ L[ZX9 Smy%NN7yXnA+w ZhT(}ll :ZT~ N| G|H:}5<6^7~i]aw2(pPdcM07$=T85kr-B#sWCWm ;H1}t 3?wnPQ7.3 w k,Y  d ?NNao c I u 5  0 <FX< ,a }G  M o  q  , 8k& ^ | / ; } > ^ o L ,  ' k [t ]]q 7=byGKSiS^G.kD/d"WK&_8^+W'KHMk_&|8(6vl*.Vvq H -zTaV==m^^$GkJ=E|+ ost<  1Ohu$nL9 Zh "c/e b"=3{|aSJvL?O3VzibcD2twaC P }D,M%_G*jVZ'VV1 d$/2%_7o"ZcVwN:L rBl[v )'515AG*\'"SV/tRC6^$l5y\'q[#[ 0&KqI/>^g0 .~l(q'j8M*Y*^'zValYeFXit |  d  b L _ & b EE P4 w<B%o0"su< 8^QwrA0uBM_; ]JWC" S j w $ G )  B  *+-8= SFN!a '->}f~[C\Z5 #nsKH! 2h CoMh='k7L"yN!i)-tPrVBa.65uly33)HIIc+1xoTb< zbvz:p d6D6 !JQU"W!I$HJ3o*LLeV7>*l 0Ts :,yA~ <dJ SJz vd) ^7' ? Y}u//\S`c  ]e^Pfd  r~2{W# >P5 ) 0 ivw $  9 T a V o!W| .z|Q0"} x4|`(R):3RQ`pz'NOMpn}%GE)EqBNdh/r%$^cl' L&Hb5>S'P( _>VH7nuoHPq}^Xbh@ -U ^N xu} o S  sTq`]@c</:$:y x _ KrzV^w "I<ntj0` $!%(!# I: *nKSCADp  `kBygGf  y -*:Q Q #R,Y ] H ~|ll O8B,qUEd2Z==H"'+@G` ZrB\U>~8~'GNQ[]od=\r.cikkm]wiJ Gc$WDH5(Wv^WpLux4W%0BQy1G.AT@pxG B%]IjA!bmYp[[}\.AD'}JJJ_~e}RB dm[iZ/0&\Y nߞFZwH8Hޠ?:=o>@5GJLN2M-M`F:49"BGFEBA!BBUCSEHL2MGAa? >=#>?s@=;|; >kCCKRSOKGp>6i46;=C<:88;Y>@~BeB]A=6/.u268k9*8531001451 ,&#$#%Z)N,K,*('`''(4)'#k(  P?Xl/6 1 X F \ > b2VX == ^^Samwak?0l߱݀ٲ"y>"fُos؏ִD<ӉT܂چ?2hT)D[^Q J +!  v 9( 3 !&`*{*(m%0"Oy/9t!_"$$  "0$# x0C1]i != a/N<DDF Om*l<N=:J 9 =   8a7"pB]6)Bp!"S#"!U"$a(D+x,D-$.$11/.}.///.?,J*)+,./z02u5D8:]<=>p?A\DF I;KLGMM MDNPnS^UVUVW-WVVBW$XX?XVUTVUVfXIY,YYYZ%\+]]]>]\\z[N[[\I^}_____`Za,bicdeeedai``I_\$YWRW?Z_f/jCkkk;i|e]cbba+_ZU@PMNP?TWZA\]1]\I]W^_aea_ ]Y}VSjPMLLJHeFiDCEcIJKgJGZEnDDEFEDC)@"<62M.[,,+*D($ gK!"$F&&C$\8L20f 5 ij { # d w{B>9:flxfX۟۩a݀ݍܵ?f*/1m++Zґ1i͙dͽ<Øu}@Ŕ7գ{o PĮ(2dn?'#w-]2I[Tqt8i |l!#'i-l1#1!0.;.,c)&%$#3%&'1&"_iX.c+g6-C((!aa\|;,IgChݠD;n" 'z @E?8\Uel yJHD|V y xI 2V5|\`u Z #&_+/W48QQQ^QPPPXQPRST VWyX]Z'\]_Y`nab>d\fMhikkgb_]\]]_/behgg.hh)iii>e`[ViRsOMLKIHHnJL_PQSyUV:VVVT~QYM GyC>:98u8740\+'y$"_"<#%(+{-,S,7,,,c-I,'"; : ? 2l4& tgRmM9`N }bnRb7߮ޑ5کUߙߨސ~B{͆ HN9ŌŋtƦj'^]ȐȊYyNھy9ڻ$^H;^ $  aJMZl7FxX:@/]tU !1+45B5q4?310-)T''('$ 2c=:-۲ݫe\l]ւA֎eDәҦҍؐߧPZ VMkj?RSOډԺ6k.ҧ\)DU ⩬8 ũ)ͷ:a˞ϝ  # H M "#R7*q*d3pm! #0ALNdNnML/MMMMWLBKIHGFFDA>c<;<=>>=8=<;;m<3==?m@AC>D=EEFEEEFHIKJO+TZbkqp9n{iedegwgf!c_]bZV[R#MGB=:c7?6q67g9:852&0/N1442.(t!~; !x$E(,714@42Z/H,K+X,#..N-)*&#t ], w <(" 1 OJm[tXE;j @Zߙݓcݶٸv][Td/ѕA7͜Iq'EXzФςʹ˫ʇ[xsƎģĻ$ę¾\n߾^4j،D[r5h[>HF93TG!Stv 4:Pp 2U #y+U,]+*2(zP.* qփ+Wt^:h \ѾЦh#gxMЭԓ$d(K ry|u޻ݟ}wܡd}I6Er}觍v3NʺX{ S@Ƹو& j ~Z["{+xy^FJ~L!3;1RK2SeTTTSbQNK!IFfEDDCCCC^C7CCD/FGGHPHHH IIHgH[GLFEEGHJ}LMLFKJII@x61z/c38::>EMRTUXWSL Fn@3;5-a%)9BM>I+!!f!z x/}* |  ^ +>d ߁Zt[#*qdz=KM%(g!+G֮hz֝ڐj)ߪܞqIW/VX-"~wu1R?גמ֔&ҴMˏvɝ[ɀˌͶE˶ʝ|ǎYm#eu 7)""  "b VW #-xiGJY%[ܪ#۶_7WFuOO$#'$#"t!U5ey-Xs 6ΨáQkG,ǠH\@ vY. vLikۓx]ݓ1Nj=%FmLcn?Ϡ2Kܾ>ۦ2 {r  S/,I/d'!p2Mjxy \>DS j}&5EP#QONHMCKHBEA>$;?8B6)544655678*:;<>O?@j@Q@?>=!==B==1?-AvB*CJCC DDnEFGBI\J"N}MG5EG<);:98}8$:;=|>d9 "r%')V**_*+-$0<36=;t?sBDFHIHxFB>F;k8N77=8 74b6p8s8387O7 8S86.3".(" %F0XD a 1}/q0)@z%N d +  -u 05a&!څܾo6[,S|)PyÒ6d. d ^p;ifԒR6JϢ!ͰѴ0`f9Žog#LM8 < $ O utLrے 欋,nNXɑ(+˵mթܨ}SW2Eҿғa$եZoC/.LҲ"?@h#oSc싗/۠u㭲`͜7yƢF:֤u)lyA// 3Tb\!ֶ *#L&D *};@XJ Fs](  cajV4!E---i-p-,+*'#kba#&!((( )(r(D'%#f! "%{),h/9124I6 9;O=>i?.@@T@>>-:7H5644k9A5JIHFE>L3%+~#3  P{ %&j#)S P H:\f  _ ("p"I 2LE:ޟ[ޞ؏ƊŲbʬ(_3$&:1Os$*g2*!81̽(4̨ fF $N^  6 C Hu?or;V5 ˖'UMZ"07. jڹږjn(4ڇ8=<;>4@pAA`>978g;>KACCCIB?5=<>/@A BDAm?<"950+%!t x !#''J%#=!Cu3C5  T *Dr lP 'gT0lzz$|e}uls%qt%љϼ?d;&ؘg͂Ğg. Nڒ*K·ء&d%Q ?w[ߖAQSLcf-fW=`dֈ%= !  Q (L=Lr6{j<@Isl8gepF#fpQ޷D_9_QNzW80XVP{;d{k4W1Cv7>1(rp:ZJuT@R;%T = ! \V  (:((#'f'Q&&x$"O'A)$*)((f*,T/1245w7?94;5=3>=;4965:5422M35@MSVXBXVNMD>>?ACGNUWUTVTS#SQO%RUmVT5KCHBF+OVSRSRRNOMMRNKE<;4029@GGK1KJKMNQTTlNGC944:8>=QB$GKSKGCABDbFvEkCRA?>82/ /060+&%E(*z-2D87G/!  pF*%,.b(pl3; &  E o 9l|.j ^,us~rl*@,G%=']Er0ָԷڛ<Lܸ7xTs7]ol%nΤ͢ki,S.o&ؼԁҷx8Oq-cu@{vc_8_2QV9wjadqbESBB@(W& \z J@Kzec>{}|jbU{LPyRb[T[o3o ^"('''(%aM JO#+,,/,>,,,`-.<,!qI$n+/35675421.,* *+-15:=AqEI624a<\EgLP.TTSOPDMxLLWL3LRH>Y8:@YDFOK@PRQqOlMqIB<74+57/;#==@7DIOUZ/^_H\VQPQOJXD=T:;@FDJI/GC?5;e89j;=p>;.5/--'-D-/_0/-j- .X.d-v+4)'& &f$A!]^ #&''+&%&(w)&~!F&3  wd J *  I  xW B Pw/\ FRhgqxdPIC#S)~EQcEdK2tq>zbLڽռ.U !AwBE- zn`۱-S0UO+AFJmv څtٍEH۸p߿<5rfߝK pY3=< . d_cW;R_85L=MNy w h<Re(-US4q ' U@uCB % & L7 r~d"u'''('("b% C v&*6+* -3;= ?;B6:1..01Y3444{33 345u40-c/5)=>:u4/#-.b5?;a>>9?@DIeI1IVHHA5-l-l5@GH'FBDxKUZZ SH=89B@sFpIJIHYFzFFG+D>5/+%-d1a44N3224367)51O//C1V20=/.Z120//.152Q0X0.r/27 983-N)r(*/342B/+=)d(h(y)(%cS2n!_"!]sbIQBS/p #$%$"M"P MoE"" vp<A G v B `z1 :\. pIM*0X )LnYEcJ!e0۽<ֹց׳TKHcӑLߴ1ݫvg{ݝ`׈T>ҕ٪*Z-NgN޹ۥ'Ο Ȫɮ S U$ρRC43MQ:Ҳ}mE7{ߤߩHwDYgr/NF~ܢ ٌd5^<_?`f[n(a#,IB?DD\S=mZ#kcy T`qXCuU6?m7=qwn  A j 6`%> k"&#f= Uc #%d$$(*'t;Zy `>+#*-"-*(% #$(#-/Q243w0./j12k35556@:AC[AX<695i01 6<9;?GCRDVFpHKG?6,g#. b'8-/&0/l.S0H6;:4%. (#S#o(.2[3t4:4^214{665754458 <;98u743v45457?:><:=">=986G3/+>)M)*,,-. 0}13S6640,)(=)=+,P--T.=/1b479:8v75 44$43x21*101V46631121/B-/*'&'("(\& %)$#a$%'b(()*V*(O%;#! 9+M~[NQy0V{ x&At*Epahi-cvUIow>:nKy6؏MTM՟M`Nʧĩ]ĦR j)WȜLvɫQΩҼղHoͣqַY>Hؐ)$Yԍ*׮?ط˗rVrորaٮ,!imݚ 7Kd*uVq/of ^5g+HW@^QI%E,fS_ } T!;W R`2.z\C 4'. K<O 1C'&1;+Y/!#U%%%a&b& &$###$$ $#$&{((N'$s%w<vR2d" $m#!x!U#&) +*(]'('(*+x,0,+*++,-M.(.,+)'*+$--6-+Q*L)((''''D''@'n''d) ++j+*7+,@./:/r..0f47J::&:877n776432j2234-6H6y4Z1Z.P-D.0!2Y21/.-c,{+*+*y)'%~"!#%H(*t*)~('''&Q$L"I! b  ' !t!BpL { a Y qsz% 7?d1Tw9)M*AUhټgFji=֬'uggmBͽ̫zʞ͑HY͒cѽУϠy/ׯՄҸM؊فd~DܵPUӜ=@̔ʙ[ȶ,5˶ʻ0R1:@ƍɜ?ͲSt|фygξͯq͓ιN|VՍװؘQJ&]xp'ثܔZݘoM֐v0ڵq5߄p6<ܶ>ڻC;C ܓܶQݠݸ#ޒޠN#^lDs#rHYg8x{N3cYCYLpqcQ-u})E XSNuD) $*S; u_`^y[g/Kp}M\^ Jo:05o! !"9"(""!!"=##H$%{%A%I$" ~,"Ig:!b!:!^!!K"#$%g&'':(]'%M# -: "O%U'())*)])[(&$1"J ` X!)""\"! ?D {D} g , p L H p <  b n  r? 7 - >  Q % O  1~r/?]3#0?/@ MiEnG z %bI$1gb ddM׼֝p־+֔ײP܍ރ[ްBէ΅Tpж҃մ$ +1ѧm\ѭР( ה=-U0ئUA]4PT24'ջ#'x`ӚӅظ٪|"ԅԫ Ep),nu=T{ָdA,ݷۧڰހd/. z ܓd~ݭܝەmKL޴#ޞߔY./޶=-= $$an_5$T2sߌޭI$ߌ7i(ur3o+mF*2SA fce+n&a7yK,]1brU*~Rm 5 O";icOG !("O"! 'jg6l "y##6#k!/P R*p)( "C#$|$%%&'()A(&$"H!3 w f h!t!b . { /XH^ ?^ z p nF?Kf>$fs [o f L m!Z|AibAHSZ]]XߔZwkߢe1BGHaޛ4lݣ4ob#.kؔـٳ6ԊԝDըִ֫^LպԄա֋")r|=ڎۼ,VPr}|E1݌ܓ܁YDԵԑZU s^(O0WiT4rl ޾ݡݘx܌nٱTY#N݊hVnob֪P+ۘ4ZJs{U}ob54%NZM lT}. Pm:DMlw2l G!""F##$E$#"!`t{i#Yj#npU!h""#"!!2o "Q""A""z""!!! |>j DG_B F w '; Tx8!}'fvE  && [ EK]V1oh2T8s!jmb#5V^m]MhP}{0K]%E[E^9Y wWh.z0dm$B(="uL$*`ڨڮTؐׯ؀ٮ֎Քֹ׸ ڢ_rU)q)>|A&@C1 V ZET s~~.L:|`-YO7a d 1 ;  # g 9 i\' N hq8  yq% 9+7[v?l 5b bJ4Bb|_c T];gcܑܴHVܰy؆v_dQ޾OەHڨ,qքق܋nCt8d܇ܺmvD{W+F|kreRQZ0 nLhc]YrIIuqG U  l I ] (b h]6l A  K Lx|D;F'L#QKKjkx`vfog"VE?6\3=j|,QHg]`Mt1#'_=g|/\5I   .E] x P Q 7 I / p!"  4>  Z > /  AYN[/ e ^d& b > Q  b ,  J ; /K#?f l $  > 6 Q$AanBPv#7SG%d 2)eu ( AUZYFgsN* :  i 0u {FElK hNv6w;m)0bWVrbiC"quSKXas y w p ,J2L;X'S4&Nk߻݄7b1ߟs*DC َ׼ԕbkۼ5@٣6ݥBެ']FE37C@XhYNg_iL$kjQ'p aEeOh7&l@#4"lqyp8o(p-$^@ Z U < +  \,x 7 * R  )=<V - |Kk-0NilL1{ j)'v1tGBm#db!PBJG]eq z16D*I3P/e|17,J$yK53 " D = ^ Q # n/Q v U J2[Twj[WxO+@p> ;v_V~i0]rgr%wye~jme\[ia2thUpu(~{6$!Qjw1>!r,޸ߥ?%4KD0"ؿcغQ4ٝ؎ڝ܌%݀ OY\xq%߫Y-ewbd^U:Z ߁.H)|sTGDO5"'7 \_"6srPFag9l1=UmK ! P > R1\G 5 z NM,.6 d*MGOKf ^eu a M|GlkG;z"c[6 ae[OZlZD_ [#Z+8sI . z Y F 28# X(f8Xu! u % * M 4 >   !~+puuqoPVf)-UPD-fKo^ Ew: }2d#T"c6 J^ymeߔu{G9ݣ@5Dݦ?IZO &D2[$ߌ4n#:fQpWbM`Y{(H-|s#5 &=K`CA}O:8M}m0sM ~ _ ! V S'OwE 8 k#z*`@ I z DsV+~BN' `E?9q7$bd5Mzk`,Lt[-x7 @ e<:ZpE"2U@VDS*3L,zOEYP_ W)]/}?V r CK X]:^YW:\ CV * z 2O&-[N+GpABHcewj4ޟLI@H+k-SH>CWyj}޹wk.( iM!޳ߖvf|'|`fXbKscn$GxkXB(`!`l V N ! d M 6 H ^  >=" Z - KO n ) di  O uy ( JLh<(4:)w4!Pf,3a$vGbx9{58}6)E(rfE(bODhm42WA n3e]3=]V` &,Dj,uzKqDM1, vr) X aZ`G{ei,ono^O:Xgj9wu H   " V  T  ' b  c  r ? b [ug , b P  n txOM<L],5EiZ]AH%=y=>0D$/*,\.|rQv]#=Ic @shF No"N Yy]1M| MD[T \ 9  3 L G plN c d%w,|0}Ar%@| 'IkFf2)h;8:L~o6`vZq=D\Kf."Tzb:Qd !0 t*T0U=MsPk#Er=)Wqv!Ro|Hv UVWtTxHvjIcJSedD= ^Mr5BJ&DSc3Y&?RB]~IRZ y\{/`M)og!YB7 L YN[~ Y   W / >+*9> | \ Z N D 7 " ' b @%+^IxAue !(. 2 R : Zc@>/iZ!| Z F M 1"9&! Gv+'J" r ; Y  ) G 6cY s T H tF-!j9s-0&l&MX Q3[h.yuuYG|gB+TE&lby*kt^Q$ok0jXuCpdxNdBKjMpy;'Z{/.J9bV~#&&Zab{3lU~@0g_yxk.v'p%Azj_LhuEZr PvY!([7. IIU+2a~`jlk1\j$   ? f N %  &  r e P I a U e  2 @ L   l  Q r pAq ]4]t  3   N 5 J % 1 P  'eC(bY-m8a1)Bx'bb4yGm-^~9fE0) .]sl n|vIqIY-U\ChlnpnX\ D%k8pm&| r7m!v)%S8]A)!=WxW8BF8[{p uf5^qLjsIRWL/E@VA>+59y_HQ!0Q1QEcbp!:Z.\p9fvyNb?>T1( {=^Ty J||)$d ] < ulQ+r9KY^cX  G ` lIu J C K  b F  [ )G: 6 0Bh- - 2 o > D V[=stjCSn5kjv>x'3A {I}Bh*=:M4X_W[p!t/r8p_eo#D96W 9u:lLS7iPcCBO)~,Jpd Oe#Yo5,",J-?! J  ' A S `} ( X i p = u   ` a'.D&G-5FgMZy6D> [ a   (?~UrGc\8% } t sZ@i' v o y e  - i P|,h9LM\,-(%iSj6J-W&aN@{(\ss.y@g7y## CM }Zi2">-   Z e   7 >  y ~, S @Q \[]2HM# ( R![RUP\N9'4LO '@TNIEvGm JB|UvhfEqBM_ "  w \ l : \ *t40-R}[ zI3hNwm7=A>E{a D z@o(Y?+Z(U <  C)V 6 $ xO+ r s$utc{|IA|~@2_e3|jc%ukgHqL){/`jY C 8 b !pr~5 Z l =k^  : )@Fh_  FCDysOh~}3t$ &_Z1I[1= T 0 W m #7O Z \ Y ! \  U 0   YtT '  s ^ H x 5  : o v % 5 < <0n}QOl / $ y  " SqcAE4eI  }?~YOk9 s~KiX M )@jyN/Nv1AXyEWB9E; xlz'+j\k1. u(!MjwOH.+&^#I^eL\AO8Q "9TL6( zyx1k^g"VUnBcu7f@`gwtq~h0;M % :bE`|/[4OY#WxvuV& C?kLT0  . y  K U [QwJz]O J k M Y  g{/,`i  z  { 5 L gNtP(s  084Unx8Hrf#1#=/)r` 8*~K6}GF\yQArV!Bl): 8 -QPp9 $6 kBh"H`tv|p ^H,g`+ 2a;o_kZu'I23v]]h=?M:^i ut"O 3H-5HccbZ8Py 7+o4S < R\Yk;*$50BdXZ?,`NI$ tQ3$ of{HZL*+A !6PnIz$q ~ 7 2 4[ED}XM  {hrC~ ]  V/!, x o-Y> E  Q'!   ] #In8= @fLUfX&q jxO.c9U(|01Sy5 W4@&wDNk @+<=yEB`yQ /N] 4Y$ N+6?5*UYDL~pT\d2,4Yb 8]J7kI x2[&VJV8v$`tE2f6/1~io.vXMiB W'U]K~@JSkYcZh&s;aFp_E BXAy; '  ! G $ 1@aB )   W Z C     M x $! F l t ( /  f Z S  F } r % w p i Z I !(e:3Z..,H! T4sh?(e[D(] |[vJ~rT`@gY[\sC' G:/'-a%fX hS % 1 e H k &_\\A[,`8lKp$\D %>.,n (  Q Ne 0m}GkzdYI@7\L)7;ImOPv:V:YXDoY/7U;&]bPzj53$%ai0[X).HqWuui-4R0T-+E$\Aw3GaL)Y6 1[ c$] Dn< SwXV/`E\TV3HMbnW 2B]ga@,^Bu*R0Cr:5v:(YcQ 5idhE" |  j!* K  < j ; r a  l d|MhiCAT9]49E1^$e <<2:#E7M0 !\ h q x }na  _  X ,  y bM+%?Q\if[[?R7jkfr/uu/u.(@#F[A7,hKq7hNf](P6eQ?h _5#<7Vyx-TGT:W_a.dCUm2V5R3_v, st#n'"Wr/ <8NLhIfmE 80Uv[')GWrj3ivt;wj8bH5Kne)4H"p7! Q A a J#[`&+R#  4 /j k  b  7 |  D T W czR]  T  B ' A  %   D w  T : S 2 c W v q i T b A { N  T M ]   ) g ` $ + m9Csy6iv?W.Y4&@7E}u_[tf4TG:B2:@%Z8\Ia=$MHgH/SA B| 0b[nl# AJYIX]r W@\MK{RP*gEBcDbyL\s!}KP2^n9dylSK0( h Z j X [R#O{^Vvts E]2VAS Imeu @  Ad6z@ULf454X kkC%QB6 &X1CtEdL&l9;D#Kf pGvnpxtLZ@D7leY. .}N=*+or6=Wx_gXH,l-rLwW!|WC?CdM=rkaIsifKfvF1yPa)aB G$_0n>$t&?'n %Oef ZCf)9Us!'edMv^+KQUx ! K 5 F ^ o V &  5  + Y v c ;  | W     , q _ o  A > D n e  H ~ } F W 5s dX4yR.( 6JA s-#o; n ||0 `unLL/BZCy5.!.ZH}rL07HdK,_G[["/u tx5-c S 2')n =hmF'g;Uqf([lg~ma2}@i5vO <ym<ytTD2gq  f  1 ( r # M d H - >Fk&    ^ Am9   U H O P  ` -  ^K3 b  P b 0 M % -z(@<#|VC z   z 8,cHI$ { I TbbR^{MZcIc>J1^(?6x #ZsqA O-|B \cEhV=C1PzhgkK${w73j Z}g~Oq=@$[cI\Ivw "{A[/LRHzAG5o&fXuj32~cX)F4 XF<"C * s@E:nN|]`+w)gw+L $EfH#"M}o+L/NI}h0*6}iL: C*?Mk:Ug0  " " $ E - k 2o~, ]O{@u 5  3     U } @    ! ) ] T m ' t,V=*S_XfdEC d85`3BLpYf%L)x Y@T~XhWA>|>""%xVFA/nlM8fh',a Qt`)NRq{b_s(:Y,WuQo)  QsOF oDuN06Fhu=$yH<1xuXVXy`)w_pMQxs ,Tp>:fq>!6mxv@Bu t4YP|N F SxVNv yqKusR>oeS@IhXB 1h7L 'u`  + n | s <  M  z x | , [  E  ~ ' } 3 E & 9 * xF : + e AD2)< g;otVzR|T'7i E . ] /UdKs{o 2tgrulaX\7Sg5A0 &iHv\\ >!DYDF`K>W& OOzyF?Bs?zL?OAT2:qXPp a<0~\ d/w-fG>dF}=[!4/(lw( p0+M~)K}\ M *$rHQB#BG(LZO3\3E#(wK/OD z|'05BLo88u@^+ h|e+OZI p F4u  f  X qm,&  { N # RuKK  D  m   3  T . \#YJzXySH@/(Y  @Y# r ; = (`WYYK}%8f@1v&4B'j9A>@CPiVQD9gB6a:EPGZ$O;]" R8<8BU%o-p&2 _C &G@Z|9eK#6y'KQY8TK#\:el;&UZ;M?~>NCSH@y^?qG\1#l &P{EIx;;`TJ;6b|1 L ~-6CW],Q]0^ZnpBp lmR@noo|7D&KV~+^  A O > &    b Z e ^ ] l f )eINcY;8oN p H  3 n T m z  _aV7Dz8t `?84MJ2CgR P)vG*/tQ$qk.%_xwXVq',w#d*3[7Gr!!N-f1".b'r-'^~aS~&n"_:%@XpW &DX-/G@((r]Mo l@K\d"0 f2nbi<>~O~wPfyi.+Ol7d, m~?EXS19:Zz3RyjpQ= 0+ hvM( b< w ` ~#_:*'CkTK /gQ5VZm6Zifcpl p (,e Z ^ 5 -[c;=Y^N5.5VnxjU*KLP4['4Z >6s} =:B>~+yxd7 STW}cC`Y^Z'ql)4_47,o<.6  Nu]G4oPD!\Ui{9|32Jx dR) !rpsYMRiVyXH$^D  $;74yA {Y$UppLyGE`}Ig%6=|Ufr"(;\ps F)Ab(llE_X8xCI9[O^8YDYVP<jfn"8E?!6imPL. 77BDa7b6J6.H7(PA=)0[m[8Pf+\@wx(xqY%pvuZV[lpXz[8Gqnw9KA irWb`B:]\\(5.'xz~<"cvmTQgwlR8SvrgrawS, Az 978Fej"B{bHxJ+j^ZPB?fVVb,J9LIAG+m\[ggt=g` u,wPODIykU2_$?P|#HjsZ=&AOhjkUv1o?p9% %8|X)ExS/C-TF\3\*T%y[Y=afcR\bwSC<hnf50'qtUSWZ/DcqFVg9P /s `7 ~1JdmEJci(ja?.B&` Ya6C,@>2^FF]k~YLjox @}$IO;ZhHE`{S4 6MQLU=EU]OA3/.,$!9Zwz]1L@ wu`5+5<h|QWG->Vp|u1odknprQ45HdUH5vOu}eN\mk8<'+XN(*DTWH+.. \DFXhdTE;AF::8&;:. $.23IXm{|m_`cR.s\V[dmlnfu %/3415BKUbqukahx|zulbXQHD>:<4,%'Gdz  ztpmnjjlnv  -<>ESFJ8MMHPLNFB<4.1'&#! &.0+/2/*$"##)02CMLOL:52IJGIB?854230&!#$   )02-'(+-0/-( %-/-!&<AA<." '*"       ""  LIST@INFOICRD 2001-11-18IENGXMAN98ISFTSound Forge 4.5criticalmass-1.0.0.orig/data/sounds/laser.wav0000644000175000017500000001202407630537344020462 0ustar danieldanielRIFF WAVEfmt @@data{rvvvrrmrvmr{mmmrviivmrvi{iiiii{mrrm{dd{mlt[]vu]zlkbnoduYbn~WHxsLUuutGt\_T^|vU[~jjX,wFvKz4`Ā1aQuVU,[F{mt^UQGnicY]X_qj||74L)p@W&]Ok\{ G١.>qoSk~JEV.yTLۯ@v}Tkj/Iw!mV_uT^ia'7rp(msttV?fw=u'm]xi.kY.PVR~x *q;Z/CUhvlx7:sĄ%U}phSPglWj]C,JB7IH+Pl`Re[403;@EZq80LǸsZJ7.Xs`K==DK5:BW{|VbfRYg[03S]D-Efr_]gO6NijO6+F]j{pD:2?FEZrashT[v~^eW@aKIP^xlP[X9`sWPIEFGB.Otbkf}vq^\PKLOa`N1-9_~okm]lf`ffeSdWD]gePLM5G|`rnaPZcXVXwQhmW_eYGEjrC?U^dUJSE2)`eif^^wvg[pvSI^swoT2<[ortkQSd\^NCIjQEfqfRG2@oXCl~ehkQJEky`IQ`jkTPSdoi_LWdZN1C[`_`pXP{t`ZOb~{LJauokgSGmPB`|mdEEB[fouD/=pwM;;dnXYn]NMZfjR?TU`q^WRrxGLYYUdwrb\g_dpx}nnbNQWbTSfc77Y[XOKvuceWNaZ6AtyP>Qn^[l_oxg|_P^g`^ovf[DRrzwoebeYET^ZKWpX@@Yf[HOo{c[aWWRGLo~RAZnm`Vajnlln^Vdv_]evH2E{~qZD^_[\Z^ZRYgrhQNYYMLNRqs^[iba\ULQxkLX||hReli\]ltYTurc\dxlUI[onkqmNK\]m~gVA<`ty[DU__YIV`mq`^[WfoaFEftwhZazl`gXDKivzgnUWhrnXOmuXEd~t[RPVdz\34JkjhaReyre9+Pm~mbc_Yebe\HcroYS_mUZTT`ikurolnbCNszdg{O9Q}UIbk_Uii8=ObdhpeKWvdFHKg{mai_HBZhpmZcrjW]kzvjZV[_lyuhi`\\hqXYkwspggqt[O]gNYavcPiiOFFZv~ocUBVoc]NMedTZlncEB`jbQRms_\imdbnofe[evtflrnieleZUi|yfiqzhW\{dNbrzlT[eaE5BfvZWk_NZVOPZS\b\]WYYT[ndYTUge\nkdgfhkcckqwvvnmqrvuhcb]juux}xk_cdjyaTWa{s\[^XJ>F^rjea]kgiifowle`chrp|{psuvwxssgaoyspseZT\wwe_YOWgon]YLECu5F0dT3bUfNqUl_R0k`19q&EY&+JHQ(PP7 PCfeqhkl`]`F%JfUK8 XwXYS0!AOdY#$6hN// @(Ew`$m0A{O}B>O4 uul$ Ch$[^1<YtTfJP=bhT_9vDIm;XR7 </P(tVbl/ @eOW!}.V=$.?3 V}F0~Zv) }e*(t4k]7 Dh>>Cb4r>"_is6wb]3h13,1 S7!)MDR1p0",JE(FF`>)fI-bed/M:D ,CVfAPjzd2y%L?xR+N[p%%kw(gr3sL| JAIwh!'*~eA8tTJuY; .Q\1_ nQL tuFFW&e}0-kE>P(D ;S|"O@7dH5UU&3@L  5 =/-S  > Y 8R $ 4 jw\YPK V 7'-G01d=$# %(i8"0 M.P:VCGQ6J"0*0@-0o_SXO6BZ@5&-Y7DU-MRgA1O=^OfngwH %gNY6?9aaW`=/?}@?==@@><=?@@?t?.@@E-T_)_XZjpok=ghonjilvmlkfxdfkLkiIgiljhhjgfjxk5loGq?qhq3qrq;qqqp;qqnntq?q}qRqzqSqnqVqpq]qqqaqlqfqsqmqrqmqqqmqpqjq]qUqPqIqIqWqaqhqfqgq_qZqQqdqpm?HAFACB=9/.'%;@6*98' =I` HtzSDǒ:.`#ĺ$ȧw*\K5џ8نaN[-IJpJjaοT߷qotzQg"3 pnSU[m6nT ! ###%(*%,,,e.I28"@FIIPGHB ;1(!- r l $*09>BJM|NPPQSUW/YYUZ[_elwqsqVqple1]TNN=NeNNSNLJKNRW-^empqq-q(qq qq6q8qqppoo.oooCp4pp ryrqpFq'r5rwqpĿBrŸUõ}ɧĥp@R6֟@ߒOk%NBј٘Ę0{ԕ֓u?dő   fܑm5Q|~z|vqScSՑ ҖWw.G8И*ș2VT/{8iix [56' I̛AΥγϡ>jtєҙӭԽU"Sjsů:I,̜> @ļƠG;ʖǕ2CƂt䷴E@?H~Fפ+ĥϧ$s9>-9햼w%XMƌ叕.T.WmXN/^G؍卮FS`TYZt~`jbF{22 jBڐrXNwpuxѐ|QR>qsi 4=Kېpjw/őTԏΏX~َ2ƋhsZߎ֐gB->đvzyhd[=CԖs^A£/LJmK3~ȹ((%LэE?wՃԻ"ڮڥۣܚݲݎނ~]D3?f7] c   >  E JrY;h3!""$'o*u-..x.@023)3%3G5798765.6S65434{44^433[4566 65I67U8889:<>>=N==>D>$=<=>/@=:89[9755a5_5666557/998 8T8888888T9:+<;99997 56e89|7t30)11#0,,+O**)'b&8&&x'B'&'m&V&&r&a% "#<$% &r%#"i##! !g#=#I f Xhc{TXMs Z " 5  Dy]LVbO[}~ sb-+ )y3p޳ߵ޸~J&ק"~ٌгN{OЌ`P͕m/ǣȚ#>Yn̿ža$з$[/ҴWt}&rly ɩ=_ऴjϝ@SCꕚ&ޒnFNؑ hdmkvs'IƐBߕe딷qӖk8 Ζ=jnGr˝̣<]#اRծgv*i״hpUU{j0].˭ѶҋcW~D۱u޸blF?m??BABoCBZAACDDCDvFGlHyIJK_K1LrO0Q#QNNRO]Q"RBQPQRS)USRSMUWX4W8W YmZ[Z^YUsVXXYX0XY ZYY>ZZZ$YXbXHXX=VTdT#UTSRQQ-QPPLOLoLBMLKJ:KKfKJIIIIMHGwGFSFEyDCCBBB5BA@P@@?#?>P>=q=<<;;;<<=_</-,*- .R,)(1)[))*/+B)&Y&&&%.$0##[%%#7!  p|{5Ys'< 3;U@3 m K @ f  - 0 * AN~A|o_6ne~Wv l]?O`dP@V`=  I&DMl`d@1j$T K4E(S8+m8C5 IB&jj{9y{(]8Qp`<>G$|qTwZ-Gx#d8SFmNbq 9eM7|Iz. Z  $ s  B   W\:r@n7f "mbj UX xb<EDB$QK +! Uk GnHy B!!!!W  "#%$#O###[%%%?%%4's(t(7'&'(j)L)N('()((((()f*+X+a*)+, ,I-+P,-.0///f/'02111x11v233W3234543;3a3{3f333M3$3u3A44310c354O54466765D4.567655@6777766s76O5L44;442e332112}1`0/.U011O211[22[32*1//0110/100000m0300/0 /.--z-,,I-,+|+,+n*y)|(,)***;*)!***l*7)''())) )y)*@*`**Z*))))>(E''$'& %$*%E$"-"!!) o/ Z `! ! rUF ,!! G K  Ix@\{9e8l'~| K.T lG}(R'''{k3h&!_n aD;1 iK;BpSO^! !""R#P$$$$O$P%&%K% %%%E%%%$#o$%&[&%#&'):****+,H,,+c,e,,q,-d..}//0/,10/0010)0m0A000c0/.^.[/0-1l0/02[333544}44:434y44s4J45,6666767B767676Z666"76w6c54456665u67$969Y999F:::E99:9889::W:.:99:B:9:)::9s9l9l999876(798 98n76.7H8F9i9x999:?:9'99L:988!:[;2;::?:#:::q999:*9888%98765*677;7965L6?77877I88887R898x7r78999887R87Z77{777666776D53G456*695U5S637666i7777K777(8.7^6?557Q88l7W6"67d76K666554o4G5#65^422y4;5434~3344!55)655V5]566~5y4Z3x3 555G42233=33o33"32b218222290/t1221211~22v3D4e4 43334w43211233b20w>.??>=Z=D>>>><<<===<<= @@)AAB CCLCAAXAABAA@m?f??@@@,@r@@@N@????^?C>x=y==>>>N>>??@@NBtC DfDD\EEEDnC#CCBKBAA@??.@@@@?@??d?>>> ><=<<=R=*=<?@uAAB"BAmAA6@?;?>>u> ><;;\<<=<<<=<<;:9+:98u88}8:9988899:::[;4<===-=<<;B;::]98!97J77j888E8)88887|76x545{43N33v34A43k33-4456q65 8n78D76{766(65143|43|3$44 5*54444 5432 2A221s1b11221113222N4?4y34F4i54344K33:21S000p0f0$11262H212I2F2q221708//// /.u/B0C0/+///00111n21202b1100//3... .|-..A/@/,,,+*+t,H-r,,--.-M..S--t-x,++*B++,++,n--8-,w++,,+4+n*)))))*.*x*+;+u*)*+,1,g,,-Z.-./.E/?/.-\--t.L/.X./00v090./(00l/..--.-.>../O/.E.D/U0%10L1122P2|23 33/3222y11>3r323O444f43s3*43222d21X11]22 3r3D43z3H44`5567j77J7777886j666678K889:::+:96:9888j8707X7788899999U::{;;:b>N>=b=s=T=<;;=;:9}99t:::H;w;\; ;";z;q;J;;W<I>==K===<;L;;q:988r99]::::*:99999:B;8;::9L9W99 988x888o9a99W:;;;;;::::9=98a87P77789=9@98v8E87x77P77,87i76n67666w6@6J6S6607z7p7798888877L76B65J54<44P44(5k55F54x443y3334444333H333322@3r3Y3!36333443R393C321t100/x///V00000?0/,/...W//////W.[.//P.-=.. //."/;/..//.-O---<-,+,++ ,,,|++L,|,,*?*Q*V**+p+Y*)* +*l**s+u+***++++U,e,<,0,,,7,i+8+p++v+**p*))D* *))***))*?*Y*****$+c**|+,L,++,,-<,+,,,,,,,+++V,F+*8+E+**@+*))*++*)*5+;+*++',F,+%,-----t--*.a-,6-------,,,A--,+++C+w++$+5*E*+|,,+*++,+,e,,,,_,]./P--,d----@,-.-W-,,,+++++e***g***)$) )o*+*)u)9*q*s*(***+**n*B,,5++*k++++*Y+T,,+q++t+****z*)`*f**?*W* *())*1*)A))*))****{*4*+,s*X*)~*+ +$+:**++n+***-*!*#*4*)[)))))))(():*)v);)))))T***x*W*A*=++*v**C***d+*++,++F++******$*B*d*3*g*)C)n),*0+**X****)*+=+**++,.+*** +u+!,,,P,,,+*+7+K++*****+z++p++**+,,2,+,+++Z,,+y+),,Z-,Y,.,9,h,,-;-9-A--- -,+,;,,+++++++,++^+/++\,,,.,",,++++[+z**#++`+****L*******v*q)(())(((((}((((('&v&;'B( ('&&&!&%&%7%$$%%R%$##;###$$~#V#b#4#")"!c"o"C"&"!"! !!!!!!I  !aW#7-IPD. \5g{6y^?Tn v~Zy$kIBs@*_PT; R\UCq!,#F%;N5Ed0(e9 |~DhF}~FAb(x A^vzT# %#$! FAwx[s8cmT;~owRD< @z%%5?{`}>.^  H.-&H? %S{Ru(,} t # 9 9  u*Bg b 8MY# hm + wbEG s @*#ZA.S$7 (>R{eTC8]?p_eh7Avki^jj$KV|J|Q f Z , S ^ o  @  , m Y    u [ n ] [ , d A P 5 T~  vU   /8Q/Ukv GfiY+p3@|vn"qwmK w ~ s  kZl1o6 Y <  L X s ` E ` 0 }   i N | D .  7 $ |ujIW}+*;.+3<`/XuoHT)[jPpHT&w:)4m[pZwF|6ezX/q$\Me#[~MW3'/~rC"VN@o_x#W>WD;b  s % 5 1 d 3  R G G D ( %  & W   M|VuYw< s6^=C b|Q]8"Dyb@t0f {59S]"gjeM:5(Y[k{MiV[d*+IOB1K 8 /.@d;C*V $rPjtZP[mf `8^9 UDwwf[<Wyl^$Kpvhlo-$\*EmXd@669 !`PDzM:Lm%xT9/ jn@CY + L 8  g ! M# Y s  " s 3  v   T S  / ^ : <U - d 7  [%n+U{AUgZH,E\Qq^c>Z.KqAu G[2O1DI`6|;T}fQ@llI*m+GcgTfOqi)~.\EZA[wC]~pGGXQ ;9pe-G Xx(oEWQt|p`|~7wZx7G`:;0>F,L7X6 re205]D)`,;LX' YT9;ySJa&h^4yNj\QJ 2 )+> adSL\$< g *>tJ:T3Abwu"6.[&"G@6Kw_od |8CS5g%57Y?kgS'xl#% aD|_YN'j^l?P a{znO o(5eB+QYyM9)#w=(~$c0p` 6g|@&$~CZQ] I(aERC3r""77 JTo-p# 3;5N)i,EA8Hr~$R}S+M5nT[" W_LaM/A_ 4eNqN4YBuYJMB VDprHzzylLeM i{2bK<Of 3kvwu!cn[$;Nm%*X<yC?-Db#>CCGhx )-N4U[R@n9u)XRb'>8_ozrakclR:WD^{I@2s\ (U6GOoC0vJa,Pz^p[k!~iJ_7A0,l3gmP h~F=eV-9~a;i#M1ufG*ys_9moElCxpB*`Q!0C%NtS{GtkJ,!u+b*c-va~/`hz0 TF[IVsM? $zwq$ W# U /-0W wED"{w~]G7o dGfqp0 $((BS._9utg1Ij W@&Z( /E6(+mjeVypc>J95 '> Nu^2&2& u\u9nLXVP?32*mWUBj;~nW5Dz~( y47>`e|3,V}7%L2?$* aZU;Lh8t G?^%) &p93!)kl)6 >6e 'WqZ!3SAHkoe/bjqe, 8]Nof0-\qAG8 P.2V5T`}rH!Hy~]P&sN4CP3> 1BD fud$r@IR)[v2`!D 2HM^cQs<|U>cIi5kU`^_Ft~'p !`YIjKEy>ZeiO9zvV #(TpY2T[A q LFgONwyuQ]K% Bieo! 4EG@%-:hQ`OI:# %:)VX2&RuyK59nSbfsq\KlB4:=57dzeWyt`wbAAnlP6x2IR=wKilwD7sg\!(ZGEWg|f3CM>N~mXX>y3IpJ1/kM2!BEpzK[v3 v.nfEqK,rVa0]pb`DT-6#8se*rC `t-~:LWmv^_0(T6;@~FQ|0 $,0 !]/ jSAD</Syrju4kRC7-IfOFele;ATtP ,O{1<[[964`zqR^d.NxyhYY2[s*gLCk_ * -z 6otkBMn &"Ab_( <-w!+[^88ZAYw}opN1EP6D"FtwnqcR. Z}7-5TvLfZ#ZDNRE3=jwfaRv;<.]b 8O1XnydXU-Tf JH/."'h}o_Xo`-1Pc^opi?XXjX?QE=$h-oL !7nlB@ng[s^PUnZ= R[TqQ "\HNK5|fmf^_ZQWlR<'c uq'Klol{eN^l`!3a_N*hC !9)(,d1"$*6C")IL=75+#&'&"*1;CC7B5& "&02.+&""157>EIF6.+2#t a] lSO T LJf {"$%'(-*+|-/0121333.4H4O4H44344Z4444432q0.+(S& $! 3R``_ G 8;;)ixS= k{ҫMEFɠ`,ġķV-p_PyͶcؘ֭>ܭߙjN27IWWW"K=k X ; ^#%(2*,-/0V2345?789[;<=/??@J@s?>=(<:9x8n765 5;4W3 20/=.,+M*)(&%%$"!Y  nR 3 X{|s^G7.$d# ߃/ٶثש֩<ԡӲԲQ՘-|2bآثفv`ߧu43Nw}9~ 4}7# "y$p&'()+%,3-9..l//B000^11A22.333454W444#55>66:7777776*65{5 5442?1/-*'+%p"uz1M F5c ?\< 1UQ]۹ؕHұ˿8{SƓŹ(khP<êYXԄօظGsx*c3V~~ "$&*G-0m3M68;;=Z@eCFJNRUXYZ3[B\S]_chkorq$qnkgdbm`-_],\;ZGXVVdTR/RcQyPONKHDA>>g>/?2A8CDDD.B?<8s52/@,($xf aC!<)T< ލܼ)<ۑݮޜ݉ea7 ӣҪҝpРy2[G !Mݵ,ߧDy t| 2$)p/49>B@AoBBCPFHKVNPQQbQ%QQR@TVWXXQX~WVWWY [\^E`axbcefChjmjTig2c^ZUQO@MJH=EhA=\: 7520,d)%"R  !!U/ k1OpW@WCݥܔCݜ߂ߓ$|Xrs O HRRI^E f$'*K,O.R025y8t;>AEEHKNQVTmVVVVZUUoVWiYzZM[r[[ZjZ7Z7Z%ZYYYZ[\\]+]Y\ZXWVUTQoMIEZB?p;730+'"6I X =8XT{b^0oy`P6 aUm "H%(+04j:-@DIKTNPS X\afim7p8sv]xyzp|_~~{Zxtqomlkjigh,fc`][Y-W U/RNHXB;>5/+'$"f (y * ) 8 = $T k "D :$')+,-.0E37v=^m>>2@BFGNF{CC?EGCIKDMQOQPPRUWTWX~Z|[[\]`Xc,dd eVeeegffca_1_^Y^^i__^F]k[tYWWWVSPNOQQP.NgKH9GFEDDEG{JMNQ5TqUUV2VUUTcU=VW8Z]_bWdfhgdbbPeg{hhthRj3lkmCli e`][\YzWV=WY[5\[ZYyWGU~ROMMCOPwRSTUVWWWUbUVYZ\i^X`*b;b7bbcbc`cdegjlQlxkjjjhfecbbbqbXa_[_^^^?^)]\]^]\[FZ9YWWWLWQWWXYZ \]p^^_?abcmddddfGgg g-gGhij^"`^\XSVQPOO RSSROMMLLLCOXQQQQONML6M ONMLIFEeCRA@f@6AzB@K>==<>O>x>?>V=(<7:m89(;::986554y4E5i68:9$86676l5554Z2.a..0/0+1c0O/,x+.+*R+L-.=-c+)o**)A*,+x* )(',''f),*)(' &$"#z&''t&%2%#)#2$0&%%$#>!*3 q |\![ J "H:^~`[_!xMzg"eGNvbU; ~W  y l z ( _ a [     {  C 5 T .    * %   ZsG\kOv~RapRfud ~H.`.8@fS?@FywS 8F @& r[f{voufz~O(3& +EKLZ^DrQ=GWSUQRGGS^bfbV8~~rhifZUXfaMJLPROQE1(&'+22-3<;( *+$"~yzvpprvz{tpnnjike`^_a^]^_bca[VSOJOROLLQMGJLMNNJA;:78@FD>?>77=AA?<0*-,.4:90,-*-3871+# "&)+-*#!#$(+)#"$#! LIST@INFOICRD 2001-10-20IENGXMAN98ISFTSound Forge 4.5cue dataLIST<adtlltxt8 rgn lablRecord Take 001criticalmass-1.0.0.orig/data/sounds/confirm.wav0000644000175000017500000003163207630537344021017 0ustar danieldanielRIFF3WAVEfmt "VDdatan3rvH"$%%m:zvI vU lQ}GS[ z&tZ =B*/? ^9j} jZ  Y ( 2 ( ;l!'L0+9<:0"ShPf v7ϣܷ{'6J]  L&,4G=EnLQ"TFU(VX_]bfMgvgfffNgvg4fb\pVPKGE<<0%J/󗽗ȗܣgV3dA?d)nKٓ~ LޡZW O T*x1/69=iBCGL*QUZ_cf7gqgffWgfffVgxgfffVgxgg6f\c]NUI<(.0 PtRΤeѫX"VWъ~ )i7Iݭbϴhm[=̗ZxؗÚ2˳9ˇՔ '"'+-./ 00.-U.]04:?WC*FIMRV_Z[\o[[[];`icf1gpgffWgxggfffVgxgfffVgxggffWgxggfffVgxgfffVgxggd(a[41/---/1V4"652`-|&=7vEL' ? zqO(uWN'KP̷R->·"^4ͫΨCωFm4s5מԊàBT,KA 0`x˴ͅ1̐HΉ|Ѽ' a51v͒ԁ>I}  }J+-c!%d+ 16;@|E KwQW]Cbe$gmg}gffWgxggfffVgxggffWgxggfffVgxgfffVgxggfffVgxggffWgxgfneb^XVRL"FI@94.*7'# ayK NfK:ȉ۴X":ŝҜ9O_.#!ƚ3n0+xK 3+ϰhXJlƧD3O;̯>L(dk0.8!'-0s35g8:AEJiOJT.Y^acdeeda]>Y UPKD:Y0'&  Lz6 =Z^/5b Ak6X[ٌ֓>kNh2<7[@)"ͨ:)B4s{Րۭٛ܋uwSݾ 4׼cطݖ?L8)Q y } I H1k@V5 Rc!$(+-X.#-*E'#J!sXu="}'-Q3;'CJPTX\q_`_y][\\'ZVQMHnC<4p.*{(g'&%.&7(*-q/.39>BA>:7>63.t'q /ig_j{sLS,ߔMl .ETrƻ „͟Ӏح!}!v6L݂ؔ6.4EҸc`^_ C4""! I (&Er 8F2$).M48;~3V]mPuE I (  - \@r8jk t + \.= epW^X NeEN8 +Ext>}dxr Xe[$| `3Bbh[= o :UFo'. r>owU^>| Z (DN XY I  Hkb+{[S)hYj'.VKo @O{ 8!_!g!Y#V&)*z*)'&k$ <y+2+ Waph E m0 iwj"P$#!". \R)8 YdgR)ki4G1 Y I<l 9' lb`'.ha?w& : t]!"D Mu% C q\g6W^0 b$&'%"7 H (G>.NSS[ly(rjqM/(L]/bfBpT$S 6  )`o w l*G$,'|&#\r?L0 mP P [$'*W,./I11g07.)w$$s U *tU T  h C < ' $-khcM UJ&/~_ iU&^>] _7?ISgJx(i*-HQ T ( [| L 5!Q%c'-'$ 1 UvX!R [K/EX4AWNq;2> @ +5f   2 !!4f\ Bbmr a ![% ((&-#3o 3=pw/ & kL!S#+!2J Z  Ik=dOc mpYB?C* :cn:e :Y !"` 0Tl! rjP.j@f0 Yo-m!rۤރkdI`> d! &(*`('$gMD \ZQrDR"}E 7 ][d l}fPpw!&*-037i;EW + td`2A@3 Aj /n'!y{)6^1rCPZ'OeeHS~fN mC x  1 q - \1(HN9g;jxnq0f=mK R dMY9O\2!F L :  G A:n@ 3 9 :5}g K |,f X 0 T  ^"K2 = w * UV|N + I9/ '5=~Wk Zw(= m* ;$ g uEz+2ߐޘܸy'Շ;Nۮڌ*ݫTvA? !!|*&29?DdHIqIHD@;75b6;7AGLQV\be"gmg|gggfne~dcb`ZTJ?4(P!߈lZêɛܗ*UXˍѦJe )6AK%T[.adQffQgwg~gfffVgxgfffVgxggffWgxggfffVgxgfffNgvge^QB<5X+z# i U;S)Eǹһ),ѽ󽰼عP)óӲϱƱiճ\A(Hփ0 z Y9CQg[w gNNEj$iDe.B s |Mi ?}? |!R'+/A369%;l;::B9751.+($7aE |)c, s"6$%6&$$C#r" ctQ n r  ?@ 9 $F SFY\;`9{n&qj*X9;ޔ<܄۹CD՝U{ ʈ\Sۀr 6t7 mw۝h$I! 9 $T 1#^$R#!!"E$<%&')1,,7*%!!$(+/D35e84:;'>@A@?/>X=<;?:853211134.6*78z9n:;:853(2(1123420|-+9)'F%"! :M2 p Z T6}WOo '3+u^Ij;1sBޅ8ߨ|[ޚٵٳٳh؎ռlr.öX]b +g֩٠ۮA*ܨYԌϝ*t2,nx>m}6m P[nKw]Y!$&]&a$""#w$F%a' + /r2s4579=?>@?>>x=B;62.+*))*-u/1 34689959o878%:&=[@@DGIYKXLKIE@;]8530-)#:M  } ' :rRk5kk mdx@0hqy~x(%٥ t;eָIٌۚ rDv;o-}c8 4 {02 j D Dxt } dH&B n !#%&'>'&%$n#z"H"=""M$%')*+Q+H)&$"*V  m p  #=2# B&`!MKYC{V E:1{ 28:vLMV & Lo b,# x>W(mwzU *=A1/1b1oWa 76gmw ]ewQ'nbyN*_%U  3  k- hQ> eg"S 3  C:1??=t &##?!d 4cwtM p j@wQ[$ b Vm,l>N y l  #[Z# 4 a`/?!< v 6 }@3j;fJ _ 1 ] krcYOMMMMMMM\O ~C5 k TGy"[9O yH ' aaKn>op q t  \>iw{F;R>R& p))| @ ; _FB1 v  V!U#e$#!L/ Db$:V  GGm+C Wk P<#z n RhbA +  Y @ ` -d:l;Hc ykc x  d *  A u s t " S/Iy4fPLlF  yIDi !y!Y:C,5 a *  S~>Bi;j; & ~:JAy gT %8"$-//RHw'r]H[-KEuyx q Q3gC3nfm|KQ T / ] f V !$:d_"HQr7e26vr VG . \ M L= 1^W!>p2?t4f;2000000lFREwIy}t_+/]5) & . [ " ZA;, ]C3 Pz8 mrPwmM,k  4 n  vFtAQUUI>,ss>&1fxV{*LTUIy}trr6 ]910YsDh#Z V / ] f h h h - \,P`XVVVVtxFh_c+U]_s4 ]9iajDh @w6f;2+]91 (.//+ +]d+UtLJSCR pLDCT#^WVV a 2 ]  d X H5@hd=1 W{rkq=5%-/ (.[91QU@n|- lFhpq6f;2e2V&./////h4W&.sF8@z- luF8=nL{vDGy/R7},j>Ccriticalmass-1.0.0.orig/data/sounds/bang.wav0000644000175000017500000003715610355351306020266 0ustar danieldanielRIFFf>WAVEfmt "VDdata@>ٻV2m¦^Y͎ "]sּgá2k`՜3ܭ(D9s `P E!"""""""""""""""""""""""Xy9[%Ć&&ÈÈgŠK M.N? #E&7AADDx@K.FEC34 9OR5=>YK@!M8!Mg;O7U$9]b&MVM s< e  - &! ;h G . tk:/E 5k "p'eӷRmxk 1X~S)T%+~!8$8$) ~/k8 <- Y#d,Pg,0Z"G+=DGQ "+]5޶\t1ob1ow+ )gN 9,-)lT%8~N*MW@Y8Qy1CKG,FK~Nv3.7J[?VD--44%-C-58L1B& q5^>)HX#$/8~M'DM9!% K# # .+i F+ ;"m{!+ 8 O'HMXn7\0:)H8Qj)_.LPR ]/9%~?P J7B I[ [*#C/"6$h;1:?N !.GM $|N}%d ݊  q&wO'"jV!5E!/Yl$[#:@' 0,GuQ'\!+5,G&d,;1D N'VA\0A, b-5O 9U!S  Wp5T 5 w;1c,/"- .b-6 t%A.f M cj"#T%B&e#i /(  D,7A(z.'h+N S> ;JH i >_ eA-Bk  $,)0>} PR.e(U40< R%(Z1=!g+%7A zUck V +r %p S&,2te|!Z3K% ^A=[/\]c72۷D|]@"I/ގ*z' 8D-"[zG ;?P 4'/,k4Q)q ("32 ܢ dB:T!Y3W3jߖ?n!%g O)w.ބ@,V >;wj C 8  (j) <0.bEp&O) )2<  Fp&`]!Vc o +oNM) -m(#j*5q "!u$"= ?>z* Y!L 3#7_A+MH?=97 h  o v BR;"#. Vّ#.ڊ|̞c"7>>[a[\?9t3&3 "#,]?I95z( $>X2`:'?nO'FB=" S&j+ u>iR$## ?@O˛b z=<3R1'?.Q΍p #8| (' M!.Z16) |y )D )NZ}׆1jeϸ 65"Ez ' \UڊߟK aJ r$L~( u !u jnwi h"( ui }\!n'!( h\UP ,2J8=Q$).$E[, (^/f*` ]TE{ ? Zr wn1hF\׳ ypڌ`U ¾LHۨ`X յյڊBnީ~DΤʹmC7bJ&\je  --$!:Jͯ )@W4K ]] A`6 V [1>jB͈Z2]\ v: !3&**.2 h>t4,$<*xʒ3 {݇4ZhnyǑ'ҟ5|/Yi$oEm [O  N P * F/h>4՚>5ۂ< W/D^C{'@U4J i x-vST"". UG< *Uکm]LКbzL5ҵAXY::_V^W@m߃ ^/^Ѿ=wB՛1jћ" ,&,9д3ܒͬН-/[ԽyKҾ֘ dDn)\{`*Gs<4S1tco=7ErE­+^ljPݬ#~k5 S#n2 ^4 j=:Rfވ xMЅb(3ʴ̧ 2ɳy?:MBƸٻ '"]ȏΜZv ІpѾ+XS0~Ѧd@IE?ǡƯzu%A׃SܒG NnJ-eHEI٘ԻȎ DV2ܐ%%ӜyycսŸӽkgð.`{ɽMԮݹ=ܹΕ˙9(FuƜCԪOWSMӽKb^BǙO р֡^:pN_%Ӝhj':ٷEG)idDKFB03ׄA>ZHrM޺'ҷWRA2/*ZWȀƄ /plDVAN(@VDԋ!՞ֹ]_m֧C=z GpJ ߔR_i li} 3b+0ܶڗ`7M޺Sͥ] H'K߆'{;]PsԙiѕL޺R “'j kߊmb|Kj`Ն܃5 Jĵ?}\ȱο$2͝Qݴ7̸%) Uʈ/ s޸`g҄ĪḲ̦n+!ơBԮ!dBHEic`s e5I@`$!Ճsђݕ1iBɯCř0Γ̺KЊ ՛kq۴&J©^MkѦvڛذH9u¾DžkÝIѲX 9 1S' WBM [7~\^ "(ِ7r׼,fʹ/ػXَ7۾P݅$A<ݼD+7;$DzbƬҮ@z,9jӽxqͭ MAү$5嵋R0ݚR܄^+7MbՎfٷпϿ1<~ˉ\ȑ͏Ć@֚ɠ՟mޣ3\ݗ#4V]vB IDoήcFӼq>oΨZFׁQ5ҽi¹ɕ,MgqluJ=^i+ߖn""ym` ߻jk߼ . KߴOsA:|/o"3bԹش۬Z%սjUoIÈػM _Zgմ Q+̈́'a'0ݯ٧:ڋ٫߬G:.ެށtۖiLf[pdynK›ɴ׼`ǐҾr͎ala.Ԉl a4ۢn@ػ7AC|8[ɰWڔʳP) uhW˻7ڦϫk/V4Vˆ ,Ыӷʓ+eпCx|e@L YEBf2-%Пr8bLߺ|_MOFo< c.|7ICL|ӅӦąW3spOsR kI$ i&1p*GU3 ?Rz7˖nώ.nޭ;-ЪBRܙ1Ή=ȶ;d޸hÁэϊ ǟsV2ƅ=ɣjI]חf 0QŞ6̜ʕ̞*P1ݓ@y_;FfBe'׌"5O"԰͎ ߌߖsܻaƁw4̈́ԬЇ9̒ց0 dg[xӦ!~Q3eOP7Tލ d =ʗT^mЍ'@Ƃ'5۳Gٔڏ[\Ңg͜n5ֹ;kvJr\֖ b$&Gi"~Z~K964!χqeԸ֦ӟ-_̻1fH5i3x,4ػ)@IяdK=׺أԋ( @Ԙʯ"οdũzd=%Ķö||̽ӽ_^~`8Q:ڨqz,‘οǾ].$r͡{>ʳvҾ{MƧ!Ƈh҈|{'//ܹQYJgҊM5ɳԮ`Yͱy֭I³ᨄػc6dh!P΍/0^I*o+bȝ֞8ʮ9izrZֈщj(}V'Oާ2͐P! ƴST=ɣs͢ƙǮ^'öp2Ѱ 8&L{z+rZ \ ް%Qɴۜ./]$4yBX>s$uⷛ&s}kSE$%`WA̲{Fаkcr[ο _ u=śͩK̀ƘY"8ʴ8/GmػDzO~.s;K Ƶ1`v6ج￁ռiں ²dJÁHƜżlU''ġt%r`ݙMٯĵ2ӽүB@,ŵAƳ=i s܈V%Ӏ͹AޱΦӫIϿ)? Q٬_'cAV 3ս_$ʳػּv.аaӽFrUͱH¦Ǒ6`˜̬6ȴPF[*…eJhGп2鳅ߩQX# ￵ܹۺGTGrּK /EG]87d|KyNϑ1ͅ="B(}̈˭JƤ-YžBXP^¸d%DR.~q/ ,@z2|a+ sϱ~.rçZ")JAőϿH\fD&Ǵi]v#ں п(@ǷxT0а;v׭<Ķ{ުߧخ'%՚ؗ$Ɩ˳̑i(O^[9~\ZbƠǶqoda@oMM)W41fcŴ>Ț8 fF׸WJ Kfӿ}ɾ֞vy˷uqlYʗ6"սػ.̲\W$㶂Ҿq/ ʳh\ϿəWnbm Ѕb"4̑FȻ[+Ł?xo.˳Rd[GÅ$ŝ;ɗM )ύc"Ɠ/ΎϸvNϋ*oţ)‡& vrݮݯNCΏN\פCxE5+'嵃"׬6Ү3ѯp𰮱J)–5̒ͤBŀƇ&dOS񾐿資%ĵzNvR¨aXYJͦfXzʼ[xʾ}ljn J]9:غ-%ç֭ZxAީ~Y!0PQPPX̮ƬqƮ)wmžMļjFﱗQÙĩoX@׷D%?e:Oɼ:)P€Kɍvˡbɬvȯ4SٲҶ+:NXzEĦp3F<ڿhDŠ繨 uƽr1\Ȓ¸Cʾcɟ:gpųy3ȯׯTź]SFȪ/İs7˰ÓS̪tɻ `KSq+D#غ/E# õ/E$ĩŊ~yuƖA%̗[͇O*:Ɂ̍qǚ΀ƹMEȞ5µ̍FzȵkiAɶxǿо͢ɇmqZĴĞn9AJ\0bB!ʏ= ΣTWhJ[wǴ (— BVz2Nr$OҔBQ`p a}Ϲ%J|QΥB, ׎ڰe n9zڴ+vѱr@ƞEɇŘMěGVfte Oǡ0̈́-wSԞDӌҟ>ʇ)UвX!7Oϰ {L˕EiЧҪɦҧ؍*WmJta޺*+usؔ јͲtˣ/Ϲ6Њ+ԦUԍ>T8a8m6$"o EГU˻Sbğse EL˨>Ήοή_֧9ԁԥ]Nuبؑј\֤dzӊG؎r|Ӱ?'uVց{oΐΊ=_Џ4+!ٱ%Zv_3٭ۂءem?ܟM}%۲4R"މߩހ~ӝ4׮ٕڳڭLճa؜Tߡ/]=YGQ/o|`z.G bFۧ}1 )sI4N$, mHP!;0Kx ߨRm6H%ޠۿ'ؖj7߶fK"S2Ko"gvWn:A }JaAlq)jj wޒB޾LܬYPݮF3>}aQhUi bUmSߛ\2;UoK?5M|Qhsx-0H8=U@;Py3I^*&SaB8b80W0I2M?{2 Z2F 6mU#% s[[/FX-V }kFc ^1+,k \ZNXJ[O>$J9&D wvd#gk'mBN1>:,MbZ`mgXsy +)puS{"\\''0f44tuJM"% pf m|)}dB /\P=I@!t^dvZ\5!2]KL#2APiI VLU?bWaKq& =*7dAAnR];F'$+:Jgw-& 0i%rLR/ B6@-W< Q- -Z0  h T wY4mVLG {XNETEk vgh>X",lc5") 2 U Y q,<  < + cMV!GCr 78Ap(ZHGfH7yGn6/ 3 jO2@| , goq  [Nky"d5B.0\ vY\ Jh2 ,UH qd'f5?6^ z"c!,ZOQ Z aQp<YVqemq,hrKIDKt5ކ  "=% ,9WB p d l$#7Jfeb J F*C~wgG 1t}z50Q-A!fZ =%GG &d f'n >oi6A5@0 - ]pJp  !*; `3/ TR& 75VQ pre(8#|Jb x+u KU '8zT^46Q4&* p $Y= X WM?!%#LVU 7haQ h~c݅Y6O#r9 F$C R Y ^2 9EoASwXJRv! \O /0 #c_TEߴ\^]Yio({=%2L}v%w %Fa D F > %  "G,v 0 A" c  g Tc}Hb*|ݘmpR- i)MW)HTu @ D  \1  EY"eF+c}! 3 f5 : ); B + Z )qvݽRre{0UZ3Aj6, q )>*j :n!d;B} ~m5 ioR6k }Y   wEc ܶOTڟ߯)|[G/X  ia * .h(% gl7 ; ZN]Jz=$FC' c Z0K 0@ 1f5@RY+uY{vINW ;aOH.,uf(. +hRY[aS.K\2Z 7@ g` 2 E~,  ,<V!7>H)T!0+  x0;A  FzfSwibaY{[[#q,{Gb " 8 yg u + o,=V[$GTF7A5y-'u v L |=  ' s  Fl'zhPB'ot vMu`tdN?j8iOW3Q ,g[= G T 4 *h;P8.KYNQ\]ET.X!Rq d b u f  O T 8Q=Y IGH{ ݜu;]6N}>D(]CF?& @R <$ )2s  G%SY f#+~G ;PHUZ6EG}qF5 Pd"#b#" b ^!#G&'('#q,"$&F&# 4?z _Pi]i J+2vVMsf5{v>9 z O  y SZ[\Z#   x  S[$jc!FIY0L7y7[o8zJ o(nc_@D"')M)&# I!n UL3]l[UMo  =,R24 V L % { #q 8 @D  W Wp9O.K~EoL7Wߓ'xg)) ~i  z ` i!!I n I*H 43c44? ؔaݭLd4a3e'{ WZ[#C4/X""u Y!Vk X " = />QqVkzhP]PO~jq(ib0m'@ -a\\rb\\-` |[)b3L 9z0wRean8UGl Jp 9 [! g]\4  ,wg(e`G^^~?mH 7h!'d*)a'%$$!~  : p */9 (2?Q IbZ%i)a*'&i%%!'p&#W[ hT.=CժҦOםXh6NWkMETJbRV\1! Yb#&P))D*S+f/ 4540[+z'$=!5 pB!VƱ~ĢxɑStڬߴZA(#2`9>;???@@?(:1(oW@8'н/ͽ4<]?@lҶڧ*g Wg !!" $=%%F%%')+) %Ng . h%reRZ.@8I8އBkpFo ES;F M g:BE]P5Mӏթ>ߗV{WI (i1P:@mFcGEB#A9?<^7n0;( Rv$ŀ%:B aԉ;/ z uH$(*++-/I/,'"P llB*B@??>k*I6X >7OpWyMԄ˅чOrE  c&y-<00~1w5;@A>:j8b9;8&/q[`gbOŹe1Ϣ̣ѕy Qr&)(+.3797/z"^` ~ ? C ~ s e R ]{sZ1A'QW gx ! QKV)!_I ",*W.g28?$D9B9)~O#JYøOQ b#:!V?7*Mq( }:%082==2;6 2+$ɼAT#|#` @&j+ 0j4"axE&3=?xIOSSQLAF<0"M<ޥwGEj (t (S'Y_a[$Ըz##*[00,!l;-є},ƽLpq% )#(*%9 Bo^o *W00-)# .l׽N%byƒg$ 5/X/ K!! l VRraj+6@2HLMLGA4;%3*!}4 nIpF5 Z rq9!!JxMp[ıqpȷ7*8\ >d cTm8̇\LxF&O))D*`.@4k;DACAH;X1$ec8:ݙנW,| D # Wj)3F>Z;!wv#!~#%%W!k<T\n3߅zN' ;*7ATGJJ#ID@8U0'v bnJ * )?& ! B zlYROo5ĻݫkHcu_@<~fv!#"!s#(j1:AA<2l%X J;nL/_!@# [I]ЈΙ͚яG3!m &7(3# O hd6 L&~09@@KҺOre 0 |#C! xgF4I Dk 'uwj.7z2&!A&+*"$ '+--v.Y,3${l:z hϨS>mcAO)׶jc_]$qKp* lt;wHR7 z " +vD O  LE#S$] <Wo e`QKY,!=F3K!NONJD<3)#6!#"s Q:j| ѿ̃ͤgCӈ}DOW# XB '#G$" !$*.(wF9[ʕԠ۰pJtfۢnE oJ;AESO (L m&"b)Q'i [ ] L t! W #$Kw 4|4&G]ψCpd״dζ1_*w0g1.a*'&!/ T M !d>U]OݟɒW@'}"OS; #/%(E3CoOcPpIuB=x8j. AMFkݎmSsGUGr H -)g/9mp @D!tU"$Jg \ f h,"W@ \m< ËlpQ ~O'8[C0FDCCB3?$7/+'&K&')|'A- vj-ԙխoҨ\?޵>3j , [$!+&'&u$K S$ԖA_m+u!+ݠ3%)_C:0 Us95 aM#&'l(*(g$F1 O F"u  6 ^6m]o+hԷӱ';Րٞݼd#aZ,  2w jC %D- *l vݸP (YݥQA _2(3;D2QfXUJ]? 9g85+)P  JT|\$ޙ#aYl;Gbgތo^#w*t.-..w0g1+qC# IܷԼr JHi#CF^!(Uf $,P7e;3c+p$<5$$Uj A.ڔbN-UGDO +#$,',"V ?  g9ؙI'B{e\X),-,?! ^h ڃ[  ' o/m>@Z;y7M2-a02*M'V(?# q? P^ =2"f)(a&#X a&׼Ͼ ؾDƳC,'ID  (;nYB8_a3g6Ұ_o!"_)]*,r-$  D 1 j o  .$/O2&^IK~Ot 1'27:R7l%FR#߹ןؔD1- G ; .q751-$gT. c(  fY7'.20->#,w@\Y-*NrlIsGا˖%7PaN`b+y2/2v1w* T *.en2H$ !84,t65g(WR 8zu=Հ̣gjD T%H.0/?$XIߕ-خ؊ܴ nj!*2Z2,)&3 r# B_#+++z132.i! } ʆċb7֫\x-0w/-=!V^{ƿï"ۣ/-,a M!|-2j1G, 2 w . Z#`nc#+U1.$hvt4ٗӎmoP ~ f +!# U@}ޜU!ߪߕD1 K &.5650-u(C ^ray!t%H+,((,v-*/$Gўˢ1YKEa`K9 ي%˯pr$ ;(351&K]pJxW %4# *827:K7f08(p Xܫ Wp!|H ܙ$  xgnE} 4^^]6A,h*<! (.111_1{-l#X :  E OՃԦЗ̟۫kS&6.#V g    ;{(j o ZE!"%!THUߠrTw݈C`[\OLIC4  O>b ]%KtLܠ1=2j|,(S7UCE@> @uB-B?1<981(!Za DES9`6_ndɘI*я֋ݵ4" H_! <BE )@-( J} :$&!$ $($U_"" VғԸَ ߡ߅>16O, o!G),/A451-,+2(c*~hw!+߾#ujCa?03y _"*3::W6489F6-t# #"9 NNNӿ=3GʸΫ%Tss Tt#+ 5;V>;*50-)!t2Pb5߾}i6Zr m$!$*251("[Cd~$:{[ 'Y'Y0pЪ 9 >"2A7LNKHUHLFg?3'h" )j-׿Ͽ ȟ| 8 '29779)>@jA)As@-@@o>83i.%/ 3SĢk\?lr >Qz #-,25574,U$kV^TjNۮ}ٯ$DS[1v%*++Q+v'!Pme(`ԪndB7NܐYJ&"+27y9<<>m?@pC@5m) )LZA}]a7_ #,Ix=!^%*U-/2:777X71+*?+D)#o<a;ˌƿ³4@p>jڨ1 ! +4;8(/%x Z h rX`|#9Og I H* "W)..*W%x!!+7RwYyy@Ur>G| C֙ۜ<j y"+-q7<;@;<$;4)fqs d+ZڥR1?Qfn ̝ry! #+.29AHKKHIGGE>B6-&  ֲ}Ҟw֚/hp m $   -L /V. v c~{agGCTVe N]$*)K y@YՇԈ7u <*5@cCD>983R)#I: `)֛҃V"-֐۩PJtx5D %I$ ,/440047I?E A3%h,yޗY'wδuV! ULiI7p K Y h 5x ! 8y^<5 js'Gڡٽ]+V/ J `PdmQhw*$TsL; jHB~ҽah{ A _vU"%z#D M k =5^ Z U3k/c AVņ&onQs :=r,2!.'**'$v  ',8SCE+B.=2$ b~$,[`ڵק#+/-(m#tzJ -m >E|KD98uH DD-Ax()8 hh{&,V7?=4C&pu!TߣEL ^{ `b "ƣVłMd٘؈Pe J 32?}w 2.W /#'\lo8 Q&4@HJHE:+wm` l_&L/p64-''|-m8iLgZl ,#J&?: _{k"--2/$)u[lVp2ԄտF #~ " !6Rƿ>ӕ!'Mb~$ӫk&U%C [!%#N )I O'~6CaMRRK9J&K+  OEC#A(D&V _ wGUВTغE\LzO6xE + E{!!L#dR;!)r*(&'-"/i tsb S&'R$>҆4=ҜӐ$8-P&!t iXlckD S   W٫܉aN>i 6k %|B *xgqߚ)1#M.84+,  MUMbf> ++k)% <̮񵱼$%ݵaEtO q6ߊ^~sK* (40L14;fDOMqT[a`MUB)58*ٱM;|ƶ¼Bz՝xg] 3k?e5!N"m0)щ ol(.e 13FM SULS4m"HX _k -6y[^K }1PNud'/++25W& O$MErv?7ì?= =' 1#,!$#*F+,4CIC[840P& ҙ~Rr9 q&{ϡj0ڵjo + uf ? Z&0H30%_ YjΊ@yhrtܧ&oPSYVP@-)g =(N.u*mƠ3͓|+"WH #;$   - C*50`;OSJ7zo ʀU{WJQAK8/) #'$6\g?!%45A$Tv!%e#vS **o Θ踃u,l&-F pgO 21;>%n!c"l&# S \R vx)&@3:-~!,## y?oq%( W [5< !>)&6&#rK-X%66¦\Q*Ɓ^! g~A %Qby&"A!*,:>/\Q <B' dL85OWM Y @_g 1{@[>R1N$/3>Twt/1>r 5[YKr8թOiPߖ  (A!_%{!ntۛ; ;2 /<\?6.3"+<VY Utb^j"4  J L v&վ||U 7l?xFhw uݬu  I+81(%CmH ]>od}v"%)]w twS##`*C%*gB#R> nV Xha3w] -0BRLA\ NSjv߅۩ҳS܀kis$Jw2gztH^! nr!)7B0OXSS=PB84 &&''{"QNQ-y1S'L5YN[ }Z/nǦyăl"3. !B4#BnLJ>0/b+,o/'r"o<!/z!xW@l_6P -&)! ; / U3 +t&32SY /$d~f&z-6IT M?4-+!QN ^{" \ g R4Z ?C 8 Q| / JMktP& (0&>$](3::BkNMA0B" =oI;Wܨj׸n s*Ϝa8 ]\P d :* 1)%W+M).! Mr[{_| a#n$g$ = J'7-1j?IIA5 1./A":y` G@ +~" MkU W'-3tj iJL/ȭ3[ "(*1*0I1677139;N<7+;O LZڟ<Ŭ^Ֆpv na *|%N %S,)U!]"Js  -ٔӮ8\Ld¥ǃu~Rq {!.76N7.*p+%( + c4 }{E @dkDm 8\?N ' s  *  TߧȰNj3<߅x ?2#L$""#,/*.S4f871K&!r crfLZPDnE9m4m 7 *#2/u0/E2/E$,x & (ךܾظֲTY WgC(H)E&B/l685z3h4F/#`{#,gn 2R>.X';&R-v; 4  }$e|0jU]2v A4qT lU&*&%,/Z/y+'$1}Errq]`DVϓ6D(| 3*0V3g7:o5,$PJq {pN"̪̦'YʪוHw { J '&" L Y |N l %GYc0qm jU?^~ 606h  ` hn R#SH&)x'%#" ~i?C^%BE)gFԧ=?QW)U-b&T *=C5I 9M1Y#9z0q: &R h D9z6ioqTwAx r 9O ,vӖг$G V0;@S;13(o 8#T zV3M@AAM ' eOvS |}K8#al} s3; 2*rJ!ޭӍ*ɩԢu#h,'&%K # Ac ѯouY2)b@W^Ob"y$j%)%. ht KUs <PB'G!#'W ^~@\pͿ, f8"4% 6[ *Q1&ݑFl l} ># _b5xA  O %*d_j2j |%(~ 7\ڹOȫT7o$!$z&kX K Iɀʁ@v;jl4h ~ R>3T t!m U#  tQ$'/?$ 7FЇIϫoM% 8&5= %' M"ڏ%|J,~<Ak@-5&"=H) Sj7 v+p: ?=@5' UӘ]]۸m &-z..B+"^ּ5_@&UdJ@(585&tkq|9 ei.1+6@RKt{$G598x6M1L$? Fhݾ~Y$&a-* C~ 㷢߽ԬF2#*((j-\w/ #a7<<3'wLt<{iPX,68k6s/='"%9cɬ񰤴%@$x&+-)AZOGDFӶښSCi+8G;8/oXߥA7!H *H| Z/,31,m" {RҦ۾E2D '6$M%q,14$5/'zл}iӽpezʦ׼4 ujU}&$9D>4&3X,^"P 65^޴d֘-r99<>4>k:7. @ܮHHU&| &%, 0%n &\W$aˊ‘(EkA b!*)+7)| >DJgTgK ;%5 xJ,ھ"љُm*=HK6M3H1CC:# 4^( Xd\  # 7/\{er:7 _xTox+ue+<(+/I'vn/O͠ƄzЀՒ%vf t's+v$# ccSPS!_#(P#3ږȳJԯw  t sz9+>4a-7a|Oܝ6F)5>;)7Y>s: ID'E/S0-)'1'D,ժg ec \IJoZ-ٍl 1#/?F@987m*w{Q>bu $,E//$}޺RH8-:C(=;M"$$!= I! "'N-d1E,u1# twZSX#($ڝKGo'$ o)7=%r,gF ,Tp.X#W z"$$ 1vw @ ^B ai[ ޾v׽0Jכܮ iܧ#r )1a:@@o<1'(e$$$M!##(% dVkԁ2?oʪ%׉ܧ޶vxwVuc1K U Y ha ,Ib &,4A;, GWSj1LIݟ"51F5$&7X65 l ^Pv. s#/n9$c Ry@ ax-C\W*/͔ǑFGpkB)#7=A~EiF=M+L!F,Z[>?| ZXAE,%ܶؑ 81!MS> !'&s%# u$W28999$81b&5 Hf9Ordשљ͂DL p'08<879/3% f8 _! B#C N$Mح)ϰ򼗽J%bѥf$F6Z#$S!#`,6y:Z80;>t.,ZKM5; 7,}yګzv&48-Zߴau-51Еq6/"[VnIځم S0O-AUؐ U3pE~L=#3 GX5+6>L VL2"4Z{, tngx'-3A>0oSܶ $*| 9 <<)cK%#ڐډU c3R b© ;/;COD8%)*<>=i0e(ÿP] Y,+ "Q'4 (h/+Ȁ%n"C({r 1,ԧTٲv> J}H̅}ۊ58r0*(x)m7B.G@:& i˼Nf&04'&wn`x$j LB~ά6%3oc|AfR3V2`DU@͚*,)e!qH-c;>0! R+@N2_(&|d]f(O1 ,P%C6 pF]; XfS ֎+ƪџU.-S0n8+81/)!y(1N9>M6% " Ӵx$-. )D $G,"-b܁  k -> "~@ԽrڬUo3a7lI_YC<2`ɦ-O0-& .v!,33(+3d+!s#*.!,:y*2e#1+3ƹ.\  MÂ"FH%H)0p/OeYrӔ52)*** A:,V^2F*@#zM@w&O<3) FV&,,#KW:jÆ)c7CKz24}<'ޗ& NF%UpWnP7R*J-!$AQMD-3t V !g +/=$J \P2dt™`X)!0ݶyOy%sй ;<گ4Q׾ 6UA7&]f* @RDz5bO$(fau)#SLS&A%8/p,̸ -52,2`' u6Xͧ (]E#ǟ-J56i&6?7,cޝҖ!x|z_ <?Q9% of`C`z%' (l0Gd<N- 7twGѳĴ! ! V^gٙ,"(ɫ"7@)shc'8=!`E{wk.{ &=V *+n b;H4"X4>9(YT36J\  >l[0Zg6Шw` J+7~)T;$* 06o*/bF&n)Є @-- i+-v!,;>fJ$ YE]d n6QLT0}g 1fbc4%1*6UVV䷇ى!ݸ T|>?)?B1&VGEc6[97@KV00&W,dzܯ4+%y4xM#dր_00cKDYN'B3<*d{T*1@\9L GܺOO{#Aj<Ԓ)I;ߍ[ (n@I;+mE(l 60J9 ILB~-H~WylHӽi'>Gȗݵةԍ3L=9Z9 I>r+:($&G7 ,\B)ߐ>FG *:=!82C(1W ?Bl,G;[& + xP25x^ $ ADEy'x.  wi&AAB =%#2 c/2&X Qݹt̹ԃ|tC?ܱVoF$`C:J1*! <8!  3".1%"o+l`o5AAD?nD`8 & (%*^L0$ G hX  e cK8?u*mw^2q β,7Z~\*&+f[i/: | _-*+S&E οɫeqk  siA['>-&fSc+W%z Solֵo_  Ind[K+ hc*}+-$/RO]xj([e(-& IU 1}֠_]c.A4 &iID $3p IKLg !1P9 @LVp`>p f 4 t*>"  W \A0% | \K; sޔT% (*;=b(|$ !h/(/g |ک`وk >4^8O6%g)1<0 _L3߻H ['l<ܴܰw)&֯K!gX$1"#$8UL?]K؛ lwq1%6W/*=&!49' ?#l=qYG|? YcOPd܁ıw/ {Vdr% V5GK;hrfM2E2"s~(^ }gGpAH i B )T: :;-d_PG#) )`jЏ  N!A1 g" +*;j,?B$ qji' u}>I -: {؊MYj'85)4/<%bL8:U/ 6@P G\qſSD 5 +**Qَ*I# #Y$:S.( " O j7ߕxM&`#9π i0@>R3l!s$-*:$%Vab_حF 4Weg gm#-4v9ًЂ m+ ;36Zy+"(+ELE%#5 j8 ʝo][ܭ3z58@o1 UV$.x2$ ۶C Zm4/<"җ}* BV  :+m'+fR},S SC!K*._'{fD %Kc!Ҕ"f8E-5|N%w+L&%}+ՠқaI=Cڢh_d l0-s71[ ͮ,jI-9S+O! LxQQ+6+< Ɩ- CνvY4A#S,)5.pa"((  ˘ȶ3V ~ l7\ w $Y7ޚ (1)0L&H${*%͡x˪!M { &k 2lA,1(ѝ؞@/ `vSs} [Jt [q,/) r !.7b7-t%$SެPؒCwIc'Ho&Q!'o&ܵW`.r0+2"ڊa0}a"+Rd's-bCVo!\#s5<$9,4)bКxȼ}r .m*U L  & u s - j!ޒH a ftX e F!P-,& R "0@F?|5'q 7ҪDW9K4%+2 x#@K $$G=j,#-/~%~22fMMF 1iSZ':=9.( k6޵,סw< ՝+d-/j"" ,3#.% bfбZujU3l%rw&.3,sύ=g{  2Ij#8<" E,σۿ6xq1>8\0E k7zӠ1Pr z&3d2- & ( smgRN9$reB#Od' e3%p60B;<)|X0 C 8JD5.$^qa"ƮśP]Z' o^(Qvq B *~*MtK. S&47(L 2]aBBR.xWVc(9;3'*Zj 04ˌŚS s 32-AH: |iVkf,Muؾ3qR gn f%j4<+6)jj ~9v5b+=<@97!Bh8 ^*$%$u jHHҨڕ| :(x u)+ *"c%3:K3(Mj ?6y" h'^t)$250+t6LMM5rwE&m-(!> 6=TPӛd^L"4R.d e5} =PF(ϿPT#~>% ,XKWHy&5ۉ-ӿcﵖ ÞΊ7^7MGf)*a7 } Ѩץ (' -P*2F'I=-QC\.I 궫qHGre%%-eLUFUy 5W֏9$SeY0oVԝ6  f֞v)*#t"pc;'a*C%4TxR3z6$W6`E%:tk 2 13l(eMi\N`&z;\ f ꔸÜKӞ ..(|ƎҀEF/HQ X QQ'=,b a.i:,/8 N !-!sA1\T ldef 5#2=PH-ZV"Pd۬uv IR%sdk#-(HNp$ y7Y%!k6o:%!z 5%5p6x$a U\$#Z=6 hi޾@= ec1eKpD"m;PUV o]-(5 > h 2+:4bXEԮƊ? c+2'/ <#V5{&n7 $zF[E cxɈ(Djۢ $܌'Ά( u!=Lm4 x~" la%zϣG?%;K.Zm̦0A 9m'j-'`,1?#i:G !#P~ݎlf Uoֺ"  n@GNm S[6;\,VLg;PD>v-L(m+އ1{Ń)?^q d i2/7A1+- 4@, j+)rE,~  >3=40- +L+l;(o5Z(>~}%za] 4KmI'Y ?99p :u y=7j? 7% %& &N]Ց&" 4hx+"c(&N@=W rC! :A)} Ss+t:-^ [8Ӌʆ`ѐwZ _ Xf /(75L bs I5A2D 2b%W"Rjk(t>(+',%-!6s]jb^~':1 j#xp-7(,pV> C&u(MAe;Ӟ޽5%8ڀo?kI8 ] a6FU{_@$@ !R =۰gŪj]R135wdiGW )%cU'1o;Z.`l3_?=;yoњdl]3OEL }ZvŶbܗ$s&<!8k9 I1|"H-:(wv rѴ,[Eiч hE^W,R8 ?rL>0-wM%%YfH-b1$һ ܾ)1E;6:@& FE.Zߔ>LEe* #U@:F$D=gŰ̷Fv/CB"ѷ7}$18?-N #nǹ8'0:*t - "Q=֟\CPHR!ݽMȲNR&3}*f 4̴8,X;h?2 X7#LbP`\}<n*$_6@NFM9F3g *. %'4 櫣ٯu.;IH.J98ǗL4$PS~BzT%;+!E!;*l{/2DD6L6It-^DwK+VCfxJӏhvZ4U& fDj~+_96$[َȬ࿧|k&&1=$طsb!043! ^*" -%"Gnĵ );:3-*ZI&>CGJ4 ȴҟ u 1P꼿:ì&6BT2ZEA9&  ]g%߉P6n8}?4G& 8)h6{=9#6A#t,$R!4%Z(+CFC]3 nNF" w j4beQ x+q:+Zzv6*=Tβ/PT} d.n T6<9v4SFܟs/:6!nKv+,-0"xq0;<1i4|X,'5١ ep t1E1Gm8",ܐ pUؓ_)Dw1E96-A2]];&"2 =7#w^҉jݡ*J23)'VWm =)!7R;3"Qޅߢ6s u,V>A7WMY[lԼܧ<˲]i p04$3,fg1),NF%;K "v3 0_542$dg6@ӋXT1Jv58d0f8  >|}~]< U*gI,M#+\1pC&ʳL*%`y >*ݭѾjF*x?>M+PN;%Cu~س>W K3U4'} ZN YY ¼Mʁ'> ~sJY 1{:?"ؐ,&Iemp  IPõق\+@]>bE'1)%R*F0}) Kt.!,#LS'Yw G +?E?Vk-8E5y o%68eQ'ޛ qQDdp{" "47<#E>"o\t$C;}a ;!ά*]'++E0G*]R\y:Ũ a h#ʣ\ #*$>++! o /$& A%<A?hiO ۩X aw?,wY U5!\`*{d6QK,V6+.vvw{  :*-ZJ=rK (}t-<(943d=%{,Է$w8,'$Ԯ“4:GI/ _  gK!( vw!5KϬ##GJ2iJ 4.'Kџ /k+Tɖp̰TndT J,_;P9o:$ (!݁˖ʎјR  nd/Y=.(7L4L'! @oZ RKg7ZT@T (}&e2*;:dˉ̖R6& XI* rJ%; $1l($ F} ϩ"u$bҜI3\#1 %)# {4@l{>5ft &"C u?M. }>> - Wd5[fx{ q `ok.E6N v!-\(a.+4)x(<ܴkxb$r%CI;ζʚI}N qpWk >{@b 9\ YgB$ !Qia ( %C EX:{0rM91sr} hDR  %XRܹ؎Vn X> | &TwL 1VLvLAjr W ( (YAVݱmRj&BdT |.>QG3{vS  Oa9'{J# ) R i)sp"!.(`ܤ@' [ 8 -JD . u '۴Ҫq:k H~1 qiFZiR!2&!F9z Z 4 >"#'{"  y  IמiɈR^;!+%9Rv g A*8i@&f0& )# 9=!%$,]b&[X[$b - $ݹ;aпN >)-#2,/=),`oMֲ^|/?@, # +7,f݅ C[RoN?!Z0'qaI CYg$>).:A6S1:O,D h($qiU%Gg 0G9E'9% ] kul/t<3<ַ~e8 J{ M#+/7y H(2\״ɫ]`m!8B=' E*~)  ]Tk  j/7h'Pڋ[/=6Ws  eAp }_GU@D\`7#]VO{#*((@ 47n  Tw jY:B/H"  Q;%( _Qv6ۊL W< ;loS&  e*Q0 ) -"8#d *V;c SK*pq| VPAVOAAME5   " b /XvVV +)3s4+\%:]{Kj  1L J u;d ++V Z  c*Ev6[C ,8[o 8 #( K5'+'*vj212YQz %CH3]6Xl us 05^kcl +# J]WxKJT8!)% % W _ޘmhQ:1-=)Vsf~?% j kNR#*-O& M_aA& I#m  1L*yp ] HB[ UA74I z[_$CS t? `/-q#02%!' :O@^ 60Qe  "9BuR R/ [it)  OJ'FMdyW!p 64|i).7V Nul R>G #.(] Fa}Ov8 I| G ,93!83 Pݱ> #:#UZ \eu1 Mغ'7+x+$*IL^ h)r0~5F W .$h 0BPi +)V ]  hgB2՟ݵ{$#= A&$r$F gޖ}I1>8 c%?ua Xnl~+'$ xD$1 ]x +%5 7*  xO!'iu~ ݀g>M8 U " N%%rS޹. $F32B*C (]2tBIbT'1b870v) ($bdmmGI 'p*$Em0"&6mIRn$n"V ]Gz"  zNd 3 e u""0''*!'' ?5b>  ֽ֩G,* d0I$)'."Fֳۈ`^B V)UI 6=FJؖт a4 Q\{V%)%okZG  ap=4g B_ 3 ) "]e?MH5*$F'd ; )d' $7)$rTg\!. 44/WdN >MmTt QUxݿ:$,r$ewU'2*S44 jH<1:1F p?! I0ו߱e\* $+,uD1 Avs [zXEۨݑ-P*90R&_FX0f 3@#K&W S .~j a$) c(7 x WgkCj&!$nHv j8 TV~f]C*8q!+"&a0m h  ~ ! J]`Ά уX@ UL  Pzr)V^a^  .)T,s3(@ &a>ܺE? Q ") " }B d/J ۷   Эy،A_|;$] 9| r* }(&oM 8_ r_rCs *2'5Mw _iG]pP 0v d!1nbD ue0g\#." 'aҮkc (7"l \vMM0Hl@^ @UP1 "  3 q+.:~T{4]#4dJ4!#^*  8vb ll&w *'OY KM?e8^! V4@ )]rvcv(wg a?<x. 6-f(I>Z mP J? } NR#C zA') 26,V?=  |O >2/ MR #  < h% ('H,  L5  xW o(i[G n LQ>ZDiL\LUt >He pu @oS88fv$ / e+ۭ"Pe} ":!4 xQ-3 t c ; B iݹ .[m% ;vy' : `Dk &j P!:?V( .y)xAT?dv "#O n @;2|zzhWG63n ^,MݺS; io#1+x `| cOFYcZ 4)YݍxV  uH%%Ad111U ;\$ Gٚ  [ @l Y_Qj"Jݿ NdCF޴w ' 7)#qN [N/ * R xx \iG+9x &i*8A#"S&#?  {Dx6߁^Y! ,F{y8oJ1bu*8(3#-&,/ |z e8(c%KK3Z(Z(! cN IINr :+} DB4s>!w . yP E Ti b"&" ?sfq ߯p!${ h܀* b4g;q [~ !e KEPa Z$s%AW'&!'k" =+( s-" aCWIbzQOh\6 u.eG 9 z"OV`A Oq| L@8T fJM_ j-#9$6 g. )Clpocn"If9Nu |#.q}O}#*%_S? K Dq x, , DT  VM۷ 9}(N9tN -T ]P_+2O A K*.% !4gGC t  0O# [tz vn ݐ=Dd8~xp (B4Zh$dS6J'y-x&A O;1 (jU+Drr n! 7T*yvtft &:$0o6q `$CUDR!!(t*1 > !dT45(^2)Apjd/3dxP u!Z !*! o0  l*!%-_R6u dqM ! (2FAԝӸ !7Eېҩwc ~!_} A74asޞ*& k : 9* % ,O$, n%N7mZ=P|) -lz}"!/; E nvC (RbU^%% %"2` zrP4M FOB 0 g0>ѠchS @ MxT1i">xJ*P 9 j[tS D+5+zO#% n@0` h) A u ތԗms$#+?HK+4 #k3;&eO$  !%k$yK +]nR. 9h" ֆw`y" o֮ Rz#ٴR-)_ Y- (n߇X  (&Up5kx"$doYa"| ~1f!#1W[ѫg0a: `,2/' Y l*p `+|' K"iS 1_# H7=T SGHw,$ߎR7R16*+&uTLq{"/' 1|=6xI!p'MQ1 (U!($?)we,arQd$r$O(:4u yy/?&m)`D] I O ox?A""qa_Z (O ,=ޅVik@ %Y b&݊ \dgUH XۋM   ܂J@E~w S@M 8 ss")D! [&7ez  G%G W8l sn+'l*U GCOhC 8  y 3'W'}^ Mx3k*Z#!05**bw  # WN y @!  @   "jbE(!""8~t nI u C+u' s W _)I{d N-+{ 4  1J -AIM *y''<%D #1 3(& HK!c0VK.ރhd)/40/m%0>y $:!WDP^jsG  x 0ԟ0 9* 'PK0 %$z `0\V  '& #2-00Fv.|Ni7Az'rT6Z0i   G"^11 ss =C۳""$&1a 4 %vܵӍP$#Y,dޕ&1+ lz !+=(dN}p,d4)Y)7H\Sܒm@ R$v?O'i*T{6bJ Dނiy+ !`# q  Kyj g#]/O-k\E>k)U%i +#+Z&  ~LI )} ߢߒ-[y݃G%'h Xl(,1.# K~LFM U @3E"^=sblEz t&^ #S*2_ !#. NJp66&Ӎؘ8   <).U#`@#n (HrJ\)%cg& :9F4}LܶQ o"+"(p:uw&@-h([D &\@$ 2us1*"z[`|X#(ud B7= eS8cx$- F]{:+-fh) oU!$({#P+ $p*x+ [*(bB޶@u HJO  W%\ܲsk*7-ܰ\.A}/+0Hb s!!r{v Jt۵&(yߴ.!I0-( |a?E9 R :$!67߰Fvj%2,!r[v +4!!t! "1 qWElnD %K0"J B= ;% bM20.P4@$iqn*=@QA !<%^ .a  ,dMZ\H"/3F"p. &)z9; 08݀;)$,-+gr  [dO8 7 Ve*/t.4eg'Yv1p}Bi%2*=e_Dp "+$E[g  =ePG Z5\T!%R)oq&K& TC Gr/Xt ykKV@R}r C%!!P Mg (;68t^"$ U9uxrh:_ m}߄!#' Yl3v Q߉+   yy5 di T%$eS;;w%{: t ~BV8KK%  iOh\T Oe " [ RM~0$ak^$p=apޑO _q5 ] ^W"< P /.!bV 1؟83hq uoP=  g*cDS Jm Rr> w!Өʕъ  6; >I ޢޠ/< 0X"Di |`j՚*& `C6 []צєX \ ST>E!($" 4]w8wM<|v  QX QV-Jq~  czܮl n .ԲB\ Lnj = T |S.r7Q$ S} 4 K}\{ ] ,܌ 1 w   A K YEh4ӂ sHV 4<((I1 ~qޡՅZ2j9b \5- :'o& !W~1  qJk fB"" ? o "Mս 1_.7l& |X FQGTQ  RH^ n8 u 6 YN  fMMd ڇ 91Y"' l`|xC^~D !QUU  % P7* Xp߀ "# i kK/X<y% ON* !.  > '@ ?"52`fTPJ"$$$]% R mxM X &Kmٸ' ib'܊tDWbc, Gj%,/;. !$HZ:K D"@- 5 i]j :,k @+Avp,MݮtXg!8YD("| EeO I9S+;(h 'jg]!BdQCBV sy rHX,.N3}YJu9E# G #$"ms6 -] du11`@ A'&% rQ T>sp6_ zpB\OyQ/ 9 48&^$pes T Z (ly, 2VV?g,T6=2 5o,} sX6We59"Moz % y+X?# I! #$v~ V ^ /0 CZ t "%Ev#F2b&L)h ^GQr pa"  ^ѣ֪* 4 Ohu" W܏ \$ w5F"9* &~H^'#, -AO( :`s .G| #W D4>* 'D| c  gh1)*& g Mlp^ cK  /$ۧ&m74q))#=`Jx pW"sޞc # ._gF%n,#l =ٱe 9\ mxC+%?! S] .)."r R5@۲]-d jLx M:}BR}Bv1 @ Z 34( ONJ}D ;Q- # s:Խ  u$ !tZ' "uLRJFh܃͵6.   [a ,q!9$4n@uߟeq{ yM c ֽd֢A l lX=LV{ EޓW 9so gոҨܑg N5I$%W :SӒnm`t n}TE)#tj1> &.`PGD   @ #:>!8N+ ^ Bp!_F   ^  R U \~ F= joV?p,%TV uQ/[Q,I f|;Q< O k 7!Y'^d[2<]xI vx#69 =\V2f[TYN @ 8 E_Υ,PV g nc N2 C tW0H[]  Kp `"" j=R a5u bU <~_U  A2taUӒP  q#eY[')c y[ W|> $[|Ge7߇&iCi   Jӵt ;y Fa)6g  ,` $" A ->lY ݖ&9 7*3 2y8Kz =Cie^! O9"  nb  =!5w Qz_kx| 'RQ9>?6@_h rs#r6OX_kjl_pv \ JKiD]f m-Jorbmgg% w,$#߻q Aq?a.=~ sy^['-Yq z $0 c (LpO  }rDLSpby/$ n8\wV9dpG|QF1L > TUH NIݸa}mI)g) -NwV f2S -#@-4t>L' 3Yjs)~(fd ' >Ge! B, e(}GrsOB !*P M"GCF otjC  @&nWi)gNm5xMSS?QU*c & \('#6A h\jQ KwA\  | F$YV~,ey`pu:w 2?yF#,^ 8i Y[>D7l" ( hL G N vYv7 fI?*I7 M{<; \OpU =W&egom } L B' 0{ h rPxA Nt:w- > T: , ' Z N QKc(AU+B8X,'y3u  G,WPu- 4 R h1e8  _33V gf I)cQ 'Y`h 4P<%) #/6 J*. z^ j Gc: qrP "Mt[1 OQ#z  4 _ =@[e $'okWt G #"za^Mp i vJ Wk'9$I 7y E9?^/pCz  |`PTGi%^!'/A  5M'>sԴ D+ y7K$N "u@l&o ~- 5k# j aHןެ" 5"^ ?R  } , Rl8t ٢Rg  #1R e $ Z 36}\9, U@ ncM  4 "NA_tb /d z2`% JnP u n_ h|6uXz, c7 EJ g S ;  9$n>2h p #ޯS:m)H h.V  = L&l )[> |&HoFru  u ?_ feMpdT; \ $3g` sOv 7 3*nHo . /ޞ?DLr? ^2ہJ bl/#  -eދݗEQ 2!tTE| <]~- D(E%a_B+0 !~; j >n v2(  '}e4 zRLqSL3s/=b i|$ 8,yAbtBc  Pa{-+=V n ?k ^sB kX:>}NnI*r B-4# +Z mU]2m^]5D$zt. _6~ O x+IHbyH5 Qݞf5 O3;%01.U rud@!afD,H c+,h7 S$rB^!}O B]G9\K  #.!~4^6A1 &>mtw 9ry+Vtm d#0> ab_o&6<$d pk7N 9~  >9`BM he+ Ibx< [X_ ] x H~3YZ Y  W[l  fw94r%X"Ss  @y*hG*d\  D Y [U#qdl d \~d\t} ?c S \5M%N+  9eO*. Xy@DS (I 0!()6WZ [4NE X/ cb  ,A"5#XMtLt~-qG 6_1# ~ 4~$xY#T-'ubN+ vZ U {*gzM+<m]QKtL >5@6 ccchz+ 5A[>QJ]    eo<B' ax < <Tn &  2VZ\[Oxx| "qu 2{ Z U ? >QWZo+ ,t _Q-e l cq(b d!ES W^ >f ?p=C~_!'`y"K2%a ; n1f&` H}, m )ME%Gc #0f 3WhP _3?=7A @ ?*:$6/ t ^B7'`V;B KH: ^l$K>3m z" Zl80:1 7 |J7 [\ R$u.>twW}X L s Et yW}-,abbfA MZ4Qf{85 -_w h60f o OJSs:A#S-,< ?| {4s ]pW";]?D5t x~ JJ%X46HUj Nu @| # 9A 4 #Ji  Z[,[ 1 O# 9i 4Pk)c m%-Zh@4 ^ O H r i- W Z  &.{ f dWh _ {# -cxan A 73kw~  W !p 8[ y^u <{ }P]g'n367p "-Xt)t9Dg?3 !p)6P \\q,x_%S-u(G)5SqASkn[i} V}iUm=CNyg]C & WWMJ*cc R ]{/1H|7*XNET!8BIJ*z=3N  _C 1?  ha%~ <AjUZNXh ( frKIU`>^x0  ?LI<^Ha |iI 6" d>C7y50 E :4L R  yl<6N:Fe qn $ .lQ; 2 a 6_Or9 ^CqX5yl*m/-v_    6y= ?` U#M:B~1?o Md 3?mq qd {(my)bLIH?#  C E qhu51 7 E*WK    Y3l R v w&,{ hTW<2   & X64kozxg<!RX 2pr seR]CF 6ncw9i a & :D2cy  ^2!S-f2  n  x / h )gPlVz usr 9O^ E:rGa *ti%:lNd4(YM}=- RjYC5xus1 fE`  &7_S%?QX]JFmc(.- veSl8# 7 )  R}>^1 E5]sm+IUGSY" ={t;]1 R q w hbf^"+I1| =]rX[J eW;zp9B'&it 1,J0l<{`%i%i! .k wsK+ iT"Szs3! h Toh&R : }j)s`&G LV _my:m+$Bq`e`6[j  g*j^%' ) W"#k| [ mt iyW422xn8] c4ulcAlD i nS#9k  w '|}> M<$`q, F dW BbpVh6y*cm ) vs  +pUP,  $= 25Qpm t-W+ygjApZt`%M/l'3zCG A 4!T 80v(6NVM7Y: <ia$:{0wZ;$A_>xZJ.7@ ,<C4,I 2wo,ga; |;Vm U g'k0L3Lk'  i)>F1u93Is Au.n4 2KUm7" F : >@&T ! d]$8A 0w/t.uYmc =PW I !p m+gIQ4c;z/ Rpu-4 <P3FV!p+HwgIpcZ`"3zh/ > c&;lpKV1!~xu[4a>_)gUDGG 0-vr:ncZ#Db@ ( YmV a_tN0 R\a^zM ZOsX0- 04!~jn" ~mq&GO1w'Pq_  {Xg*t9J.Go/M8  7 _ [$|)  SKuY ufjbz]L + 6 3D~?{u H;5@R]5. o P;-} I]]|`C`6(;Pb  h2 Zz5"S}w;m)O0  ^+ GO+I%-h?13kU! { NH"c JRem7-C 002CUgB4 _ Fak#21LgB  oIU/lbzvVM h % cK@ j  )B{ (;gbbl#d_ -J Fa4!+w<]jRfm l7 c eax%g%({}M} CpJtIbkod ~j#9@L+Z I! pY;E 6yx>5@ "2F}:ly`:BECS-3 ,w?Q*tf`%|#;Ndb =7[jnx[6MYK~K A TME=%,@RXYOh5Z0-0$4 0 S$O[VB`|srM/&s{J*H5QA`FUf'Kq>D~?~>#m[BE~w*D'sRwGo+= h{hTw<2V;OP"`D?%T]BcGx !clob4Z0D/ 5/,Uy] Xo,Wv~|K*O, p,W D \ xt-/'Ga ZA 0W9 "q  X(| YzNO Q>D{= Ne*_ . [l8QfA_eFT- & ]A [-+%WzvfTULGo 1cEWtn  $zeUkX@{in9j7\957\=2 b EEeF)0K6(b @ 6P{ }f$? aJg7m3.b>,tD^%PbpJ"(V}vTkbQk JU&La}J SLVUDY G2A* 7;Q\'s5"8mZ-=90X"H)&n9\N&BCs_OJI)sV+_lAprTY/p->P^kH &w<{}<EFrKI*V9 /Cbp lpE%Se)<R>Od~]P3y<{"PX/3V/p+t'Sfw!uf^jHX" uNJ}^HUG " >9z/&_dFe6k64x.TMuY# z:i7 DnK T*I*kyk*T[#9A 1/JUY(pr|#eF%/}>R &Eq&srrcb3L 9z0K\(c H)-{0h6"#2yCND6@DrS h(T'clod6NE(xP y<]hTp7MV!{>/|0?v>~1Ly$>QWZJl*IUh P,I6^6i_]8$Bn ~?QW" i O32w.8 <lVEkOkb(Pl3@ Pm8E~MR-J ~:XBntfp]Kjat?\$RN^!V!jq8(V!G^{xf`Ko0lN%GXNXOWk)t-UZA}$:{9.Jox,J2L^; <QyQb'HPg,J?|0VZ[\#ql*IUsN.S_Q4Mqj]$:eLCRI2VZkM^P5NQ3VZ[Z#9Bl*Q EV`Q5;[#S wLJ2BRI2VZV`Q5;Xc'HP1L3DR EjM=P vf> RMAQp+]Pz:E~1zaod_%]2w.^$wO_PV! u-u`c&NWZJI u-uZFTrdL = uPDX" u-uZNl? NW23@}(V! Tcp< T! wv9rN uNJ[/JHHv.>D~Z\]\\$q`^\JICS -NY"zOK"FM3LosepWDnW"F!AEGT5A49zte'; ! #@pd'rY  1`% oW[5DY[[\ %z/HCGG%F PXZ[*C' ib^KJ2LoW ;Enc !A& 1KH/JH/JHY\[\#qXNAnc ibP/JH/JHY\[\#qX&GG TK^]]\\$qX&G PXZ[A1D TK2Lo_^\J/|0& 1KY" TM&GGQ/LWPJs,]/JH5Q ES n*t0JH T/|O5QY2QKC T[$GSYNWQSY2=R ESIQQ/<RYP =RY<RYNW8NWcriticalmass-1.0.0.orig/data/sounds/voiceGo.wav0000644000175000017500000012063407630537344020756 0ustar danieldanielRIFFWAVEfmt DXdata8  &*/16?CZhhx &(+Pn ,7H]ux~ +9AABB==BHMTarq\MD</$  ydZ^RDFD3(BI( $uzzh4 eF4( {cD'zrdP;6. ~cL8(~kE%dAq; c2Kq4w9 9F4//05IZtFf~X#3Ol $ 1s5b%mDE?00.).%0S:-fJ*+R0".Sc}sx1WA DdwVo~~z +3 /  o -   O 2R A %! F<Mr: S lVD4 #+/,*-6DNUZemrtujvvvvvvvvvvvwwwww!w1wHwGwwwwwwwwnxv`6ė؏C=qn`K5'ԈZl|ο`oK=AS~bmqtv}vvvvvvvvvww;wwr:heZxL]7*㟇ԍr FUOEQ"&'ψ,L ~57N[.emrtuvvvvvvvvvvhwun\H%6%<"މbB)鈻B\ĶϒY <#.;DJX8emrtucvvBwsmd_Y[M<%{*z6ϡe˜kY̨I6nDY|)0)$6DSZ_]4]_dhjhhfCec^`VMFA:1)C# X5 \&eVTȁ_ J/!K&+0v=FwKoKUHC=5F/.153*m9d4h:өԵ$ƃ$r^ȨاzP\3u  / 7T&a15. $:V'iyݥo.ʈԱ9؂ڌE)A  D ^A ?7C%>'o]˒t|$hXgC2PקRe 6+VŚcK1>'Hߙܳ 3Ko_ " e,?"* 4572+&Q$x l m A ;b,RmM!k/DcU&9oy 4n,H  3 ' ~} ` \-U=8u%dnjW;: ^|\lfS % W , KS $ _  * u !   W ;_"S " K n  )a*"  <c/jX] $;a _A&3&E m1 $V&&|%B*e06;>&BCB?=>@<55019;7l-(;)B,-(*%#z%&$<I USN&7 ~ `50Eu;k69zX 6I_q5f!h@j;U1M`f7p8 v/%k~&*& (/+(+ 3=BFILQcXzbknkd_bgj~f)a^_bghgdc-`L\UWPHB?J>6A) " t3WELqV&п>*I^츶.šߔȏ^Fqwqv.q<(a4 Uo0;cDElǘ!B8Kیʔ 3̟6ѡ0ԑ]Ȉ~l^'F.#eaocIYɉSG9׸r!8  Oi K!T8s$5GTYSBQ& CBF9 [v0=D?-3IoޒIE:hU.fiG[D+r %*2)"h`%2;>1fߵײ;;vRuź U3f0d[䙇BZ.H⠊sKږa)sKcً3:_ˢv\}DZ"+&wpI*=bD*B>@@B9B@<<8V543.&t#),Z'ZG~N _ &Q " '"BUH5\ 1 ;P"/ pE$'$%-3Z2(0D2D95Al?9v3K7@GG>9;ET]_ZTV_kkaU OV]`ZNHHNWZ(ZVU.W|XVMAE ?<6>; 5)%?&Q" .:MY t" V4Q* q$)(T'*4A(D>0(')-,,%$$3 B`Rׁ֒*ݡ) e?!&HZ - Z#f$]&)0 30+.0i,x >v"f+:#D/C<5:=N; 0)c0qA9Yb&^,P>>VKn]smhUr14׏:x}*Nxk<5mҔϜΥ멖aI<~M F$v:KVYdkp+rqq}qsu!vvvv wvvvvvvvwvwwvawtog_ WDOQIFCl=3'(^a 3cKT AfF|q=MbaȔ@7؊g' 0#]|ݑ  !1S"2)2@JNO QV?Z\\^aeZhgd`[XUPHIDD;IQ VKXX6Y)ZZ[\k^_/aaa`__acefffgj pr)qgnZvP+JGA&8.3& *1c5E˛佐No$pژ,65~xBά]'+ֆݖoW #N9K n+.2U8=>@!fN%m-IBXbgnnbcVZJA>@lCDA:=::93)9#.;;vH7U]_] Y9WT[a_hBhbzYPVMLMOS\eZnr[rm bP8<%w pTȶřh#̧ڡٜK͉Vۈ܈ووĈψJߜ6ǟ:q2o5Hє-֨ Fϑ*±rMimĦL%/y c  +(.Y6?FKMPTW[ _`_\ZWY:q;C>@A>a:6<436_;@>9Q3/16W<@'=4S,&M''"'e$!Iz N  5  b 6Vk&fLOD(v ߐ߿Y1ؘ֮w-iՄ\OͰ,'%"9\ PB3FH̘ 3G׹ε.99͆Ͱ5JO;eH}α(雙?ɉBڈшӈֈوшوЈn|ae-3187=_=]7*;! k *S4\C;2(m 4=i(~!Dc;=ߢHŝҖ÷y̱=挦щ4=S6!ψRh["O)V҃5m8"K'0]:AbGLQPNMrOTT7XYWRdQR[TUUUTTQMHF4H-JtJC=;V?C C@*>ADGEB>>+@xAy?;72>1080-S&!" !+$3#b E.ѪVf0h ' u c5}XDIG -Qp G'u/332|38<?1=f:75H1=.-/ 3101+7>CFIOrQP(JEmCB_BBCD+EGdI7KKI.IIbHD@;43+!~j-T e^ dN V ` vAurvZPl uh;gBoAsjJ(#P$%,9EGC7==?Y?5>J@_FL-R-UVUUXY`wfh/^TUQTYYWVX\_acfgJh=fgqijfa^e]]\[Y|XYDW QB8Y468:3n&B Llo{';֚ ԌzN㌌X,OFlj܏ÓčNh} Üjߋ"eшp5tV#%N:N6bkq^tuIvvvvvvvvvvvvvvvvvv>vsgn)n~pqewQR83 kKYw ,a ]e I: K qWW ^VDXщeˈވӈ߈ވڈЈ͈ψB)P#?K$*/3= IOQV XIY[]_l^[5WSMRnO_JC=81*%F%]'+!2Q8<>;@3BvBF@$;7A7J9=zABiBDLZU<\\]`eQif`AX?QIJ@3%h q'Zȕy ɗ ̊щe, ߈?݋9ߙ9d<8ZE|Ci R/?  r[qdr? E!%8%##$I),05=HELES3Z_c7fimpProynqnMok/ga[|YWTMH DB?": 2g)!! nOdҴ˘{%5gϿy% O Ojݨ٬Եrѐb ݽu*  G_&r),k3;BDEGM#TVrU?RSWZ YTPRTxXW8TXOHLqKlI!EXUB{LXWjO 8;rNpL>gڄDn՛ԌӗG3_Ϣ$0̆͝ϗ }?UdNe| I K`g r"#'q,022M58 :989y;W951/E.,T+*(=&%$&#!]!!M4?n Jojzi ~2)b*ߢV׋ֻҒZҞ+>ڭ ߽ _]G >/wnn(^w ?ynS7+pNu%![=F2T j&Y6._B $V2()   !9F( (7C)< 3++(#_`c UK }T k V m{  Y w  Z0U]m(7e>)>,*|(,030*H&.;KNB6=1;I`OJ>7Q4y1u' $n"! }rZ+.Լ̈Ȕ̲(귃y@'o{Z"ł{:ðeSͨ}ʄٿrb4}Ċ<و􈻍l/ԉD͈(!n+ 7!1@HIC;':=vFT6blr|tu'vvs.srqjb\XeW:SLC;L4-l%GUg /U8& pH(S Y |o39Bض޲g5P8&rΉkԈΈˈĈ͈b˓^B!w/_ }٩W *zyG #&q,26:=h?Q><3<>CB Bj=x3*$"S"%b* /1r1S0.D-+/*E(u%S!i!$&(4+.27;+@CB=7 2-{* (0&$!{^@ qެګ~=(.lEۦoҠ+si)ѾϨ&= K/t4 _ M | ]EliltoO@*V"I&)/+++-03556r79::}:0:g:6;m<==; 9R6$53m/)n%"  !*)H Tޥ؊ԣɁ%2A_Xàw]<˅Ejى<ܻG1moNVcBrO\%*.v 2 6YMQ#$&]''k(+!/?24V8:#<;|;;S;964F441,Z'$*'(\&t n_{PFL%H7A@nA"JpWfn(qtnggm/r:tttt vpb/R]CA[DC:)9=PG5q}-h?A >sd + <*0/>(m3Ho?v߭QܳX֝[)X,Ɉ%JSѾ,v- P$*,0/6>TFHFtAO;077546A51+$+4~I#]x:wT("^%p(+a/234V4420-F)#!&p] `  [=xa-0#x&NdRVU&vjsZrzR+t&UrTQ|CM`qCtT>=+f2 %^/( b o#yv}X |   &x8Bd >\iKC6t-0\tD>Rz\VGP;OP-Ms^[ o?V!>G s g H nui]sRE M}P.*@KcA4D2GWHG0FCB@>{;6 2-_*'#T  0`Jx8pAn'.2N} #a cl @h-VA'ܑ^ղrƕžpYHW̜@/ܪ݋% D pFqw!}#b" G@!  $[  E  G:m Jh5upp\%\S.fKߧݎGٴԙѰ71+ Wy$:@ư/#ŠɎҨb02v\ D } d sAj  Y #&U(|'&'x)+k,+;*D('k()@*'"@d ; ?~A.My;&^?Ii?B[+~s7*ԉקq(fΨ)0,Rk aW2(ʘ:ѥ֙QJTcf1O[m4 Q , ~o8fBF"D0}  = U x !q!]=ru tC'w4kW?$NReTWe2 7LbGnt jDLBp HE-=)0Y;!X@S  !3UnF0| ke  =G$b / ]w  L 3 H 01 d e!! 9J J .@h(h1;   Q 2Z /g"!|"|&"#\%#T+ #$#vZl ! !%7d AKBS:!3xRh^Te-]dRmTvt0"j ` 8 m L H: b 1 > @ O G ) Cv  n v  Gz ,#"S$*)5%n !K'4.0 +"")`5]5.%d#,223_+H&s'+/:+&##y%%>%#$ nb !`x7]qWUr N j N `H.yw %8g4?$=+OY | ) A  k+ % AF # A (  : $ f < ?q )  <+Xl~/%%-#/1# !1nA >3)n-=bHJ?j66O?KTMF;6u>HOJ@@{;>IKF:249=8/*z*. /+&" zEaRg yz11KPt6UhV g  4u>b#-d5V wj! C4  t  ]G &l7x PWf]!A#N"L$"s B!%~)v'"#*,-(< +3.&?%V() e W ,i6d@6/m4<8:3ݟs9>c29}zߗ҉Dڤ׬܉1=@+ubZ#>b_~G@Z)$WJfY (52'1IިK BA_ۀ˨ZIűnLfeԱܫKM@x3v1sMuy~pi~ĉYԖĐ{s sЦ 뼘yWh GI JC^%-05Y7A5?58<>T<8 77#;;o9J53?3331-(~$T"!![ Q  f ^wp{z^?U#L1i&=t;+T֤^"[̑Ǜ¼c iXYܷMs><5/)?.>8FBC9 05?@IJr=3u1;G$IKAF32J;AF$JdKenؒɬ%φ`՟'ۨU|JEL5 - M D' .syWJsfpZb M{J(3ZIޜuߎO@ B3ҊӸD{‡tJkWCҙe<ٍ⊘È|,-#iC ­ɶVWIi 5W G&&!$J!'e0m8<85l37.;! Q!"q$#" !W!y"t!=5~c w  V-&\U e%S>0?[.}$X{P|2?&!|o0'?Gh%O5[R^֞ղ[-ٱٕ' G9W2b~4Uc_tK  ufOp' 5 ~  r & m q+8KsI! 9 = s q L  p. 7 l^9K   R5 &L,{ G l O  @yb>$  3 8 | BOJ G)u ` Q <  L'tcV{O1GSmW(;hx~ 7 lFIphB) ~ !   1 O j Z JYXK 76 y  Z ] k 2  y QhO9(l)=i   P [ g X&.k%v8uTl`I'B"A k 3 yl H!$ Zz%E+%p. %'%fyY d#1!e/3=h$E(\ o Y  s ? u1V-yu23-Y( d f ob 7;r?#|NaD)-)?S ^R B f-Yii h $D"g.0$!'#7v=E90[*2S==EVE<6U6==EGGA644;oDI>86X3;*B?6*q*C.1/'"!;$"@  0 W -H f.R $;Q  ) 6 Tm Q2$< eBEQ - `u H L3&N j  @~S 3"\%#!!8"#T%5'**V&!#=(Q*&L#!u e JF y =FW`iI֡˛S$ՊԲ"aVx!ݏ;9Zd30^g `Fi?3af,c- 18^ͳѷ'թ}}cwȍγ¶쳝5ímY秞>>˒VCךIibI?K}Üv?pռb!ɭɥMe _&-. ($%+2N3O1./25z630Q..0u/+z&! @"$}'$Y"8 B D sP,wGpj³*`. ʢV~֨gބޱݤ;J# D~F  k! ,!+""!P !d@7S" I X $ 3}3K8Ip.:22a{ "ow8;bFG_u&\vp1@zU+iOV/GRN " D#E}:mgcZmB3wA au   RozGmndxYA>i^~gD! -['#xw )-6?K% &aFQF ~ / 62{ ^ t F L \ S t `>IoRD 77eg:zgF:j*: 9 l   4%R:" vhbe\ip(meMc ^ / ^ 3 0 T  a ; ^ i    P  Rv)O~1K /e :\ + J @ V  h> y &md C3h1@7j;_oCn'mRBLdl3@)6 D LR l ~ P    ^ _  7 V !MUJ#\.'+PNM9XzG=|Rv _  R C :g fN q `Mh9Ud 0h ov ! PVU'&!"bF$Q#o "!9|Y| z G w18U%bV`/  >$a z I   r } 3 w zd\ Y m v( -R ' $i 1mZ @U-f2V*,[t l"W##$2&'),-.../b1/332012553r22 45530S/F/#00L-A*' (0('$H!{~;l\D .mOSyAP7b?G}3]hB  } O R  7 | X]4ooS/     = > ^x c  , B![+,&yt#*o+H##v*k-'#)'r $Z j p 0YVR;J&Hg_ϲ_B,Г,W،1bQbٳ޳fu0s4bWxC~frb(F5{Sc-byM5A'+b:I}gi&p1I׿=Х–t`^I#v]C>R;H􋿊{fBԊvɔ2" jخͰ2Lk BFk&%{!;!&.11-/5;>l;8d8w;@@1=6!10.3640,)z(%"[ ( o &)VVQ55S79? r  V D 8Z6Lf(e "q3S0onhan v W pb,JwzWF~Ct`'3bE|c:e hur o A - A  . I  m w H 8 2 { Q = r 48hOj9W9(+M 5W^A5 {*hR6m|<NFHm: i.p+u4MDDTk% skD<A] _ H;0fXUtcZ~XK}w^($MWD2d)(abM  4.r _YE Y !" )%F":V#Yq"  `Y Cu F e: ]YB3 %x1fu*utndS_Z " ^ "K#,.)$"z(0547+&)3y<80f',u6<9F,&(39~3(!).,A##$"8 Y  g    N n t [HFsHU `  hd 4,m GW  JC  ( y'}|41 ) k a ` p O 96/VkRmXHi vV( g)VB > `H.|0{g2 4 x@o,"o;;\fMf ?|| زq֊) , ! Lv -N@d2g\ 6q 9 CwWxJgVwGx97e ("|EB | g0z \0e k9/ :' "!::ٰwEO\b"O%&${$%P(%(x&$h%'':% m !" FoB I "va7% Hy5 &r C w U { $ *? - % K )p=.w ) hkm!bOSVQ&I;/ O UrP}v:23K<`5!8Z8m ' a ^0  }G 4ND F'  '  [g Z q m8_IJ/=Gx mz  ^ m7=?E -WG8;%N C 6aR>KpoX/QD00: t " S  d1VU_%^ #HEn J ` p k p 5P ( }=s ~ >et )R q = A  [7PcMre  ^   q' 8 - $ }, ea *#O eT 5G rd09$(8 ,' '(D R"*7*~$ *2*3"&'F30T&'.D+'*  #S[ e[QB:$\ q   %l Tl%5(;$`"*0a11, *W,3653,1a59;8:\767I9!8V6442+/>,p,U0 1-?&t!!#0& `pk * ' h1/8D_Zpq$g Q z g  X%!k)E `  J L F1I $* >h .n6E x F $Rdo A 0}  t e fmhvCHOd -J@ߵ /VB޿ܯ>]E4[ݻQ7.۾v=Pۑ5o K86zfpo < O`_ixFB* r.Mݐԣpbaj*.C+EԷڤޅۺЩz݀܅Э.ϖyϺ,٥͈XەͶ ժӌeҞG*iʹ!2Μ0~͊'E˞)oGʕXcqɀr4̆Ǒ?Ȅ;\iwɈ(3Ç|3HB԰V:ܥwH#9t=?o]Spoic]UYceuggވeͮf}'H=Z[ܛGl8* /c ?V"+42<.(#$a,V2x4v/t*(R*v-G,)t%h%''<$4 ZgMq4H(mp wI(#2s) #B'{J:عس ;ЭVҼϛ̔7hˢAȖʴ!m=϶ϛhΔ4jiٺ-ޱ?u+z^z Uz#B(c(&%)-//-{.04 41(/ .l0$22p/-+ )(**+)%o":""y"} _u<~w\` 2   !s d  r  !s 8C05glj F z   * - , a`S&pRLH-k$"V @M 6 & J"f0! ###$'m*5,},,- 0245>4f21J368741t14V7730/1v4k30+K*,?// +%T#P$)(*($! "D\QM-OdsOuQ0: (!1 X p \:lv@[IYC 1 4 8 8 t C 8 C w S S ?   3 &[V7@ArB 3m>sgE d{ T:v t  H  w  j (  > # - ! 0  f ; mu5'aZc@F < e s i   F ; 7XO_iWO  u  8 ;+WUU? . n EW C y ^ &  ]\y;7I]jg~ hXg( XN] @] I . n: $(\X0@0MX[,4])LMAa*{sBxK!2 / ~8 .gA+4|hJ0"[ZA ]lM\k $~"?VW2("@-2y4$>(8 cBUWD4YJx {Ry/WT2RjXa(  %  :u59Cy7 '])u,D6&nD[i*AcfFg4kmF?cw=X%xs'u0+2 /2+!IAa`\;*\ZJ%<"[W` uic[/$Klc5)KZqd)*:aQ]g1]AH7i/(TzCBH& \ n"C-,<0\H?YJZp4Kg4 pl jiZyGHulG3-yTEPZn=es(U'/?{:#?:-RB(JGfA("po|A}"Se .)6%#Ge4+heC_X35;w/9@ff2X9@X&&ew^}7II _C80v'i-"-zPv..S 0.KLK+}c_NB>_2\dlFBe 9QiQTSD@!{?4re_]t(Te#EIq8K*jgn\q^5-^Y(3nJcS BiW!pY#ey"(K-hVvnx6#^ fU D)(rgP 97LV{"t#!*n5cJ/S>gB;+#%>%y)gN+8O0+0a3CQyK^(ym{j+,u8HLF-<WL<+Ci.C dW^-8) rT j?8*0B%oJwlSe2wrD>64f LZ1Lu?lg(.!C1+r# h7Pv gNkr; W$D#UH)@$0|cw 7 en1q9kUyL[cLa"J'f\#E&$L<F$+!,}*GU7|m'}1GM-X;cpE&7=g K30@;Ujj0J "nsB/S#U|j8%A$(6I^My LgpGSOXL [+*C 5 +C% x/W5.b[J_\,WV.<u[%} 9b'y3AiRcAk\0CS >D{1 otY7CYeIOJu@-R xT}h>ui4dx4 2bpvUpx\Dm\  $Ne m+7d=1?JNtW {rxjOw<-C1"/ pWr`Idb]og6H4F]V{m4#Y UB -4 n |M$Amt!YhHY9>5"JsYm$s ShTwZx,GAnS Q51~/~O,Zx[OOSf~L@]q"KW-EG ,p~mu\,fcU;a/dhZ(8?U=?Y 8fvkufhp45  ~ /sOu~ZJ7ff!XfUjqE$$BQuw0FV, ;{0~BJ npFf`JBC 2 Ew)?t}#*P(Lef!]nXOe *% 8JC$U5 &F=,CmXzHJc}`OTuzeA9WynH=Rwc6RcB=jlXMTs}pTGR`j\?7GU<&'92(&/Hg~pp -?-&1U{x^=Ec{bXWV;(ilzLIST@INFOICRD 2001-10-20IENGXMAN98ISFTSound Forge 4.5cue dataLIST<adtlltxt`Prgn lablRecord Take 001criticalmass-1.0.0.orig/data/sounds/bark.wav0000644000175000017500000000701410355351306020264 0ustar danieldanielRIFFWAVEfmt **data ~}}~}{xuplhhhhilortvy}~~~xsmg_\\\\_cjqx}yrjb]\]_`dhnqsux|~}|{zxwy}xqlhffikmmquwwwwurolkmpu{|vqljjloqu|~vlffhils||uqkd`bhnsx}|xvwwzztmd\Y]cejr||o`\_]SP[my~|~yoeXF68HXahpx~}|¸}pW:+/;DO]glorz³zqiW;(/@JTbmvżscTH@>AHLR\iz˿kM(+7G[oĴoG $4>LW\esů}[9(,:GTf~ǻ{V),9L_lzưuD08DVcjzʽg5&9=H^rºtI &.?Tf{zU& +4?Sczƻh<&3>Qf~ŹxX+-7DWfxöoO)&4?ObuƸiI503:EQ^lñ|^<(-KcˬwU,%8CUtͮf:%0CPd}}}bHCP\eubIOsyQH[wwYCAHIGJT_oͽqWFFIKNTZdvϴ}dG;CR_kw|cGC^p\RXjyac|}ce~xeWPRUVX_iǰoXib<,8IWpʿ{pbYctpV@AVpmYkyTQu~U=Jlu\Ud}åO>_pP?I[adbc}ݼdbuZ40HTSYfٻrPUwkC4DQRZj۸pMSp}yP79HSešrRNcif}êR/8Q]tαZ;GbuǿT*.I`̺uG4>QpȤ{K1Jj{wF&3NhزvQFVgÿ|K0';Slγ{VADSkʻE!4SnѴs;,Gcɾf8-@W}ϰa-*Giέ|M/6IbӸd4-?Xؿ|J-@Zv˲x=%8Pj˵J-@aйh2&;VѾh82NpT-.Ecжl:-BgŪvE1E[wƶU-/LnV;E^¹P)*BYɹT;CbƮ^?8BRg˷yL:GWkȲuG3BUcζ|J0:K[|Ƨa=;RotqqbSYoswgPMZlùY=8ALZt¬|e^do{ug]X[f|ĴgF6G0NO6M7H^A5"*c 0ՏzҹĽvv5j1%3W@YKrSUSNG\?25f)CzK6I^ { G  tti_ŦѳqH 7E 5HXcfWgxgfaARtC-k"@cx*Ѯty)=]MW ]>^ZRnG:6)# Vocޯe2hC99"f4CPZ_^XlPmB3"m;:ژ a '29<=P;[4)+ b %:*n F^ a>:Rhz  0%('[%t&_KΊƴh-ů}ضg#a#Q1<5,!Z 8C^فu" ! i!_ q_\*ZezX\ 1 !!8r: ;Nfݑs *EM /U( 1c6 xjXIF _8`?5b ) &SLcP-@Ix }Z)AQhI 4 <#/ 'Xfpx XcJOPI2 * + J6 '/@y1j, L - \ Z\kDa28 b W * \O 2O5<*&8Cv-RE $V7' "iHS<Pd%Ja+UuFMjpq9ABBBB{srrr-B Ta8VW{4vdh`WgBSw-}(  d ) Lt^Aw'6F?#EFUmRG!h*ODw l'daG+j*OU{ l'dH#{Gc%(>J vE+Q]"hD ! 9-?"y{tkW-s F;RmR m{ K + tG  1~ 0f3?/T- lKaRL&X)CX7 >wb+/@ vE#h*-HCQ~0O>cR $ SV>pj6sJa$ l 4 &E/x{F;!~h:fX*H+>)u 4  C `2@;A{ {' & , DSmpF Y U : P G51VQsac2V^l; m2v ?,9N. qiwCre . o5xx.MDw'Ic+/VX#4/>c%A vZ8} @w2?t4Vu-ZR,j+vOr.eB   Y CxG}tki I!h*|GyS]XOMMX)+ rc+s<foqq-%S(zVXs  p&L #vdh3L;~  T d V |Tq.eB N , X Y X#.e3?]   X~9-?"y>y_ O}0JLrtQ8=p2?(J&Xs }Gy2G#h*-{MyIy1|~||!CX)h:foqqq6"J&a+skprcriticalmass-1.0.0.orig/data/sounds/voiceEnergy.wav0000644000175000017500000022553407630537344021647 0ustar danieldanielRIFFT+WAVEfmt DXdata* '+7<8659;<<<?>:<92391$3;4319AA7*).2.$  74=Ogyq\F92+#"&'/<QbgaZVTRU]`hjjgaVF;52,-9DE?::8. 252 >YgYPOQZfvrr|whTHIWfv|q_Y`ecVH@=BJTTNLID:6.)$#" !)+'/,.6A>0&,81$"  !%,23. "%$}  (7HVfvw]JZx~oeYwwi%vogfpil I:1*/3" Ct}R5ASUFKU`edzulir'CRF5,,6%!-DLns)(7F8+X#.@)[Yg(\/5/I{U4 ; )H1%-9<@FMGk<58EF8U$g.'*# <]  |E !' < < r   %OjNy*a^V }*.,+/8u@@3$` )& #!R@$ 024W/,/5h971,)B' $z Q I4"^H[6`qU< b [l!H!IN 0# ? 8y B ( { E4$*q;N >7qjY'Uj 5xFkX7 ߱ZAQڮ p {] 2lU>]>y? qnf$}|p;AP*1wfocۂnG /f܍w /NJ]  V#(4t o!-&$5."25,,U-$+)%  ]~d G c V; q a f;3Q/0$nxZ(1%G4cL0C/6UO: DfPXW|r0nܩ P/.![<޹` #b`*PTC0C N(#)}@l\ߌܸQ{>.}wa4|W$ ??YY 9"C)'p!H_d oSRQcz  !# gdJTT4P PFN6;YmU#cj@wERw?Ļw(6ȃt{l޽З."ѯ/ʠ 󒀢5RŐꠗ-xG m4d& ?Gj>k ' }#-8DPX[lZW3T%QM(H@66+#U( Sl9ujj`]G ~ΐ,9{ɹ$="qqxƍ6C9G-&Dx9g? M%',y27(v\a$,oXܥן~}tǿ`vBʦ؎>@CRF^GL#  !J%P(**),(%n# n4?i H X<t*,DXaߴEmzLMJ_CW&O/DA`d HpT<%{4m?-ljI~9 df2BJ|:_RZN)"4@A"AJU[iUuKD =1+ }d*.05@tL)QPMI5GD@::2+5$JuR / #{ZT#1 )+dh )hE N(C1h7 @}IQLUPJFC@B,;91,(~"d!###U"}"k(08a:6#8?(JPvJB>8;_F3Ie:%0d#OAue  3Z7 O] ,[@Bٛ۱8JVn c07',)1"p!Y'*& `E (p o KD}vB6%+XzS,X$~@9^r~ S j^ b[ #PDI&>xn_A0/5UZBl=qk*g,Gc5~kgr$$dRx}0 0-o Mn +n@h g x'P00+%$5(p*)+&!?e J"U 0-4b.# P$& a& US%TS8܇gBiO3@0VtבܾxWۄ#8^  <^ hوRD8'AwKs_3B (3zQݛޜ,SSag|٩sC k;߄J}N.x I 'k(=lj?be{[dA_,aL8?iLO.y dhL5tʋQh+ì`aMxYvšj3ܺ}\ȆЭXL S #M$-3x4}4N6A;@AA0@>x>?@ ?;8-8<7s51,(p$ 2 r=ZWjD-GHFιRƞϺ0?ձ;67CςO &\K3  { r" tc +N-$*0)]v+64-)]-8]B@DA>=>T?><811+c(%!]l v!CjCWl[ՍaԔ҃3׳]fX9Q 8 <: r_we  }p,'*zjvF!߁ulSʍ[[@x'g4Jџb٠>ߵ  u$/8q RLd <8 =Sw0E d;% ygmV]"g&\% E/*Xq#ADzA'[ " B `S 2#8x@aEq* *vhd}ܘ3S+G +/iߏ& V S֡mFO~A-HmR cWpgٝߵ5JEҡt˗ 9D3՛4ڡІɩßo'C%$ʃY{YGցbfG>&!+[Nx !!R#I'*X-..04;C>EB><7=<841,%O*vvx   - ss˻xɒș@ƊUU Rω̮SՔ՟Տزwd#l=? F";&:)+'/1g58:E;E:8D87U8741-.,C,,\+)'x&%%I&%#"! D q'tzcك١ڂkuٟ\QP5 ԡԊӍңҿ=ֹ=,>Dscq\k j!*#6#1#"""!!;!!"6$/%%&(d*,-Y.b..1000?/,o*'X$  "e}aDAo߻-g#l٨٧ףڪ5ݫh=W J :QS0{O= !#&f*,k--- /0)1V1u0w.,)([({'$ b bi~& O  m9AV Bpje)U9)?( b@F<\[~S  2 ],vTL J-{1[ 7 3q+95.7MdA_WB05Q.[@waH {y &4+@2-&m';LF. :k%X,0:02GD% gv@B GC7B9(JaUbMG &6,-+&!J  \b $*M3v46.% "$((3! f J s'an( dBwAAU{u y=Yg1p Tfz"3= K  Z 9J +I )|  ) L *> 4g) ;%v_f !VxW&p Ia  f W!us( @Z A =V0 @cSpXw z v:5;`[O3H= ,7Oj8iSI_9`$R]UWU  _kp"I,9'Z-' =!:(w)'B%#q#@" \ik,>: "Ji>!.Q { \  -8T N*CܫݸވHڴz/,^Ӟ&>6 6?  86 <I> S*/+ "FB" 1EO-C:6.sBt"Cxn} ܡc B"p"$n'+,*''&%?#X! ;! u!#X#I#)##\"r!Y  J-E3%&? TzLDq@$AG}qaN VO - tl1tj T= L<# #  S # 9I5#QYO Q4\X>L!L1d^Y7olxuE`s9|].Q(@ )qDGBk n_Ey4`P^=9<c1yOBBWB2_3t$`F5mV//sj2> 7  & `}= Z Pc "KxG/8K%M3A{I3*, + x $c$ lciMw/v ?{E|,IAg Y 'f}IX4_h]/`MC}jSt"`gF # V 2 c 2 V A " 7     t SCh$rY/JnSXz)4j],j~M*,`{?f* <"{?$,Mr~QFC G  7 gi a  Z ~u"Zpe^ |~' )  oXf5ehMJR  m]6;J` ") !#$$#s" """6#! J!7!!su]hd`  0 " x":<{b8ynR2ZgGn7r + sU v H o ) U {  N :  7 B lE2qdZ.K:U\Oyzn"B9wcJ+5E7*Z *0<u |   ^ 2 5)r(FGz)^uE?hL4?b}gc9:V,I , }= #(9@q6[1wcBZ-P0i~5 1}CE4L#K"L$0&@=g4Wqt,w@ aWJ7(>`b` Z: K'ej 4 . q  N46 * z2(r|4 {PHnIz sg<kQ>k; ] O / 0+:p:yRE91JOU|@>&;sSM#| 0@jF=.!F]}'Pa5\Dw8&Q=8= o ? b3B d  V y / g ) 9;L G G   mIcu+vP)!C7m;N2 " c )?m{0t "  [l   k  L     d inWPC!_L4  Dq)B(t " /viITAEIco1ZC H { ? l /4TuY Q g s S DdIBn%*O)eAt;"7VlVyo%?x%f9)Db  G tw{, OM[s a  8/ ^+ x  r : mTm\ 8&s{wd fe <3 0 g q   @D >`3?} ! "&!N|> :..w wk0a M H q ;j19^'xR t z ?  r E } I X a   # k t ]g - " ! ]  =d  u]( }gdPHZ+ c*6Fr|=*<}Ij]?',Z?-zkJ /2=Sx9k3B7\1<Z_fBF86cGazW-z0`wA 3 DeF c } * 0)kq[OqLP`% :! ), 8 O *  l)1_ u ! r NFE q & z#_j YAd|j|wa*TlOB@`gVLLDcj#0?nqk.">K.D3VdWW_.>=ڄ8uqxZd=<*}/yy"q(`e/^^ 5 _ ;  C f B ; @6<YU:BFIB+y .7=NFAS): &sORG`T4nIfgcRq5Z,SI% S"X- ; /7*,t\rU&{._j $[VO'"2to;\/:l o#)pf4$COcS4@`{U6vW{85j W  'VX  x2Q d = z #r m +    Q NVdn B u K G 4 L_C~(Aq=a _ i n f 0ov v&1#*v*%l"$O-K460411 5787/64*3]224~6k64N2+49=?>=?BCBRBBUB?,:6&8:;6/.+3/\5o72+)'+_12.i'R "!m  pugx, ,ZA?}vbc\uTYd-Smh4"ltt' D eE  _s[0$W$MEYR\8+  x j ~e2"7 h ^G t  "T{RU^b7;{p|r,' Cj I "^y0 d>y   gcL*<'"+161*{'z)/696Z/(c%='y*)$'"e@ !""""#%(y+,',*)+?./.|../0^012b2%205.+)]($C  qo&F6ZqFb7fs'-O6[4])q? &OLAN 5 V<Ewes=hq+FR|x]#j)&,4*n(k*09)&(* *' &P(,00 .+i+Y/22/+*,,A,)&>%B#!-VQ `  HA)OGJ|_T8R\2_[c1 xM1 2N^7 %t']DY kPwDW4^aLC[o&z& 0)J^iFu TFQJ1}[J=:"  C D f=/  S .1#'&B")"%+%/-,(D(=+/.R+_'%'Q*) & !T%&$1= #%!fLB#pz< : Xl 8h~wwY~{-=1Qu}צ-ۏKޚ۱2݁c3ލ|p*~ $nfGV}rn]hhLl2~ vlݒ6AxwͮqAbOIJˆ+; f:.K_zT4% ! G}  q+kgK0? GgOQ_p10A"24VT$K ` 7 : y   zu#[' 1 _!s!INuF' < ` e 6 g  *0J:ZU|Y |db$.>U,2QlZEn   p N $ 2~#{x"KR+A0eN $%"3"$(,.,+,X./:000d0{01@34666w7O8;9]:;;9503233=/Q)$">##!  o U N !SZZUrMv$dym1OH<ih"~ t ; s ]t? $"Q#>%5(+v.E-l+d*+x.~.,6+*+,--...,.j.u/0110/<0234x20/..T/'.*W''&O')+)'"&K'`*f--^*'%G&&@$e!" H7 }hr ~E3%vl)W ߙۊ /ޮݽVdwdX^nnFQ8gZuZG}iT Ht v f azJbCyFrZ+ ) X" +b/kMae*Cn^m {M^E[/}?`"\ ' + "<$%(-1h20D,|)d+/1.$l"L(a%-R &!n[0YWD o FRHCe%, W *) . T%F5?!sX&:20K MVaPEf$ad< RدIц>bŶOʧֵyjS' -J"_^ȼ%AѸḶ{I᝺'nKCT,T,mYD    x qk@UuafDp% J s * :a'}'?"R;pJC [6q Z)v{dcC-OS! - c ,   bN*9&  UP@ ?{bz"cDoXxli}9NfjUu>? @ w >Y* `H ,E\A x4mq#:%R%x%X'),,+[,B---,+*)q**n*(&%&V([**1*L(&%&G))o&R eB \ S s B 'kk y 7L W !#;iH'Tj_+]H v {la6i 4  M$aL 6B GX!. [p[ ` m# B d " 1/Oka$HA44x 1 K  B o  ': K L m  7 -lA"^ :d  $ ?.!l  2 n A v T\w <  qAyK2 -  h 5 }igQS8S "FA]Xb W   ,  e -EF i)uuA-@P>!jr6ns:+0^A(_1 |6v1z޲awe*׎\X$/]&дͪT1 )2QVܓߵd N"J89s0I4o54q]'Sd; cWq}*T/Zb\ݮ/pe _9dɡhcƱ9̭ȣTXF޻ƻ#yܰ)pyѦE\%^91s&Ҟ훚>🞠VʡĦըcsw !يfaBv~Fdx a 9$(+--.046~753s223n4H30,.B,++,,|,,++,,*)%)(&#h). M 0RR  u mN,8N KݝCڠFX6((`8xۃ&N ,; dE%#svz^ ZN . h>U}Eyn:Qm)Oc)!"#j$w%&@''%#"! *+HM5Cs f E <$/  H  + T XJ w  sK=zf3Xdxxi; oM : &uWd1cBvH$% 2Ed:@ ! {Km-Izr{pDtRx=Zr'dh7#zBOr'*ss-f_ 3sN> 51 Ni hp@a__ /\ K { h y t  )W3 \x% }l b H w h 9 O & 4 Y IPk!Z7xE6 3J4 7  `  Q+LzL#) w &5I`E[z|r  C]LRXX c=?["ui4xnsr;XQLM2&w@X?x'gdT|$K/!|(qW5JiA('Q)z9Qzkk-sf7tiMb8,AܕQc [G,BOߊnݧڝEۄ$u٢Gxs|`3Ҫ=1צڍjݮڦ٘ NHdUjcߞ 9|ߌ>*nDp"3ri~@OkOc3b9$wY   z    m> ZgK*kaB6]]{ܢܡ ۑ֫ `ł ȅHú򻑾JPN)9(7yOfե*,8&͡0ǬȮͰA Vx̙i ՒFԟz׆3Ny۵o$dJe!s,! K J' !,"F#v$%Y%#""|#$$$F#"#s% &%k%-%%*%#"!!(!|~ ")%'\)()'*,B.,=)&$V$!:Z/a5x 34thV{{4FF9IJ2uAX!%N!I)u'a       f6% _|j^0&bqYc[>{#2z# 8 \ ~  P ,pW[N>fbjd]!]%MZT|\D+")ml/*W cg@zvz/~' t m U c  t?1Os}e!= P:!$\%0"u>!H"!II] 96IQ`S<s R [  _ g _ 7 qy  tI{\qECY~,~y%~?.2M Ir1;x9 * *  [ r[a # } BAV}#Y$/#4"#(7+)&$&)1*(%X%'**1)'+)+,x,:*#)+*++)_'%Z%%%%$4#'""##&&&')(F'~%$E%&+$S0W' BX a  <  DCrcS(\LCab gTN'/ Fwc  u : $ O#B|*".9e$_UHYn8M*mvMO 9+;dc"Zit {} : pS  I -`K 7@9  t    _  >  j  V 6 ( q  6 >y < DG1QX z  xJ:KsbXo+LNB3]HBRVjnNy< ^ptx߰MB*kc?y)Y/  B{V67/:@$4Z rKb Ycn^jް۬ ;hۺhލ8EMױ؇"[sPayrӰҁՌԋԍ5^ 1lߢlSA^8ߕޝw߾ OKIe=KWm^5Vy A   1 &>t-| !! !t"# %%#""R#~$$#!G{>ZUDhuaD ' ^GeX% ah5lS@`CP 4! VieKl=*NU SBX`dctZMH"% kD t=I;#UUN4 @g$SkT+6S*Sx>[C 6]arBYI;  y    m , P  A A  =I[\|~_.xP5mm^ze dPy e5 G E@Z`]AXL2]w#iYW(+DpeUhYCN-iH* n>_O)188wb|JUp4,W / 'XXv;:~?X{[4[ydkt3i7a#g l_rDR;g'hmbbA?+cOuJ; Yb N f  P d ` ) y N -&~. t u3t2;*;<9lIP)=O b'DI+`|; CFRrTD:Rn   x( d d J  l J |  so~ A n J - ^ 'x _X 6%{T! iYgb-%|}Pl<c[  BfZ']s4 X:t&\|4 4 &  C  S k xRZZrDt  \ 3  x 9 s f QRm~lu.P mW7jE$p7uA(&&l$9|^h3-K/99ga?Uv|k._wT@1<IJ K< : U q z 0 T  a e  d  J T  :(   @EA .c`?q*FBR tB ?SrPGV ]1Zt`=knUFHqbB*R4~$A^O1 |T)8 t(ewe+0pYG1t;N/&Xzz<_';= q55r'{6dSpOmxN>3fPv3JjQ5[Y#. (&7CMSSLAY4*&N {*f"Z,2552.($O! qE^ \F,* c+ F;! I&4~yG(Z-81Dr3 o<7SqN k {#9`s=fXrn.n,p.=EBAL\\; dLCh/5[b  `_)8$a!R-&&z; L__Lm  & 1MO G J8> v  3 |/F8^  p 5cWT<vJHkxe 7|^ cTxoHh f +$GF  |  a f c 8K+/+|%v<l9 d >*_0L 6s>mpO~g3HRZgO9O z[v" p ubhErl6'8&ruuLl' phX|jv|wk($<i#MK) 9&O  ?o ct ] 4Da    x JxFlw\e1Cxnt 4hd  Ki2*"*8|#Z,xH_~hE&ZwRa D F G2_3Re`cLPu G "j= O*$U-^uO(1zX7!* dT"s $"%IvޅA5 6 $G ,,u}' F .?.z {M8` >X  ^| n;twE/n VL/ U\~TS[Bad&S 'Bbt }a&   GSUnְɘëM'a*a+!{j)?jn~ޥpl%O H :,$>*(_,>u@ty0<ދ &9PlGY1  "-0&@Z_ًr $#7 i  ~"%O"q]?~_7F&4/0a0MX x+}"X?T]6!&2%  )C|ߘ +u6O8_+$**m5;zݽ k1&q*y&a01,h'+!4܏$=*#7ҟs*I4;3<3{[(4!\GNz iA ?C_i]#9g ߶ݭӷsΓ[Ⱦ$cKe/i[?:W8-\Ҷb4", F C<iX !p*, Bzc[, Du%F:B7 7ӿdy"%aܪ6< N]I*HL8D:'$LBlv'/>7'gtkgzFٞ1ڄA !{j13qiU'$s h"2'8ı28;:/t O݆aZ+z<+1(/k_#]_f[) ]2T NP" w 2 )j" y N"ewIq38 (i Kr\%"t z2.? K9m:w=  i|I4N )pի"9?F-;ȿ8-#੻`!%$Q%;ٵܥYx ܟf1 ź/h V;3F824@0_̓=Dؑ2ы#>',Y'Dz]|e_T  Z3]GBkQ`!u0  D:Ӣn X5 3j;Th!v 3QT#.7^6'LH܈. 09x%o$"W -dOL E)G DۢB"AfCRQjv] c|Wb}- !/wۻc'  :_6#%D'&u&&%B"Qg nq+! l%  {#\FP H #  F )aU^9 jy"&%? 8T#m>=H4N ~U ^ w m p[AlL Vwp= $ ^~ ;R  lY $NRVEZ ha1 Y= `$ N0L OW z DJ?7+j  !%s&$M"2 F  w 8$n%;  "M4jYhb   }:ql gZ; IxA'Pw` Z X?ٮo3?,@:n}V#S^[-K& Q`o$W>3S $  `VY/2W_;F Z Ag784;t}4$+i_-QT%Do  W }26(R  kSn" g"y%F*)r!z =L # V  5 }G Vi%' E-O $%"e^ &   @;"BCH df : I K YA[P," z^h  j%  ol mRI  Z~b)) 0,r Tb[e zxo)e~  Qkb<4dj w fAK q4 PG{\Q  I% I  VH\PGsj ^!F(i*&S!8!!!U D ""]_Zu+d hch#$ a9^-9 c  3 c (myD d x 5 W 5 ^ ,i0 ev GpyVA V X dd&~p!($$`!a}/  y"#B$# #!#$a&,'% V9#1&((,03K2w.*()+/&2&2o.'!##&''&%&"1Q?""?v56+T -:ah3 C &-7|m}2$AE)Y0^A7 VF>x;JI,XU@BM] b .R*j,n v5WE7 >Yv T X ! g'm z H "  'o , qBj8 .v^~u.&W/T]7C[n2uDJ(g ~MC=FUizD?' vMdL YUuxYeqښC؊ٙڞLDZרҮ_ÚҶĴq6֮ŭxK^#bFף'p@}tKwg ąěP.?@ʌ.txiWI3 C{f' #)u06k;<80(2"W!J!4!(.48:;9-87(9;;950-+P*'#cp@l5L!l$P$" !#"V3AamVmJJ2v'` U>#ّaٱ[fhY!CG1nQNl_3u1qhVv_1W (N aTRPsKt8hvu $&&4%#""! q< 84IH6gY f v    w^ lS7&S)V0LW?q/2wQz2n6|< 7~])  xI:R(p[9 * V k R+) %  AbP.< Q  @ {>*. [0k  V J V=dq C(.* xJG[V% OY '4k6iw Jd2y1-68 u }o-s%+.^/r.w,H):&!,^ ( jM $&((9(%#K "AWVU{= 7 5J?L9r~Ig%t(o|(C^t"8$&$('%!Yh%#(`++A+,X..O*#h%l qZU Z%_'&!P^)-S U ?Z  _m (6JK0|!^p[/2Gyh_"K YlMvްޥR'.ޭjYP3!ݷޞkQ߁yv ZdoZ<GmnusB=,ZmJk{FgIS)^tA!G q p X k'v9"M#$~'*+)K%! l x!= Hu @h g"7 L1[I8iPkD۶ϟʜxÒ;ȶʶ5#s5vEBQtzQyDBmIQQ鷭OY_ɼzة2ӲNؤQܡDp% mB'  ( ,5 VE"',m/12.( J]` I f{!( .k0.*&P$##" +L v !i d_~C\_+^}a *Z'Z lBF(+f<)VA L j,0?+ u }!H""#%&%"m] (  | !H&)*&H p $V*v ~ :`  Mm}kswyy(VDa  B j)@3FLNrSJ ^'AFu&}iw6 Lp . ) = UO w Z tG ,   Kth*y\K\ t Z 8Hp ' .{rD<W <y&a U h  &X)T,04v6+40-.<-_,c(%$t! h&#)}0576z4X20/ .S-!-+&T > dpe=!*#j#! J8wes^#trm)qB^58"Bzf#Hu7|"XxAk|wd S #6Zx 2| d6Tpz[@/(HA2V/8"'+/?0//.*j$ &+*$LyQ H!b |l  !  J;Nl!K*|{AYCsufeU4Cay9fd $#.` }q]wE<F*;{Hh)G >b$NG6]߈(A&BG݄%"3EݩަHX 'ۛս҂a!S29r[1  be   1  f$B65VjmTw H`8~dnq8d5w#|4u$aW1\W;pl?"zwMHf 2J ^p% k 2 V#W!F# }#!SB!Cjz?d=$,/0./0/J,J'"2B E \#Q)h/20N*$ /q  qO Z9.yk1-Y0 `00XE%9nڋD_-6Tve, .^5*UNs B&x  &EI d1!%())o'&&5$"L!:Z#U,U10G-($."=! A C 9 K UF:m \d#M;E>SbGy3.7BQaQd6 O@ I 4./(bq  hJ E vT6    #"(&D%D<}T  @2["iݑHrf+CmC6h s;) l%!7 }+ A I .g"+ ; r  CF G Fq7 t:z D+i;.4 DB(09P5W%#z\`JNM!OwQ\-I \`pEoXT m|Pi#}ߐC]ٔҙδҊؙۃ۔sՎMҦ(Bsݸ̷ S~Xío뼴IɝyȽōʉ?¾8ôO7!%˖oѫt!7 6k A&  z!tC  dl } r[SHgGj6iXdo<vB D| W%S1]8MS!m0F- > d٧W[V%kD + HnoާoއdZq=l}z|  M l    "b# )(X#,%$" NggE{$N+./-&@ a[M!"##," X R eAc3c}0qM(T{s1h7Bt6NR4N)+ B !,> i   ! ! _{ n [ f@. \ /3u 3 ?   Q b "U?j6$+ Wq? F gy|&%;cZVWc7.@^5Jw xDC D; %4  cW yg   1mw hkl u$**=!dyWumdC2 b[&&?N#!S" ;?O 3V 0 b    2&&:1n? s!  e %P#]9w=w ~h 5v/ TPc )L#.&?('A$P Q)7Bcc$'%**U*g(Z&%&%a#&#OxV|$F+\/0.-+($x  J 7!" %)+*t'"t!VR '9 L X " -SD [SC_l\   3% S Vr | C$ک= A֌5ĸ,կ!J_U۞+ dIVЌ@()޸ߤR1;:<!3 86q?  1kTB R M . n + H} `( R 8K`i  ?'~` jf W%48;&?}DO&pFL;&*i<t=!RZ6 Pe/3M*B2 \ |C - X  3. O"q ^Mv  t'B Mxds t3Zs 1 '   S1 } DJH3G}z@K%BsqcOa{QVmno~Toc/W$:\WIhDG:~& ^9FyF \ M @ ` 9NAII;3/ , N 83~g Qj O qG)O3JD=,yjr29mjGg.. ew}*FQijXD v 0' *cT )4 MG $$]!$'%"\$#L((?$Z.SNO""8^;]K L  iO 9?XW?Sxc; Sy!/>9u-iS@Wq0 ; 9(x@(8qB &|E _ a R;`  "# #! 1 !!x op==K!}$&'(9*,/3A6a5u1,L(#QDF!I (<%2+//.*B& =9j 9 f   (+!$i(M E` #BW:e#a P)r3#B$C)Se(8B?m[(&xMGpPq?WL  rp)f`A'zCu*#rbk6Y&U5Y ~  ) n ? T4$ z T H (;1mC"bi~1 5RR:Wavm2bvLXBLP%vA&:ypZ 3 r : M*_yAku ! ,9| z;]PEZe7Ti9w1M8[&lkReHn0Mn.iesWEZ J`٩גڌߺkGXK=Z Ck|˧EĎ_ʷCƑ1ĔŬOFT0Ǎ+ +繵ҸYg/ьԸՐ[o]@ЊC#EDpޠ ߭ k066DC7N= E] }`tl\H|$(*D+%+*)&"W/r J*@E  )! { 1 6;W&5C f#yyYuu70*x1rz: L|1B/%UG3U %TyxL'5=k2A*b#S ^TqeM  , E cW6XNU 7 G  lO 4 V 2Ky Wm_` YdlB#QCgWvND,N*ao5Eyg oI@_9Xs]F*PLBj|IUSgpLXaDaG<L0* _'oL 7 b `$ / rGSX:W+OUiBk[5!- V w  }  ( 5 \nZHvU8]g0\Q~6h(=8##{*g iE\ {# \^  R "(& k: # # %&!T$n"N_18=*eB1=t"-$#! 4 ] o L\*}7nn 6 9   q0!  lr f TU mPnd  e 7wU< ^ U> ;^ AhgT2 @ c T * 9 b Qb ^~ oQ H T ,   >t tKs - - b ` *  K Z ; 'S  [  a j2 ?p d ' G l    % }   p, $N} 3 ! L TD>v-7W|@x {')i= lW ) +u(# >  O] ? m C2 =  j N 75 M  J  [ T ,   [QCM7^ ' V _#0,\`U@1#x-kj;P3)4;NkEK 0(o0)0"?dx{RLiX X ko   y* O ?k  !fH gIFAj"|]}[ثֳs1α[WѪQ;\ă=,:ݵvsWصcNjDnust8c9kW)]MU܆bޚ{}jنJ{C W u : KFB Mxg#6(a*j(o" . !$ Ll+ :A)1* x (rHIl?%m!:]" 16&PozݗL3p5E6(\|7B  vG:/2xD$ )  y O H < W.%A  BJ@ Q t d - sD0p9RL, -er@Hr?bYH= B^sAMg-gC sxId pZ@%U-/kz|s45Oy- :yP  5jLr  P kIr?(_j f _ iFM&# p e$3i3[2D`6 S K\p [ n ` Q~ g 4M #Dj:  p _~pi$  9b,zpE~Z  Ul9;{+?o  A1 v Z a F!F ]Rj, G | 9DUP 1 ( u V[=ik K ~ f#st o) ' M? ~iL R q va q!P    & K ) x  `Xy SkVxamG  g Ne{ Y!%")+*('$"! A k6"d!%'('%$&(*C*'f$P"t"%"TRO7- _ #SE gafk*{?b#f.X 5R@\-a)ij~3 oTaXA4zue^eEu  2 ne ?\  Cz1EBb,y0_$0o^'9 , V}~ Z  Sb6xP2Wj=cqIjH?7%lUh~;^4'@/[cTh`|$SnD2^t) +Vma>Z/  j Z }`J31yrEp= D8݌ؐ԰ӖѕzAڋؘתOpgȼXȦ0‚k ̍)ĉĂƲT nLºSBˀLС 1ґ"ђBM!Ж lm1.&t@tX ,jFc  w 5 Ij4X%$H B2 79A u9) v8 9 ]_x#( E;'<.bt=h~XM u C 1 H 0 nR7 2eKtpOBh o e eOuf( ? - 61 . 7>9 mS#4eG9gOg%7uqc)R+EgZc 6w&t[MR$63O, (f6ABUa?`t"><CtX_RUc@p;@me{ K u ` # R=~] P 6irU7FrusdRs )// 37uJHo t $" k  C )b= Q f'cR b T`mDJ* ^qVN:7'4P!'Lt m 8|L5 Y8wv   (LAmQ_ !9kZnH??   9+IAgCOsu `$=qFv / ? W ; b!RF*u^ !W$%B$+!*B}>/>}U9z Lr  ;   ` uC?8Xb|9q p!Kus$Cq/=H y#C;n E,HMxsmjy*p]?WAh+K~"6+zvM?!"'q\/#c{9fX JwnA= L Qg Me ` Uj3C :0vl& -9w2Uc }fJ .pdHk5r7.Lo /qJ*x G O A >K1@eI C p f E %M0eYi_'!. $hfy_KP-"L&Go od-i,A1,wvg?,{@x{F X a/ )A V= i x 03Z`{)"RmK Soa%dU.=Z&kNF_K34 OV] vRUOR|xOGq8f |+!߿&9UYE^/h j ^B#Zaa/:$RK` 8d  , IY Cf  &{ ` ATMT 7  | V u(.TJ1 5 I _ @  m y ) 3 lI+$m  m   N" |du%V  >@%w   f O oOM6"L Y T } .eW WS!cgh  b  *%w 8a + 3j}h rSV[  u}(rEt rL tn!BegG+u|E6=zeE  $7)-}1w F + e ?xq p2e+".HYp89,\HW>o!݇*ކܧއݳu|f5ҫұӜԪw\]nбр̛5Oͺ2N["ey/CXɷʄh}97Wxߒ;Z*}V # \*Jq7 )X b  W ZV:If Qf Kv _hctq"41VcUDY6F2FhVdMN=.P  F 2s Z8>>P[Or!#&E&&# -[5 s^[^D S I}2d-I56P#^8' Nl 2hG M^M,f  u . a X <92B r s F e T 7x55  ev/ ,`U)K.K17Kj!"2?TpmM A1=[~OHQ%zZ!}@|uB f05#jmW{1\c*n=RQ3)S ޢ>v>V߁>6]oۣWWH6y=-?^d nVu cY( %9#&P''{'"&"z 5G#1"_%$"9Kf N j ;b 1f0 ]vFX"A , $DS{. R#N:2z}QZo03T`iO70nv3(]WFw T} F K  - K % p l  :  V"F4 I lV&m[IkX l o v 7 R [K1` L c  m Q( btw$"}~ ]V  0 Q N q G jAz  1 o aa\b]:.T@bc  RD} Kfl\\E7/h{n9gai& gl-tXP*ssY-+ 7- :s-@^} V  ` 6 } H 4,PM Z g K7m B B 5  K1xYE<<9dTK.K[!X\C!  . l YQ / * ! {B` " I Se*m;9B LDXGp t (we<D<hv%!g } r uSPm9'{1^us7,6Gb~{~*=9/"% zv9Gj]]?` D ?J:1@Jq j m{ / 8/":9@?n^Dt{O@Or+*sI7.1_y  *z-;|o ~ 0  E Oh4 O> m / " 1 R  =\m/L~$] 5k?7xx^)aXZ Gb3Zi!0 x$#,qK@5-_<SPFUHI T ( G hC#gm/ .=$n o   = 9n{+ # z X l ( { q]? GxcT4[% OB"bf>&^DI]]3XtHugP| 8{yMU?CXDZl 4 pg( WwB^ b " ~ Fp?=0 L; Y  , } < M u[n $ Az & - Gk-\,IkK2a p]pQU3:Q @ #,V> 9dpS : ' A c|2([+$1:b%zO7 |VEqR,qExQ=r*)=SLe4sbj y"-;yk"q/v qG [ !4  \| b C +  d aMG N k xe-|1Mod]Z %i##K[6e=-L]%Pw":FeGdP#Zz?<vx_q1wOn(9m]&].=d#ny*=8&f%8og!=.}jAY#e,B.bpQ3rz)49Ui-^Uv'+0Qt.c^?(FFKe{@_Q4:T+Kswk"_];tK}9nJUU/"|$gm6ggj LM0Bwbg31lmv "Dw}~U$nr mkh495W+Bp@!>H ePu"x:[u+cEfP4(SHj)CGnTP W A{J+[HOLB;"xZ+w% ! jG@Kag_w#}z# (dV,A:-d<! X  #zs&:wHYYR\LTl v_p=WMUJIh_l!P66VQ!/b/"8J'QQ HQmE gU$%x(cX wqjN-N WK^77[V:Y#X$ !M#)w),P&_,) 'X-uZu%k([)vIb/D.mM8e)T^$2 '(R[M7o/>y9JOY!t\.|g`~c{68o~x $~KI/DP.TX?`<R~\t-8n=4d_JE$:lh1opSZ1ff, hj#_Rp;U\zyHSQdPpy  co7av-uwnc(8 RxwN?%cM:PR?*`;|v3AR)JXwp fvf=:v_#2=] ]%`EOjEDY|   G j({V<hMA[\)j^cOf_61^O"M#R`Nk 6jj\.(PTpZwFoLk3q*  o z] x/V4NP9C.Q.{w3}| Idq.0MX;Mj;&dZ'wg!|>s'QGUrL+/~(d+5*CA8airmD >X7G.ptOj9O)#raZ3awO/y}b!= |Q^I_ @c hMV#.4xS2 AQHq0+Z!kd|> x)#|$ajWTbu |#$7pMvQ2"(1$[-t>9KEWd2G[-#F"W_ Rln,{ 2vn\ FdV>ZS~I[1FB=  -G4LpL.;ZCq?@Py+3Y2M4bW+w vaLqw@aJa~;9R'_NW7, pt{(\'>Yv)zY(\vDt~6]eMJ{VnQ'7sO;r3VyF|2x9 p0 (01S|j*.q@\b{WvzBt^5v~ddgPg,V=H?j8l-W2H ?Dyh dhOvc_FF1__)2w^o41-m9)fxYHO~R!  kfPBJ"8IVt|Howq(6w m0#0;X> VvC6&NiU8-I 7MB[zFe"V@R]yZKPgu8n<,7Quoyzgn=hV'#;]wJJ9co`G%+R:/7& $K\YA"t& g'MoyENpFUR0|Q?CFFa/@, jb W%qF=<0q90i6tC   b@*(/79/yeTJC>/,Bjuxgmyzz3WPM.=G4 ,[f >M@#>c{y`<#'26")E5m_bjmf^bly}~~tidcdcb_Y`ukm"5zz"%hav{}~z}oV@0$"%/:H\h|~_.H5# <[q|mZU]mxskhou          LIST@INFOICRD 2001-10-23IENGXMAN98ISFTSound Forge 4.5cue dataLIST<adtlltxt@rgn lablRecord Take 001criticalmass-1.0.0.orig/data/system/0002755000175000017500000000000010355431300016630 5ustar danieldanielcriticalmass-1.0.0.orig/data/system/config.txt0000644000175000017500000000162610310717314020644 0ustar danieldaniel# This is a generated file. Edit carefully! # --- Variable section --- set width = 640 set height = 480 set skill = NORMAL set fullscreen = 1 set showStarfield = 1 set showNebulas = 1 set showFPS = 0 set showSparks = 1 set mouseSensitivity = 0.350000 set mouseSmooth = 0.700000 set playDefaultSoundtrack = 1 set playMusic = 1 set audio = true set horsePower = 100 set developer = false set debug = false set autofireOn = 0 set resolutions = 1600x1200,1280x960,1152x864,1024x768,800x600,640x480,512x384 # --- Binding section --- bind CritterBoard TAB bind Confirm RETURN bind EscapeAction ESCAPE bind PrimaryFire SPACE bind PrimaryFire MOUSEBUTTON1 bind SecondaryFire LALT bind SecondaryFire MOUSEBUTTON2 bind TertiaryFire LCTRL bind TertiaryFire MOUSEBUTTON3 bind Motion MOTION bind MotionUp UP bind MotionDown DOWN bind MotionRight RIGHT bind MotionLeft LEFT bind ChangeContext c bind Snapshot F12 bind PauseGame p criticalmass-1.0.0.orig/data/system/Menu.xml0000644000175000017500000001561110355351306020267 0ustar danieldaniel criticalmass-1.0.0.orig/data/levelpacks/0002755000175000017500000000000010355431300017435 5ustar danieldanielcriticalmass-1.0.0.orig/data/levelpacks/CritterPack.xml0000644000175000017500000042727310355351306022416 0ustar danieldaniel criticalmass-1.0.0.orig/data/bitmaps/0002755000175000017500000000000010355431277016760 5ustar danieldanielcriticalmass-1.0.0.orig/data/bitmaps/board.data0000644000175000017500000000003710265636020020671 0ustar danieldaniel0 0 0 0 188 255 [CritterBoard] criticalmass-1.0.0.orig/data/bitmaps/menu.data0000644000175000017500000000357707630537344020575 0ustar danieldaniel0 32 2 30 10 0 [ ] 1 5 4 3 8 27 [!] 1 5 14 3 12 9 ["] 1 11 28 9 21 21 [#] 1 4 51 2 19 29 [$] 1 13 72 11 20 14 [%] 1 5 94 3 25 27 [&] 1 11 121 9 7 9 ['] 1 4 130 2 8 34 [(] 1 4 140 2 9 34 [)] -1 14 151 12 14 15 [*] 1 13 167 11 13 12 [+] 1 26 182 24 7 9 [,] 1 17 191 15 11 3 [-] 1 26 204 24 7 6 [.] 1 5 213 3 16 27 [/] 1 5 231 3 21 27 [0] 1 5 2 38 9 27 [1] 1 5 13 38 21 27 [2] 1 5 36 38 18 27 [3] 1 5 56 38 20 27 [4] 1 5 78 38 21 27 [5] 1 5 101 38 21 27 [6] 1 5 124 38 21 27 [7] 1 5 147 38 21 27 [8] 1 5 170 38 21 27 [9] 1 16 193 49 7 16 [:] 1 16 202 49 7 19 [;] 1 8 211 41 13 20 [<] 1 14 226 47 11 9 [=] 1 8 239 41 13 20 [>] 1 5 2 70 19 27 [?] 1 5 23 70 23 27 [@] 1 5 48 70 22 27 [A] 1 5 72 70 21 27 [B] 1 5 95 70 18 27 [C] 1 5 115 70 21 27 [D] 1 5 138 70 17 27 [E] 1 5 157 70 17 27 [F] 1 5 176 70 21 27 [G] 1 5 199 70 21 27 [H] 1 5 222 70 7 27 [I] 1 5 231 70 15 27 [J] 1 5 2 99 22 27 [K] 1 5 26 99 17 27 [L] 1 5 45 99 26 27 [M] 1 5 73 99 22 27 [N] 1 5 97 99 21 27 [O] 1 5 120 99 21 27 [P] 1 5 143 99 22 32 [Q] 1 5 167 99 21 27 [R] 1 5 190 99 21 27 [S] 1 5 213 99 17 27 [T] 1 5 232 99 21 27 [U] 0 5 2 138 22 27 [V] 0 5 26 138 34 27 [W] 1 5 62 138 23 27 [X] 0 5 87 138 22 27 [Y] 1 5 111 138 21 27 [Z] 1 0 134 133 9 37 [[] 1 5 145 138 16 27 [\] 1 0 163 133 9 37 []] 0 32 174 165 0 0 [^] 1 32 176 165 21 4 [_] 7 0 199 133 8 5 [`] 1 11 209 144 20 21 [a] 1 5 231 138 20 27 [b] 1 11 2 178 16 21 [c] 1 5 20 172 20 27 [d] 1 11 42 178 20 21 [e] 1 5 64 172 12 27 [f] 1 11 78 178 20 29 [g] 1 5 100 172 20 27 [h] 1 5 122 172 7 27 [i] 1 5 131 172 10 35 [j] 1 5 143 172 18 27 [k] 1 5 163 172 7 27 [l] 1 11 172 178 29 21 [m] 1 11 203 178 20 21 [n] 1 11 225 178 20 21 [o] 1 11 2 215 20 27 [p] 1 11 24 215 20 27 [q] 1 11 46 215 12 21 [r] 1 11 60 215 20 21 [s] 1 5 82 209 9 27 [t] 1 11 93 215 20 21 [u] 0 11 115 215 22 21 [v] 0 11 139 215 35 21 [w] 1 11 176 215 23 21 [x] 0 11 201 215 22 29 [y] 1 11 225 215 21 21 [z] 0 32 248 236 0 0 [{] criticalmass-1.0.0.orig/data/bitmaps/menu.font0000644000175000017500000003566707630537344020637 0ustar danieldanielPNG  IHDR\rfgAMA a IDATxwEև߁! b@1*s ]ք9u59u]kFYQa (fQ3af9wkdtNy :v>0&?"xr~|W@wn37{.] rY#co`}iϹc ۛ8 k`5{'kW \e6U85y?[U|jr4ui_;] jD[0ebSKߔýqP>00^rt;+_$4U%Y0鋮q%po$rBRmXp}1QODzzjT- & ǚ=/^h0?&ŭs#$T?/ff7'y nñ1ڏ:uMƖU>R*G{k`,#!@9k`b<@q%~>c++c Tu95]Z,h6 7\Z1pn:Q!V<*4`8-p xn}vG;/xNF>zk>7dq$j=6pnv F q$cрl;D^Qazp7H"r/V}/pӰO"?_UĞ] No7A]0ˋ= %U3K RlQ~GkMe%nQIi%hJG/;zW|{`3gR 7w_+J1I9\DB'r -Aآva JwU0.^'#(Sd;=K#//F/vXaлPMNJIpR >uõ*P`_T%ď*W![T9G`K! ?5٘<7R{5zm ! x$3w*9Yt ;lqW' aiXW{FdkTf 4ogf@{?Z{ug`A"^xeL֨: =Lo=8{yaO+W=%b#c/GgtWW:ϩ C";~T6bseK{IeS25Έԕ8yoS+_XlR{$0"{q6U)϶%@w/d4ҘYD v@9p?cQ~{- ژàsD%i#ۭxԆ'M-:zV 0wPAK~iq Zu>!s'|fkz\߻ĻGĨZ #d#H1Euw>N>zNCiL iNm@&>uW]Mj05ҀMFU7*O%o@EBf5qtͥC=MҚ?f9qGGNlc B6DvVErBl@\oS>!(Ghu#E Y'iWF\j_ݚq4J!V[o`zj ޘ3[go=g+NUqG%S x |P7p_-'TS# իqFxIqsGCQNx1؂wSiHb JH^]`lL#YcD,6]*`? )L3_* ,`9PFWQvQԄELƜ;.u@]H%8 Z݂Z?eT[)1o4iv|W#Fh qDaEzZh9Oq̠BމaHO|( Aov Sd]Qg@mShb[ IL6#^u} nD:&_Ϥ5GԭA_z ^ei=˟"KAwmR {J>ɡ|7!>3:dO?!+r]6iIMI6O%r'@K~ Č:L :> OY)Y\1OAϔp22h4ejGadᘗ O##YfL*5 pgLJ&tNKiv*$ .Hj9ed.#Q(ٽHadyDXg>mYWHwڦ:M!^!b69zkVb. Ǵ-Y Xj~< qq47L2/nǜ IFYc2 ;ߔ \ek,\,2-զu\{&e~% \RYUCG!#IU0C+UmTZt@ioAim>7AH"@Ra) n;zqbiP;Qbay']ev![/ LY=2Q}c/( bOkOa/fzEǝded.JGҾRQX\ysV~Gꯚ.*6CX[3V#0{vB<'gzĢőR42Zq% LNFPU6{]H"VwO+!yUb*2A%}cpŴHdФz?$m0+ n߀XƕWb2qя&+˴MyM#U!I1WL;N8.9L5xզZ&&2' cczzWx&4=c/J3Td4a7ac ^qm{ /A lUK;kp9P .yQF_d. n+*+ ?7EIbNО?}7|)j̪tFȨ!@&4+bs$j e~5;IrWjȆo7Bb7!*GJ;Y !EM*x v;p!E@-S XNFVe~$ƄhOQ `۶*W]рv)m z=y@w=_!;iU]] X:w*mا Y3[/!zW xÖ5wxzi1eUMxJR\?N-r$<"G 4 53@ pj93Ɯx%M ^SڿHuը vGri9^~6ff@mD_A bh[Njg)#X.]9DFY WȄ46Բwq.V1 x>Kr:W!Rقox5wD?Uhqc ZݖO#Cx Ca Ş3g6ض^0zY:NSmn(bh⽿H-jH8Hhl}1+$y(p-D+yH|# V/C 3,ێ*DD{$(ak$e}|2HA6~s !;Aq'=q׼_Dg@2º8,8}RjŀJM)uv Ǿ-fb=5 IڱqcmyfI*k0i:U2Y]FvL uU_~*۫TTsxG .azUڥc^b#[ _~@ύHNU>udLkmvEZj;ɟXV&P8A7vmM0hL8UqIFl(Hqd+&^xU5GaS8b(mh#k`doRah疊Ěԟ?&pR5 =E׫kpns0V=B.CMC&Q&XG!@ae&y: 9 dr @ʟ$IȌ5)iGpGǫu\VFR9G%0mmZrּwpz[91W0OE2-A[08F{a-{fڀQWpR]k8ζB$OA.m$ L{ {e6\M'xH zqE׼;Ԃ gZdpOB⏒G=I˛tr'9d%ꈜkּw90q#'L\qMZ[ڽFv.08] iԼ?]"9Fl-!Y3Gl+ޒTc\qq-z$g*YMPyհmgi3P A_]IrY[h/ v oߛ yy ~4F`QrMF@ie!Ǜjl"4˪ՊH/)l-`F_6gUM/k?V+DJ/a@HͰؕx>} 7IL؂o ƶ7pe]컿0YTK8*ޛBZgﳗ~ذxZ)YvD NHVH0 wS+ne!_Y"uբ^ߧaB"^C/Fw'lgǠ RtB/n~#hA^T9gHHܚm qqHK]3.9w}' -nUZ+IWJ;KU)˃+?R/$i,ne}%e+;Q꺦%j‚jx$Uƴݴk2s /⦕wZ}-F^@DuN*|!%>/۠9 2rq-soVur.!>EZzHPSLZd!!yήU VJ)}4b_+G߾ybf mmB#?삸ßg9_O8?/T5l+Dy5vSxnbz߄Cy0 Uj9-a0•ly0pH4^k%,†NAR}CcmOR4H识=+>#!k_a yR{b4RX#9V$HI%~W!"Omd:Xuݙ9 %ꪕp<@'gf_׫- JRK>DeaQ!.$ΫGc{!q "X*0?5!sILv52/HET4,М1D 713)ĵ"i\ƪkNl)V7RBGU\p2fIiETg8xaIRiyH8 97^8\ݶSt^8e :t6#IIʅsm4«$oj4:Қ30cLULW7} Z@9/ ')ڂSꚬ> I,mDjU2 8Cxo¿H?8t%{"-1ijc#*j H:'=*.jI WR"bIDATH~v7+rg0 ɂO;8!gq:qI2CɴwC\CF`%U]~88>&#>!u~Dj~Wk S̆'C^o'k-? \W/-s͓k>}jqӸW{Gx)]C[# ~[ l)3miPϤf/ABI7 @ Xy1$j̏%>a['CL lN\əG1VP'B# Z*?WF"PIM^b516g5a tM |l6x_/\9ߐT >وC| m0яs :}EB j@j 1ɿIpq4ʷzL\msV_XE `Kj~H|UvH1g!:W{9[MARTbs#*eS&fhFRҾIX7@' X٠3T mzH!UӪ1BR=]iPL{o`M $n`!BsV `]DbbX;X&c dLRʋ*?zw|c[~6Z$rS;g{r/#@@r{ZxږiLz[D( `qHhZ(c9plJl Pjc4 >&p.} 2-[t\F ,> y!Vk`luELp̄6Jf>6^{ ˵\3nԅU8f2v^Dpbty? ܗܡ^x]v脤Yi]٭ ~vWn $ŋ#ILB R-tz:X`Ӿ'@"n \LQ؂b.F6Rk3&x۳c*.f?s`Vױo9Q>6Pw[ۨP9a+%,<ڗJ3ȹOqS:QJ'$unʅ*]ˇ(4+9MS4+ll3\bt"E0=wW-j񴺯JB4R> 70ETyyxPw6L)G#_Т{ȶ`̖q eU2kx v/oPj,_0#o#]q'gCٟdNՄg= HL&.Ü"1W'-{5v~rJ@( SwHжj9$6>ABO&CPQD)GR~쎄K1QWv/nW?kse`AՄ5@iE Hp W\يrO0oOQ*ߋ=.4ӄiZ%yexAՄt%X0)q11>bE) Vncv8,^D[p/s]1b<.ƝsA‰&p,̬ `v-3!Vzt@`RsGHrj=w2ث##> y;4u18LA=EzWأL׿Gvj`S&vxW;{nydǠn$ E,o,Cz pvBty$$WǃH,{ϸ9g["eS8۰3*1J;=оH\B=/ǜ\aݨ>n_KFKŨz l%` m'T # JWqoH!^W%̼~xUha9lQnA_ D}l@dqU筭ݾ:n.Bi6G"&a,/oE~KQ "H[ua@3- ҕ =AZSьS2NMYv`FnRD.EP{&HZUiYs#ٛ`2Cg].7]>e1=Dx{dSN3zvR>ӻdFlIL3K`'ɱ2o= )~JEj|#!x{w2!'.M I(zbԇ rn!3ɳL>yibNkL0mNGҀ:5߰ !3$ ^C'kUQ0=c,'R(JeQyzsF4/">ơ)Pe|#2/ˆ(PgZcWCt{FnCJ6Z%g/;T> E1%@Z{YEݮ .Ќ㑠Yϱ0ՁD"ђo! 9R%@$cz-nG"־t CNO$&l `%]_8Oa-ٺ0W^\|l_V/C`VId&Uq1t\k#{έ8.)u+I, `2~GNUGt8qg pTi໸ ? iW9m<OAU 1[wOPl5; >#bzfG䓆_$MX&AP7J>H\nZT^jX٦8D h@zm F eqtdfiE= < wY'YHBZQUU :}wJݟ9Ev .!F ^nuط*͗8LԡZ'䈙trP6l>WǀY_!%GkNkGpHss/(_#: ?nCz{jXc 0 x7T+T=U9}ڂ:NыQpph?g巁U&5Qpp ɍCea a/Qpp `ւ$yɒc8 4ic;!$VzX/)f.&B6tӏ]"Ïw-= SY΍AD Р|e8ORO˽W#ƋcWMK+`w=*jտ{ LldIo/'TܝGQg@ 2[ Ƿb[rC~)#>҆l,wP~=dfZp]w$N=:vXll9W Uc,aq(݁k=+:)T 8F>J`>?G]mo>!".bmt^C'A_wGΘ* ?c[Zڟ5z݋A00! bmVۨ!U?L8q3oOb)~ `?i;WW,">BXMteF}- }XׇZucx8T b&<LpL}3X³bP۸VGR};FOg S3?X#ك0fJ; NRB=)`xgV ^nDzB>,:ŧgk= C`J^DĨhd;}hXJ\D]dkYl˽\sU`50۸~\*MO K2eJ&=j1eI•PNTV"רּˏM&{տUEk3,UwEhY3-jъJp؋uW\.rp~g]zOX|z`ùl?"\_48Fʲ*C 8"وYʼHff>[Z@`}:YS<챇#Qppzĕ}bX ](RƗ6(GvG_0}N: `V,5N*Qg$'Dڄ( Kpk& dX]}K+Z-aJyQ+QH^*,UU !ZaȌp/U2>q:2M4BܗPkRާcХpcɾ`噍=O(nzڄMy1 .Tybp>Q&t6c*aũ)@\ ]boE>Ke^c.UB|a!}dZ<WVUJ={PD!I`"uMP+ĚDGu̾!e01>pk bD3jQ.Mo i 'P_PdKZ]Ty\J6#w brqm;mU Hȕ:IF3܇AH>UhfPx]DųH/z>BWC/RB_?$0ʔȶ!_P( {y لJUȮC\\J;I#ijppe;-/C|iQfTDj ] #`Ƽ-//Cyy v\5׹PŨS߄"Npp1;50CO%%pxVT'888888888888888888888888888888888888888888~շtdIENDB`criticalmass-1.0.0.orig/data/bitmaps/vipna.data0000644000175000017500000000363607630537344020742 0ustar danieldaniel0 24 2 26 10 0 [ ] 0 3 4 5 10 21 [!] 1 3 16 5 19 5 ["] 2 1 37 3 9 8 [#] 7 0 48 2 13 11 [$] 0 3 63 5 39 21 [%] 0 3 104 5 27 21 [&] 3 3 133 5 9 5 ['] 1 2 144 4 12 24 [(] 2 2 158 4 12 24 [)] 3 0 172 2 12 17 [*] 5 9 186 11 9 11 [+] 1 19 197 21 9 9 [,] 1 12 208 14 13 5 [-] 1 19 223 21 9 6 [.] -1 3 2 32 21 21 [/] 1 3 25 32 26 21 [0] 6 3 53 32 10 21 [1] 1 3 65 32 25 21 [2] 1 3 92 32 25 21 [3] 1 3 119 32 23 21 [4] 1 3 144 32 25 21 [5] 1 3 171 32 25 21 [6] 0 3 198 32 25 21 [7] 1 3 225 32 25 21 [8] 1 3 2 55 25 21 [9] 0 10 29 62 11 15 [:] 0 10 42 62 10 18 [;] 2 6 54 58 9 12 [<] 2 9 65 61 7 10 [=] 2 6 74 58 9 12 [>] 0 3 85 55 26 21 [?] 3 6 113 58 23 16 [@] 0 3 138 55 27 21 [A] 1 3 167 55 25 21 [B] 1 3 194 55 25 21 [C] 1 3 221 55 25 21 [D] 1 3 2 82 25 21 [E] 1 3 29 82 25 21 [F] 0 3 56 82 25 21 [G] 1 3 83 82 25 21 [H] 1 3 110 82 8 21 [I] 1 3 120 82 22 21 [J] 1 3 144 82 27 21 [K] 1 3 173 82 19 21 [L] 1 3 194 82 30 21 [M] 3 3 226 82 25 21 [N] 1 3 2 105 27 21 [O] 1 3 31 105 25 21 [P] 1 3 58 105 31 21 [Q] 1 3 91 105 25 21 [R] 1 3 118 105 25 21 [S] 1 3 145 105 23 21 [T] 1 3 170 105 27 21 [U] 0 3 199 105 27 21 [V] 0 3 2 129 45 21 [W] 0 3 49 129 26 21 [X] -1 3 77 129 26 21 [Y] 0 3 105 129 23 21 [Z] 1 2 130 128 12 24 [[] 0 3 144 129 21 21 [\] 2 2 167 128 12 24 []] -1 3 181 129 16 5 [^] 2 28 199 154 31 5 [_] 0 3 232 129 14 7 [`] 1 8 2 166 25 16 [a] 1 3 29 161 25 21 [b] 1 8 56 166 21 16 [c] 1 3 79 161 25 21 [d] 1 8 106 166 26 16 [e] 1 3 134 161 14 21 [f] 1 8 150 166 25 23 [g] 1 3 177 161 25 21 [h] 2 3 204 161 8 21 [i] 2 3 214 161 12 28 [j] 1 3 2 191 27 21 [k] 1 3 31 191 8 21 [l] 1 8 41 196 43 16 [m] 1 8 86 196 25 16 [n] 1 8 113 196 25 16 [o] 1 8 140 196 25 20 [p] 1 8 167 196 25 20 [q] 1 8 194 196 18 16 [r] 1 8 214 196 26 16 [s] 1 3 2 223 14 21 [t] 1 8 18 228 25 16 [u] 0 8 45 228 27 16 [v] 0 8 74 228 44 16 [w] -1 8 120 228 28 16 [x] 1 8 150 228 25 23 [y] 0 8 177 228 23 16 [z] -4 2 202 222 12 24 [{] 1 0 216 220 8 30 [|] 2 2 226 222 12 24 [}] criticalmass-1.0.0.orig/data/bitmaps/vipna.font0000644000175000017500000003562407630537344021001 0ustar danieldanielPNG  IHDR\rf IDATxyEߝAF' "*r "UD#\" 2"L uQADd `B d '&tWU{s}~rwUUV HBnK_II3POdc us]9ڔexҟ% dhG'$"˻[ 4#qZq;$V)ː77:0 r?h {:;v}I2{}@}Bغ)c𙀃eϒe)SQk" HڢiCSel^EICؽ}֊nkђd~rIrRpgI ʏ߬V |;KLn!cytONQG⳼$6p|IrfKR{ 8$9$FaTv2VpmIǷSeGE&1OҚm-n㔴s$#On]kzӲ5,edfWҮ5UԄ|(I{d'˒$iY,m)KLs$@9I⿖NsI^LoFd- [>j-mM-ktj!g[ft[olIW8Ҍӿx囇eOƖ#dIJ,psZ՚/%#ZSdU;V{t3O2Yt $ ,;DX[LƖ% $pp&<RT[.iׯLBY"/7"/TLq|ZˀC W,J@\po:,^l Ӱ{:6خam|X5]~|}iט`pC)-rОoT5A7" Rܲ)P;סC`,)bc}w"6h?P (kw'NxK++0;G0K1VvҾ3# \ #x]Ř0q>Äb08{Ėҽ0=\4j"o[Ⱦ1春奄 4Ч:cgJO;|KV)!oLHVtY^ +YzQLGg-?_hp? ݏo:l*m|Ӷ Cw&>{>%ˁ>lI%Me6 kWi:ne%K},`˷! qLC:8ܓ_Q(/ s8/ kۦ!)WkKC&Iql6Ike8ZAIw#1!c̬!ucty: +ybGW0 y\IRCNf˱`-Kퟁa{a]9l9>~/n>ݚ!l~v4LzF!`O+)e”? gc֎WryАIU<x\:lX1n(3s nhh(V=/XZ >Y܅ե4 eq3\c:f8 fRru-!-bAb{ gM Z:VX;{cÍ0o> B؉Ř_k!X%Vkz~b>fbN%gbR֩Smkbu U vg:}ۚ} ۀ iLDl+t]g2uZ۲:œlY>4wOBJz?fa[Ğ5ӏ!ƶx`K[`VrŸmG$){ƄrgBhy8_҄}F9[aqW)xxkף֮8M!c/uw+j\h`UVL~Y+O{graHrIڲv>ܯby"v1?}rBy')Dn1/,GU]]\\}Qd8 !c i( '"2^^Z-WۚMTwKEyhUM=͚wBVĨA+"jGѺ H#?ЏbkT`5Ij`;v<>-دRհI.0.\i1 yG&ADW]Z]l_tOz;B#l(g5S5S.rRsk&&{3rL)ʃS[*0=pN.r9MFXr [?̊.~Z:̳ 88Jqiq l~-sWv a#p6Nz3' g>?G;HRIX4+_Azz~I:/K凑P;MN{^vb%6jd cGoB=?g&`M&uO~YIz{\/?8ޝ,dl??p&v f~x=;+RVu M3Ij+y%iN_8U.m)GI_+"kS%(E%*7Cg3rTYh/ü 4|4ybJ*8Fy>K_#li0 {Y@C%4NTT?/VXTa˶4-fS7 5z ,g..Ӱ%Hь&`FnHK p2#{l' s[ƹ.J{GZy- ΡO<(k|OMO~[PNgH6宼cqZckSD?0 sQMu 5+?, bkxWV|=p'?q+\0;6Ė%Hb/J̿ _&WZ:^[FeUu}! y18QųD$308'R:d˯;hKZ)+ʉ_~0eyޥq,dF3h$[u=gUȹ*٢6iQw$b;-oz<a 4.,d_w?TݞD:Pjpa4Fes7d|¢eOtiv)jC&i~TA[TuϓԊǀ+mγHD| 7i㗝1m1'cPHB/u)Q lgVy3$/:`b^fnΧHk`o3!۽]U^ TrL05J==f };Pv&vm:0\`De54444444DMvt;$=&;8nLIߓFy:׋eG%<[&%ik,iDJQn-d~H/%iHBٱ%}RIe+]!aIҟ+t {HzPu! :.v?.9 \?$Nڕe*"u@_ 6A<%mx`'JzAf$)IG*wLޒ;<+i^k+Ē_4Uu𚺔Χ(+t'R:Uҟbi ^A%?Z#W3phrgʫE#>T:w #S쾱NmY<`~ۧ|aL1 0/wb︊MTbz3OUe#e" ,o%:T#~gՕt)K7j,l[40'?/} :V~e;B3`K%V"a6>l~ʳn% {v) Wa^` nw-4#]v2.8-pD~!-1_Ds4$'H̭t4zu=f̋0!DN"y5gbd;E^)2˨G봀t}|/N `q\RN $ku2T*&IZ_nEDOQ%H5O$Qm8KmNIwr:<=->OGzlrnnKKIΞ}Tn3Ye-R6 %{g=d'a.CBkkج>7Jq~HwaN+M!cXS6[d[Tke݁BEy]D~t ]?a rbâ嘋;1G4B ̧㋱|&G}xG{R)^D@u2E86&Arkl=)(҉c.BJ'b30VdM, HN-:]Y0D/BSIxENuRvDXyMHt& 2n^Qnv3e>VT~D?7=*ee^UWF jIWwޓ~27q['@) UC6>2=tÊhW+P֘ӿ/bo`~ HWkv,ws $#ʆ\iC߇vg{ҵe%$2zϘF4ďy#1geba35uQV5\?"J0Tc`7`+0[$7dcm.[bc.e?6G'R&ڻ/阳2-'sQ*A-%+BNv8Ò< eyJC|`'K*;Γ2 h案2~8piwt*i^ ܱf}wpb1W߯9 9U%S32]e2vk% T$JY[Oc/Mi2O2_' :R'Zt8j́ ZubRojڷj= 9/b |"5r"c !8XKtSNU^gwuT$PgWDdWədXFuEBiffL%rƸ$徥]co\%-~QgJN#Ƹg9; jl,C}kױtFH α_ۆ]rl,D 2q9xy5I IO;b!f,xvnMP[֗K,`NaC;t"ڏ EY:m\9v)6'_㑏ru1(O%%|{/q1/c-1#0vZjƖV 4WC嬋ESr9sjQ6>ļNWA [Ζyj< QR*g2f}#rk! ynkM*:梾oF@"d[} ܃,\_H|d]|ռUX)8f.bP q4n}X_SBlF0s:ؓ`5ҽ}xNYqCygծ5 8Γf;8V293S\0Y3yBLWbЯ@B,PO;_,7a֤SS`MLg+&FiEK 8;ۏ<[O}Ĺj'c34;u<|c2j<7K~g^Wْ*yBaP>x-Pkc|uFda1֣S ;[9r*`,~tɡCGT;w UEVkzPi28%˽ tgDd:Y AcT [o܉y*c< c)KPVF$U;19pDBЯJG3Ib] p{u8;̖0n(KOGusc,>\7xV`gߊJ xѡ}5+0%ܟ09UƐw~ݶNpem0f6KciZ ڻ  Io.m0o53(e{F֬ʆ*AZ-!YH3=SD&JDrF>V,묘*wyxV$i1Y@kU_XO\<yD@wzG@WJ;G 3pɮ};`{ɇva=XBܿ|!l@]s ޔ`!훚!G+=iv%}]ٖ5ɬKٮ46yj1Ho(-9dT@@ U˝Qq!DR5 H.> {]f`]q s=5"g2E3e7ڷa!B1N|mAl)f>[_ˁoOA]R9 HW,S"{& )B˭,g}uh)ob"R7e~,δعDyVG;pCz" wxM6ew(" bDWThk=Uǿ$?PqŭoHlЊg@Lw P3tBꯘOOIOIDATRݲ娊gm` L u-9c}QFZL3]0 *( rja,g߾K8)_Ӏ9c+t][BSOc>^<<<m+Ml}eU}OXX`Yn*tFL1+DԔSOĶICf6EΣ7'۴6ՁOQo̤Cs-dJ^ZL>ܻYP֯{.gbuRuZ2R4 ufQuWZ۲\ /|9e 贳n35ɬKN,Y^?=yO_ )aܞq./r3fWD kY8M XMU.uݿPJ < x56{5l% d7c`oe+;ܚU^n+p+;NľM,%`磷ao:g|.<ފ=N]1qR6444444k$] 胒@TO9\̉\OZIZ!iY[IZ܈K9AID^U^$pY;ot'eR)|&{Jk $-IHS(-%v9$}Y882֖JkڕgD@v+[@GD꾆$MҴɒ 5"֔|s%=7"%骀|HZ+"*. ^.N[GR9L .K/~MtqBKpG璾(i%[ m2/iS]B%]<" IZ/I;J9_(ﲈC<`=/}bτ4Hz:s'7l)IWK:^;%~ :+rmKRY-/|O Io5\OKUEt83C (Gȴ+G%mP-%v~>gluI}[_>SC`u!6iS$~ク|0}'%>P^YD^w/XGGboBh1 [0gD>B@M0oyفSӀ7G$Z+-4h=Qak(ȔrZTwUEY)Je^n)1YfoI3$5!2$}+oF.gRRvgQ$Sq+=-?o;EFuߴl螱rl|P 9ry /(S}Yu;'!m9؇ kQ)}\IHL,wF0t$]O$X9,Io!,鮜uȭNzn, NFY7*"~]uౡH){i_e;tfaȴHP݃4VJڨ]Κr]ܫ~cs,CQ,2 ʗ sߵuMi`?Fl9Oh!03O.䛄 XE㿁\H x]+Q Xx " ?c{gck(_b0.v2gd ITU6~ϐ&}3P90#h{a`)G}?> _-I~Cu~=qϾ}08UHg(ܝ>2}g8?4Y/%sY Cp?Ixt_t..ظ-c,s_}.#-CPm3>gPqBy\:uiQU8i)I" ZJå}Yҙ40 9;q8;R`-t7g0",l!3Ϟxk.١/߈BJ\)3]j./Rdmx}6kK+C"lkwN=?¶Cg8$ww߷ǖ(~2*)\7eI;X (C/ 0!85;ő~kaKPNX#E3@ۀ-_Edm,U/? s(ս %Q5ʊo)~t޿`yPuQV{$l^q/单~9<70j9X?) ^.vN: ]vRB9횎tCOV슮c֘%߇a=܁(xS$WW_YUrL"k(c H~XI+>W%m o(ò=u.C2I{k~BLW(k83=ds990=XӘ:eCmٜ+K|&b۱}a¦kQm1& v(uB*=PUG9u"zsE ԥK;zm0sX.Krb%D3jHe6#  W>W7mM>8]'_u,>dېvB٦a&u >t̏$E4j7ZϫendbU;A|ڑ+v0j"k4g7Z'du2hM(vJi{Vj ;N+c I x7v,(|xSaxj )TGܳP5\uhոuym9Y3j*.Fp'bFW4@C?3̪@&eRdL бȒzz )44܎_(g?č:Ƃ\\J5444444GBh9ҕcYcv(x3#Y{#f- ``ŪìڛuY2wȺ>xY{8]nlzs]7dhW(V`")˧zX)Ѿ^D98۱BQ?y98 rm&QT,V؁iӜ2 < K:I?(UxL"uFƫ(YQ.UD!&iPe-oPOU/TRL XĿ~ 8x9;*Ww0 Y<)#0GM]Wb^0u |oU˪}"W5{3K>궨QVDp4u/k S"$3\TV1 lW-ϩQnٌe Ǽaӻo 36-΀2^;`{O9ʎWQId(;]^ `ϒKVtWvVNo~brT ۢlweﱁƣ~!|D(vRf _1Zi4~n7Kε]8B`Cj`]Ois㿭aqp{Ie begx.vaO_c9d44v8aanĬ9Pv 8xsтӁ_űpY+P*Sb&u0]Tea̼P{L{V0qIoݾ"j  دQB}֭Fq}KT0?RU%u蝦- tq"L!;Od5?,'q:Lÿc߂ҩZZ7*/5huWm::Z>/Jg0}\!4'oӀ+*;t6g?Ihb%vu^тB>KA6GPs̬҆wLg, /rx/qc;a:Wcv./c aNlFe^G 9)6d7n2u390iqL344ca|C 0icY}BjY\\y'-=2tsHҐ.F}'mH o+8e*{p$$~IOJZ*iSBߋXyLݒt=%M֡t<`OZIGe̊1 Hzڑg%K,@qsфg`a\F;f  ,>n=o{jMCO/#p'6tb#ېfS}|e6@ ]X0YҠ+/ k) _YTz]Oˍ/z)c#?IDT9UvqQOrԩO_ |ضK>c{JxBJГYCQF 4;ʏ7zҟޗ<߯K$`)x;^{uz];#o/x1G`bRQe 2w=y?I787@Ob},g5 `NF|A:c=-bs&i'B` 9A_=e>(XF"ޝ%۞8QfP`InIОSsKv@x|([p^ #a骁rVN"4vz}\i;CC,|0y)91YnH!ÿs&7U:C--%{m;+v<98WDBCg+Э<d~`{og(/;p'6 Lӌ= ul~F*Ig:)v܎"/íYb/dbS,o!~$a_;7Ϟo_>^|}ePg؆]dyyD&kC,-*1~3> a ;+N'~tCC5ձCU,EY ` SH SRkhMxY*Y˩NDV̥˭TCC?pqNXYnjJa,n|g p2Khsmye 0yy#up> 3PS17Ypsx"KLʮG܂D;ƾ5R`-yg'CTn |mяoh(j4Vk*@hh4@C810i1W }IENDB`criticalmass-1.0.0.orig/data/bitmaps/cubemap_0.png0000644000175000017500000022535610265636020021325 0ustar danieldanielPNG  IHDR\rfbKGD pHYs  tIMEpD IDATxkd$̼"92mY[u3A_ǯ?~__轃ADH9a) jh!f 䒱oD=O@DDsJn`9'pgZHy",轣Պ3@u]uP[?#ZmeYQ ">y"笟;&"(hZAPkE)J ˲~WX~8ԳwHq6 K)z"ksGJY~>eD05,Hk j|s)+#e1\3R[ϓ3@Jw, Wzx_W03>T(ЊrJ!{</{hXDR|qQrߛ_m] CL)!:mzEk to=0ia)Q玒 I w"mP\p=)\۸a.Jp~@^qe W?3j;|׻x65+x)Eqe[70W=|f\WܮgXo ͊kmXkZ+ztdW7g/ҙA<%c;r>'ԳoMk ]/uRό2ϒz%Pe]o|qZoӋ{ M9r{MQl!3˿L0Y1 9_~o ZoqMvkB>5!.^pU=^k~ƕDi{X}%kk}kgtf9$Nd/Mokq'pɬi#Af=s.(%zi0KPQkhC\2dt/9dv2XJ~}IzGE?G?$\&5[Iqٷ gSR @k .k P"\vUceŶ+\v>{\;\5+pMzCBph,X` OupwxfP]H=yv!OIOE9my=@.v:VPsJ Zkzz"NORljV]Nm]^?|'`-,mooY;X_P~Z[J7^9ԗ_~jS;qMw&Un))f<>k vpH9\Vv?ub+ڼJ}븸ގfÃqM&7j~ĵϸj,=?ղG+"<}G\Ύ 4 0.x,J*vBH}V֐13ExAH 6wص۶y4D@>ĬuUUY7˨3bMg3R2ŧkrqL5LׂYq[/ͨڤZ\W硸&W9cqmӡ@ľ| G\?7o;\Iqeŵ35Q8nt | WH3N@Cf W=>z=7?wII;R MR^Y3?rƲ,"q!8RJ~zٱI F*"P^<Thihq;}RN~r[mgڀairºnhmaVmWf ?~ІStB;qW(%ZzMq͎#׌u]۶T?&.W(v>k{+ٞS%?5L`{uV޴||!o=z6Bkxv0RT썙ڪI#:`Β:&H!'F:w}cjϾf)6O KO!hْvmH&ҝ.ݔ-Zë\eYpMkfOs[Mj/;yfǸԉ"Z\&ZnMn]f~O%]~ڰ W{'\%5xmK+m79Tf1GPn UˊV?Ό7oHJgu?(6#再~,kygz3'5X{_DM )L%mM`ߟ$MmCD(˂SGp۶lXo&\4pmXW[$6Ӛ[kGk\o6Igql3Foᚦq ǵɁy\lX#%yv֑M=n>u~ɬu*$zrl$%"X&lK|?ԂReARo:SķZys,z6I&3pbuE)ETO㬩zw'X4ꝝ὘7q]s?Uk}כ|Oz9 J+!TWtpJ$pP{\}\m_JUSs B5-0qAfJ"9qfZ̒jzd6 96HZk2MH/Տ3eQM9ZgYކ,l6m5cY⊙,3'.M&}6qz1\ퟃˎ縞Op#گ(|T W-rΨS_|kg߶.-\/;t<SkԞ@NrpJF9մU%Pk'U :nvYJ=$Q먳U@IF@:>t')[KY Q8Ek}_ezdr i֪e]\C $z*pe\oWAx+u_צv.|khu{Wg?(̸׊zSFK+r`\WUY|X3Cl>Y;'4061&)s.35񓒤ElsAV>Z.e~yP@EXѵK<穧G늋I.kYR^g΁4$62up* J8LSN{$k=WaAx +hj͸VuS\O?,Sk2rܶ'qMڇ5kfN/urm*ޚkb>kg~>߽SJC%srXMg]JKA9$798)'r_)ǡd,梌8O6Y> 2ďfgKõ1r䟱=ozKߑpanjMquďqֹp#UcGn{xĕ=+yNf\^7>Rūyzx}}w5iEeMfC1Xp],DZkWJ2x: (ۉadϔgjj+n+mZ֓UUs& C,Y$yNHiAk9g}A5Hs7ݚS92\Y7pM0\;ʱ6N pz,En{_ `]Vn7An&男e^PMA/] t0p=OO t罐sRkckPuפf |-L,qJg'LG~Ux,&(#!\mzJZfSj8?goV8"謜䈪X3֥ugvzmpJWZ'63=/zkL}YOm&+b6EdApm [ڭj,ήYЄ-d/{[^<{jf*{t$f2FЙypexUs\k#a_؋,B;Ouո o*績6*@eJM.KE]G/k*ꪵ7WhkbR6`)Pw_~Vlۦ/.xf]j]:#P:R|mM{V7zju<Ǖwp;&'$4 &̀1 WmI9mWLpmo۶z> okxKy/^Gfb=uU\CSOp-wpՋBWuz+x}v< vѠyaiu #fpsQ ;^޳VϪӃ4dSO /i''3r~T>/_Jʔz/d)E6]-b %g4 4Ez;õ\ٹФ֦*JFJ@Uw>yg:>{o85BQ.fטYhoGi@ox-!^Ww ץ<$"OZl#ȣeG[ ]nE)yTy DC"匮&v)8` H'xG†6wiYk,YձFŬû*'5Ei!S;k/Ka#:+::Xϕw:'_ʠVSVPm"đBl9XW%Z $cPpSuU5p5,^یp5b:aSkUMGKsrn{ݸv x}}U"&uJR {iYo~ LfFKOjefΚgm_q^UELx{$Ԏ("lgYTqGNv'Jk&ܵΓ̰H0`KLsdƢwLc:s}+W\:DZ@^e$ŵ۽d*>rK{4:׳pf(7pM.FpDVkUu+"ky 94#o fXg߈W< :#xՌm\'uz>Wɪ>膞j0wG2!MY`6ܷUEDJ VUY nכwFr RfگJjʿo]veW_9xm8gpxME5*ޡʲq]W?Z^T:g14=Qd盍E֊C^:9 j{BBR#`l*EށGA9',Y{mB23Lvqs\OJWI.CE P\aI┳30N7c;{So>w \ Ea(-:S\C&Ap۸&,IHrw;|_r32u:>χZ!p,p/0NMf sܥ6;.7B%mS7Z:~zbJN8 9q-. f E (.Kq/[Q94>5?Ǖ8$\#a 8훼 \G[Ơ;:pqȭoӰr!jEOq>R:qv{Nk)iVpq*KJ5kЫHc@)CcxE X0e$b7?D>R6ݺ-֊'g]l*(i Ե, ǜ?i~(dd32FZ!Tփa0suY]v1lנd8PJ\UdFPg*6r20[?Ujf,7NDŽkIR ZZ_iX9j;e!^u50Mp(K5K>kG\ϟU|E\a$h5x8h<9o_(N䧕IToMyغ͋- _nuŗ¬Sy 3m5h6ԊfGøƚ-V{r͙֓fNp錣+T SJ/qCCOC3CPJM#LmmBaMNpUQ WNw̸5OZZ jx8sv/F9^㕃Yg4awj,f뢼aAg>?7=%Rɱ5gs2 ٨N)[(6B\YG˺f <ѺJ%-v}.R͉(K)Xa#f;}߇\>mc vfmIkƚxJgt\}3NO;%X F+,c•޻+szv',HaMk~sV\5Yq'C%;al]Z#ER=\qf'{:j%;`7'b v2u:eY0&ICLsZxkq.q+KJ3)H3+G3NU{u4=5'}vN46 '{\C^͈6zas{ E;~y>x]w.A"n[Ƥp o[|"z9fQ Ek`*ց%J ? ض ۺ,tM6A?f%L4vE^n߾}C^_LcbmdZujwK&ϞP jS1 WY%+KU[wm8~=wÌzS1%= }Op%5dw>>}>Mp\OZS;9-4L͚[p  fƝ|y.svŕbDh j$en dvHsN XuFX)?y'՚>uc,a|;vkQǨClr . =˺ ZAF[ )jxFF,SUd=ij:gpDzW=Na53O85pEZ& c7pul3~?^k24O`>b%Rw)^vDEݒ`%H{smNenQXI:H5Ɣ3USl#ƢŔzj>ne^?Kw'&e)Xŵ餥;!uݜp̍3fz1 Zm/YmʗeqUYoan暱pWroLOq͆r?\c^Wق}x ݶiD(Xdj'Bkz~ݙvip7jcq01n8ZӸ&uzYoJ"IY{0;5Nh|كj, ,~pa8Ħ0nRV\;!ez8t\mOO`hF鯱$p%g׬/ bd&g עf3b16u:p'Iq벪0y/qMJɗZK[9kxa/kgƀbɓ+Ml)`Sy8`kE Cl [S>QT[D´;jckqป_-HGQR4JUxbTgނ |7 cI`ͣ{ DG!5kkKq"WJ_ꀫD6c?5Vǵe ;4-; k|p#\W:2 XLٞ9^[{zo7 @gIru{SEGuI?SZu1 bጴyeYp^Hs^Mv5m80F%lStڱos>9 =){5xa?p\nWk8}LgϘ^DO;lG\S Vz q9\DA?@cXAY޷pe˗|s\Uԧeއ~<[IAo\wG뿆tZXhew-wD{hn^ ,-zj{7`E/_q?5Yǯ}8ln:ܴR77ɭeAsӥޚ4D9a*+K\/Ԅk Ɨ/_,x(ؠ׭?5.}_;'iSC?L=.[g9[!%o}=,q:_qp73`PJfo,ն&6͛,OS% @{-jFO ,D?mRWtofeM˒Q!ʄw^g__'] fhL?~l6Ͱb.Kqt!3px Bӳp[pkƕ2M]H]U\Mf{G9\_e,[х]>3#.n+n#G\-iok2wu4uv U2W?֗WT5SpՃ fy pr*'9:4P[5]J49đKPV\*/>LcZZs(+)oqGlXg,&9!mH1Ao39,V'-tԚey_6\f\u[UBw!ͨmw=iƕD$q;*f\yr^~kԔt}Z Ep NUDP\ź84^55Eߌk9k}rvidǷIY9Ls+.{\C4ע9^TdV_ ױwnrL׊Suw$(g \xt(8Nw( Tkx߿OČZezs#?@>NHiSJ:t7dx}}zM")ʋ``HbYqq%eF\*P*V|^G3Rj=<k0#YD$Z&cX9zVu%4O8׀~Rc[U׬lȴ5)pOYG>k|_8jVc15 J1*Xat8[@h~zbq:;'ym&Dgd ώ릭LѦ`GvIldj~j.$~蜪\DQe"{q5=yoAXy6)Y;hqU7̸}qZlY;jj:sy=q/ZqMb5vqMWYUFqeqrX(֜#z`]=dUzxdRo2p/N6bId:r̽ҴM bZa~bYYT'Hf;2L`wzKG8v ,u`ٗdvn+DuE38u?PAh5{[yNwk=ի~.驍sS8iD?,tuyVs\߲F# ok |C+ku 85ƫp5p 1ǵ=4֝1R)$%[uGm~c8,5,@]PDNlO3tK 31ԉ4Wra/|s8etSCy4rsS׃`g]M"_u]} f4zt|f\_ǂN Uy3LTm4폳xlM.xkµd72E\hmeZ6WƤ;`6;o|$-@K3S%z:$cAsE\W}pD W͸\ﱕΌ$b 7%S|WzPEyȚ5Mn R4sC8WrǞ޸Ճo>8Т>[i̮AG]F%= .,݋q߭7gv>4"'\C,1Rg3SppUX|mc=k>Jne\>@9b|&&qeg)ʇ{&+['')^ ܾˈxGuѩ+]u 3gY:f}Ck Kl㋁~$гfFSizp֑óRQR:%68G[zu6>xD_vwX@0g5(OptH6VkW*ױ!y#c'(j•[>U hV5F|r`~qw14kGu:z2Ld x=.K xNGp~pG NSK \駹7ms圝VV~:^d,9βΗ=uݏ=mķI7.ڄ)޾i4VJC?pU-:&@ܾmsAV43JED7>kI+-|0Ӌ閠یkN:}aI}<2[iqcFo:,#kr!~=L%Yyƣu,1m국 ~x/@Sl kj#Ʋ.Ҙj 7˲[tY"^_GpPu]Qu2ԳS*; f#-\40sL b:", >2&vK@?ݍ?;(Kƶ3y ,pRn:8߳="Rz𥬺W;С֎.ǡؔq%Y3G9%Yv>=3K !E񺢹@~:e0їxm>U|%:㪑֐ WGƮdm6MeAW֙sM@K)„! OF1߿/g;<%% ֆyyz-f4/݉ԎrZ;q? V$R hހeJ̝/Dgu[CnFaI 3*W*߿~+{fS՜W-\5MhWxJrI@9oc]ׄup\ V/hp{*g% K?PF<1yxj>涷͘Lh9u{loK]\l,0f>u4:Sa)4o|M*s?*M26ZWn8LD(`\Čmq]a]W?;\u|th{)\2i\yJi&B+^^.^5[5ۓd_שY,-1^ɰXB:cu6rƾtЌCbnP'FvpJnȦ;vՕ`6FIԕGV3ۓf&%&W]ٚQ>&H1wel Vp]M@KCmd5:Abuq%XrBf`cZ˺"3Z[;? H AfV]4 twLm81ZӾgLE;l.k]ݳnl:i3@m]~)>e dw[jlM2Cĕ+S&ƚ; YՉڿ<˘/í2ʌB/9FaW~GV1sWR曭-uɊ(6V.|oW;v^pa+꾗/Jk$ ӛǫM)tr'nwr˾ZsC?_O3wF6,51eybWi҉CkE'{g{ڷ W],yLmQYo2ZIU͛NuKK)7qA}2aM4IuSBp{FMd \L?w](`kB5g$08%8)W)M> .qퟀ+}-EOq-BMKSibjsMٻx&8%e<$&0۸^ⵎutBgnU_#2BU·{^5;j3lViO0MCn‹Jjjfܰ)i6+H^ۜQkP ,ŐZj7t4Gʉ*1-,wd4RtY`%'׼k2S0.9K)ZK ƥ7|+5YqvY3I9wMNˀ\*"d64Q~\C_ȏ/R[3E)%6㊱mī|xM״وd-@J +LL$EFKYS%j[V'=F6 vVމ(׾4&>ӽ zI;o/ߥfe).e]ƺ+ <#LHLpU(Q[cz w?8OS) ;~- .`D9cQʌ]oƩšZ8|ZOHXvFNk?W[Wبt1QIu캌ގf50^ٿ@ge'͸k,eݎŷ7o(,"|s IDATÖܚˋT.$x eƃ> _Q¶n^&e# ’mٮKt3 1awJRQFYk8TJ~tOWdN̝>Č`pWf|U !+8eul6ŵ\mp7NnOp mkIͤ50{?kV~Aĕ]U,%d0$rAkȎu]~x^}۟oNMAFY>f]p]TUA`.?^$=c_+V+0$65e)@ê[uS x@ڈuɐH1c,`evcFO]qͪ $$-<֊ ~4o )`FVjr uP@2gSkR\sU\22'uVq8: \)ZJԲttȹz|ݶ*L&y}Qwvxt\Cf5WsthjuYib0%JhܜWS1=o9 홵\8WHiq^̌#ai5{pNFרo6&~(hpm(}SC9/WLU0٬C HqB&`F ^|=RK"V*-fw4"u/ 3~W\Hε) W W e,DC~pioƌv%g|m 4zGjƔ38%tJYɌw0!aɉS%.B"¾_܏o:Ϥ\u[5$ckͧD$!DQlm`2]:f_?XaVHc3׈k e*mv6'߬_j.3vRUQe5=Mco *uRxbQ6Mw~6ʌua4":.LJc}u촄Yy4R]qȪ ~KO%Km3ޱ0c/& Gƌ3,Rvx=8Fz)"f9< p}ovDkm۴()qMYkyvO״z:֠2LNxdpV}y[ZkҴoP\qRKJV eYoT+3e-)Vv6tsIk]7ʋZk]kvq=r3!/O&Zf`c\9'u#Ӣx?%-mF[߳iJqmOu8h.SIi\Cx09ƚ0BӍ(]Խ3:F+Q"Hv'Wk"fkN6q( *ezx?dld`0˜e}{Иy44qP//xױ1Yīoƴ~X+] Ahʓ84ׂ8>j X \,g4P KiRmWP),n$>ow`CM=\$?H 42[nۦd_[e!iG^#HMK&!2Uu)Ύb:֐AX2c/?~ /xL'Sʌ BZW\{GOgg4"tNgwbj`rN᪗ʟOipUٱy DÍ9^4:k9+x%?ڠ4G88\ܧm:Uq-‡cWȃ?>ZJֲ9sl,]it.YkYS;]uVC=aƌ5uFu]B}@(.~Hd]`W>c);-lYrrG]'\L?}W˪e]3;~MI һ0SBfF&"dFf:;:&.C0KI K.^*eS!bWMs֡O)(?rOpL?#3I-..JѺľFq,W Zۤ$w=^=x5B{rJǙ=+˂M{f)(/y񺓮PD9u[Qrfm~204S Χf-f)䴺c3}S֞APPSu[M,YCX |#Jy`QzQ\F͹d,.ێ}ݰ"#ZB/0KJSB@r$"rok5,mpж˯WYqD;%of=D..@Zu .sgi͒3XK"/:&m/Irgێuy4 RdJA1]q7gaDT>`/֨]vYa+=׳\xx3ݒ==~+%~au;1aSEf^ /ec8TLiqssFXRV%FeY[??/jmI>#_-Zʾ;s//DHa_RB_[ï žNDB\p Q ~#w, 3uoǁZFs2 uԵEϦd͕hU30JW}zsaQXNB 5að!H>.R8n{Ǡ{3`*|5,mg8Lun7#Hwxژ)SNqe<+C\Rg1&MrܙH7#I1*e1K&a%WrMcV0:WZٚ%* A1䀃RRą8$-&¢nɅ2t &Ხ@B/* . ށ&!leatB'E}n bK)6č6njHE >*-M V`IF 7y0f0ly}3xp <$# f2;)!{;-z(z b#&seQsQ2Z})j,EgFíA:d=)(kmG% u j}klyݟsڨ?YQ}l}MDm&l[ 9k}fM6SUUsE6`)çݖ컦rj/*nj"K)r:ťעd/0/+*+Br=|}A7rp H(.)gKθ8@xe Nf)ј@L@j+wҋ/='i/b[7,FE\8֟1.MvBًِo7Z8 56+-ye2v5ڙ.xwJS@rx7m }pTQv¬N5S23xjA9ܾ`t1Rœ6|zӆV#άs՗[jlǭiTTYzo%O‹AbP f5d{ۉ͕dy]pԆ Ȋ A}~BEo/ׅ[Nؖ~`Fg|unRpԅ+: x%ӌYj)r",6J(cW%ꌓ;8g\oU -{F!z:8x5&#.҃f鲍y3”!Xg]m(uk8#9"U],^3/1rYq^21{O֩9tdѶD Dф#3BDhetAgڦ"YmԨMP <%Zn>rmCқhgsvϊKj);7,`,7nDиaMޅ+T+Wo):^H_`Mw&+\Bb)R2KHvr\"bgV[ҹڤi#`gImFV& 83Nf??t@h]/o㚦87\3`ċs>andbP9+l)IdUJ Kn@A,A-~2*Tl1H&) }? ǁȽqgϠ1p؈ pzsn6 5/%TJ(ƳK)aZ1[N^ ĂdShkEcFDYf"Ei{`;,QWycoNq;C=_ >?>rzP{[d`DZuJl?ܯ͚ȖlmpbrL? h},?=ח 5)ǻ~2? &P^?6E}<>3~9{aM*}8#E"[ wU-EVCoϬxI]3<1GB؄dv+piwtF2:AZ2R @~>q  FK5e^yf$i) O4(הpP;ۺ^BcRљU!(_jѱaY'NGJ8jſ[wwHvێ!ޯ˜Y_Be#4'ޕwN6z٧1ԸɯXWt=c ul_{fvūPq BϨ$u9j=1@1|Q>֚~`Ɣ/fg%O  +[]" Ps#Wouu! Z3-iDN9ŒS 52a7C~\ 4K 59A ZCj ;W2>|(JH! m X5h1XG󾑅ˮ~n~aoފw@g^ќe[ i$?1;GrNbmf6~\ID]]"J.:{-xcn(vqi6uUܶ5(% m׍ou'#e4+KH ;͒Pq[ v3n8I w*;~p 3\qs&:&tw2q{}$xe#DPv!f_~!{ݯh!̷ B̬}xҘ,+3MƳtʊCdwvIgf]0j9!62{W_lztIlT8iuk%u?O\ f.sr曘Q Zq&RAC wCbSFܽJi^܊>eݰ[N`Ӷ[ ȭ ‘aK;o-kLf77t<]3bݑ%qsyW$c-g# qTc[^<͟JG8(?\Nʰ;kpgNz8K)8߯=~nYzo79D%&Jw(]riLj cW-oa`\W?8s"VܽD5/8;p7y 1$+|Yn dYe)P i-ZT=8buGn% u߃wQSFjM)7]> CG\E 3_ϥ;Պf:',ʊ aLlQU:!ܑ HC Mj&|wI֢Ҙ:sr&i'䒖53\,ݪb ς:1я9_?7x_u^oȂ!G@T` D0ݯ5lnnɉ_b'nsƚEYxg#놻 eEoJ}L 8C;D"=.}D+=ԋrk2m_m\䩯 C[ ]b@KǐŐ[YW"|fID`kغ5gT]G mvդڻ, ; UP̤&55 "ܽc "j9CN.c;(9ggJ.Z{tPws I m+S?~qbZ\?:CD;P|ЩH8e(A4MJN\D6'pwy NŴI()@ۖbw{z>f[4VC)݀j&)«-%%PP9콤tt3lKu{tE4V&$ӡu(i?@P^v-KBu%d8ƽx%{4}tqqlZ&R70~ ppcIsR:lUed=Z|=QB˄ڇx{}~>_IN؛{[!#Ibͦ8dH))?D>~gIxzl]XWy/zA6ovhmn5[e.bWda^kp *G%00$g~MYn${Np]YNs] j9OGQTt:N9 ~. &VA $u1_-FEEh| ϧR2iǗX-|AD1+0YCl w){ݥI1rN n)7Ltí oI6Sox\^kBX59ţE@b\fI[(&h&3$<-MXSvԺJr~mƻ)IL]0h(}]T3P˽ ˂.7- ^UbIM9svޤJzFgAM5-E^Ӂޯ& :-?Wr?گBZX3U~@u( H_0)oE^u蒿]E*!7Cx%hml 8D Qb'3z +n̑M}8iϺn?҅g$C%uڤI9i-@,SCjúvse*#M/{}+@HHI"E[$dٶ%\+Ϝ4M<n>ʾut 2غ$;3ć96`tx/`:י*]}b_euZzUoڄ^D?YPD3/*{ PKOFǯʁH$śnyrV i%ӘCMȉTܔf*XW-ӯIN?biOz pر_'ܯLD$.4絧?*U!pᚿ2: )9rX"l c%^iMnu6RfGA&^ >5ȉ tzaJS}f &R&9=U(ҠW5_ӈz#bv%;5~ _y8iN^Ck0ۿ'ld֦V a/b\TcLnjrH3ܷZQ3LF*5pGk&@'Da) 2^ ;˄wʽ*QXµ bf*Kbnk uSO)ҁT?b;"liS3$Ƿ5u,Lkp0SlH0j_݈'d(X %ݯh6EN|]1~f[q%iWzQ^\GӵD_S(T?=efbj&L_v-6e(0u[mnXW Vq.o,&DXogϱI\CG"5ݜ?*G)S # FIbR`RP/0V:#uӷ<9ɉRxc$tXtQ6O1aYCKl8iV*"M?ݯ)|4]tS^2&Wh<:J=Cޓ)0*a,|oxf\UF_O4 ?׬4SsM0y gX;Ɠu'HL &2,9_ "P Ü[ |> ;/HtPp~]2B&0w/!) 0H4Lj7uR74f24a syϠdi-5&nlD"hEjNy*<Zx@^`AL{9`|?_گNȶ=7~~5''_ϗoA>GT~Ų_G:4p߬۶5v_m3%!UDu6.,QMZ.4DXɪ8=xQ1Px11spǛ/oj{kiO`9`Flޕ

x7f|XGYl'3T["~Tc __Vcz~ӂjUIد: ;5҂_EM)B쀏_Ӌqݯ}q!@@fN\2!փ -R ȞUa뚍zR/cizZktSSx!=״WkweZ/+4§iˡZ5}N6pߗClX8M2ۘ.Әu>O?G|ٌ픔Ow$j@2붕VQ+zﶆA٢=d 76Z>Uefh%*At; ]#p2vmӲ֕`4oZj1m:Z%v nx;9FPj)7u~jg6&,–*h|y wQԹ)h`\BgxWnuBTM!)ff18jQRֈn;6r[G~%b=.f& nM^#*9CO ߘ׵woa7F,llbE8{5Hc8N Tg_C}R¾v8|V -uzӋs>?=&a}{ɚEf7W]7dW3ۮGi @f;C?K۶ixC:#UU7ui#njqh+qDy0O}7kLW"B n|O!]7ԜAuMέdl$fhb4ѤuTG8ԥϦx -[i_ky F$QSѰ{xc=oQLA`|ٯcrJ(){deN[ ED/@{GZ6ƚwGJ%YG4easu?rQB 5xøg'9KJ(E %E ISdl2jwAdn@3p=_> [SڼX`a ԦO>w^gb'qbVIy Mһ/$ZP)FpY?W,yk؟W;"%ՈOZWRx@̫B&w,AƹlR=4#+A?/v_}qYz,7]AvHu'k^3ѱy&\xCDִH%4 5hB,,Ża K0Fx-zXJ*kO 6,H htKjdH=!CPMo>-SUk&ۋs(/y @m8fفJsd֤SՇƮ<%L<.$+UfOz%LAgȾ[n_ 2ap]}ٚ;͘I2imiAH $}a8lΤ(T"۾IAHt;荑lz10D Kt3" j%&kKM{ag %SBlJIkݴvX0O:_O&hicwsRf(Q$8vȤ4 ]>>O:O52n8T62Wa3?UӆNk v*-`KSAOr2ޔqH@Lh̦<#'ue`'-ۓ9NXXŒlZy^п=kgDpl;uq9%co 8O=2]=6MDum5Uo>4`rGe<&,o{KdWֽ< b?p\ p +Ҟq> Zq_6د$8DP=pox72 vєaU6^b"[ L8J^ 0@ql޶ {JHkܙqFvcA%{iZUqOu>n]RŌd!Ժ)%ځmu1[3pik kU֘_LԣWNffH#D:N0,Jl{-(lfi M4W*yьE4 c]K)[\ ly`6ҊA>XB73.NK+d2TIxdw""6[YjsꦇysVzN_)u&̓A2Slo@IMmC2dU%B TR 4l Id>1.df  Ց@8R;oDw"~w}upk(9dA*2 h %nM8۶Y Vlf2{׃K|}G ݘSBQ ^rl@֕goBH;j ȥ[rp?>?pF3/Dlwa? az~ts8e/d}w9;TdE=SĐXB3Mjllԭ43tܷl}% bRBn?,vct쵢VV1@*"k:n"MZ.#%opGGKYc# ]v)OddC=?~ln5B vYoa4!uh֓4% Iom0+~ Ի * T\BBO*n"~3UV׊Rq ~=3j"H`?@Ł8DӋ3> Y%C?\G8gn|ݯjk\јI-܄Wc&h-|m[9`cM@>Z`&ҋux, 2 N `t"sy=C$rIi=[h}ێ-!>I $[Va Q`7v k:EI>ZSV4?CSn uq~f T}fݘ5ؚ5q BP Sِ׺aZk: =e8'lzXsx2뺶q<JF7Swk:4 8U(L%%<ڍoZZ ɦGάId\|ErCG9Qrx}NǮ:;%VY(?URA((`bꆻw) IkMwVn:jNZ.rM[ 6U+g{V#\ G8]B 8O"Ĥm4hbo7~!ƒ}'{ Iz8O=eIA$ۆdՖf|vYr1x[.%"x2c`H\TOQB2[E];%HV3XMf[O %-C^ ce23޶M֐UA@ ޶ [k6sTv;%HM pٺjn&G)FrXSy¬bDXIvbk2+H)6U l'F TF'Ff`KdH3Ƕc{xF PScۑZzt񏒱Q VOw<];޷ RP0KQF)Y4p };W8mcYR (0tiEՓF/K_^8pW;3nxLXy},qyaq#_RdQXRfhhȌaJ&z:8'\*3r0 (ߤ}"ghS*}`SUtwa$dc69Uf@$2H +d~`UuZ1bOdaNGxyn pE!QF"T^\(2RVlׯ&e$6N%fdf{&oS&!j x`HUȾ<aT")0I2JRuTH If\A%1г;S)()]㜼ƱMC,_#*6H xy78=Uĥ0[*]<3Qʝ ޝ @ό1PR:ZpT1 qۮPk*Jj)z愺oF0ְբӀ3ݶC6IzP QBgs䢥f5hE N"䭂oAHD{Ot[m3ݻ|yBT iZ1k=]׉""XO/=9Ermx2x-({%SL^X%n_E.6F٦0)%g8&CrE ` JZ+m&jMu\p:GI ]ߥJ;*OۃkzYׅ*D$e9jG!Z-cxEd̥'6^݀)E؏˽N7%\d}O2 ,TϖcÕfSv2*ܻ歯nx/ ki̒6,;5JIgoxOh VwSq4xQk`Ћ;# p$%yb@!e,nQšR1ڭ)ic2-Qfj,b1d#Ddb/};Fk#<k0MBZSBIT#QkEn#XGetEU-g?#ry&OK ƈ fU>_M`>y +,.|? lD(zܸɚ?9k %<#efԲL@ Id#  CSI;;$Gr3~hк|A opsݕ-Ytc蟿S 8OC *h dfdIR 1/n]4R^#KVv(ut>y%wy|$oMf< DLXoOm;DaUG\eHϿ}{G7`&SD%r ?CpSH WkVbXG}aKV-߳0rXS_Wet4-#q̬?U,+-Xk6w둳#H^gPi5'gO l%ǎHIl^P0|ooHRaMVϛݺcַoIXUD@LJ!qЭImj;bͬ \QRB[Q#4SfUGLyw_)e>mN8 N?p^7~y>f-{*}HQz3- '@ɜԭ<5Gfơ@%՗ М0D#nt9-}J-*~ݞ {ٰ{͑GxrXvA8d srX_?asy}q4ߌK6 DKY3N`q~ cЃ$&)c۶8LϪ9lܯ]kheB5xoft+n=OՅJsC ,xꈗ?~ L'z,XoY%aP7yQJ lA%RAS!x7 [oZj>$P߾}u^hf,s݃Z7m`A׉YyNPm7U(J|+;o9CL~L /$qaـK x³\F zaY6 ~]8rA"lSb tpIB:RPfmG9}nJf7.*_':?[of"nqQPZOWJ}ϟewbϨ/}u]aM1A\.)k{_W!2zk.fpM5!o͕ѣN1/A d `>KD6DdF5}wZIYVҤJsƸ/Rq`?v&75D 5'Axi马 @YlÞ5^bd H:.uK)*%x<kU%Z>UoqsC~w4u[tRV6@ق&V3ћ*-itl裣lHĀ>좰Բߞ_N>?3诳+EO T\"~įu8~gu!Dq::n+xꮗ %p|j];<$+u\\T3 =??לx"KDuYv,B!A{8J-m0,1熦Kd4gk/JaS0Os'C_,x)1pځЭϹmۖMx_IaPjmi| gamdD/  @ ;1Xt^hcn f6`qěObn)j3Hqx=ӛzk5mHYo#_&Y`4-ɥ5" ,ڪ==r7D|D$8dTEFW SA\ 1Xsl?%K9'x\ 3aXam,NL)0!PGZ.]a [9 z -%ԿR{}L!u8X< lP_nKͺ7wƏI n n ˚l1s1^qm 0gߴAfu/[t{1!c  PۯeyV55way~j`Gsr.YK"K^xW@  F!U%FZnEC=sE݊o5TXG0{h=`,l$8l#dvuƘJs3.bx2" 8|pZrk][$"[w@ZQy(cj4VK)BoF7C͉=?nӎ/vWv#a0{gO~ IDAT_}'sF*SJCd5Mpf.N߯^l~/@RExY, 'Q2RPtzkw WGH9(AxЗ8~FwoǮ R}Mt]3-h.f Dd3 ֧Y^#$<- p5M;;q-7XmSRR9ibTV% ;Hf'6Y tHXA[8LSpȆiV59!3us@XSt߷1/)C~'_WGv?ۍ߯ 75w43 RȲ*:)bՂo=d5^`6_`~3ͥhs{gʐa%7o5}]"CL3oR2bpfn#Un52l `^hHOʤjv95u.܃qX@ t{-5gC8(_$+чK}tHmջjQ@#1D*m]g o5cCq@C|Epw!s֞CXЇ~FRF"Le֌(V!W$s3M̺DɮE)5ԔunEuһU 9ӑZAw>~3͞Y c(?һbs)_A/ѧs#lWgKؔxCu U}՛5$b\^)hm jC4FSB%v"S0"cyP2кgت xLf;Wzj{lps=0m^8lhdʀҔ.AJ8~9\_((NLIB7ZQM=|Hc~μ0f"uh]'L:Q f4g%('ѷ:JJV4f<}^q]nf R(fF'Jֵ~m0M5K \Sp ?Ts Uq:Jl{*tǼٔ$kG}X/V̐pΙin_`HwQzf{[G:H6jª[-Yv`/_}N oG9N0<4{?ZCo`4@欿VHmt{eu.x^A.x]LAء̱]?\-ϳE|WL1Ե*^^_y1w $Y8Srǝj>Gc2]Z{#R7:Y傧T(!g_Y Y4>,"x|RQ(pc_V]b_Zb͒<.Zʉ6Ac+W %qw .Q?sx9e{Gp%|yۧpJiYՐ<;5avyD%>LdwNO&΂[xjN8R47H.R5aT-*nxj"R`CHZiR϶q 8 !TW^$}D=ݝ]jku c갼A|u`Ͻz|8n=jl8㯮4l qYD c4eq@o@/Ö%lz# D0`hUwJbyjnH¿ $AɴjN[)EV`+fO]8zoל.-N(4M?36ywf6;n.3NՖl[TWHEgak!BbǑ?Pgt֡&$Lc0i|ӠGgHOڣa/u\}S55Fx޵D]+’%;Z|o)cdeйܤN^< LQv^[hf$srԤ҇؎/q#P#-ΦڔE8guo.R>l3οc ]?oޛ>~pIū.!T8ג2/(sRoj)5祛k 5ޢ_JANbE>33c[?a~`(u(.{ǿ m] qm##(ŃN%[ggJεUfƹ)8eHRdJPS`X[sۯqE^h,N/jkndmf@Ҏ;ˇbI4p{eXo@=yDY0nu^W/ݩv8O[06U]U_ˁ?}wgRIHry.C? xFE򱥳4n8!%2Ph;:ۆZ-,yed[֊$M{_TiI,1HgaŖ8lj.R#-8Z%j*ݕ(m6en*n@"6gL;AY֕DG]}:l6l^"fwNCy"H~>/GGٗb yT-Sn\iD_E?{7Cv^[ǷM?UԄCU,蕌ȒCC>۶?R#@ǜi'|[xf43P}uچhO D c~NF$D-*_6b^Ak.nsւt/e1r[/6`lhqV&E;nijw[On)n={ו!Byu8Zm|hm]ܺ Δ",>o.0.Qp {aS]]Hw!?D7UƱIp6cb:FPrY+v(diD{39el䵵x׺b7$\dzV_s%-ĂK4Żf58 z+} lzʭbwzʮO8u d]c^xg9*_v \qmAѐ#A z\M'~ǹڻA8ᥤ/hԵ嗈sNWF#~p͹(UBI.AJ,bjk<3&{4ץ) , Eˊkzl&))~cߏN+;4iuGĐCQ\&!6ΌL#䁟<}]Tr.  3%)ɺq˔mA%%c03?ɮ{4ptm3n`D㧟M^B&ߧO=sJ K=n S!.Q\;CFKXWQb^ਸsy&s:zC/-U{STqp–uR5|%]cYJFoX+,ljځ t(3&ag)rkX(-jz8?]a5ST>ll! nw⹤ gIp4Xm jшw W)=VDh59kl3}͸z d$`h=wFZ}w#>˺)V~npwjy ǘ;q)Pnqo]3ԆցꝆv*wycc\ˇ{(1yF!m"MPifW&u-vhsU5C73h7ݻc# :ߍHpu[731_8gUMXo Vkbԯ/R̡y$IU|NfK}GVrp׋' @ZŚEhkY;˒C S9)l20OksUq_Vh=-O;^ofpIUܐ/haaFw:p3~Y\zF u1'ʲt**^{^ ϵ_Ά3Ӧk8Gu ֯Q^3)&|Y4ŝ]gXur\ WH)7ز@RXqmd׷pvڸl7-'{ϱwg%'vyv7poP ,\|(f$cd5HIO"7X=%xU'ŖqP_4eA24BX_”e<o)8亮ϥ9$ؒil][r2 P}DI_S?뺚]\$J7kSFzDū*Ie+jǷ$xo F]{2MF_y}o7Z,/XA6}Vqh~pHH$RgYH`FGbX{.Wx}>5@tm.m,פ ҼV J/eӮǎ4.iy` _HǙr7Ϲۥ=cvމ^"]-@/e)F4S?[J:a ϩ>ktt_NiR!qfڛ]`b2C=έ?@~e֑ᘒ]_\RECG'M?T=e5 IGyK;x@g`'c?b-ˈP |اgnۿA-0)”2"7\^4k A0i2oHd!RLQ\Бn8o W7 u6! ,*>nhϧ(HDrQ`)PWjU9-{.yܶʠ-r-\9j9?u۝>_i?OVQiv|nk2k1F]o P4MempgU,K^-ء8 xi $;6wnhW|m`᭞xz0(h" y=-._L}Kkxo;0Rum_Hf]Ӓieɖ@H+"G6eϧZRi/1Ċ)ĴHyzv!Nx62@E˂r|Z)VwIY xݟqw6e1:z&;|9KMmZ"D$t3~[;ci tWŀGDHJ9Xs"tIQ#m%fmauF#0=l& Z7kCV<þg..ovǁ |nXC󁞳}ݼUJ$L%Lv]]y\Fpð'g& IDATJjwGLb -,SJȒC\V. 8p{xl쩋YK!j^dC9ť9n)^לͼ 'B(d>Ԇ]/"xYV|/I&$";O$~=ϫ_lsfunԕ\R.*hzok W܌9 e,ltMȠnESK#V%Sʈ ٧QRW-Voì.>y ;PE4X8h*xN1NvR2,bIw]R[,Y;=WX:Y:z8%d,ޠǁ(nnʥ՘3iR/<w+A )KԚwupˮ #m;m[=%[}`8p$ |QRA cDjv篽{knφ;^O{ Y#IuضqO꺭 _cl`/l4W+B,b+ŰcʍEN<[ᦅbʔ7W,VO9:K \5 2_U/8;zv/F pR&p3SP&4Nuۜ'.u*q.r#"L-]lɍ#Zyw.h.6dvx]VnXeSh|r1MQQa֡xĽ- ps9f'U`);u9NDjf#y ,?- rzD6`)8&Њ Ҳ~~yIsݗ+7|ӎ/]q{WB;vá+u8g_dY>]v=N:Kݓ^ohMHI84HGe=e$&Ѧl*Gk`#W69!˒Ytwk BcfAs‡U,9㶮XX ONΊEoe[MVJg0`W}{CqMxK$ZlN -m>ub1[ 4W$ Ns]!C.lgx_֯$d9'_H,Yys ײzx*5|[?k;<lj?%e| o8DΣ=iMJmúC[c++?WI!1Ut^W_2ѱgE c;`KoG-8ڻ|!ފD`H9¥O3q,+ZLcå',)Y 篯Et{3SpSo(]M{-ki&%Јd\+lIZ9t IijOkSJԕ{q"fjwE)~[,׬LYyu6b*&ʿ&bV\^Z# ^|W7tc?+rj )깙;k6nw?H&/vi$߇M\b ԻpNy=*У[D/ ^@7D 5W"xdNqWl͖W%)UkG No[YFnbJ?i7(`8'գOGZ2t3goxY2޺u;h2%duƗMw=,jCݧ6ܣS>^~^'hyQ& 6.;>uRdvp260le!]O*#:j4ȐN@dNi3"δ)MYIrJ#23~4-˸kqڙagN7,sRvl.i:n9a̙ifa] y Dl\9x6aj">DWNECJqDsBo4emu98OzGeM˞kzGCz"x'ǎ^D=e|_[CvSGk>ݸlpepeW] G^:뵮-F]9Nf('4=2,҈QN\&b[m~ HK9ض "A 1x,A y&Tv /eYbTURהvc`Z(>?$MCQfx]UBz:˙In? GJɮڳ|-E| +Բ6_þ$"-RٶٙhrJJ*s&Iqx]e,eklL4$V_q5s$-Lǯ8!dT7x8JƋ_x OΔlBf%99~c$4Oj]o㼺7ne2~a7 0Ƹ5]FhIykZb~.&/|qoGҩC)Cy3k` .#EFlvs0[Jf]w5d6WdP&dvW(Uú $}? +IצCPѲxskx 8+oaO gwqsoZo'[1XZgkzFRq^Unk?g5G]QI|ux\+G} .#ͬka!' rOd9stZatPגKNj䌧 fjmuyqRH^qޠ͚f( d*Z%d!#6L$ܒa_-g =`.jrxy{\kuo9Ѫ \rrBR|>E[H»1b}*ò 9^2>.+R7"P߲.8*U7i _{w^po9 w_‚r^G"O~~lpX="kp&r^,\WbJ˲`kq^uL^x q.LfK9<椙~;oVx>\%K\"44lJ<0վ~&fA5Z1md"Cyi17xA~}y+lH13LDʼnҜdsu*uqCoÅ@8pw<)URkkxRWif(Ş |3jv_ҕ ߽UU[gN5 oui/^WڙX"@qC^ %wskyTy!?`z^ !b3W3AWF$p$2DWDT}/–Fnr&G@.V}#PS K)cx uY.+p[W$rD_wlǁ ;-o)!;7 9ZMi8t{?v[/N%T/Tl"#˺D)P < dUĶj@=yE @Δbݺޡ}7Ftq S\xA/!!#\ϫ +Lă;%%.^WIp{CZ{Mg!w6IV,y53^DͿF /Fkyo $JYb?LZsK.^p܇?y\uU.!NiϺpE' εf׎Jt)3X2f5Hbp߷ K=qO w*i&pP:qF=#\qyYtvsT{v4Xz@c֩!?n9cqC4{@* QsyWU|}㙒i{ӵmrz ?Ϋ=@t @ʣ\DjyP,mߛ}ސպn3'?!.sD"ҹ͟s$/_Ϋ\Zk z4mf7`0 I&7m:,;SS4I$ZdRͳe n-V:3sR2}2=bɛO/?#-e:NC4[ȚiۖЂȬ zw$jP5^fm4:3вXn4}D#e|/P'yֻKOk}͞^VKj=k㼶fEEak6m\GNtĻai6?S׺˺z `"9q^AݳZ&0{ FH-jtA1p h3JZSB~%CO;˜*m0'I.r:KAoqHpݓψE}׀2x $Pvj"9( ?p$#[u=N(ڤlPϥh:!$2109Q\`UuǁFhw+)SxRpZHkhS,qEo|m@ ᬎZ pg޼(P؛ǥZLF++jayq^{Ě4]t#lgvi q}oIʵڢ bK8:DI凕$v=9by}PowS> Qu]+ grOQ2h/\nOSD]}sjMH6&奮Uߓi` ^SLVU5b7Ge)&Q3y{ˉm~^5m󾮵6?w9mRN8%"Y]y8d/uJq  tJ#7w L8׮hb[ߌܲD{*bف9|yx1"[OɜvX\ VpEُmPͳVN1I$pm+dnRtL4WMP&b=?_MqY3[% U7 /+>-ńAP|H kX~6( OₚV4kx9'4+K]~)r4hrʨ k 52|^wpe-۱~iwr±f T^ۣ,Ow[,F m1N~Yٙ}%r xzxEaDd؜Dž P9cX{ #Kz}LСx{>T>9J?u:J-q`]V-X80"΢6u PV:h)+vB%Cնn n bU@ˊG Ͷ=٧_FV_΄|U5I9{>+6,duLZ챨}yk;eRr-B_:JҐe,L8' n[pfO b6<yU~quۂOf b+!R\cEsJtp*~W_DPI[7*!Smx<-l2Iډ$؟瞃"4vn8+_YFj >v}H=l'{uQ `闔LnͯYgGZW(S>.Vzl)i|جx?Rθ91( E':a2bɡ1ͫeӛpGR8ygmݼcTm sL6_{R@y=OC/ j~qx,Eһ*rdǟ/攂ϹnY~SL9 +8hp8{ ra6pcV4 Co6 o7;Dp:2A`wS+6u @7vy;ܓW^)j/k7[>œZ|CZg"QHcs Y7{*s]F{UW2oǎ/jd=%ϊՁ"ūD@l&RZi~4, uo5O:5i,Ft)G.Ս^3w#Vl|ڇ7bybUb䝔ГO*@`y?9:l&t ߇}NH$$[A9]]Z2V)݁o'uj O-J)< l6a r~qfTB dkw)z %ªo7kܼbwwvetucٽ߶uz?[JA4`˷Šϭ/IAsrf%gH0c  &ZE8k 5v+nwkeceƣ5I{;NԒH+v$^CҸ3|ߝW\}ƨiU:3L Xxs1PJfγgJ0[V@.I'8_'Ug'17;~^fYΐPzc?+ƺFz _&86M1` @!_\0>9ɀMK5"&WrKsd;7|8Nȴ]/u-%pK]Gʐ\|溪ގ'i%ueaZDS3ݧN-JSZme\2IvqP4)h!{[Hض ӵи(nϟfUgFr^g_ȼ`z*)!y@Y`f4<:Yl2ڞǁ$ZF22.ߪ+Ge]w$-0a@WUw:2zP[晴pr m UB*4\v^GknoAE^IOA^,Dj㗝5lm|c'k2+ \~p9)rbwg9|cz@.!MrE)*=^{Owtyhݨ35ʱJISVyp;Qm45tt3o$( gXŀޱQųIP\BmN:L$ f ߙOySƟ(Rm[~+"E͇;e_+\zz/RzcG^Ն&%qŴ.D_Q$3(_36MLeq@vyw^G6E+fLi8V_3N畩S<)bmim:ݪ;*k{tA)`][ayF 0l^\ 4/bа# ͮUQdBe:26}.K,cOU[KfoN%1لub)Iu -c7q4$ڋJx8DEge^-%hLfLi:qQM8J9lheYªRrd#a@\K}ww% IaP3,t\:mEx^n=s.?0qt5ܪKxn놜o5T^u.%J)LsG_!XDh2 Xh2GPԠ"NjVلkS5Vݢ|5șW(VVQ_k?}r+s}ЏW q9S ɗE=}0& )jNB#F5${=(ǎ%A.@|CrR^5Thk@h 6ى4]wWK1VZVQ_'O՗ܥ`,jBrnֵc.]3~˼eZ-Oq2ryg`:o&$ҊQ1e_zrGp0?!:Z1 ?ʻݶػb%+ D 6'SSJ"Օ4  Bph XIwK|;r$>!d:W=p d8JxrЍ3(8G|x^ǶPK ɤͿ)0\eto9#q^KdYʺ.`*:u1-Uɤ$۶%P-h<6MUx#!ֶM N|!YcR<?eq!ұǸ×#KFUId|80esQٞק;altYI7g@x8= GrMID;a _xŲm8;g$ně-.xQWC~uu(|Pw17;ʺVe*F%7Mqm`g0.yhUw Ak4IN̔pENcqNƠRǮw'SyC'[ȃ0^HQ0 #vm]$9$946lί験]\ԓcEq"0Mq4i[SHXÝaMu=xg^N:k ns iI)a.IB1fkAv>뺺㜋}(C&c]qa`y]U8%cO:礯)<->'e +Ck5d n5kF] 4We5\~X߄AR 3ްԊs]BM2JY=%I,9f^*7 CvVl K)x{9uEZ7EG"KVczwɜ=0m5>fڲ]`yuz/VOYS q`'{q+`Coz yn7i|>dVKBҼdrYŅ14pC@'غntcʹr9U$LXY^|qZn7rɀsZ sSHP9a=O|pmqV 9nۨd5V'h$z%z`P^du>s] /#Wy=놳/1kGocN8G3# S]I ?<O{#Uc&I8T]wRܲZ'yuG}v38-evLis(gYr:xUx%#1{<:QWB\T4fs8V9&` iyYP{~X;?+. '\SFkhN"4CɕuS]"u("_W _3|#?jΫy oסإƈ5{7)l> ">TF2"n7P"1ZʂC;L652|!|v,A3߈3,t:21ݸU&p'ޜecoNnvOǁT,MTk8[E]\ 4R Jt]%zc]Rec^WH_۶V>VFX|^Dƥ~^IM>3fpr=jR=;suI;քi]b.'ˏH5 ёLL(ptaPb(gnCz~nJ W.l!5硡ᄒCO5\mOIV!nXS:͛j):);$$vݠcAKqӺǺ_>ǔMْ{ƨPװ7-29("s*BI;紦ꊩ~^]]y W$s D뺄S8A~ (r8y+{`f ̈=iݬ2u(,f_$4n_0m⡥,I -"y#2l=teszbҚ:Ֆ#mɷa^~jdmҘؔ}DgcuOu]њy-Pr3˺?gXIzWκޖf'EzOf4dU˻v]/XyyqC\ҨkθݶSM6BSq }LuLĮq2K(*i2cC Ch!*1_=v\p1!˥Ժhre;DItc ƈc֋euli1nv.ǺU wt7eAwZ1k2̩祮]'M$[].}D|>ubVwhg}]UnP 6iC^ۯuQ`M᢮2ߟju]9L>)v{MUTGe]œ39˛јy!=Ҋ#\ Z=6<4JD jgϠP-τI1b\uT$Yd`{׹Jd_u".BMvf4㿷ν9*lgXWe'jF˴Φ$Pwx?;Fqvb)#z^5)~]7l\2KZ#Ϋy='.Cܐv.ukᴅqgDRյ{׶m$@]9{QCCfD&ǻ{^,K#; $2B=LpB[їـ<\^fGȉGCe5ypYHlﷻ]!|9 "|g)cn?uQeO'E_ 8zF\kU{t%Vzvt frۖC\ml S\M^h3^8qECՋApEÞI%흃kV޻E}?%z&Oqzwue "׫6VUhct4TX7`q5͜91B/dc ܙg34D4qT~ޔ%փK Yh4-V* {?\Ne^<_yxvh()Ɏ<ϚxD$+G^ .b1\:\szd{oi1" A,:-uWcd7qM%f)u&;g,W9:M$~Ս^θ6Y Po0c9:Mfkpgk, {︺UiI)ze]"ؔ';Eo=LOfcpģ=Ă_WsTw@f(qF_}zݠ<J8+^&vNJ*Pk%}Nh{E/6;$zn>nF#\zb)cd]t(f Aҍm( WXQEYlF(>neK&nZ W^Jvm(&) Qc$tՈOG<9E e^1pj0fW\5@OlG^'Fk{^SxOXDG}.ʟ8/bD'яq,c]Pz&;o$fM3Ӊ+ٖ0[-ם9Yw[pXk1:9H#[砤&m/x! 1`z!6ݲ) W[6\5̧GhY}Q- ]Јfm0eS\M4^xV( IDATX^y¬d >!gaqmvŴ3^AL*\<-xtcq`_ʉQC`ԸqdƇ4@jA#&1EizDMDzaH4;cL]<=|>G‚q-2/3i)5$ʭnIɭ{&Or0vB朖ZBWۘrc@zµ;VoXYfH%:q. zO2\ dNz[j;O6L,bZ)؝?YO& m_=3yD0tLSOg5Aqaf2LEc"U}:4ix`dqzLz՝B!۽#AѨyCƻ $"5$qZISӫN[]TJ6rLMZoj4WTaZm2⛸ŵ[3U!'v*jMh׀+n5Ĵ̑'RZנqN4)1@BswI[T BqoG`']rOEy].W& ; ~A.{i҈`$/ k(7*d j#]pY0NM:̓8!>յ`A=x?Tx4. qdN'\2Z/|@WAI5W]Z4p.mT5p:d!?5s<ׂqٴ%Zzm$W3Q#F`j6z'nLeAW33LCj}EKR&SU!zLaGv0(58d&,0B& $l4g<)yk ,_ZřvcC" n͠dM>iFUU;gۘ=$8%i5Yו'#vdƒe+ϐTAZW/$ܛx_ īS\a$i8 6Ѽmp%↹,,2hPI;Ậuq.<w @93tl Vh`B č'65P* Na+Eq0[4JǗ`-f 69\RbDWJrY/<# QKbQwb* )~&qe][rD]B'ZrYW'洈Sy e~k\j%qNZ*^s\IגGC'\'ܬZ7!^Ir-<܄8\.i'r7r)krZ#vJY-E+oA  (a]J/ U %؂lI2{$K/L)ULypdvsk]֕c2DNq^\eWs/z7:`"/'}"%ޓ|M]F[$c\[gEث@I'#Œ6ّXEk E?<^aohw\CK\U=0=;OD} E)L WUm;I /+}}V^;m!*R2dPE2j.E.j!adO추"'uf@ щ?cG^^NTaAI_ٜ_ˋzlx߷SCBߏ%JWxp)`}QE\П}>Ҳ,i)k= n0-lB*-:#ᚹɍ6)64 :.F|uj8QfU^__}z"=^.Vs!oܶ3pR9lLp2ʊy%hx1h]~(LKX\/[oa08]k޷/mj`~жo$2C|{I܃@4xO8w'DǸ㚟jY.6׷WbD].n֔%~J?e5Iw@Ăў8h,1R`TdAm % vW0w\Ƹi &^uc#ʷшzҦ6pL%*fZVʴS(9Li%L1Arkk~ ?j|@o+>8̑~wG#.2r]t]!r6hvj1DnS 6dR?ż^NmڱF'8j9^|FL!5K>;c5!Z F{8:sCs\c߱0ߗmӴ/r۾  ]\c5W7 Uz(5pQm>θ'ʨ8jVebhRv"Ch\ C1lB73&k?ty$"+pw9+- (`VNbyph'*z9i"/ ;1:6DKn8kVE k{`ZK#:9F}es\=PRknwEwĵ;FFT4ċcPv4ua콒9V^ ZnA(Ruc> |Z9jWe_ĥ2`pgfo+J~\׿XoƱ B cT`+Ww6`;n `7O3dCv}\ mN*!}# =\wGfb.c\s O*2[g<`Cm8YfcIA}CM H6#flժ#?Κ>[ aW;09]% $]Of= 2(yuX=_;i"kcOeYC ƈR%53Sߔi$ߔ-et~QGC073]]Fxrj14q#6Y;q]iH0FӐe * w0wT6cu-ڤD鄫K۱CQhiv+C574i>s#aָ?ȂQؽ M%l4!ޕ))4w"sN,R<9(֍wk0d\MQuTAKݬTqnmChQ1$&i@Gf:]$x/waBإYw>լ\ևHiAmH3>uBTKv5=YRhDDs_#f-pI={7SDܑ Y8k,E26nM~n_`dJ2m&Hɉ%+ Ƽ—@nw&i)Xxnw8/lۮ>lTR!2sv,j[F`iC~b4h Ǐ ^Y’jƫ7<q-,8Ɵpn p}w`8l鎆8WW3ཿ9ۑQ N ?\5k\cqe,^'[*:zY=Wdt6c.)?Ƶaf$33~T2 \Ĭ6F)pT(;Ů ޻QrH.&mH֦Zӄsh/IB\c1t}/̱ 8l<$HMRK28r>\ߣ93ӛ$9D$\w #=CYr5TʑRԳ)MV9a\f^,'O3R ZpHבb~QAJ}LIHBDO]-Sgp.?" 805}5j㺅J#w7hl] FJcS-3\;F4II]x*LV\W9WP+XAKm>[ǶsJsXqM ?eFQu#pJ0M/7 nl߿G`חo/ Mn=4D OA\9b4(Khhe'pGUP3x(84OkZfOV\vs併 ׍$p9)4#էHcF A1/仗,qMc9_}FO' ;~Mr*Չp7qNk{+bםz觡N̹aTE# D77ݐ+ewjD_~;G N.mp{5{g i*v"@wjF.r̵)-Id¡{7 jAHڷc᩾~s]u|;vz<w#qfn2c%GF6aub"΍cHv\DZ~wWJۂHE$UvQ,q5qd]mТi@!O4NjߍMhd)^{zq3i|ukf-YWjZ/@1fXPΗs(/#7ܢz<1=`Ycl"-1WؽyO̔܍2&>Cx@|xo\OGP."Jk\<Ǹ!>5}k'zpZ/jX'&pƵscu E \ձߩ ݢ)H5R d%uqAEW.,bhEd]k <};kΠT0:-!vu!6jc"e̦ьLH5 覀1lEOk%Vc.A6f Ypu 9Ӑ@.;~i NeYkYv#=Zi+H'\S5;Lyp}k~iJ2D9<1jyp@zp]}?0 \V)e7is"\sO^s|ȋ!qXlD;ͳH$פeė!4S5d|E}vӵy*yPm!k6%0ĻKD^g֋\&ob˃Ǿ<^NiM75S9y) ĥ"F\]:tԶnVnbSFdqr(h:ƾe];I5`er}ڪsZ!Gu\;_qtupP\_1j (0#B] ,vp=^" e߾;%5fXQrvUŝm]BW⻩E w7g#*T, ,ݽt8j@Ή/ 78jLCr+Gw6mN1SQ}>\1";٘=@r &,\|V7 =c97)ӓ;଴mVj5ʞUƀpmFu\냎%! ǣװ/{#;qlsLӟýGؔ}H)$j0Ϫ*۝N]"*K) {զ.˲ Ք쇞H#ی<(]D$@LcB1N_EO{+vXvyh@ӚmhF#NTls6+ <_g菀7MHnѸƶIU@͎ODR*q=9=+FGK܁^y6t6-2e{AMHC.u^f^{ܫV~8:MI'tYxuU;nHLE/$ZH5pr,Bۻ\Mేp1dh*Aq^ )9nĈ"γ\/*$ݞJsK qY2sXqSp\ ǡ IRf,ÕJ׫=)Ѵ#F_3H׽o% IDATzp+kpM(&'^9ƴdu)Rk-@+;=2c9,VpzY" Q+MZyp7 ;]!Sec~#k en$D lQld}vPHl&7!o0H2wo4t죔sf y*@Xi,Dgc8 Зye,VvBf.(/? q+20vC (;Vįz}kXiH N"vd_Xv O=cDC|l;iO݂ _{ Tdt1- ̬41%6}Qy˺6r+tY5ilڸOb!p&pm܄@q{4L'f[ȓtr}@v=pBgVќtם`|gݘS?Bss\2Tq{{ž-jcNX!93q-'\`N"_LXWwoz$Cwvv~۝CNХRh5YXH8FB8\UIhCWR*w[ipG}c[ +%pܜ/*#bdCdtwv 'ј%zdz%FXݪ-⚇<ړAagĕG]lӤ1qM80u\s8`n‘ּ,oqSerb3 vʡy6MHod&I~%wz V{9 ;MIU79&sR\]^Xcji֫#iCQ\C KUd)F5„Ts1:6 }| s|/ ?8$&o 2$'^@|ȐsHC#1)5fDR(L%XKh<ɦ.p 1ZF*=&#ec:ET6A~͍{6CU܄ƈNǸt{jŸ =N au\2%?)\ >=5z1$gvA"_OL?#ҿ8?w1|;ٵww ;Jec??˄? pO?IENDB`criticalmass-1.0.0.orig/data/bitmaps/cubemap_1.png0000644000175000017500000027153110265636020021322 0ustar danieldanielPNG  IHDR\rfbKGD pHYs  tIME {Ր IDATxْ$ٕ$w#U ~p؜.BKgFft*3mbq* YHwcEUϯ?cן_~=~ן__~>C)UXcGwض iKΡV+n1|`g,<10Z k-wh!Z ^J-Xs<#sAJ {qϟa0 0`6C6X`XZZ, bZbBuYҖcźn9u]uR~'sVj g,¸WǸ׍q]jPk{a\;n+ai}׊  Xc<}=^c6 !|9S. '^~5g\'r·x)^pKJ[c1 c j q_wWM~Qkömj ՆiÖ5h1q:pݰ9Zg!j RJ5XcPjE,RJ!,(Ԣ k?9JXו7j ;N"ƈR .oq`P@̸ׄn|@%nR bp}kyׂu` NWտ! cWwջ=^\wǫ;Ӗ6XcC9*|v1\9^C Pqض 9pr,(9# Z(1!ҩ`[7R}1 {농_k bH9 utSG)n;K?g|PzÈe].3uhV*I39owx+\Z(_::$^GPO)!Z0V@)EE8>Ս5fVCnR2%?#RNnp}x9a:B$'\lF63r6몜 dk )eFu&:5[:fI-4Un>JY5|[~5|51+՘;n\3a*%יqͯp`ǵq͇JXćwUqWG$J=g33kQ8kkx¸ry?" ̀+=a=l2SƖ(# !|Z)c$#$\+?񚴤i5_˷3a\3MZJƺnBrR}J_X!6K2G0bgjYAE~~@ R ;jzC֊zr G,躭 ^O@KmjЇ0"g^ڡu]Bʸz]ϸVWƹ{ :;/Z1fk#ec'5qJ ĈDNj8ŎkX% q7=6qXc.˂ڸ'M+!>F=5/ӄ=@}XJ.}? FJkiºnD@;|LzSb~$^Bzh5e֔Yjl豙;JrNt5 Wt1h῏kǸnZ{KJ p)Jq5='wxLG xp5O\k!2S\Jo\J遼J=jiʲkqG\5(c@%Sik@? tjQSkrYfFJ;l[¶m^k(dki r2Bz`K) O| "pmШֶ&Z*@]ے̨nR 0P\y2m CWg1^Y4ksk178i K |1+5 j}~^v•/.%?<I5N';v} #- v^3TӈgHw%r ~-|s;J !PTN0N7ܱP+N)R=~wH)Y\_˸/g;V;W$q@5JSkïZ^;k>ZQxJWC<ւ/?# 07Z _J '\AЀ2Mo+iWxd @}nVOM(2u:=J\xC207 iDum5%̲Rrzy.:Q.k4M!%}G\Nĵc\BJ5)߱}C@E\Wpۺ!5>p}9+ЈLqUH}'^ q)95z _j}Bq 3ld2I֍z}=~=ƫXt!Mp{HwgW:)ISCf%~jrr2O$JQ!2_ ~ß~Ap(2 uHD2.۶VcD1])R\}aDm[jJ5QƠ"xh xiOOO*)LuiX(ɚ-$xnq _kz;%C_F&ug:@Ѹ-Rf,V pD}4iy%M8ǝ~%g~1eg+O$>0gpfOw\o<ݧGr6R0#jxqoZsީN IͤcUr%*,E =1,SA4Ѱ_KA!V?Uw^j/ܺN$&glF]R3sbkF< 6dNVZ^ 3yW_N6=w+AqZ|FR&xWwkG\s{ HYFpƴdH)ƕT dJ#7ƕl<׎g*GoUp=a[75;%5MeUItϧ6s"p<}4FAUZ H +'~xCAf27"vĴ|| X4aOJ1R7ѝ߹۶ݒ`˲(d 2O hZkǑ9 :ǕZJZ#fUJ"\+\wR#3`#a\4J޻:pmz uǕFo“9@)ěH@S\p,RgYxG\~ҼW!z@6K@0kQ|:Ϙ8{Lv\Wz\t Df.Pc$ײ,$A)5!h_6X~{^5% ,Mn>h׸; Y!Qh?{ezw#Җn+*.Kд 7ⶥ}+ W#v5+QL).\ WqIȤ놕;mWu/{WfDk,gEz+ J!1^3g~S94J,quHɈ⚋ʄGr֊]1 B74Ϛr)KFF1v|'m>ְ,d,unIsJ6*АSF ; ˲|>~¤iTN:Bڥ% NjnKh!PVp0s pV ~Jo淸ר.po5r;\̮Jqkq}ŕr2^s 2AG|D&iv\;ƕY;{ 퐵xT_xQ?RzRW.g=JRόǝTED/z+{5/?LcX(%|ӓP(^hd JmUgBPZd%Er3q9u'u_.$ݶU;ju1#RVe$ip5}9o xa8 I|ǕuU`e\v*wZrӭG:w5pNgFFzk8\DjSsJdrBSKߓnǕBJLiNDנdſ0Cx5+sӣ$%ZS wQٖ$^4aXc.*< 64)T>#<)+))~Y בD[FkVZ2D0d*SߔJS QQZZL9#t|V1o3ߺ摌4iDsC*0!cYpqZ ! W}q]/ ;x#|Nŕ8;:TiBSc4u:Rp9ȸ&ECN;WY5 k•ۿVjwB8֔9y4!0_p_W~%^O}xĕm{,7D 9cN!3X!5G6V*r'MI 5hbM^mg V# %Kj79m+~yT#R":벮@9 % %}$C?#n2kFҏjW*+$N>v\רٙL µ0 g/;~glkƺ#zq.oiZ #'czWoqeBd\ˊ>!qmXʸnoVdZ. +MR\ ??kGِx}y1c*8tSpS=0EGk(I[\B2)a6.D)>pҽԑB=%Q1,99e`i#1o͚vW6AH4L5b)֨F&1M]}GyWEoq 5QA#+ӊ+_10{kgʟK;\+׫'qzk=`3Wr.*)uc^rA;jk>Wx.>2_z*:]̨WjǟۺB2N2mJ~GJI%DŽ}qVt"7t-{RpeEqC Pquk #J.J-uy#Tx\3pb.g HZ&+-иcq%ꤟd1M8DoWJsYI'0juӖ0y94!] GK'->c ϟa-MJ-j׹q&rk0!FQת̝2ۍƠ]q<pbjQsG\kYV/qh0 W>ȥlq%m h,^coq%*2zqz]d͉GB~ǕHzEܘ#X85Ue벾)4eC IDATO&’562 񤢆$$q:֪)s鉔}g.6NgD>qĺ@b[/<9ZW&H$G9T`YnlZCXTc:J\ q-8s?j i~Ƹ5\+mA kET\Gۆ| aɂuVs !h(pl1xe}kS[\ !DAwIռpcUm+-iמp]WlGE-v\{4C{>+6%f&UFAT;V+g6<y4pU.O({0`8^Yt$[~(#gOpu:8%q]zAB\_ۂ9~ ///;T7=-bf[\;5%^4l|Rqw@DK%QAr:6;ʹ~̄ьӝ(h^j!.Ot}_9\mhiFu*qE邗/_$F 92k<ى֩RsԈ9hk }_/{qm\3jte&|8x"#; *YΩJz8 W{fԺf5iKxp˗%}mN>{0hY'qv񚯶i&˺eš[#N1hL@zMm*^+\W;zwO?v5p=1Ou;k*@n?vpx͛}'u?hEzn83Ihv-\߅| ]qaaɒ q!?Jۄz4J_j&uյΡK>]:PXjzUQ*n@]|>+Gi[jZ=.O5D˾Dk1Cpysr$qb)E~pJBzĕř5;󢛒i֛i}W츾\uLдギqŝ1\3[Kn[O'lp *E2! b).92%3UM2_ W;LOE/vU1^{ZWJyМq0Fl+: Jd}?PzY0Ĩ )ӿu*夝NayuU{OG@dwi5uYtCMl-z *;P1Dx⫵ vb d n-÷ hߎƸq\; è!Cгj!}AwոC\ D{zbK+`bHt=Җ|BUr}Nס'U.'XP2)8aT@`Q?#N+KRnkx+Ś|_?g6f;vTMdͶюz/7#a`gUt7v>ξӐPj3_VӔ̋4DkpuWȻ>v;|6tA/zgwϤRa&.N@J_KƆ*Z*AZ=oih1*;5|yz&=k:+Q¶%]G<ՔRMK*+or4-ȁ*T:+il)%%b& -@+ymUWo#Ƃ[FkSKR;! }Dgy; =6۔NѺ.l!UuKth-]1?0'#wW|]#"&vAkl$.;_+)U%Q^ǷҎkf\OJo﷾È~y`I-`ξRq%w q [BT^b5 II+|fIG\;Èײiyu"EvOG:`G[0pߔ D(qr+Ξ.?`acsM%`'^Uj pc^uZfa9t#c?P'sƿ/_ R"^l:*GhcNf6_?D{fUU'$]QGZ<==Eh!F%{h\tRצcɣӑS!{T=sp>q\JىβBS\urBl4bx1˼Xg%)Zn5d\sEz2]Joem'W$BWQXg_z<.=.Ti$ť 12̄}_O?ojamqL<$-Aoj]1u=fEU_0l̘Y͖=ۚ;V^W\sAcBnUO1p-F bH?4oI(c^̎rv|#_j*xY{tyoS5fCD 8}Y^X`٫e1dښAa_QQ(n8%'!c㝐ཊKp\ .@XfOpT@:^Le*Bj8")7&GLw/yiӟ,^o1`uADŌ,G=KigL~q A4c9}s:J3zߗuC@sJ0@H"p+G\eŵkwkrX^Qh9 ow:əV<"LHYP1N4Iѭf݅G-I u#LsC6X|0'4cےeߟNv,5e4ţRCxTq-YE;)NĄm}kMd2qřJ<^R5x\8:„w2~T&غ+aIi&>v~V Nx8Ę1O/eX(5mjK\k$ve}#<e4Mg=t!L |kXl*8}00dI z9?-+Zj8@ '1&Aq僝{~7*2"5D,EK5+6&;nD Xք 0(aPZ5֢y PZCdzf]cKb3N|kYP# ŵqJIV>\L:=.T.dT*}cY7ډ=zlJJ^CSvsZ.jo~@J+;.38m=xX !eRm@zHy`A9ڠcp9QJ@,HzP㰕BmC>.tǺ=zYʖZ)i k- eo%kU{vg؆LJYx"#E+| bdX/r$t>-93i;ߣcܮG󟑿g 6QJ3b0`"ԪMJ`Af VZf+ ۶bSb$? Zw֐kXfG7."MՂ߮yF)Өi wcP(϶D.㗬aY7z!`}9ױr %4j$jR*h̬J;^ƺn6T?~4!v=RaCYj|D׏p֣eQK0p֠يtCH#圵9T2G,ɹ*WoU蓄#++ :SŶAC2uW\eyZ =Xכm;`k#n24,d3UΙ9:+(-2Ow%ל/JU¨#Sb|ZT#:\OC4,E-`]J5 q;8OL rI H&kT Z 24tlO?XDFB)i8+JI(5)KvkQJoۖ4 }0撱/$h9!xm۰.rΩneu_[-kmA Q8b&u#a̳ηKKe:/ ;?`w/#3|tJZA- 3ќ s09e`oGCC#،ѡYj//k Fs/9 OOg+3Z4m*="Ji1 #մD7!$k3q8_,bO0#yf kW\hOTC<ۿ\.,!Ԛ.e]'Cfbдְ;@b9%NŗϟG+7fBIt43uSM)4DZ۱4D9cؒ霳ԂNgFQD&v- *!x `FR0tu^p\$*)3Q2/ /_Xú4%vKX QX30[6[Hƥ\7J/`fItoiS*cƽj ߦ,h(TKButn ۚ0t=ZJJr39W6:ɥ9kEUQ[wa"HiIM0 b|1o~h㏑7983#J1i} r;R>|>k61ͳM AۊبVJ_P 3Ui:}%veV@KSF(VvPA7:U͡ @;T)rDnKi^64=}MM/akS[nMpIH7N^E_LRЕp]YBYͫƇ~ >+o֢;䍺2޾Yq밵nޜMR/+1i zӄ~v8'l*N㙈>3R] AG)%VǞZ} cQꆜ+_4U{l]-5ʈ7G_*+j}}0o:*Np~YfcY ^01?ݻ] n7T?}>6Dk]8%˰mK:44ƒμM3``n>vy]i+sDabcW ~"q|ԣnh,VҁM)s-o;t:&DҔކ5<͡%{ozNY.%SeB@]WKvM(D_jM+ѥ (. "ҁÖ)˒tX{ a0#?cFm֒D"o=. ҖQ.D@ەe[<״,5 D%r1k|&VOl묄*jJ^E})IJ]gW_v5z lj$&E$%ݡAI$z5 =oǜXh|>"Л&`m?&*Z9G3h58td"-zaO'a^fbu=HFۮiz~~VJ&l|cYI=y&}uԌJ:v+ Ҳ:K\Y:ߎL!\z>a'gyQuhEnCJ'k@(1Fx^, 9}Vm]N'5t?sS60 ;+ҖĄ2kBTswɹG~0abmğv64MFi zqa&Vk=| Iby.9^Q~TSotTW&Ym%3tC7@hD5sUkpMʴ{͔N+D@Cj/UaU:Əg8V 'U} V$h%8%]%E`nyD+95@56Es*̈ɋdc[2iV ~>!F̥ຒx)@F Ϊ݉ eY_C\굾=;(zOρ}¤m%FZ_РijB^: Ykshc^E!M*(XԖEy*NKE V`J#%(TU(QJ 928ժbr TmnY=6ٻI`>?e"8&'nd7XQVZ/S?-)&0sH' Z ⷯ5r麮Yh))5uXѭg ׾zt]ܗNn(H8ZYwcPF|s^Vvh~IJ(rs_~A<!, RbXe$H"su4M9h46+ETIfl[pӆ,"+: c+5"V]M5\BGu2mlLV.*ℯ6 1p[_WVz_G|>`:qwm*Ix>ZLN=>|c@@ o2k ;ذdqGRti1IP3_[G'I:!iXqFТLba} ~NV}_ݗZ:X ֙*1M] 8;bL8sz'jμ+j2|9sr$Y+/1e?;‚"ډd9u0h(u9$ZfuxpkP pa[ޠ2|Ft8)? TgLS8 u 2h)~8;Xoy~m8LZ0h5R.h`4`4yI'*i }#Kp M<.3/~_*aN*wR %;[|En2@SZ~^18tCU6M]nІ[ \Cĸ:#bp~w [][AJ9aL)&ޣ}V 4"(l+>';Tno2 <PPިtCGV^ MnS%T$pOV =%98jw*(9a X&%#FЃR)(0Ҝ"cDP.X\kd0(Δ͌xJn!- ! 'j%,xX1rX %Zsѕ bhBҚ(oh kp+K񺠡q^P܀`'y0q@4сS0TՄ6542 =.u]fNC@c^_ snBB59+2Qs6?=WH;VԢs]epfdΨ_#\n(ܴg9RkqӃs㌖޳$̃DWv9k#!A O _+xI^ ;YETBβ4>tȃ@8IΡμߌUkxו >p^RѕơTx3ͨ`H]R;R<ɵ&rs$n*KJKI:L$&fFO:DY]1Ji$ X,FXw8 U`Thc߉ͮv򻦓:"9U΋Z=70G㉮_hk4Q9+/v~Yp4A?"a·IarމoG2͹bWr~"t%f&4]tz4c nAW+&(cF ]Mry9hX5`,q' ojpg 'rdݷ7#+PwD%Kz*i{oG-,K)o;]m` ?~Εe1 ֑d5{Ӓ2WnQZJhc=*s`,1І`W*qƈ uE<#t7p?cx$\Ry !B qj8OACpZj-y1\P3mdrG΂WS|΃~П$,s?7BtBs팋H2w>h02o;ENf9tۭ9_El(Qϑ3瀰^,&dh眓UϡNH^%~JV2b|{IjkH9K1w۾Qo\Y9CVJJM^+@Y3$qfINd _BQ@ IЉxJBI&dJȪ~VDi-%v.^T8#RGNuJQaAtVz%)+WNt@FArF1W@qs4[/1sd(d*Θp+&ڙz:5{kY攧__$kKV$K҈vfByVdTęɡʴbMO/)v'{enKHL4>3o@,oՂJuPJI:WK wZNA1s"g!@Fb ~iqdUA)T#+&H&YiWjAi1?RmXd[R-˂|py6HcBW|y|_cEVm;w뺑FZF8CW+.kP o)8x Z),>` +rP]^; 밬;w8eFuV (ӰE7][vhP[0knZeiEDX&ˇ L\?hA)붒ߘdU xo3~pFёmAL`^߃|3hmul2@t=LTY PI_C%8mH1QT TTyM:6ѫC~T2!yz;Vk_Vr֭|(s]92E&#J*L/]Z)xgPzE/s E@P5ĜqVP%ig HuVVcΰze Bq뼄c]DkA.|o$%jLu mw4Q1G^ngubmrxG/Y5ޟ'9 ]z*k&pE>gXE[~uVX:Z Kօjѵƙ+`- {coՋ.t_6o%L悱FX(UmE`۶!Gv"x">2]׍U,@-$VWdeh84KL i8;@|C n@(D'z>U@.(]!"VZ0{gPk@Thܶ [XUΠB Ov=uCw3$O?F ڳ1,A Vqly"1/!X)}n2C61cر:wcUElyxj!eb\[u VF-1^BTِryEAoRq׾mN^XY)2ȶhu߅y$C5F^!E.ds[]rR[71ijM':b b$izW乎ۘ4ӔjAS{^(\G,d,uCDJk( e,91oX:CVQjBF/(9o,*V΢VJ v& 7^hu[Wx! ~N1] >.J-7BI}S3:Zl^Z^yk|3.֨PfZm]eMC}ϡG .ZK3!T*iYLi 0/ooo%UHLóo4TS% h`Ypc , q\)JO⠱ d#E*` ' 8VYǜj l¥*\tޢg>;C|120R<#`;ZjE.3ZɈ׉,@S>|P D¡s]xUt!۷U*xxn_kv'VǏs(4XЗ20 T&mƻeJ-iA6!K**+\֊6c798:QYAa3"")MAM 0-Bphש\!"'%XQ5f\[GBa5:Fsreae"T (Mi_~IMN"RP0(>8k9᠕+@˪&@IDwU/Y MZ9_o!8 U;ؖj ƒKUVݨ]2mJ|<CY(]BJB}{$9XĔXf륡jJq<@pwDy_G  P͘4/ ?^IvNװUɊ$QJP܌4L)8!'%N8{F`<"c%42 :/\&4S(1joǚe Ȃ <}f/4B)B?ybґ6k۲!xm nv1?fi4e>_vb&L,/q/[2ȽgT\JaYkQ`}y ,4!c$`.Rp0v(2eźmLЕ:Z25&7PAaV"3-ɢo|JV3GYma¶z+ xѪF 7|+# g :Bˁpcy;8( !q>1h M_<׻+uK~ڞ+$2Qe\ns%jZWj孵XmyoS0Lr ǟ_l\{lWHN2Z@2dS^wƠqpZ²NRċ6_&T@5? 醖h1Zپ0wT,2_(2Μ>I#$npkRPk ^C? ~A1q8Wn u Da2W[F 7+rƜG`'H 4eEoJ5@};,Hu%u:ƚ 2Nkm[eF '9|z')y&hADˏb_ϔ\ M. [8Z+wܤO1"<j%6U!V7FOUӐR)jΐ,|aTZ}2bdS]*|=:+bp> ,+"o?X~ޥ"ȹ <cG4WLy} RL'FJ /;0K-@ХNh·K-h0v%h3:Jny H8.^9AUǰL+QU!;ϓ.:7t"kSQA3:brJpE6VE3$2ҁFYI9 Lm[<\\@:άH[0VriD\'d4mL`g! Tab fqƄ[ՠL=6j-Aˊ==uҐdZxY%mtiBlLQ3KSEA'rs>W'Rx/K@k|_ϧd`Xa1XeYdL%v@0cQ埽l&S2 H0?ۍ! |V̬stQI I,K^jppL^y;:WP(Y|!9bʓ>`ZiІ6aY"膮wȜ_r8[!Vy],].qw&[WZZ+%ajRJ/pD1\[K+ ɀG6c7Yk*v`By욆Vo9A8+0J'I9zK*quXO_iJi>(Pjb .=R<`XuBL(hŮ`C/ 6@ZxFעP mZNNz(y֦cAKZ7@3s~+R`R `Ɉ)yB*"Ĺ $goAS1,]I0G³z.}bP[J܂.'YJ2P[Us5Xyic&k&Ԛۂ5#|*/aC[yZH I!Y;Z,"^ WP]0y4d-1P=C580x,dŔDlE1ʠՒ`7ڃ  ]|Ԭ-6}{ 0vA 8+)YC s+ ~DRe:/eYorZ@l2oBx M\j*l h(˵q2zSFCA 4 iB*J*P~1{4Hj/T  X' 蓇/c"rrrۙ+ 5"ES[JƾzjAPfro)- [۔ְ-^Nv"a):YCۊ:(}aJK˄a=:Q@!6֊uj#rEMv!Ҽ![>QegDܚ2mnb2QZ=bU {±w"'4BS6 К`ӂJVhM[J^%#7Xm`]@, v oxxp W/gRMJ/v )?>@GҠt,44zi- Rd6̉x6 {1>\j2X UӇ,/j{R3bx>AzhOcgGy^:՗I5Pte۷_`5 IAR澢 n+$rW4^) 3 0ΣKD> +) ה̂g9O:++ĥtzŲdʀl !UFt#;Js i>WI!:%mj}6nȌ9RXIv#JŽdDx5%P0 ,m$33kҗ<5%,~`?Ӏ,:so7Q6%a[hId-ۺՌ w0םr7ȁ>Le6T0y@320(e&w4p @JJb[7DaVRak[uJƂTڔAx2EAV>;R< :-e̛ Q4NŒK x>\+ģ[n.JEh )#,nNO29'{4a:yȀQh9VRuQJs#H)s*J0\NJ5.l$_8RU(~7> Ō`x*)T 9i^$ձ}\px|98Ohm;zx<,!Ղʠ+8pވs3il ? ´C-%%/J_hvKC-ԽOFk|~E8ZJu}hx8N+UCܶP&îA!efk}ډSL0?_[8,?e,L\p?cCî<( }ʼ.4mk˪Js#Ҋ/˲`bvg?-!Q!0T1hkqW{~W%6֙@%޺(mP/VJy{W͈#%Wp/m'~Fy_ :ZbCj*;Kn3_QZ3t1RPWf瓬GmDq@ru3l{_ćo'3>bzUCC ~2L%#Z}߰o o}:gC -m\HŠ%C+RH lx@$b%sښVkٲ1$!2fO NzGi}*R jJQVZσuȪx+r-`kůƃM>R@]1t F8cuXwShv*"|jHI ɴʠ7BtZh/SlT'e8HUCĿ3dPJ(Xn κHcr- Z+N{Buo e[SJ5+3&2Z u.b&ou|E0d۶IR}ƒM Ci;gJ#lV;6nAN719^C?E jؿH<3oA٩oå&(dpl8-8ܶ$_t__vC+^Vk(s"a)!~̵w(?LO~U RS-Da6Bk4ki !P~Y;F)#{݂"ׅB3UְT6Z 尹6,ƀQQ0ddbj.8DWT(ݙ$)㨭X 1,4\,*e$*,CDL Df' c؁4g6Rv]j|Om}c?f1X+UdIQ [;sam uшׁZ#rX#e~|ȏrQca_넾1—rb)bq@e ,)AJ,ຸr78[IJ ˶uE|Z̑f(\{G@vVx0V ,Qjs'㉔ x~I"5`Yq%P NAV.!}O2|@T,|Jc|#|pKv)_,?]f 'r"ˊeXլNXb(~g ,ĒP{EG_MAYVb)J5^hx+χ¶mXǏH,8qTJ]?jTSX\%T j/Q 3۩UօG VO\k`5NQپ{<痁5%ϵ -1^m M mш`|pӟm2yֳZ{TKufZUJ5 왴|>Ƃ1`C`j.)&9M 0"|tPz5C)3uG+l+pՖu"B5O h5IB\"(ȵ"GԎ\*+Rɂօ |)W)!Htt,"Hg]Qٮ2kf'a(!@X2(ձ͑ú:aTqxEɹ ^U(M6#+I&!,As@LUvBC#Ǒ/p^ L ׂ2RF- 5lˊ%x|Ы[%d3Sбyx! fhtՠ4Y ˶΀ ȟj >dbm*k<4 Zs-*=_drtZr|>W;[eaTp~~|̜✀g:'e8y(X(OA96DO)}80r.}zE<l6OB5J:SxiTޱm4A)PZ"v}TzY y>?oX89g4x*}'%" YGTH6ME˸"º<%Pm@Kk!`'KJJ ۾2rO6`m\k-S;mZqe}P(wSJ4P- C([zGm^1qAȭ`8Yg9M#,JuZ&>a!;༕RPHr αU;ܷfrY0e4󘠏Yy%4ep^  >"!M( 0 ЪOx R)k:Y&Ðv -š "3&˒VE>x.:yuJs pC>!(fɎYuw7|/q2l8O,S:D8T́@yp|>AJ>I>=A*;E6 |1ւ$@y?(ϵI*BJVTN)%A3Ժl]8K0Z:"E qRƾr朓RR;jMH1̩7%n> db:'D$XB]G+bx OdY4)?3ȩN Lq.ai( xP40:xk64`B${.2'"J$ < X/a]8W:`[7l Ofk}߈V;>~E&Ym`mw $ hKvp(E՜lt{ݏNdwS 1WfooQ`d]OP:BQZ: gx<`*Zy ~|}D(Jি2j,gV _|` ˜A8zu5Bbe0h**ќjZK1pFw*C-B&R ~[\ǕOP h'1bR!(xy_S˔*ڱRx418L;;zΨC4$cfZJ2y#)v+0Ǫ$ Y;u=kd./YܶU&jV *ۆ6b zGC1Ȏ -K^ێ\L(\QzhLl2_(jC̀w {1AAAt-` 9ZfB%|mS ;jqPpwW?wo E_uA߇sN La]~#kN$žqݩ!Zta hpX'0̝q4;ڂF*E;"*rD[6Dh@w b[<8Uί J{k,)tbvŲ$yI `$l? :h/J@GC͋'h.Y(>|m~*@ wMXx&k2<h0Ǭx< :-ž5 jԅ+brmXTutc-d IDATQBsHvS??JZ)3yW)\Pr4h $ $_%Ic[&)>!xhk L9Ol1]s6ҚP?":{8:6jZFRzN«s`8y*o~xvq ZwS+w(Ȭ([C6قxQsDgo~D,u˗,yU]a꜂{a,*)_q:NsAti~5TS NԪJm'jh~%n#NxAEFt4Da|WmRȑ5vV.8m`~'R§|׿ 838nG#!o~HP})d(8Õ {.[2&nLKs?dg4a]䕤 E y(90KXq]>㭕<,֫7ZXqĈoo(" ȵk \ł_8RJCӐ')8fDz۴\dgX=`9J 'hB9tD\MH< h*Rt^fb$Z`G+ n_rO0QJ+JPp֣!3or(U]{Fe V`QDKpM˲-bWPn1f\UgGXQeFPYو=a:6Tr(q>L7Pbz3Juc|"z?; ~h]ɛK)J`TUzU-/wD .@)/l7|||%їi>aT),)^PdyŸWDoUd1~XkhpKRRD|ʦ$ JӱUèLѰBmqVW Xdd(GCPldFPE)dC`<%na]7XcEw }Py* hH [/b"E6?1ȑLh9]tyضU wZ͍ 0<\}F}/ٸ!9+$JZE|(S|X>A @|>|38%:6N3LԊ@G/ϐpL$]d<`ccp.$Zˉ -Fe<|1"eakkЁVDm T-B`*@Ήp9M":nƆ:Wg:++S(="z)'T3 ˲+v4*DXKF+ r TsB&H1jm{ 'Z²[:/x}|! )X lbؖf誉ݙdc~w,!Іs/yrd6Ƙp'Q^ XdD׏>o%myh^%#ׄٷ0Yvk)"60V/x]#6()4tX :8/֛{XוJǶ0 ެzF5t>po8ObrJP]\$KiѬ0k[V+sq"}w&tAJWKo}r$-IW8Z[ Ը#@&wySg$S✧' lŬeC(,{U0ޑE7~ %" xNy MBI4q4X ZpcJCQfAѝ!E̟]aذxl/<Kl!׎Zz׈*Z!xn' "; -Qt.El>?'1wVZ'69OvC.<%e`7؊y\Aa @6q)ҙ,|o8V+XՁ^e- հVKpHdy&њFPğ]m[,&9ɕI9(ۭ~dEJ؊G5@ ֍%t+cSǺlhTD{zcۡņ:N︎ ZY*zsKVUj` =lhPCrTWhmm@JuG\@WEȔ( T7ʣF(b]Q{ts5p&RCC]DGyҐkȖ\x`x芃TXG}}lF<Jɨuh~/(/m:26^N hM~vEbŇG8%"8#*4:XPDxoLV]Y3om~kX !ਲ਼0YuSHC#!И4vC)gH\i BXqo,EN:|> #u$?Cn5j Uyh41BwFj/s92# ъ+b9UQ fqK c 7y/ze*V6j^ cSj[KRoJc+ d{(w>X| #xbaDf^"Q+jnp^h *8t|ehIUꪡŌ** -g@(XB( ( =IU[tBq\ YLGkEԭ/( h"Ѩs-!7N#1a!QldcJm`Yfr;c)y&yę&oCBGޜ0M5 PZq\Xm TfABkyaYQ[Zu,Mצcodeo;rɲ_ Njgz^)i`" @pT[@КS}IIVrEvp P"Y(@G`6V#J$p;P'veE R{DCCeZ_c{} F x!en6xskNy#qS忯k")=a0ʾKе ZF ʞV,IUx8`[7~ %ht*yI A7"ЄAU࣍udh3{dKdu{<9guOٖP8%ހ 4l!T f.R0EhقF tB Tď)Gs_AosN$ =:ׁ%,bT]g=RS-,;yjZGB+~Xc8Tv'PGGZE Jzm*@C19sMGaJ)ӝ;CR FJiƂZ|<|3R]m6]HN`R=*.R>⳷FK_Usx+Y/њ:}f&)h#:`E"u|x6|,]_AƉ21j҂mzj ®dBXk^PEc$lDU= Uhp3/ՆܰHbim-skcݕ +#ijcŅ2q9hޠsVyA)@:Q ?}dMp u_ڐ,T3{l 82@ZUѠXM/^iBa BeW;ݪtvd5))ݔ) sʕǡ8% kսW'xA+ ˂:Z2UJrf)zsa\|\34\$,8(sh[qYROsNjZn7Rkq 3` 4&\QDkr8k*E(x9T#P}]bWjdfbs*c?, RKC@6]k,(eL8\:U;.Jx=C{*3J) 4U˲ ʤ`i9}>SW%bra%ꕩ.;1F$^3 ܘ+MtXIE-M0 Q6 =Jt(Yyʢ3Z*itӔ֢vqE+-mۤ,T_!ƌ+_}>LҁZmXB uFV8q.=WUR 2Rh: ΀G}/TH7 &5VD^ziCD' 6C#FIC-˺"3 u@طuFCZށ ",CL+}4=)zzB[59^󇜙TkFׇ%ڙ&.nB[m&g0ƌsҮo̴j4Z$̊YI0l)e>>VV;3m Tpc<~,'kR*i ch4cZ-ۂ֨ 60X:5Ja 9S:Z5J$6`Y;e gtBMn#ڜ1[@1ȅN⻹fWs4,gMʰb&+/@F/?gFoC SX5n"!]57A&ׇnmbV)yxOR1_R rWlvY'~6.yCSy~@JnQZ7U[ ԡ^UcA|1B38Bi>) E'[A)*U% MV6 Z3obʹ(;&aS۔5Í>ݘ([*#"͈|bDZQh=e IDATAh>ܑ2"F7Ci[ DY5׉Vgdv` ²)靀WޔdihbfD|CDl]vѷ8/:Kj_wTn}&^,k(y {z%ϱK%LBB*.^) vj<\86pn?a&@ P%#,0)yņ6'8Q牰.9,K@]lAIhօCZ%f,vكE#y?pO\{R) `^X3ZkK*l14R)x{Yg,!&Z7X ԑYe` +\RcwI BhM /AL>} {<)_!eU0M-;=Y^[$Q ^e -00-tlXNM:ZV8M5KFCSu.WC/1 rPx{{#\v&Cc<:kMh 2ֆhy_s$Ji+qڎ!Ϗswi)8կ~D7Axx1>/PbϏ[ehQuJFA.Vx{,2Z<:A(IoG<߉Y'Zz(jBgQוѻL>״sdAxף IGSLP~@ kĻ"6Yuιd聄xS%czocLh2m]єq:`NV۴nN)2xX!g,aǯݴE3ZWIl\C 6BoVaDm ۾Y T gOԝڃR/Š#/|j^YN*/@Mc3)(B7oZt[Xa8#ϕ"- *@!<莮* ʡ7BEC 5a2y'xN~)y+.=6w'9W_, jl R=,L=b*CD+ǓaA t+FQ;+;d~{Pw,^&?LYj9 e-|%%,DS#N8b81X:,||ɹ}}N#)sUB*ɝc+@5z꾭 p _/>VnnypW4Ѫ [ 1WZK*| 0tfqYr%@RրyI x0ϰ}A (?αpї{WeXRaXF)Fc UL4Z3}LmRH t"Uud0r{_?gGRpRkPڊ5XŸ?<Eo"QZk_ިNg䚡㊰pm9PD. _?Nyu \ׁe2H<#J}RQd;GxlyrNsV:jLG-gJ)Mt)OaՍu@Ih,T3mo ͬx‡x8 O{('iKWB;"/6MdNv_mDGPj,>2>aHS҈W CǰS5iG|&1CzyuseMH鷩SJ!^qncE}k&nme(1M*)쳝p }+0sO}ݰxqݥHV,w^2T'_ޚ9 F bX΋sFZ %Р8u /译u١#P8 0i MKnF.*2d~ PeYcr#ֆZp[2>a"Qioa%FZqk%<#68΄_8K@y"^I؁{lt|Z",F& jj-8s>! !6fXAD3ʺ3RM&&e]fy>dAnqX[) X@~nٺp%Mguca;3JSD%9MusC Aƌl"yK)w8PRrM89LG&cuZŤdcHʔr_wHnhmu%D?|Rz8OL+h͕!&x68㱭+jy(aVr扰vz9V2ho︮ԑN㔸:2~q6>-TVJg-5u6̆՗Xcn{X}@jH Ed^D76E-@uXn,M/ ϔp6a1d.;b$+^իpf_k>]{NG`me^n3V MxAj躠Jjo ;!t9[2j+8%^\Hq2L\gY9_}-1p~־W;yRUr(g2yT!*.,ljwHG(r M ^' yG]dֹ@IY웜/WFlja jJ8NP$ h$B) ez6go.WfWɸ|Wȥ LD㊉proPJ#^hqhqL:Pѽ3Q;<㘙u5ژGH ФR QU'gFBMɸGi%oMW LqV]Ak L $X!2D|ig,Jnkx (xs S7L ̓x8*[F\r{1=GKݥ%ZM-Fj*%, XA*eŠS2 x$J%#A<ʅ;. OSwE Ol?j.X}͉8TENXx!]ҕl 나uw2Y95*9NF=yﱮwj},"BC?,PK<{*=g&bD>DLA"/TU#1 R1]=6CF.!X1Q=Ң(Nqs`D1K"/x>2R$vwu[4PAU`+iA% x.iCGNyQl4@wuEnJhpRKCI1YCf-//ڶNnRAϕf-#sMBC[;uQ)/ nz@x%|'o$:ݴLH@:!(Ss568]ԁZ%udF1JA5 >8uǺ8JӳQkC죜Z(ZnJtMxS5Fsz^*BX1%TpdB'k4r`JᲪE5Fx h  pSDV[V;Rʸw1[yw6IK@ZeZ}W4uo@fR$*x&!j dDz.ThVFeQsÕzR!Wҁ,79!ӏ-dUV)[3DVd A I޽T,J"ݍrhhED%0/,`Rrq̍[Z>*1(]ed]^ $=ܰ?Ľ@z)y̹ܰS`wYx]Vc Z$ uv~FkI)%VYshlӲY49I.#y}pyifu;J#|Jԓag:8>*/cnN6.Ndz/̉κxz}n{N"k#; A c8:]ԉ!,sO۪a%_;.mc+t\Vh. <:37gԀ4_ Ze PDy3"ӌymԜ36g^>.rbSF 9HRjAc{FI7LN0:[`$N8CJ?+Exbv%'źnc.iLuB!c4dp֘xr#RH4_S,fgwq<}-mq#?LV'vm9gcX̀Q/**KhLoƣ `#AMĒVx`ʨ8}DZK+ $yb^j@\m"RL.L/^Cr\֋ ЈA{9]]&0"82`ÌQjAoubQְd[P Gch~sQ];4XJR9'd n'h"bF9E*8eH!FL! @B#jw#Pzڏ|E~IFqĂ⼪3\.s#_&DU&YoE#^6tAn*\^}*# WQ]N,]poXӢ՜(7aIz6B1"iͳr5m]Ukź.~^lzB/YfN dB:ƚJBњ1 s0҇(^+wHkDHnX$.81I!6QX7>: 5F[g5v^`9Șc1qi7|7<O)!_ZD`E4R`NVҝp$9kR'$h0@ _ɞ0|9X Vf_M.ZhquݏQLM]Vҝ 0&+˯˺gd3tYQBy5FE-5 j2RQes,qb1)qVAwJa`yی ).b 9g[ə{p!纔p;u}aI~&n7%%,+F< ;seƜuiE:C?5U|Bm94WnFqy wܞ毊˕z9*R,#H +Jŭyv±ʾ~쇸 <Ԫ/xxiH_ÌAD@e7w!ʗf7J"a0ҔZ)vw<̆THι=y,Mx!Ģ}?fUqY{:0*n}B o-{F뉫j4D]eFY@cׁT^z6\`,QV60}%M8@Qs9p4+0#+'Q} a >l@c,"d2V+2~ ЗM_*Z H"q]_ja۶i24AbWեn*eҟ8ń}?vA3N<ҜKI`JC6ovuce8vE1If=m8+ vqNH^`s4I }ݐO3` reA(#+RmAJ?2R5)!jY R0~頔+=tgLZׇH1%`ʼ$>rO`{ ?@mH@!Z^)cP' M u^쌣'o+$2IIIA zws)>!$#I]8]tD10cH{hlELL@&3zu]y֕D.Cy?޾TR~Uuϫ1xvS xz >??ܟǬa{{]>ayUkN^DFM& iւ,VGĸk|7-bTRv`>|xhF^TfterN{0l̽+5v't ^坺odUrPuj|6V!DUw̹s\PK]aR*ܭaQ9xGLQ9|Q +iXuj^“S0S388|vX/}OZ ;'I||^kl@A5O| >R'˳s^g9#eicQeڡS :' SK߯++e]wbNir 0҄l_\o ya)vi@bc *?DsK! 0GF,K4wZ64JX ~ α,j+3w=1"pBuEɇF`Gڒ'SNY[ۮZĩb>uw]pjcz<;B\$[U$*_bŶFQRDxFʃp˥b6JrTAzJ!V՟eP` N7 Ƃl66E%__")*p" VʁS3;"zq@+ >[<;ӔKw<4)kD'|sB a5j-ضI"-ZXklke0Sӵ焙jQ*VnHɀxjDc+_G V,{/wd'8q158dCEIDNICX1p'!!ubYG5(~~v9},,ب:'s*zq.+.+z(^QoNLp6*G{< FD(XcX 2>DW./%edR\5|YZV%u͇Jye^{ZqU`T7 @ߧw sR*G$̹9|"Iv>"؁8 [= SDej)D "!P *e@pMf|hb1+ -w*m0 EKp iE9D'kWn/qnL)J(sV Bz8\.W|K}qP8 ;ʤԞIJ D0l !PD$a.:9U*!8 W0dMsvE.R^w}X Ȍ}t9ȌRJ$bxR^NP\Wy϶mLe>BM^(eI,˟Qrz,.Hyci(E84cA φD83f)F"mאxJ"kE)PJoE4ұ,"?N1 Qp]'YW#c9uJ D_Na/e2ښάk%IR[h[μ3r,_3Bl(*: >z LoE)r^J.S5P׊[ӷWu4Kr7|%c]9/yfAtVN,| 8Z`vK$)7-FfMtQ[;o^lS^35bv!Ovn e%bq6eZ|||s9Zg>Qs1FV!$xV.4gp2xXޑsA@ .ҀCSsBw}[4lV 6]p!&PZȳ.( 1x\Z`&k@ @]ֵ3\zkX؟'zh YPpd`l̻/‡1gmCE*6uug>]*N/ȝ;?S+Nbޙ5$dꍞe >І.X\+ՅaMB %t u6*j?a3RfT)K%hbf>rRr&$UFxU"۹۶/ku?jrD'D%(k熠ֺl~^ٕ+ n7 9;kg=/~q?}P<`AT^]Wg-RR-MY:9l)a``?0a?PEH9q@)'1N#4 8]r_2g+ym1Z:*F?o,gZُ/HqU s4X/  FTO@\+JslE|'sg?%˙m/9E$rj+%(\LD;i#>Ati(ҧ0Yv&Na'@c-7@%(TyҰ'f{A'* ᜖z@ϋclHy8K@.]/+RJ8,wp+l 0}]WL^eشS{qR_&-iGC}_{~]Bԇ:鵮"ѝ Ryt73h3EvBvٙu";;E]/8cV!>%r$4s`]1HoIy vR*"S4 ˲Qaa?Z#%Nb|00cIK8Ҁ##37x !I@$0NyKmslp\h߄ (PSj;Պ(7%C{?gK%Ww93ˉi7uYDZJ:ij/膇:]@ 6rPROt1x4m eVA:u9~ _[Y0H1F|>K~\pAzZuMf^Ј6)?, 4 VrT4)@?'LR uܧQ~zg\`lh!Zî6y}kEfj^*i/a8ihJ-2ci"qiAq`h 缭K[t=Z<2r\o]o?>Pʉe7(D!yZc 䓕HHkHi1ܭS] 1d(0sa3:YeHN!8ϧ4 lJ+l=bωFlJ8*Wg9c/WMsy Py5s81wUZUl6767_);s(H:1~NRJen.I|ϵdQ%R3:) k@$r5 |àGHGu./COѺD\Y< Va$SC|x55drƀ\~namE`XGD]W>Xoo7\nĔ; RY e䥢۩K4j%;7eֱO9̜M̹wa͋43c _,8, &)_]܀v%) )rr BSgyлޮ 8‡LAumeګU0gMe_(lkUC a"w>/`ߏ)S9Ng~q湾2 M2֟Os.F&̔Z_`r8>"aƋo]CCVx>0DES .[Er|A0 px'31!vtaga-K5,bX6hv8CEX.w{+Z3RיvᜁA7g΢t0 jJ;GsO]fTns/""۶xp,j9>8Nad B/5=Eʼ!x10x>j $Sߐ* P!4h"슾@Dnxŀ:*>;wN0lS' IDAT*h Sl |`?efnd򙆢J5?J"$|.T{!d?[P*}>wDt.m{gCQ$?L/Rڠ'# noLcX1/I$j _f@>NNߊH{:PZ^8'ѰYـŶ|+a\uveG.j X7b9e{˙e.4+uF Әu=Qj ۠eށn8˹[]lu<˘jȵd ;*(qE|^4B> " 0k]zJksG-T1F V2|)m$-Mݮ4$d\(8yxâ*)O)gVU0f.-Ltj'iU1gZ`w6f5($c+OM`aݥU:( CY1^_Xsz(^%t-"ZOi>j$9h-e!nJv3i쩭"ȋf03]R|(5u6Jbu!Ҷ׆ZJn}W8S>Y2ZbzVC@Ko?>þvH/xҘc^~@CjEU=H|n3q;ZK4x1jj"I0`h/EPpr;M ƞUjL (0â6@wQp?)C~| Bv&9JxM;#t!:ǁ Z34$΋:榪R׺VŠ Ⱥ2]ɋNT x^~qhͲKڀKݫ" 5:쵋f;'a2uXSF07. QF1a-8C@VAU|wxefxca,Z>+8RrPƀA'6.`$G0i-(g}&aب|+_6ġbrpr~@|{ƩauBP %iHyTcg,\ =T7S ?M3jtl*{>dch1_;*[ Fsw";`FG"`Z!wf8Z+@i t(<3lt5R5NEN6^˭6}λ:EuHx'fr=4|[ 8X',C0T䬬w^R|_hg!*ǏO 9ǏEˊ%Y璧WG*e3L&>Ⱥ.oQJy0(EͭcQJT5eTu3pəCd!Md>s.XhMS_(6@7h~[i 6ŘÏ^I |A/+A+ %(U{m?y,q*ud@1ٚ  x]W |hwWHaBy8TAŻuW>O}'IWZ LC/g,Xi=sF޹`&ycMYhx>*: OF_w|I3$z+GApg|`sy\BH"!ff1_w]ps;!n@RN{p"B_NsėTs399X1)}>.E A5m .ǃ~SoDKPL3JNaJ!1,(A|'Ǟ{1O]#h>*82]. #W+^#5FޑU2g.^VN7$ٸݟr!t]cvC\WcqlЩE? SJ{o7:er"@5^gs~擣'X'I!Sb75;2-8%- miDT$ (D GR| (j5&Tt XzF>Zӂ|6jrqaly`2Xd[`q8Hɧd ʗb̀5Cz)%O6# +jz$u #&ƠM_:A}լ??BI⩢~` s& yEA~% *h6)n& s]A*za;|D.zDhfl})'ѱ$|!횉LCHڈZ\eǟΤlqUpWCj^o [I*͇WTu )/F*\v2a<1B}+>hSʜ=Yj׍\ֆ0dH3di3dGpN27v`]$^5F4!WAm'/ x+j%wcpFOs ׵J #-]טЙ@m]B1m瓍,^Y9Zq\pߑKA˴Hc[/b+EMHE ֫HEK[B0͘vsch sv}gsʼn};]@֛HԗqrV@ooy>w4 [Or {ԋaZ^yK j&M'|Y`} (=+&X9Ik.A`ӾсZҩV_avfI5/V~E4n>|𒻧fG5F(q22arIjYW\%^jc0{!ĴdH m1fB糐xh +1NhH{o`]@'ʸ,(em&x\N.'̀yb׉b)șZ #W+Kzc%gx^23'@'{FDV ʺ4,*0d`xrp;3KZ/7cKSg )ϰ|faVy^O^Ee(xI8;|LZx"@Rvy7a7heg ^*`EǏW}.aȺă0h} gb\K4ʓW}Bkm )Uy)`CC5+Qȯ"{β,b "kPSO*^q?vy#*{gQʓ1EA2#㤗T:_<,瀐71`Ù+l ~.k+}a^yL[OαJ};Z0!.~yX$qu]gI壵~FVS7ňJ o=k)DZ#.1 Xټ].+ay t8HY;QGELa:t<| јZeZIOۦ V./;nHǘ',"(M&ɫp8;r.8trݰ )N<}vӿmyr)IH҇WsղN6Lؘ!$˥%S,}(Q@ttߧE(;X &AJѕdm}@\V ӪxkoBQkkp wk8;j)dd soZN%M${"41H^VaZc?-k6.i)MXHg $۶}ӝ?d Xx>?^/6Z_ԑ"Wu3Zk}"xJ:`X,"$V$C%Է eIޥp$- 1k,P лw γ(p# DAJNt> 0 ȹJT@ZV<OPl ) A}@oB[k\*9Ѓ6^J勵U+&JSjҸ4Sy m1$Psq x>q3])V H*Іo<Ӊ`P[A-ۖh}@S>mxRڬO&%d"692 ~L9u :t6ww'6Vیiұ~<3C@ VN֛ׅVB$Ϝ!gm5ʺUE:jc,DaAf*Q ܊[f#GLhPn-PCo&d6{Am߾]V λ_h\!hkڽ|~<%XʘpLy-eUQbsV<3Z6#cҿrXcPK81oĦ9 01c]8+&_u[E9uVZ w.PH+r#ֻv>FWw5RIZ*q#` h'zЋuL>sʩ Ѩk$1rMװR);ϧt 4

S0Cֱ&iv#M>Ҝ<:/FmJ}IMXz74Kv7nc&^HKs{rŏǥ%>I\/7$A@n @wl>ܺ,|9a\ 9_Rw~2ה9[nWJYdIV51}e jXT Hq^z2W9o'%:!>,{5KS>EH"[B(bg L43Z!uNeK.Y 㼟خ8c$K`6s>H;~Ƣց)SO\/|@E8g:7͚.(1M6T{obd1`j{q@$f1\V3Pc·%1Ɓ }idyq\i2*UhP~Rt<DaFS֚Rgfcdh΃/iM8s0VP)i\^lZXXAzk101ʽH1M$ ևXdhsթ}Z\W*d/˼JO>,I@"]C?5P5w>C/Wu*AeQ/N&aiK 3N!`PrՅc؏Ay¤eH1-<~qUV% q;rE R_.*F+B X׺*Z3`B.A33ddY,)y*6*w}-p|nj+!ds!#-!0mYR8SBaܰIx3Bt{JnH*eHΒD 3cGd% )"k`D~IʢLtO:w#دDRL~t2-L yQ*Y B|~~ hC몉EJMQ>?>ֲJ> }ӯ $ll۶3!']".j1X˂RN)%BB.ۛ`'bYxď 5e6AkwE{:;`5 ;)/-խaxEk/L#peCi|`Y7>\Cwa8K~d( 7=AVD`-3@UbRdؽIk>c޳ҟy>?|@Jq4Rdja$3RD6} 6<σ0#cQԥ.wF~;81:@ j rJ/˂$󵮑ީHԵЫWipBüj@eߧwi"_β,"T1S:m89*BEAZIi(QŲ]MDGFo#= .^? sBLn7ܮW|.>WqI_sǐYqNy$ k,mE 7AwxMZօ<ۂR1|W(`%nMlۼ7Rqfsԗ /x!gsSVpK&Cy3zv?6f#ʈXII~H_r#.e=E@} эttAUiIx<>WaPtpZ: D!yZfeYT>- oo|^k>tTfAYu/׺b"­x>Ig@&"]8$w燢:}Kr_A (L? &$8zKsSb9o4A S`JSFڗǷoo {cTh(311߯8'Δ{AO8p.Hl7Hy}GBDu]AtRt:DHE)V:;,ysWas{j>>>~jRxooo/)rR"X+}jzB cc[ÒyYFfS3&f=VfS*f ^ J>9ˆcѿux0FʿUM:T_17 boo_VR$\$@HıR*qvmVIQgS7/\@. Zc IDATw} *`pv$ʦfhѺK9Yg:S~\oV[x<ܿy{ ! ElHJI@`λh֭59 znHgG)_cxa+^*b '|B`|YGZ}v%5^Ihg4׺RN!y{ f.u]Wmk{/Vi1`99ga (%޾:VY$ɑ&vU0)rI@pAwef_vfY]K>nDuD4NlƒMMG̞$kI-Mݍ;)R\|zPT{\51lV k.Z丮׷W:+`~50CauU_g 1\YEZ񊐭؉`!$s:Fu:$E>^{F@`f'z~zmiYZn$uWoQc XWv岚Qy@n ]/J=-bdWE%@ۅAJ%QuTҾPsj-8Iwv}ɻn]y *@ 23F˺"U5V_RP'{ NEr6mLs".ӐD<؃:훊QGyV{-ÁcNP<$u/*:"qI\;!}Z:z >3=??Ѿo,M\śxw @Y}8Z)'nx<,S 4y)(/ A &QeUv!WNOFvlku&L&spVt"sYt2$bPEHDr1be /~ 4Nղw=bi?D}OtEŨX&|'2gnQmۄNCPKWz FuVܕ2 AyA#1 pк{0E-Q͑0 =y$_a c0]2 F*;PA(%H5˃ j{^__G!+wАN1;EL=x<+0O˲k҃29BRf"mQ$-샍%EhgzWy1Y7İ:Fiɍa}yD,CPmcŖuq#6."]1DD:^VC\6lxPYFGܑrR6E~B%IDǾE{ʮ̢y}*ŒU2kKyLt+]r:OXNcp-ofqLv+S[0 ܊l)l;G&/KϜK8O,u u^y)h ˃°tl=7 xi;C/ I bҭ4I\Wz}}a$SظkN|6"6 2H!K$N׫ 8iYVeawG2a45,'RvX"acyZT$xtt`9}աDz-Ku%W2=JI?:Q=J޳8|9۹yC08y=8D108eߣAUr+˭Sщ?&=@cHoX!*ۓQ5Wkqkb8qŕg,5O}ʜuܩMo[7͓ ֦>>^?ֺ.A,d:((G+ @BX"b%Lp"GԈq+Zƾ++T"ZqM- \;af gypfY'au"p /nY詡Դ)dJTj}$+ZL^~SNL;) \\RSl9Ȱ{lf3R jx/LlM^ y4"YG4u0#eS}O.B`[ [Ǟ3{[;bT/;Qm:(qMz3؄MFyjeUW%C\ո&i%8]XToHwn~/;W\"@{4F)VH)*!L1':#uQ'tib0chb^ө2/, J5mVTO].V*Y]׉CF>0r8st< R`C*G7蔟o(+YUp?=u.IB{:d5T\kCFee(s2x:~N$ԏ?( |{{lC؋ZAj۩-~iasƎxުXI !XJrC$^ƒ,<="@|"߉aCP WiBAa*$A?'l8"w{2' Gn2'*!{*Df[{|-Dlo+vvB\ZMFW%e+9ӞMѓzMJg뫖fkq=hWYr˺~7ZE!Sy \:` %Ġ/.ìM0-5ƨ_*P$bt}R.ʺUEO/൳hإOۇLSӲ2~#|Gt"8SHJB)5mZ01ʬ`$'7j*)wC2!yzhr$V{vc&2c:4y#.*tSt=1 џ0DtBMf2ò<1'5/ȱm2̙HPu "b&(tsc19Zx'l׮Ӹbx]5OT<Ij H$T>!:l0vLocQdl( 9w6q6:yZ Dዣ4-E MPAyz)+!n=DЋ~/Hp/퉙{BrOL1eQ72Yovervs#QN~bpc(@g,%P{V}%uCŬ$E6˓E$e |,Xsg5:6,ĨZI0._vPI_  ,u0nW6e5#4ѻ"84 ULTAVGw-LqêsotqN`#XIf E]P΂ UHZD1RȈ~ē˥gt EiX8 Xhvl(RYD8.l5RJD)ujak,GyYlx6m ҅qiHlyѶo6^o4}dsg;d͊p,nyH7g(Ti>zQYF8vEi $W~S., M&b0ӯfp4Ok.N+"ЋH5B۶z}^em\! Ԯ!' HoF1D5{b"g{=Ѳ.Z:MI,,MH|aTHVwVşDkmY#y x)7 ƄFۓFZc"!yM nK*N"Za!2S*&gCMdr8PBDo]P2eig aVJ1Ϟ8$n7LE374s\$JTC1V@Kbwnwگ;jdD|w"zXMǔxi-DlqEtҲzqcȡ5Y4l+m. {G}0t~B2;sԋH\E:ခ8u?Ax~l*8gtD,̚x! ?5CȊ?I5x1vN"SWy -F$b#| yMև(rh1D/?׬G|Nku].u7EwV9a)O\NϠM%Ň @ Pr/7> ';T]4QJ޴pX/(z6=M$.(ۍw}1rkA1ØzYժy#86=`29#Ӷ*1ˤP/tjXג`[z6fvb> YnBWoSo4q!qNJ%@$q\hz>ϳ*;ۓ]+o#qG\(la>?#s&:T|:w jSҝŴKD ;҉ejT/||WT\aոʗ4z{zMHܧp C:#"쮋ӜN1(qdmxih2/P0 d_MCX{j 6*蓀|M1@ 6ΥZ2-D7 b'wahg꺞-ǜ6.Љ)BVaE7.^3˷X*#$y#TrcP|DdmGdX^%$#G`;3Q\ 7=u[nڲer1 4Mt̺"k25_h>h.)pƚbxo+B"2~'vid>UiObOt5$ YL4q0/OsE1D yR=OD UՖYv'bPףrKEIxYijFB p/P@8G8tSKNjd$]iyOb.CDdL:&[Pq,DM Cc<uNYGA )aṼ5"bR#U</FVw5%\0&!:@80c.ǝeWr*<2!SѩPbC.>5Q }pd .tvM5_;E_ #6r%>7aaly4[2+(c۽Q"1B g3`_\H}(Ջ#~7xȍau0 tJ6B(dȪAKd ]q{N`IuY] 4'ܟZM yz14&b|g*kyן,a J!>X:r9I)^p_/['J8zWm\A]v ,!6^Ec f/9-&LM5D\LiW||g.ӐJ_,Ny꽶U?oQMxo+W ߡ B:"eb|\/W]t]G벰م9&I?%><r788XHUC8z!]&,LyqFJH^02BJ~,rVy.8@|mu7q쥜d$!CSNDJxy=9 $Yɦ]80B2aޒ{BADVLەC6*Veu+XVpiPEU E8F>`?vC C* tYֆ^W:++;H< \(%!l|2r.i\V[q|$x9ͻ] r\uԸ߱?i( qaxqa-QmL?ж3&Z}^rAHd~Pˏ=Dc L}GU4_|Sre4Ӻn'rOOOoNbTa Kc]vbc0 ez;灎cx Trabtdh(Tb廕\Dg:A !$4F1Մ>@fzײOOOLH4**N@!׎&DZk;zH@ۺ2[6 В,9keSdFjPn5_; 6&_ -UOnJ9~x~25N.Tܹ IDATLmMw45ZNJEJ5yk݌th'4^^Oʻ,)t;.8Јm!m%k苮p(&$г-'cc8D­ ⸎cR).ۻur6V3&4O"ZNg"&9 ad0O:cIeTFK)B1̬,R_D#5:A+po!6Shl^#6 9' !_ʯ?=Q^dZ r3#,Uj9KYJ,f@f0Lb2ķkŠPU]5 Rh :јp$}Iuؖ',@F\95!s.kFAB N3JK_ ȕAix^4ՉnOO3+ˬoCK,@%5@֎ByZ .C?p됲*ƷClƘm-hk [y -ؘo2Ŷ(>Bd6D&S8vJUN pRbyd,'"@9[BT j\ƲI: V⍱2*fQVĕ ~Z8ȼ׸U͖YE`;#4=D,aLA)GaqO4O [FbCͨex;43\dh#KY̌~Ӂ`N[ZE^0/1pducنq޴מ±R%ZO8<]i#=6\gԶXKϷ'x'ڴZvx^,j|vrd:ǠYQmD$P/:DIju%y[2Y9HGh[3u/0Jb6u]9'~>}c\5<7wqM\e/W]˝p0>rih՛ l!;ӬXȀ [αdavqߛkm[L-N'OӘhX 3iY owZ  " ( Z3*$+p8bz#ec1LG88/=P 18 gR0P4@J4KyX7Na=?ȹB1T()bxlb<ډou&2JNH4ۼW΅!)R X=y͗Tkࠗ")ڸB/v&+*.ϣŽݮ"Zra~GY]׭@ϻA1WyQ$k\@Nc'e9ǵ~/E?.q}ς˿]WR1 czmqڶ˷[c ]<+z`-jU'!;qho@;: @(FAٍŐ]V^xROҧ}AVzgXc:$G"Oa9N=+X?ƚrVxF`Nbfd8_f%B8'nZbb"#a" C?Ѻ4t3ADaTUȊcLK˲S鳟YAۻkR|7h8Ic/.}'WF^$CV=ꔯכ 7Mġ }yu]&'O6ѺQNZi(N܀S~Jq׸&_W/WqUC?VxE9ꕪ[A"$HUA,ʐ, _<Ȃ&NJQaiwN0r`M9 r6n^:iTO@3ƝPS&8 ׫h"2eGvZ9q{hTBA䷸"b08r\|k%켭AcY 8"YKg`w}O쭗ZRd]aF'nkzkD>eMܘg{W&5_KI.8*/#`F=)Q^_wZDm{4!;qq_S!߳yfSMh!z~~$\5͗jI;[{XHu%7J80Ǟu&wzfrv96 ݶc"{_L =8w.3J.0RACt/@7Xh?5 1qz#1?ζR+&pRMux:vӎUtlc &8 Tr.iܔ" vKUaxԕ0{ڏ :J: j5gcYD"ډW+rRNdN^ , Ϣ-{͌)ұ1f6j-5ۻ0 $H\IL*jעNӬLiT;y6dr%̆ȺCJi]~'z# !dI,Jd)jl%Bf=Bc?ES&dkcqz.~|"1#05uqUBwAV0QK-7B9N|HXם-dR="6SʤkޣE>hY PB Uaqqd%l;uoĀwq-jޚl?uN0tXڗ7='y:嗝yܬ[tj140!m> V( 0X9I6+8G<1F_NYBTcUYhtyh\I`D:3EՏѾhv Yeq5fӌ#ٲ,gJ"q<$rұoulta :V$!At̷Cfʦ"`S;^j[P ԟ=U|mh ̽N-IWeʞ5R? YKZ/1_D;UfGi4 qmC\kk0:Ք@DDF*Sp)hJ hNYuo%~6I8-8V*V,Ka{#! ZQ㇛2@4Ѳ,,%_׬ | !63x0וƨJ^c\K=z\SWոA}O~IK,J .P!]] M 4S/*lZ|~4O*Aкn_f <5 e? UQ fܱ8Do$.`!@JA:8&nO7,h%DaՊ,5Bq Jlwua.bw;r-Ғ e=r@=7aqktkj8EpT I/ UԯQUkNS+Jh] ^V/LphfgYpIq|k}W|?kF)1qcVoU#OiXѲ N95bƸ{QAy(}w^I{_eQ~%sNBo*5_%!}އ]lA`뇁]-AqǸ6QXq}Ij\n:'뚉a~U*r$ص!;T /D>q3-x#c?qE7C\c<5}ЃhwqZe~=>,qMzg|n͚[֚m\72#b,Mf.TzW.j3k_i 겍AN ]p!9I áSվoSk#9r.t^~g O.uk"4߷raVJ{n m֬TZn^~к.RX RfVdM-!tj\s4Ƶ!]ӾvĚ HXīӕ[s1׆Qk9J\cE)G k̲_.I *('A -ςΜUTƵPR@c=cҙ<oZ4tZ2W?UWmk\+7AaSQ+q%)ϟ?遻IkؠHף̨8OĵI,JԉnB:I6V6 CL9 `|cd7ݝ"d8/{,p)~4>VeKVV/ $[uA_օ*ca(=y׾ZE10&* oju"Gm5COgZQV:LWmc M9 n<ܼ^(1CqwKq|M,XhԸn<ǵFwfU6,i4j\[U/ 'AȢ2eY3D+ͩH'},C@_Ȑn ([l4(}+؆Y^5L8YCBlQBe+:].3Og'moDudѮbYo8iE4*(u:שzk'q_I,c!քuO`6׸uof o/4䫨ָn'u,q5W+uyr 0qS;-4Odw9ur8w4 V'y1 @5֐~RY)Fx ga_߻B z3w)Rbt{m["lFaif܃ǝ Etu}8@˕pTF?i֗]oRme1rQxЈI4N15֜Xeu)Æ-ZD/skC%IהW\<=dV 0P*-8t۩_//t]UMƵ[c\mWF\}՞؀⚛>QE⚨;+_tU}\Wjz5qݛB"rRMxωxSoFmYG42eUq 5^_l1DJ"?VJNn, 0gVC( ODҧ&{`\jA=@EE,ˎC"w^:+RX_ .m8)-ʳM[JgkwE\֜^?[z%|ՕOcw:QX}yQBs@ [r\4M׶縖_&_ nvp縺qucU],M\q!\vWCUk@c2ܬS7ؗC6HNv!zYF X//d N~2y4t6C7>ϗʆНkGTeĮLlkhlCTj =1rÛ"$ѸƤ|/ڗsjո6C@_5wdh/*o]yE8U׬>|]yJzHa5dZߎkLss\< Ϟ^__ŕt5!_eXB_˷+qLtdg *8CpۀR\VZkq LȩF0Z]׋b7 k ۵/c\ͩi~]\In'*ӟ xqJsq*7Ъ|kn4"I~w]ew~]o.zr&h0GUaޘ2w=ݶ:YY XR0EaEaÐ\R2Cʮj%v^O0Pެ.*NH7tQTXT]"k^E  1F91hV%uԄ XF*%6M MTq  /˻lgm1L"JtVZk׃m&IY =lDqH? c\s}ׯ |hRFĸqK4A evwiL~꣺rP/u];ڏb)(j"͞P1eѾ1;C//_tOD;ߨCe;GCTdk6d{Z eHDUEqjJkKɾԗW@-Ea|vY ˋ3IC.$vE{iy&Y|5WZh9_ {h;Fߣ0L55q6RnkWt5q%]yFŵtWs_m ӟ(g1xT!UoX<LkiRd !X)a?@?֎lx <7[+T(8͡z$&ZjTXmkF$(3XD?N9(#5D'qNʥ/J~5ӮJ0U} .ǠbFN9o_W~Yq)k@ȼ6k9&@j\<vP zV::S "_`v\|m$Q[=x,p\&5`sT1US7IubX0J4j*H)H'l XޯZ 6[%I 6R2**klpg9 vRc UtJ\IrmpRi zHxaA.xM 0<:aW}-:M1=bnX6D'N[ktL11|ZLӄiᰨ# T9i+.кޣF8ue Aں.hNoWĘ` )%YnMs u. cCȹ`&ay;\ 2n~3pp]Wp-;\/jvʸ*1WW:MqE 2 kx+rɨ|KҚ׸:\q-˺Bຬh9ux'^c,Kyd~Fv!mszA)tK6Mp 1"9#ru]U9g~!2 hZzRS-|Zk1Mnڶq>vCa{[Uda4 RePnf,F 1R jwW W: õ5a`a3F3 ue\- ךqn1!Hx}~FWϸrvCS7yD+C)p]) \Z̸:iq^ WmhP75J.8Z2J.)X*:`8#}`o87@H)*:4MuAښRrRy@Ek, ՗T}u=0Ƣm\7CUUZ@Q@E_#)QJJ.<Ʋ(zS,-y^:H@i%V}`7\ ?וn %u;Rʌ+o1Ơ PWj_^+_r;,ŬyA9s8=ZMq(^]Zq8#pJΈ( JBVH]H8Y/p_i-uB0 7"qj0M3w)E+u8pސssr!TYoQHb\.1j,v BAmŲ|j' ҔҮH͢M8ߓÀ^G谛 )%^~pu+eeu+xGZUn7!|@Zc1 )&qENmk0g%{Up\p9˛Ǫkh΢ g-b%tC`r}#iJd:|rr Nz4m Ç{\W5%"1.[5nrr|Pb0Ff'@H)" 9'%w1( MSkh'}Gu &`Rd\z{l5^JIV(ߧMb&Uo}o ըu]j%$%=it: |\㊶mQ5XוS̸&?Wb%(pﲇo㚵o^{kp*GԻ>44j{#bj8b^9(b\}@U[9rGI/?{*hG޿.1]v!~G=~עiva`ap5Zq&ǕŒp Dx4-㺾µzazz?\3N=eWcӌ%qp喤{[7}8jsݐYeZt >?13 AP:NAp]ޔ "Pվ5PZ2xT< ׋RKVpK^Uʸ2S54lZȸ^/pn,T\QuyW4+\/P! Ç$A+gq뤀tjqޔ/P\a oM^Wfj<=}|n0ϓGiЄ榩Q{M>d{^H/[Y2Bl5r->>'Ϥ&Knwu';;ϋbcRI2WUG꾜3:k|׽ EI{\T>_Ǖc;& %yU\𫘼 Op0+2W4 qYV4uohQrƼp^9k3[cY#`+@%WR~'^9yr3)2XcD\%N)P%h}+3ҝ뚴7,&c txE%a;|YXzRv+X =$Ͷ=f!J a#>gLi$m[>VER[:[۶pp;\7<ר8Ɲlu'^T8: oʭ@ڮ#\sD4uMt-vYxߏWcCǕožL +6˺Ǖ]Wf(9݆|+.Ơ-p? Vy$)+yU{_oHkN3 (MA aOp ~|8^y"rO^z^0g ))&a5i>(9MSD\)S~fkRy6!?Io{\I,.+q@C}J;r 9˂ +ޅlq xJ9^Yur(9s/"\Y_oE͟>d\||z1_kQ7W\:G5d`_/>w| QuMaRDU*eLu]<$rɇWU&'uaaS8fi[I=${Ra"YM`g ^=ʍ)D&iZ9;_?Gl4-6(w4 t7I[*hy8c*7?}ӖT_DvdeYX;N.V hV[T2c/-kxuѿK|܉v RW?A{ԢxW*׮p^l OWw!ŴW~E#[e2B\+`%?=q i1˨ŋ@A+4^Y/{+w8\ռs#j4_^ 6hoZ}V\3C1u={9^U+ipה```"\+\9{K, e^PWx54jI+.#=?D{up͠|wb^k>VzFNd6xSHC %@TU3Y a6WT^C: RGɦiVQI#Q^WNgÇ;{'hF pעSgJJPY;\Y#JenvE"C!4tzrNQµ#S)'2>ؙZks5`:SPZt0D ,^I+;`WpV A&-˂vI Dx㺋B5enKe=ig#UeGC@җtcK+ Z؇b()G{=,3 C v̄;PXq:p:=Ԕަi hiII``ԓw' E}\W=?lR/==z Y0NĞZ ZDЁ[!4XU=׭rx:Q^\9wPc.W2օqepn]bw3 YLL'۫H/\8uVS~낦i)^3 Wk:.d }VxKwDVjý,fCuC8 8+9oJ**P#J낆՗Y0{\wo~O_W=8S8NdBKn5h//<ܒ9m-aeArci[.?T؛Y! ÈGm~N&Hxny%w{p*۸ÇGϪQÆpBL2/8jtٶezպ3ńtUݰ7#x WfN 5wZ]kӲ3ǣ5myx]fOqV(u,h?F e .^{ Ot_R5 !w~J. 6 3^ }Xp3OOOz M(힦ugmU&{ VVgeJ6̾'uN(9:Ɇ{k\{k%W" N|{5[\M37\3i4ϸ WLݮ)i)յ|匮QXr7',¸!%64쓽j IDATRǕa ^j8^zkU?pwp{\[x}:ihlG5^<}i- njmz8KPN9[X.-^4܂N󷔀k[Av_nL*\|',8)-B=tQQexTf fljmDO^52lYy+>U/o7)|s>u]p Iki$I4M-PAe)@NnZOGG[&."5Gɉ@RiC72$n @|׬ Dy7\Auxx|@pUg2{mHr|W&jD obHp%==ӧO<ԺLXo:DvkN$sJkS4dw#zUO{+}>oR,s"˅fYJpy>xL:缃ruk)<>} D~A Ĉ3\e]Q@p:)vň=C^\ =؂X5EyF]7X!nj,ӌxX ޡ=3.WǕ@{iOxAx}~9exQ![(K\}Iwi)Zz 1#1&vzkt/ 7VZ/zxܶzӒӔ}oM&[YHr ]_ը|f: PU^Bܦ •gFvp Xm(EwUcD\lU.MQPUZ&kJsG?0hXD,lۢwo&<Ȳ붑aeϟ1 l{%fORNp0q½9^s<@e=$Eڈ G~[˃Z׊KYcQ?A'K. qݖ>0)yA.kP_7a/=Ǖf %guf\7֠tqZXy )F{{eAuBSҍΪ8L2s[7zA1Ж8:mxߤ3_g# `#[^~L=~[wz8PcU E&^Ĕ WZ,c ~uV7~{KM]#:$cJo]ך]FjUU5׋$m`m9m%5k^#"m-<'2d}]tБ H%Slv]awjȉ (dC6'oqM B<<>Pj_ר :4ʓ-&J1aA[vUX2l4]k,?=N#: qq{b!Ö `W8cup[p ׾0X g~ϝ?Ӷmqg;8rbR%UU#m;\p:i)ZUaY-^y0gG 0p@\⹛eս|XM,z/##4dbqdއƛW,u}&t]05%I`dIxщmߺM:J^y`m4ѫMeĺZ_vg(j>֓U~R4P Mik~:L1n9m& ;*Lȸz˼}̻.=ԡ%9SSuk&9=3/9g"̽HƨVo3gide(V]MSBNX|C8 UD\"ҎR}I_9 mk~RKSJ}ǤLBt9쭶E:-j.[fjqm"n)aq{P`< :VrT6%@p |`:$VynӉ*,*Tˆκo;j|kqFg7\EA2- rٵap+-@Q ]؈n|"=L:+RT$bNO=E+.W4^9g}ǸN@kxpO]V41׷š 11fÎ.UEe.,XV{;Z+˭':v ϭ?HS;[nĨ]$ɒb-j.IAEE&t4hIGJ@6ӎHqU#Lŵ6-Vޱ7,Ma)p>d-T`fM۵ׅƕ 1Et<(e۶7l|R)w˺`))!s6!D:Skup%^#Tc{=4 g\¸NfMpJ q!HOQ++ĻKBWRrYd@6[vr=^J' Gu~ \o{⅄[^dRXnǁIqqSνXJYؐE=dC5e|QE҂0ے6YkT "7HIOʆm͞D4nJy}k Ҕtsļwmee\늆f`}x6`GDk5 -+ƁgsGĜJ_=MC+ y`U3b/:$g~w]8=-טwƩ=N {ġ㌅p]m/ȂfvjIʐhxa{ǧ'2])K9[ƫj,>xM8^yw='8JM,7/pڙ%JZs8)VZd5]Z݅>|fA VKdfM~Va]WqhTLiRNp#RdDLL["ͯ-d)[pw/ie?;NDA:\Rum-w TO3e%`e'%!P_UH`g9uƗbM5 nd q;dV:T^/ )vúlnA|8da\'\I4i Wlb)\E4Fdҹx]9^ 8| uZ r/*Z~l*Yv&2)^ fp:i7NK[v+R_] PoR!8ӌLsHz[) K4DF;*hH;u[gEv)3TXT_a̦)Cf۰,@yRJlyZۺxzeYyjkU[\WK:)^uM *(!9!m=톷cI uӢ;bF %؜aQ0d껎eJ2kuWUH,pmԼ D6Ņ7ͮIpZRr昰P!8et 䊢p}²̨^Q IV"HpqMZơ'rhg%Nn*|FA_|~1YvS^v{j].;f_>R;\WvYC=D+XLs7|[pb :mJF5ִmL=l%'t]O,3INo-M~74M)!ШqJ[ `s q=‡ ;\7Lb38JyeIƽx+vk1iMr.[-!qt˯gB{a@0O#i:w8u~|@k K\Xys#ՙ>oۈ}'oҞ}u*r"8ٲs>w2HU,|ߥjp<҃OE  N[{)%:-yH}9e[v[5ߛt]r}\WNԞ &=$10E_VKn: 8/0)S+*p:|" d Td}MP4x~L }Wxߴ^[{ e0C.,Àpkč2+ݼwΡk;\Uy nRq^:8^q'M)V \\[6񠡛.tBzvdϕLYrg8م)XR+w*YW3O00蜺rΔD ";4iv# [r2Cmi]ӭXU5Ĉ+X0-4Faд-ۉeAϟ~96U ,>~TG뺡r.aR"SqnZU!xMm]m{|'* =}xdr ZA>gCUU=k $}mN^6H $/X"6EUYt +Xy MI!X7un0_j_u]~ID;4#a‡EªGgo-l[V?`'D-\E^ @ ͟'n]n-)r$atuqh[L_UGa0J 5CaqkcD*DFRj'[W[|ϰ P;M?Ի/4Håɧ:c¼&aiF a\LwrKXԌCxUsmJ6^c#\QP:\Iq4#?2vjE,˝\i#n+e-# IDATgZAӯmZ;# >k 985gܦ&io5ʹ²[rZHud8ZHPU~kTzSUIU)z&͸,LJDi桖ݰY:(8p;OƟˊppesڜWk\ɯrfdWܮ7UuwUWʴ$?ۗ4ϒąpgpxݓ)j!#ɐt/9Ҋa]OOOjl=S.<^ё\ǽyq޴Azߑt'À43Ə%/?ahżF0愥 '".a!m;b"a%jwv]=>|x4z.`m\IrלtM+l6jS1̉&̤rGs!_LF.,:̤ZBv4Ԯc5,+ekJ=lhTds#pƢkRE(B]uyYs s:"wU^>n x]u(-{\M+&uHe3)F&U)^i"&!#T[϶*qH% p\8 b%):;㏪11-A_ 5dxR4UE6BI _ "Qа-m*|Tt'"IiڶEDz`gmǕ7G"eG8XǸ^ ĄRT2g+|v- uG<p*Ӄ? wO7]S7 #ɧ%6LjT܆+X农`ZYu1/3ھ' =(K̈fs)0pZ,~ *XatSxTf.+օg dL[Z1^ū+\^ڊΒ(S wE!<=t+?"eVqbijˊuY-ސ5aTYrlbYne]3^"-Q9OzT*l!9e/Xy i"?cL8G;y9ⳡqVoNk5k~R*:W5׻%=Es<kDW*ԴϏE{}%FSU7PUfԺ-yҍ"YE}=ۇ5{TM 4*R:R5uS‹@ԒS᤾ UU"z崧oڵ+\7KzRMؕIVaWE+.g!f[u'4M)@Rgɰy$[]WX bXyêG\oK`lj=1x8haBCZd2c] W0O㛖md-#&'\ȓ5=(Ljʻx}x +sw* ?P(w?M ̋͜sx87m7$`؍uwweEd ٖoQa۰KkzZ槟=>~g&t >yoW)х c\ai 琭XlZ{HC^^*%&{ ǵ̸;\RFzG4} _ 6ȴ34, ?|}jKQ'bA׷mOZ}  3z1EJLN PvWVC>O/1W֕CtB+ײ4KvttaQZrx-1y\We9i[w*XL:%W@}s~ǎ5np8VUY%RGqʑ۞\H>C%BT,9׫.g>O??pMx+IϦi+<}Z[v Z !, 糖.JIE:HӶTrm8Խ) Ӫn"ǃrኙGJe&Ypi-N5p{a'h"*u]n¹'ZP}rߛȹx<]Z Tq@6v[h@C}v<7B&AC YO5<$=Rb濇m\S P8 qߛXyOnƑva~h}H1S'pa;m8R4|V (9sq(F6X-bIF:Ѥ۶wJe]hF VQ 8Qbҹ+ _-5{Swjh:M䪫TL Lm 9^.WJv È*sq<g`"\ *&:MmC^kŃI}_t:1%9Zڐtd;L3j{C;mۻqY#;mGp?-Wl(-Tf?rJ"?7v,Qox<Sƶ͉G?e4i؈)X;JPigGJ4R Ri]6L܊, a_j.0' }jtfAReeV7ĸa(Ei1usO᪕c}#p +0RY;rL-t}ֶk->ʺȜa@FzVF9LB'SC (瞸~eۘsR~W 0QX{ a1 c3%xzۜh ?uzo5TNzhMn{5(^nX\d'I/֚ƱΝk[-`Mr޳ #o9oʺr҆e|k备wiҌ<ۮ9k$K}}}mkJݨ\1hwZ7se98)"[q wޚ8xH+EMP0d?X>Wc0tZ!:oYt FQBDFU 98ߡV`[S1@р2$g|y}#lc֭PNoȾH ćuػsͩ%;2ZC16pKΈ$Ys}߲4ǝnG:%Rei:H[a+Bgεm][n 4hpǒPct# ?ZcwخC*CR`Bvt s&%*#l;ky=nˌ\ Ɓ /%:9םҋ%BAUZvGQ @5[/F! 0c* 09g(fᭆ*H65#Jb\n Ͳ뎙Z),2~pBoo(hCvfc$;n/~u<;W6D"Rg^{Wݐ+ wljmZ: ?B*p9wg[nĶoakt{.z-(@X-Rw[lv,3Z ӄ!d_=yn8Yʼn'Тd,Kv]W W iLpо?p5(mtdPmJK"m[}j4A [`>|63W]1NYsXl .Ԧwvk!Z?9i:`g=*Qv@m+o (,SJ7޶Z2H56yC\?6=lXJ[>~č:1S S\T3~$(p8! ܴTDіb*]0GN+CL(PGnSx-@͒}= 4 0=H!`^70tݐM1kxB ;(PXCħOȉ`A 4LCG+aV41BOlixU^_Y)=t'2BH8d;/klqf}OV^kE"-K~ (Wg`{0s3 HzX^Zg^zz}J(l#֕"2OK+Dd^ k'е^pc>uyi2p<>\FScyD{NH/yY0N)zBf+ETQ}Ŝэ#BC c*&6<)+~ EXRDR!13K37p5ttt)f>* XB唐S R]4ah)GQ Žq[KmZ+aSZ:xۆk8 ̰h0|ĺJ)vd=c,p0c z9z_+@GC+9a˛q.| Gzt uyMMoDxBo(1,Z Ngf=&}Hq:PPfcj,1P8gSb]coRN8f^NRjeٌf@CFa ;g)~vط9ET5P 2:}Ys) $(8NP  R8\~ t{ƒ9 Ͻ9i2h-ٞs0m(9czaZBRO]8\Wi-v]zv'xn>8bNRQa|tz](]x|J!8Pa?u#1PH }Xd8p:(P݁1E$:4$%GQq ija~=?ٶgZsILE< CɀMe8m/!_Bb-˂u]XԶ4rS7KGz0p MGkb9"_)%HixDp4ួ1=2 2ᘰ۹4D"XfExkaFmFLZ" =,3V>[@tzu֭5C簮3Jqo47 ( 8Ȍ {z+nHaQ %&& T dэr'hp:n++n[mCw.:Rcz wÍ_k;Wv饖Qem_)W*NӺQ[3>#ʾͥP ;eVㆡoy1FHfKlbǑZ-ۜafi\=n6|~-4T%pzp|)BJFQJ+[W10X~9%g7Ċc d5_e?2-}[!_^^q^REz¢Dp \8#}|~s8x6:M F_[ LϺf*\ʔYt]׳pük.ڡ}Є6H.Z+7(~ZA_ən 8??#1xz(!zV6S_ؘ_'&;gQ H9IIe8x:rGV"0s_7@ž`4YZ#04Rz*t܁MMٖeoiy(hz `0^.%"H DqPY^E/ sMjLoL F҅D> :mY;،J2wض|cpjN#.KN(Ou][$YevODojTƔpoʒf,Y2C %HdZLJfEY{g) È2zF :`xrUGLfg5zo@y$~@Jvik̗+vhk{p·v*tpйD@xO1b$&m]J VKU1\WW^ٟ?#bt<ܞ&چR)C%}^0O5o;|Lשv/`tz^R(LM^|E1?(ܯ׵]w92X׵ F}l Hd Me(G^؎@Jk{x_gy,l#WjajXdWM,1b膁D+0c畞Ҥr|<ӧ_Tci` a889qZtZ,(GnWhT(J0aZQrІBYza_?c4# k0-;PYTQH .3RFSB׊|nD39^E2rxǑ)&>)MޮMO U'f49xA W?aË" Jy m+ϴwJV|; ?sݓ|_^^FȾXpou,+CK#D`FxOY~3x$ɲm7Mc Ӑ,F%y<ʑE~>X){:ȃE5 0 wYfJ-UEI|FH;LS"H_B ;4_z[L㺭!QEC~#oס{q1p: ۲ sB00ZcY)ZՊ40;1%`T(H<@E[<=?:}"R() *gӊ0)fn3`rn9{q*EaQWKc"FyX~Sm[)0DU)Lkܣz0/ eTy!='Ղ#Bi;_e!h{b C|kn/hXK|??{)xTN'K*W'X&(uXPX+ޔBn[6+K;V:GpUp b^߅Ǐ 9g<L2 d'yyT5f<^&3qix]|qj/8\.$Rb,YMʟ#ƥZ+8 )4@d|W `<8H:sx{},Xuc?MC@7mHYZP4L|uK=Ipi XS*#m8cVa8\an@YmY9H[817V`x5"_tUޠ# iҧz6[\hܵnqoM+0G޾{&yȮTԛ&@"P'p=N'*L%xw0`jۆ#J9é *)4# 81px斪sv@V習Ԋpvgjj7 ۲\v3wjʈg0OkU!Ak! ֐ ^ <ȃO\Fv ;FT!-M)yHx퐛 j^CZBXCqcXJp^k5$ޱ^Z[.g`iPr{'Mx2.۶MH?^( \`߻1VE"K8ß?41TVq۵u]92\O^9EcXi|MIxw՗FklG?b$Q9lJd Io򪀐b{0rr1BDEd)gܠWzZ8to;r)pc9: e6{<ߠB?chB¾M_k ۑ5DƩRri(dV\2p Ur Mhy}Ws"+#w*|UBb]f4 >JMR-zߩU }Wؙpо([Ts)/֖0Kox[Rn^l{z@PY_P +4Mn ڐ/z!F>yR06H+ n+ԶbɰDC+۹9BK{,F/g a-폵BܨץPb. K<_KE(N9)a%yy!W=%9P8L0(ԛ K%Ʀe&G]. mpap\瀡py"~M099J7s7[cFHضvYP qz!pDSJMX$6}13^z-|+]ORpK2_TphIl35|Jq>(Nk>t),H$b L#bȤ_0\|k{ҾMA@0mf|VL~;TRT r(hb1Y{hTHRz8}ý+yQA9@IµbpV)l iewPFc^T"+e#})q)AH1ʌCW(4+pc8&AN*35ZHE"[h8 JuH1`{+mb Լ6װl2׫BSȩ]e(iK*J#cr([QPJ`0͒+÷eYC Ä9@sdg!Iq&`j_=3]CsP;r10 WSˁ#8%z m~:yO\ki sVizt}c-B f&ή{\p&t`:LV <5D3(톕Pxu]$u^PRD8hE/->|%۲ EqYXj߱6qBf"MI3*ξu,q ֪}2:Wzp,^ϵ'4>63B+~AϷ[?=?\ec*$gf;1?~l,Ai)Zb驭%'=/0gZ|Xr-ŝ|p NK@Z{Zn}; p:3N|JsGj\˛SDH Z^(xyB/(D2TP~:&F <3#[frLQ 0Z;!{۵j0CD!&Է[BQ^IA8pdLu\EClD9*Z E_]+%TdxmmB0 oVߩ^(h(oxz }oR SOQW=re, nXm# :noTϗVcwB <On(t:+^?@AŝڼJ:x\}sJ0c74l]=~>kS@ߏ/nATܻ>|ѲlW@sXCR zJt e74 aݹr^S[~q:Oz ;chvᜆ N.ooƾꤷ Ƞ|Gou?HFA=&E^T2a(F-޼bK}^p^7`Kգ6ۍfD]U=e,.ksz%,jפ&Onj@:^4/dZA ^:rX6pəVu 츘dC 2(p#zgz@q_7O.`5j⥗um15qC?`ƑX~(/6?<CL;Wd_#b"߼%Aa bekpsM745ևut^qۑϢ wF?v m {zSɿ5'l,8/nfml(m_?y5A=y3Fۮ7 mͫ1mtS]>1Qvq{k3,Oc>t#_G\wmd cP.fa[ء]GʳȌU8,̫ȘHH#z18g3#rHN!4Y<8+XV:QK"JI0Ԅ}[ZsasBW-J\j"24'Im*_"OW~ zWIS0K.e(zoB &j77fluLh* BC%Q*P9$XSEn|ݚ^{xW9&oomQʾB+tb<ȱ4.Į_n_3p;:Rq/RPHqh*$PԊ [Q+(G=K'h}w"yv(c 'x{}ml&PgN&׍4AՂwbzxtD=v/gMVCF[0 TWʎ 3yX`5)qT64j%Etg|fuzo9[^muw*kK(\UKskw(+5pFWf!f.*jڧzQ:]TU=<=?r7'ͽiGL0Its߱] ~gfF&raznw?QV|>L8 ){B V(JYhݒ]E*3 '20 YG+d5UZLd7ԕdܐ*> m,)ñ)yomݚX!F=l&]hY|CcC`n߰pdZ1͇i" &Гk$LpҺ@Tn_7#[~F[MM>Xrm&,3 D#HE*;ﻶ29}k +ܼs9RT)x1LC)hb(}p>㶮 @׊#C5<::pox\H ] Rk SP{6ezWdTYEؓ&}Thmo JIGBUh;hyXv/h$qzV4]Zp:HN@JX.Ά{M7q$p@ |F*\c)'0p=9ב캬|ێR^ǙQT_~+ XjIo 5g\9m+a(⚓j˚k@ jhg0<,:5ޣVV&9t]N{d:s/k5 ѵҘY>vz_+׿R0w\kmbAdvFá}2p8`hʾmݸ^;+6HyRZ#>Y+;'̿[}aw e|d @%P\JE&Y4B"`G?9&@{q\Za4g$ CRg7h^.Gp~z6C%c,2s#q𔧖k:8228:hZǀ}0=bxΑr0b;9XM1%IAc6<9tygW!WH V r@J ; Ip^y, %+riK&k:W׷W@-flWҁy)Ӛ}%9voM#ҳk6ߪWb<M5T#%!BHoV X?P,I1R\Szk0LH#8'Oy) 8 馼@߆yc&6Nvō7/5OlWpJqvǦ=0":B\a5|┅Bm'sjqB͹p.Y@a<_m)8x<F,m^ Gk>ׄ¶"p9Z n9Fᘧ3 !ô6B?|c{FɕA;P8uDs^^^.FuH6b˥v(9ce@E4NV z]Udu:U+2{z5tCߩWx70Že)!NdZ8h4kJ3:ץž躻 k 꿾~iM_9&[c Kr<srphGt+Pd[kx$3 bƞ{?a 5q$0 :IR!] J+:2 f{ t(q:2 [L(9ƨUR}'%%ѡZ}a T\!ѹ*2t LQR~q:/P4w4vHZZ 2*5M/Y1&˕(mv7t:PLb-η5(phjJ$xOA ña^ɦ!p2xbAT!ݾby8h&N^~^Wx%H _\~9cG\WFwFm %aGNLqGVbTf5QHs?Yc, >Rx~z>&bh{z&v]B)r~{9|$DaF hҜX-ȴRm(\ZJB3/a8%GC0tbN8f#5#%a:||:##`+An =lP 2kְ XFk|~ϟ.&+'4y,iu.M`>a$UsDZ_ ~{,\K9cܮ7bZ-BZP!p4H{WawlV> mH$6hzԧB3,m]^]#k ׫zMZ$Q|8!+(;>|xr8b7&o]8p!1ew6V?jEBpQhk}۹g38$+ )0uU+|y,s;B. 3慪#8-d&0ZE ]OW&s}~v.(JaB)TO'l~u=~$`.sQS38u?q$M˱{ r}ʛ~uQ@PB8>/, K7uYv|IQ8{{_ms}xd.k(4##:C< \Kc+W<cJڏF1h]ync ~ F1{xA++#?#8JiZE2Kv[ǚyV˛3St/xZz*Ŋ`Gi!ewĖ0ci걎ڜ3Pj+e4 (0r;-CFy?U Gr(`<\CE3)؟O6<O"11! PARZٕyfC4E6*0)7|9ZAwt) 9LHR٘_׫ <,lqsҘʎ^ hi7/1JR r i\{>2 cGtk[S/d6lurD8Th޶6e QG,}~{IzOq Sy4/Yn&1WQ )ix-B#\u6-ޫ~8/H*`O9_`qDc3]]"awךa`m |"tI1#k4#R8Ap^o+^nW|AJ YҎeT7M̊/QNIF|fıjk`-R:?\iӋ+9A)bՆcyt=>.#Ɓ\YDES´ pruźm*i厮4 mǷ ;^ضNL>T~_ok5ۇf%MkYj2+' /S"/x<|>zOsנVݑbzNZ=Ca/d6cbzHB4 ұ Z}c>=RUJ3 z4ʹ6IH,ƚKRf*Ҩ|>^Bm6jcZ":Pv $PZaCB%^% GćgjK K±!0 +Ӑq|~HFQ|J34McºoY|)J hCx,7v9ށS!8n~<5Xz- ExmaE\v-FQ+,,O\sn[XɁIK:#g:g^WWG)e?!l7hLkƞh/0wk?g3y8XpY?j2R 'YaCZ7pBnM&Q(v䘱ۍ[0IbD}c`k^6'ІeQ"=TJSr2.~L^*X3p#9*b#0xS4aV8X0ԌeaQb`iZMlN8kpJk܀yYs0N=y"dc^Q秜b9 ׫EuFRuؘd ɌZF~\]͖mۺsrݟ߮_}=ʹLE!ZZ˲HcX6ha<'"9-o8>(~.=DȌwQUƄ +Ϊ0b,;Kee,o?R+clB~m駟zifJfU0NUCFRNm[ᅇ2ò0UXpARѷ<87W-4Rc[<+u29P%jYh @}@uJmFMdFJȨ?icVXbvHlT`("Sa Ci}7P+Z|||P~GlڛMҢ]F退n'dz=եi9} q\3 [Q֒kq8샾^Pӏ?q8 THG|@CtVL=ɧa8/&a@)'i(m XO֠ mJoZgM8R 'c'sC#G}߼*p#(}{E@*\%M6od۪Y Im\ s\c(^nADEؙ"E`4<#Urd, VkƂTUdžpbr<{GO)_\sA 1$z $ :9|M2#4/[* N\iȅE Xj L^^^DZe!|&_.9?}mh^^fMT\ι>hBl.-9aA۫YBS[%03Yk@Sh!U04/mhT4x*q]QJ4hc 8BG%73 IDATi2gHre ~Q4_'+[s;ZR|slBBIdVF+#QTy[mR@iWnZPoDɨLjֱsC3Vc/e "[y˷;u(h %S_s2%pȤh az@g76hMNjUDpZYLz~/i  @ƀ_?ᝳ5Muѕ}LY3jI=_RV[GFj?0ι!qMta,z!. !t0o;pDsO ❎!0Z| E0P Pd :SN08#,4r0*("IZ13}c]r,rA;(3 +_/D>Q#]}@/VLh1 ǡJ@hy0YEc8^ eA<j.@byErs*;55h JHmc}9p=V,LTLIe&<+1`#j͸]/b}L?iMAF)_}a{|%ϯ*a+UPb,|ێ";bwGĔٗBJ!LDZ<09hȄ|!Gԅ')c1"*zaheoD=JojnR*QP1fܐSrc;g%<bO=z< +oE2dw)y' o"Ԩ@jƠ<^cG_F+QR/۾؏^|W [{\F4bݶD =edrPD3-oﭵط Go65{|Y2;a5gZaKۇ(*׿m qm"}F)ZZRTm,6)CY@ٲ4O֒GY6JХ@eBűJ͆NDq^o+(%h5bP  j g&˥안O}GIZpJ;1Nv;E0!DĘvrq9a,S;m>)׫\/_5S+|\%d]'51ߦy~|?Ov9y /C>sm)=0QI(J<)cwI=pWyST$锾x+q[S{B*|:σ:MԖ1C>-a"FTm s6\5PKq ֞kFءjFP02R~@.,8oo,1smWóx 8x<_x<OQ\ Ehm{7=&v`F6 c4emBϩZ)ܻGnwSڢ@  8}RtC~Y1}F/&2=bX׵Z"VOHHJ3AVbP!|- l夗R4Wk Ac׷ ֕'!gޅA4EJx`&<g8DH|>+1ݗ]d3mNNa:ϸ #eʂ8X1Ԓ1Sr?04m` r'KiT&$,~&L:I,fלBaxyyq{0L[ӄ<0N#;|DZ|;kz@D("6=5"c'OBVؘZ Z:CnAXw0Q08̢Oq}<>x># sRO ڎ:b4t~%[>Zy^ۯA!kD+)Th0M^t)V DSP >*1o?v(p+#rPBJ( ≌ac'A)LK0m (wϏXs 9(-@ava,rCQ^3Fp~@dd~j9.rAL8{6MWm ]2d RmT*ێZ5P8#J1,ơc08O+%0JM`HtQڦHNhvw^_E+ ʤwE~Fk3/o+;+O mL]RKh$@ygo yeحsX'KE5q1FƃV)= ,43PyJtp^13_7*yzpHyYf|{!a`tTL*ߌX2V'(0:kfLe^B>?y (L(rB*F$"LP0x ?i _,1i\/ B Ơq$gwK4SID{݋)EUX6JXƼϘD/^k JOO}ZgZe׫u$pi] =EUk) A eY<ט"JN$nE .HJNSMg7Ph}6%V(L (而4jbJ2/ 02r2#{)1Wh!5ƙ1Ut!&]aL㮷}ۏ?wi\ Δs|"k 7؎0R#mk>xፔ/b}w?+i3ۡBk3{拽.\rBE6C24ȩkE;քZB8q\݈O Sacv'xLi?s. JӼUKN,{@ku[1OF9:UBI2ȕFB9Wkz#B؎1n)"X^j>d "ޫωUN\8bj:{*iSw0/X6 q`9N)w/s),K7>8pgZi*2=C81#.kw2.H+M;᥏zF3J:Oc4H)/{لp $$,#zJ]Dj`Yn<Í#iD,c>ޠP m2 rvJJAI7gٝrZJ$YJr(tXஔN ,=#rl4Њ|[X0ϴ: @ qd &:cӉ3E}R^$~LD)9x,^q2-enWoW-fNa襏R^oǁpÈEr}64_֫]+^zs6?lLBvgK:MCLx XŹ"K$q.5sR[}㩮 8rc}_p;groe)\sc 4rTֹ^:g1chn ~ vǡ@|-[4 ԁeA'R<mZat,a,rWښ\?cV7(VvBE Z3]cmWYYNs".˂"&vC8S9.-Eycɢ`T׆"' qs@ -y~(Dsς'"Kt :-Ԃui|861MQ%4Z[TvlH_W //֫T_V6پ^'S4OJK="@jrak-Ɉqix Q0z߱?wiok~RZavTQ1h٥1Ht_sh3h;7JPW4so Di4;.{+5rq,8St dǷ\!@$l.uAzB=7vza3p%K;'|Cp3>8" ljT56"B#'LB FGg,3 >~~CNt5CwU8J"h,9sgxH(HsvM, J\U{vɭ7+ڶlr&|[t6ࠫ͘^8 yGm];+o.T:lnMZ@vR:8րwOt俕JY9re)%KN[ m-4$J=*#<ŷo߰n)c 2fu68`vx*dr!(1 PJ1 ݠc ǝE}Wq{*C- ȉxnreNv{5،,EJŪap;bd9y`7:Z~öRaj< Bc7ߪQ~Ɗ3Z!iezqa T>Z/qm3J.}{{DLa\J106M9*~q.B,ݦ yt+ ,Mxh LCY!)˰pQ [Ztzu`C+KUA?gicIUQE[ #EFkicJ2VNN~4`U !&HI|)V:-8O1ee16eJF T*2oT#/s[ [ .l?M\Ԉ+ev۷. 1@+Hw@EnRi UIѩ:!1iƺmx<] } Ze|40Mc;6^9%ZJEM*I*JŠƀHl#ءm]&/i)2s =*P ^/ȁ3 )!"V^np9%R <3 @Xx:ns}J$zc}"?A2`U6D 'Xc(T({wtP=hMm,ׯ_WD9.]l \2qb)H{7!PzO - vYdgAv8i;˜\ъ;lPnsv~كǾ*m a^,3F!q-Ӳsw1ciW[ BEeVq=-(~9 AH  ©W(zTG~R<ĎH0c-siqs*B#Im=RX i?sF1˝?Y9g,;lYb !倎˭֏}&Вk&{?RQ4a~I y8!rAY#>hG8vho %Gz~*X) ޡĤ G`bslz0AWqz1uӨZDPRCN gHH`9)-S4?HH:}FY D IDATg&qoCK_- rYh\[ o//}1v$a#1g s2/P Ԉ0tX|B|7|?\ׄ mf^y 7."O\'(ޯjQ7qxd<qLdֲ۩b8N]w1?x CmYrF(ޱ* ^X!!U8b2Q`_*zSH=^ j("J6g4,<o~kێ7/(AbKZZҐb^G ֈ4`w` RE93Z4r KL_Pmsi ;&CdΒGdd&+3u2yg\87ćV/r$i wx<\)0@+;ZZN8 \3%P5')W m-2-GHVJ!+T-Ve28\B9u5WITɔV `Ye1Sߤ4Y)"8He\N6X2?J$`]7 w ooOx,ĩ21s]όxWx~<nmYAp*8LjEcz{cƦub,'#29`4}Hɻ|&o/rBQ6'`HE< Dg .٭P ehZYmDc,. MB)IC\u:oӱpȘ&ad8WQ:@]Hoh/RZd ?`۶n}}}|Ԋm]gt(Lv6-H%A_vi'vȫHt;xb<FF&ic|HtZkZ|!Z@//T:؞HY ?% SƠj7NE)Xᆑ^Z5t20x$a݄^^^x|<0OPs8X 3B8cAL*ɹGy*/h,80ƫ+(* SطtR`8CVN P `7|{2b`!d n=uy~Zu28Bk H,ߙ|F_^ @E8V ȟGGddԚڔ11eL!fA5[EZq|MI^UH3OͨyJH1CƑS'Zdlp&l/ޒF9/"dHh6*ެhҼSZwH0l~C4G4eء5C7H ~7FݶD *z\!Eȩv~g cC4xkk2YCBmJ@9Dna[QRxjq84AT~(i-ezK 3"^KerC9@:c"+i8xB u6L:DZ39y'_`g~0ijVfs\:xu)COD] L():8cQb h|{y!#fXejL-j C!}4yط Flms)c]Wف8F`y8z% + 駟~ꆡ 6ְb?B}hXw@ht+@D=3Kvh#C- -JomgF@sWB bIX. P R&[P8Q\/a\&d0Lv/Zz2XcD\@rҊ MTɼ_nFkqہ63 !$J\wJдN#9Ԅq@D^pLTDZ ]1Fm@D +P4 \ S+枸'\EJ2*8au7jƱ= :,˥W5g9UZP4Wݞa0Xw\W1gi:4\`ϵb'8?(ZwDyCnۓ#/uwngnw)𹖔1_(Y=iW|wxb:xcK4EA)vN<; irTz0@)zad}E'gq^2R('4x<pC@-'e9'|#f[0O B8(j)0ފH]~>Wgڮ'B !rq|<c˛N"(% RIJQuYC c4.ӌ (m?`nGRwqmkϵB `\I3I$KV`MӄqeC?H4I"nnZj1ذ"Wc~69c?2xQz[OȠ?ƍ+z u~.)XFDN=ra@AH{ɖ -1'</Qۆ< 3g<ᑵ[lT}dA7cC5UQܮ7#u{dRQrY\,treqT5T9c\K%e8edD-*U;{Sp8x&F-˼12J;~BT}U Dm=bCD:O]PPg n(5( -+yB6 0X0_bw8I!ŌplY2:Dt*ot)1q<&Ϙ:u ǡaF{քJi@1ľT& "m Eq!f;]%rA )E1*FנLK8&q 5WzmL`U*J3N?1DԒ85e ;'IV+?ueK)S>u큒 *ٌ?_.G u]\ 5؈*cߑ$ FiP2b]lQy[ 0v._..Ėź>E|߯ {-q˼HFoSQN6,_)&x^ӈ*Hkq>nBhqGKWB3Ȫk möHsij0 A"ҙz -8)=JAY$ 8I-i^() 6XWLO)O?u}@ 0q4O*r*Dc{G 5 uV`J+<ӆ*l8\u[IW)F1 x>ҊʰR\J` >~wB빢Vn[zqRV"0a=cxa 7Dic0 3OK6@K6 8y1"ՂJ[r@^'GK#R6<>s4],؏:1^/w<{RK7UGkMJ̓0L}Z4rbT(rb}~cNx>_^'֊bJk(mq'+l!cNlBj,u1(̿6G ΍U!;Gہ׾V`Z> lw||?-6XoIr~mm^.W| s}*wr zo40ћqNq]C%mD;^;ZEQu 0'_H݁R10N{CY1Y0< EJ0\+t5 'eF ۋc?9/_H% iwy,FZn -HTa))_5cF+Xp+:ch%ħO"OއǾ!q(UDR<X9P*ˌS%%(!ۄn+!2TXap =yr O2ݒxT( FIqvA5ݏ+8{@R4 BM#XUJoۃ! IDAT }uw=Cu+Dsv-zŶmK|XCo@O, b|@M3$Z䫝, Du<]s2+Z5" R @yFa̫|Vu[;7(Γc=c? 3obJB):3@@JwZberR( .] qUAk 4FƳ%s]#3~s'NJi#iZ`N^x@)x7tyg؁1m]wqͧCΔ*l U3¾AkEXE""9鶨qr MbURk35rދ:yZ(lZjj0Jh5aX^Ǒ!"W6~e s$)&|uU% y-T~(]) <4\JB8ɓ%W)0 ~gφ0Ndsv@1eVITD*ĀG+j`b V;# ƊR5csh?TU$$²CT ,H% ׊"ƁU !$Y|,A~0P iTe'X |2bq EFa[GaNGe)NdbF&zqc9w240RZ+NpjQ<ؑQeuEU 8Abɳ ϵs+2:+e G5z@o~fsPy8@:N3 #bOGɸ3yq8J yQv=TL IU`-t&7YEd!~Dif-*1%,{nnRk?ʺ6`kuxLȽcin1b6&Kc6[CWH` Ly~kDv{G0:\nD@k1.) ܯ4:;c, h\.7)H=EB eaV8gqaŴ 爜f7qlt}߿|Ayv0H$9&a>(0s %e[^o, K^qU*>B|n#swhT EJ? 6|(&JN%NfPJ K`$IH!篘+, G/XZĘ1 uWu}|cyw SQKFW rAʘt'\7h|| BNikT흝Z`53ZBBά"K(UO3!0" e-Kĸv&'J)Iz"_bG,EF@^&2>m83qOFLP/}o*'HV]uFmMRJ|H䝃|h;ڨ: c1zwxI*jd1DI}f\z~l 5xpD1)hg0-3 rK.(1R*i"NL|D5@3R,Zm/R.>y?CfҀm=1^fVar 1zRےJ*0$#R)'> #:{ ^ ~ 7,C[`" Rź\+meG ׋g졮4FU4YkghK]|Zv%x}?4#D !`czűo Ys-X(#3IBJb&/#e ZreAH4˰֪kE H0ވ 1lpwR֞pl4,Sƶm}L4R%\v96PpIEgx?XQR(XmE~R?^_~9e<৯_U}0s0B"gw^rWn\|ݱ>PQQJ=8OXQK$"4/va}c0Bk"IMljN(\.7!MU.h+Um_SFj"Xî`|6t _$g\ӗ%p\nUyIT ҐgeQ~jY K3IE-h}˲` I1aevGxT|36Vf%<9gJ71=+mߑKcy{hG/,9'qqbBݕR6ʭ8M9E E+ZU\`-b.p~RE5' V2Mc!20 뺣}*O8g'+ UhPc[)+sH^7@e9 <+R,8CF 'D ) dAް$cZҋRgF&t#op'ڏK 9&HrL? s#XzH-8kq,'+Tpi0Jۻ9TJmIBMؤկ+Hp,B6:MƁ?uӊ,@]KGzB@ g?ҁXJBw2|__k`|x c{҅BNI;ӈc?DQ]+JIby8E(Jb.:RR\D5'\WK&4m+ 5QRu*2RQR4LVQk0y -Z,<߿`R ̄9#'dy#+Zh*JU8vu9#g, 4R)fXp]ۯX@90*Ti}|}"Z3Zj3EYt2V-%'r <ӹwHӯ tབ8#:miw@c*s2m!~#ЗQtTЦ<cCJ9$L‘pq||ֲ\z=EIZ$0˜+a]iƺt*5J#XI0L8SDPX*4aǹﰊ=Iq 4C&&8=;ƈ;mGӲnȥb)o=4|?+UaV5E,dgnW<OmOhrwQP6Y<Ͻ/Vreg ๼~}"e+G%  %rpl)ZS >'o;Q!m~E4)**-ӉTpDpavm}irpl8*"|}+LO6{;M\*${۷_~mqM |W]4:9g|<#5ƈ-y! a}+{tg6zC%|=%yerö]vPL99nPY?xgj,R|{ܮW2/7OlTc aE1D D`@{.~($=i SF_i8NJ~@Qu.61eLpn!25Kwf٭4'y5 < Gx#V^6hb5ėw?>Qټ'MVit+ @{oYFO?8ƀ4T)%qq_sӕ+&9cyH zͬUkEY7p8 !=RyS]?$I:4R6BrYp^8wVRrTGq|tY. 6W}0EU74/B_yܮa(c2Ou'b*ןSƙ=ɋwl~- ZZNkJ8 AVՈ)@K!R6.to4-X pŸLח;/@zNQ@Ybؿ = KU؀U`?O3ݮX\QM8H?X)~I? 䌪4yA`(? ,NȽͻH2™r*-4F#JVoZZXWnV^ˉ1tJ7[{ŏrdAWXQ3yxʼvnn Aʩ[[# 땾l9䗑fObLH"]j!8k{< Gm9e& 9!,@k3yȃ `^r]ihǑHgIJzbxC+w{1V@n>?"o=y(y1 fɜ<!g?ESam$|~o8iHʯ}jl #͜wy"i9*Cb$Gs>_҆d]qIJ,Xrh>Xe2I5?KI6H4m4#SۢB&|`hEh(0(χ]~P.=vC>ekm :RhdI@nn-1PVl5&I)G11&sIۺ$aЪΚjR2}J 0Ȁ2Bg` #r x^HҶ F^p@ l*FK&ӱ IDATiXkeGW sTɢ424 _}2e6hUQ1 EZ`?"RH}eEQE+ TmPɔN*N PrW u"hӕ}0 ĈSr&i"r&vϷb.Qrl" j@-$V1CCJEa+K)Z=Tf@BH}(n[sU2TJ+hbʃE6^~G'~6Gm6[-mCy?mo}c [h^ZPk}-5q`-6_ (D3͚V^RPb$,$9#j-LuswufB$iv<5K֞SnGќTà ZG9+$΍#HdF.#iy3 ^eB-7q`*87U=MK2p|N(5o V; DdZ[*k]+cTvZaFʬVsd"gY`!G !ٕ$Y}.]?\T߾ JbQ|2!~ĊԔؙQҟM>t]"(FczdBgCRo8\QZ4 Q|h JA`9SMh%.(ᗥ<'A'GҚ| Q\ ׺O|?L ^/"™{kap+;V51Èv`bΓ#{~F;a8CON4ɼ^"= cqcs,bͭ"o9*K13tUAM ZUcO&섄i0/Wz ;KkEʕ(e&Q " PԣZy=ZW rXj Akh<|L`2@`ռJHie װML[fӆ t%?)Ov6oZ,@($fcJΟqrAƋ0 =QQQNZ[bJ'nHI`AP]! +;68v  !&=*~6D1x$7y1 c JRǂo*"uF>(8_MF@;ݚgvD.V\W └hoLfCAnԊ!YqquU\~2@匢k2^O^CD@I^ԌnDYq_?lFV]Ujd8MSЪg^Qw)e<F8GQlZw'uzuG7J+RC~o@a4|dm;cxEx<8osg]Vt-(>>V@Ie}{þm2*=Q GM)_HGr (U1/2N0"d4-J.hj&\JPͥ_p0~:c-JN<\B#0'e8]p ߹134 q@_awfERPw8b? 9`pn p Jk*bݹ**.b0sT`1 NC씗%q O| 8I]cGRk_qy1L, 3Y}BkBW౾VT VeB, E|'Ҡޭ岐h-BizJqۯ߾_>yZTܯmRxsǁ ׬2>9D'rA=}4g-~׮nfJֲҎ^;{ȼI'QHb漂*/B3K=K7k؁^.htv8CXg1 6ko}]|{ϻ1|CYcLa&hczYp,ӂwJI+# E\JA  Pѩ;(,˄G:E8$ʼ$ޔ,Wq@3 e32`=yuVqYuݏ FWdTlXaDcQZ<̊H#0TBhǷRJ°s]RMy z9¨J۰d_}n4%k4NQb&`7' ׳7ٯOQpq^qYn_§hE#vذ}_?dxWԒڌy(<1NyFDnkL4߅7HX=Z PZ12?ǣs؝ض,gIi*#e` Fׯ`]_)(c'?֡*StY"ǩSgp^XyYpHx$0y?Tcp E"<~<A۶v:wKu"] G)qf.ۺiÁq'<֙!|:N-(q|;NKf~[X稒*Ttf(V2^4F)A@ );pA*C+WlUJ<ŋO\+ڛq.2ܕ~!iZB@_Ւ{hq'b0FMQJMV OJ-Q8ո^oLYWX(my'L~.Ѭ3HZ)Q0q*u%Ӏ: F)8cPKF㆘rB@VPsB<dqP C &Ff?sd Jj,=|Z0*&aD)a:Tθo ]WhKG^#Pۺn y(v]Z0N[a:Q3DB <$4c[WDF|Y3.y%ϬUqEIܘ VU"ĒpөOp vtѼ ETeQ$-9udb G34t9&'C$ִUxvMR`{HNnd@%ߚ.}6Z+&<:k4Ɖyz$ $@ZcLxueIH,Woñ;\.^A /c ?Lym ISE1p;Hdn{gumưReJ<˽o'B@؅Ks]KHugX8?p8g%C v{B^/sNXܯ\m_ w=A4|x)Lb=Cpa-F{u[)$jՃPJ4r<>0NJN71@[% %-gM#&ެK1v.Cjl %iz#R6xJ%3RrI64'Zv}öobQb͔< *mDJӳ[k8zAZ8ӟ1M#^F߽àۺ.$S.yY䰋lvHZad_RIjRXR4 1'IhDT׷; P M18MO(F ]+n+H%..%-`߾yϐZƔ$@9-a@L\!nU4Hk"XNӈiRIJKg=͵KV}FC_Q4 qd3k/j"~ӟ3Ӎ"<, 30p+/! KrawA@IR]uBߤ ]{Xb`Vk!qs:*?-LZL FhICh,#lE? ad>52yH888III`/FmyV{\&VHf^X R"WQ,Qb_,R=7F / +D^Te/LQT3p)d@b0vlf[s)˓4%XqAz[KJD4DKӱ<_uqƀ3%q^I "Hد4NwA _@?uK,! KP8QKF1? ۾CYuь_7 (fߛׂ.|<_hEܭ'e^f<O<~0! Wnw:ݫhͻhosBV }mR&[H9urlKi޻~k|, \`o?.5m QlJ&gžƉȰBXH%*RQTlXIybc,2`ɈZa< pƀpPr%1{0dN牴^ҎV1c&EPHJ|NE;ZPc@\a&q1=3 g]qN A-Z0GS]|IeY~4` Km]%1S^eqbY5†aRM#^efBRdDIσHLt}H[V)͒TD",JL܃FRx>H1b&  G!i>ZP% #."Ul'(vk`F2≒No J(5$}?{e$Wğ9#78HԖզh}Fۛ9}cg4q)A`Xt08WZ3%g pZa}ɺZ#y DR}C"#D6VoˌD3bJtjNE^\_0BYu?'el4EɥPZc? \ͣki>_fT58NoЀ#"ho=)?^7ox{ς%6x޺Csj6yX. Yܬ).qu@ 6p<8ǓZkFpČ\%1޲ ߯k5#? c\PI5qrY(dLc 7(^*aGݕi4D2l~؏ Zzj8rFb❟n$Xp,%/f3 1fFW$*yT:s]Kʸ/fZ@!e8O1g I|0?!&ljq^Ȝ`#DY4YzXd0ۢ. AezAA:޷Pq'^DRDݯHI:iADM5v}(6Qq%}MkVZ@r`bjObVaΟ1Fg/C,uZ'IٮIM4;n[O1j4M'8đ Ee (\/Lӄ_ HjffeYp;BsGr3.$QUvjjFNض0~+0yzȘ<;Rqƌazɺ`eQ4+Iu2Fo4;r-1a,rE{hfw] ~֜uЎm_/&5: 1c?#B 1C!0ؐasJxM!g~ؾ)JOkcx|ЦԶ!`&, z֙ժZd f{?I) `0`wv%JxJJO`Јs=.y}9)L%u9%לH$z f݈dÎ-g,A9 qDz\onzƢC:! JQT@b6ױ1%RB="In}뺪YA~\~0i;ńф[:cup'bDm o#K&rV*%z3fA$)jQ#Jx8Л:$w7 .G9c0m=mS|f&ߢXe= ߿q}i!Gm!xKQm4/gOEԒsrA3cŕD_%j0ӱLn-LӅS@6mX`i~;4BrFľǼ, F-傒 K_b}R5+mv^uò, rO `=ҖTO:oz壧3FQX1Jr3QuXKda$Js^&RӐe1DnOt|#&DNg<==Aj0jDSf,n׫ }`(>N%oi .Cṋ>#*kou˶1Wy{k1 \Cf1 C?߼uЛZ, 0YԔKS9kò̈a[DGu}>=gLכJ eqqz^ ,,7x%$cY4a#aYrFhGJ摬:ܖkm(`I64jxkN~Ӳƀ*ACӧOm8^OXt$8 tZz}PkmTOpD :{wDskcI"2g7 k*#ωh <*2Ar)--KHDα_-?)uHzq4 +Zl1/ pmD YGY |tYڸYMz{ЈYnmgdUkt㾏4dj1Ðxp،l ŏVL\C-aGt1 T䄤RM3*}GAjkQ.(@!O-QkF&h4_m4k0Z&1e'5׆{\yn_J AnyI!YKQ!tbzh;wE!{իcS>EzTPԷd8~yq^qz5ʡ||CA뵨3//'XC"Ǟ>xLӄ"bUY' ߐiYV+E|l9&]DiyLr=X(Q+Zّ߈L< (.SuTS:A)nГ!uד& X6$vQ_ML:P]}jJM>PoK o>;9|cm@D Ө]p֢f:ɘF?‡HRvQbm[YH41NqipѣT@Ơ:y[lЌ <ޯ֜cÒuJ.CCqy(!%Pw 7JEZR}>FWK|t4_82k^?}+*ZzkfB]\"dRZ9KH+oPF)m?  '|(Q,ɒF*­5Ď$0]ˋaa %G<KuNņZ]S>0 }&Di` uKH,MRwY~6a<6x[BH.gF_!O-8#C޸ǢUqq8\꺲0h$DP& jh#1QDbLUq_]BvaGzla29^ ƺ>m  &YG1qG6w=m4(5zeAއ*trzk*S 5Imu0iv\t>f3-Þxp#In _mO;Du+wz)&hě2W!Vnu}d2/܈뇳i,{4 ibpmJ9X:tǀ-l=!ls4c ֕ TZ:ާ'egԭ_{PjR Y\9xҠ!otG޶p[#m˼a 0bYVR:Bw o-RZ`AMa~[ʖ(zoCdo$03#ecqlC=EdvA;2޶8 5%h3C3Y VQjR9ֻST%n.xf4rJuu ;]?r;(vzipMǧӪlk5ʾuY26628HΓ4 l0qZ*<irA #uefEbq s>~qD/ޚsdt4kmLe4w;nP%jovK)Ccct)Fqݔ0EbZTL|&fkSJy%XklYCtIJވTcca#0ufPHeG3cq8)ҜC`ľGkHɨ5IX.:X&U/WV.ݞ֫*ޒJFŇaWՓ=y]W;;@R}X,џD@Mo?4NwuS{CP[Pt2>lg|E&}߫[Q܅??k)' = c}4p $ HS/4IQx2 10hQ@ xI#re+n;Z,\ەe(s1LA)<-Bۂ?> k8[+iߺ G~R]0m~-Rhp)mSm95Җc+c]8$% 1[Cp Tk6Լ#w,!X]M(tBwV u!r3$K&Fzun' }(өs_?HoYYXi!`86(@B]בT(,z{{ncƒUF +gJ3F=]cu\/Zq8 D>G,4ht/h6/_5C֕7Htm+@6Vf%қ pxH*@<ٽy"]:B҆!#-hsn aTqW 0t$lW"yQ~cf9\Wn7KטY)n+5l z~wſKmE`O=nU}i[eB9ZZw J(;Qua;JB ]#+kk鼿_=N 3m^ȊKN"n(e7ep^a X 5$!l%m iüJf&pNd=ϱJұz]{)"RZl{ć`Ú ?87.`f ј$܂⮜.A'/gtHaYf̄jsQxk_WzLF @!.wT9zNz/apԓ{Vs^fb ={|̧؃-R^M>Y : bkCE߳cy,4FWP7 ]iBP)$$uqV!W{0 IDAT2tY@*6t<[ Esfxf3* smV8 52X6t [eQײn8 bߣz)e`C ]kx{{GJ(:3^__]`!hRP0+T#LQ6aJk %Ae=8\QPNX|>p ܳ(=2[~+uS0Cup:XE/ >*߰m 8uـ/uYs;`9@iht8p8t|aY|" ۺuR:R@U11UUjΑ>_E= @(T_2lXIyYApuvR %Hf^)}߳, 1 PZ(r]\ G1bkC~q8)kKUaOot4yQx@I %'r*֦V)Pjp!ň5Q]m%&֚6ZYMu CEDM ]"]e#{et-H4~jTzs]٥ȧmCoZk-0/4ywFz.OJ:AW*!v%KX?ݤ'u]MIw@~A9eKJGoR7^Kx{{SL lZkMȸNY1н?0ƹ61+P뺐{2 @f)"(OJ{l+{zIJ3q5BLҡ0U[_5S뺠"0"PWpdvcw134_jwѤ)׈R vj͚G6nbZr;?galGըޞXt#=6΢N8bV ?, q3$OR輁]뺲_ckeL@hPV_O?z5Ω#Tu\Y=9+er8*`4g]WfqqxW$\zixvq=fȑB!5H7:(a9caH.+)VV[xFGY~$v?pd\mS*w%޺1v*Mb`p Èqa&Ȭt*ww0bG{Ja.\WRg(P!95kr!/9qPHkԸhMHn1=ťJh*9ct:Ļ"Xr>Z]tø#m}9JWM\XGh#?4-S!)Q*]+ ›c]eu] q0yf 3'TVpn2`8{=zq<Y9k.^G^<6}D",t)(;Plɴ^ozz9ӿtPjѹ8dMqzz~{IANkNI&]$&tQӇ;BW_.*&oҾuQv h#XׅEшJE]Ch.c#ݠ /' A~{OZ LFP3XWB]i|uu.2)i[aA,!)VKg 0= Tm[8 0"x˟f]h4T>8v03{uøÖ2*iE[3fn]W$#;H-:M3`-NO/L$Lga AB ! ie]N4i)q,y>tü,\稬פ\^*8Qz dWUBЦFwkubĬ?G=GP*0|X{*Ik-'#}`R ^ NN)BN:=z7z{9O4GBІ-#nLߥ/:0bKB&#aӱQb9(OMHb14.aV|zyFFZuӰRAIC1bEw3{آc PX=HwWYDwId$*.Rϡ{+бn ^])ui|7@+}Gsk T,)c+;,%oh8(iCNr5o"7 w1*Ԇ\ [I6n"Z" @S-+7{K8`e:u_^땽+TJb84(vi(TU/o1=D<I->7E71 U`߳oB! _Pr<n҅&{N39Ee&@;,]$!Gt#=CO!@uZN0D*8C>GѺl[gqohۖXw,PW)ܦHC#JM늒 À8bgܮNf,bZt1zqgݰ>"p&Fk/X {]e&23&zM <1_᪬K MDgضudSW< r]Ea2AƇ`z+=?pl4 ebRO"Y#C3QM)EC4,cGg늍&8U8@4@B;tp)[5+qF(t߶M<֒g@IJ /^)2 VZԎ'0:Ɓsd0˖oK&4 3 %F-FQcް6'!J ZbI ;ڰ-ӔgUo^0zd$c-:l),mhp]ݞM>ӂ*gRzpT*gien #|-2qr 8ą ȈU\Lzeʰa exL<]} ol8"^]$bѻx?jYZGewLk$a@wx{SHnܩXA `~z,”6%!x\ U2vNg%6iZ'0#zj)BrWÉ,|yLoFgr?֕74~ v(;|y|!ZͺARs=E\ rL=|1"om#i^PAQxꊦ'* Ug5q3ue?-3M8[A)m,ᥫ@S]`'iNKb{75]|JjmB)9u35y^1'" 3l1D/MxKv/M0MBaFrg# qUtwDe{pwOz,n7QN6-m5R">qq\8iC?|C]RT Ku \:uwLa9j{F]WBOA^4@alˊO L +g[{iӏn)aNrA= #nb^tuqF;/cA2#(~bx ZzX}m.` /b^Tlw^u$a-_WHBz H-cu]^KWn4,+kD/فvx~LӤO]iV>%L^BÛsƲ,:ͥpkq$L͜~K ]~F6u=n (./ϚXSrѷ{ǻYԕdž1FIkЬwR^w| {u}Q|k]~VL!+;+kP#}.=n+Kl۝ȕ< r1d̿yyT 4/XbG#4kYOb'С˴`TĮW%heo) .+Jk&ڂ'hdZHnǺ1,>J.'RTu#twi-Wƿ tPp4 xyyrR?Ws!h#?)bNPZ{"OMĺ.< Sxz:Qk-w*).\UQ4s8ضaԗ  $t%x2YЩv#x躭jqttº]Q8y/_>ĩ^JDi]|BZWEf aπJ#i֎c 8Vŕ k)/T yJPaY,/z:i@F՞=r?s ?}^fm`M1R@o%ZѰNVq"@4Uj& בvqXRP"X _qChm'IbkA>{Y % àljɸ^F>`#mI?餣 q԰Giu톕'ӮוPTWΞ+Zjp|`Mm:za.!Ymezp\.$`E;v4$DsrZ,e#<^t{nf'iC0mR_mӇ{]݇⡮2G!0Jqq'pOzn0:kO;pgIk>rBwZ"x~ìF^i;k+! řZt: }y uC\Պ+q!I|a֫r$^u^w^1HZJ𞢵s4Tj)xâ[eѺ24ԈLx޶}^Nur~f"x{]8zI򷛀KA[\}V4@jMbϵ0 gg eg!zҗ\ɫ܅՚B\WC?!\WŒ;'kY]5x{{po~[)8);„k0XkAͫěuqGCܻb0(aY7,F-Ԇ\ו]|k5 J"}?]#ZbZI];cq- S %s'~|zGuU5K;ȈA{IB76wt>nlҐ %Ɯuh7BST/ȍ1"cShw̅"N }GN** #LL4e-9cF8rQVAHW&=p]uLz{N- 3zs0 IT_ρO (*%_zCwXc]}sF|+WțVcycyx6;)Ndz胊W0p"pJ&]y]׳KmAn^ywq͑Fؓp5m(_յm 6F,ʎa3uMP|<Huě3̉JנIBr!0ob Gqit,1r%b#c-KF).vAQZr$QDSX6a ia.a` ɦ~=zUc\2#4rSك0k_@)'ʂr}YX8rIĿX}Ijʕ@knͨ96MwZ W BWa fƋmD 4mwzə8xۘP?IŹ d筑d& ݧgV6>T,a_#9:xmW+ Ye :mVd!&"b#|cvb9wD~w%U?6|^C; Smgn'?[RVX1M3ߍ( PN&җ/A=<ԓb2Y)oXf.o*d.#+u]wk.:wZt/Ēw̅ 2뢑4"bs*We.oR˱pΒYKWDoʾ'Iy ݠ&弒T#"I35p7_\W1>#0kVqZ] }u^WoUH-|Pk? {]u֫6 M9} 4Bcɖ6uyvy 0^Љa8JOv;;Z<3UFܦ=Q$o1HH*,p$.}brx{{c}G,9\W!=.: #$8dKusu廞 0M7;,_6g]XP[tۛv,J!JCOYn78Ko p<7` +O n+Gh(x ItFu߶Mtf>uu+etۇklZ2I]]avO)ɽ~ ?kh?|L48|p<|PkCAɨ+Ag*eVHEbqlel#Z#L1PԴָ4Z"; 4z11|ZV-p8?'JHDFetsGv|kubsnu[kuw8Dm(sZW&Թቂ,2V-gYfLX`Y|DY,Y1qk².{ :N3dˍI:+ %խkR%2cE 0ws H"u:yiDw[& eY$/qƁ~Bpe`k׿b#Up\J4u~K 5FZȌJ̢ZqZs"zcMq:'nxXfA1ܬwZc^ {(|t& 75{ YerZ!PMe=]~$+ rH.۫ڪX)B3QmcMH`!?vxK7M\Sr D"8gC\)y嚀HpDL.bUFkKSq}zb"}aWo"_^V O 'CWzmp35'1I˱j,kV72_%*Q(Vqu+&jWk^P3Rq{5^z5׫K6 9ƚd3mibs\i+f}SyDRӂ$g6Ate[U _ 1* "Rس7cʊ8*iݪp`d ɇ. UUM}id#N^L+QFR7Z*RO֪u" ֮qp ͽ bc UI9ЦK^mGssg0?RLXRS\G>XU#RLH9&v}\0Y'LiH/",j_tEh ceV\Oڏ+Ol7"嬩}mm$2Cuu@x-!(R؀kE3XLz(c-#E knlj8Vy^eeK96g,a!_hc|:qI -ǟK a iY7^A{k~⵳ j)Jݪb(8gŸUp~EX^D1pwFu^ O"k3:=m\Q0$3c*v# ׂ׭Z2{#&5&i[ }Wn>yົ:{j$Dp^3˸ [zqZ+_wO<4N̋I1vT3tB ,#ӴMeo>LsvВRӊBNEM'7ߩ Զ-}Laŝ|qUs=I\0HmaYF' .!urE:1̵˭:ui>pm}ζ];ũOnsi蠌5~se49ur5)KpS/2ȸ[\c#\oy3"$zF`.7F/) V, ^ x_M 5EAmj,x^N3BSɢ!T {p7ʁphLL ֓8c)Fְ L~eRԈ=KC| G@/ ڀ5 74YNZy$j#>dFHh)ִUhe*!6\9NWɳ\KjN%:xP2V7.teYp5k/$\ W f:\kq \yq%mQDrugexd#*u'Ty} g>KL.pB_ԣ{NpvQ&?OSU^'~pz42Ei$$Ij.߫Дł>xN#'C.x YGN<8ḟVcD\%rf1 qOM*%2g4v%Z%W*hLD+p8e&\j -:wyQOvm&xB9\OZ%\E0 W^G@"c 8IŁEGE hvPGOzwP ~0Hz 8"l??T8.6FlEI}Y`R,o2:Y;e#lXjټI/ꪦFޠbX<]Vuyldxhd͆(35Q̳\umj ~>- 'o꤃S84v<ч]|RQh6XʵBq 9Y׵_`EZ#BWU65$U*\<t 1$݊Sp۾j/dnpkp1⧸q~7p=E\sLAѹ_~Vr2dsؓ.Ϲɖs}Y|o74WkcOg9l1,7c(_ AG'v0"'uwYHƀAIMßOٶb^^~UsbJc\:#m'sk*%bWqßޝSh"qN:\uqnp +2>3M@9>qެWq aQm񼍫Wz1*懆 wWtt&дmK@Awdc D E?YlmC҆u=mGXrKeU7pP#K!Z̢)믿 FktUqy/jS!(0|>SۙkvclƸk\$[e#MӨ|m; pN?%o8f@jǵJp%۸qeJmFu<65y"[u"kry\]'\qwkWq>xX|OO]G^]Ql9!UbĘ/Eߨ ꇞ́ :/ExMPutO=4v,1Z`q5k&f944D4e(IkY1FLp/w fW,꺼UJnz4(N,g^enصY7+\n\*$~kAΜvˢzL<U F^>E51V7]bF\z]'q&k9^"=+"zZ1p7_|^_^_JM _IENDB`criticalmass-1.0.0.orig/data/bitmaps/cubemap_3.png0000644000175000017500000027260710265636020021331 0ustar danieldanielPNG  IHDR?1 IDATxkugU&8/KH-`@%@X8QE :" /hV¶l(t]`Y@#I" |.z/s1>718ٷ233'dz_?n?>Q ߨ`HHĪff`f@H!D&,"f/ay !3!*1YkD_?! " 7jTT@ DdbPU00}$1D`f&.Z0$5@2SPU"@d"  F5ScFD235%2! */"" /2"!!s0֪BBfRQ0p00ibDl;! ")O5[>/""3%"d\2"13";2ﲙ*" 4>ٰ|_uYF! 6Mc`F"!j)DDd" 59b 1FFqj/ 3Xu)ˁ#av+҈"@-ĠbՈQ@-{3BK)!3j-LU5˾!*!iY7 =1A͹J~BD$M)@D99O)~X43Z9HDp4n4"HEeX 8h\kl`!~6f1fZ@?dR'{L) "Zi nO3D$$5B@yf#DUsAD}OCf6ckuj-EDc 1FD,Lӄ!3%bD aX5i9g3.%3Sk~ZB ׫v[k5aRo5Qk@3eff&"l!f!dzqj[HEk Ƀ6S֚03Q@<<ђ9_f`̌Dlff&":`uo|fjh7?kHo=<}k_7-xGÀqi~^?L(>G{ϿG~ٳao*!ŔD7|õO;qXk{O[,? P臮~/T8_\k1vg񌧙~W]wט}kGJ5#?|+R~M?Tk _W?ڂ;>]k]_y"0SU0 b.ٓ 1|LDv\M-,f1D%]@Ue@DLs` Qf0 ĄZzfT7ۙ2y>?t\̥/1G`0x~N~oO^ {շ??㮻/|?}o"~s{oWh5?*"7O/E/ٟ/w?5o2_7>ѧa_W[^|ӟ DW /3}۾\7UW=gww?e=Ig;@)T?_-o_7rBEq`/hǙCP"0U55E*:u!M<՜\8;@U1U=&;ċW0+`]._^pp*"S0saˈ Cj w@MJ{"@HlC(_}nrOWO L^1QSZ֎TEȝwZS>_էn`&+u3{TkUOnǏ??էZk"MwuORJ|u={ޟx8nDя>V_ƻ5YW'Es#8y>K||#}"pٳcG?/m}ܹjk'O;Rۘ{o~w]tc?B@߿7?[ԩ >v睟+%<[?}?f>s9C[_/4͟__vOGqzG>WW_~pߥ^<vMD`9Dj把8\Qk5SE$B"DVkmsC0Z[<~`FD5& By3'ZkA15ihjQYDaOtsp.`hlyW\هLxSf6#R)O#3~tGͯLYj3{ғ.`k ky5ϔ&*:Ol_e]_5Wʹ Қ/0yW3COs.P[}ُ~pϾOMslV/y ?'o{otӿ}{(*OK'Gz-. П}ω >OsϽzS䔢{{wr Пcꫯzg]{? o+u)gaD˝{KTy$BrR \sUk /᳟5~kk" s) W_̽~>OӞ\ /ky֩S'ϟ?| /5|ŋ C>Nξ'fR1`w&%nW# lEDTǒI&p_d#zm*N* ݕɳ= ev9d]윍~ EP$*Vf!mx"ԭ Ɏd @1V bip?-#`!(/9<3 f6 xW\yoR_D==9_sOx¥.jPk{ )_77k vȍ7b,Z囿I)Z_O|6@J1egs3o|}b읿;xusKu p1Ϟ9w 3{Oֿ^{>/{7osnC$rp/}Tn7]~C\2 ɓ7e73?RO//~{^|>32m5 8)HX[̌9&bgmskLjX=N(3ik)+aubc)-D$2jؤ̨@rIOLДbð0kco _8Su Kg|KU֐Ăq MIeD\VHDu8s!TqN乆߼?J~8](|;(s`&@g>Ͼ3jfkTK޻~ o{yy3տz;9~7m6/y -TS'^Η( 8gT trJn:}'J|M\6]n)"FDžDDED""`QJl"`\.&bSU$&HNp~LDz"%1+{_ds8@$Rh7Zu)BG :+ظyMҽK/s/}i/Z?wCȻv=j-( H輬hB"#߸:cH*ͫixr=wmb ;.: !"vD)[3gΊH ZՅ'0x{xMM_7noz9j}"RlFҬ UriPk41F51< ] =53 !4i*B҄h Pϭsi. Mѹs㞱E3%BX\J)G8bpt>s48qιRM8rS1͜P3T[슈8!@RkC@"@ B`FUl)D&p 5x <Ȍj)W+")"ӧKpbPl@FG81W1E" j6S[kt!F0k!TQ3dv@jZC0TS2bf~H] b4?/9PRjXh٤y;V;!RwVCq9h#f╈b)E{{j)HhIB AEZk1%,UW2aL׊4c,6LC1>|i18;Wjkf=O3$H1u]y yUq1v]'"6S\ }IG=B@R "h!b}ׯWk]LAhf6i*"Dc !je`c ̪! N]iq9KDxFDcRL&ښ; j):}:>8k4yk̼ZWðw!q jḿW :iu}߭W?RE iqi\v k+B1K!b-1jKtJɅJu܍n4K}Ww1VUQXy #VwGb)3oUq!¢~}?Eʍ^\I)jff$R&&RkγrKCF ]p)Pk lgSԝ888<<CEdg01EKD" ̑C5hR!;B4a!xNlc3KQ 5iȘKnsȁNk#g'=]]|/baYEC/*~մ*Mjk9gH)2U WO6׏WКQR8SW\~p^CpYT!imwnP9g7þi0ϴnwλZ5"N^y'?hm`!N C7 Ðs񚾔Tw5k9,DB@ZS͸˂=;nBE 5~uܴq$q0}u[|6뵙m\T5p`f7SLм=>u_>jIk1Ȭfq癉SJ~-z.8TCK6BbEghj^W)%[k .2v"/ )VK]Wf.qj11)c}xdv0`s.%ńql Y-%73El֛s8 a:Ĭ"u߃⃇iњxTsӘښaj4Xm5ŘRRynL< C\Z[[ XiiVlR(}?(㩪ҚӀpp`4O^&y{jZNUe/ Skot"uxvZEĮK!Dirtt43{`<}|y}>"B-anqDL΅B껮{j./ hN;HE01TSJ9H%g!0Y[=<~&U #s-D.OCJ)AJ{ؗrX^8F)&+wZ|O[h5Rrή@<*3;&%EIZ `*st&  ,Rԉ8BV )p`R^i^ϓSjff6ONV *bZkͱD꒳ǵR˾S{-4 >#[2ڈ:zγZ s869 ̇Rcf/tHR*%i*攒 1F)%QɿQ 0b$&3uVJ]TD5-6i&rb1n !@R\7qܥԹ癈[N<jemJ @yY#ނjnc-G+^-nuO(I1ٶ\xߌfL&(ZuJ`qܕ\HT].Znh V !)%Όj`]N*sN)Μ=–YcLФc Y~бnuQpLO$Go2©]TzﺔVvuMmbLMbmߧn)}/ =q 4́Ae9Tkg!󺉖 Xj6isnAwJ#Rku9lRj鸾1u"4MMh)ϫiwa䂈ƧKR6V}=6x9/@X(H[D*FQHx)DC䃁DAM$Q+E"HyUHM)Bsz^9{5o?\{+s1/}]=ޏꃯ tDÅdNTdjC;VV!7$ [5A|Jt:].|ݯN$Ę\1^/}&sB-ιgPt @ U~9礔U;8Q.rky0m+* Pg@wߖ|>:@뺌11o;qPCG/N1{FrjxI0e f|*{odڵ֦3|^Ĺ[Bm春zc|+f.˺.Z:txqdt!qsͪ@dKؙޚ9s:RL%b?G֚̽oifK}@g{c e˺5# sC R,,8"0m]֥=^xk\BceTSJ 6:D$J,&9ke]׽B>6[~kͼ)2p/2!91e@RO5,f qJލ>0c-70%ŜQy}~R@n+ﶛ> /R[obt@1Ru({#fyӺ`С`d8z\e/+.8w~!3ܔ}H9z(Dd&Ǿ R!'Z'^T3NDd䯭fX`fF2"8t8j!tf3 NxvaZ L681%=`JC4T -NL=}F8v"iY؏;D$Ց\h{G·[Rd5sc\.\Nplf>f8&-iaZ+K2qf[RF?_R=bQ{' EXB=Bar@4vNvx'AOF[D͠ 3Bsq"!;8i۶G*X╃}c ޻;ia'NrƔ%QUCB>oêRqYn;W Fb jC9„޹u]q5s!:Zmi $l3f|P62গu 1I!x',djHv;>r^nEDw &.?֊:^$ |8Hd`bu$Ĉi#^# EHCK_BkFM$\K1ED{p9=1۷V!"0W݇nwfBbJ1 d|SlOm}S45<s11:hScxy44^ d2s!0m)$}4Ji;!:}AqY@lUDԆ!L#R8z%Y뽙%`3#*m3t"`FJiS6e#({͟j3\sxlq48qgRp}ϼG4G#VODU( NE:t7nPHQL1Ox"DMB[cޅ} S#V2ImQqkIp%Ss.:'8]ZGO10KHm]"n'QDp32ˆn["1FJ 28x譎owqV?m茶rhW"oM_ךcཀྵp @`iuINFK 5b>]~ßXT~j="zGc7}Jd1d{&+.%#D8GFtmJsoLt Y[Ǭ_6߀NX^ J-G8}%뵵~#{_R$'\!9K! UsF xsl\`vr1mǑ{"R[uF> &"ja:V[flZa۶(8p)hs6~;މR!Ŝz!dpusU9d].0TNUdD"Z&bK#|l>=Tj=9Ԋ0!Vuϗ IDATiydlwD s9WK-ns^"""e@6{. F9l/Bdډj|(C1b ɴm[)*2CHgo1G608nGϏ >u]a[Z1XRU,")ޞ}QYkQÉsx>K-j#vSh dZCgzO8جzryv"0B+ tݵpߦ8Jɨ(%&Z\{+9C|oZ(Y-5?]2)ls}}~KZw7D`KF[m8k>_? \މ,xگm䜝sqI1kA2 _b -(6pq *dɍ'J}t:uh+@štK3 1D|J.oޘPs(xM˲. >+<ґUۏVx@M.z0=4("}+\! s:*R:{4Κ3پ }$/h9}R+3-݊yIirF7\.̰q#RyAYnFFqYZk%ӶmJ:d!}벮DZWq@A F5-i訵yz 8xRNG޻,ɠ 7*:L/_K㫘HίcgM?o{eW'>ݏ7E[뛮qm#?߱1_WfrO}/ PqPo?OxƠ?g>W~.}J U@9ItsJ)-iQo$1s3-#1sgLJ"5g;u5g2 9TCLgqbJp뭗v+{Xu0Œ:XoLOĪ#;h}~\c jm"W.y Pa6}p鴮kk9_@-7~*zjf+D͛{-Qs1az[3JXX$b譋8ϧbضӲ,C7>H Uk@u|w_k"imZD~忨|/WF?wXynDGٛ s-N<> }LSyگ޿㗾~yq#s~/x~'r3%m۶{ e[KV}ŠĠ'a>dԴfPJwrce콯˲,~>t(V[kB9F$``]kk9{~`y;jz^O>xSѱ)s*r&ܠ{G\ަe۠w-U@ y\y[}SLHrpc^՝s>8ZJa1R}0Mĭ[c0u4RLH^B6}h~{kZZ X!zU{8;-[~gZ^Ld@1?^~/?_[D/o1ӛן+E{fvLv e- \i`\-Ɉ' Ih@K4"Syc'6my_^ZVñ]0kȺ,({bJUnpaf"wJn0t͢-ɫTkݻf+ 03ĵf1Q>;؍f9Gl㨭XNL˲x~VBĞt/{X۶u?D9y][anD6~q]5srz8"o OD.'28_#Xu;O"􌸷8AI)DZo^PE`xT5:M^/9#ْ ppJV9w>smc;7}1Gb$cP |3yK7~k3Ͼ|~e/ue9"of͉OBj'"~W/]߳j/?ߵq1綴u]rίe:zT8Rq1mݞaɼ^ {;޹#`hφ%Ր`J?A2DdڇҶm[qD_2[t>a6phVb޻8y;mH,!=??_>a趮i]/I򹍡̶uAȹ5-K23` >u]1Yd"qA,%?`4կ/^[nq\k)F,Hk-lj,&kJ+85xK) !#|CMsR1}O yr˿_B,a_SqLzpdTt~dtEb#/=뷖Yj'""jDBdC:|{ޞBx *ٺ.{O1_Jي1IL^/d~GW[1J>:,+ ,8`R185"Vu;b\3K)C 1&zN~ ŋOz-95|dQ%Ÿ_w=!UHjdnIm +Ex)ͷR~9N8+j|xxmu#w\Ocdb#m],bޓwmyY3Wh\ctmI.gl:l2j뾣C`4NJgo7v3OfQ`[wT]y mu? D#E`NL- cv+cFf0c4ug ##1t"#r,K qޟnjLf sĆG(֫Cv7e]6%f!Yӛ'aN)1*޻tA5n18ٶSPbꭿy`%-d#'pɹBއ[K.q }ßzL?3;|NO_xK5wnoBsny0+NϿ}C"b^I2U1v?ؗ'=;j#6]k34('4sQgFL{u}L?#}~N9囝)Eq^uVl3Zr9rhfWCމlYV"a{Fd!".Gq{L裖@utc"ak&m;)*/WtDDO}6IjdKJwZk={Hx߼yBeDb8pm׎Hf:#r]|fvڶݎAD o5xOĭ>vZ2FDD?U_4jD_᷾sk?'o.c&2չ5RJ^fߝ;f1"ЛĄ&{k$&Lm(l"g_~;ޯH67L}(b P)e1}[m]JJ + uU\@I֌bq2s}:t[vkg=McB8vUt۶ׯ_be4pN,5m6hnNuY\6Y=ʣ 9aC-y#3^Lqm"\m[AۼSrE} xd~rcqR&.nI seIu%K1F;vY1i V[Em?*Ӂzø$½OlO +R}|_Xbzwt{?z敪#wBd̳HH顔3r}W qH)ԉOT'vD+1SuFdf?ـz*'`!2+VSL!}[o|&މg!];1AuG3YƜѫ@ncPGbH"p.U&}ٶ3^eYk-/19fq:LU":X@F?g{\CKǑ/"S?>??c /RJӲNg7I̥#C}Y5L!QJ%ZIbGl)Hwv=ſ0"d[ф.\eJ᮷]#2Dva?Rse:}l>!U,C{ch.r}YJ&iP5z/9q䣵ҽ1FqQTiԂ>:{w>>z{B萹cJm[u3Ѣ_x{<'9gho.Βi_>?_GEG~Z'3qXpG3̌w79wcMZRi~c2+VUmUD0czDXMf;ʼPaă`%7@c+_pQ%̉'ᇡY7!~bIǸIc׭B͆չ/}&.}Ϝϟ|OG/j}Fd>>"9n]=?l]4l.Cq3\HX btK߼UxXkiz@Ĺ0u`Á Ϭ Ԃ^qVj=JngYfeYk:t#0yZc(09C0;%^& 2 :ؤ͞j6ؘwLyQ a6jEgCs-qrCZ@g pAj9!y#3DaBժB5xâĤ2yvb~!cDBLƒmRX辰HD6S[3 3e.,)>]SabjR߇5M8jC?:1Zm!t65.y@]d"`MBDw7;6谣N)5!1#̼Cހj-3J1f>a;+e[r:ƬB݃;u]ZEUMumGYHpՅCJt3Cޤ4%4 5ZC5ܑ$Nb(d `[g%ZŁ PU!59iv"؏(,z5y׉K1BA>숹2;,`#!z˯›qaYDN0@u 1y0FC+%X;:\)M-:IU7M (ưZ 91z`8k^WS?/,4w@.Rj=TS)Mfo #^&lT zi&<6L-뛧7nZ͠| #gX6km1띘Sj+,96̔E#nPN1vLhmX&{[tc1a;DXVjH%7 d6YZRLYTGmԂc-&bRB1r.@h۶jqYqΆӑ P˲Gס{ÅΏ!2T#zeCHĝm,Z\N a5s9s[zKWok)hf,^4:@~%>lA "a&)b,+JԌ9"mdwi!x:M8^o7:$Aě&xUFsuNScϹCaޫZ%SZT/bo:hiK7̖8GS%.L\!6!vdq;2j|t zTY8L&UwY\FT-t \k9g] EC_8> y,[){OBާc0K |:Vsmu]F0Ki6@c2XcQsn/T Qn DzWks)~\x <ZV-tCN%#:Lg2DnIq۶k)( -/ĘR9;N8ʥN|mD,b!%QJ[Uy(BOG?0) ˒eT8:RuZkmh4NQJV2.m%y! {?0^Ģj $e9#DЅq^$L1ɾu* FKY|?9bd[a.j, DKQ3dl;9z:y(qrθ2%\l"XbD>x7.*>t,)aҡ,0jcCq@y30׷H{ba2Y&8c2n[u,y06lDP}GGpe]{ 8Բ,V&#(oׯK))ETvR{G7EBΟ.wJZ7Pmv 2mMxh"A:q/_(7fFu&ɯcQkٶm EIY;w>{4G1Tkmmq< &f[2j61ANcWUaQV {||18BQ "PV/VK115Ry M/ˑ:Tc8% ?!bB,Ƅ͉;q&0'2`ǀ - -i 1xZ}p˲RpM Q.ZrXT9g$􉨶f .0D@G`Z<Ӗe;*EXR*2:D +nHdgV[-eV +*,iK(X&8Zk@_W3E>H?@^zu\J-TAzVNQ,Rp4 N݃ؤSJ *m2!~U %Za)F1 btZ˯$rB{UY9 h焊)|VS& N6h筦clۖ@y} B?xЖR.O/؏ 9ǎpW@##Z#7)TwdMf;mt𝽻Ѫ8Nq/j%D*/^wHTtr44f{ ?ٲӓ1;Aew>P܄Pfo }a0Aq4L1F'Rji8@10< R~?vibh[_"N B IDATZ:>Gths"/| :NB-,q!8,,R}yZ۱ũ~Vq*0ecm[KtkD4BW˧'nXH*1#Ot|JY14zG<|FZUcaSCLn/S'0Mffwާbkh9@GPS릷E 2b1V,DmZr&yO0% s0s DL>xpO~Oi ae; 1;_jJ. h۟u2zlSqT턂Jq%v !4;=??̽ω: )<B5Me3GQՇe]q8qI#3M}6`֚KA'.P20y%{XӮbk!FY]>21NOOoЎw譕2/)P[ A O" ȹɠ˒e}jߏً֚ h!y]#Wvw\opFpnz ݺ:XwoB4s19,Hj^."r^9?*Q-͹&D CkuY\K9X,/LǸiDOr%A&in~Bn+sB>=RJ:NӶmdZ\ވc'rOiZ cgd9 Zk;Gd|>?==RԴm%7OoJFx'3]+Hݵޛ8Q^:Rc]vfYD)93 1`bQur j`RŋӆV}YKiۆ,ÑZhfi̇DcqW'|Ol޷\o5% ^mqF%E>Pc &) ̰kzU7Qϡ:?Z=V:6՜J!FP-Cwx1B ,B0٪' />1&72V+NYZf =5zqb CZkIiA QF$CZN^m0DG@*{:e-% ~B Z7SSCBd&\09oKth꣫)$9 p/✃]BN"R5RKi j@>uhHGX>B1 pgAF,m[!HfO0acLKj{AxR\5:"Έ~W\iM 45`!~qLD6Ӷ[hʰ<,bZWaA* 0O,cI1~Vwh3F^B'9SmxUh8,.GA"nT;λRJG.\ >=~}臨7T$;P%$~5}8CI.xjDq5n₋!B,B/^sm76Ef,⏺L;1S›n k9WAzj+>|qh.mq!}j* ݆64,H,˲.kmĒDU'1磔A,¼c \!!,*UlE+;A!ދ8!,˲˾:M!wBƽUhOIDZ7n03sD|cDXtRJtWJ[&pq{, :އdc\.C >wwp!8qW@u~:y,7SyʠByQUaBWSLoV=L!$E+֚-iy||;cY- K)%Ef. CscbaD:r;Ʒiۆvcq{|ڽ'X,1R#C)^X@& xCK)dΉ2[/!$­}1%iY ,><CeYs[^#>ΉǁadqhBѾM9c0Ё8PnFHɉ|úJKcj&+Km-I/Ki&B˼{O 0mze"}Ucyvʤc­>\B𦦦.nTNRJy> C|X#=F, =>>rALX N5ma AUu]Rg 0gUSe8oN/%=; A˾3>vO5 |]S\% )衈= ,axs"F#{<9c }y(m۶/:[kG>PTZ,wN4TO }0Df˒>==/dǾPxNFbq@4eaQ7UUGGd ^Xzv!xy7Tmx%"iѽfJuYvBHRRGׅ0kWTNLT[St>"NLs ]+. 1d3w*ZCb:ϥd/_H7` C "VgDZݽ`7S$ +c15DDJaًzshRi.t+RS6l7c-@:')ZZ%byY_֊^4OOOn:3!@/-(C˒>J#譁5ťkKC]ut!A-VGNg^t, jC#;,RΡBP&̞p1!SV:t\.jb&)o(fzf<2VQJ$(!vbY:$iIO@`怨7/3 ?|o|?O{;׿F-E~gds~ƓR/wOњf).?Y~|UΙ059l: #QksN@P!s#J_%䜠.ћtҗTr2Q7Nnz*<,Ruv H9CPŎgԝa4Bq-九"dW>sZW&]&f^våHS}jwD*eǡ*Cs"W>J,),ɌcZ{I˲.TaY7D:`u[ mR$ZVQ '[p(>J9g.>чMzaCM_<\Kщ#k+#?//)ƠK?&"R_wyT̾/g?߯d$º=ZrKxMDM,|dĀц6tzj3e]mzl{m[z^sεo}.}*IJ % aRbeUĂ?E.r+EX$IhHh:MoS콿5<﹂-i@)Q-]ACDJ!$޷ !Tr#nۮ*j}d^daMip!iR4*"#0pJa)Vldfsəb>gjR0so0Qn6r-aOb6>~XFN&#_s΄9˰s ڛ03zl[NDPnӜE<^+_roHmbɪzv~\~W;K%oww/YU|O)Vw!2뙹3J kyO4Yﵶ\m#x6FH1{/#ׇ9İ,n~шUՀ klH7u֡߬ӰR-_Y730m[?1> +~^|t;}vS-v_O3O)aS{_׵S/6nd[uJ[k) ֻ]NDӻjxQb]/ZJ}6_bfbsfnBRRX"G^IZo)F7 =YgSaJIU*oH"g]TG~h[_G6f}߼>t0t}n˾}9[~bf3=O s$pU4x]eC1`mC9<t^izGc nZk,u8M2ϭ5ڗyi}ۈ|w'"@O"3y7:n_kZBpmU pn\Z3fr=ٖRZk%ӑ?Џ1'Rs6r߷Y je 3s@.j' |SiSJ9tXTokxHgBv˲<{YmL'R!~}۷uywp = G }_ryY5wU S<\+qU]@Og_w"cm{өE:7w3oGaH"ʂ}1\EG]c)m,Yd6̵̍%o"Ъ@sGQ3e[W b \ATd4Ȍ#cB0#NU5P=1ޢ-`nܠlwwO)v=*;iw3 f<_kEczww'"۞Y$ b He {Jl|wcGF *ӜImڷbL䔦Pͼo{mXDb%|4O^ j 6R[om9|m[ :4q1ګc07ᱛmØg{9-AH$L\mB vaL0ݛQkm^yzŁ9ٔ*yiUbL1 ޯk33Y;dNV19kۘܘ=GQp┈9Ӊjt{?g _WbegOI)?.lpҜ=ﵔ^ξ(iz{N4M7PFLcSRyY8 ?!RyGw-źU/D.AA7Pp)k뺺9Ues7TqM)w2Z]Yr-h2cZ/ B(+>nahCT"10qͻ4?gB:Ic 3¼:c10(|59R7Ɇr۷RҎBr姿TScN7ɟ2ՏtwMjY/<C\z{CϞ>at[NQOc*rT m j!zE= z{gsjF<&R ~~G۾oTc%H7/5c6D"$$0H‡#0)!nnkmޖe)ݭ=ƈSx+2"c>$C/_ћgg@ NֻWgTvn?f+n]jjUu|otaGIB h(t#8Hm{`r4dT)0jk&lZIX O> 5`=1^.ݍ۲0m;,7dr]9&%c(k1Ɵv^m|(~̈æg<0ڝ ­6a-֐7ds)ps&bG?9"ы@B9*ت A|-yBA{t&!wNcXQ#f5hMH;,2)%"'G/EyjfFә}+T4ޛWf֨TR{r:lu5zqH ~8znO]7dn|0K5gW>C'MDfD޼Z^[E^ZM'CwwuBHQ*3?y$"eB oidT>"}g։-A7܍,,w*<@OTzyi,=9y߱z#)F,5ElJRj{K`Ȟj{9MSR-L'r:%k=MS&rWLJR/IG7#!4%= )M$4"&n;cE: nJPwqkʹ QPX<@LzznF%䚸Y?54*Rm2+f6l(|wK6"2*G͊)5RTi~ ~|g%2g?~Z_6[mi00 IDAT޲;v%\]wy;Dn;;Pjk#jE`z,ji9:nof[N)~^PsE)\e r+40kPa!+4o@{o)zl/Tn`VaiNmIׇ"STCQ\ubbI92ӑ˗e#gi!AA$V!*dĔpQB {L#YZ7q,AE sn]ׁA5LSCaN1QZGN+Z8/c9Pr>C'^kVz=!>򞼿̤Ї_gL(.u=gw\t:LtP8Yrr|BR ˬ";!)%z-) @Y$t>>$崬)Z&aDE^" ֚^9gl[&DD`F ܱwGBmPM)!$ <{U1A7$DWӉC)9RsaL)Nb3#1ǔtFw$-1~KAlt,BV/A`^n:a&cLq]ל3TĪ.7ލh60]cCV1a(GAe2ǒظ]ch!"ZRjP3_GKmrތ\2$8B4pܦ@koﶯZjSӂNPRL4~xx8dݰrw^r1s b*ֱfSy7/J@ `@u8ŷshxְd81|?j-P hR b7 *C|g1R^jNZkM& QhN&aC0q^׵䂼Qt !N1u*#\G@}xZG(|]9S&9=Tqi"*Ϭc+bbFĢc\Yuw=`c S%ai 6M7aB_D4\ le:QJ,{NVaCKfUS%A8L*nR uo Cgc0\JZAӔTt7XdӔjfǚvG$0ښ3b7dպAJP")heeǠTKk6 q)#UJڻLBIL̪aY$3񶭽w(za#o;KpISrR{4M) ;<@esm,^0 zm([mwwA":!:'MZbF4" W%ZV˗/10.5V{1kc,Ifjc}߇` ܤr,RԠR%B 7NwlziCh9G{k4<4EoC=آ PT$ONdŎO R &DK$Y "Im~7N,>Ԏbx2>޺OSrtRDZ3cj 1=<{h!k yCGC(RD+=AɎyRzSQ,WUz˜Rj4ï $ $5y֊g[,Hc^=ryG2+0Ƅ k!Ϊ) []. x%" 8NGb51KUqC%=t]G=`{24Dh SQt0Ȭ;HD:$c~cjG$U_4fKRLtw>et}jP=O~{sbN[JN4ϭ:Ks.LTj'k- :x}xh?f؊5;MٽYλSJ)X,} }NeYpѯ뺮Røx 1ӡx#ܬHFBgI!(H!#ȡ=!0Qgc|ޱz^QťȨkJ²oLYtg mz (V ջY\Qvr`T)&H\V yE4 Pl ʛem瘱aLY5j;r` Dylg|zk"j=?o B\ܼjAJZ*Dm2sD10EsLH&Wnj& 1M."0/Z qJRTހ!٫ڭ}_ ~UE:*ͽBJnNL\ G2v!HFD{mJr/%NZ1Kqj b\v!$f1 x$ʘ02wcCLzMu<ψtZi!*bFupcqx 4]H!j߳1[8mPHI_BK}cx=ґ u!jDTY4IC f#=#̏7UiJ,yThT־ %P1Ser:}Cpޠlebg(mɝbMh)CIډsa@OӉmssn D (ň1Z8er"xY m4A%rA0Bi%$#"au2$QkMQ{ԘhA*(E̜kBKQ} }7~˧=/As MnmHߦiN2 gC\)˲)\k&*zϧFaʂN|JM=DDjniy1l۶;ܩZ!157k-r:.+d<1q~H8g\Ȩ1Eѡ4}sBSl'7\j/?%F;O~կk{y^RJf?H ^[b+ jͬxt E.(.XeHe=kk!M>{}z@i4%w9OJQɡ1 B99nډNӲ,7kſiꭟnm۔&s!:$%m߈zRB0؛#NC֤0OӲ,*BN70뺮Ax&\.ؾp29"p@-䞦ZPL1mxb$&6r1G}gDu@݀3i[e^|ޮ=g DU[a{8z~7{/4r:4!]q.j(AՀwo}R*ՙySyo*@\o X5]SPi[hM|:0MHR k0\wwwww{۞c﫭۶UR"eY+gjdN1]DeHj頣B.*v`8g-}Glurs}{IDwe=Ӕ"R qܟY}'?oW:fv18Do`Vk.q,9;C ~ 䴎ӥvU*h-7l F0w10/sQ.n<ϧI{w ' Es۾8ɓ'f=TmF=ݷp@Rڶud&|>}'UJD13>e1Mp!}i K"Gf5\ka3 ÙhrqGܞ?( ;0,ah+GZKf+hs3A#'("*JCuL(\.Mk)NfHBP㵬cE-"FtKGRPŋ9RyN)Q)+<C'K>JaG |O>adAu^n0uiF'mfA;QΊ<>Fb |}s*0=ru!\;bv\rkɢz̼=&X0 %sٌhSq)/ucahȺipm[!bi 6N}ai}Za4A"oƶH>x<)cJDR 1X"5ec;ϓa :U7/RZ!# 3 7s BHHN?{ {~sqa"fl"C1nE2x j0s겜Ry8eB jFn@!7\ػ n.mߝ0VT0Ēц;B5/x]HO)=zcbntJiڷMEsZ}hbPs~XsTּNkDt(B okwPu03E"' (Kxۮ(Uzk^|ߢ(Hu=# ЩR:|oK(Ŧixf.4O1A'gw|lyJLć7'ӯ<:v=H>Gg[~×}цr?/>~Gys#`@96,OzZk=DXi\T.F27BqAqoVG8 m;lBR)na֔,*=L̿3O G_y_^_m#0hI0=Ey;R{" [6Om/ i@_<`Aedm@#2ń[J/NdݮAWw3;D,r +/)1 (РV̡ ykY}ڈ?i4lAwgֿ?~}<2E+>QϙٍۏBz/^"?MϤSw^_/^Ї9ix]5DP6r9Qjk.fmA!JAK-G,%<,ATĝxz TƏ +E aT[E@WUu]ׅ=L)KNҬ1 ozZ{UPЎ)EAu~ },bӰL'=β{rN[$˘P!}t2Z[\\c/bΉi'u7aٶVrL4ZBޚw^JJUy9Hb=2/Hw,n콕"@Ƅmrt9.D.C3dgD`_% gLG Ȗٌj73-0-ϳ}on-ޝQ@ɏX>wanIEy~( sgR= IDAT6K-j<؈ ~Y{ĘPr#,BH6*uձ@a1y^j<0?@}"Rۺ87)2608k6bL4\lP'*bUCaJfV{L?m[m}VGgB6dPQ#V5 ]/š2U c){qgA~bJ۶8\26UtZ]b=jPҚwKS1" o"QKu7 1M)hkٙ`bCd/|_/+Zzo^;lwTWo,L7tn{'w<)G^.\ڏK='R'?ַ= 3:Qx<,x1jD8ePc!4%HKlpAD\.%Qt,K- vA_b\ =| !9h|{kɧiRvJ"ֻ0R(U)#%}g{xroVStzƼS#* na&#WXO|ZI H/db NP\,Tk}ϹC_mfT^R&8Os6Ӳ,u] 3a硰0;,Δ|ic)ļ;>eމ_S}JX${<<_ne41h!y0{1[l!?L81Mɗez#Rk^,ȧ277 0ĵyJy_!;` @R{u4붅pH ;eM RQaCy;C%KJ߬ m oo\D"rnsX'1Q2lTf{N 1qYWU܇KB1ʪA'Oso24^a4CF;zsG'w"r?]E(sm=ƀ7YCd{oG":uF;o;uvO}_{cj?m HJXD53;A9'gg;wb"" 3Mi7bku6lA"L-(n^j9N)&h@*=#ց:4>Ҙw .[Z o-}[U$Cz4Rr kzփm[xi.V!z ZSJ8 )5 ?z=ǦȌ[on<ϭ^:|SJGr&%6qrwVN8?s=wB}4iSJh_}??C=x^]RE?ݾ;N*\߫zkk;9}|%OX7IW7V?cXB %úyY$+bnEFrEp0v[PlۆFlHדaG4M[fp)֪LqYd,'ef3O)R-Ÿm907wq Jyp[s[oSJlw3R1t[iΉ&ŐbD ~y'gڦi"wौjhM5|w:-,1#<=@Jqޝ|,{aJ1'O`4;MxkJIcd&\2V :Ov@ 6ZۥeiWRz֛ğNˇ8z֧>*)qIq^N.7[OZo!q R pg!?<>ZiI|L(skfR Hn[hPŞ4;Xܦy.rnKɹin}G/ ?PJQ@|<ڈiJX=R۶]k.֟ or10!2Q+z[J)lno3=lc@⍨0*rCʼn"Rzo4U1=&4RIg۶ Q".H+.F}"LiJS"u[{N(0b̭L {w1)Eɜ'c<7 O{nZ+/Dwe9MGW21&wQ7A-!ZKJ}27ҘF 0o<%)Zn4ץӺbDtgV(#%R1`!)qmߎÐMTv2׊n3s>9!),,piֵ+wTCxo0J|~֔}y8!/{4BD\33)a .\vvȜR)UaX+H-z%tɉji8A@ -fxu]1}<ާķvg5gxj轗r{Ar3epc շ"ZJ3DX`u<L|^UW# { :rNpgm uYJ)[UW̼OTZrTc)[qїeǔZJ93Ƥ(?KLbRk<7:#9r cXCzw,|5aq6J)>J4iz]`G_ ^ܝ<4i庈7hd8=l-Qo7&{a%<|xC_0v@~^kU l 4 CB{HC q eWZSNuwo?})?X4s71.0QSK1~{o|fc/o!9bfi6}@lPݯhе3\k1bݨ{;~9DBf" !43,jQ~z 1yZFNz/ MT!8 1`]bvO}6"066m+ċahÍpJݻwÆ˶~׭7o@!!\ :rk0=88ptL3~9(BNn >XS mcJV[Lv]e>VUJUcfs?7dpx54c'631Fs_pS ry'C"sgvKxNZk+3A 2e2,CHΩ2JIVpa $ f5p >(shF(:/huݏ93Ul}|wRŠp"# ǤJRUМn[8u+'LRJD '«p[?T|N~^y]ybaBnf@\U[6P1zr4|]\##0kr#1"y."j@E)8QnDfdو!ؖ嶮xAz>BP"R p1EH ?ÆRg$K:Ӳ!k}0?vu5!vځWQ0 IKMxB^'@mM#ި19R[WmƲ`zJ{&4dq>e)im"/A9FyY?mG`?:{SaFce]ׇ;)21bgvl[K!]5C܆MY&Em']b&PBlh<^ƹxQ0@Csn =2pf( ;R,pEH hPro30Q+"p^C-6K9iKB Q]NX+ixOPEK-V,9Ār sBg)Z*#ZvC_IJ,X䁭F0[yw﵂y3kL#T9grR^ewHJ1O)aUKe& 7abZ~v؀4SmN'!G\FPIj 1& _m,'X(ZoD%H˒!U[3-VY(\3ǔ"~Ysz uN2)B`~^jAw,8(Q(=#Ȭ"֭Sq_(df1u A>` A߾}{A)Q%lŒ o͉gt7bLyYZI߼{rb)g3# P2CG!< әBN}QFMER^>Z0930cVVSUxkk{'CԠ[A BDZG2BtBV4=~ģw7cB+X|c#cQ{Z*S*!Ho}qUQ3Q̉ֆ Q"la'7'VQ[#\)Z!1H bHnFzDhTe 8@1[-uxo^`WQ'9Ѐ1 E}ɋ*v#ї:mLd>Hݰ> $I6HTR"FN)EFez„xDEl&QyG,^VyI\ׅp1PbevK{S !jbK!017`"ݮ>ILJChg:UY]fQaI1-K`e,Zo*u0߾;z #3K 퓙?Hˆ.pFc\#]}? G&k"T5y.Ln뺂[fn,. K*xXM:VkՉVjC^#"!y(>RMhNgZ02g&uOz*a%CA8 1+jPn6D#f0uw)ێAۃ9݆77wDQv[^}f# 2!Q;42i,p"%iPfs{icR^ #R%02[뺆~?63p(;3J!0dNmXʃnV 3UqFLR;K !HGnx*EJf5CZ\5Fg֌2P{}?v&`caq2\ulywnNy]VJU Rn>dǜZmIufCTZ˶m^މB),1DP~5|T&Y#â=?dC@ /'Y8ik< IDAT81]C>XUmxtS{4!`L1n!*B8`G)`ҤR:2fn-||{9F71 4LT  bfo/Z.Q__`*1n84"">H $?Mp{3Q!y-u 6 1ZQ@RZ,[K1[u5X XoC11\ǡ} a2XĬ@" E,I¼'atreDw䮳rmzCҒݮЛA@S•;'4}dO?cRc6+xAKKٯ+TX)l>sA%<`檵BJT I<ڪR)Zk۶~/W. ɵ&,4VDB pZM6"ͻ (cElVˢ*ÜbA9nu]?~P+zyH^a8K+nL+cɖewpbP_ %" ؒ uLRDw!SJPCZ?ǚ\R#ɂ@8sKZE'vGa71RhHvkщy:=u1퇃_s+0QNZ FX ,DlfEP;a37"eA)YZ=TbPpo|wDqrr;D!>!\n)FiGffՐrn9z)~ډ-;[݇O 8c2u~1˿~Gw?s?j**ܡ6hcbeY~??w~o}qa~xTyU3f_p ?RYeRqZ//6 V4r+wT8O(-}UJo-PǏb{ry^ƺ,!14m#WH1D`d#A٭#<'TWi0?BCmA*!nc09N+(B8hǮT-Ǻ179-cǁ ӓ0y]gLn?cDbm3aƢ}ra$Bm۶ZCDP`Btjpu>}cr/mmzk' wCeYufǾjX%$,fOܢDQȅ9~_^^ǾÇe˚a 4!z!o>],ԾM%}#cVf6~߉gKk)eYm :D8Skrʲ`ӰuxYYFF]ְ_s]qնnY(0~u.Jzxy0D69%At]ņC؈9NU0AeӆVa#j㺮yOOO8D8n}wfɏ`V۰F|vw*˲n>`aJ'Ɛ\hF +D$)L?=_n?9n?ǿ+7b'7 j&,'NT;MʼdTnW_}ygL18l fnAC)ek}˲uYULac!쭋1 AJ a6C"|gi%cJ)}?J3cNIDJ-Aih&dvg6fF?3'sp-?L 3(/?mA/BP6 MZ{*Vk!uk"F9Ƶc8_^7D4D )v?,KP9iz-2m%ÔcCfV{*D)uYa )޶  @ ?~د~߼y3xVp\@W0.U)k<=fUJΓD,G꽘ym1X 1 iyE)eLx&+c<,s^R9!O?-vZk>}ae]kk 54I *f5u>Pq!$EBQ(ӝs'Ng^VRZr$Y 1z oUo"whF!gG_!kue/ j ,kQ Ƞ??? d q zRTԡ#XkI1 |R/@mÛ&A@11J>?09W(4FO) nE9%SBT&=jϟf LLj)mGK:!IK-3&^TB٨RrNaUKtdzʒSmm|ҩH>Nu:Z kh}obrs(˷BuTܶmN]RKV$~Ƙc$fL~I)G4z[=*`hxcd/?kn_ pW֟+osPNҙ?wg/hKշ"ox:w5Ĉ˺~Nm:ϳy뚗|;!Den6DxZ# RDYs‹WU`vd"#Xj-Sܚǜ,񴔚{S[e ~Ub&$ xR3C8NLmJϛy^eQM\r/\yIk^,+0֘v`Ʋ.Ę3nFCQuY@,Egή^":S!;cZ bj"m[カ[,A4'ci>^TU]0ͱzdSY5(~c<_|AHp7,S@09HO__b1Vhc\譶֡ACm;ÉzkUK)hZ4cVKDru:3&*) #b);6ȩG'u]b n!0ykDқ >A歶Rj}:M|@B^Kayarzkт'f0C#mw)kb%aV\14, 2 %fZs7=Xӽeḓ\W^Daz;ГL\A/S!h6JiP:SUf4ѫߦA DؗY 3Ԍ!0Ks3b ̍owB~ܻ5(saV{ĉn31k?M_,\:ϫuaSoTUH`ۄ ԚblB胘[vz(cʈV2'*:!My)zجeL ڬJ󇁘}O1B^;kLJؘ`zӜ6|;?"1`99&yy NORF ܘ^[})u)F# TZ x!xn~ߏ8ΣՊM,u@`}T<1Lu"A s0z2 B@8TwP__@k'M*x 3ޠafb]_/ K2?_ C'?]?o߼[뭵s*8@F 2QlI&1?7ybc20_ Z/[BSIo׿U}[sS~|ZJ)8U&u~5a&͛7L# |>T)% zk{[B!;J+aY57P ^ 7\K]iPX"fF)aRjo=/ىB Ap{Zk8O"[4TEDA v78cUDU [s_1`zw؅6է[ϟļƨJlcI!|Z{BzRj9SDecR`р7]P0a9z{Kyaz4֊;-KJ JWEӶ,9'=̴CO.9#>[0!甂j(jC@ꏻM7X&#u{e߉h[iCR)nODZJ1A )4֖bL1154Ӹ& >Ub6nTL85wo[ۺ4s8j}b*jWH}tw_ 3lZ;3+Z[!uN<}߯r wI}nwDR~ݜ8rf< !T}X܇j>Pp߬Њ_ț7Ĭ͡y[oc{E<=!5I߽y{\}u[ͼ!Gt}׉!ƔRmm&JkH1}Y֨@@"-n&y(DETaWx~歙BV,(&xeR.+ܼTb;߹+1ƈhAIiɽn)Y! ҽC2EGA%Ɣr++>-]z! 5GTp-!|ГBPͨav0>uGt.LSՔ[blJ#oH'"(QK >wl|[!{!h1h+jZO̬S1}>'|wчZ*o LCXUc" [㔔 0""؎G1RNw@7& P OU9)xR5qXlBb( 1L"g iZ=wnV弸~`lzɶ<g>GS)& gaޔc{HC*.+J:lላ!AQenc@=WfP5>/1:">}ꫯz|*IYb(B@8Եw mBnpU㔂?@BL tQ5vB90TR[(ĐsACK^F6=9s1%}hs}{Fz1bL@~.SJ>l\)@>b 1Ģg=vKy1&VVu֬<_ׅ9/4 ˲0s&"zȁmJ1/ UAZqՠ!mjȤxYRDD~<ƣc'xyCHrN)ؑ|1*܆Z7\m1VY7Z{kc:}hR6=Ɣp~c {V[xJ)OEC #> K5c>B\hiwZǘRpMa^R·A0J(ą/89_R53 <-r]yWF<UZC 8y\Dʪ%8{ BcmHŘn[y=Q ւz : 牙 IDAT0I ԃ8}e#CDL63\RPU(G9ba>j!1l6)Uq- (B9YD z!l{8"lĵVQ飯aUCԶ;A)shd|s{W>FB i0aATKOu Ҡ{`0yq^/<S]%9hLK&ZbԵ/^7H6}L@J3 z ua 2쫪c (f ort{z7olx+X-㺢ih6bhݬO ,Z-^1}I5$}:㒗hPa~Dc>&:f&,@p1|m] ب{1n77n1DU9$u@S_i1 B p%&Oe#Rknu< ؉s^|[/kR21V t6wZRN9H`̩Q۲mZowoaS PAcLЍ0 %Ho,Z ܏aD@1!a2QsA-!u]BjO^7{uMJcfnömP#A\*GE)>۶1J)ۛrS*%"ޮrVے;m$A@!'fPBD~W=۶TW@o'CA޶ۇ_2DS>ϳm1RJLc(ߗo OyG4֛>DwBap`4mt. .x,hUq;# L1;̰#Uk)g :Ƙ0,%/!\6ӛӾr0r_֭p8:{\~A8sbXq)FR EhyYWa.fAJ cw,غ, :r u ;!; ʶmȋ#3?*+|:Z[\![w5m@榐Ib :"z! A_է:Eƨ&}[oB"?R ~_Wa"HuySJr@nWlPU%/qP)B n8BJZrk$ AuAU}D Z!`Пv!&a1BPr V飛ykQ'a1:ct QcLEa{nOKW)!&~lQ@olf"1%Ɣ)c <tT9g8aET]˺.KՆA0Zpߌ6伮k)%*l.)%Ό ÷n)F//=rn{%Z ޖo1%1 {c1 l;ޘMS׌\ٷ2)ƞx#-hs^B\Hqܬժ3̆]w= G bC5baO1m[[mDZOʈ4Sn벚Bbsn2/ˊ1 3,)þ4IJD>|f9˲k9 09%d-Gsr0`:Sn"dހEl 0kSJ7FN_o-|qFSq5$t۞B Us'( !1pv e-˒b:C)sq0H!rͨDdV辀HSmm?m:~&W{YPE3$QP_ ?{|ŬPSLƧO"*^D ~q~p9X0{y~vm])" (&^pcu )E0sHTF,fqh7QE=Q*iVrRR%ƸfبLC*?1:1EJfrxn˺fyYY2/#!>M5ukq A&}?~ L ڏSAy?ߵ3R.l' dWb6sί"fɈ?&T D.+v߿כֿ.ey۔B2,۶-KBGpR+3ơ7#btB)D̯RjHdUܹ 2jf{ 1Ϲ}ʀw*ACضmQ4 H8O9h?Pa?-ֶ,?_eε:NݎtHNb B$ !\RYE JI6{#BȁݜiPIVcP⫔ +¸`Q9|ٌENJ) ,"(YN vO{9"iy܄P0f2lR}o{r-`!4LR$>KB)O),맦@UJg.V v"XX|9%<7@UUYSܶV R:tqyaCus@tc8ڃY/wX5`p|,*{՞+JVdܠsyAsNյVӾYPUaݰVjrߑKcmF8?0(>T)`s/!+)e)U"Q^Kaa0[_xn9K#̿E2!=9e)1 iEi?//e S\\Wѳ 5" $ƉF"@񀰜^ɨ=}wL̄LGh*6{Cgf^6;;fVL*>s;@NW:*c cX).^f., rtN}#c܌Hz$ll| =!bVclۖ>1}AE͋ .F6dY:<=9U!뽯~QKdLOI!s1 1(3SM>O}DtZE(7oޤf1,>SX2F/$_ՂP:s=˲7of,N'bg_~'f"?FdP%`cÆH/e ,7;뇹4\ǤhRzO9Kn _`ZPk\%ǘ(c!R8:SJD%jط cDD= Rjh]z]ں=ͻ*h]7zN_(RaОNӺ\n;}񫵶:1Xwn9S62kҢgDΓ&Nc`}ֲ<bԸD}ÔLw\& _bL3Dekcq>}U$.+3߷mE0#o\@0 4}:j<6n=oZ_3cuǩf6j+zRJmMc+4 Fh/mbbHøjT@t%rNI6\oWRϽ}x TŻn\~+[߬,<.9mCTyRՒU]RNcQ EwdĶLc K)Fa=t!jyw\zk }pH)ZpZʞv D`,!@a-0l\-ыO0w??Re.0u?u:?/_y7~^ .D+-!S5}̜ bahҾuY3WBll*6P~Ơ^N{y0C w;mK)6ENU]~2y;]0D1UGqWDZC=%t=cDOkuիd^ĂQ ] Zo%}ON9s\EL)y֖U{=آ]>ΐ ܻ苟oR"!-wi2bNf 8tGu]WyuvUSn3u4bˋ=])u]ΧgH8whcU&mQ$'P( [ԍf7xU;4UA!FDxzl^xaFf9˧z #m֦s3q{+ZS1% K4LDxIkD`LI !N9ufC9h04Cf8dqYl.hGTu}]oW$TZm. A^r#13OE^}g5Y.626&H&tvNK 4*g9{:BK_o죷%NL,>/E -}ӿ/mfD ?Sp ښ7nɬJzN}C꜋KzkŇnoc,z>k?&%ZKf'P$*\ݏ\16X۟N1,Z !>d@À|Z)y !k;D8g?`[_*_]ut!F1ڭ,Da#l_??s笶[/d -`Y"7Hc3i~8րwwr:r4!۾}O@sZ |Mj쭈BIC,nF˲aө-M2c2R>I^y>@pDB, 9͖/ ;iM))2iD `kvX=(dm۰D%nɵ}}`SΛv#샟FSECq[Ga]WbN)U,yF>0"GόqL̈́qי9bއsYfG(o=[h?P朙;%;0DОG:J> ! nZ[K)4@p Ceݮ3A)/ct};_#Cw!4hU1dDS:8c `Zø| r@cR.axjdb{_{Na 5e?F%C˙3*$"OLf<݈D'~X>4ƀnG&'Ry=DYz,yf CVu>sNL mr-֩UXSMK2w$|6FޖeA.*}R(g>^Z SշϘ# 0sb˧7(,"*1.N5ܤCif1öݷmQ[Wd}Ӟť~w_z杙uYN9~Q~+!G9C߮WjkBT[k냄Y`3#ny6D.`;"UYKHP9>v,sΫS2 t1ɱxvyM*32s.JbFغb_J]("x1x&2W.2ЀH9% mn#{;൪RYeG@PC'Hf_X IDAT}>ǘ9%BUrq..\ @s.{xXc7b}׊y:k-=k}ߧe6%uU[k-w4īgB[Քr1󿼰dzo?O\~d'-v<.4џOHh"y&HmWOE*/gW 1ٶohj)>K@! ʸ{-9c%RZkJ)d,K.YTL1nXvEs(&oczpa>??Fx޾EBz1!!`a/ԟDkJ_"vB]y mĦoo)g'[-K-bOѪ߮ג %\.X/RKm:ZYE CYiܾm)%2[cĂ9v""qH&`f`}w-1)\XۖsmDVLcFc28,坉^emV7|Z?O?m_ fm.I0>[[3 oY aœT֮+ 8/!mh !G\-_c 0pBKm np藜.K`l\JvDC 3Nd@*@H3ḤqNJTo:N}=ryl"e~ۯ:}l۶E^EΪl ](s~tz7dz^^ Nc]wN6s@-r:N]ijŒ+ssAcĄ͐t~K :~ mpAv-˲oWfVeCUҮdrh]O@rާbϟ`kUխ (/$˺8[PW?.|)T&- qj օIWu*%sU#_xŹnÈ&RsB %aS*cDҡf5H  )+X2(<Ƹ\.ffTJ]xRDHF"3v aV"r. _@GPq G< 8kjmceYzop q @o)îptp3Ј6lJ%jvj6Xҫ{kl{ic4]4hʉ7rVQ!ShO@@%ǐlcdzyY{JV B*fLf?h+VDTrRF1EU:#LWU}\k 3\U)rQ"D"zeé:](#!?pIȆ1GmDTK%e2von L+%FD963yVo{pySPYJB&kۖ{1qU -f{CsV>+|/އc\0>2l0q/kwTPɉ8s)r"K{k%gHsL)3rދ0dy؋`hUtәHV}"X.K1 Iy7 w''LZ F㏻&Cĝ.,ϠݦjH3fƿ\Kb}r)8~>zG:c`cdF j _x~~7Y~'>y)#d@8$z\0af1z'bpã3s-)N6D 00.|!%A 8k-Z =u]1=F|i2 mޑ w#ѾM5xf 0Gmchcֈ39"|k?.,O'v2Ɇ9UR|̈#*@%fVk V.&<: 7d˺[l seED,/>ZJRą=ZZkwHŋDv^g< ӂxf!*Qm \߽KveVHQ#=r@f/oc⽻8qc\״kO*}vMU'lH)8(`cLngHPō1b H3b(tN,1ƃwģfM U4Y FD*~oo zZk#l9}f5Q10=V \K|@cDU)v)}w>뺶R!+b@YdD 0aSE}W݇Z W>pn\ )PweCd0X*FRy./^Rp'YbOˋ/`SmwUw/.U-~NY c *g2J7C%f<R T>F*⽛R9}-r {J-ge)tvMz˲V|c,i=U}۶ 7ɡJX02 1"V{+(vޏ޼cD\[#$;RzH7*%#a2}prla kx`Ȭ! {>Ѵ&mw)D`gT/Q?df*51{XւIP !ĸݡu.{ڷ]A |J(L!~pjRqo?9'\O1*96F? ֚{ap]^TG6Hu,x2p@")YC =!i%~g^Jd7CTeY0,O9j-. Z8ZKoC0.o* ! Rz۾J1# %\CZ PV3!P?Ek-tBp~ 4~{̲Tީ:WJR>PE"NA!HH61F3efI).ι}dYHwH錁9eY^}Uo=s`3b",cBm;HADAx%z:+ D#Oz]W 5n,EU)OfwVXh]VQ97c<3|#vyQZ3 ;Η !=&rwEǭ6aU`B1zsɷ :1`v(CjANM FdMk- q[Engqx[㭽Ť-PШsXyW8ຟcw *q`Xo |`m G-"uOl[`-"jo 2;d5Qa@~h&pʏ}ozo^._\gw`Ae#H7c8ko߾yF7mÌ;+S }\%RHv: >oOSm<Ҷ7F҇zVn@"f>CYHZ̄~\w\a!DbYTd撧+EC>r`"m6鲬k#<0߼쬪p ycP[)ٲOOO+vPeY~Ϲ@v1!\9$S8,;xO0collH>#FBsZ[K{2uYΧs\>֣OmS"\Z%1f٥}zz:01 !`_ư<m|` *3 ;c qG-Z~w8eۦ+|>#sm,z}tL]j轏=2Z3ݱe |#!QΨ@&wl:,1Ptv]p/%]3 Q.GbmL̷D./.O3 gGgbӝ(:%RC.z:`@L'sfґ:lИ< ) =唆t̂qBs0bbXs)u]ky +A7i{(rY^0`m9x˺8i}!2r^i;tTS y A"ni$DĜLּwA D̓e,~4OO|֟ Lb\DDr:)#7D\_DRa Fd!yd)f^vcfoXs"UsJ΁,۽6Fg@})x5i;(WOl4Kc%C DČeq!΃KLe7p(l6Zٌ61牏'U9c D r܄FrJ3|ZmF뺮UClVJgy0v8 Z˓>0Si]fw6!3y R3m;.?NQQ4D=n+Ppc&ԛ.T^J캵w>cےnio߾=`'p^uA-mRcrOh3?b~my}RTsyݰm :j:L&RJy&JΜK?%R/r)%G0(@;En&-'U[o{XX۔v@> )z0 mufS bZ bᓲaÆa%'zdZ:Bέ!}O] O$as>Oӆ 0a/s6BPa7 8281z6SXuAtIKS z!:ef YDjNu]u [mGw{C4յ?Z|:uE-'CR~G%>Ӻ J2uD #PL-,DvV%}eY%䲻]BVpZvE<(pL\rIF""9eVd,o?K1e˲2Zۛ7opX139n]PY!W\ǑCt:0;rX_ׯ Xwצ#eZ[i?a$09{T.VꭟXDyGfXM|"v74 Σ͠Ha 2z1:HSJ%a$;UC;3@wEZoQw튛zVeBllۆVPCsdˬ72.`4&:ָ,:Ƶ>z ߠP@@ Bȭfv^ouNE,kkѭ}8,Ĉc{b~AɃF/!s\h61.^Oj{K{H0,b:ƀb;+ʡq>cq൵Ҏb _~ rRj9=f ":s!s;9SIϖs3s㌃,!OO7W{rKb>h6!6j_y Zo㐗Je0+3nWu91F% tn"|Ȱ1(bk6:kD;ZL6P; j;(2zZ༃ ɂ;C 8tف af)cRڶ-?x_m](_Fb魗^_V#Ĩ"%G轱TQ8(DL/Ǽ*Dx +O㺚)3`z! Y!<\0r @|qR{Cל H(ؠ11ѸOx_ֵ _{/y7HӦe~<=*.ԩ`fіVM (x@52yԯ,}۶}OϿԜ}_~{c5Fk;uY TŌ \[0c_|9a7 vdj+ lHrfF<v\8w|>~r', $ ~ߓҏGߛ_s]&[EOYXzTt\p_ՆE$aG+VQfFJQ\ Q’=pW1[2xzz0ʵ#qNhkÆ95PV.^Z7osNG¶X XVe%/KZ>ZoMũw.EА"Rs\ErηvǤaԝQLD!&lSQZ('Ũ;xp{>"Ӷ'N":72Rd9'dik,t~GcBxm2OݜR?/R?K7~J[S7~}]Et!qŸr=6<<֊;hSڡ.5?ìQUz^(d| :ID=hhN(%~ꇇfdZ)eOilDNYUN4m}(sXOC5]ιն l6J)9g,Mk,'%.ө^[jfs:=ԧa_kc1F:, Txսf#N4Jp'\mQ\Q$2pΥ}o'0lcUɟ݄B<q\N}|2%/W/|\ ҹ@dÁceh<9|}B53soWz|r9 íU RJ)97 RېZ߶D B}\tZpNj)xC1FӇ|X"2GgUM/v#jOVQmﭕ*ZQfiy]* [)YX|>===>},p#1nB 9oRJɹDgh116\o!H׮o6Mk3D9'o=,8bxB5{%.̒ >͍1LIܺnO]vBo:"wA%ZmDLlRm[ 3;r0xӔa 70ڶJ"GTdZoM0ywdYwFF)%֜~_^ 8L5zy]J $semb7e']ly9qț`GsZĹm]3i9*R!r wr}ژ;A%H7G~򳏏qՂ˼,KչE =]VZ9kS5L'|98"qq,84M>Yw1KEp8u5N7霾jն7Y7#p6_.&!O%&f,fD1ࢨq^)CXDIG7Ak /O ^i,7Cא' "w#ǝ?7,s91ut YȑuD9Yլߟc27{# 1`dM-F ֵLib rhW;Z Óm"(?,0"@B;pt8פwxVNv.uiy͞uMC-Ezo@SjŅ8bLf GpEzw"W*nAF+=h(F.Ax|qC3 Ɲ/_X 6<{Cރ5Ī`2پ#L2@;4Ig8 N)nfmDd\|@CqUTp6b 8;XUbeY>|/Ya/z}}e?6ls-gDKz۱lOr>zR0Mt p 8z,z}<λoe*2SSbacyO e{AS}{o9VME>8fY,~!,˂S3T1s9<>[RL b9}rΊ{"Ca-<*_Nd)M)ELBs>~;|*>7XZkZ6C)><ľo9vO94M^^r)sJ<4ׁ'>/眱s ϔ"|s)L9乛im (*Hwt8 V]Vr/km2[D`8XbLqJAJ4yZW>2voewMaYFx@wv?gI1_dONϕ)v#bT9f #F W0fe(1ӑ48(Tp\W c!.au )s98Ogx'"BD9Qʦ:J5CE |90"Hx:=*s){wN;Bf x#,8r-)aRk9rZ [ޮr#Kɭ`ᒒ#d1a0SLc桩rƬH཰J)}ck}[g?,9\""Z!]2%wUBr3ID0CsFuvf1[y`Y_ҕAAx)lWv5v_>xE织FΥjUfGL#3vL49\.N^*"\x.  v"$p&@ I齇R@4Db ZxN*\[E<˼WlŘ KuH x{{M@)DE-{^K)}u{}=89OWyw&o\/?Q=͓տN 쮥yJ{q?: #!Dl9bHR2I"'s+F[4H˲.9B !{>pwϟ{,/ (0g6`Wd4 O,aZ6M9މӔ=j mP7.꽗[[sO{{ڀ QSpRLݴ^>`<1)M\f M2_OU3Co㧏: GDn"5% XwU{k1uzk<߮mm?G~4аj}W>Zk>9'{GDmw~^f4|puݦyNBLȎZt''Ͽ0;GR%oeAHiF"졨{ψ\\"`2M~R4?.5ĺmo~{k;m9<]u'm.Ns&CT&ELw֍<qΉ*]. X(p}ղ,?=gǨ%_ z\Gޢ?GSxcPK6&ڏ$C&,eӔ.k%X>gTJy<ImMX9m]'+̂"#y@{W@wr>RBdKfxVa ؏Bu]iYCG1kkOq :`Qݠ޺=ŠE{eJWz'E}4Z `G'U!wN0]i+o!;r "jilnuw.){qX5}Uh hLfy~1 q^SmhZ !<Z V2=κn#?s]1{;r9,'Pu0+sq5$@y͈U<˲ȥ2  )-O{)uY08avbX\[ sZ9ZKLyy9E'j?;;!iWS1BZ3e7Uгa''7fa:gN},pBHfVDZcЉ,yjmO*ֺO-FX(civZor>ʹ[k9Rc )ڌ۩ĵc_V+99@~$Mi[}۱aEr0u``{3|( tޥ'BDXr 1Al/ V9A*7沮˲x<{k"#Xv> ܀ۺݴm{wރLjVr? )ul[1.8b1=Xt}ڵRKRMH}|c' \;\/xnۆ*01L@03yRl %3ʌ0 ;8J)۾kɐ<φx9q'އkNevsH Pp!XPK2Mrx{{;҂" IBKp3cpZԴզ Y$ǔ.rj3:!j),Tm5x^Lo>8z/x !mv IDATctI5۲>  {Ӕt~+T{JL<9sL)޲,1OHrp]xyC0a!A , OyһZyy}<"'}?b1DNy۷RlNzRVLa#y[+0@~ =麭uq.SDYJo|rN6^i8̦/ : FE4P~,xOn?j ź>r>r>F9!].庮G=Fvb]g\ZzZ\JvNH )z;!VJ8PJeTJ^r65l^[o۶Z%x^Z&hr0=\mZt}<^^> RcW;?Z.8cl+b43!eRj3o[ߘG/CD`39bəsu>MӺǾCp{a^4vDZږˢ > A!8*9?'I!UWQAbax li;6!˲0QERhRwP, dx{gs0 !ぢ:8."ߤ'S8Ľt]utj4]c]!qSF$;so- qut?zrx٦)Rj8:/3 !xZۡR0Q-%CkB|v(\LLf6`V[ Mq~T<9;ѵ X{ B .R2l03Oj>}!c?,bԎւl'szb@af!iDt\Kq`Iw!<~}&"<"<_>|0>i@^ai}]Ӕ@;n9b|[W3d c=h%M ~\JWM)^ Sqw7XK50i/˾m_ 0MĘ.˂k׎0[=O?8YQ" Řx<@}[UB.r8y| ˋ 5Vġ0@b&%y'"i<*~YLjd*P_z͹?wra iYU JfK)tmStVG60 gdDi:w k ڪ9TD #SK{U1&{<ޅ{Rjޗgn!N1'@MZ?Z !N$,9q!yB,}=NY (m9gX Ncu> vMoN Z8wlZ/5I@h")`7Mӽ(jQK {s)Ei۶ۏ028ho3,NωK)bЮ?|]cRJx`]JϳDC|"+^0C?ށy@x<`B$r>>~\:8W0"4O .'mg^W^|aubRC///8JӉ1"!IejZɰS$#4\+}C#o?O]+i!yr)^^;VcD6mdz}gsl}s'pf\P !W,&juRJ]۹٦i.iJx7aqcBmUMug3"?(zxMOBlx'P=NZ'06Gj{0C|G3nڄQ_YJXg ɱzG&ÙR=lpx/ӄ$87|]8#Zk؟vD,|8m6%hnK.`W& aRg8V8TvQKr#c?6Ν(:Ne9לz4,u[xKheYp.bzrWtew U[o!nsRpp1#xcU3 {>Lͱuw^}>Ɠcy^ܶlCdh8HI(x<[)!$+X+14Mt2/f¶>Ru›/?r$ oeJSPt癙mʠ_[/$7J̲!ۭ Z9uҶ_}u{.F|hbQ4*RKvާLHl姙9Fv{Ij]{o1&)kn!:莄U;wm "KɥZ T=L]<W}4/ ؂Gu%Ӵ,3n<6fXApڑr*y}։)qZBPhX!gD4MF8,aۅ%ZnT!F4ϓ8\q>8S1x6ж+Fj%U"T6Rk~<@Ue!:6Pq? /$%/LZ kx;XD0."{y6/%ZihbmᜫaޙtYNj,bZC1`U=`#b|Rzh[k=Jސnm[M8fp/%ZkyvLf] sts^Eo2F)^a,C~/%;Tk^-p2q)}3)kw Ӏ#޺w]͞։v&(|Ǫ&o*,]{-8rCm?lH4XŔDxc RgHyctb;@㴂>(ϰYZ!U,j ㉚se"S} G0@G.R{Lf`)cS,+IMwl %3ax^ ,Ҽ#5FK./A55˲<և߮Wza> KQua+y^X^[90m#UϽlnmԊkkPly *tx[Wލ >^sϧdA#F謵@ȉBP@8r)y(CǑyn"ErEtKeyf=U~~9$ sv @0ݏ[oXl%cCpޝ> emߘUPp)4ȱfM%bFc%FbZ-c-4ٝiJ>O4~}^\r>j\UA[lVZ{L@ 8Jj'Z&,s\R4۶ҔB T :qe#4R6tdpKN,8hp#.CJs@#jծez_^ ] 4LJh>fc `7%h7 ax>pYHSnNdZ&‚Aж"!ij*30Tgr~W*Ԍ9 =iBObv  bV6 '"xf#XՆU ZH18qm_}}rYJ)ގ|YZĭ[oSU \ ۺV!&{SsFӦK'C(E)#s|uo6#f>^kCْXSFfVrqWLӌGyڶBdr S5Ìyi[Y}ߏs1b``@fct1S*3 b#Q:Gv"{q.)z CDdN\kPo~4@'x?&ev%  P[JɆ)/K>kĔR>ɉ L4t^Ux<V[iEϼN;iL3hYxMDXsA݉~3+|x{KTE׊"TMX xKzj^9gZ;{ ދr'/$ "vqфDz ;"* İ5ǵ{#A9 +_;˲\.ǏE$.ddm\zV{W3zyDRtK^vkb땉J9Rܔ b&R"y9BLf_q"^xioΗ^T̋Z[{<8&ApS-upJwr^+'mC1Sa^Y RG)N)A`|Z 7ޟ>ykc wrN8F?Bi1f]:Ao96">x3{\B0kAXJ͹nהpbDZ;C!sv, ä_}T5, &HDHy!} Dú Z2@\!6iJXܔs·~t)Q)ӧONBr%wM}AR~̭mێ|xqM 3߮RQ2/޹'}Z2V"\J=ޚw>M`'K͌m{yya._۶o291zxVQ]`ľkLxJKRV[\K8Z qz uZsn,Z|݈_nZ91R9I4Mn9{'T AD;4mYfTft߁yx0ѶZ1yfYQ>GNJɵT_>NN*7+<(HW~W|SJ෴s|,x| rl ` HA)L,#%֐x\#^.ޚ0wU=.)=+e޹~PŝvV[<9g Yf12#Edﵖ!8X@Z[q"///<<- !wUq<i@UOSbbA[n#!>^.F}jk(qf}OMfڵ#~؏8 e.\NKέ՟' f^&CSaes2 hexi<[RRJ)g,4X֪};&4e _<)ůYp  [+;XS/?%ckkLc%{ZK[kLt,F+xU<5)i{k뺂3j*dإ}\w!V >Ns">/|J`tVǣc@ۄu#x>jŒ^qW1<H xK))"|J'eISڷmcՔjJzqdX(ffm!,( W-6q@()m#srn'$DJ-r(m{GJYjG~ݺW i9?+[09c̠`9N4-0}7WPE sɥ G?|P Z3X$Zq)0hv[kum{kbpDZڷ~fcJ0ixYyYX<@޳p=]qi8q޺n69SJp#|x{{4 !v6nu5  1ov쇙kdxUu??VY<ʲF.] A8b;U&0tԆ 2F51+EFFUIx eSS37݉WVO=sXc2lzb&6/ YLc BlLXvdu()OQyhTO #0h;F41=? W>}OU[؏B!1ڝsCnczUiSD#ŌZo" Z޽luaHɻ祃H[m9X1.t~6=aXPm zo"!>"`"պ'(ȉbjvIԷ=n~KxuUvB;{Ln('rˆޙijOa$ɫw@y>x!$ir>ńZ锦#"Q!+YX$xIk/tRD(rb3 *ya&e&r{S% E!r0[W##&lZں+'1^*spY\pڕU&=jY)IDATS}@ ]i^wSXSU ^0&3qRz!ϐK9Ժ1Ss$L \Ll48]'V.jjB s.8G!cY7ȴFY>AX*f*6ڙ Hg%5cbNN)ZԈM-R eRc;cl֮fFUMIIkgd782]EwsK!Q&k_?g21xccf>}A/ww?~+i:hcc͋=l`Qzޘ] yojyjm`0aՉȇw9'1i}m1z\$13dm{!YŊ _Ofɹndٍ<`mk+iLSmF&{X#mݴ3;rqrzHuIh i!\ լ ;"ǭ6f"Iң &:ܐCzN1 3{BE¢ЖH"b͠\F\KGs~sn LF{_/>~fs!o5RiB>7׿_|"b(CY{sNǧYk#"G.?xyWUFzF֜0Z^e?Yjq"Z7%v+Egs^60;GK'NKd7BX7\)m~NBcH1pwD؈1]auI]+_7rެc':qq4pkZk#nkDޭw%awc0o9/!|& /1iB&3x{OJjQgRϮHu.1bzi<`S#G#0/7ӿbF!_ s?_u?Gcsԟ;oBJAt]O53PЗ)":91(Ol֝k/|}L>gD,қւy&xh@"8S nI;1jAv.y܎^SŦ?tk3k3bSfVq,0}i5w.8ؚC@VY$i|Đfot{&%e&F5*}r"YZmSk.smͩpNͱ0p<`"ܓ  a[I(vqA߼‹sy"aBz`Aj#!FV@Tt^F1 z&N "`usQk1Kɫy>GWwQX$#b^="}S%Af+1 I(kPՃkNyn #g$I`+%fa"* |c0WAݐ]vFw`_ f3aa ihA&9ݱZD>w|`B/ Ys t 22U_0(j3C2Ld]ؘ4!m[j5XBY0Uh'|3^|~qD"ϝcx=_[r '޺ZL翼^$GJ`0VӆBR*nATE@UD:RPM],gGW1!``pH̒45k hm8פ음=j"jEs. 3SECW%"4e Vb)kXRk !&B +VSx#}+b i[3&Y`7dwprǦhaBUq:K\Sv֤&vV؍]X9;{]YY,4TppFK_IDXECJGEF (+RKjk/uBVYp"rKI#t zqfڎSORij{}OΝn޾}LA5;&ffD.eFdqJBbG T,fD*#Z{OV;ɲ b&B„I&UnaDT̀tՊܷXıEYQcD?DEqwx3?J',̵gi d%;#rT;a?Ma s3: J EdZ<}4պ t+w %c0 K5oi&ѬL,HED$Z/2#hWմP VyJJygbDbA¹prf T5ibXePvQm x GhQGo@u0G<0$tk|6*F ^hfr@9'A7A8MQ86"W\5aMt GsFjZ 3G"|J Pe@1WJJñ0uZ(i[o+5wV֤y=ђF,Ifʠ(J(b<$pǢV))U͸jYD"i)%Hpha Qw`H,܌b"}kLPNj)0>;pDBŠ$s,SRɹ\kcnғ\JiZkndX,Uv, "jHDŲw9B$EXReks3Y}/K(lhDErm \I( Y1Q0r(ggV&LpY4ye-*81̳$̋J 9''w)$@N LA#Cjdx9;K]b#?nmNN ø^oƖ`wcMv٠D7o}kK]D^zd5QٿX$p,OdtڝT>˳{ڰ}z/dL=މ//v,cyaw<3,^nHτx r}Q{wI,mCnpQQ{8rx\iG׺ݹ>W=j쏭Ҍ^s|u<4#A=W`:7~/aH O[!'k\Jݟ{{a0篻y>l+oggr3oOo5sk~&5^/c>Fh](m{WS޷m]??5-? "IENDB`criticalmass-1.0.0.orig/data/bitmaps/cubemap_4.png0000644000175000017500000030216310265636020021321 0ustar danieldanielPNG  IHDR\rfbKGD pHYs  tIME IDATxْdIr%v̮=<"2zŐ@ȑy` 3C5~\;,@rv@tڌޣ(rc1#qâdp.W䦊N[syeseI7<1F, .cn۶82Aڲ̨Fo3x` ! àYnMc Ƅe.cC1aG,ˢay\ 0nn '. p5\p0s^I#_PŊk.23k4^Q9p9]<5˿kqM L:/1Ƶ!^,@^Q <&ƈ薬EQzxr{5@˲b b&<,#!?o)%T1^Z㈮PPוeY!CYtݙ pnQzY+T53)UgJ fkq=%v# N q͞J˸6'> q=/j84P\Ƶz:!q-׾d><ׇPqu+gPbmV\ʂ#)28 g@]UZ:Uz>ӡsz |0֠s:`8=}`8g@-B(@seAښR,vrRy@E~yj՚-EYcQ0hP֡0/&>p{Ez򿒒 1Rޔ)Eݻ1MRA_ *i\nvŕ0.t +^5zhWq_5hcA@lƸf ٓxK.sfby4#9\a׶h0֢*3ax]6j qDdH1KVZg. k,$*uZ)"pv!NY븆עDo^/vZyxbH)ZtNg4MA3kcRƒRTJdY2\Qt#$Ki%y^652cIu,puuq@ljcRiu}۶OW +'6 fe\Kciu\izqPϝ#=deeYxderXNp]\8ii">1x:sD:Q5 ~Y42\r%Y .A*ж-B1%˴cPV4h)˒AL24v)@kYF6`8r.zm}cF-EQ*$,ALWW{O3_P5ʲ˲pנJ̶|p5JiKėpqiWbW\Oz=5x_m|@^q\b@H`\ .g\ mۼk,eX",C. \bY%A3Hzi.6c\!, ܝH~AE_?oN~)%\]9qѺi mԭmwYS9%޵9A{9>--S'#敃( +lDː_9TU#_muB8g=~פiv\' +Ow>}PR/J5[Q'ΊkRS\-*Wp"\㑳 `\O_Ƶg\0j;"^W$'J v(˂qT?j k02kxd\muiHdZlp-r \c  :P6`2.@[MFoJ"EU޲eXc A fp.TWD ൦HR>iOg0,**$VbIk@=y2]CjR*m~྄ڽhUU{ooobc\r +4\ +p%%}`n縮B ~Yж-IJܒ00(!ńmPq 7npIHYy%!iw,^ }߯zif\J'rc`09]!4 AEiu/S@ ^JcĚQʲ4w!t:ai[.IOqs䖸k,UGqeFUU !c=}tdjj.p-+ r N}}z:shb0|xKj@qrfxs}k|ytjѝ; W,ˌeYEA%noop<>iLӨQ4!B0J,uU:!Vզo<˖v 6j'|uM;f%}y#龉p7zNӬXx|LEQ/ȸN0_u6uVL +r}=ICIke8f&}xW& &-'|Fj'dn1Y8 ‡7H1b7rJ/5Roޭ0Z̽+s Z!╳ƕ0I!i=O,%w*ַ:)),A{n2:@ZTMX5)5,sJdf[k{1 $7U4W=qmgLi$G]| ȭN?tus1j7xH 2^qꊫ'&4u\p _Ǖ[epP%\ex5./q[m=C¥ͼlq"ŕYg*!Rd5~nʃ0/31hdYjG‘gyt\g$`L*#J4HX+V8MJ i5E11Ņ@)dUbPzDENeY13jTr,m.x0|>svCA?=x~hԃIME?[HI!7 UNAYqq%寪G⚱25amƲ$OõRlܪ'Z=5v+yA?|/c&LT[\[uxW.!ubx;1M 灴if\b׌xJ9^Y4 fbH1r/ \YoEɟssqv|EY1_q pנ)>^ܾ| ,^eI➾GQ*eL5M<$rɇW.&Op-ˬ.K+q$[ҶzHc"YUUa& ^=ʍ)D&ij9iX-gGJs\iq:e\≠*1mp \*)&dNj9 Kg{e e()npM͸)K$/ yt<>09=>}k +r`iOpe"H]mq=°auй:~1dg. [4iEG.BloMBLo[W:~*pk|׮Gwc7r7q;΀څ4ŗ9u`\xIBe*>,X"a\=ȸ)> x:Tt>eNҦ:C˷*gSy|ۛDL,<2y}!(RK" p"^zs\h@WmY׵>;čI1YkqM\)%+% G1Mk\ϊ]Yzø*)eQ s =.Ӳ3ĸZleն*ֲtB3~P$^ż̈ʕ3|?Õ;7+=CfuE\H3]4\yxȲo8bo UATiD(rM?w}?0;l~%՗~g98f񮮮4X)],TP׵d^ZTCYjy pla5/Op5?^{Ԣx+!2-:T6+LDd[yp?np]f <}2Vw`+yLה`E?$-fxv{/7e+E#@cOq%1X2SpW`~|<*8 ]koZ<p&W(K$(K:q' 1ܓ\à8 xaK^#˒.\_wca:=QcinT&Bv>>>+K$<`q5?l\ 㚩s\KA:LU\#C/jho&tZؓ;#ǫjVUq &[[.w WWr~%\<( b-)eAd9h.+wab%0 \_Z~|²xNd6nxSHC %@E3Y a6WTC: /˂RGqRQI#Q^W:cͅLIy#TS Wz/mpפz J飦֮R:$Zq5W%Fj<yjtGW\CEpMr0{C.|_ ͔4 2W@R~aRW0 M? I<, kiT/`/Jؿy+MFUժ hqHҒnlx3eXk`_%%hT%ybaH13y~$8\]puuЩ)yUU1P)BmA'O"d˸.z0xd;.6,Kum&:kp5\W#RIv]4_ps\eŕmE.8ecktWf$:.q}f)ܡ,Wlp/`ŕ`ui t&I:0~+_Psqu8 pqVU"/^ՇuG_!+tbZI㶃LAI+y8^`%EAupʲ`YZʃmy1 =HZԊbI76R4{Y5+i;ݎʈr[ s?R/=׶-zzr৸Z+-q$J<S2d~i-L(쨚!W.c29!/ !ħrvW0֨),%x^.uY_%bp+?<H ==W{xe\s*qDrŕԗ?׉` qm[Y)AisNdBKǮ5<ܒ9un-ayArckN?4ݚY!$kuO>_ބ` ׽MQLa2NKĉAhtOǵRAVW:aI׸Vn~p}8/VI7ɮ8k3HrW+O$X\#+jѰ+iK@RimC72$b @kTQHp5?פ y,X\$e/`\it#OTJTU$W&{"ו^1E+M)Ba\Xy"ڦ <6񈪮qᴢ( y+˥|?38µWф#FvE<'=8d>"A+٪O )fbt:q> 4:C囚>a~4__5Sg=wƯ{ ^i)ݤ5T+V\];Ӻے̤WܙB|;ضJl⚴Jq 1*v;-uvVZ79keYi0C#3ə3de**[d`Gjp7Iy9Z2gM_U `d pÃqMPɧA5777Q݀M۠, t}T_,`$ -Xm,)#d3+2tUv x<_iG,^=}‡qvIEaRk )bP[%-v)%<<>`4Map ZRLyθ_uRP\3j-ERxՄ?Y*B* RLkAף',ȫ)#BaϸֶuHz3\1ϓ$ [)ilpm<^S}c+W)::2/W\yZ#0_W8>/_HѭWG62$&[}ݎg&^,v<nn%i'G1ꤖ to4+6֠i2Y$"oZ0qdS,rP%Vs\XcH,Xݺ&E:.fxƕv)Ֆpa: ,5n3r-%V: z,4mM}tv%UoL9 :/rR%UV]n_n[z^!eZ׾UIxtm~::um>Õu]˵ֱY G?z=ڍa;-JM7( N-z~8(J'UHQhR1kT5rޔ,4d)#p8\$M>x>KE۶Q pQ/D]Yg۴9Y>q&j#6H2#vS{ šcM&e!٨.IH0^ I)>Ep/j_Dm4W AtW!`+jڎJ.C64d.4!hzp^f%e`3Y9ĨaH&0pyM@?h%B),|`Q"$4S>lbmVQ#k)!Ql\NIJuf2bBɬEii tr2ĥnUnh9E7Ӌ /wƛa o.~g=ȥ)BE-UU#Ejʃ/E2Nq|RdkSsbtxmWHhɶb3/!\IENGjx (mlWp 0j.p2eJBϗV|eYvPoyob g b˂ya>ª`/jE^6~G,7akeeYk '=u=[i~k lx%@-:,"D; ]YZF4a! ⩿Zne6bv+{\x=xb\W\ꢤe>RJ4k8w"W4OD Vq@ʳLyY6ˌ"\fѰ\ߠ+.P[\+%I_Wk x?/~%qcL/٬ 2Ҍ_t[IBkXSwX5O:i@ 36tGL#s|s@G*q#0|]E#"i.yL98 <ŕ򢠙,SWYs\kg%;DP7 WBEY^uu]|NáM2 #kex<|,3#|1K=# x ,.q\eqgZJF%bC_]$ z}P$^MWE)ŕעp <,z}?eƸ7~7_k */ k%ۀ7Ɨ֓ˢ -k_D"ɹ]ض-kd;|CBo0q}G!yڋeDتPBXPW ww _>}ZZXGqPp`7 QŔPWpswZ2Pǣ@(k\oUO-Xy'2crUQiuaJ]M>p7|C5MJօ'4k<<>Y&t_vVVH W01L.WHi; 7S%B8(H.Ġϸ0RN2`CM*NOޔǹcR{縎:srg\IC u ̅lX5m5ۧ??~vv`ZP(q.'lj#γgFe"ϿGU]`YX{Dk,s ;9d_Q0taBw0oqsc_ i\?Dn+w߽ӉPӡޑy0@z8œ9ͣKίA8j:EW1ڐRBuX4Mn1TeqWXqrhبD4"fj9ǎQg}C]2|rNO&2xp77$8$qz~ˆ|xOk YQۨ/!&c2A+ӽ*$?~ԩF*}'DU۷x|xxz,L#beY ,A%aMDVL-DԲa"/ mHr q:hVHg-A{0_ ~!z`.fUmG^qdx~ 1W\x-hZwţoy|B MJҌ–P^\}Whihۖ㵄>Z-5%7wwwZƈͭ}_*x{L)>_=ĒX|~-^qMCpu! )x?s+7XnW|UT@[~3C2OR >_<>~=Q$覬Yqs}GUyV-nS{0nf8])%8a; ],v_0i>E8&$I-%-u2/?+ʒ"y|iڦU둙L=eeUYR׃>9R C q#[wߓ^0d#ROadEY;wJW2Hy Pۗq%ڰ,(5[WQꟐek`K6כk<<<@!mD+$scFz0eYn67j4tU` < *r6xf{nX4s#?bk8Xubx,3QfAx5 YD-v>ueU1a%a=R;b9RZYGCW 79[p?U~շOcpM` IDAT.;-ә㭱[\+;>ÕW봺]ig/Z>5/b Ñֶ'D<Qv &"y?ֵQxB7iw |ˎ?`0- 'p p[Oh&]p>6&΃4합dui*NE֢nCl%uIAzY7l&\Ńlr3mgM(<ͻy-]R"SA'mpy^9?857u~ qd8 2 PW 1u, {i >޿A ?f +`3X#FH熡WvZwe ` sRwfk/\4,*$Tv;̼17$)}GLs)[`j7 s_`* {z)kՊKpnyˍ7dIZ+C:rP}UEf$CʏoM̒[ʤo-uSkȺ \y&Gny=\Sc,trpݶLWy&߄]C.NRAugeؚs;GZM,xƨ!6.)|vL%KeQЪ Z Lb.k |CcEض gH2e( T ׅ@Nl?})iϯPe0`,w0XZI&D QqVT?ĮDҐs9=>#~TW;|wM$q`puW7"M2Y7Ŏq^W7I|i|h-{uaJۚ҅MF!)cF{e3yNʺ_IP$`Ǒ?Qrj!vj-6^ b("sU"jyV2rWtE#cOivX,X1yiBSp[0⌔8& n_\?ʔUX]7l϶=߶;wΡiX-}"wO=iAr'{2ڇSw^R"u~#L:Rݫ\/pu8[ 8XCDMr%^>cWmDCCU;L_١,+H$ =G-0>}Wx;42 3Ԟ@ӥo0C>|:;薿8]!Ť-z21GT{{^u4g1Yo㴠,hccW"WԭRk;~)E'pF;KI`cpuuEYOuEq:? {J$ OI@z0,@hZmP|<?ЖȲ8f3tuYIKo]2ȏuC+Ccnߣ,9RF 'UgQeYQ>>~a#b`3IK?ag8d~IyfOv2$-w]Ubm8|w¼C7  y0ΆM7*&Fvbx||҂: #CD] 99LJ}woE~eY__` ]/#GL{TWbӰ`:X`ڊ{S4:{Er.4ʲZbʒ/Srue#rMo wȬîiMpYF`/ 'ے YF~i`5+;ܝvH~2/;ugպo 0ěHE@*hݯ0 ~ L&1W1T^#9RDߏ0;\ص{#h0[eqgN r{DG3x;luE\[eYct&ΩdT\d. (p0f=$cfȌʪbHj=3`u0j,Vgֹ0sTwK@T,?n#1JqXi2 d<]LUҊ~3V#onO >!{ ⻮ci*c R) W/,W:2SoX7x3ZX]|Yb»n Z?wRlrcmϟP7=ԈQ)ZHsyG}滷_[pŌO P.#'hk3!g\ңItG֛-ugG^.P]_?ᙩgejH>\uђ9 ^=P.7oh+@m=Ԁk=zOgmJJ՚/Hz_Oryp8-Y6-=xw{k'rY%Kn3Hk zWۛ0=K{22ψ0}zZm /T#u,b_Xk9NH)f*~ayT/8a ?O]":T]Ӑ|4m3cՂg5˥gk^x?Fqss&raw.aǾKtM鉟erQq7VaJ)"SU*P6jHň1n2u2i6f\kHM|+}\3zX~@3!lկ=_Y3R4hӦW/_sL/#E^Rr:d20hG=*n͊n(nr?纘s#C~/nLäwn_=ឫ˻φq<)GpC/EFӴP n#L[։__+xϱ}, Nh}b,+^`J34EDLyiX3wrN0{]w(&QR#rM4DT@YI#Lv+f)ui()ϳoZSWDi hTLt1#e)*fL1:cizg~y/+ޞ!tL~cL;Eku}2@eLYhbVduA8%oCwN!Ba =ntpVt3pv@Ȁ1qO_A"'MkBг]F 75GR =^wdYɋ5/3ڜP282paU,W+e97w;rgwWp"(X-JY9 YzOuGʲ*Ur#"\P!2,\α]\KIkoVD3Fc\F9HaFo{&-ww? O%[QeY,"Z\-Y^8yִ vzQ}k9yꦦmWbY0Z>2@OG0 &BQ,K֖~s9Gj9ۏHnoc#u])I11vJZL)(h.3fbw/+o\?*Kʪ`L-c*bQс0#eF߶h]3V}I# [:ō,7o>&܂%Vg³^O >61¼jEM84h=R\ c̺2VY~=|@YxŊo(9/l6Ħ[[wWx͕"wYZH%hEvoq{{8 }C;mVٌ9=;WVް=ط\/j e`^ajB:!.BZa0#9l+U50hS+Hk[;=OYoif~ǐʯJ1aھ \")-gE֚eQjo8:9!'Oߔߞ>cf.c*3Jt?l_wVK BJj]s&̜͞&Q-~g8g)]LEzFbÇI#U\?k " y^{ ڞ,a";|xpnB[k7/vEA!+e9dR(s|*vRFd+VSiklyO6+p›o~{q`^~J.</Mf z }b^<dF,"]q>wH%q֧4c=GT88|b{}!@EvSWׇ ,u{7T`QIH0VJQ(G&=+}["I8zmjuLǙkY #ɳ,9oq0#CLىטy\.y/ٿiez޵VՂnzso ?QU *:(!E24 ?JZ-Mc>S&"TQv.2bձ$ `"SɵSf"zU6ɒj!XdyLF7 fA^c(1b_X-bdėQ-Kpb! &-RRn T4kD(a2F'KaW/)Jʱ^eˆ}-M|`c+I~05QcLJ@4pJnKjRH֛:OS4&b>_y'A EgM70!~=TUl}eCvsa&n+^aMa^(C z7TJ1z^9Ֆ\xPdӴ-< D2 )i+ގl7%JF~`}|}Kzv}w,t݅"}n5O>O=?tMF a+k_`D->'T\ \_)@3"ԙۛ[w~ƌvmjpg=8fp _O[qEvij@hD f v ~"89ˢZ`5Nq́atf^9lw/W\OZ<0=zi.Grz=b?JpwAp:^ /^ܓ՚m]7'Cl[~kT<'RSѤ#D~P-Ggi"mۈJ,85a]b^# oX=8RX,g@OȱfLCR)r!(Ry?N\ۮ0DzEIrY$+gc'XQ0g\L bT |\p!-r=3RzdK!GRslZrBSAdz\:~^*دT@1M3OtqU&i28Wto:|p8_0כg!o8u.x)m B٬݆<~N2pQg֟|&x,EY!'ԟR6, `_dފůɄ{o`dwRNF/ @SpyEY\d~r/Ǚ.AYVT3 OdRޱnXdLvGU-EI b4$0Dsus@VDeaYp&v{vS3 ؎@F=>5NxxG)|Sn.sd*cZQ-QTlʁ01]U@IW YK?N 7C/d 9v;-رt\GyAV.0= IDAT^)r{17ʿ'-Y>xL&5gxfo[l֫9䥵4DtP.ֻyc#>2,w"mR@dXo)Cur>|7Gpۖj9mg(Gʱ,wU^U 2~mByT{ >1/iF6MTNLØBDq(^>V?mt`+6|ؓTO2oBj1e2Bqd7 <==Okx~KeQaM4t}9jQ-l{7 mr?`3D`4yϪjX\ÏT-6,6+lw7]Ҷg-`5m359,WXe-؆x5"NiҔ^$8fal**GT,c eXrtIϳ5vGxBʸo!4ەg%ݎ M&W]r1F\"׊D#UC^K2Fc'Ko~1ф".W\g _A_ح#( bC{EIKV $)Y35?{QX&BDLf"C:6b}Jv\ڲeY 56)0?ŢJ4/ӵdaKQXEk"^lCL_ڌ8m}d2agH?DJHnH'ݢj3EIP,S+> \д5a|Lq-*C?m+޾}z=wcq1D>@RB*b4;0㉲8/A76`|k^zE]7HZZ\OZre1L{Kj2հxI+L,J(d=2)f{,uM]_uT'wBIJ 3a2$I)9ײq 0E=t _!)ʔ +1Yg (]|NI_ 8O\aXOaL%iYE5wXTլŽCHͳ-k)D+V)> Hl*.=X#z@o6jȲ<nttVK7np,*;Z5]zql7HzF_<^O<ϩ?4fc{29$+B6/G=s&`\"Dv>145u-?b;p#2bц1RN f>wi^d#K= *|ν\/QHX9XŻJy%<ņO>AFEďaŘ&%~zO >#L"'zN hђB"s9߫?^։īuDl[TQxg T  /Y)*x6mƇuQܓs&#d3ÑBswOV,8 97i*1~:(o-J4 o4yQ" %hخWzD8]vL.Q3AT&|90wEkg5$05XFzA%LQhN0ٿ!fD\)I瑈*37؁2UӔ ٧*xҌ1nIXWtm,L)p u{QPE x:`6,J{j[Dڝ(!x氣^@8{|l["4v&QWGC+Ղq1,)Riz }D>-B(x$˦2p-cpN<+@!LI[tv$af)[mҚB;J9<8=Qr@ ѐ9;Bpx |HdtNnb >g?3vG6l񁀳=g{Ԛ1ڐ U ]i"NJ#rgOoprO"7,Rc>y "2(z<#a9HБ<卙qsf4]8>E6fŏOeI)l@l%+z%nk@|y7-?2/?S̱*cU\-풆cԎ_oc!DN BUf / 5B9AGdxgcf{!bBnbI㜧$ !2]pc:\D&z;ڶA>$SYhM\(=rJW`@rUOۘ, 8RVUZufXO~9"F%k+~ wdGh\9'"'i^kvU%;K32K<ڶ5SuTՂlq}j(RUi_s6n3֨,3B)A0X.+3~ dWoxǦ٬!5R㰭nbXrNmRӎ,^sdSkw !g8J])f"K_ |mLjaOu0k&IQXQǧ &UڶAklSmk"5m4zԳ=/2U~cL4 ݖ@Xn\Axzi6*txsfsmg+ t r)d6:'d[J }vo(DF4eASGN|t&hX2քj(y>k1} y|(˂9iBEM,rWZ|jQt[03Fz*vW#ZQ9,ႎ|@ xp~XlG<]rQ_~L =ʭd4ͼ)^Y/bGV9Y|Z)S<~> Ά$4m@P+ U p`G8_m3KX5.d)eUS@UXWϏP  ޢFQ{Tۦ!eEUxj#X+;=xC&cUyϬi.c5؋v Ey}'U[={Ӭ%C7wGp#]X}_etGFEEb `EIh^7}@Xs/6B$+x C5OcV\.臞꺦OZ}b, T7S*HY^f@Gm"cnY3W7W^QҢ-GJ`$Ƹxkb6!p2yq,=u>?=){6Oـx܊0vrY1#Rgs B!Z.~F+E&mAbz={nO`O访[ĆY EY%ZbU+bi/c!,(KڶqӱAe o9 S\[J1CzpZL@ KV^)smWhbAw׌-}NQ2,ncI9B9|yg#hޖ{026q *z"WUF*9g@j4X[鑾E B>N7?ILd V{eQeۻ4wC %k,6X\< [oȋ GR|]3(E$߼ȑf(*[ĒSYVo 4!EYdP+ߨTXn~SmK]0;pd( ޛ{FAԫ4 /7n p=/^R=#]tX:燎8Mo*'dX|}2Lm7odV{.'7RqSpgcMMkX2l7adN !6кg5BƁi8)ehb9Zl(#"9]}g\q޶]$ۑ{<"`q1v]GPvxovEeۀB4|CyKy(0r^U6YzyBa|?Ƿ($n Y& Dwve::;RŐIAYzct|^R&n h=[@Ub,$B,LuKǣ ߏ:S'(˜(j,GHA4q5V9t?OQҋ0I'&TؘN13\)Ya]JcHlzqcM#lȫ5ցT%RdoWqPEߣ;/ Āt5bҏjEv]s4k*9PqA|M(wj!:}:JP~c1';*6氅jNRzH.8TZcs5~ķr,K޼yMS7\9ټT*˲Bn2{`Qa474}QPͯ:*$B:<)%EbNWJv-\B^ycE/p]}Me;|fIwiUYn[ -3tu3^G;TBls?Gx,W11*SN C %eR@.;O=i7aKlM~b82ӿc]_$9G|LA>gřw,;[l\."A v;\0fX}Ÿz9}w2r'z,dv!HiɆ;}Jm#C nP?u N}38Zp?!'voՎᆮeKɚgJX >6檪K}xy~Ix"ܕa=[)xWi"}JCGD0}GxX;]Gh -EWgͺ<47o>CNIQb4Vr^/|mwT'Hd9F_ R"u%.'NZg- 2ۈn8H"x2rHԩB?s}D-y3_## e[hIP% hkP Ƭ'Je;#چhZ^} NB\lK\]],KOvK".1_\(.[DUՎ{L#Ufu3` l"0=oC3jepsCqN1vUz䎤Ti?n6e0@Kӑg W[v9jWt,#"aߢŊE) jIubpQԨgUU2-v5 /knfy )fզal1WL8wc )\-Z#rxqy=% Kh<|xKl-]KO?Ô P_ПNpW)DQ*cZK,ː4_3pqE!gpį wr&\ĂqfXt da*).ZN|JS3qKI@iF %NG=KD'pZDUhp1=shEU@ @(nGJG'0𸠩+`",;N8 ':#4[q`G8@X1Gpv gAZFx7GҡZHP%]`4n=TEE;Év1:`ܟ1OHaݠOQ! (uDYxӟpROw`EأN{PUtɘrC,pxxa( 3W-JTeE[e r\jٌDv^Nv]G|!)ewlM>g2к_N?X>T Vud'o[{P(Ey[Z ١(|WXe7/YExʤʒS\tz@4#ab5(%uģ /0.3aYgL[ጦ~.-ѦLM\)dmpG B~O?B۴l}8a,RB!Cݻw|Q6$W VB0$,RYj"a0 h(=yhPDͥĴ8@Q0MYU%,Q`ߠPmwk t`(0b5=(1!`_> .adᐕ%;n3"0(!TMXBj +H7B\Tz*KLGi/F1Wiҟ{l f5JB0dovh!U8$\9uczE GMJi|@6(C ?,n޼f60ߣP |W{j.//!uGR)p hzxY% aP5=z,z98yI"x `.<5y(h$kG' 5XE!"׷0U"e/@mNcƔWUqϼGi"D}UA Qi\D? ـN<[6z&o",>8N{7~yf0 䆚b)#Jt2d<7M(̺[nZRk.JI3bW  -`!8n.ܖJH%p5@-hi 'hzE+8r<dR\ybc 4MKr`BNpؐq[/)m=Ոu]0Cc>=#e)7e~ĸ*x|+2%C+8G#.6v5.7U6` ~ 8E\Muj#0ޣ h` X mp<s.5OP[qFjX!%u|P]"o :0緐a͖.'zPfEniZkHQUY ؕ,S pN2l7B)A$фyf]bb͋?F~TMhZcCeY@k HC* oڶcI cTgK,)NmH%ѵ/ }!d_"=8X7GyYPU~. h}%A `ʡEN?K/L 5L%yG`H#UMSkGsaQCR( lw[3y'[b lK(, b$9r_l1sh✣ZY>-jWXiAHHJXs>_iB[ZQl"+@%ҏD݇#ʒcgk{M ]B`a.LYYWÐ{>w̛q5"iCZocF \ y[{Vm֥/.t'ə B T"u D"1=]Kv8O*^k#ǦBm7LL5J=D8@$qRt Wi S.O {~4mg.ǝi$tY Z eYZR~ Lc(AJ<*Wq^c^eߐ7!1ϐ zYY~jXFܲ+AE2RK&7>iVk u>:B[:x0|rK-A Kd͍3>|'BZ>-"Q\5h2ys 2&ʤ/GQ( "$= :+1OOvXRp\y)3_6E.C}ٖ+}^lQׂ@}?|> rLSӝOq]>|gذdig-ey3"TJ@s1 BÇ ȶ1Ɖl9+t1h7cY˦RtЊȇHeqw ma i20X3-CÒvҗEQbPXf~҃&]qJ0)~Wq;RHqGXQȲ, ݅1}+9 IP Q@^M b$CڶKm$M$RIZZ6P2=&vgnc@?t37 cSNufA\}ײ@![ICʶOqQW )%'ø<8Ej~WjQ\iGq-HW Snոr+{NNDq- e=kq:qy+Wq.ЉZkMMŕW~Oq/Axnq!f?ky^&>[y$/W+ua D)JR\Zg9vW\n>J=9Z_O%RXqfj|Άɩ ĈF6Kl |Hw:a٢i?dCJ5i+s g{xWƍXp"9Zi4\#A"BP YA`ӊVIOVL>!F =p; Ǖ/=t;D@ƣp>OiҥkJ@̼z\*༲e_?xv^}ΤKϭ׶8Ƨ\iPynI19k\-%9 oŸtӥtmM^%"l6]>O7Г 52onS5Tm::<tp Fi%Kj˫K:!j'C4x۟'=S^!=m%䡖Lֆ|ҡI?[$sAs3y\z,ф((Ȣ,^\`wqiyC:n$uw|vg5Ҕr@4#!sč{q ...(k4 2:# &5O2h`c ipz5i>ً@ʇi4K?kgE:JmuM5"it`Jv|rTxw&7f5Rk[lHI04h( jxQnm24ཅ,^ BQ IDATwrard͖))ktό4{bQ+ >Fܥ)|vtF ( :wiK{U]eq5Jl:i{ulGzZbEMͺ#V(.$m! y] +ϫ ђka$R8HHOźl:HF [ݣ@_]Upޡ4]?M>34Yl7h.>Lw?{φa+;mN!`.+ j cIe\2"m)1DZ,+Vэn8?&B42rPY9}LE Mݠz4Mn[ůbǓG С.4(SWP,L1bSϨ= 0̇)#*+x:wa-1X2R (RCܡOvxż=M7s\ e^sm<]b-t.1E8ZhT~ZBYtPTEo=8P̋c n_þsh༆**Dx8u:ZGbqG7͐3APcf3r~@JQoi<85S\Ʀ (ageEQ`Np{ b MM~ :IKb/wjn8qgϙP T .Hd"XV1In 37ucJ),d,wyA`}OXFWP~EUHS~l&"I_ X Lnyțzii%ZyLR]Ҝwk1 0  ֐0EVάX;w@eB (2j~Xm:/( q=aEU(t 0}Wp\ 5^Ŏo p'mG5aDvW7/'f3CGRPX-^Y|?p"8KTpf JU@3 .s&KICkYp.(n5:BWy9+\|/g!< A qQ5 UT`LUZ3PR z㸮Wq\(T65spgl/\ɳ!ɇ6*‚tQדkVPOG١fhC]k2cdRHG!>5;MڶEY]^a1<#O EqznoQGAu]7ۅ@]UhBHf P~w_a*SZhPS]Ӕ+6XrFqqM]x4Cw/P #qF 詷mjR(-z78OҴÚqeeb3?A%BMѮXV2bZh@Xܧ= D$9~g؇q{sA e;M-9BzAED 0ZtI{+,DϫvI ={?e]uY:@eKFRL8*&I"Vas}/ Ux;YȞrReYAJ"ڦ QeFD*a{hE8>[\}¯عPMYఎpvkAŤ2#q:g(JjBFEm:JkL(`̊!Lն0o0~pJuƲPuAd>QɐyO:uYd 6eYr`2V(7% S@  v-s(`[=<5룸.ky k$L٠*Kg $(P4A(ʶO)N$?^H0=a} 쩵&:+҂@MH&,NBHt]5ihɮ9*Y*Zť_?aTyBUWf,Y4U]AX D̫_ݣ6kCX.u;Ԅ 0~p0&i_F(A`i3&xjӈiWxڼBdȄt |x o \?ARx4MMfB 8] 9q\KR!BVkt  % 8p^&ߣtn?EY9ԯn1|+3X&MCUUhWWW?1{ T+,1oc)]j *,c{|ݿwwwY>l8iB/_$Vۡ3w^8.$&RM+@j Y -$ ,ӄi`Vyk+4$"sk 6pҒt nQƍ'uHK8QquS祚a-tU`'et-pUYݾuÇliһj GrR~ 벲 H XG*0!,5vF8(1/KVpR0'//y)ƀ=}i5./$\,D$8p;/s^DC(6 . C\h3kg@S: V`R.ߊ+Fag"&eSL5Z *Oqsw-EdY+vO7o`&0 {PyO"c/n_x+bUmM{ dW`ݠ>~wG+GG\qE@ٔKG뇴ƴ/<4ƌ<[;͊ Sװj98RT%Zvaa? \u5Y:XtQ`1/F#: 8YMPw/_BBILq$Kt6o)v;1p-PA*G[FcPp+ľMԓP9ed%`{߳ت~WoQ \G% ]% a'}O=$fvjXtO[}J)aDOKv"`y*0?-( >0D^0ϊh>waxXhiή$w7_\]bsbSVXӺ`Jae%}C~ays/#K?`SV,0w1B+Eun׿/KWHD ̧ HKJlHV?b|5>d4i=6(| 3pT` M5RZLӈXeܺ`:c!-]F~ Gؗ6]p@m0N#`ٴ5-yIVJcgV^{sw3=4؃H>J)TB0+8Ÿޣ^v20@rt@9EA6_'g[ti7%'cچTP]\B\Q?Sq*MY  M`x7`8 %A>R'"҉JA?/^`ɕzYɕ8) Ly/WIc*cp-x0!C!0 ;XW"p$_zOKoP3+F:r@jtuʣ$iJL`j@ZT՚W˪1+zCWW(~[=faJONeU nqJ(8oi[kRZ!>7=t ᑨHƠ 4 .!_b FS(ǰD+mF2bmn0Od `\?@,g(d!\]]Qs@95穔B]UDͲ+tr4kB>) jLv-xɍ9aS+$6O@**$Ҵyu KEh0 c93ǵ1T=>/mX܂m`g5X5:Ҙ<%}Y `[(hF5#RW*nɴӟFTO{ˉovyo$L+.`|wFDoI*DDl;u5#*: bb+ZH7Jk\j=N~%r( F!"8kCƖ ɏJ~YpGlB/I@v;{~kneU"b>`#bQˀWhkz63shjpq#H&$!DyF#,`Fp6f ,+5Yq>arwwN~&k5톝Vk&n9\vz||̌5'= kLUJ!F`r:wo[T7l,  c6-5]qV5]8. *ZC *=%^U ERy. VDLہ-O.f5y=ր]Z2 o߶m.5p] _ 4 P4UƘeDVWe $;fAg@;vfbzU@IvqnO_`sl+N3Q I G<Ȯ>DΜh&P% ㇷx]CI()Ef57opWXF[eTu(Ǻuu`@DĪkl-.!w4O/Gu~qwwIICBV/Ry*ЗӫLJA5Ēzs;٘,p>L㈾?cF=1")o߾%=/,[iM:6zyx|]|cu%,aCE.M:qDp[!:BG[H t$U_2RЊO7g^|&TwryJTóV=ኩP^ :biN% "مuw=Sw#/0CAo0'ԅ<8FQ t-{V2Em6ަqB?G3ƻoi8OD>N%$v7(z m+9 AӇnKI!3{]V8Iih)v:] #eZ8OƠ(}>ҔM4-[O#0#F2s.LӘ{[#Cˢu|ytykU*]ڶZ֨Jz $;hԸx;BO,Ɵ@xy\:K*%a@U,˚&; N׶m? PW04aqjF Д`Y酰Ƣ뺏vdUy*Fu~]:T5)m+?DoHP貀J ls_ij]$tYD@EUqfx*>HSu]P鏘`F`6Pc2#FK)RTǖuA@ݶ3PdE Ĭ4[VmX`%7vuuןW8X\3 (JJhd4agr d(yx/GU/j4dO=B:bIROgo3__[K4PYyԴ[!/i[/Tj9) 9PYr,1#F8Oʹ(0 9 mKRH4S=f )ہiQ +\Uz{eK+nVG]23 Xe4| ?hFv*EWrK>~#*D:k5Q% 2D٤$w YFNSH'!11$+K^~XBE$Y8v,8e',$) Fsɲvs/#x{N/_0yJ"1jSb7Y;JӲ.33Mz0Qif&3M9}Gi_D5.bxœ;,&Ic~3ƞ8m׳68e2.h%qu{ ޒԙ:Қ~81fHkNEEG;h'ymwr>|/2]&2(G%_dzgR땬W_Wkz`4NԤhtրsɖg= ]9}0yqY@/ql%iJ&Q؍8\MF=-rj:dyy:Rp^x*o=g ̳,]v 2)E DoXZU53k6 CB؝qƞ%uVh=Ȳ<(+Ig8e%?T_9H1TEJU{TБi_ޠVkNgUjȺ4&xČ=gٟG˒nKed?ow$dM^rGI/muT{M(r:0zUpMUIL%2ՆvC̘fl'Iq6Z20s1R7uS-yVŨeuuKsL8 _ x{2SpJT3i"jpssD;|t>"hqXf#FʳfYMDwg!*k~b P]H:qh!VXxiL5БS>bF?sYd8b{knS_̄wKӔ$֬(K pv)v}z 1 TyLt/=u ]=&UAj j044`G=8pOFZQB32J77AA7ᬢ , 2 Gnw.9$YԞB^$`{{K.+=% zyw$hP?wjݲ}ix|GXWK $NIKW(i{}xHu%'3ҢF8Sf^Q_p5^U]ߑe9Y>+ ^e43wuű)mO} >ϕ[B=?3J>xhHFUtM5VM" L<~D wǙ>ck].Hhd#9vz"N"Ö }Π8LX\dE^H8zMl7QFʐyQ/+WQĦ6ED2¤qxgnjN^رGNTQLNQS?1~珼g_-S|x3Fpa 6 e!q a~ 拔,W$pŞ{L9"k4"O#qOb8-W׋Cgz"^\{pgG'4ª'9M{"ocpM!<LdҘ8 Ybk,r8gMSts8^u*ɥ^OԫzYV!h#-YsN$f=R Q*5'ϑlDe\/9Xpmo͆ao`n8$s"L뻀 ls h6تU%Zs@-&NGTߓĐ,>uĠFGԻo^5hS`zt qloȗ=4Nō= [WWKKX+k"GiP}~OGq8pc}Cy1覲*vU/[m1FyK#£8"K 6C} tG~4 www<=>9H` fa>r}}͛A kzI~D#6i 'I~63s0򆼐8 1ni5/9r`i[yz2#=׿#z~$J/И$Uw7ih`HLp{p^QMxs(rI$ 9^=t>4-!`kUD=;デ(`<hP}Ĉ(( 8dEEWWWYZga(.DCq`Em\_]QVe (>}DlD9(QÈ3CwS7Qx>{'"˗A8umF< uuMԔq)o-]K8cX4uMDF?P>LeZq_}Eb3RzO'TEN4#OS}g^^9|w#p\٥X$b8Y'):4aoĺGy̻|3D"Zm$*@LaolQQðhۖ"fyIgNiT(E D? a`=ksQ gƥ&f\'o+t񦨮k;tȊ/z} #qQRb+ISR}Ӟȗw?p$ ]~UH*+qzzX2g1w 6D @lI%o/zy7k]0+HvsF#H}#?0ZNLmG1hd]/J2oP^5 !ӄuU+jҰ2 =ip?}p͛ Rxm hV+^~ o!9zsOdF).RYUf#5 avA-t{ 3=_m⹾p8p:tGfSfy'μJy$o0=w .nxÚ[aI{?+yג춌 yf\S{"[Qߓ)>aeِU q"ڒF 6(oTtz-ϨnϬϷ`^)΄2|<~ ,1p4m[ Lb/WuhcJ/Ast,W 5,͜e3hv%XJxΧc &=۝'6Ujp$ f+:H<8fOg?a>}K'}&$>J|YRۗ߼O1*Ef@=D&Ӊ2ciC_YNyҮ$ս/Ww6D?B=~Wןs@5 E4WDQD71g8}zŒi$I軎{pW \4NA;p8H8F*?2y?- ?yY})*Y9Y:n^mq}YbL?/^"NHLN<%EAH)GxN F`50Ǫ̖YG<>>.ûq1pyqɤ$vh|^3'{Id_Bh-QԌ\ ˺qۏ3Prqx{Ga{7v"?J+ Ea9Oĥ.9t4DHSbГxIDݵ-Yp{_au^q}8{R3]u_ՐrQ.48!߼XqT.!yQ,XfޘR$y"+㧉$LHy 㦎##ax\uu]1 ܕ!A RǏIV .IQMy8E,[럞HF-n'tQ`QzD rZV/w6oU7mǪ^C6IF~?=qNs,IJ\#<DztiYO$ uU1!ؐ}E9777BƸpu%qB*Ɖnɠ]TMӄ` ZI겤*U<b9}j;AxO$z,a52-¦iE,C{#YdpOl]nfCf{>/UYr%5f.ϱo=MSs>2j,tV"ɸ 3dR2g4l(sP[0J{Z֚yљW\ljB}c/u+=>邢0Y%ǎmK٩0'S܁dRJKI{\|DͲv ۮ[֔3ݲ5&ԓi5&q 7C'K3zh ֈ( qZkkğg0ozU{C뉲qc+s8=K>AE]/T_FM$u/0YIJ6+2LKm p{~{(̟ U#O{ɾ 2Q>$Dlx<.sC>=gY%AcQl^yo1*k{ EؠJH<]'o~p:Cga8Tuz&($Wx/Y}UEfՈ;M(cY^%R9Pmq~ty _4f%u.a"IbX~_Yzt2ٓxIʙ'm>p͝-2D0+HӌEʳK;44w˪eEQղX@jhw/XKΧ;TTrϲ(##Fha.Β׿ ɐb0Kcy ^yu5Vab<6!lXHȳ6w$ W>,8#`PvkO^,| Nә*=6FU٩%.EYʛ;<0y~H"Ym\!r^W%+got&W]k ڋ fBZOp8 xY ])iqM,xvsޣQuCBb|Ҷ[Q 6,a90@OùV5P?~F_ dG@4r'[ՠ_,>y3@# ^k}sKGL#O"ϒ,qmqfDbq%d?k4 , "QeClD*?gE`RZufi깞?;P+E/A;m@xQXv6IR ZQh$Y\moʧUӰ(<ޓEZێ0uJ {QJ+ v[c 0H!?~sFAh1l&b(7[O2J/89[ơ_Oi1vCHnq{Me$l[}j &Hlô'℈X~{dI۪:e"e)meZlLP%GLa 8K?kǃ C,4XY, C$)DQwP5js\$czqX|Mڋ?qM)c @}y(l76 8uԒQzR,pE2W1А MS?׫6,Aq,܃;YqRJOLAA<#ID nE%gR8e(_מ(&Eq$/jV)I1V@g2^޿di~g9]c TM]X+5{:=((*elpϔL& 7u nZ̓P z]4+Χof#wYiW tNڑgiq KSVJ|8lD'\CІM|||AE4unțT+G G )r$ XW 48r3Z3d1%GdUx8Ҟ!5Z>ӤHԫYf5󗤩k e Rb]p<' 8YksU˹*KU:B ]/YwkVNkѕz_bq:hk:_|;qwR<<<'GHğxgZF8fY,r~^[<|ʰ^DsJtw5sA1gEdC443Lsq04xYI6`ˢZw/H *Ng!Xc(򜦮o5鑸>1a~蔥";no;-,%ZɰpvEdI5$0}se?nVU9O[%JWeU7|F 7٭\\0der"WKF9 s&r?۟˹fXٹf9m=$_kDW\e TUUҌ, Tʲ,"83ùpEx*ZIPV:F+F|XUJ;c=ʙј@';HS15$ ]' "“}v*#( p8:;YCeR$Aٓٯj/aI8&]Ǟz=iHLi*UV;0A]Rs"c!e:o.o8M ݟBĖ==KV+5l6/]KʬLMؽGE7}/_FähVK[L..bs̻8~Ş 3 _T"~ vijӒ^*tpA65\UY 9\8H8ft )=:93Z(ҜI5₇^eԫR_k8aZ& Z1?J4u7 )Iy 拏NÜ%5B]> z-ڕHAi?,,`"LRgꊫ+ꪢY&Z&"?'g䮹g("O3RK yD3t=IS1`8ݬxzzxCNѳ o><*D*`Zu^&Kb5E *Ч$qD$QLw: <6x {lPq9y} ; `zmXKL|D`'SQ3uY >\/MkZ_I;gr ]# / HCaXek84izC U}VA!F*+vO֫ adYEgZ(>m$=ih;,a  R>|D6Rr_f f`l}G\Y' 7XԤJx:R%"gd]4ۘផ勪:V7|\!%֛ 0jV\-YcC1Zye|l #2?${V[Lg"Փ{DQPf3 `MALc)aeRuqqnVA-Y/Ԛ,a]o9k@I5UuY:m8נ?%Q2uUKgJz32u-Y-4_kb`$r'1qy/W/p91::);zղJѹ;|f Y3Ut zB&Ijp8,f4Q`&5bRm% úwNp[DS,d1Cp&*+j+%oJm H%ҨqD$?{DP>|a21ݳa+,"׫uM^\^].doL]Kh`-W";G4[1|*=8P%-O-^E18b)$Ȅ3C4NOҪg9S61YA䘸|8sס*l@,e_R,e8:۷ mVbk-sT\Fa-7]kI"δfl;q)`Wa9.Xg,,g 0zr,J08[~V \0,2qy$ G1>=Ҫ Y]s㔲j@,/σ;\`v៮Ws lyc)`_ %) oL4M}1I%[m )͆+SWFQf18ßi"yNO\n2../9/-j2;A< -ǒA#-JqwLЇpY؋,Me_ubs+Ɵf&yk-8(E=7jxxxXȨY%Hl%m׆ xpB"aW_&DNnĎyJ'r5ΘGbx뻐m縹!K3<`BIX"UXA&FQ8stc'2(F;Yޓ8MFGYptؤspSqx?;Lq,ΩA"vE_ݠzHGR^eAYVdipm[cs"/t$-S"y 8UN2 Ja@_ܑ)I#NYKuar 7/x(:Zْh,9'wǮ%sy._kSC7A';<3PXQSe%)É=}Z8gt^&+M3y-; aYd)q^LmNǓkQՕ mr#iق?}kgUyUUZ0n 犠thΏ?àE&.qufdi>s W$Ƕe]vxt]UC w L,YK'݀9F46{Bp=!O;h$eE&abF<=?r@e {"pD۲$ה\10%Z'EA7LeyggfÏ ~vaekZЫF׶:/}W`${n2g#7HE-9FPkr=)P 3i,c)ܴ-d 7_ dbV>}xdZʠ^x?px権3s>•{sfv;/M0 ˲DZ5AQTC 7Wl7~]݁|bey7ye|P[0ILO@[fp2/p 7 ]ihKt B~RWO c={N)v`y- \SW]Չ7)5%ɘq< 25ט(M^vq#.鰵53@$` REa J^WL!/HFn F`]N?qmRJlE\jJB[8д4 UݣVW88_X慇>:QuC+X?{hXB`K3vyޅ)ȰM$Com2۲eBWC"8P q%M v(G"Gp dAk˸Z4m{tB]Tc2.]nl^W59RꎮP WĝsxzzzW.bVrC]WL #ÁQѤijz(8_iL`L<,`k &gcd_NO_rB?spƐ-9裓7#Q&!R@5;7p?Ydb"yF\y0]_qp` U]ؼ6X'@ϰvE&%u:ɅF a9›?#)H2)4 x<"sկ4X.GuBdeMahBc|~ `GUq"0C3֎?<a;Y,3:͘mi@xgy*' d}@QLY { B19ҠT,gGr8k> dzR.xߦd+nur+ \Ӊy S(70XօN/=Lk[ȌϦ \3'%8Od)H#%kACtd#rv=!E])q|FBt!p%[~-sZ˞@]8Gd9PV+m E^03v#{1c=BIAc(FW?>_yd@cTR:fӡ:Ta ?[byk ꪄGSG@շߒ"]e.OSjM)dERJ6#3hEB!Z',+UI.aƼιt-lUx 7 o޼R @rM]#Z-\RI2:{YoUdRn?h'@곅"/ 壄5g4"Xًts=Z>|HH*}iYuWm_qaUR9|(8;%J3=; +vOOYvCK CR<%{K|w߼0ljn>ְ$F#I|@6$ehKpr9RketfX+@lPcP[dy۠, 29Y@eȼGsEb7-pY[nf8kbt:9909k`]g+q! *> !⭘64pL9 ~j %c3xQ& $ʣʑ7m`p:>cf5 h^R@O'\]]Tǧ' $yڔʽ~]I=V!n <ȋטO D@AS]UPLh K,3Q|)OFM>[ǔ"/.K(a't ~g9X#y|J2֦K' Cr`pI]r`e Ma'6%XS׀~' crTzEVxCգ! F8b"})JԨ1{G)rVFT2n*iI{}` Yc1 ʒ6hr dkɥx,0g++Bi7+_QqHUUlk],DҠ?\3| > nhf  ~DaO7 CDSv'BveIcC:E-1f*e eҳĘ4hTrHu:_3s0lk=(iܢގ4a2:37eEÛ zeFFz30/3dN͒l7]Uw8 `Jk0cYN BF^Tき/x5V2=3*%ڴ xR8L'XgjuG5tY3G;Fv$MӢ:!EIK{Gs-n1{CV=3$-w }a'#bR#r k?aBUl~t<)leaë7/n>XN][e"A4's eǿpf3PPm,DN€P%#u! Ϗ-# 4c+ "W&/^˒$[uUvD˼*sl[wwiseyGUQ4LK< !d#{!cFvG!IRfEHfw}5v-<|PB=DƂ67ń޼4M8)>X s9O/lG)x><* m!+ZFewX<3b^fXʳTWNאpwr!Py1<u>itf,UR!P H͆a.oʲ _pE-7B±hHB/6 ` zik,<8|y3dEY">{j!eA.<3Xk*4b|xxkG^xǺ:bZ(TU}^kx3[M Ũ=n6XJ"8̓t^6e6s7N W(G$Hf~?_af1 =pE\%W2C !U$Y{t-^ƕחq;fPɞ,njk$R cw!4D@0˚ʛ<უ5f1'na$[l0Q?v!fTpE6TLJ*8L3 ?=N:3%r&pL,nMغ(3xzK ۶_fN"%ʱ$sd& R /^q7Osyn%;Th>ıY.AO34pW4U,>C#y%DE{U1q J!kU5^ ܌;9B02(r`>@)~ c(9WxßC?{pq=Ħm+Y]cR^8pD6azrAħz`4ZJ2k Sʶ'VW~rv5>|hxmv5dqp ,/9/2#gL鍫 D!9XE "XÛ'ָ%fL ~Q q?b'Yé,as(pHeY^!xXgQ#ʎTVDҰΐakiq 2aYD)9`yp*33`!0b }T,4ڠ*+,aI2j$'4Yb)G[)m2![3h{4ŀzۢm[ӏz nԟ P#4,$򥇀D OX{|9j}} 4,z"_id! yfӺ[ &I&$1Y`V7g="j2U<p3ʰ4 Г@R 5SrzRq6fMDc( 2vh0i=} IDATS4%<,gd%(*\BbP{&XfKO+.fRbfzn&$dFL @J% Je!䄕%K.8G˯zVlJa.i^Ay+,h=f#\:<~xϖEqLp5h޿.\ΗdNAƚn(%1=eIm4 #*a `jM=9 @yԿÛ{A^Tx&P8v-*"^',sϢ *q<P6-yB]Z'$Nm_㟞G5L &3)i֬m_|~_O(3hR*+h]T`.Dm۠&Tr4 1iICUҥFC vDv¡,@k;3­ Gz }'S2>jɌVl:,˂n m RE/5BHN9rz4 UrWdO?,ßQTF#8IUz=C:QN\uw$\oCI&Ak˒t6~vDJ|2GzC(T{8g݀:?(%=qDmDi3j2GcH1P* 22pY5V+l]Ud%E[_FX Eהk$Cnxzݦvcڌ4u05 BX(Eޒw Gt4x~~1lTv0;|<M,s h1~D]I,iWUmQV-?me3P9 z34wzBSp92L(QJ8u"QV$p[PYv M]mZ| )0ϐgYhd ^z\f@ W4jeE$f1:wΘ#=!'H 6-!H NIB鼲1&I}!8p8ieK9OԚ[S[[)란+QJCirҕR=IP3^az F E~!`#8\(& rKkLGv~h2 E$ĆAѢJ{ /gxwAzP,CJ%f} 4+:̞ma,#JzxD0# WS^2 7F'Id.L`3{$\@Z,y0DqVCȀ`< EY2<3.x?s? S56 ( 38B0sVUE`lB &#>ĂyPy)obۑZpE*l%E"`w4L0lt|д[¡%?T* ?|H%wT;,YQ` Y~[)`!:Pup:q:Pc"y=Ϩ*yUkVTf ߪ,9ԔZhy&l> ,uA\/KiNA`N P*;)*D͙ 8Yϼ9NKȔuI' !mw;l6PrFA9nHSfB&!(2S CcYE>lqw8 #qE ǘW Q75m*XxU%LI W99#@Qa_Á赚.v 뿼xEQ}DQHtvLs LgR\ZYvgyaL|kc?ØxXΓAg#bnAhU0v6-Brf"O=v$E)}2$">Xƀo$'{<8\0,3ʒ K"dҟ\7C&Xn-%pv鐫\yм'Q"O+ˁy+)񯥤8yw]q\a6ȷJ(6:2/6Γ'[~x2>jy▃.MI !0wӑ|i@ܐ IbD9J1^1:^hDa,˺*HH=q"ju]FZp۶)Hm4$ ~vL_)WaF~Z#£"=Tq4 f뚌)4  fl}s=ZAuw2'S؜ZpkT&KmܳqYs?x^dY8O(r,ϯ1c BI +oܩeYqȜ^!']STЛ| ?6Ƥ1SCݲ㐃USioIb긷uWM^HUdȷ`J["ce\ge_, 3\CPbCY2UˢLAB(YYj"};8~On&\9~12~9gӪ/ķR*bnI3DOu2,#_26{uzy6-w#ɒ_dp]dƲ ǥmTd-ւMr/R>55<+Wm.o6oI6Y\&\}r.˘x}?w|Lk@L6e]oRH\>wYZ'{6qZVu1xj5.lY'K I\A.?zڶi6.XkJQ4dP_DY$C^Lk͙hy ;Ctps-/3$TŒ"EWoYB`b)$0"{ʵ='|Ltݦ{$:" +~+EIM˓S\8ׅx+%g}}~]_HqE"DFڇ(+A W \=]V\Շк4_empVp%H8|9תJ2µlU,Nx2+nǒ."f$W\ تT($^::Eӡe6+LĽM7݆Yd]W.XBmRox;E.+#,$Q;E yY\ i12g[U $Ǥp&UUҊ M mmۦ "m/lNcXkS亳BzSFGWc荿ra6&\Ibz•J/Z&X+Rn*npA2 ^cty]>+ ˲Iʏpg"8떬H",PԎ$\p pIm.hTUeD,M"1dش@]&!h? d T^'B&"L,$T`vk()NM~O0CCC!,"1\q"2yY(wwwx~~ O PYZeFVq򌣙i.4;'UT:'{iƦςؔ@8X2%Ğe-)pS\skp i/ho)yE2gjP+ϸYg n꺁Si%yq |t^oq]5%F*<<<$ay qA"~qĆ8bR)ww;s^W>_t)f\DØ_wVP(Kq)-xhShn%qUY&@U'Mp`YJ2/g|4 Tlvb͢qBtA@Q/O ('_|2bȸ=9-oUHi?')~{=#;4-A{1@rl6)u6&K i'\V+߄+ŸkRqe*z$J?]q]u (D).W5뺦 yu!0V˧}J\jdI075KE]S xH rWa>z1)bBeYb $ЅzMGo;(f=ẻWJ%)0F2EҦM)U2Eol4+HDzv^8\D1hRNQET8Kw!o.uMq->ZA )1?Y%4MHME^I+ŕ W^G|^\3 ҄+cJ2߰yu]3cUSmUUpB:[*+~cn\J -/r4mB&x_o,-uƬ4y'iiXVe" !Hb+cꎃ4t LUuE^Ӥ>,8u!qE"&|hWQ ג8mb#Q%|%lyUay1Z}+yϸ/C8z=" c>sbOnRQFJ8S b›yrf ]|֑eϫh}9޶U!||^]R~<Oۼ.*ŕr:jSTMSC5w ^}8.FgEQaeEU%%M7cO> *9Rs}^xo,KQhƁR9J8xf]?R`+!?\I븖 YRa1EW\]Rĕb/pe>-g>પӃGDp5i";`21bߟpes;q !-Zi|•̄+Ӂ[:|yej \"j?+s.!~_YvߤTTÐtYI$$,܈4aGtS̹Ϥ*A~9.k^HǨdctGnb#=2ik+\q퓱f|k&\>^ 8%{8<XU8nD?uq0`e9L D h1z5pauzC3NS$Jy}'iYaq2{.㽹4"2&ķR\V9-@ɧO,6u*,O !NPid2aPU5rI4a[=he<^(9˂.(뭛LQ&}B pŕW~ "vXwop І"ɯ*XcWnnp-YAO IDATJ+dE\+˂ C'W^}nø_. آ&EsXʌ]HoH_ybZk~t^IUɋ]1qH,2a(cu1c2y]dZ"@C7vn !1m[4+M+XP,8U n7ԛEN$shf=7z |kYBnp/F\9"Ɗ"#\w,op?ŕw׷;sj*#dR%\ |u.:7-o>7W-dzt^U\٭'OpC{_2h/uvM7 Bq? *0+/4Ս 0Nc p2ȡ=KuKˊ4ܠ$W9+R,&A.DTMMe@J%;E)281`Y,޾}Uk蓇CZGV%WFHne$-؋˂ǘVV%r3@E|WxQ%j˸_~WRN)\-LdhGY\H%ky"Ǭ⺮DL26\{ȼ#*84CJ{#ɋ|=i|A(4\yW6=[ )+6]12W!hdr!oG ׎rvK OPA!xrYm") @q)yQyiAdʔEI%(E"nMoK+)JW`'֋A&W\5 \y)4s[p(p&'MC{kxeQ\?T stI15?r ˨n7UW$htpgHAk2`,ޕSKpD'N!! ʲV'ڥ1AyM4g|+E"y%ӯ^dݡtآOu~,0u"RH*n$C, d\9) g\QRy[,CT2ޔUS4(BR1EAA%y8uY>\YοWU0DmnkYsYs_& WN㭪2EQZxR_NϞW)7ɯ#h̬㊋[ϞW]טŀNkNj '޹\5H^㺦ߗDHyK#* *c'w'v|h:bKuPJ)w]$Mzm4z *UVUUXߢ1T$udXI~YeѴl.k7t~jF*9\-|G hpI.j ת8/}byﯸr,8+1'Qoե!jtt5,"\!qevV߆rxqmokꇞ|Qe7r0U 6&YVeFfgϫfLDDn3}ےIg= QHo+ە$3ό$aUzp?P䎞e66l"#7~JcLk'MS^ݺ㮎C\Q^e\Fݸ!3 :t>_<&UwCnsD.mg^eCh0?76"!#z,K" @\uqiĺ)4I껎Á)" XIӮi7|ɴ Yו+iEaȃO>M"`W ʶi 5,!kQbCWoqMWf!'#Q\wqp*~z(7 Jlխ4MVՊ8 j Vj& = z5 pnʿW\NѤdput>_Ŀu'5 k,>\'߉+~}>.'*ʒ=0]Kqwh(p oOQDmr3K sZꔃfǤW5((I%#2K'aqcþkbxyΪv|Wλ4m\T\;. *J# 4ռ*Op?.)D")d11  Q$s{ژiU\vI $aB@$J Bnĝ'*rޯWGe67d8u {rW$(7DL82PYQ9H@F̒^LEFFY`$axQŝ&HOOgl!]SHUWwEs4Yl4ε,ib3& 7^Ol$x]$$8nq%u pp?+3: b̷qp}f\Ƨ NCM[\W*˜qέzRlnu)kt z5Up.Vz:mD6}cR1ѥA a"*W5M\`\zstS`5DE=DxoCwq!PJU];LӤ?^Z.+Dj υc_P۪iY8Y , =ARQt5 @ix>-; XtS&{, y\+\zDZFjEf&JPhk\WƘq OCj؉(\4I-a(.Hc,E}ô|7wq ZU:|ARl''Ex Wq4nQE} Bp: Di mGuQ(_BGBEwTnL;fD:yԋD_8!8i!NA6y]WZD>9ÙML9NiEA1]Fz29G4MUuE}ѷotKo?) @ƕSsqWWGyrupp 9q zW˸ds| a] K4Z V}P˲R]\B^KL*&ߣc( M5X͇ϋY=MJv$\`C:R4W:x<+r6J?P<=#à^uH9 ˺)1;MR iFqa3J;MڔFP5;U @v@4MV!C-G1MHfᬑӰZE|x!!&R3J%+# iV! $cpQ$YY)]e >ʪ7quQN߉'`6V*3.-8Nꈻ (3v*1tPᎏ=:0JJ*BpςY=bጭULR2I^*s-\Swnq YoG,IBUwqR8YK@5;'8ۗ"0X;K3 ,PI҄ MIBY/T \$ 4A1iJvD,0\'Fy]c˷i4-|+o p9׾Ԁ hWⱜѻ4j\ ,U퇞aBǕuv]/:yo*3~o1ISDž7J?iv`D3cWU-W¤Wizqe7rOZf@tXvTY|RP,A긜NoIV҈jst3wMCÁN*UռA_e\,cP5wٍtf>iJ}׳ jYQUuaRCNMu|M)J͝q\Ii+_G LAŵW,Ld[\;tz=iJ2ofg>pUlPrwvBF)Tl0d\[? XWe&x-^`fo㚲urV6W T b|-0O Wáwq1;kYk*ukLD>$I#"пRv2/ 0j(9%itE)6gߵ4}HGg1ֳҔ &  f~]jPA!H4S/ӮvN8Ql˝<NNb-qZ##㣢@~AY i9}4rԁWwW5f\W'HF^aL~tvk3n]u꺖nDpՑl j{[pȕ!6fW!"mpњ*_pa`)M otNׁSI1,CE5ٮ׺}\9~hv?@l`'^X'j$aYJw竅dyNeQl%7V;ֳ`npQn#Or/))s/EkIfvJ$˗4ն*3y+^|B:c\Wqku p^5kJYk.{Fva!q"W5HZ2JvϢ @W.8L .`a*wk4L{Ó`{Zćlhx`"VGws;3얅O<˵a|zGD!/4^D"1;pC " %W#ξ3X*WWqh :̔⋞?}?㺭wz:Q]Wc@ tuk\$IL )[$]<6%Tdg*-R 8񊲤兛R䨮jcvUbv1eyaO#ұ&BҔEuU,O, 9iJeUQ.|*T5;8\f+ʾu v@d wH*>mm-ˢqʩ,ª{ 4횠AvX$j4{^cĢ/:ENߔW5m'׫⺨Hp\.N7n+ x4|WmMDNYH8 4^PI?|az@[. *(Ɇqx 1Y(˒^^^Ԅ>iƤ* @Qwl@XPT<^.8n0N'}\҉p.U##D.@NWY|%MivXZ+?y˲Sp8'M6fv1y #bCJ1+G>|5Ѝ nݐlW,^p8WG~=pZAsx:!k욿x#E" M.f{U&i4Q^EG"D`<~sTag^{TUEFg 8I(_W:L(hVKgkuqc۶ =%IL1t>։Pr&TW@!\% 78ʊ|>h0=N6b-~W:\A~ӍE$~߈hqqaPU, `#*4{~  ۂ-Az?0.He+ѯ\*UǕm;}4Bʿ 0"g!PD4d-71qPPIL@(#.r{9F3IAT!s/,Ɉ{,C˺R!, HYQYl&ɶhxdq"oD6i?{Z. Ć,LkukE?+ə$){Ў6{\*,)szyZ 1=ןnh}W\Eߏn0vt>7Yu\ECop^9+AgxX}| &(!:^7ȿ/wqe.ŷ7봑=J]Q^z/OTAp <0 :TW IDATdc.9^O'M>'ʲ%"w+4xN糞ڰfg!V26̲z_rsʽf:Hoc63 4u`(cϥ镲,&{ý&V I5̳TB{`8X7׿{=4~>/vP A dus}6.pjU]tʘdǸre hAxˎr⫬e x cDJ>W13]8`&`Zdn갾H .7<(a۲y8*܉j7Q-QGw>-%a&cN }5v"(o8Ƶ߰xIu`J7Õ4:]ZS&&ÉGqͳ+\RkێkࡍX#*rb1p%I^ 1!Z#qvX߬%Dt<=\T 7tuMFdW p(; Mz0. u \!<O4i$ .B!EXg-e*yrӲ,)r%( (Dty6ݶf!U\vű?=wȇe=[2E Z#*5pY8 ,K̲e˙Oy)MR5;~<t'1UXTs$ǵU. ƛQwfmmI'k*+@Xz>BYŊ,?T Ak&)6@}ea'NJA»\&ZY'6׽uDǵTV. q&xד1Ifg5>bl>)kyWGEQ"$SsZ? &"^ܱ㒏c9Gǧ<+_!2$GtU &d& I?.3۞K/1ז""zI-KZ>FKq|VIcu$a;=2>v\N>PF6 gpEor1vF=??..rsuHqM.جW\7p e8;H )#I8 = ""Ne9F2S7xe7ak-'bQjɞ3eb&J' r| 4g->jH$o% &Air\w zvg! E W;TD[PrW'鐤Qk]|Q] (Ii^PM\{Zח7uwɲTѹՎ(DD ϝiyS^Br}- IGYוRT\וIyfU *gk*uEX0 4= +j/-9rT2=/35LY}g; rʴ'p5Q0Wo*1v&!_-L #uǵ5eM2t 9E*j[˃UsNpb{pĸ')ji4܃ _vM)" @ eΙ1k+(_Uq-HJ$sukK ^qBj6͹4pε&5fR;8$cSq't:j7+꺎8 T䅖E%&$U2$3Ht^`j <*"X]sYE@[\+)g*Kkkd(Ib:N4M,酉!y%H Ȥ:*Iժ/6gV+WqqZu\%{H,.|}t8쥁gދ (rxWhA"hF\@ ֫5Uƺy{\S}Ѭa&$uׯǀ 8Y.RWzxc> sE14SV k/IХm9OP0a!a1}F~9&Rb!Z%WpO 2$je횆Ҕ˅%-U/IR\Z*l(j_|NZ4pbqCz\S WL{f+f|m[\M7bp<|m:}"JWZݘ|W6|[\Km<^( :݃  L-ڶDF7A*M 0% "bAF`RRUQQ%\Y{83Mi+FMӐibPv> q=.b8pW4X-7 .5'lQ3M0eZo :*kOA6rXD̼) EqSi/.veD2U 9>}+qS۴[\ W\+\#5%&\`(VLE]T5|4zxrMA凙1Ǔ g2A_/6X*;LR #a9Sh/Y=iR,˼_H2#B%XWi +Fp.R⾎u]{UeƘF4fB*]~7DF1p]_z%J| I{kqCCC?I]{0PLvR%BJ>lޡnwUXzlbV* V }u]QuJ L$^^_s_tMl,MNNS }\K,T)˅uEjkFBS@pd\+-r׃$u]+JʲV>WTr^DV9;7=,!@lu. ֳC ,4J;g_.';4ƓmK? 7GHNrʋI@r:XN\;4|w0 1Xs񘅅DЋӑf!kƵS;*iW )'r rW`֛ZS{ wFUH2+h|Nlapލ0M #Mx\~︦}15 p5q]/~k-z%e 2w:WkUZ}I62,L5GTj-cf& =ד$.m|Q4v|';#@+)8OJF6少àZ(xQrKds1EDl*_CrSph) 㠞wq%0E To7pͅ:U.ڰLI(\~{1Z z!,W1.gӉL<"mHo!Gx}/x*Voq&YǕp]}1<09葉>hTUU˸?Ub='L>f5#tڲ(iu ᮾqLp#"]+ eN:ϔ&)ջmKshy;9+;3lπ'qge&uYBQjqHaIp_~\W}:Ip}V|ORUWDEZ˭ZR< Buϟ)Mku ŝ3Ѓ;>j,U\^q׸F{W%۸"#"zFZjc\}Ȓ[\ܪinu9eiJmj,xNUMgeib,!ˬw(b\r`r4 ]GDRabf, fTW<_Y$drdb 4zPcgP8K{Q9ќ6` *"0Rcⱳ,CiYv^ԈO0%.@@X46N>`cN1FO\w^ʞ 3uU@ii {m4P""DIT<3kY+ǸF`"09uP=ȨEkq]Tq-6=pB\W(j4)>iCFhxYfԮ뚒ؓ3c޾pC%WR#'wcB?)"bIٛor蝕?&@,切,X'9RА,UBlX]'ʉs<=gζ5ն.JuT BU~zzR ՟3 5Q-w }\ǵ$J4DݮQ\{$k[,IOf/1s9\…Qk~7ȉ;lzY8+/Sy\-Equ|Mƀ=5\ȜTo/~@Vqia8MYN a߯p#)I .Ib'"jmVb[\+\ >pM?k\5\O@qp579"#nA*D,ivw~;YK>l$he~z [9;&YX,J/4 i/V`VS5LDeQR*v;癖tb.*X6 YO[LC]*'W9y\Bk: 5^h BJ .I4>L߷&:UyWNEWqk8pZbI ՕzU>j/LҌ孋NueXh|^E^Ndo`1REBYR^dFV"g#.ʂib&I踮m[ wpANO8)FpFv(MY 4C ?++*̐GM,B/V\M$By65$U(\<taYUz^׺5tC\E?pIߓ51hWQ>R%x1D#Ј"2i1`fKgivɬgnYkI]M]ˍêh4rD^͸sji7)am[^$Dl'H}CYfkIfzJ4|9sW|,Y]7PNt:]_qUh҅ Y,dHέU'42=wp%~8Q!mFU:,h{:ΪĄ ^\gm`Շw_io (\v>^e]"&'97pݮׯ_݌o*O&}ljldbNߜ$ 7f#z5[@\#j߉f&*1~YiDހtF/dd.,N+4HBN,4d̋us|8spb(ɬ5qD|ՇÞ|Wt6*\x\y2p>_tt^;1t |"| ލ@L*J 6B8Á|[k|krTFvF͂}u\^ceV>zRU8)׀$I> 0ahdyFeB4#]KYR44M#u26IbEN29ITW*@L6F {JSH~:tng,fNFd.:%e9`)cp:}M ج>*)um;ʲJU܎wcy=pk"wqN:\uqpu2Q10pN߉z. ۸.JL pIDAT/Fb| n4mcloiQwZK4Ɵ,]kUF>4E\EA&2'2[ki4]SOghUTT}r`c3E9$]Ui*%Өvi)ˢ(0鉒$$~i&}>_8g0iSu&ic'CD Lm;"$pѾl|i RQ2׼Y1F__\ c#+s/.op{YhQX>2{NSh}ig|op"Ç%W'eByS]+Nk\}gEzukePuS%W5W!mq;W1jUP Xi7u^fM4HA1&}w6o"ھ_EP^|gmmG3$ H F1J^,0#Rs↓ C#Bc8zYtY܏}lztzz$ֻ79s؉W\/0fه}\B4'+տq5XB+_=QdhY?Ώ ϟ??7??~~psGIENDB`criticalmass-1.0.0.orig/data/bitmaps/cubemap_5.png0000644000175000017500000022127310265636020021324 0ustar danieldanielPNG  IHDR\rfbKGD pHYs  tIME:D6 IDATxY$IvwLMm%" A#_M wR0_lՅw15 EʌT{_~/ _~e뗯_~~뗯;s1k mq0"ƀ ƈ#B+YfeEarBeY{# siaAZm(4 [0M3z?`eiBZLӄ"}p@˕xc¢,+,ˌဗLӌ, <\Z c213/( ݞ~waF̠nkv[K5\5l#" [p,ˌ((@(F`=սE \|L|E5l41JYOW\CخW~yekaas Y]NB:.^Wq{88_8^yB+Wsnf+Y+_}2dA9U1>(UQ%iJreKEK yY#eM/zݣJTUi|n$$ >Ϛ#׻d\E8><4 F]ט]! yHEY'q-',)U5,R(?pf+&kiJY W1ܠi-s=N\[ F־:%\gʛmQ1˳r,\<3eSޣ*+TuidNv(2(WW5, ꪆxM۠*MC\[zY eyDYz|)smcrd|c$m|tf EcTf7s UUcYfLӌ,t!NCO>aY4\*QKT+49 ޛp?t*,"qZd9׋7e"DWӬ$ $7 5=Mmw Z5W>AxKT׋ʵ\CR\ms`:dr2 lV5WS]3?w עDo!5 xrdk%PYzj@"òX8 x\8_(#N3Oj4|M(!Y\im,Tjӟ)Բ%M.6zǓXN!Uޗ/9>E'N䗜F-^wis^O(z~Y{B`.j?Yv[&+-k9' %iU+9yWV%p:3W8! ,Cjy^PW޼A Ӝp^95PoMfX#qUSȌϟÝQ#s*gR4aqn@@)*o%Ltx K)ˠ tX">xV]RӔ;׫$`+33VQ4 A>ITlre3MR;LqI(CJ͘BCFpGa93X\ar膒'"M~z Ш ~$%%I Vn{ڠʕj"Ǖ䚳"5eƪ"qpRՌTr%2/79ӄiy!WB=yF +ݽ#'I|ܐ6̵(Sh^l3B!p-$͏\7Aş [pvr=S1j< p1W1<xV2TZU$;e`QI_6C"|xeYjy#0ɹkYfmvl}DV>$iBaR"Yu]c&]rzkS!h#PLj9\˯J\a\ա/̵P9p1_+xF=g@ 9G8Z.S-rʪsU&C0}(:)eQ\_^p 噹;O9-诽^aE50p- 4uu+ARnuw~1d\.XEEFm62h)MFd@]Wm]Õks9jA\mXpu52*Z|%o: S%rcPVԔԺʚ7\0?SS ο_!f%\ʅŗ[:0S^湊D!\E~fm2W',# nu<2=gHyڠBʓŗ$fe&YĵzΛ*,I00 `F2R\+vIH dqEʖMHUaNHL,rѻ}1 \WW-Ww%Wik׋]o+(05*K;҃hsV<1WrsB6kѲ*ư%薅zsA#^>y<]W\y3~ŕ+7+ׁ,YMM|zq@Z#kž(wֺ45tH1enסN)2S@iG_Y6YO᠋RMhJzD[gtwh'Kopha/7\okZ5DZEZsk]ދ3%Sếj DmxGl7Irr~u臞,/;GUrz~-W6\÷p-kvg#u1kmJ<9pN*7QVJII.jǝ<$%a0 c[YZ,qR%~߰Ǡ0 .ZAJ)c,%3퓀*׫$;_^^ eILSH5+ s5׊9>ktCIer 5.ip͙kUcOa-^N^Q+q홫Ȑ!-pL^1iFU&\3aJ1/ |YXk៟Ur]V7bok>fWr9cYN6M)ICJK@e=Y a2\ #^iRxTc0HJ N6J$Gi=H~򺊢<7N&# NWz W$\5(Jx$Z6+b5׻}Lj7d_p8>\ݢMEa \dp\ru 7& DҋWrCR~?+kyt`Y43Dz8j 6W^66x+b+43uݨ2P!VN KKf\U%~`A؇~1zHGSMH牅! v̄]R,8v85%kCJhr%Ȳ˂NwO"ɦ\vlB\z .\_kۏG%\W#RIH.r598νZ+9ڊ6_.8Um{tɉ+k3":\daJGJ抄0P{1+W+8;\yA?O$:0WpaZʢ|cG__YxO !Ze,"&za4$% 7AM[leQ ^ C~6Rj҉ 5^EME V[vӖYiq_N+IEA+#}]1;\ˁou5\}BzőH(rB< n,3eGA[fG4$\ȩEY>r]^\MH&7KEy.,Z !؜ʕyUS$n!'u2ׂ8tr%q ߾/HW¸)@άb δiX!%c7IuVnnӒdyFrcikHY&D4M~yzHxZwJG"5tZVt6ƍ#ϵ|,Z_un뤛5$zʉGm%C<"sZ8D19| H| Ir<A" Ƌ574mruWZinצ1uPB}+2.Rłk^{`KSוN/j n5)wJɠdcDulӓnD}.8ZvXxgZ*ם.VJ8(MSsݫCo׵:q&⊔Zseɵ\; s57\\G Ӊ+k!zXmqzyS~]֯(73yb>*m"nԏVR֫׶ ײ?劔Qpy^w;<}Ĉq-:xJ?I_fm mא\zm

Fp]V߰Ki:' I.:rD&ˈ]4x 8i6]lkƒ+%];6p$Vڟ6H#l $ykPQHjZ5JQ;C\muÕ=g*xCzKN64N:( JuI+Ks3Ne#B wI)-8a Srk;nrO uieY9ri<7\9#FDu \GǙ̊@tP'EHIH⌺[gZcwk`t4ƍԗ^p( ]b!-VhBJjߓ>~ZI["]Z4Ӏ~:1IR z//'u]yx\.S \{WnsVƄ =Cmt7t9nVKoib-S7Rpae'-ad"/_9/7-5 Š6:v; ߋÃ답t#NӼ,^;r\ݖ+ľ3CnjW5xM~C7w] 9R]x~ľz2KNe2Lrv,:WPs&eM |2W!R-&cEf %"فed_!]lkYӣjK*hf2Sx5̥{tvE6^הet:i. )i}LT7ήM;j_r-/I]k|4mª쾺GY}#F,2r;3X܂Wt~y(P)!.8QնkKcK?~~F_/J=bƝRJ-昩 gmХ>,siGED\hl8һ0ufM|=t<<t2Bu# }_q1?}?|. ^zW*y gMWD,V uUY{,QWȠ0skre!V# rIZpSP8^> S{uS•'r\wp+ L\i 2~ϖPW|^mmT*vQ%7BH~<,+\.gUIHUUh&uQ{k򇑣m=$nGiX鳑dP۶Cu|j!ms4}K]Ygv+5D2JN{1ِ+W0W DY[wp85C~AH8杹L0e\{VH6hǼȍpuUQzU̪)רՒ,:27\Dx\^sƜaT'G*3,WLntr`Xs^+@u`dI幁֎uzt:j,wemeae46)Yf-}P԰}T;ڤHZ4I#r(|_#$rWc9G =ÕOܐ=x09puz5jU we&9n^o7lrʕː<רQtپJs%OyӧV]u]i(MtI5.~op!w1\0EQ`?hZ) y[H, ᗒyZP{u+꺖t0 K!鴄b-wox5 sI_{L9,QԐx̕3l-θr\A}tuXMp*Uȭ5r卸iˬvaexŕ?ςX6SsN{5W p-Z|5Sp8ا.oC[I&Ie-̚]ʒeY0nF{vzWSO딴3\o}RA;@PɭzӲXow} N/VܢTTdPPҘr]]|Jr-"Lڈ>⺆p5U֧^ۦ;&lpiRs,YAO>yyƼ,|%\4'C ]8 ׂHkDwk֢*4Me0[: WlC ϕ+I\(nkq+Bp 1 <}R}|ɰxI)/}@'J6)x$ز{J3FZ#)ӧO*hb a1%ܲ1PUB6?6E|DzU7\ դTZxQ7&b+uBU[憫 ^U}%g6TA>a^rfZ;ȃf1W\_,n'E=4d$a[0]8Yi0sPS*L=vʂ:s>׀OOO̵DvoptX閫}kW4P O@q+gQFzӇ?L驄! Cb$AVӥQ]wIit&ޖC! e=Y&Izrzp86qEN} l}!qYr$W+}o˲yᮭE%ǯRv^s,]Γp5:C"H:_qEQ ĈmQƩ̛gf2'?dh1(Y"W>+n "Yy+U`X7 <,J`gE-&3z:mAyN]eI>PzZ&\As8+W \+땽k^\n )W,ml#O:Nu,R*{ gīu] hzvU@D x1ʁ,ˢX$L)NVfEN+69IEc-žZJPr"4\W}n!H]yEnk[\^gŭ\w`ƛDfAQg+3 j5'RUi}kHBv{F W~ҨpjR-zgJ7\zt(ɷq}75BCbvgSq\]Q)=I|썖R3#N12FD6mk-~uW $`d/T#5r6Mͧ3 dx;%a&\k׋ʲD(I_G2,M@Ra!+Wz_scLJ&?c//8>phH:qN[dàf$(l5&\C${v*4udcu&SPW~eO L*HU,jز#Bj+x`+ܹx|xIJ|mbIX. +($†ԡFtd|JbDBn2j$qgMG"kM9 P78^p>WЉ5^x,'&/%*24rmHj>װQҶ-E7r()V\EQ\Yrk?ۑf>skɑ'c/ W -N+R߫|f,s-+@Bl\C㽸?x>O:kaÕ˸~ʕ9翁kJn;^Jo皬e W? dX}> i;l~k*Hb`c邓ӵm[eԬe5,&c$̒^gaխGBiOZA_$/<q3%qY4ڶ| quF:l 1-ZE3'-3ŕd>{kfUV _ZE2HOr ^/ڏۿu^4ʵnbq]l >I,Jvw:H+Wkf|p]T/_9sf&Ur+<>}ӓz}^S'9I-as} &s8)H~ZUmeEܪ, YRvPxzzԉ-8lMK^ٕCn,Ϫq^b ;՚|-,t+g_qsbYI]zPU5Nfͭ.lve;lQ'Ze#!c/^eB v?Zk.\c^Ca <<#7t7ۧ'\V_Z2A:QUU!޿u~0i^q;W?$ ϟ?L>bG r퓗= 8KEv;\.'yWMz\>Ē@Y我6QddE2K/_>'w,wiCGZ YT^ϬΣ{$\$Fnzρ><'(ďxk\B.%=OT8h4Rtο#`i^4PSϟAbt:q1Ν4Y•3s-׉ 7puw;\W|!_#y dWjt]bǽ%ZͶ)Zt"-fTʃ 6! $cLɼF4sγb0n ;WbiKnR\T%wUb$A-*Qyzn&(aF֚g*m%s:8= Ns=**3<#N5<oƪ^wɿ ܪ+p ^?Bh^UU9Ho'y%\կZL@8_N/Z"3ƠiQP9$=.*ZtKKn^.W yt _I6U$" u{D><p\3]]WKp +Wˇ0o ^9آ@ Wn"lr,i|Yvڐms˕D01hp$\/'\ǑJkWd>}zyڣDlkk ר+R밙f֫p]4r\MjgEQj&\$@tS5M3 w~I{>_mEԗk!|j, tC:F$ ZZ}p0[1GY_Cμ1 hFaTbRj#`S w|<kנgYDuh˜ rמG4ׯN[\A< pz)A&7uO£%)P פ]d[ºuM[6揸Z)i9_p+q\t%̕-ɚ.sY6WY:ц~P76Љf9=H fĽDʆ˹}TF.ɬ49rSl[,ƗEFHIA4MR/YrohV7m4jI~rYY?05]A^-$:Y֡Q+[45o^AgY`~Dї6<4?ג{o:cbW2 Fmҷ\v&J\}kh4<!M;.%Ebj!g$S]3a0\i٢\Ub2|3sR(J2ft:%lP": .xXtZgm,n/U:ɍ&RUfr7!hF=1X|TQg&r Utr7\M W6)͍A$\O\90/ˉȅ8(_ UY+JC,jN~H-!y}_l\zq\iʖѭ_qެWC~I$SWd2!͗#Sk:ONBfRlq (t* @JB4>x1$d-eVO7^ViuڢSD"=2W*Ruܤzg@$ɖ+t\fΞ5$\Bf3d1b,x8>PhF W$6\ye`._1Wv Fm-xr˕^{4Xf2v;\x/g/n5ҦL鷹k 6UHt>a'?昈뒬הk^cZb8aJ3 s Wzs^Sz5+l_M΋N嚌7A 6^]hzĔ|I/mS '*2\k#rgGb!h_iF@<ʄe'RQ/wٕŁ{tDESSj5 /#t mnhHtyUwVYlQr쨓 ݞtHh#$Zg9'Vj$e^ƙwNG}9Hi^q^h,oιɑSk_.R̸Y5W^O\k~W͵iK%K2ih^]+->.X -F2fcd#wgC Pj8^WѾދs&&@BlQ#<씱u4C1%CI݄|Yh#:lb,ՓնM㭑XdGz`sj:גB d!W\#sy?YkɭNȢ(wfN;1FL󌪮!x-A#qu܁kwdQp};Wa%m*|owV̵Hzmoiu=8O7\9gP7x oKZrdDMٝt?墮?"c δO 4Cixp+[筂铖{ܣAQC(9"nԄTҼ6*M/(ꈫuDuW. Wv S*}@bk M֝Q9p>W\9p5jNQ7@wRʭ&7>2-p(H0"RAiͲ ]anoJ04mp:cq~^d |^=F&q7wA\$' IgڲZs͛hT`F MSj\& [y5 !RO'Ӓ{MDUyPJ*ZKvBkuQIZ:WE+%T,lTv)uFcYpcu580Wv{{N\#Vf^I=, ) k\-ٽr WWgn0W2-7bs&3 Ŗe-Wڌ,]Xg 5ϕr>xf+Wv*CqPwuOgYi`dKO~s=ۓvf)"22F\`LwhȝRR`4d$U1^=dPh4ܤN, ~dxĉ#*%H"]dC\ u/Fj?0׾RQ\yܟˢTǚ\3r!u9 I;rH6[kUUab#kUit`2:CmuuІ_#m.T>j5l^]Umu2ckc޿LA"~ȧ\=7CE9e6 Yl43.bD*@HנDM7{aT,^}YFYuZιN<,?ݱQh& KDd e7cwN-rXV8Jm[rIRL!eR-˂tTʮB#5$\ K @uR,q&$mpبƭ\u Ifopp%ʕ<+v=uFӴ$W[3Z xWMzMz]Ҧqz?8X}ՌFGW}moF˽FD!d~SijRxMWT3dω[Cz6vPhpŒ<7$@"*0!bzzJd耍 :ʖۯhG5)2 O}Ǚ'E•fH=Ռ7\Y$ȳ-wW%eȍQ'mEQg#r|AGmw\skL\Y۰ZQSz W \).#˪D+G\i hڿRLu:{$m4oTG,Rl\<֚ox<( m6qq8 h;Zeӵ$q4!ɼnNNFZ8hNKm۩X>h#IڮIY[ qƢPWa˕z`~Kfiu3El8MrJÈI#suNXɘh-oaQQOn .Kµ \ x1kvõxZ׬Sĕ堔N}* JyO?o8ˆ]hp\hO +rީـsѦ -Ӭ%w\4{EX4hx/wrJ@= [0.8I eiunj$կ3q W~ ):ƚ{.sU]Q2#ʠK[:bkmQ W؞YKe? kv^/pv%u]GS48 "\{Er 4+<쿂Wu]#ĕkj mjR+RWwk\iM<( \,zkU %YȻ1W뽯݀HmY^ڀ aڭ0N+w^xӋ٧4I`czue4 6"gu rm}$$ijU$M5$A2xMJ(ZX.'XpKODU(-װ.{R:KzL7<ɵ~8MlA̋kfdwRWkMVI \Y(^ƫZ[er+oFB-{Bpu:JJ|Xq+7+ED$2z+@WJ-iW]8 T,'uu6Wы:dy%k}8S/8{8] f㒳")^W=y LQIQt8tyf l/!\ tEjmN2N\;Z .iU3.ȌLxRbRT,}•')WzrK\cN}8+8e"NwIb&đzLqM)ed}T]& wҵw?Y7Ȃ%MrK|eq([ T<;"^$7<:Xܢh*yF;5MMHuq$Hj5VUi%\yͿ "bgaN3qqspH5 Wɘs"*ZadA%8$\=quLCdnfA_ŵnnZoq|]~aQ:Q^[OGmW 1nLjش?dF_R/yXLZuUT$4&SeaY b#&f2V,>]L?E+sD( ﬒+" S]E(2nalEY*x=S".qFr~Cfgלi'Nb\^jA'\SALnyc%$n1k?+8 W\Gjk\5x'!%5WfhԕڳiC=:ZfzqzAxN'̎1 -ԁϩ]<KI6˥B H2'M2ʫ:MIZ}F5]E$0 PI`uYtЎwkYbLY$h4GHT @'Ϭ#y%Zu lƕ+/~e5tuN[l+eʪeYrw@R#wb'np8R+qzإG @u$ZӔ\mr q[_uހ-dwӶXOOix:m"zG3+9~͕`/W:<|ӧVOT#~I֊4Ĭ2RMb%2VL6ުv:7OTR_]mbUFgݼRiAO:  MoINa547 ق>ܪ*UsT#]1(?3s-TkYll6-Ul8p:r\DL^mm%Mj%$*p9ax]d@Cկ)WܙeFv+bk^E.↫c; <zUO\;;Cu"Fp\c&,qru(b]( \٦.$?F}@{Gܛ5IYzjf{DRXR/NSC)/zTUf=fKFZ"ު/,lQ=zi F#DOef3;ٱm;ua{`8Xd\tF!Rueg$kil]12,;=4#>@o߿sY%&]r2W e[]k֯9mkYiO0P _]Ѯqpaֳj^iw}+QmZp]Wq;vi6Wx4U}805,u[q^D ƨ /{xt(-Wݐ7, ɟs|}[I9,Pk eiJ.Iԑ6. J兒4ڜ<ܗKi5IyP)Ƒ<ӂ[pȩ::jyQ+NC({alx;UVj\ Q/}&4q+y$qe]׆Ӥ~uWz5삫[dnP3 \{-<C1xΟs=ܸ_-7Q 逆X-e SĖ+M^bF};]\j6kR~Fbi4RIiMʟ#Kr;J5 _ו, ib',udbZ1ڜ՜S˪4e]Uڈ<*3g)Iz}}qK3<:hK) Ys,CY"Z0b-_M%P>E+5 $akvP2P- 8u`395dA03 %f7L#:̳[ysU]"l-VTႫiѴ+ׅԐ#HŊ !-"\\su\yps\Mĵ+[<\D<k*(Y?u$UYMQQ{+n+IF=#z]a*()L2_qDgyFi1VpR IDATZz:<3+> -!ȿlG6qt)CAb)9ANF꽘t4 dq׀olu>7e5O [i+~ž iϜ̏HY%9ՍKYZu}6j̵D%:^s+"d%\aijuǮO? XRe\/mm{FAhU_x=ۿ^(u;NzH\{b~)p,BÁN!,=/niH :DJ#.q qn*ne4#yN<L1x?j튫}9sKs\W$09rT\'eWb/t84t>;0Y1?3\muUmyvhzM G$Ur8oq5:@ 2ڿ4F>^}KxB$ڞgI)IF !:Ǒǣʦ*F@4S5(ʲԁ*LdoooVӔ^14A/d/]RO|KOzXu{uYk@+-JgN+\-(W$p =|p4Mt8VB"i.*!)UV%)F Q= r+P)8J5נ$"}a\E7txzB$Iig_o}74\Q^O% Wܖe̟ČyRTlgFЈQ][l,Y "W> ]\{qT^ ՃJu" k4F\KCĕ#͙k^?: t<ӃdٳJ5O5:HFr&IJ=rͤ=£v byu,3@*e 6kks]xӓ^7 N#Y~QxH^ "]Ej !Q2t#ožXj<}-&أsGf6\׈+`\ӏ&\Yvu5}jju:6 \\OEN|d/53"ά?X nv4,J!pVTԅ"aQbEM˲js|`-2S~퍲D&v.pKx*(,K\\-4p\W*R#diHA+ZDEӀ`8\ Ĝk^9-pu"\ٗPDTʵz:Nu!<=fѺrT]ԻߒL!ʞ@S-ƟrB n#ۮU ~_k?SYG"v\TeˉǪYbLlg~+ '<0RI>sb$^ɟJUr+a bTT"a"fJ8k/Ka*3lͽ]]qup.9G\'+rh&<b\r@嚀ٮW̥((aĠrկ+^opݑq]/jaƉ rk˕pzEBp~0 TY6Q۞z^D'=`>'h)`^i-uM >#ݺי{us-q+d|ιW\q+1O':s5b0' 7bSQhuYwpK'92 o9?H+wcG @j< F2/tt:9AX9D-rND[`魚YvC\fTVlSbAGCGV㠥,{80 {piji} x)/Ne6jBafˆ4!kvZ+5Ӹ4W|z-ruʲT!kdו KТGtqur͢,K:mXrmorL]9m@/d1IA)7X)TuT`t"*uF]ô,B"v:,WO vJ zʵ_Xg$d"IƱZ"l`3DIyUX˖+ $duSr0TvD#NҔszt\y\SuR\O?uVo W?E_s{{\q|NŁk}5lD˺#BOpa ߺ _t: >rԆ{]W\[ 6Enu]cp(IRlHܸRw ĒS4P? 1'if24Td]W8!ǟ-Pמ8GEYQ~4Md4Vq8_~J)A[%`l\jX"J҄mi䂫,B4wamRuM\BEYkf\==\e[\h׺ $u'u5razmQW9Z6Zl* H^׏@~~0 $"V,"@b@!K0km/cVb`ID; FYTW-+w'] |>5,ETp8(ʲ7&%lC9,_G2ұ;{*˒+ $t-Pk.kɯ8uĤ"uw+]pYךu9}knr5zj+%rBGpb-Wh, 4zop U)WDj"u[͆X\ע䵽s{\^%7瘄t]G' 5S,Kz{{e]tjQ>Z7]Z !FOOAm۪j]ASzo:?ij4CsWԅqP F$~kYlED\m.ˊsPak8$.բ>'b,,>kA(5FZyNmډ = :j5:~  h+c+oE\ M0WW͵Q<)vnz65$ !Nu-מ9uB\wp4瑈%Cj\:: # #R+8OYV_WpEH0YgfrKke8@6꿽}\yd^C,z-xI`~'='vF ;I0@w_{}%;Q8YKe_,iG5, XDvlR4R,5 C'Eb4MiuN3yi[WJnJҕ˷0sQ犿{5lǫ:oq}}iƢrl/Oqҙ+@jՏbq~,:Ox^U CO%8pqD %NI",Z3$0\rJ,k)!Cp] 5DgO^_^x?pD1DmW)=x1,\zTel1ymF\F,KUX> qHȀS$|/9-.߿\C̠V+>H_h$JTw)B), q]r=[*HH !Q`t{!3j\kfZ=7MҔ",RD:^wTJ3eŠ[CJ/Dַy'SAŋ^Et"wzZQ>2W6Jҩ&p^5ׄ"TnαWޖ+8\ *+܍d0Vmb\kkA=Eq {.*ݗ\瘫 \.W6ps-(ﵐP^뻮eEQ I =E嗔BL85$ *,D"кa%["8ODih v98 /rFDNacb{ rcJW+|$Ar!yNFMs?둍3x9P$p-Q-s 5#MR v]K:sQFj EYCzstƕKPœNNRq\]._ebAOs:dv^aynvujz.R*WsuN7.AW"1Wq=G\3&Q>:D\&MS*R}֐Y%ufVM]+$lzp C:~\P:VYRz{l=h@|zs?"!Z5P% (!YH눋x$rvuMmתʪT-Yj{Xk tGÞony eYjQ`AqUq5 -I9}tݣ\!f)BJHZbA.qܠ,\ջkWK9-6.`CG\Wp-ה(!ENi\Yw^9 XRr] p]V&'%yudcaOZǺt:pMH<qh&~E'}Qt>d.o}1HtzGgYMP1JyeuKqtLxBEι{ȾӴ72e)Ϛck[^"<4IX<֟aҊcO$~WTk{V̀!CE\0!ݶjP1\ (xt&8 ˲kB]ѷ_mV9ީ <b8dĪn++NvԂjm;uUPuY+Dfs52FA} (NKfz =HB@"7bc%B& 3z=6k m s֕eIs=Y5%Im^d@U =H3."->L3." w4xJ:9búa6^Hqka`ɭ#|^Z4 =F57tnOrmGO7M&OcɇQյV?J(msߺ 8Hwv ۶sʂM]Qwt:4IruN?TahFKa:j!<3VuDKT'W"/tN,RU1⚆Q] R\\{p]`zɵNJ㱽}6W uUiTN Wd%[$<qEfGe%\':5 s^kj˲qn~7\` wAEބ&J8Hu3M6NatVU0㑑jL"uY?{jgDj٧g:7dtWvg O=+pudEfQ8M Dں EY)'ZcPf)& C Q] ,GDEY'd}ǟ!ؐ4Mn g\E`-nHfuG5G˼(EKҐ!x@混\n|\ W."upEYpH|Դ#h*uj(sU TNpᾺƶ\W}JXcWCu] 8Ӊ,"WI\cA :pt0)Wcܛbƥ-~rk9Y]>^or/ EIݞ yku'Z@]i{>S S)D`4QMDnu/Fb%Ra(Ei&!PJ梅9ni|HUYT{ÊT"\O+UjT9ԾxRjJo4N#U۞]G}\JMXȈ[9\pnp.Sd]Qw*^suj-gO }~Ro\> ;.ucdUE\3EIe>+$$_ ~W\],uie;IJ1*78mk~#3')G.b03?#u]2_^Q/!ڜo9rœ!,4)Y"{3ltqᕸ=;>pݑI}Kj+$rZky6:^pŦ<֟K~4,5Yi[qg?0 fk\fC#+Mr ^\\],zTnj%]XfґƶkTG/5MSz{{$\ĚP`DŽJ_YvDT\ew;v\y'D0 TFm'I񤖈ϒA#k,ć[~ UUQW[ER(p5:U]sW.^W;"> 9mw݆kQF\yv+xK' Oʗ:M3_Z^pI>Dè_yCpMSxWWx\/+F _ W˃q{XY鵹k;Z@ne5MԲ,aQ)" xϭ~T]Zxh?F` k>]p5.-;PQ=j>cnB~Quԏ\Op"q7 E4I5~+6w\օm[ 2F\=s]p`z=yFͩQrs^+y7׫X:,D|% Uu ~+O]m*͋q9ucϿUM%md+ĎJjgrg~:%Mð#o vQbŽD]\j !72R]:$#"lH9m[T; Pű<:csҖ|R7@5W^ v6_ UKT4xxuq?6D\{\GsDsP)|%cWr~ƖWma:ӑo_g5-`i$#R?4)А`F_Zp*x'#R`;n <4Ih8z1IQNe#.-bH)1nHt; BuUq, ?C~tޛX~VA\ \WYBa:i;JƧWܺ\fUjIuE|Zk+*1W|Vbg>1ip.p5\ WreTՕޔ+d65Mop^ר%<{pM4!.욫%ו p]sa,ò>R]P!s*@,ȎW&lyvQɻR&ʲTGWe%~*+ TK9! m/* 49 FW.8# d5Nk>jyn\p]?5W3q5\1&UqE;tqQZJnrEf+r@&\\3*RJ\9j>ɕ%s\;\G^T #T{EbYrC AU<jN QǑvWŮ[RSÕAhG#p`$rG`W +ʲlx $^{UY> #vLb{6tpNWi %~wzSյ t["2Dկ~q΢/ɵ7DtV߫tT< lPؓxhǸZ-}+KCE,˖+R,՜ ]% IUU1CK0𵙂W_sW~uJr=/1WCiSg txV|VYpLzwF W\濻^?5 Uh73WR=:|4_\ YÚDeQҲ.L%R<UX i?MRNߠP)PsC~!orfAmG+w]0 b iO @d3y)IRq?Ox b᪪Ԝ6!̕E [9\>u# \감sma>છͪW0 y~n>l\nf sp,@46Sˍz {͵_guJxJ$\=yopzci \I'au]ǹ/ڶՂַ3EIyfEE*ize8ƉR͕j\r蝇qjss-i=gv5 \zz~a{5NڶU'אVQ \qEz]"󳚵XsupœJs+oH\Y! wBOIPjZ!IS*O Ơ5T ,,wYURsE>+iܜ?9˭GJ'ZI+5H Fb`e,`qbe):`U!rryw$ l#繖\:Hhf:p.@DJYS q5,DV՗\ )s=7S2hxzFE\BT˪X+W\kBF7\]|Vwf G^wk\ezw5ǕdPsjGCo؞[2DO _TmYJ8"$hJ)0dTަ]"}d{%; [ ª*u.^&l0+&ISmfXvV $15Ѻ},pӰr2*q$>'粰p]I-׉ʪ΅DɀKʶVCZ3^ك|5 +˲Y v59y~W|olVtnwNd 2Oҁ_iE}g4bqHrEOk5$!iVUS$a^UuudPP]qNR\U7^aȹ+kOr=\Kx|G5`ӕ+NfeTyDTOrU ,g!=WYYĵPGsuiFysd?<2p:"Y*!IDk6[ ';'.U]}Ǟ4Dj(e/~IMQ5R.EQjwU55'>5F9GO<`k%x2MySl\6E U_ %NQuA13d%8dõc!UfkiJ TD+e2bS`DYr )r8^+ws A7f|#"s+)kՋ>۷o4 ArYmZ<~drx}`au, ƙ[1X+a |V]60;mk >KpM JW#gٵ\! ˲V QX(QiRs:Q4l⬺>@j"jJ>w)\$1)pEns=NpM AѬ3}JC?D\I'.x{OFR1&5ho5r].fuQUjW{\\/kq,Hu'clĵ2Nm+\Gpe㔢(XkmRKK$U \5 \Ee:URrnr ԕk}+\s zp5ʖi]XѲ`*Wީl5ҁ>|p\e!<<`:Z iY˳8Y$#yrub۱ 7qUל*zTũXC^t"Yia! Ҍӈ$ЙH8P ~r$3h$Z:SKQz4^p=˖Y]hEc 4BS(N=Q׺!kN}?茹'~ Ul庒 kYj5Mx؉qfT #sz>WڦEY$0^![:^D Y_Y \ xCkp]ui&dۮ^z \q -M٦윈ʵ@w*[9suQxCV%;Yy\5||>k[0Iv. |S(J}G-0~3B0*tx#}k[2/^Kuz10jKRjׁ"STE%摁JmsMt.֕eI;p.VkΛ Fð/,s ò((j A٬Oq]z'!O,u\s@"Z7*a$ +\9`(_҈vZ]qt{"k ջMĮL?ϩiuGȃGEji"h%V!Y_oX]$?/X8giưW-%><(X <z"2[ &އSeGͮEY E'}Uuopa+iD4$"+xH;p"pd6VqW"1W7iqzm͕0L"s*sW\}c&RD;2u^?o\^ O|(:7~ڶ0FVBb _I.Zlo UUmيPIkb W\+Gl\sW"Ww^=ʭUEfW^^7TA ӵ6(謥aO a0C O-` 0ږe٬(|1Y`w\JDߙ68T-%w^!E@1&+W\婴jnpQ@/_N_uG.z5X)+7Q]s o48ET$WUwOr-h;\qJ/x^6VW{+Zʵ p5#5$qpx4Iv9qН{OUU[%K3}?U0:6 E2D#/>" +ńD\Zyb oPEy喵tƛ cbRWrLxfYε4͉_JʋP%Wljei_qE]>\+G]r c ey~Ƕra)qѲW+q%Oi}^q E]rYDvY<\NP\/kϲ5 Y3{jX:[]V$@PʪR'Qu0,mrS-q~z2/s[Qxs'IJӔ]I6 {8y ?[se8i]OEYYK\yRY:!͗jH1!, 4MiiqqY\9FU\ZSz'V *]*REMW<+f.k5E,"Ey+\pShdK-ZZ(W|q\ \{peX\I\\͵ >sMhˣ}y8Wz3"zs K(UחWu 6aI #%R;OOO "^AD_|(4!Vf0ҨJf{< J( , YkT`4M3FՄ+4O5MV硖q*K:khtu/3zO+WxcNcsxQVE\ rEu&&p\pА_ppk׫ p"p/+:ѡt,KJ`&OOhi61-ub3=WhrryD=囍Wc}x:\s*mTVr8a'k[q(۔8jORqDrc\I+Wd?j.,pM.7r5:wAowB,){.iFL>k~^iȁ.W?Ak$k 0)MYu%A k/9oAx`ޤNme'uY=:jEy~~&Igɱ#w;ԐƢ@K?_^^u7MGlܰ耉T%{mK//7Ԝ}5emHUPiBeQ>Knc[ W\k1W|&EΎgq{n^&9[\uppm<\s٬,x9u\M~7vzNm֫5oqk'5K viX}UUiW[Z8ùUuQ ]ȗо^p:U} ::YY#G G ^"~pҙ ,]ASGum/m%8Pzeil@k0mBP%Wj v9.̡ ,qbLCͩGg1ֵiYdi*3WModdz>?۩<qyu3P_qM5/$%Il68^V\KF_>[‘4J4H4 Ɓy5T\Uqq4* ?Wqz 1( \V~e+,hˢ$M%G($<ӵ(LfEfaEM%Y*(~`Ac4I%˳mdx闞繍\#z}FQdXlpE/E)m:rmfr3kIg+⪓@dߎRV:aPE^yp qLjѮ1yR]N_^,r*i`<}Tsf9|FTw\0%SW~hQLg4NM(n\LJɪoΩgMR]ךW k\-J7mcz‚g)R/9UuY,JĮkS?dC\QVU\EqKbc;9Nڵx-\UWbq -WnqmjW z3\1Kᆸx<#DӠǕUćY(FN9}QJr-Vsk4XJٶqF's5D٭ql2RsaA^e4tAΧi l(朗#HeS%^hJ(dY=b HΫ5&:ʺݷt27Gw }\Sps&Zq]0,B+M;Ja+'pU4p'p:`u1ڇu$UUsiD=!g__A5/iw^ѓXqMsst$ij{t<ʑŌ I۵^M ,%K3YjKX6ҴRG`EU dy=%Ħ*JRhICj:1%!yO\#aC SFDW;knDaHU:RJξ뷸&aJv%?} \^Z$ mwkhz[\/[\תR\ZW2M}/g]Ѽy5Md5H-د84͒U ǃ+ĘC/E.h Δ4IMĚn +.R.W @tA0d"aH*WރԻ=R{29'K8Eb3~xB}(E3M7 qcOGz~ta%yG!ʚ]޶mW\@sW|6.yQYؐIMEY!^Jֆ+J0%CWΆk`$ŵ׵JʐWt2/}\޶k\u4>XwqoqE,M3:M띅{`yB)õ՟kamׯq0b6?KiW<"X>g؋dWWOdGj@(8IEWT8$ML LT.}S ?l *V{&Yf0YUF[f3=8mqd?&ahc$M%EN|IAeF2͓8N!CeY2aR] zbXI]A(ˊ+a~4T)PP,&i}&ળ-c8 ƷjF z>W=<8f zr v59B_2އ+XX{IE\lfY92%0OO`CK1SVE1319'X5$8TOEЪdI/8I-kM8uZHHg4t0r+ZŊk:,{k~+X$RdeuFQdœq{5gbPZywpVy.1m0'qp㊞2'y}COYx1} dS|MqF>Srop*3W,ة[Pу+w:$iʨI9ֵ-yo'(xFbF3/$'Քj :ILEvN32|#cVᔢ>_QihZ(xΤ`'|*2c/S+4ECh8%gquX>0d75aFV4\GV$7Iy\=\Ut̼k4][PEQvc\^C~i 1_|< uu IDAT ڬW<bBDegZRajw?02e뻵a2D:EuZ8e`5GhHC,.f_}5U%sr:զ9 )Askӄ#` 8Y|$QOX2WO'3LR5LS݀xyTa ^UhU% `lH"C%p`X5DZMk._ñc\UGI040,Wp=ƙk \5!A(Q~a9.P ~^zE^#23Rys@';lq  K*,0c.ˌ@iF_˕ -V`1,(F'Lv{YqzQeƋFnY*[,$m,,A+ˊh>YjЫ aXT-A(fI,ψ6؈(1[,6McWmx᪡ʀL0?4BO`V_+"=\|q5$E$!`5QC/Sx6|%N G aG rz "9_Z$ s@'!WݐGbVw~BQRj dĽ(RXk&5f Rʄ r9D)9d8m:f N68WpmiNbIhQhZyl4 :q\.gRuPyz~Y&u١&gjO?iXUۮ31dpU K4v)F>Z_`RyHI U8 Eb^96I,f&9l4kge /9j\]X\V}\;x0CBUUUu[\U=zsO]r9KH7cjC.\m/^sobtJr]WV}'amu-8[+SrW+tϩ\2Ý!- 873M̱$q,߾};ZYUzAnT p_#ʢ0x.Bq<ˬu(nQIU40K`wC43giTsoyŵ4K-{Oq]B`'z$I;Z^q]NL- [.ŵqezx][5N;ښA6WXpEO']\:ȲB$IluLGw_ݒ9u=QgZcjV\Gcz D3`$-9Ļm5|! aL4-14M/}21)gof1yQXW׵j`H"ʓ,,^N3Re^OCv;y;I&dxpA#gfi#&9MALKVGA@sZF61 :}/IS6D diia lq?|W\g ^,z|d =!64m0<'X]k#]Z/b/R~/i5͌mZ}{׶kܺ^qducYn7Mj'=8K-:Gb#er ع$6Ue&=NzW"m-WE^HU2jbL+x/H 7Ywe5 Tei >}K /;U_B-0//_|i `ƽ9I ξiΌ#K*(rZqXmpѢCMqnǸ'4FefVbkmՊ,h"8z&~j2d=mmb`yǷV2 MI_5]+q\~Tgrt:P\P8+*ZiqO]e#4f ]Iˀ0 r>%NbNJG'Nl'SŘnqrgT8|+pEb-PB ,Buez Eئi-Kaxd *5Q\8\q{"5;gqp>U5R 3`5.>e:+O-I86a a,q㺻9ѷRܝZxa =(aWy6E4`Ji.xv]&O0 MSr7э 87_>FS#D*,RXDZRՕOgv&AefW>,&2aErޕO0/ pޡ/w؇%d1[ڶysDu$>U8:C5a:xl^q\wpu>gA\1VLvF|C!դvq!I{7/y @p0 lq-J( dWfB=\oz|X*k]Ҳ8 }.MS-fT*T^4U&вfYL A㵣8$U1ɜdbآكp )B&@t\:0Ւ)X~;J& yHI]z4"}YfD4Vb uT3Ɵ眕EJD?)(Mt[GUƑad#3=+CjsۻJ xzѤ˵Y:FPI1ѽ5g~Fe^P%+) <;& "J$'ƗQtk(E^|k`*Iv(;?_5pU 5Ɋ+:YO>Iu\9uʐ\WLȟű(7Ib3 ztey  'u! @0&IF|뺖2]@giJ&ROG9SuSr42tX,6Q(!:,00k< S0NL 59m&R'#OYv|+soplp-x:kYՌkoT."5uɌg@}1}\Ud!X0 C21׳w<%MIT$QalR6z {UFp+Fd=?MmqmFAOw* d'=y.̀@ PNǣ;'4c<0k$5A~IBhC>|JRD `pDBxXEQQ[qc"wmwZd'S%i"z'àq}<8Q\K J<+>or: *^q t>)B`8g MpR\u Yh0F]z1B'-bShUW;H[?5~U7{6x"O׫ekŕ6fI"UUkd#:ڄ^9H=_{#< zuWcDN4|540ۣ).~rn* ppW\q|e56 Wܧ)1{Wz͉+Ydg2,?ˀCUDŽ>j BIB]C]?jG4pH9㫿^;/\SL$e%fNߑXbDQl%U}`џ0\cU&uw$I $kWX=h{_|.RF3+4̨Cŵ z򭸆5up~#) =e-Jˬ4I=\wW~kuWܑWGgF`ޡbҼ6tH E n^'in)T:ߟ#ڶN0H_(pw4\, W`Z^ x's/dnhy P(g]0 8\&}v2leUЯ[]r8/r tsahXDյ|ArV2dN:#RWeSM> F`t`gza$i>u!*$Q&[?i(8k&IJYU2e`bWe9Lɗ/6\;dyY׾uxHsfɯ'm;k(َ%Sl/6]xX[ y0gt1 (hn'_H۶r>a)UlBA$`ul̚G~4VZ4QBu'&NYYj:*J]fuiumfQFb]cilp{L}އxe>z/RIIJªjMs &~ ]6Ʊ&NYF_WD?5S yXעFd[\,u^6w\gκ {u+r,cy4@ΌY{ ;pd؍7\b&+\k+bh7|>Ջy]N4QYŗei\!!.rbޣحSa0nip8ۛ$MУJ:̳R3;hw(KSy6F* B Gg-3W{4YG<xWXʊk)L4JiFy*9p? aXbkTYl^q=YOMթm4kҘCyXU,}Y Yj"75IV\A&i4fuYzz4c 1t:t9n;Ӽsċۧ<3` "nt'81nK?L:#6Eg۴&]A`w,z:z BZlI̗z=goVLhdu*٬WȍIH~"3k-MUoeLA 9E8eɉ Q/⛙=Q!).CnJXꪒiM 9z{sQ?Ba L|(~/^fȑC4ɪ[\20ҌXVh1> =f|8FIb6׆ȼ,[\LUg>Ƶ$khǸNq=X`&i IDAT& W̮^r[bi|k͠(rD׵7yWg'6f5Nn=+T7zaxkd8n'6ޤ (N"5@yͺdy.D- ഠ^m;uܚ噤In$c'*];8 ,+^"!q z(h4FN,|_~4mo6̳\ptNY1ZJ p(r km>\ WM%X8$stWHo1o=õE Дh/wygӘPc;}4M-/voIW8q*ъj.Im\ Wx@m+߾}ߕ繩m7M_~?|:Y0$hF `ݒV&O>݈M(M &`a+vQ4P]a9+)dg+d[\c,? $ky?qZV\]\S6XFᮬ޸ sH 'kB7-z 8C6r{fYUpa$Wzﺜ5&iר,/*3 ` ZQ/yw%⤞XP{x:藶qd]V:U%]I$Hn1MH?Ik fF' \yu88yﯯ: A'ЀpxpWIӳYlӂ.d"}pys:pMz-KRpObtS:w^ GIR-Ou"4|PTeK#U_B'lEژ$rL{ :cTt kջx0$Z|AYvvP5z6NĆр"z5\{vW:xV\y{{a1*DwyMӤPKyatZ>|(;ϲdۭI Dr-2CεMu`iXC(R9lv;ޔ\*wN4Mhj&2ӣEϢ c77~lijt璂ze!3qlQp~`cC|QrLZMh۶5 =+@\2%4]Ԧ/JLΧJ*¸EYHurixA@ 'L.vKweͬw;r|{3*e Ys n>J$`Z{j4ģUԢi]a$wk3&_1wu-M۪^ke1fLבU)!y\{9+bgt-Ák JnΑ(fRmNrZW0 u.zM5Qdl Ěk ]uJ`eqZ9jܹ X\\o"\8'@,ͥQחiNꤻ3Cɾ,*M '&fs~nY傦LL1z踲ΒDr ~?iyFTdGm@c#2ʚ=AyZ=y$ReXQ$/Ϻa*rF 7yӉ<573OK,jSH3t1\\m¦+uצEb3I[\~?KZ{ϻH:wq V#+6)U[:7Y\˗h`ȉENْvKƙsn}EeUMj dDM;إ&EDzvs Dؖ;NĪӮ.(=*+i'/, i5ﰙ&Κ:4*!]*?k\5puHE ؘ/I͸SUN5]\`Spb.fڂ<3ߘ5\ADњ /04!dJt)|w=MVgbZu x^:{ANNZ)XSQ,I]js4ˤ 6T07|ڲB(xw=nڑ8'<ɥڔsq]ຼk`zpݚ*lD TK.5\QRsOcNpnp]fӴǰױ[*kt\.FQ6yN 3/P刌e”9tMCSnD:~{~~]7zxT8\ҼDq]VZd_y4MUUl!dj|D'#) HpVe)Y@cnNhUF2^:3FA,ݲeM@+904 //2džW8f"4Ȳ̴q=\'uezXUU|'UWrw3Cу .>F mٗ%;Q^^LaΫF^Co¡ɿ (05/{mgZa߅5+IU3@ t{zuk \$UIL `[NJoP8cw,ja ?-ebU<// L^_)%N21wغeWL0"I0EvGͪG !Q$I㢪lK'Blcne)y[f2멼Vj8&\cMS qTٷ׷;Xng9JOum\w^*=mfklqU&#tdJ Ҙw^ ٳ^ZfF h/욠y&ooߍWU\. 6i]lV[\zzC\KnܬW\?h rir4cj-0P/g3t6xKOCIFhQ,?uߎr8dqeAE%Yw%BQj&IOR%Q(Ev@EGmZЦI.Ezi3NўCK:GPK f$u1QiŮw]fhU\^_ߤpM֓(r<=IZ#mfәGq`<goTY9ȗ_W# p矁M'SYHq] \֫\9<Oo8>w)Brx/F70]L{U0 Eo#),$#b,L˜$:UIڶ5G'eYJ=i1_2<ɭNh/,^8 t< pXq,ʿkpET5oh6 ж`p=N6ݙb-@~9=\~͟H~uahM8qsGhhF=\ppg[X-e\Wdc6^*=\E~;zU@f `_%I9R`W駟DL@H׶ȦobH4HؘTG\drf$T0s/(${,CHWgU4M(r C-~./in8 ݋ji}:X$ %K39OR\>\ pp298a`W_dY&=\ ذ鈐)sS->+L!st:m1N7B#E]QU 8dڶ=_ֵJHt:{׃oQ_~s꯸qU.7iE="ͥ,^Γ6K *il&:ds.ߎŇ&scl2/:v D=ݢgK,Qvma* 4k{eL:1fqdۭNk4,[Y&iYO^}8Ni#*!W``8Xv_lT_uR[B2MӘ יBpc:?U[\s1!pqje (ŎrQ)OO CH)3?3Cڅ3f"lFurIamH.>\j)mxAMEC7NERAtx:Hf<G۷zZ"a&"ME>EYUMR4Nqm7q WIgJ[*D:\ZI srcfZ].tk𥍢\"sb IDAT^o WQD\I@pm.>whEz=\@V\;Tʋ7vmMFfWp: v(; mkLῷv`< *A!eXg2dtܴ(  qM_.ge1.#fԟ^;]+妲Wu6Ơ6y?8m4Ȭ{bFh'w[5v F7]Һ3f|Vw"IX]q :8gǵϗԗQM#4A ?Z8gjL]A ///\ԅw|r9Wԙ^+j>k\ɰq'7U^_Q§FƈcMQ@g@DlL 3u}XC.yz;9NMN0%7/ }&^o if&h7u}|QV9Qe;/?9e~@ʬWi(KseXFuǞ'j^V\q,Jœ}"2{'յL$|qZC,ӎb<QkP0Wo*1uYM0|8[\bGfkkt)Қdk/`rFUYr_E/sQ3&9NI'sra+jsx6~|z>pY/5IqORXղ؉s6_~?k*XK*lXГ~GQ$4P9/t2jݡ:`ӜKRL c9wPט촛K!um8x|n~Y4pKi$r+ V?+Pv X ~Vފkf?pȄVW{2%$Exmp BHǣ Jzib1Bȵu$3$YGC7=\T\GsF" *p#q{Ճ> t:p^BqU`bL+aJVQ Y}f`>;Yqnq y}}]s,oqũ4ĈjR_)7m+x7]*sLԁM4 7y1T9rܶxV5-ey=\?N'lU9ꌴg\.rHYa)uvQfr8y?`g~(E64ORWhD%U!/9/tlf_;lb*Ibˇ\qMk'3U\k0:#ɫ"e͗W6mq~Fq+\Gۘֈlh#xy3ui8IY6Pa y[Cƈ%CzC8l"Ʌ'لKDFT`*I%RAFhRRHHP ,r=I7i0O#n'#A @iY9gyĩ>.b ny]|u]'UU{΁m[|5Lխv&pSh(3odg1\qJv{xy2΢ȍHf,uCn-86fv\>rk`$D^{ly}4M^8 .6*PQ~g9C ^װlɁ6:́3өɏ"'[6de¾_jꡱTzwʕڋR#54[̳0UZ_$isP /}ȲW4h9MOu] %OB1Bk#"rW> WX⾞k+_1Chz}?c^G_"Q#;8uzs%1֫Usc\u~<64Y=&M{2X `J::ЕD}bCݶR XzB`)rUumkUUʥi$A Ԛ$^^D@ Où/aYNHΩ c4U|VBwĈ= Wy+z49(ؾUQetƮ8}?X񃼾nkykad[l&Ibky4U\/< ^~U&7aLI:y.5}\[oq!W)>V>o&j\e͝wLF qڣK!zv}xezdk|pRܡ4llCXڮ4ax 99e噒p:TN\;Mzw;5q# I(R%_vVԼ$:PR<٥أ@թs4aDƒDЋזf)jvjG^ յpAYq̓{k;\FVbʵ՚:X(ڜ* A_4E wb5ni yDEK*הTR4}q#F3U\}r•Jd'f97zMRL+Ɍz4DiD{c4 w/w%èMj!l>,?.5H*0kzcT UF1n.VR-a3.W _FgqDSo7\{\ QE\^euт#g@p5~{1Z zB!>+W1\3*i#qB-nZ r-.M:zmxF\{YJW\W}i ENv$M>hTUUF,TYga@L,(g 6㨡~U|aJ/}ܢ(hQϑލ!d 8x!)υ1yAOuVU:84؈{r̴H!.5⚥j˽ZV!BxU`8NY"Su+W)aSU1]ʗ6seAu;יy̐sHomYEU I"kuk5buuUuYyE1[ʛuj'%/ȳXw3Lu] RZE\j1e]D3XLIBV ͑<&j76 5Mh`dX,czb^Jͱ$ L ni͇Ӊ*uj__ k ՇZ8R^ \q],CnQarg2d3>(js'pʜC.9$ kSjT&Mft*MS=i!iy~UaZͫ%?qa 0Ģz VziŪ8MWZNG[kc8OgSN<3{u\b"0ƹ9:<@(A[ k׹.:4 1Wx $&' 1`(9X/ˬL]ױn_MRJ n}ב;!h %DTUl8ɇ_ %tԵ:&vvf*)#9(6!mRf=eƨ YD"u]|IQiF WwUؓ1U^y,.$ų0Y=Ga(r]q :ksj*-HT2\MUDUfCWlp@WZGu杼5W9/ԁk^}RhZ[~3d W+\+z+\kW?!!9>7ՔI-lL aIUUg\bؕ;)vS=6^z:|FI(DTuvu=ĜNGˢeQRv97ֱq'gH1gv,O~5. %zi꺎N'&zyy;+`4aIF< 8IrrG\K 넫rGozY8+/nSrz|Mڀ=5^9G\ku:]kai\/{1__q#ɘl3&9jşԶor%=mW\uqZD\+Vu]qMos%G8b@Xj5),zwFbH۱^4 + v59Y8+w:#Nxu]/ְ`V½W 5҄v厬q^B$Oȿ.uQaeU((G}H4Fck?+$ l^stRk:k\FhE*\42$X{˕˄Z}hWu;6q˵TN;WU\ЩU#\y@UM,OZˢx"u]ټ3r hQ-Л/5+קgYt;(7(rXrk(KJEBV`4*&bw]JQ&35Q4v]۶='/z} OҎǓWUEx+Fyn8:rB,CeY ,k{EQMFWnvgV^h-du_꯹\Q? <:E-7fuiwBvpy_TairHCJ(5VL#e,Ygϭ{dDrҜsQ^Þ ծIF͸j{ޤam@Zz"|htIՌgG}E=gq#&ʹk@.Lb,7nI"USt7\%|K!ZGW'*j06 #sJ5~򚦡墵 \Cx)G:j'5l 8ǹ~v4m^e]2Yj xs4;N|V@1]OOOZŎmDl "F'H^M4Öj5{3)1 t@wSOf':i U4s)Wຉuz~솫,6fuJ#mGy]U}?v/|w5FppU*阅9pmuuto@տ#5Z&^E+wk.\); Xj̚փXX|#T1 ~&;)EIwpц> mkdyQ|ScNx8b!hN0;'.884"6Sl6KT.qMOn<񴿖<\x 8s\WE^3>׭>T75b^}t.ad|E \{x+}k^EV \/$IJz}^kz}^_z#4C(IENDB`criticalmass-1.0.0.orig/data/bitmaps/menuBoard.png0000644000175000017500000031474407630537344021421 0ustar danieldanielPNG  IHDR\rfgAMA a IDATxْe[vϹfќ<]P\Ȭ(=P xS/q2 01)U*3O&pך c{xI%M2kcLǟ~ǟ~ǟ~ǟ~ÏVik-<q{ Oz0Z ֺ|mж-<σRJ, c Zawh~#"h=|G44Mn!D$Zxas$AvRm>hc !'w=<}!"ށyHCߣ*e8jWw,+C X 0qHӔ *5<CJk !%15>q+Rca{\c *{0Nr4M&{>}h@+:ثkSDQ=$9pMH!^IWOB=w]!eAp}%~wy= wv~ 8y4M$ q,K\__#\\^m[!4 v
z 4sm-뻷^=j-$d:eO/^ u0j4ʢD$D/prz>µ|wދseYⷿ-忀aBi$RB!=  /4zj:{(5@H !(R Xcaa!w_ENBIkО…[wj;1\)8pBqey+9$=pF\}a1WOa?:*aW\j+^ ){|߇{\s-w{h B:(~G *^!>18{]L~FkA?P׵3&z Z+H>95 (Z`B"C }゚ ~ Pp.eRc ,sOk 'Кo! #b?ŅֽBv]H]? 3G\@ qxG%ޑ-Q+$]@[%(I|aFF.k"7Wb:D ut";lzry k ~}}Ͽ$+{~@0@;QƗ_bE(ιS`2i$qyaCEN 8_n a8IB۶w^4@ u hJѩ's$*f0=G۵dpFk[hckc 49.ǔq|4 R8:*/%wZtmNYgA.# F3 R],^Q5ڦVw֢k;~֝rh"{Ņ,,|GpDi 5 FÓG'ڽ_k>kxxhr{Wd9j1 8F۶x;eПT}Уm[eyFgvNudyt[Ka{2vh!`VS^zhŅ@JsF/@zޘb*EL)t]q , :J+""mwA >\(M; V|c j+! C]K/./Q_mtV;OA)$I Ozf =`_5B!Z\TW(C)rrh+sim46 }?`<䓘 SA*JsuΑT,\灋B<#;j[j;|KyX@JS]-4`' <jWa@qz0vtK۶ka&j>GHORf߻Nz<)ɥAiE44=!-X &C*+osC&MR <:pZC1FSXI:$ڶqz!Xh=@TZz~Y) N=Z<˯ؘU 4?P3Cxf%ڮ9 /2;"\Զ!"'5Zj K=gRJJ48ZӪ:]J l C*YC@)1 t{>9a\MDKr`;8c-ՑFg? G+NstZix\ \J6v1h xĠEYQſ[ j +аr/{!&C* PJ9-ҚR< (R5>,}wEC7=V%ǿɷ]*t0Tw<-?W5z>NGKRTpJLQq0эq^$8A c]kwҎ@ oW1Ja#zcr4j]'l]whh?]1}HǴHAēg1 Q#}uR3pmkL $cKQ|IA(l)B5@7-gq마^a[Zؘ3̚-`:nQp4ě]{@JlNQAgF:>@h_ZP5 *(1vp-}#%AVDId[Wš%aB9()SNE!Ԡ"k\ (@Uqw"CuW1 GPpJ6m4>(цG;4-^Bk1^tna@ꁪcqvLդf/M\|mK*>0|co{t܆7 Q!bznbq˕^F4{Rr\会L:ށ{  tnk |vG1G5 OpHA۶.ܚZaf,JOfP(k$7QZGm=|/3 3dVS3mylw>~YKA]8lC3A_m[dcn9t7|*1\Gb o=IXik?K|ߣ~N E T<ApJ \x,ԌG't,0DYUd4"8дzңԂA HaDa2U]O\٨WqUG\0Q}+Y\-sWj]3FAچ-EJ!Bt]wk).Ե0`q-F9ZXDF *Wߥhu]QXaI!4s"{ܙ=u^X(5٫p!:"{σr=@)j/D G @+]kX1x !Hz{{~(CPa%`Q uBW5NNNuNOOq}} Ԗ@V\`mb6a6+yb#`X|%ArŸz!$FEvֵfAl6TӧO>ݻ ٺSIJ eQGgKmmHt]`H$F\{.p}}EE;\=tmO*@aAJ:`6b6ky&\.z\ha N aGQ ٬k\quٻ\CqmaF$NeEq 쌸Cic%$Td}^}ZIx0 ]۶-ff׀%ހ-1ȵ&W۫fap8etP#0fAl7BO?O~5޽{Gk{i?yw}MGǘ:~Xă$ZRc=>S~Oۦ)}H#Nbw2dY ʪD$hQLmP%bK?{o~3'}Ͳ̩fdAk[;fvyBRkys7t2Pȸn)> RB?N*-*n07n; M86yu,W躖68=;cW,afs8fGse p|3W:#\'wQףy5qIZVl)낹G68== q"YײB'hF4EӰVڦ>fa77jfu\WvcqYkE\kyqB ),-,g\5z-*0wP}hnDj!D][%<\0~IJiUYZ"Te(hb$' `-nW+I|20XDC"IbHCɬa`6^c@$/UT^M['oGHYkq ,]ZlR'''nQqG\O!v;sqM'?k5m\߁<'4Ex}u5Pa7#{ьl:cׇsVH88;=sʿ>UTUŵqm;$I8NXܮn&)IހuìHR{\Kz~N\Ak-A#ת~G$ ,WX05|_;+~OZWRb\RKKkV+U(|>ӧO]ohz#(E<Y!ci榴1'dYӳ3{ (& 0yeu=ګ|6'}w۫,kv5f4 sdyӳSwG\fs5gOqMRD,.[\__u\8ENfݐP sG9ֈB΅c:"/L&I-͍Clfyt LЅA|*|GԸJnc6HD)(t H]:DPJm{,4ٶ- % ՅcyOb!15`{\'uk1LE=>U0\\'pl>CӴy\;M0vȲZ+ q5E%cq@׶HŜMuBXv{4M\i-I"vL'ZiuVcA\硧kSu\9ʎk" Ct]lmpnCU) } ZQ}W&!99p*tk}|PZo]Z0'PZa_]=24M7o =fw-\Jzы+@{x-\0ݢ!{G혦mpq~s{<_5s2,ϸE/(hEq`Y<4M』:%nooQ  R(dzŞ YE*)H0`2a-7ok\5s1,K58V <5cqe<7Vk\\_q1k}?z8lyMS\Zvrrۛ\JqsV+99spM=&Cp*BEJJ+ Yiq6,M1٫7aպaܵMBsxq^eIAzNw8=9Eج̵q^'l ,z9+}D!* bN P4=c!K0RwUD! WUŲ M]~CX,س{6a:`Zl7'9a`1qrnnwya2`σ)}!2EAsS$uHQ" C8'yh@QG\G\IsuǵǕĵCYhI0\XVא#7wnw[(ʒ'4]"M3,OQ\CjP^YJqd*uM\}%]ܜquPUUצB IDAT{ury:c:`uND0b %X.,OpI4CQ.Mſ𫫫+yŃ7Z, DaD9J8]F^~Bt!%4AHxzͰ2Ok<ϐ8Ǐ]^aB)jm C9$o \~sĽ~!,Û7oXg$)'J>d:q9QJZ?1[sվP5-?]yP%$j׿ IM} Ʉ^;`:"2 =vNt4LIlvWV?<*@%}+z14${\%6@~H/$܈qG;$j_od] q ?1~k#",}nn\gĵ,_SqO_5AçӧOQ׵3skqQR΅Y, E}jߏ$qyu]QeVJ{qYIc9"b,1Lprr0(o퐦)޽}K9V,vBcݰRN9-5>ɰѴEgOE-1Ek-4WnW{ĕeY,+'qvh\ɰ~k\#KAHui1WJƗbH':ǵd㴨tvaP̕ꦆ~Tk W!' ; qqEf(mRspи_P 1ykqĕ%Z3אV%&9kzDxGͥȃjmu-KݽB qT ?Pv(ZQ(s^zģG8Dl4-,9 [wKa2<ѓ~9[tm(\\ mZbOTZc٠s3$y1&/_ tt ^bб)eY`j4=9Tp~7lf!?V b4O\IJ\9x:2k }QJJL&qܯX<{ }CG\Z\%V= ͖!rjLr| \,0Nq-sNgNTف0*GM?;Wrkij6,}jEd\ys81sڵ'J$=-&vݸ0E\mi2#{r1ǵgEcgկ~E묇nʪ|6Ǡz<~|8q5 c5nGXPjt2|>Ǿb\*g06m7[,TpV\^XwY“aP?~\ !=p]_uE'ZZ;\7(W\g6Єp<2xRiv\t5:q')@]Qr-)wb\5IV#e|a|WBSM'3Aa:e{s;5s$q n+VXn4MÊ=yҌ-UEkx1++&$1Iw=V#(^1׿vK$(#YJ, <~J)6 ڦt:~G۶ϟ?Ë/PV6KlNKUnO'/\ŵ( Hhn2gX(_6VC&ymZ#s, ~0 1{_|^C;MLcۡ#7kU\ĕphzk\q6- ϟ??3W:on1**_~ydZk\#+]ka\WQ\=*0"tvE]7Csn."^+,~#R$qOUX,x|\Y۶-#{+<vdQ4,ܼc'{\_E7ksZgZqU+Wk b'tbc0ͨb?=9j˫i4q헾5>sys%=4fF$s+o߾EYNJfStmv ;3oiEEk1(J#.KԬ:,ж CHu] "Y+͖up9Z=RTn6n[ֽY<:FϜ3 4;1-:9p-dBZ|"!~dkuG4s#h+<}[XqGE$u7.mq:ĕ»\5s=z\js:%65sԨC|}#RyfBcuU9F"2Qn>&n)Iө^%^|PSt]j8R uSA prrk|9޾{ )=T}ϭX\P7XFZX F( `JB)4v=fp= Ѝ|>գnt:a*rZw {\߾u,]{dܘC\C{{|s+oy<:@Z!ʲLS0vs dJXdc4s+8 }cU/^wWƐQK'0Wωr\&m &uBs ~W77gM5 McVc= cZRcs(x !m8{|ImZ, ' jJ x5%={ Orlkӊ !д Q޼y!޾{Q+5hbΒRiB<ϱެEpq<9f3ĽUC7Bfә;hz,BwG\s?pM.3|'̕Tgw# <{#\WWRq݋0t6Eېn \9Z$f۳?rךJz튽Uol6a`>AiJi="ImXq0׭;f <,uvzv3i`t:ʤ9أmI~y8"q=`CGx\wSƍ y|6ۍ냏Ԍzj^N's(_|oH*KZϠL&S(1 =wO]X,x"/ $6/_BK(=ja]=55̕M32W=ϲDx 5Aup>U0Wfǿ}mpyy(믿Ơ+_p VJTiɁ|~$'嫗hՈFf9p Tuךrlb_E/p K%>pz7אB"M}O& Nm6Eĕ& N&n1(qNs~^[F?7 7 Z)r"#t]}]bKgggT_Zr#IHC7vEa|B,hK(r;|08h4G=q5fF$N- \\\K7?~tq2L0M\Ot2qIǁFd{5nno\#fO:OUi3nbz=$iBjH?q}} Eal 2,s% =:=JB$ڮݻ(l!.9..ΙW^w <{7XgXfXkެH~5M]CG46(rC5*sl6 ^z0QҦ^i1&=jeAp:wE׵}NNNH`x4u]_|pzvzoƭ|@ = ono/ׂ=./.p^Ic^g3k7%{ϟ nyl^;z^\#ׂ^q+=qY=ŗոiWUyXf899C[Q@4Cep{{snX4uQ%0/vkŭbx~Ƙ<=..ѶtE$)ʪI `cX Pa+9,W 1R"IDq[h46e9}B(.^akS$Fpq;1G\!0 9\J\i%5VI┗IBg'|Qt kϟG:I b6f3Yz0)65VI, r4^=b@\y+tv5%Zk~戫 a,,; p^\P_a-k!sp大ggpWkw,qe{f'7?j`%maZϟd+,O(MmGS_}au1$hږ`>C4M-...3z/M?D}|j 3a۹Yz%co [4zrcggAU/}?fiFa_`y%/dPl6U2Ws5)sf{Z2W}< 5qv#M7- CGp ]r?r 5?UE-??dh˓\^\`^ܥ#٫'Z2s]( , 7=H?5 pzrw҂mqqyyn#Wn gĵRAc s%#q=s\iSX Iصnܓ4KX~G$ȳ FWr05ך4t:u}4mzlꤎnf}`߅a(3;cQiT=zmW1ۢ(\Tshy~~խې>sۗ{̦w=ځ 4;:Bĵ|F::{R|  -亂Zk64^'@DZ-cMC'ttq\fqZAώEu>usf˹r}w!xcQQ0,QwlK9kP\Ix5jnfF$gtq;yxڦqq?wU]a6ZV.LS:q~݆K״<^4namS~t|N&I`X۷{1JiI37EQR> k43 E _ Q-N 5qĕa"IR::b`ϕ_!;\w%gsK,K4kݎ*qxQX!tx0(a:i+w$)Ԡ~$qUQIh9II45 תaqw1*90no AԀ4lCY$NzvzmH)98Fo>>l"ϧat.kFZp6uAϕuktm<\'?:u[q₸ UW\iZ-3'Idggnנ:ąS IDAT8|~+!/X+ISJ ڦA`1]\.QlY\r(0S n6>Sڲ~^O+9:*lN4tKHH2HX"C:]hbv.,3Eř5қ 9=L&rQ2y>rہJc[gZA9NqrzjwJ)X.XCQѭL&k;:y>#cgBbu],y UUVu⅔w%檎Fu`JZkqB8#WݿX,prrB\9X.ە0F=sytmwnx[\偫tbu )\ZW{sk5 Rڵiaʋ8}}9aD\i{#Mub1+uq{q"8[շ|.Y nѶ{x=rt[>ɹGr>㻹Q!|]RYVLh{k?Dzf  Nb)gggndnj{U=O" UpfIJ*IFҾw O-FIb@(˂TLf.%/QV,CSt%/̵703 Ck 0`[u=f\cZ)sZus7a/t:u2- |PfMeWv޺ק#2k v7i2Q|"[Qzү!LzojRFPUʌ=|w9 `Ϸ{k5(岏hJɣ,Y1s-J3!I-DS\GG &/6M#5_^e ݠP}irXw=Wp0WWZ2QOp=g{O\5 <ulnL*F1o_6EgW?;=#IJYj`BQT~Z&Pr㙦 ˶qwO\d}wIs\EvKN7t40R9 `'I%d*mӠ@m5NNOqdW*Kh3\B\-Zȣp7?!+Mc%жc0\75Mqqy)M"w{W3-KA@iʷYc+u1N0hF4W^V̕⢙k;* k\-Q9,xaϸfzJ|Ҁ0'RrP0-mm$gj\;Qd;eq\ 5uEq7MtbNZx-) d-,/KDQwM۲]V"6}Gzіf pD'oHPvp=YB7tyTV bxZX;QGIfaF ׯ0? ZF!<͍4C5Mn'XĘp#'txʵaWeovG4`#v \7x4 $ ?l|E['d1h+AOJ4I5$"!7MMK>uU+'1Em ynnoi8?ZWpn 34Mr6m#֊DQw'K D[m˲_~WhwwHt_}'9S\Ef/p͟qUkqkg_\zW|qd\sFمPu-EQ%IjNdwx,fQG#8\WtBA t ȫaow[K$a@޽{; ClT[/s=׌<$sm|PQRI^kVic*iu ]GG@혒$6|eYhX$ɰQX=99 o46AP&?=&_}zaY4Rv_KW+, +*NONa;6 4ӽ0e)/tmc: ;ĵ9A\(r혫vxۄs]ܳ}2 ?|/٬+Ϧ`ů-5} ؎C\Cu|]ض\p ˢ` ^>אl+6]a0W~M'S2i$ndW'/z J+I$z_\{՟/__ aO<"Kj &"mK,Io MPDEA>@ʒIbEVpʌap~pbAmKO;P^X>9O?TFy;y.DL,YH̭OO>~@{AC4Z%*Mp8:8͏0LCU g}ma8ch}@U>׃_os177eZ&ybeZe s2J]}rҢV@KE'7gg:>.`70 U?VZ( uCiAȉGZpeGH`0 ׫aW^O,\g\s`q]?>%~?®mяt]L(pS+lZ\DAQPp)#f'''?<|t݀kx|\dE^\.m"/ۿ{r3,u2`^JY5??@h瀚e6fY|Cv~`>2Xo³}m[eAꀫSʥk[Z1k!MM''ǘ5ؘ͠$^z\<>ʋ->I۴(Opr..>]#VE8!o#$eґa.yJeGܣ#a24ҥXz簝g\כ=WUЗ<$iBNE994{.qUG0 ꨋxq)Pr}ZY^]_iZL'6/lQ/IDuk'JN9F<l>%fYbHcp)Ky@XM&c~WU?Uԫ\iZ`v||Uyh>j`8zUET\OOY7?cB;B4l(8;;Ӷ-`[#@#E!E /4> P{CȳerYW^O?fXhwZ~Qs4(Į5Xi*նx|ƕ|rzg\{(\E6=sU9e}ݳ1{W1B[ea-̲\Zo<g~ Db躆ьNT.r\!{M)NaH GNϻ{xdKf$QF x[֪7\uS5ʢD^,ԵJ֚RGukI8 1!7-޼yq9F(o(`O'BBpBQTòL溃,e:,+}Xt}.:/\̲L:\Mٷ0W_F s1_,cӞY6r<L^> "ƑmB5KmЎ&(7P7<^UQ`ZtRvGŚ2Bv(,6غLxhIz R)7"L&S_\@{H.){b>;fR ubKgH\m;e0 ѓv 2c} I JK'i꾎~:24xsT5~(d$,6 4n㳦qUf>d:9E!ຕ'\N1Gc4l ul^"(BEG¥qeO&3k7 àzڞ+P^a2'6~kxv$1떔)eY8;;C؀Q4t|<"=$4 t,Yʁ c/ieUӑ:uz~<4-*l&+DBEi UiZX.<miն)JjZ>A+ vX m ]e{,1`[ݼzcxu YX!yTqB]~(覠WA}r,J +9\ 暥cʼ[.i O[bmv/p{zh(1]xV$M:Ӥ뒈Rrе,YBu͚byF\YCii= RtUƁ^UU \5|ƕLSt~׌5D5]Lٌr<'ѕ6y%WxBF,qјG*,&Iל0u͙*F!.h,JQ( {ȕqLohwk,4>ћ{:M]N.ť [,?pX> 3WGJ?A8+> 1Cľ[43U6` j_'TEQy89=AY# eF4*\C4X}g1ڶhyd$nłt 9Xx+}OOO$ 2ΖeFlflq[W+]aZñEV)vˆ$ 4}{WZJlvK𞇓/>Wʖs=O O|qmZ暲>AUH1<#G\iWR?Ҧi0>Es_xuXWp)W;o#xݟ\g\dA^^.[zz=?.ޡmg\g:׫I?'\iY5"S! |9bYL&A5, ڄT-mS>m>h$5y9KRG)r Pf'I,ՂP(v8 qss(vxD2,u]iYE^~M旎ˁ*B/ ;mq|מUԫGsb\;V+F6n vK/pze]s?!> b>~Տ?<'V5䗿nPJ!-Vטf _~%؝- lD4OuV4f qܱFXf% ehPC'0Diȅ+(*rdoEM6B=}MYɭ,؉G vPFR_²-TU 8a6!rz$[1lb<'eO seUf8r-Kzh*v:(bO=m&*﹆mr|\d8]P׍@PpQq`SdZ%y[TUe\ߏ3+=ZU%p\-W Bpuklj2k-,6^z$ԃ)vz[QEn>of@.iV0ٱԲ,z8T?dΪй IDAT<'tmlpH˦먫 Mb4" l2hF& cCث+4-!#(PbE B)޼yUU18 46twwǍ*KYaY6$#:=wԓ4K{p\C %8QZH&!az 'v|cӨ.=׺޼y#UkIc)ۡMKs],XBQ]xϕl!ަ!q \>x\*X>WqHKNB\rm0^zo6ě7?o>~uFˣ?*lkӳW:U{wO^*mvBBmV 6oޢH]Fj} npv~(Z-6-<߃a-ץBNQc=ڢEҘ'IrZ}F`O&a^Iw*?zl90;lY,'ѕrYdZ(4Iɔh?ϰnؙ, k!@[m(nZk8;?'K{=vFr3Rf %W9842ı]?zE&r<I/3.vBy%t& Zh&2B GuM^e1\bS\5L85/sMk=|HmEzpD\+& (n`<cZRP,dž}ᆪ?O?5S`6F=A~v  ŸF Js9 [ O<Z6 I CRWe FlDJ|u u{>~n޽ƖMGlm6T*65h<:t=k|!HBnj>4DjDžm-=(BIu;eY|_9lFWxk:lFi(62t"Rm$Ikb*pTqcB>-9qe&W*iج׈T%u]6G]vWbX+dYY*-,6B]ղ窑QU`y( f\cvՓ/sm$\gkAk2^zȵs^{3@S/2Y-WPUu KdGa_O_oO(&מ8ض//4N'Ð? lX*DIL @ʊ9lL. ?W a{w \3iWYnrl^tgg+_u?/x\>Jww@?:G#WFlқIju(r |_YͼM,UU6"Drx6cbEQsyrZqsXl&^H>qyyv-OsyMp+bn)|߃j5ONO@p8D48::ir9NZ8E4Ͱ\.Ʌ' m$7"[ۈIDUa,{2?!pC4iF\/nx5azp.//툫W40~GGmӣ)|ϗf''4r5>H ppM\E\7PT6s< }^I(UIӢ`0 \]]wB7 9zMеZu?=p^@> . 1<| mI_ )mEq fw]JY))&)p\{:L[}u[iN*z{۴8/1{ϑ&)s<0m.st%ApSs5Ƶ{8{t] T_2%a)@0x<8&Yl'̛Fuq2^ͯ//P_c Yekyiږ  !$"n0Y_.4u,qvvjv+;Mc=_7howګ* aȉ+OD0NϞEQ?2 EY@SAMR6bm@ZPA`:\iwL! K 8"_Kǔ9@B]W8v`@a} `H,ԸiFz ]% -s80\{FEs}O'bi|Ξs4LcA^ID~B9nmbZ#HvYW2> )-kɟUfEӤ8neʞ{$:=9EY0 u]a4AtcOö눫(]a;6s 1'D0kKݎl^j q\6^=\Op=s59sz18zMD8==k]a4>׎:ՕiFTt]pZ \%!)2Mm*#p0OwEҭm aX,HG$5 Z/맪3bӆun dwg:g4 ޾}N4M: u'IC$pk}:dG9mTIKv;|zz$I0N7%rl]m6Ա6-$In 01eug{}mF̕gd3'׹)ցnmw, W5)~l\p<;f5޾},0C⁸*VA@\k躎+}]d%G Ef{Yk|{}+Yv;h"zmqX,r&koA\Lr<;}F]tuAz&qm[W¶H61M]Ղh7?ȌAXBab!+yI]h˲̓Xx4ϳw`[l6ȋBm)458MS"6DD۶XH;NmHd45MKL Ny5N`{t'qV Mel*$V;N6^~#v=R9)E9(wj|<=EW9b&WdF\}JpZ6LCښWva@Qf\w{QxX֫cCW2"+z8.9͆58l ϿW=?O df2`N8D5`펾 MDG12Bs@zA sr|̹1h+w4MBqe[( ZT5eQ   ]pHɼb8& N".KRGSb]aEklv08;†!mAgԸ"y2=*A٠i(t*h˿DOf,0l;x"'\RM44M.ޡ0šw)TUcb D5@Jѓp]:J|)D#>-怫ru khC.ŕt5f3Ԭs} !s5c~T۟Y\!+ ׫^ȋr"h ۲1Hj\S2?෮x$I$N(> >ZSp= a~x4K駟`x%t2F42ID=(#l6#mˬba4spp~q[(ePyq|tmt{N.vP%Z3!j-]"3{GGGhVF:Ƕf]8)=4UsW=Ovכ {!li1Wj&f3*$^L("ruwkc6`<ˏ8??g^$^ż|?`3)d"XD29Dp- ]#c{v뚹0LP4, w.t6 ]U& 4ŧ~>צtB/MDXh֚e)TvmB^puU?.ɷ|scʃeYLfTTF<ߗemSsmSkdYۦPr `E~pP@xL4%$I^Qzwȕޘ-'%7l!B5>QrO\i]fXV\Uj33<]We)W7G r?#kr#Hr|<s{}4%$56+_c+opz]DQZY+{'(1j@V@JU ե 6RDȖK؎!kDFvR5]Jɬea . ? WWq i{`ʔWUDSh ' Ðm2-٤yXuU#RDRS 6@z/KӴ-۶gDӘ~7Ֆ yX2򤆤% `a;fk\]]vm/8=9*XWҢ}rKP1'Xz{hsZk]K1q%AW3ױ4L=zZ^\Sض\̕UӤZ zy+ PX^V#Uz]!WIeQR# "2cj'#$|=b#WUI是.`^ <$G$dw\Gnj kk1a1S#C9;8GDŝơ(eNOP^sB1" imurX5|7R@AH"M Do X=nP%Z6lZ\zs ZQUUO>`6!I vAPLj|7Ԑm6HywB3ᦳkKmpfGjvHpzv+TuMV?4 q\Ct5]]7iƊ\ 2д-s%aRwEUV,o 7qQUO6f#:G(Sx\]kƻ qUa\Z @UV\䫹dϵYoWdT#2s5 M0WR*ƷW?Wo߾%îÜ ?3h?q4Fw7GhA#=v]_p8(ɱ(  ʊbDjVcZJbGUUx )U= WFIDz.Q}!?@tE #,ۖ:EUiDUUEp]gϵm@뺘LƼ#3Wdb Ct!$&* dl|18?j׾ۋe/dqnYP\Y2ndž3힫F`ĵCTYS/~_- m)O/  ~ FS-f;WWf7W('''$\Yߣ:bH*oۨ_e.Jv| D( zBOLa墇3sFW|,A|,K\]]g.MӐ!MK*EmIշy$8IpHw ^pMpuu\g3r%4T/p"\lϕp"-E6+\'|g:d\ \!P\!I\; ^ sY&z+lUz۳%O mv_>2늹tap 1zu mۖfc/`'3|TѶ '*zd:]LC CSɲ HHPEA}ǑPc7 oHz04ܠ4et8;;B8ޱS%g[6X wu`&60Lm>E{>NNN`ٖ|.3fGGdeAGB2qɕuU0=ז:~I=cw`nC]U|ա]peOW!I)x4Rꢮ#3:,>JsNmg}\=jp} {-ChF6Z.׉OOOrwL\yl?~-cT%GRUY.Pn]|a:VƂYE7 qբKkb{A$diڣ-Y 'cw{sMzupUH.怫}s_g\-s~~\yq罬JPzU T#+_a֫ oÎM˔ }VՅO:AragDe9:0,K)Wr!:U&+$X-i7*4M.py%`:>h&<(3{ 4Molh MCj@!hjr],4姱H`1 fs=i` 4quy M cm!8P5gّbd(E\J7mIDy(YNVr%HzXO;ۭwk|jRTCiM\WyCq}r6he²lA\]6p,Gj*\3y}هϸ>uo\+%H\]+빙Lrx/@؍;  9|?}a4!F4 ☚>}סWUlep^l" Gψy( hjr)+j躎?ƙZ#PHחѶ-~|#,Gj)yyS '(k1E[ĻCIB\yri<ϙ+Gl=h$ךVe8Jn>aZ\}j}P @ASSD׶a\նఈh>|WFCJ//Uk1W)hp8o5) hx$*/'4A:{m9zDi9͗_|Rx:u+M(`8:YY-aH͘#()wl(;l RwX>4ݥ,q}a0 _|s%hqmZǨj\]_u=~z<ѶθK?#ئ+>n7mMӒ zq0ԃ6\dx&nx-faH\GrS4&"q}, +57ȟ!'7d;_/QfpmVp0dtn\bA0?J7熣*Yb8p]p#Mh:z9="kԫOp}\bYQPpeoz}0YN}Le?ys\Oޚ]mu+/`Gǀ?W_EQ]h+$on`(*qǵaslZZA]#MSy-0h8:PɂG͎xg9+d5еQ9{,=|)$S=H0Ժ,[ k\ Xn[FWg[Ud%1Ǚ싵ɔ2 >߷z7c{aRx0#4MFǤx[VNMKyl ,sIJqDFNiJ}r'''Ya:VzA ֩Ӏ٬i34v*`7# ;>//?ɎeٞL&(y5^MCD{x ~` 6ĕVn\h^O: ptM|̕vW_,K>Jnu]c4#6;(Q3TU'kxT=8.s2RQGk]qm^{Tk++K}k|T=l4\g8ɘ654rݬQ%'/O=WWrc4f"OzqrGb2V- ,}l)'Nۿ+ݠUO}(~6܁w4I`Z3NnUsݱY?+8+WWWu{RIF,B0 NNG.$l&<FИ4 &Upuu%hEENץ~ɄT8:m#smQs4Mp?upq]˶NW߽uSY<ˎ.i[Μ4l^ӯ,DFG=׺y 0ujkv׶FUzQ'\{=\q\,QV%Fh:v{4?*_|wI[jAYXװlKFu9GWwMQDzfvprz" Qܿ4MCF TTz~~00duVi.I縼> $Lsq]-,! Cضr1 QWta4PT$b$Joyc&$HRK؅G- i.AGܻ{8gvgqMasul˖8JMy*Ř K(a%u`Uϵx Yc8^mP'3*HSs4~P7J Lx̵0zsPto?p+n'0-S*l>i=lAY, C U\krV^9r2o[I_BotuNh'}XSvJ 4 Mq\ʋcȘ∺] s]dyFYP sJU_42cqLg3|R!b+y:CJ<1-cf]GYҞ MҔe%︗͚sR}-43n.~ӶnwȲ1W|CZtF:%Hu sX,f:C \zv^SU:,,IȓH"O]R E1dWXq䒓Pm_naLoyHdI 14UE3rӄiQs$쉓M\?C<& +Mt2B4c 4hiBKҞDg2k.UbF_=`\TG\'\m5ڠdfBNG^vW\51Dj:yzĦ!l)TbS{.*uuZ7"ˏVY'L?mӲaW9D$Keۦ`ܨrz.P]c1pHVp77OX n<єl%^,)MuiJ!Br m ,0)"Xo6r9YcH?, YK%˪Ij7hFwh4MXy˕@En랹>/)pѹA*z.1]!nCQX"~Uµv0$]=q5`&s K36ެdxkJJyך1!4b>XrUgaHMh 0;p˿$M PdJv^{wc{'\iD)rOX%C+ IF^ME.IƏ5_ :8?;G;<%-w0UNr8.,bJlLJpww+ljQIo7z(*~,lt~ u]憚eE\_c4;㒩b]UU'1l˒'4Mfj7sld`8:7M5; ex0 8xj3 9j3MpMXEMWkٱm"]/#L3GȋMuܣz}\wI*zm^qT{ B4I)GQ+78mscz70p~~ EV2QQж-0 #"Lt_hlR%4p& $FrE&v|kC!{#9%o2e!fC7P7tξG>w~ږ8Q-r\\u\Of@QW>ǛC:Uva:EGQ x Ӡ8w YF}Oӌ Şͦ(YJtXe~xxr8õbG\]D(i8qUe9s1L:'6ͦuK>y˿F89=AS7 ެ~4Qœz# #diJj-ßW] eUrOʺFj;H9d䕩(IzpB!lsw&S5C(4!J:$:驵@ |CrXo6< + A<{TUGY9{I1i9Lۋt:AM)E%->\]\ZX=GQ`x!SH0e|s9m[Cf`0Ǐ6̸y}}E1 py' FfzV%j: FדqUEFM#}0B :B4M #5T]G <0# uLw<+~!WBfx1Wf}״z k, >(D\#CZ,ҡz(9-+{4]w uCNӣzeEAV:+=,\kQW'%/ة;z#:k|\oQW5d_10DcPObw{'5uӠ~ a"zj#E)oMSYJG -5o1 aMGYFdh!ewւcjpb$*riE䳂pHb !uGrUEQ#HenzM3m11 ٓ>P@T|bNJ޻^4: Y?U0жk5f)v4)O+~ IDATr8Nd\GY̵/c+Uu2= s !Mp-^o\c zPV6a.V́+PdzUc4>5y m^rl.WiNBYr$vU5 C, x\M؇tz+ϧ8 ? ۑq]X} JmAȤ >AiQJUYA+K8|bnc :v{ / b6I/!770 glIOnBa5n`tE1g_Z({[+{qa2 >檢qUEco2gnp1WRG>jȂ^~G?8jȔ:>ZPٔg9 SksTu9Ò5?ԫB>ۧ&H&&|UEץP[Q ]p4B=Wr\^yv77ؽө(Da[4>Lz6ل8ڍRPX>\,mmt{]t9k,Klduw':YC)pr<ِ٨i2 Yw݂ج7(659 ?{?z6514ZV% !5nnCNv>GpS8CPk5M?v7#{ ؓܠ$#2 kY4^KO\Pyss*wp.޼=ڠG\gu2 Vch#zJ qnE%,Ҧ\S, |+ϘL&pZ#?rX@hqU'0ض\S꼝I>% qUQjТW]˘`\;L'X.?̥5#oݻ# s0Wq]2W)<3-~ `0W_FVKE\ Ȣ WM#iϚ4is\Iy^DFIא2m29W&|UaWWX+ʪip]<L6d%ـKCv2Ff ZôLo5~@<_T5Eآ(@95-@" ]2D4~DM4)0MSöV+ٌ؎%cv=y<49r'p8Bד01Sv44 94kY9FM1Ln|-BߧS-0B^WpE!gwPbs0tM>w\Uj=jcZUx ?0W别$i\O̵C\yOf@ <(ҔKُKsN0<;jJAƆ +p- mnN`@=0<]Wσ2Wkvlk:pCenKZJ#zh-ZUt]ؼ9=4^*O|6hñ@h/Ni7oN "MSɷj{wrs]X6 M8-G+ zGXNNNx%޿/WB=χBUu]( C؎z-`;QJfTU(؁v);Ole/~h~qP%']CW[AaaimmqwwOkkU]qU)Wf3\^~|Eج7G\%U?J'(V"}޾L&>~+o0 Xps~DU{RwG1Wuz,0 2Q?)NxJ0pQW^Rt+#&TUM+Q%0b|HZM-`>_A8"a|6 ʄFZc#tQūe\@.ƋE}qǥMOz0cX"IS\^^b4cِŵ:.t]:~~AuN Mt= ]5.KpH:TUEBgSH4}CSzh4{[ʚ|>'YiBQV[9X鬇hb}k =מq]k`b$M[v\`>g^ᒿՓ⬪²m:߁ad$1h<>CsM \V Z̴LSSVlڧil uUKoDW[ʲB5]GY`8bz:Wpv:0#ptG븾ei 6);C*(\_MPhymxV\5Dq.ܣG(K&wPbm2{d8NZ}qg895Z[m [FIM-+{ILQ݀pcȖQ:<Ì)Lm Ka$!d3J6+:\[Z} WW3\)^5 LRJEǨrLFcG Q1WSnvG\93\#cJeH`5wiHԆ5#}߃ؘNX2]ptfr\' W=ʮXE\_0W"Ad"m;G\DW7ׯip˪zjю<.i,q[]7<2-ҫ755i 7nq{C]Zǁl|*}(sYSz+U ۲Ii/Ӷm>d۲P(@Դ;;%0 :.V޿KE'dS]SL'ň+ P{) :wwlWהh+TL3DF[\#`ϵzPj*+KGL푁 qxaspH 0W-7s`a|"=}ξ{bG<=l[Uy5E$! {Ry:G\5HDE|1ףze Z8ή=2wf2 }*2V^H5"Apzs-4Zȅi3g9s=DQnQiMU?_HWG7h{+"irqDw]K:Lʬra-"D):>t^mE x;>&eY@4KA`HP6(msl6C’HQΡ$pM<F_R&QJDs0+i,&"O & ia$22W WOӁ̕\|#4Aذj^l>uCI Iy== :e״qǪA#CDa$gZ! CNCZ]KQrOE;iL&0M',s= <à?`,tʢv;h4()suyl)Ú@IF OMUIףY1-∮2e<">dG\/pWvmVG\XxqUuM-WVh wr y|mKK$(ʒ&Reu=jj~5㐅Zxqő_b5}h*9EkGe@\AזۘBrw{^WwkQH岬pzv&]ի|k `\{9YJdnvlQ,CM7l筢1عw]WNX!>uyN` r,")Wx ieQTv˹q@~a4yteZ,:y<6"SUԋ 8Ή\w̕?l}QcugԳW E#!zં6C-ʲ:j:\]uE~c<s]lw;26q\Y%I: + MtdU~5uU0tuqR.]=ZQ:&A!?x^$"/tM^ز-:CQWuPo '/_,p}TrXO:.AVeQ{|O@ {~<kz\ hQ?JA L/z)/aH.0Sw4g]4$J3e؋nR`zeQsᎪ nTh `8a$&YHUS$-.\H&{;nVSUU<:5p-뀹ja ז=M$q|uN\W+V̵'TU%[dYO[q"B/>Ry3\#6hmE QGԻ;J`Li>4AѵLX~4UzɛW47.."GR:j:5Rv+)hON@siBʴSaowErPU!ʒr[^=Aٌlwj^aq?:y4͚ UY |TUa뫖ev򋧩xY"]onqwK&!E'J6-떹0xRNb1a'È{@ BEԪ*8BtPF{F|? MkEiW UYb^#|zJ4m-U{?%lcd!T*.,UJF"SKYIyzr0  W \T5}\#='I IDATjo߿ڲ@-hJ1-7bB`l((blKc%`Ɋ.5ciѼToF!t)mR48t€o,ml[`2(r|3.&~1d?N/_(^'''2t:ׯ_cߣijO:$rDeꍦj,|I/M4 EH 8\‚¶,e-nO?u\gxbW:pQ9>|@\.Ʀ/_vCY2ٌB7uo ?` p([PU4(c.ѩdu]qu`[64Z~ryz}4usĕV|ޚc'\qĵ*;^4In>z+)W<ʢBb.z=LUkDfɵfxk̕N<ĕUON///?!z9EQX.X T:ClphY&ҋk VNONqzv* U:q( 0͠tެr)2(nΫE^Hx83:==ej)c`ЗqJ#B+n[V=b6WEQ" ɘS8"v;yt<~=vtzClqc8".zuuI_3 M; p3\Ua3\'\ky5aĕAJJB 7)Vs>0z&w[((H{>D2ښBLO\icn= pCf"i+nj=US>:|vG9 ^OqfCR\Mв8Z$tѴL&'2AQ\)Uzr?G''O^o7?< l$] IJA0,\\|r,M lMlvPPBZ 4 mj [''O?̵J>Ġߗ##1N}9Gϱ,! .\ϑ " c4a^KGRh< Cxo}\Ð\=\|rׂ_JC-& sM(͟\yWnIaј_O\EaPi,J\YS0\kQLR:džuCUVX~^zsD|̈~'$WE똦 m Cאe)qeȓW8\E̵ בwז'\mym!."6m?o߬.%uz=jh3/-&-(B0pfC+Z-eFt[ Ĉyagzŋ:(4t:rWu)u{ݞ\!,bIλIwںxM :mH4Ki&Ӊ3#%:>:`;Ͱ\e 472(hs0sҞyley랎(d:B:b!׈+>\YcBqKЍת# 9xATM&gVq &s%V\!0 yFj<^8!^ *sU>`&TU ) Kn1&{ĕs*βG="|ĕ\ 1WRU'\Cj94mC~$Fۑ$=]?b"/0ecYײayG|{R˧0]\IgdR(ryawW's-Vr#Rm\d{OҁJ ӢoQ2`RU$iay!#\sUUZpӕzF08j8" 8Fc`@ZĂG!-*i˒8b\]_AQ %UIBH9|TͶjuH((n۴0lJ,!Fq#\)+5m9:8*^q0W^rĵ+:x}}}6NkU(o_RzeƉ!e) .( ;\R]Ff|cv;]l7|wUQme|lR꼿;!%17NNN'1}H1[ W]aUc7Ţ㑌RUfZZyUS뱨U$IJ.I,ͤ1W_~/7U?~FDш,W~I!ڔ\ =M s(JrI&rz?mh 4z sArdQ+l\.Bl,^hQ\P&I\+ojt_:<򠰘kkF:/O>f''AѦ6txo^5aVZ*LoҌa;Z]3 w (Mٶ-t66 oĸnjGct$YMa"6C yOtt4("C45,E(*#am~8b:N 4$u5lH L-\}SPV%sUk>^ж v{ĕ񘥴BTSP9NN ./]4MCCSD$R%סL@1F5A#4$8zHq,.-4cQc\.C:٢CZSz0=>J4<qUk\i҄0թ [BCv?M kC9$cYtϭÙnnvR%ͺy2ɥn c6%=]\\\Ȭ{!)`6.d"iNݎBF_~fm1_diYlwwsjd'3-StmCM-]7)!#i 6 azr=ZTU o+q&Mdٕy2U537#"#3++pIn4)?^pe(PUYY1y<޽cS=ޢm[w;dc%-|LgSC_l:^,Zjv}} _r7۲Тm45s%o65CGw<0E^UDkPhWwEA\+꩔%6x+N)n)a6xap3Wוl>Jvs;s\k"O I6xRgtϯ`Y$"۶TNߣ5tV*liYk~G3MʗP4 Tun4͠zQp]IB}~e+btyy)ump80#-Ia@??û}{e$a2^j,q}uEwwY9Yh3 Z*q8X;RqwG,\W9\)v8J~CrBQ?ofG ./G, F^OxwqH1 XV6rW=4!rs`~O{=ܽcDyH&2jY!>1ᐳG\=u,~Hh(_^^RbWQ`o;\)h?5:E'*pw:W #ɰ=dSM2M4 p @Q0Iɦ%cY/ls=d| . F?"u>?ʱW_}n%q08RF\V%^xrI~& N1mǽZ)L6vGK`Y DƋ/a vK㸎adlJ ROrux=2`r2ה6xM\i[7O揹r6}23W Mg-G\cVKyjZu\E /^<ԫtzקA?:/^>G/^QWujBqςB#|E[Qf4BAegӚi^为EQt¼3߿Ca\,P`M죄 ipz )mHwwwȸ9>iq ^կ< \ u]<'W7o'1 aɪZ4MHAﳵt`;di&+g!E:=+KϟʲSMA8I TSD]tBg=af DZ\e4,ĸICK&b|LIXc:b8v//jfRu_hZ/o~rݱLT%M$v/_͛*g4 yǿ"gꪪnFX 쇼yE,==E?Pا0Rɵnjd9ɐ{_U%-:q5'"W w\Gĕ'c8a;Pku:"c*ڲ[]aZ&..Fĕzg쐼mas)CAp%bcєOArte{=4mV+=(ğA\Op1W ' rק>W'*u6n7oi*1tM&)> & S<5Vh^F4~Ċ#aH'ӉW>{ a` |NDE.%>nGt6.]WPWEQRd7Ȥ:LӒib~.{\G;s\_rO ( ȆWBo!N8FG%qSu_l}0@`ˢYP[%x0L@UV'O;ya\+5,bzlĤL<# C֞ϻpR@$Ixò,fp(d:e(b|uP0Wr\Ǒo'a5.*$, \/V%a(gct$l&3ey"A(䚥X,hWsXb)8F|i'pcJ5U7ڧdB\O#t]:\ctOp5Mը^Y1WV?5pu-s͘k-W-brpmaasu>@b378:#}wwwPnZ44MKCS c# iRkw(. {͵&|AvO²- o(nGƧUUK/AgͮfXߣ%߱Ҋ\uHH ^$8(ˊY,ϡϠN޾y#&'өÕlˊ\ $G2YY*ĕ6 ӄOqcup}s EQȝ[,f3, mXIma@lC("<s@efM9k<u(۷od_@tUEi8׳ǤÁ)@ V+\K4Z ۶`#4qz=bSg:s=Yq>9`f8 M4So<RUc/sKBv #u(i:eaHSiklw4ZȆ:crX ^cb^SG5vf3"n4q,TzN, l»wmCx1zB&L&Ԕ aґ0*C4کqȅ>m?4TUCY %LÄaq1)H47+(0}Z۸njl)Fղ+yUMϾnl]r15XpHm;lqzFĕ>ԇA@ɼUQ檠ih P߶-4YΫ s%Ykכ G=hUWרSF#ѩ`0d1޽{v~?<&IDCH5h ( S\ )$e.+jn<66MKO̢44Ms)y>t:TUa֒::u|w;2g$2[H( 9`$MѰтh0p*\RY|.}:Y'<:LjA"ΌkIO&/XEdg+/-Y-O]MPï Q0ׄPmJ\y]3W_ ٬i&b]q s=pHk.#|T~@Xh.pϟ4Ў/PBr\8%Rb0뺼%lH.,ӄaF²,,KpȑIڦfOw|_|4]PXp<٬q<(%v@?  pHk l0Ҷ8GB)=ٽH<"H)|>= ew=JfM?^Bo4ǑE"ϡkRCEǥX,Cq}u~\04S6 q'iBr;QxdK>$+̕q%W%  '}{^%$&gU*Cq*v ҙI-⾩^WWkwҥ|</x+p<qzM'ÕF{Ɗ&$]Xl4O7 ]t:E{س!!`P4M`Z4rLZ`at9pؓa:qwh٢Z䝡mz.ʒ{p"U_x<&/|[d rB&tnj̮f8NX.Hwie $⿫0 Ҏ3a(ccS!_<DZzz2LS EtĵFUU2r7ߙJqMWSx=Z< <)zp5VƗg%%"rDysf]'0ɩf0y C ʊ/@6nplGfi*$WΦ@!>~ ڦ4p F\>k\KJk\c-XVOpqMJ^s>'[y^Bd9$~eyOh||TTf)N%ʪBϣ01e)4Afp=~g<ҟ. Cip: k~{  /iW, fW(6Umq*)a8t:EUfYҟ, ,giYr$,C4X,ܴt8Y MC:uڷ~KMaPUGpఒ\M@j4a=hՙ|4ME):sUHx=+ټ*ZbZ#os\Ws$t2ax-ʢr+_+g1,KRTE/+' )4q=)Ʒoe0Lth!\+tr\n^p:ʪ Ageiڶ2$ )zu;Zvꕖ򼀢priV+_o>}9}GƓxʊ,\o> W& (G:iNBuxO/rIκ  8d\p7p0~;\v$Ȳ_KX ߧ#d2aqc<#I|׸'wnEb8m5#ţUndɎB).Upeq"&# Z͋\_ĵ,t Zv-l4RpI,q{{ׯ_IUdҚ42GUiP7 ^p=WjW%s#oYf^~ UUraG64UF:D.//qc<$i{=r'ĒktW2ע>s뚹o_W4i-(6LBt| 7,Nhn,#ڊCLSS\^9PR0˙k^NF]^;\MD迁\\MIj#Qv^NZ^߽{<ڢllxaH$BeذzR8FUߖYqxp:Er_ M0MR Pȓ I8"]GQ\C(`]ncD1l]38FQ1b\^]$8.B% _~%v,:w:sc\zq UѼuZv#_yz\uR|r ^Op=M׸õ'CKNUyG\ɇ$8Jr d{Gomh=\.//z:=)Tuʋ2I,I5R%Ǘ|Ј7H`۲#𿫪 W$ -oN' g,ːXz=O׾λ_wׁmw%ŪFhX.z UU\.Co'f qP -"#n8id Rki)ƁXEXhh.] |x=OFWU)VN=Ŕt<ũ%<ĵ\u #==j/W NUUc;, l6]T #v+w/oQ~2~;~|#]iG;)<\GF릁i>`"6BEGLppID#6Vb>.k4Oͪv+BeUP˚g%wFQP="Yk>΁_(K*-w;؎,MeHA@;B!>?#3Wy=9a?vi GO(~&v8͡J׺\|_$뚆AQz(+u%,e[gRyJ!BN\3xs-0ukla'e؈\I tJ#rװõj3ײgŸ,KZ^GW!}rd2 Z8+#}@@_~oiZ؃|+4/o_@%dUQD%k ękFK:?k(*ا6>TEa*m:x38d,vIEQ <{ )K[aEeŋ]p 9/qՙݭuٛ'snĿx%hէ@ay`s޹*74EghpCeGW$G6 Uu*ɺj<} N4-{i}m_arIke@GDUU䦠⊝xMa4#+ύ IoMkymw_|t·~+U=!aW^a\I磬6䕨kҢ)BQdM9?цM{xYybX6Oõ(4v x0,4I+}4KzH҄tG\y9JnP,)~pooW\ 1H\ض\S4R+ %q+rRzzbm똸sv'RږB0&°/a4Bt@2=0S>ۿF1P.b? |$iJaܨ)睇sd4kߣc%i # _wϣ~" &,iY8N1IXWUEŔɼ4UET:7ir6g*)LIBzꚬy[a\.i):qldi&U]c4ƤDdOrUck*UP65Wen(AR4ƤuUMi Y\mNĕĮ84ȳi=L-o~C7=ҷa$!o iuY\+iz>Nux!W#3l6G\Kxs}\]j^3ftکWpSUjRI=ɬ҇m`: Qti~;KW\Axqj{wG*U#qz@/#%gi^)IJEVz, 8#$WǗ<;O<\þ*?E=*]mIsNm ?X.OqwOdU=2mۆn8ԙe'i4 /YTUo"Ial:}н>""}LSlzo߾E6Hvl2m 2'<{H+I`SV;ht/ݢik,WKnP%~EB40*n{Ob)}5^P5Mn=jڰ:G[{}+4&lUU޾{%G=ʦ%~ >woѠA' Ц-LD|\b q}iMXXu<p8 k3+ub)5$g-3W NÕe"g#-a20o߾z BLti}45EpeͶS4@;l^?տfq\Wa^St{@{Jd z=94 ib0ݎ<- aBUWV -`F-`[6S9n& v2-Bmr%JLs=>y=N{'"ESm"m]cXÉE]m |@jQ{$cgYJcł<%-DfHoNhiPd9;l681ǣ\pICR{O1 IDATZR oISt`e0P4 (%S?汑mu /_zZEz(:"M38.]__cKM88`q*/v$)ľzÁ薉^CW" W6+9r ?eJ qm^>[S2Q#E*tE}X:q]i&3juՀ3?s$e-`4^O~CUaYT w|8@aMEY"}Gx=/KR7MyDCF+(BYBg#g 5b~/=}7D%$.ek"hۦÁ;VUW(⬎(ϟR' hߣ*;\Or#(q-<@r9seJ40rrJi:\^'OpPT~Z2^%Wcs^ۇEZItu$s\m?3l脻;= m~X2t:LX6 n@a^QCcaDОqիWlZ`<KcEJ!+n֠Ham#R19~r*6`S yL$I]׼OJi0\,%G˔!m`;6wD:W:nvK\WxU<7蚆-.^}͆M]t!UUųgBwrNbeǤm[X.rb  w(*< J_n=4MM\炫,;\9pq:\`\mIz֛55FEYb8D$uBS72GU(ٳNҮPڶ4MkQrb+bGym \__OO׫/)ONݟ7߿>xĜFn߱'wcQCEt)z̓SGtvEQߧ|"TNS4;IE(fbђHp"?̡A 5lw[^#aJy\w0MIc"32k9mї&观QF3|\m:yQz-r@Qaš'p4 _-eh,e)byg" * 05 3(*rW%-4uvl:*lO3#]b6zld2yXU E1d0Vyd:2Wէ+F?h?hwߧd5RASY0%8ᄪyw|eN724F(PTM(1fWW(](ʂ-kKRE&ϐցI˰ E|I"NlcYn3BxY!J>L,kм Wd٫ptb8s-rs8qף]Sk1$H:Bnni}uj$>s3WE<%'kWN-V҈I q' Tc-( :׺Õⱈ^FEf^bcdrʐbƥn=3W0W 혫0HvNIt9+M4JN((bQ[޶uU\8>Ve׻;DW?zw am"B]ºF+f0nf(ÑH)԰/K8n,qb薏y!P% 6 bMm0˲y.Bj(mѹ7UExom~|%+Ȓ8(4C[GTe USso߽G~q߰bxף}-ʫ(r֥BueWUA^P3) Aִ͚װϞ-,^f)[*gj*%>ɕ\M :FdD\S-\S6eCP4~S*W=됹zHW Aʩ™';"az`"=(Eny<M憹szzMb'l>=r9蘤 "Ma] Y0=PG, vFH7-fnȽ">$ ' $e喪X RkFYшDCJ^W3 $K´,\\ nd總ŗ_|I[cq 0&ScirH;drh4\d~aSMFkg 56̵\u(x,5LgUGd9H:CC:9  )Z ]d페x?:Bf6gx²m =*2lx+_Uc`G+Yr<Q%3ԕ|ډPnH6J$%Φ <6] ⻠:ض-I8uMh'4گapQtD0NNyX. /[BD&M^k,ZLUHeLrAr- :$`R^O\\}_ʥ ]N=pmk\-q\_!"Op͡s-\z͸^-Mj2W242y/AӸ^ީ^eiMrnҍx<0WP7 j&I"\!s 3'>DQ73Tx'Lt]G'(QG'di/^{,p8~ZjιB˯gqӉF}-Z.:)l&C#UE>f3-95t'~K,WKu$N0Me$ȻfZ+:ENxrnn8z8t}!L@E>xT \] [9+ǧuC۶`ri:'h[6=͠@o܇\s,UդU$;\cL:7)%ׂ= r, w{9]Ćj;1~+kD C|I!$J ʐp:E\C-EG6!=+>~Tڃ4~%5$t:QgNG'O{d}32h[\md/M2i6a:;˲,5N'EA2W ㍒#LӔ&!+j*&?]o۲d(p8Yiwwɞu)|i`[4F2<<ϱ^QL Ŧ[o2(q*I|GVYhZ>'M31g >m Tmף]BIz GD ad!$&!I3Bhıܣ'64Af^ QU%f+ܽݎr2r5-e\G\kJ%㷥0 {>tCg \o\Whؘ5aFI\i<\Eu0^SE,8!mjHYb8xTu'ԫթ׌rJ1J~,ˤ@NHOo6Mww0T eCM2IK1EPږ^k{l; unSY%hcD"tQUUW+t,͆骂>g(2H4 !5T%{UӰ\,h[+`;69lT{P, cˤ%O CTUww<3y*>r+A۴֜pvEӶ,Bc Mנ(@^ȲT F\kA4z}C-l7[+wߣ^9\˵pu,DJ$t>+؏:z?ÕrmT̵[E^Շz-DE^zݮσz2p4NT *Gp]a\iZ)yʟAeCђH,3RiZV#sxxa,<I"sݤ.<9Ji[jH޴ZX-ZTmtT,YQTrʒ9)] v0M>{Mpf"2q8,Jβ#^B""]ץDl!~Pm,;!;窪V8\݇\kM@Ca%t#ZOtͶÕԀgC\yFJo>b~?ptbgA98s5#tQxOS=?z+=x\A]7rj>QW+ma a:g]⊆O L($-s5L>kQx@ w`FdW츸 8+OsLrL ;a8RsK|{B.( =Q SDǹAے=S8Uu.Pxd۴5ߣ*k2Y*<]ץajysl6Ru}'F|ruު([2-~l[h+5_V- |K%^iVuDmӠUU0Wfeokz+=Ġ(?U? euג(ti>Jl3\kJ6;OzUy'~T/D\,Qr۶82 4MmHBSĵdu?k~P7tBT_Rr:i#IO;C7~( 8z檣bSD$gx솹*2: ^/Bjp0;J_e#Ibh4 Czڶmk.^Y7 RB,d/?=>|4MQ/h|p_"r-l gQ}KI"Sr4slMʻxӨ\q=׃^zu=gr(~\v}VUcp]<0n=54*|w}ݷd)لSJJ+X U8)qX,2f߲|ǡB,ȫ#yFxy4-n{vvipw۲ex:`0@8;;%vQp4I(ObiQ ۱(NUE& k\QqDC LE+zeƋIgG]@ggw8AW2\)q\l6 5 SSbɝ?,Q*8LJXO(%\n緈X&$I0N&!KSX\,*R=0*ϲ M"x2M`Z#RY&K >ZVys\W=WMqcYNS]6cKk,~RT\'$צ&] EPSx#-"q8H32f3>+$ɛM]C7 zܦ GOF |议ax-7TvۆtCG.R^"ڢsU#K~zȲP~uM7( (.NZ&Bq̛4A8Q=6yF iP9ja+fY&4M۶/MPBCMȹsV\;mJ(Ps\UWdM&~#"ʬw95 -y4t56WOs6~Q"4VWmL4$!_=C+ U$tBkŹ1ά+E\Wa - {hj262!\'\k h?'\50׮ǕBD5UUhCÕM4F?!"rUg2!`_|w'2Z蘹Qz\ aG̵i{JJMWHPU&(xwD~PAeYbhtP99eaqEkA]Kl65no|/_A GU UUxekuUQQPp :&yYd<ޔXrsu]J X1Ͷy|uwOoOM; 4 :2|wj:sz\Cz5 vQ̕uE86fonp;Go\g\uDuU=6 N+>׌nk򄫅aW0;D3Tur L|ռBpFCX&eB5 ٣lv4G8ݒoAEj+&?[Irm͎*b'[Wyd4A4^l @Q为& ]GQhk|yzKn@Q\@O&xq~01O mӽCtgbbֵpV;hnC8ݖNi"er"qUQW.& W̵/\ \]_Ѳn &> U\kW{:Ƌ5qSͲm E5M!ĶlHr8v;5:kfB[ q[RR6f[@uOیǕb׫+WCb4-N:g{_~_}_PWIy UQޣv'UNG*i40NNehG4DlEn5sה:P0ABPE{pHΪm0 )lEoK>3N)Vב;抢 |t]t2yS/x:}|O6-L4kyN-re(97MEȳqöll6!=WlUMySl\gұ?µ=NAuS1שT=:l<񞸪Kx 9u*׏V mMWUUVu(h6b"#G7|kqAMiR@\ok&eV$yCڴ{-o$"lpHGEQP}u=Rcf3\4KEgNh0j-XEQ0 jB6TQ ayt@i=7vU (UQ+rfh4._\< g/Πktԣ;0u`y<\m;:% R.//qr|x_k2 ]p[.@f3^8\՗EQh]Zbcay+{-C =Wnx2hLkM?P„(&qE#7*UYb^ݮɘ maYE5^l8vlX.|?LRh,J%dmrҘ4e@Z=J+Q}+=r4}u\ײukJqk0OQx;9-fi^7rcUe\8:l;`A~9* Uóa4u|o J" gW!lچnd`!-NQnnqtt@A@e;upssÍ uU4OONPK& lzCW0F#qlFWW, euvl$ o)ko4((UuUMC4n15fuےiww}4IwI%k͒k^0 1צGA dce⪐?uk%ڶasM{\\ج0t'DI\{ Ӟ\vd!"`&hzϕWYI0W呑Ǿ^7899FQ5dqPH!:Nd2AKz}%eTc, G#./+1}#L$ "ʲ7c):ΧiS٣, 3MSGvδbB֛7H3T̡g.0a;6<']6y:P2洗ׯ_Wo)*m;ݚVݠFcɧcdntàk#cyQP4t-d:|.㮣8Ⱡ+Lzu"a Jwh V~գcr5^k+;᪦2WG_8Cvউ8zk&;* *?& "sYER(Rt Ѿ^.{l6~-[od3@QW= -߉K|wիWUk\u/Ou=i6CVf>~Yt` ݞ"Gp.E˙ʣQ$,NY-%ٰeXO!uCBUfEhDqE-o[,\_~%$lGueBSP7 +84 y"uv`;uX,p2&k[ҵWmCTX|Xai4V EW:"\};Z)bW?`6\779vlq!t0DvQšF]rq5 S:̦SifZEβUIòH@dsq.K ?9H%!K\JN{dM\\AT!p0WJˉыd3Lp#Niqex6J3S `JK_RSs8 ۦ^bR h-[9Ta2Bq+zs7ߠyzqJ ^z~p>>?Oa`0^E1;5%8Ah8 T-7fD8X2eY\vѓ}xlDboԓdxG1w!Πi8ru|V%noo1n9|B9=d6뵴J EQJ"ciݴ-Ms+ir/r@bw!N8'+ ۄ; 0E;X \mfرN$A@N=)43WeB>>>ƛÕ4\;bX2WG_*PŦRLx/KReɣpL <1^m<UHxkϩ(^yCJ+x+Vu>ӝ}/h{٠Br ?X.ЙځOM^@_aocLbȒ fÐ() pʡ . 17Ҍ{o{s`[h\h;%noIP|)+or!ZVѪC;,UPlZ "5 J!\Py!26㴠^\(,(b}G<5b43-ZtYCqE*鎷 28Tn\m,뵴89%GL뒽 )ȅVU a<~2>B8eNd/ȋ<.b醔oʞqd7%5W-z iAH+ДIMS+ ^mB nl[}=^۶W.'o `s2yZA+|v #_C?SyG4ؕ%/ϡ%縝ϡrp;ϩygrȤePI@]+MUϳ,!(8::8??۷oYj xhRx]SEW+0T5-a2`8x>{E7q,+4mi(.nR*#v-\ǑA"A)ӀehE[6zly,cn6J纰ljCP*sǀ <ߓ[spXj ~౭U#O/M²L1:( A=AnEsT=b"eIM$K +#Ӕ?yV D0 G#i1MG`dWh kQ_U%sU-X-WjśO/ BR6qmV"usq%uqwA""yu =z1WT\@ MDNnpt:cspk&7ZYit[D!|cezu A(;R*cڵ'xxG#>qw] Bq$GtHAD\^Ir:=\ 22i.ntx58'#ӒZ]r4F|IPTC7QZ>R5M>l!FRgޓmCĵi+(p@\]D? W:O89Lk\5D|̕b핸B$vHaF\_jeA7t8BH|r8==q-:J -k2-u^}**<ϑp9ᔬ*}OVb2FOrB1{=8l;)5OOOpvv+6tu6cm=5[ `&NNOMƸI fh:4!8 R" Vk<]u{d~ص4]姧F}5eT"kc1zɯIj6m!VȇdSvͯh{~_ cj}`0 3Q6`0{>ʪ(E;h"ϱn2HT38WP5WZ.eYr_}^1W W}lU]~$ s k+dTl]AMexj,4mnկp:.%~-\H*sm+.hiD86>|q\9RN"jKjAn@{&js IDAT-bicc,_{I,iFĽ,Il}f o~z34OW?% F5TEr }* 6-~2awr@C\[^s=Il24|& F 7UM*+:=j~K8X{1RM%49Ebyaf_i=mJ4Ǽ]DqٮC,ˠj*ΐ&d-QaPTi;E`gi#\kaPeb\={Ɯ%scaH+K> qUpkU?61Lzru\U ggHT.m69ֳmȅg~8@7 , X]c˲FO6t5x%9IcN+4Iฎ̃sibJ JeY z&E2ɦJGc?<qcGm7PTݎRere}Jے?ε0eòj b㓻=W>W檐m)~ܶmV+\7/J2cxqeXT\O^U<]=W>%J(\C͂{lX 8[ .?\Jr5RPk4L&w7s|wwwtm([^ר˭? eۓ^_Q  ]dLz ˲d'Z:fsHl6l7xxxwńeYa^CH&$a u<j0 qq\zuj3L.ޫ%hɕeK1cyj# ݵ?һs9.,KWn+#ƒUD]7p] B FDre׬8N؊UU{\S^ XKM{Du0AސǹP(FOߓ_~!ꪂydRQ@w 0;8˗/Ya4IKuE/^W+DRr)]ۢC+Pwu^x 8IXU`T:ttvAU^ Bv5La8M$!(XW|'V32U6 DY=*dp\]!W$s) q=:zFp{\i5MSKZ+zP# Yu˲_pFyF2g\VNLz4& aHZ|S__ zC5(͘+oFO/^!zP r)P\^SY u?@:(F( mHLDlT(Q몦xiےRU{}}|Uė($\5tU]Tw伖~xSKn9}r|(W_wZT:>u.*K=q!Ec[V>\AӶჴ4 F&bZI*afڮ`0@ݮU{ m+$Wu2Wwk)Uyg7qe%Yl=媣=׺BU=ǵh"bs>\A4sثzEUomNim%u҉qQ~p+7r,K nUՏ\ +k(Ѷ899FwR)IJϞ$~^G#7:}7tC*ϣ3lBQPve2QBl"aҌEa{  Kg>g/݄Ðܹ}eQݻwhN͊46=y.GG8<8fx5-$)%hP54nɤ#AUW2_`=sX0Wc=õGg.f) ׈N8q-+p8dF+s%w~;[i0՚&` eYpXc&l=n7x< LlƋgxxXܷiXAGz :tH&6œ)l˒3~q8K37kh+"D;B]޶XiMKm%CMچ~Tvl4t,С)Gmp||ab2@˶s]9UxI`:`Zw?O&cU~s%f.S8F۴RB\2S5{µqp8|u(ǵcY}|ϕB-s2hZWqΧ#u C䬼L>8DK$Itj~A*D2+;)|]F!c84Yih.ږfYz 0>jʀZҶ,xqDL~4^XU?%vkH7;ח0L(%YU+ lvp\;99ɉA${>6 (B8 9ZD֛mۨ FPeYLrzyD(i\ZM(N)z.fWPJ:cUU\@1_?>ߺ_JEpyo[ma;|z2ő DlU4 G# ({M-a<ڱh#LUS"B\)άs\9ݧuwHa6R˺}  HUE-y^ZڎNm*HS^E*'UzIgi`<熔x`yʋ1YQtHoE(<+2s" aʝen3TUC۵]dk) pHҴǵ}]יkȞkw;tmI]Uu(JOsϥi*tݐN1%ta2j<ĕ57@,TUɱm.b˜;5jWV7>KdeY~")D$!垫:*ztzz&Ć/ݭy# sz\GH(YT\ ޾} (kJPlUu-U]\ǡwq dCٰS^(f68<8$A>vASU#vʵdtLߵ- p8d9h[tRQHn+:㺡|rQ!IӢ4JUWlc0.c6+Y ׽nUSr/}>9ouE' וC$q,{sUp86h\wiM9&)YHx5`49t*h؅Hy_c#bQ#4zo2J!q͟kQ>*|W6F#{rH+71 }5meZ8ө)<{իCz{WՐ]q]g{/_>ȸ)28ԕcdMg$x2F$\ѷm`0 &##68g!RdyUQQV<bt= o q`LNhc$i"mUF>eQPܢ7C WgLK潫t&cTUeheYtv'\[h9~qdߞ\龯*5 Q뚹UAQR-)6TbZq +1Yɘ-e _}sj@G^U`1ף#S=G7)M^̕^\=WA@/]E}枫gȲ\H Uߞ+z\ ׄ!IRDѮ~5SZ,^8ٮK0Z9x&k&#eUj%* z,,ly*-G/IEf8947r墅iEq,9oȚLUUF#ʫȦ` nooQp(9 ʭmX,^G=cO\W= s-Zq\kWk0ײǵf#>W/`1sU&8HewYXj; Ah4d2גCUW2ZòH7w(\& E)αmoh$rQ?^0!"^^$[:e??(a!(+b )Ɓs@'K1s=W~#n6&/iZ2]h j;rR$꺴E u4 IDATzr{0sU{\ r>2:HuE' gUwoοixC\Yt¶(rKRDZۖE+1fБD7xwA"lR#ibQnjt 4x55g^PrPv0-؛Q9 TeQ`6#_VyA02Lo8IdNdJuӐo~Uqt|8̣c W*(g?qb8>f[c:m? x5MpvB㙦˲1߰$אy1ni`0k\=W _:m]W8:::|̕b~N̕]׃u{,k*CTCm-6prr"- ׯ_a^1T&]uB\(l[Rn_r5y?# ƀo??1G,@7tiC ȍv@5yMe(!-Bu ve~.?sMvY L#fM0p4DYǸ vdl :JsT%uǓ8fo:˙5LTMSc4*K| w2K4<<22-.kjVກRQj,a!yD~ח 7d%fC30`81..c𱒹.& FCt^dPԸ K+DZleyUUUX!ԲyD%R2doY@5MvEgT>Rg~appI\77p٬k_k^]OQjt=JE8l6)TM0/__?z?_뿖Aqdf!cј~Y1<~&]")Dm[蚎GMt2A^Hbc7<2;`0@YX\@m| oNQ_%nnn09U P<<ܣ*¶,hkّ14K\VtÅx0\G51WR=UC&K0L98q5P 6뵜͓BE8. `JIEs6I]>0e(3EQC놻a{B\ 'oϵ ikIka<15s-+i&{:%1'++Cq@ļF-f)t` %~6qÀ3\'\W JyiW`EQpr|M]իW՚PTET)}, ө4GlTYonDw 0Qe'WeG"ϵVi2gMo#߇aw?CY}?O^v+,z˿s8.竪«WpOBE1lt2A{=၏5lt6fN女A0G*`Zvl+H\ ?u\IZ7\$S\Fnj@UL0 (˂B˿8r5Xrmj*p||v0N s9p]G?۶10,:$J*$*eYH=Yf7^Mfu깘o1#\]}`OVrL:q-pb/XFL2=WB3 x_]}ӯ_C7la""di }ӔEY~iȳ޹Hrd_|Wu&4$h f#wi@/^m fEʹ,!IOʼ'}@u]ugga3{nF~%~GJW~5 =^1׿8 O\U%?y+ 4-'MCiO|fǧG$qm0aR)_Y0t4" #\^\l7^ rw0fpZ$PW5krBR ''xZ?۷BCn+o 5mӠOqQX?nAȦS U2ňOOHXxȳsa,P%WzBq2f\g!qe0Зs㰛,$=~ j/m5?5#c 񾽽EqB`ºjiɐ,ŧv#$A4L&U)% vHDWW^+fS<<<0# _̕:mۍ>>5q>:{]o7 `)s^҂JJ23`1KY.Q5g{ L)58Y(u&.yz3ʲݭJ6MCOO( B"E*M]«7kqzv74ZLKSMioqeQfеO #65k,LM.ϕ$s.ϩOלBsͦ>љq:y)p{{>wr q~~|%%8k[gNnnqDYh;|ɧ1Q gRfB5@qڴn|A8;;ez1f0d,˼ȸ ʲ@L9~_^`}?q=e3:jDL8p̵?J~O_%B|Wcf rg? =yq6[hG0z/z}QV޽oS7#fCC,<7sJ; y`yS~\絝M|QORg~~ZCq}56ۍ$k(QD5!+]]/p%fc𣣔J[1[L&̕ R.u-o6JX޼aseg>$~b_)s_sO:#561W_Q\y~񅟅{z ݬ+\Ǖ¯,׉`k}Ƶ~\3JiUUzmW)| wi'ƈE!...]g5Y616-&I)XDX.}vF6BI{~QdWSӑm>XpyyX['[Я3:\_߰B8n^__a \X}לRWÝ&nMh sZ1Whawv%x &W=-B.%$(~I;ͰX.XMJI3<(vƇEYz]CJf/ aI>;&_ Հ|6[a_\f%f@fڶe=`k*H}૸s5s]?+ϵkaO_b.fj=q''xX7( 2uCK,zk3?O~uk81+\I,}(h1WȣI_HӘ9z>U atVt'I?ZqU2W:םoKIc2%sy_FϸZs$[oR "z UYB%$>ZkTMݠ΁k5Dž0 ,J;Hǵll)i0=+c$ϣQX3X),B|zzミ'pӓ BE%ʢ qw o>ʲť %/H)@QՈW${@S6h#u<+gȲ-{hׂe˥W&g\OOm0Ry#,K/1.x (^|99ߣhGfu{oMS|=s5(G<ϡ=u0jPO g\ 55M}^2!NOO# Qb\==r,sn=~dpwC%%+p4(@L`E$AuAC]yjm =ħ~JJtKIn)ࢯ5#QDΫQ,#E'OO;rT績5xUbZrw;_plC[<溃1Whĵ%S̘Cx'kE|`'5ڶUҙkFVwBpG\78If1咧w8pd6Ά #WG8p}uwZp|!)@ws;dvơM}ez r&egaS\ooo?/3m}qe{Amp J%mɄb+,8!?E԰L9W9 U3vɄr\ 6$CH_i,AR`-7嬫+, ,0ͦBVEARPwմD2#4c>ƻ`Ǿ#i܄6J{-IK k,gq ](@Y |*$_b=HJ}{ꖸ%Dw\9s5Ƴҵ`2IX<W ~8ɮqõڻ^o4->;7sy#~Gk vףz{W\zq;mu{ E#3kU#ENAb4Jr˫KoE;$[RJXc>uvNf4% ޽{ˋNu$ɲ _.1=+;{0 i=P]L) $o咎RJ(I{w8u|7 X<o>Z<=>"cZW5>#WWϸ&k [S[c C4+OTJqyyŮ/޽]`~ݎt_}~ q |:ݣiZ1דekij,FE+ܻ1䋗$#u4 ?㜁]"Z(||;8f\/{\$=^_~أz2fw<츮xϸގi HWcs}B:0=8Gb_?蛤UfKơJA`\ymrUU)YڞpvvqNa!$E{[rO lt}+n+EX,=q3W)>nq4$E#\_J~_W?#8 FPr3t5, .Y>vK <)\6 /a@f!=Gh}j[. $mbde1]`~IP.{l}>n6YhW_y(f1#r8 |sܟ\G|DBW| N3fo3W}̕75k 9sc];2wwE+c?;e9n7)wF:pk,}~ P׍Zo6_njodᨗKgo>hmvk \?yQaBN.bzccs8:wܢ(kY7+Fu><)(jrLb$/r B{zꚮmyYq>ޫ8ׯm[hMiG+Rg9>EQD~ڌ9ҭ/iۖΙk\k9pu$x׆7 p 'vskZ0>7#^>WqG@7?rqmYa_4 kvUJ]5骞-CI]Q1n|1Gd9$y~IJҾ/o߾}R CYOOXG&ל}=Uvի+|Rb6"L! 65nnn0_1̡A(pvz}QАz7p놥U;_>)i~=\ Q'Ըz0<;.P>"\]fFxonn0/0Kך۴ggg ?< A܉$݁k{KەJ9=X,)xGk[7k DC<>=;9q2ٔ5yU5`H;vW’$|Qr#;?id5ARz>{G)jE-u+G\7 ; =qm^oeEQG$S7>>>ZB!5@Q!BLqa3UU #ɈO|4M&Ic'Z';lp gggG\_d ~ow(f^$γsh'2cM)tݢ}ǒi7,Q'IdYFc_~wfө=c(^|ڏzfLBUY*<>>@J;v'35u$I( 檘ַNSwOGێш1Wu8pMj/\+/X*Ծ^5K檼\;$Ʉ>arDOqV޶-ꪆd%bvτ+'Fi(mZߪh` LS)Rې%5מqM3˺|㢖F1(Ydar$'4@Um\fҤ֋@Ns5#0<lD>ku4BwqqY'W)?ZH?ȕu Z6y'z\$t?R63l(ҟZ-{9 +uk7Q,>ky'7e 5MȵcWsMxa CkG o.~W~1)puuۇwE*d$hm -ʪC QhU Z-Dlqm 荡Y(1ꦆP`;~Aa>(K8Fٶ@@8vTYF$ a:}CeGu95X^0by@qK#=%_?D+r=y9+OнlKȐqZtCvCסCTmU#J@2%Zo _Ƴ} uсkbP;g$\Sz (*1ΰ/khyI tA0WN͉9%V%dG\e!\vDL*Z k$ W"0z̕-:iDאX{D$`X>h=TJ-|)$,ff/ |641w^Y%o@Kzd Q4V (zN}D;J KZ#iD_70as= $Thq<"{nw`JnTCjX+f3 , 0Pb>#Bjs+yz(ȧEGWCO{Fq<$'ۚ-,g5]=  m]/o -ju1ymxk!{fNuQ A|\;*@6Mau)^{{V\gH!r@*(J!u=,:(EtU'a5D%Ukm}_pvExIyu@ݴ>-Pk{?dyn~aAb*=^IFCR-BM'ћH @?+PT5 Zzt`%5DH1%a@U7< l;H!0z#t菎YFR*Ek@Y5|| e@ PŠ]-($v=V@c{DamGC"r@D@6aa!=͎]xS#p@o7vdT)@24ϵ\;A GUh2f w"=2(1׆?+JV }䩟!C/AErtjZA{EQ  crh=q+wv.+)̭A+, l9WLu\bqňko`ah׫&EeYBz5<>>mסvCZO!ʊ\B84EAz.;J_R#Bt7ЁRIh77ghkwyHե) aiёYI vT)%A"GZ󐆜p܁4*+W Kvl)1IR}>Ni۞vtI0qmfÈ~OQQx|\Cv\iB5w{k(1M;:Ӊqk8X$[wg"Q!fSO_<#֟0b_0WRzXHZkIe89^k1M~pHJ(/>둍`{G[>ע@ĘNSEQAq5/nw^WVس`:C۵$1תAQTؔb̕ƕɄrki;%@!k]%+zQoI~t#ɼT NNNygu&5싚+\,Q Kg(Η69pM۶fPJ#˦>%# OL&)k %Uy~@ -rmDA!I&Bi/4Mӡm{ E 4I*2F~xi6@Wm~I2!"\,%  xz" ﺲjQ7Pvpz B!x#G& Jӑ_JɌqQ1ͱެHMIҦ&$s55 hY_<[ m&JJ f@G\ڮ[Q̚Jjt=ZJi*dNg̵6-DQpU 3fz:P5uH\tm !$TqQ1)$M !s̈fka*Zqj\qrnz^֫`OE4jU7n8$j+H8m1W>˲BQJI'E5 $͐Ԟ BJ6;+Y.1d/eɣU\X?LtADܒ(9qV?qH)L&bH MDTEѽ{1-6K4uԟMw\ wsMNNVL);(: Ui BW=J)UiHE}UW*vaA75sIkY&!wGGwWU\SjWS֫VڹiUM?Jqn>uUxE )E|%NO_ļ}bEš0Zg S&"Ba~nGӴX,C61-1K[IBj4uHee Fv{һ|(')1B@`!UжT2tթ@bnQg[թI_0Jُ_*T^) z#aYzA XFmB`OVXowl|dٜ4smj@h6 sdH)j@j5u7\h;ihj3m./7BQ^}'4J\b\Jg^'d SF6Mb<qj1ټk6y*w5W(^Ai86[XKPacw\g\е=)sŁ6KHEk-U" cUEEHSES}o\yh#BO/ c,,3{24W\+'~_?~~ϯ_?~~3| ΅TIENDB`criticalmass-1.0.0.orig/data/bitmaps/arial-small.data0000644000175000017500000000362507630537344022021 0ustar danieldaniel0 26 2 2 10 0 [ ] 3 2 4 2 6 24 [!] 2 2 12 2 15 8 ["] 0 1 29 2 21 25 [#] 1 0 52 2 20 29 [$] 2 1 74 2 32 26 [%] 2 2 108 2 25 25 [&] 2 2 135 2 6 8 ['] 2 1 143 2 10 32 [(] 1 1 155 2 11 32 [)] 1 1 168 2 14 12 [*] 2 6 184 2 20 16 [+] 2 22 206 2 6 10 [,] 2 16 214 2 11 4 [-] 3 22 227 2 6 4 [.] 0 1 235 2 11 25 [/] 2 2 2 36 19 24 [0] 3 2 23 36 13 24 [1] 1 2 38 36 19 24 [2] 1 2 59 36 19 24 [3] 1 2 80 36 20 24 [4] 2 2 102 36 19 24 [5] 2 2 123 36 19 24 [6] 2 2 144 36 19 24 [7] 1 2 165 36 19 24 [8] 1 2 186 36 19 24 [9] 4 8 207 36 6 18 [:] 3 8 215 36 6 24 [;] 2 4 223 36 20 20 [<] 2 8 2 62 20 11 [=] 2 4 24 62 20 20 [>] 2 2 46 62 20 24 [?] 1 2 68 62 37 31 [@] 0 2 107 62 28 24 [A] 3 2 137 62 24 24 [B] 2 2 163 62 24 24 [C] 3 2 189 62 24 24 [D] 3 2 215 62 21 24 [E] 3 2 2 95 19 24 [F] 2 2 23 95 26 24 [G] 3 2 51 95 23 24 [H] 3 2 76 95 6 24 [I] 1 2 84 95 18 24 [J] 3 2 104 95 25 24 [K] 3 2 131 95 20 24 [L] 3 2 153 95 28 24 [M] 3 2 183 95 23 24 [N] 2 2 208 95 27 24 [O] 3 2 2 121 22 24 [P] 2 2 26 121 28 27 [Q] 3 2 56 121 25 24 [R] 1 2 83 121 24 24 [S] 1 2 109 121 23 24 [T] 3 2 134 121 23 24 [U] 0 2 159 121 26 24 [V] 0 2 187 121 37 24 [W] 0 2 226 121 26 24 [X] 0 2 2 150 26 24 [Y] 0 2 30 150 23 24 [Z] 3 2 55 150 10 31 [[] 0 1 67 150 11 25 [\] 1 2 80 150 10 31 []] 2 2 92 150 18 13 [^] 0 30 112 150 23 3 [_] 1 2 137 150 9 4 [`] 1 8 148 150 19 18 [a] 3 2 169 150 20 24 [b] 2 8 191 150 19 18 [c] 2 2 212 150 21 24 [d] 1 8 2 183 20 18 [e] 0 2 24 183 14 24 [f] 1 8 40 183 21 25 [g] 3 2 63 183 19 24 [h] 3 2 84 183 6 24 [i] -2 2 92 183 10 31 [j] 3 2 104 183 19 24 [k] 3 2 125 183 6 24 [l] 2 8 133 183 30 18 [m] 3 8 165 183 19 18 [n] 2 8 186 183 21 18 [o] 3 8 209 183 20 25 [p] 2 8 231 183 20 25 [q] 3 8 2 216 13 18 [r] 1 8 17 216 20 18 [s] 1 1 39 216 11 25 [t] 3 8 52 216 19 18 [u] 0 8 73 216 21 18 [v] 0 8 96 216 30 18 [w] 0 8 128 216 21 18 [x] 0 8 151 216 21 25 [y] 0 8 174 216 19 18 [z] 1 2 195 216 14 31 [{] 3 1 211 216 5 32 [|] 1 2 218 216 14 31 [}] criticalmass-1.0.0.orig/data/bitmaps/arial-small.font0000644000175000017500000005560407630537344022062 0ustar danieldanielPNG  IHDR\rf IDATx]wE~On: J!4EBPD)R~*T " (E^Ej5iF!$$$xϒ9sٝ=d3;Mog P@ (u$E#괓\+W$Aۓe-=HC_$'{$ArNzt_?F\ϑ3HK>?#9 -dEI)Gqsc6c,Qޛ11:-AI>6<I{q;:9\`^}@K=Q9޳|/ Z\u0 a m>8t~_ `b 5?bWg#QFЄ|ʉY /n ;la(qK\ K`xme(8fQ]-2q% n.fi : f^vpWvV6I~A<|\5J} Ч]?3 WѪq}; 6ʌ:8Uhc9xr'8ڛףbh3 `wfЏw 9{K~(4}@?h[chUQXd`'wO xs`e{mP_Ug%ON2!+9~WNo֛{edɳxhwF9\9gr$軵*6Noz%%u±1AFF`_||m&!h"h?oy}\{FOyBlfb}#@s_+7/|T~rER 7JI1ʍDX~ >nꓙY;.vDf 0%Fx(sc Lj ɿz`0ɏoRKzL OMd‘V}O |luO0I*~HrWл{'zD[c zm>]__$5־L-qpGBn1mM=I^ѧGHV}%=+uzErz!9,M7Y: x}Er9$Vw?IMFܘا6o]o#1n".RL$U=֣;bi _*%J@Z{HIIN`yix;}ÌI ٜ2I;D90^1B2DHDž䫋O|< 8::LK'#vZ OPyu$$XeF1 ݲ嗆zrfp!F^o$?J,JcZ&&ܨLcM',u+p?"yHo:fFz^!$..n7ڻ^"9+s`7Oh B8+nVM |ʽ"lqyn?~hIrOJ$RO#m+>N59\(#|b> >ޓ0&~e} gl?w0[B#2f|*)E'@Ǘߤa@rhs^`z}a,pi_b ͑#i VJh``}ӎym$Ww1ݨx '0>$Ŝeqߏ9ϯ~A8v7_-N4+F;`6CB=ߚw: ꛆjS~d@?f@v_^L7?kQ߄4YkBPnzL ;!'CfA?BhLI- Ss׃XkXdI73gl慥6`|Q\BNQ:!H\|k%˷)҆UBrp"DžiLjJ.\~mW3[-3 [ G}!=}!k/8z?ېMB?HgΈ ^0$V7>( 43] DPHgн8P淘kI;-_iLD?<~{%Q l쟋!{}mvg.jm!X>3 Qc*ŪqHe7 P.fS%4"{!I$1cãh=6,::o'я!>$wwhGyIp sH)EvҔdyjӼcN>0aWy^qN/VZzNYvfD,,-}/ rƖ˰(kSg#H~PG+ 6e1v"rͪ Fꑤ9oD'1ހRFY,xFYpY(wEo0&Vx->&Qf-tnQiXُzWquߏDFu Cs1=e}pl%T4XܴwSnҵP- #iloӿ9C'QvBʭWonI^Mψ'b@YY5ɔMZJگ^LJM F3F?:0i,x jAޯx?<ҼgTzܚslY!+b8e$eO|,\OrOЈ¸58XZv1oRCyjH8&RQP*(cfߠ>&~0!V҈iEj?y`E`g.dy%&.E-+Cbb1˟`%=G$-qc0<0ޔxp+)ϳLrZƞO 8V/*1B#e3dב\Z<㑁1ZÞU٭cнըvFHi}'u׋F)ԇыi_. <ֶ]1Gی2cl] m1cr} 3(YΠ|(Y_zZN 0eCe g@nOmI ['@w{41?fwA"Li3@ոW)Q"Pnsc\O{TX4t|dp +> }[ ٮ~v0rk}ʇ||Qnu yl_8+ej_E󱱑7L5h &@I3ޖF^o= 9_&o+:ǡzs7':xi(s SڷܯA\0Xly {3(~~vdȌM)rwơbL\eY: NKC4wyA~[ \_9fG7Oޠ#hZ~G45}zԣFrAGi:iZ+S|r.Ycq= ɗ; 8*%) :4[IX }py?(17j`9u9Yf дN#y ϴtA*s EHr-CZDVlMR_4k9[EɎvgKow `EiB?e]s ᰗaU2X8в?d7QBņ?[r';G?U:4V 9/E!g&-:Vr v܄怶)d'ɓiB-+3^:N ;܎r3qn`m<îǹGRj LÕwHYiF͠yk|m}SkYcq=/Q˅tkE[onEbRh):%pAsr.`kpsn76ot0&LnM+7Y>R u"tV̡;H:כ)S ɕh느p5Cd= =~1y;uM4X 2Uޝ'ѣ#z¬,%D)DߐtAwrчµ 17;ѡ\!@ޒ`ˈ~Z_1Bz@?`"ÊC?{ PǤZO?sV \zZ@́OkI?i &; 6$+Xo$ 5_Z|-{H‘S2KPQ6t:otK`eCzzBQ?4z@M.#a8Pkt$ õ M8H'^4eF" )qv#d\_LEh| @~(ty/C/kya'yg~3pt:VgpQdZ6P#-6/^H:/X[c %s#%~ pw:Bרk@Wp #R=Coʻp{iGG;yF/`k upU9 #_(tPfTC1no !0ѳHц/t$ShP7- sh6a\(O9>f\ҡٓ?N5 @=-0Ռxcr 969ҡ94P;i#3JR_-GVA tbi͡H.O&t V"æNCsnPyPx^$YcԘ} Iߡ Gb Cy&z:fIi.l/2h4nK[3u(tx!X-/Uno7!eGCcR1 RRr;)퐬 Hldq4P;i4ׁC0Cs ;w!M!A_sis4.yD)!hzpCwe?mCM?diԾH?Sa|y:<+oHtV,&=(CvacO)C@;CET&Shp?:`OSndRnkTtae6M!90VVJ)m|(-z05s{f0vz6z.ں6@CXo; Wু$^HI}YZ%xіz8I^cag R&>\'{tw3vA-jIz)Fw4.%PnX@r@=<ܴ u`\UtSYGXcxym;`>FnzʸYzx6f/L&kҼ ge YYMjAZ JZTj)ZƣgiH m dq@3|k4 Z`>F)A4iwV:Q~ynG ;t' 6<(WnXƘ B!@)>hiBhϜ( | ǰVt:.h ]2Δ,cQ@"ʾ-oZƳ KS.wm1_j[4O lDGȨ'yV$s3!ë6TFNd1+HhGMMљ(%[ ڋ^^~@/ .[ (b#o*ݠ=@'z ]~8C-hpbv \ABtiκ"7pHN!AЏ!B_Fq2vȂ{w eڄQgKJɕ ~71+BN5]/#)S˿݌h0 м^fkP+dmxWv:"c,3Vt]ZP>'=pfY86o,$-6@:?@k?f ڦ؃i.Ԃ[,54$`m!'ӹԊ`\ m9p"o=DA3Ju%^cefZŒniU7)Wqj8Bu70ս+35$w`p#aȾsQZPN:&tr0G>3ʗc&[% y@kD-mԞ.OA9I9O:/r$?ӷc3D&%xi7/کU8a^LخМ%j~^\S:#} "86j6|9 QT?(ׇRO/Hn0J⍏GW `n 4)_Tp/v#03*(PHaIMro2ySޑwcbm! r!xyi0pzq*d Pl (P@ 4ue+LK(uo(qsȱ|G>Y{@wgO&6"ܰ"ibzI./.IsZ'e; V9)~NEE:VRz x}K6MDG&7;yh ywX踭@:;t@0zƪVFF7%$ΐ4wd=e!OBGȗttGC!Pg Ë _yӇs1rz^'N+ւMa ^pIx,7z 'zrZ0@DCO0t5UY_mXweEc_~mcY &d1SbM>.\Yx 6޾@qm =8ڠYڣxl =!wlD-`` (:Rok[:^n:b# (*ǧyH_E-r'QWZ) L~@%/ _ &~>3} 1^v}!yah6(A;3l d _@}:8/` c-5/Jljˍϡ]|Ǣ7lGmM4>¥]g\[ `K(J&\,ڠ‘Zval--cƵHb;|zOrҷiNVH ~Sh6:ȋ'\ҟ< ۪EvWHA LHY Q%:VDm &4X>@?m3bSwYuBHⓎP ˾+zA>[Gx.57@Pݦ؄7L2Bq՛L AcvU܏E_FJC28EҰ# Սm nk0cC0r!#?B'>" wՕdT /iy6cb)K t&?F5Ոuv:hFjJ敯3=bhSZdg&KHڒh5 K}()h#*"im`2کfOir!7q*BH=)H/ {40:eE,juǻ",=|.@LB9hX_Rh3!Cj7h$4~H`/!?N}Z{r"b868@{8(kG/pmmH!,;_k{%lԷLo$d˲dśP_B@ZQA΂,|Iоy2Ǜ B²z}dB^ƨ$[8>tRת0$Bk2B4o@0m2~[:c4h4.k\'B>Q8a/:>x9M-cPeh(::["tY:Y R˩; wA73 Y4 B ܌O!{vFYОKw%7 rUd4ttW)_S 5m!!]uMgF ^BeОﻐjz^/!*܀$1ǚ&>{6!ߊix.7m [ 1O EQC( (P@MWuƇi!hdJYaϜ <)ttTsk@EG#Nyash=:r֖uyQH}(44>_/u)kJR8&R4 mCv(yJ҆ƠG49Mð'r2=/j1Rirz@Rz RL;%Ir mK=ΈK1h''pFpGCI>\IIkWI~=-7-B s1i$,Fì(sOv@Z;](Q-Q@Kgg1^H&P 2#Hq:ڏ hӘ&,I.h+Ik2|#c&x Kŀ1&9Ѡ3d_}:!z ʨ@aƳ9;wSX飝I9: [=# Ƀ%eS&X aHo:Y :R'Yq@nb;T.-e&~@El'!8 W~p#lp gp.=(nɕHH@$:ʓs$Jr5m-IrwSу-!לRkSNƊF[ ya(>F܆ :$y[_ވz[=+Pz-xfDuҿm$j Yh=RQ_Fg@;z^B'HtԗZYarHb$ xq%@9qKD;iż@@]#X5r( onZ仁:D͍y4b 0 2}zXi9Yc#Lb\[פh-@lbD;gC.{Ş@~H_~ i6Zlme8`$i.x:{m4Lr:vT!uK2,2/,@}#`1-헐4"vy3e)%Zc~_E#~Q:8H]Emly[vP=(rZ 3Ae*lPG+rt} d# H5(CI>[vxzݪYBP?;ߝWGy\y4 r(oT:]ϸ^OډEO+u>r63\R  52zؚj]!Z'Iֳ .-pׅ|ulr dDL^PB;`8ǨhbA8jG=|> d Lb|<$8h?t]/$ f!(j8Aؚr}:@G3c*$r rڡL^17FGPfvFC1|\zBVd0mma2.쾰Zv&(Ar ^P[\ÑH߀/ t =z\} gKׂOk=E>S! Q"͎9TT銵eknҖ߀ a jkҽ86Lk؂MPFF q^fKŸ6 d+Axm585恵 ~M8&n ߡ0wz-=}v`- `q[g*jD- Зl* Ya~B;F^V4" xJ"&  в+7/fBIri,fںq :8Wh}`>X{ p#۱6|^@_~k?X#tk!]M$+4Xh5_<^t44`Z9K-B>8-w SMLA2lC Cd3q2& M`;l&,=<} z27}!am`/Z@-_ffu¼ilceOJQ tpF2k ||1&?-8_6LAga} e? кi/t^]bckU~ՓTGQ_ 6w1,6㧵HAtM)T`IA cRƽ؆!8FiٽO*N29iƤPPƂ䂔‚s <`v (Qǔ`g3PJ*/v$g$aaǗ$ϥ5p>7tfcsZb{Q6߃f0:Yx GT*n]j /n? AS== 子8 욮[WzvPސ4?K"qJوQHãT BO(8J@\&JÓFs]0ZrIT+rR+@9@(ERNp"=(< ,aB Wl <8ɧiW~s/)0L)Dʘjc[(36{X[i[^Tvrj'C[mp&$3:PgIUD}vH7N-ϰ2@H~I9>q1r^$Hn/S-cآnд}u:4';4L틽'pK^M@1 i)E>iH9Qdrrx I}~B^c$ Yã P=춗:dba:=,]SG;P H֑/J!ߕ ?hfghh#|c6Lѧ+My)Fc6D޵/0MSV .M ڏ'xޱCwQ1d*3f x:zR[w?Sm{hO~EΉ ! 06 |oqm/5\q+ o.֠zYJӿwIsaE~<֩ $ץnh,7^0R.0'4Ozu1M j +7|⢍eg]/OeF?gh8t-Yڠ>$p1 S|"6{4pLT^y2=~de3IDAT tnE3z:*>r K,7g7GΫ@2aޙA$V=@2G+| [}?'R]Ma Wd&GH0tʯjWөOkA3nN$1>P_,g} Zlš/{LW}?ZA|ؔ1v p?خ\;s^E^u+]/u;T&kˍԗf`w5nuulkScFFhʽ?z;::JQol:X";)g$mNwpb,Em䨑}{2rfs;#6Wh !:4-̡avg rj٫\n+C N|;]b@ݨ`o۠{I?/}l/y@:+AՋCg ǧTs!]@U 9 H`3M1hE0 Gi8:)haPp_@G#΍ u+Q"Z[- 15J h%x )Z^vH_@ۤC"M5<꫅sYB$_3fy9%*.ecZGb8,:tz FUྤt],))|8<)Baol)-":t&X/0tjM,Qc 5;AAV>Fq0rbaOhK}xs=hͷBGQyܴ9 6%6thjnu,u`٘r'胰@a$\{7ۯޣJ U,ܗ~[s(@ 9@īQmvNnbW ƍ8h?ڦN N2$(h)Jk{4ƤpInnx/((Q( ǘ<6wyC(m0?2 Q0c @ (P@BK+sW۩@74Lj/NwFpJ=IEy}ܟ9_}JХ*儮\ rxb-= Pq'P6$k*NT|ϩPs%>(?}| Fy}$Lf<(Ew*ӛB Y|&V"[*ǔqkL"T'}l<.?AWH?ڔkN W)8za0*Pmw>RAL-t]j$ \s1w$iD,2/$yAwϔG=( z yn~޼3P9Rz\VʚWl/Jr?ʣۨPےrS2e>^CuQo]S@SJP:y%.(>2 ?& 5(P@?Ars3:3"YH1P hd u#eXa5w|nzYn͸Hr?I)|c4|Zo w;,{89PIh#d; j\ h @N.m] ]28%@w*ruv҂\XC=i]G+x ^#w1͡t+hpl!l#τ>P͡YBP2S>ICh?eF5[!6%v<3zik@GGfrBMjlQH{gF ?Vɴo7ȋ-cs, sŒe@2F~-H4BB!z{Þx hƝ!(YOXZ[K4ԏyC+A;vRpuKC_ :#q8 ]哅-ܷ;G< |y0؛Ҩ&+` 5]@zp[<࿭ ]N%/d`abu@{xM ̧NByY>G6 tuPCx,0t<ބN-"t;kV@ (P@=IAn[Jr:zɿ| FrI$_&N#[ ]7-c!-Q:ͧ/g/Iuvhj\+#F;RaiwA^gQA--Re&RGּ=g}{6{>ɿɩԻ@<{#km$?>B=˥[+ Z jJr|W ZLV$%ybz@n /^m+z (?ly(7ǧ%i?3I{5]/b$Ǧ,b8h/t^:nx1q?ga-A{5N:c2Tt\7 :cI8aM+WR_Zuh#7%^k¹[؟'F_#~׋,\P/Hp~otBwB9\l Eϼ?pPáF;Pmv?lOʗx看aEM0=?hK 4h  y)s|lptݞPTfW"XuKfK(}N`)TT[M(v`hp} g`AEk #.zC-/Sa貂V.~X,!S!t1UPc~ү?:K rWfaWT.BM|d[(wdJ|eUga\_)KYKcjK._+3HJrF-3Q m<"t_2ʞg$ac~X)5LؒqIi`ԝ@CL.ShԽp-V IF#ScDb~t:404^#y%Zo(JrH6 u]l/~3>ɠm?Kl$-%Oo,)1"C-~  MЖsȥeO4O5D9uV3 l~ +v-DŽmߋ 6 P4=1x vcTk41"<E ]LMYp, mמcB/͍쐣F"T߼07,4q|܅w/v3OR'hd~ WKhj CX Ƶe= ZP4yƳY `JNzX ,BCZw;V[5A /dLX h0P(3:B?a?t!l+dg(xy=hƀ$SI1KB'EVpQ;PpӻT Ԅ6 Y (:A/&PP]BK <Z4i/yZ >|ظOәq ' AV @꿤\/A!VA*Aǟ!OYXz IE17IPVWyq%҄gn$"ukܞDܘ66f-c秌}nTU6ޢqJݓZvoR.q]M)Vx;}PqXxP =>v\̡#4M%h2 *4 $NcD\X'#S6rr3$/ ~ )vQ h{^9%I4[c;ygy#~8ZX իw oVAuX4kea0@R1QBS@f>?ڪY'(/zu $h $7 %D+arֲ?$w@K-q~u@0+߃'uVl@K#ǖ|TCA)y$2ށ1`ĔRD\G3:g `o yM\zq!y sޯ/2svn1)4/55oGo瞛WvuJI?[2h;U/3b)尗yaFᙇCquu5'%w:O.b˔Pd[&3@K,X@1hd['Yt @F;:gNLS+F@ 1gQ ??QО}7l;h}) 2be:W)Yt@JgAk5n4U[Cµ3CHH8zX4.op-HEɴCB76;%_أ? ! 8rN|<2O *W"G2KpM j+4 Xq4;>ɂ)(uk{Fdʝ$77)sqQKzf4 {y60u/l?,{T 1B0ߞC4R\cS @=!!|ہ@X{A]F֐zE0ͮ!^+G!د,T~}%Za`dϸR@-~ x3Ahv^]e0 CVLVsa;>}f ƒ۷]BMg|] 1 5 2 70 19 27 [?] 1 5 23 70 23 27 [@] 1 5 48 70 22 27 [A] 1 5 72 70 21 27 [B] 1 5 95 70 18 27 [C] 1 5 115 70 21 27 [D] 1 5 138 70 17 27 [E] 1 5 157 70 17 27 [F] 1 5 176 70 21 27 [G] 1 5 199 70 21 27 [H] 1 5 222 70 7 27 [I] 1 5 231 70 15 27 [J] 1 5 2 99 22 27 [K] 1 5 26 99 17 27 [L] 1 5 45 99 26 27 [M] 1 5 73 99 22 27 [N] 1 5 97 99 21 27 [O] 1 5 120 99 21 27 [P] 1 5 143 99 22 32 [Q] 1 5 167 99 21 27 [R] 1 5 190 99 21 27 [S] 1 5 213 99 17 27 [T] 1 5 232 99 21 27 [U] 0 5 2 138 22 27 [V] 0 5 26 138 34 27 [W] 1 5 62 138 23 27 [X] 0 5 87 138 22 27 [Y] 1 5 111 138 21 27 [Z] 1 0 134 133 9 37 [[] 1 5 145 138 16 27 [\] 1 0 163 133 9 37 []] 0 32 174 165 0 0 [^] 1 32 176 165 21 4 [_] 7 0 199 133 8 5 [`] 1 11 209 144 20 21 [a] 1 5 231 138 20 27 [b] 1 11 2 178 16 21 [c] 1 5 20 172 20 27 [d] 1 11 42 178 20 21 [e] 1 5 64 172 12 27 [f] 1 11 78 178 20 29 [g] 1 5 100 172 20 27 [h] 1 5 122 172 7 27 [i] 1 5 131 172 10 35 [j] 1 5 143 172 18 27 [k] 1 5 163 172 7 27 [l] 1 11 172 178 29 21 [m] 1 11 203 178 20 21 [n] 1 11 225 178 20 21 [o] 1 11 2 215 20 27 [p] 1 11 24 215 20 27 [q] 1 11 46 215 12 21 [r] 1 11 60 215 20 21 [s] 1 5 82 209 9 27 [t] 1 11 93 215 20 21 [u] 0 11 115 215 22 21 [v] 0 11 139 215 35 21 [w] 1 11 176 215 23 21 [x] 0 11 201 215 22 29 [y] 1 11 225 215 21 21 [z] 0 32 248 236 0 0 [{] criticalmass-1.0.0.orig/data/bitmaps/menuShadow.font0000644000175000017500000010644407630537344021775 0ustar danieldanielPNG  IHDR\rfgAMA a IDATx}gwJeERguN=;=ʗD~PE0HPd9sḺdsv}9ҵu# ujpo"zt;AzɬfCg]|Jε=:3YXa[SD׉TkwߑMoHfĉ޴_hHcm&aUa`GL7딄Cp[> O3 J ̱_t<3>][}H/7K! уl~;ni%/u~՛4}G|uڇ$hkPE8gFx7o3Ϭ9KvIs|G6~{3N_jkۤI&"R΍ EqP7\?5KP`FvI=V*"j+mεR1=RE䣈Kό̖mk}!4s|NB9:%מ5mrnmo/Yϡܬ.푷?9  5~%G笲SǃK5~8L;sK ԧ6vL Gҵ#Dqy Aj/zdn * \>e*?cCpg:' i Mi#sHPBȝΡ 7i;s}|;$5fjHMϏp[Nӥu^ȟ?fdY)Ywj}Owڱ3r=go m>袛ݴg-9AF آG~E?~t#L+=poO!(?\Es R}/Wԅ#9ܳMkkf>7!0em1KhM ɍwjJ;='SS='tv=_5rsgvs I}H}DW_"7=p_o4 4zz3zWܠ]:( o|fJP[uݦg+&F!cH5NCZDF$Edf:"k1WRb$\Y@ڽ7Z2,kSd& ) 6Ѷ T&B5Iפ!IQHӷI!41yɻ%=&m6 #~͟ըl1<?/$4FF8;9vb -J[`_|p 8qƸK:q>4H[]BG;p!&²ҹ͙YZ8>hEiۤ|qy)b7GM FIH䟘٢$0qL M"uQo7ڗ=34_T$q#1\Ӻ 생>$q)H /h.8r (D!;v{fmyIN]{h8a݀zls#B_4YK>]"PWT@j ɎC:ƺ/o[dtS ]RAi} ݪM8iYNR9,Ec~i|8=PBk#^NTJ$߄*r?N4s:[4]srg:@H;'F[>G֔gsc! ބ‘RE$JTQ=Pp6 ):`[FꦻVTL, TqV+cΜ}Dzv/ @ݑ9ձ!u<Ş0ca4ԴCKo+!/#mq1y֕Ć/BGUퟚBsf$-a0P8&kPg; ҉T.C؉3#!4?ۆ3_YwDؒ8oNUm:ӼX `aQmsЭ|3,,\*wH7:k7{~Gj۟I p.e LC&IJȩql/YFymѥ~"O_H&lP{f #)a٘Ǒ܎3`3M#Xм#qXUM+߅S|uPv6Bzoz{4cCq߅a5@9oCl/y p:,<ih>[(;EdOj󼤍0On,s౜FU7RuH7)}ʇd F*< 0|.>%\[rfd2:b/ُHMH*9ABؙ#@PqGeG\oρB@w֥@Ҡ)ե؛D5Ӵ#oex`ǤpGwС7ÞQ4]gRCX'`Ú31R.~dۖw Vˀ/Z065u{n4"I]I(% Rg|„m=_fmq =))l.8E6']@zϬL7tK}^99tTB6 i53=BwLrڣk/$9i͝qnD3 Y|=RD ({*|N~C$ MFx{UF4r \)65?!թ#6Y aRrz *D ۻCu-gw`g6A{G߽2Fl윝HRG[m{p&5x­<*؋P vclhs7`3̈n)퓔kDԧHXmr`YtlTȾ v*>^"u\BaAm{'%Omy8%!~nk{ $Ew(əMp4iq 9 mGoPR&SO& v$-s:֖:ȜE& ,sҼpx&yHތDÎFеwjVY@\S'5^u̫2pݑ/Rb|BqHu@ ~@5o% \Ӈ#-;eT8DΌK*.w˜۴FV0 Ml$axـ iNic bC` }|>2!Sf U kNy ? !ui#Gʍ,~8=9 _$f$EJ:fԻR~Xxx?9"qS Bh̍*lS+8.TXI4ڰ6q,wn#4:^n]-=s3 x9K*ޒV=O谉€:@Wa'I͸4x'O;YKfPyMa(yZͽ#7Y768GݏezE@{{&>KZkM\ZFẺ֧3mSg]iw 83Zg'59a/mEl蔴 hvI4ɛ& z'%ߵP&n:G"SN"ي+{늿<ןdbh_)mK夹r%'9h9GGbL6!3qz}1C8S?6];4TkWN W[ 1?-6q0#%#sT!DvY/H61mpa̞D!m6hL-7 ᱜ6@谮[0cci MELk T8*&m[QoD&dk#r $yX/Šp.~vH\uͽ!eͼEGBkЛ_ $"+l IńeF-hqR_=F1-4&ʍWkqWks>epBR[z_YEkbfS& i)8V[Eٴe(^dbMU|{d>uZ 5/^䳞EwdFHsT2m<4?6hmJ/qam䁿7ݶlu**;'b3:Nj`ٹ699EbϵT9s1vNVR KrѕQ[VHeXljhpvʱ[~JV6N;v"5F+b2f=21iFB`BCN[:2ǡ99IYkT*Q7fgwM6SUx#8o6'ԁTdt#-d9-ρTCy;Z7? uh)OuϤ$)Vl{mGeoQJh62T򿫐y!+X&:ΤB8ӹJچVڒv|-- `DbC /IAV^{ 8VsL1nP#agRwnӁmj=ﶰuzL\v';Ғv`ujgDWd{ ߇ڞmv c2pa̍CCŞ/^HI1d(4kY`2#/Ï~ -M㒒k D{1@g츘3^SaKz*m+܄bىS_!RQ75A$d4ƟZ98kǴZoLd T0I`"Pr/E!}E@%099)CVh^}p^ td%(8{nCY. 7Uad_zdd䶁02)%V^5fz>;L|ر ̔4+Un]# iKX/w6D*`mmHhŬ#S8"}Wvh=_9ǚ˶ 2\D8xfN|VWR-W 4G$džY{0 |Im{9Ko$E=znOX# W/fa*㐈.0֥_MY3%#_ɅBn@ 9XHn0k!Hü~jc::Z^Zi{e;͏R"w#EV;R>Dި1`oP a&OE=MT QiI"V=O=2-I5-$(wiuHD+TE't4A YfYW}9qyM0qf%_Ph\]YYS|5g:_Y )I`ϱvK pNT}Kg0 ~x{)f155slvx#f`Rf 69Y8Yt}~S0ֆ5"l)9gR%3}Aufژ: 3Gma1+ޑ*V-]#"PH9w ,+TA㜴>G2wYn!;?!{W~g> 89fZ^HYvʲBݕjUի&M !z6w4(͢= ̰o(\VW}6@ oQI&v:}ҔŮ#?AJ0mRP' b҄Rۂ o<" FtpS20ZѨC`6;{,oLejYC7RD@e*&la=KF !aZ%Mlx5iKa[ĆCn$D+ yY@İ,I1\739 )zXmx {dZp^JBNm}m{@٩Urlmx8cqrHvsK}HIAYrGTe%OH m%*mBj $jWu$~hE_ j<@: hkLLq6 cYưqH!$dNsTk16B! h&߶\cfBd# Xetm""ײ F< ̥ZQ s}>ЬGF8 Z˜`i3pܨi2Yμ "]\ى#J)6[JHM~H^ U IDATCRo Ҕ Sdf\1T}rەjjh.=ŀSt)@hno,^:6aZ. g Lxh_lobJ8pS#~6:jU2moWgMh@Nρٟ6ԞrH 1*O,:㤷;!tJ{5!<:J5uf/TɅ>'r@Y3$b>8qR hR2 37IY5(oRMCFnssR!C8#)Hn)r0e$ Y+2_nyHt9ɸMθB۴)n]=Ӧ3],/揀~Gv8*O6m-$q~s5M{c4dbImyz1QgfFRzNR8ȁ= `?x@b'Ro>bEBNLo"UJ53ci˨L#}_☾8#>*j⠞SR.եUJÎ\d+N:qvzlsg@]A8 3PdXxDTW:Mɡ_?'ws7!}Zܲufl@@`s_UO v^|Ae$Sßp4'vL ;rKV9#36"zT@k(p7 /#>9eH6ᎉ5pȕӒفC3mPI[~omבגyBCefVrJ9P|pr=1Z3lJ~d+#WН1Z"3YN(c!g#3-yَ9 u&$F0Zg8Dr@7xHRDMP.ٖ9.)XqDhAmK#aXb R/}NsEHeB]2aq@f$/j<5#iWJLiC!㽴{sR HT^S۠;{,]aj+XRhvuYdF6b銻8px{]ՅԗB |8 QERDi<5( &Yn0ЮjR,Ăry[{)/H,)(?u |=sޗvdRB% sW!@8ܤo ;$rl yx^X$'-n xB7򮔈+HlCZ buf u8y> J7}eHQ9Ԯi/\ bNJL3d'v R#dlBF<ф H'i[$LZiL)v+qe |_J2k 7>fbT"\7JuB- c#BiB&HJ}=jFBĥf!2!olRuh7򲤙^}3RHboPD1ړHr6, }gYԴ'NJ`iZ5-LUV\j:ζb;yns@<16hwZ3۳}`wjt#}39}j8y)ls.v¹MԴO%& mo&qmM>`MǬjYWwGZh2<_ H#- l8#ߑeo">xH̼6DCuTO0IY"K&,{Mmm@su9U.ٍt)iHA3@িIYƞץ1k;D$!Cl{lP[swkf\T+]s{Z;ny{u Hk훘\`Kn?#q-eE)/x K)g#sl=+U|m37\ n<]V˸hubu%W`C>Yn0 ^0 ߵsY& 9j# ԾQߋYJi-5{ +ݦf~eMsz}?YB!M l uu3ӶohhF c v.=NJR4f(9둦r %k! ^dC [2K)IⓞԼ EQ$(%Kj_l[jB5ŇR-v='.}'Xe؛UjI,+P-@)f 0S!9{vp ȖzAȃT->T(P)yu$$|=H(#s'T~Wʚ穀 &kUV$Lȩ C&d/umޫӚgRVd? a P7ІjL7W6kDŽ)mnDFRR^ts &[O|9Bx!c<~֏mMfd&4Msb3€6C+ぎ:5L~v;)Mԡ;)ʺ$[_sNg ƛ3.)ˍ) bڧnS8=n֥y!g\omhI[@7gr8}5PlîEed~s:5)"4Y8sȑ̡M Og _8= ǵ- &wJua} HDK.nZPh'Xi\VnćnydDT #! FoD[ҫ&'aiiM"5イi$pP*Qo-Ĕ! sa@&(MgUw! zC B c~ᵟiD|ǯ&[V(p#-ڰ[ $=wIN/I 4CN@T傡i_G|u1j$^y8 ਻6[c[Mv,] s2u#E ˦fordWEEӢduLlOi3Iz듪ʠ~?aG?q€[&|9*g>gwarkᵔt C:JBk /yOfDVbW}(~(0#NI] I …?$tjʌb{$\njFH׵T^y8KZ ̪uUH :dLJ.Mr'ִ޾J$t~UiT ??ۡ{'^TMK(xEX_J{#G#b^-\Lg s]ɇռjȾ7wFmg"0bmս8|{o4TKy`U_sƛ 2ETh(;6ҁ\UK^xB,IH@,rOE8}Q̓{ m3VHX5!UY$+-o_ȷ +AR,TfAidTIZ-bɈуAZdWv`|&}PD3W"ԾHER.ůT# opK<0u̡Ԍ2(i#>.w}5XPpPFI5f!~$ M#Q4C1 Ͼ~T&  ּGV$6T[q(jSH;OhK=s1mյN98X0BEVպ}[+ul&isF`9Qkl-+MWC7B̜SRXiּ[30Q#K!j27 nqJ5ӧt8!l b9pB7MGqrx7Br\7^yQFL:&Wl@rT76!Mq6kd}m BV .E8gR3ҲL`xT ʇ^W/;H5h!#:-4|STy>pM5\ Z{(q|)&uOk2w4C|Oc5cs}`rAӞUVn6a'tJ)8>"Vx@*U$ ) && h `aS!.A*lX2 #dwsgFDjO3B0ׅ}mp^j9m`+úȶ=RPN;}y69rJd\z教i>`bg[<_Q;1m@J_-&͜D,Rѭ$:z=և8D&d|tF$]rN)l4'\JYB$7k>;z_f1[%mVJ͢f>pEsxX3,ZиfƶoOo_uf:2KԻk.ڒ[ gP QVUZQ㨳v'6C*%Wg !3(=W֛|OFێ˝ב}-hCF_$ZR۱m֬.,wa'!`ܗ+0MŶ}olv+_:Wk  {o/&4a(Ľ2Z\pywRB"k/4WRs-eZP9C$c q*Ѝ<*y sxLhg5"Mm ij61HI=2?Cx3+$q'fo~tHc,hn43Vx!N d@W>HX~BX1L5vIU0 ̨Аmypޥd,lVC"+8(b†!i;&I6Xxٌ^}RϼAB_:2Qni㤤Lx+%hD"B^a[8u.U( T+YN>3niݶJr*?GcƺjB 4:Ŕ됹qO惔b $퐃qDkLhN'OSgoƖQ ,ljի椥ym `6kxOqH/[J-tNF v(Hz97+VG +2#:e& %bz;dSu?c#[k03M#~؋PK/(բRͮQׁZ8 i9Z̔g$T+ sQi.ΏWTt"hGJ챿hH6{H[i=¡,|I$$.Oue@"&L^#XxLą趞58fy3rti:WuX.?0S@r/EBON ިK8mmTN Q؝Sj'fsN+MEE濛WhɄL0\ SҢph*˅bIBA748!_A'pv};A2H7 4сJYϮ:nc]%e {Uwp(l0>mgܘ[rf3_;RH r+ E!7e@-n~Ӧܼg컐IV41-HE;,\-pn(]*_hN0mrLŇk?8ސ 7=.%N7cdCABMZ-gNc0kQs6 ` rSӡp܈WSi_HuK.}CF~+s@XU-ހLjngFITl`[Z{!+*n \*ˤ$_߫0e3)!SYFzt߱\B69կ$bO#SYGȾkZ 6<3z[Rw&IUWsE=mqS~m&qm^W/+@J]+ N޼'ɷ8GiCC C&}$& <,$bj3#GTSjW™}Ҡnbb2Kő{M9YGa{= t[ՍeW{K+T(N覵1\С~d{  GgJ速qCBi`‹T)pb4RjMY-{F&R`cڡDv!#FzmFF܁#;A‰Jno#I=8xߩx*%U_Jnڏ~zq4F,A#iҟiQ:p)9q^K& ,f@l'Rvq kf=|m׃ $'RŃX's,*2PE:AM~-e = L0 M. oIhJCI@k p@g@VZЍ9&vKth{EYPp;9m9C1nIiZ: )hfn9eթ#oѐfm6#KQ5o@Bd> VK Bn$pBCDE sE=!-wޗB 1*f^l3hN`csD= i;(au+ &#U PFؒ/1;m13D߾T1"/E=NW~O_+̚_;t\X@m5erm]uU k:u+=($/ T& !/d?"'`p&\҆%`>[40Nw#b1W1"W\CVrsZh.Z8kVW”]L5 u?YM8yw"|uXid)";L媼ۭpeⒶ I~h=So@ yL: #0ŀ3k.›GAc/%]u7}Y.~`4Uŵ R r›D0`6:?ϱ3asgx`G|ǂ!{a ?`udN@)wN^x2TL˜#HXTe2RZWT Qsy~ԦHGIB✬}›!.@"}iMZT$Z$\boNs;-2ϗ+[1 ۷HrDDqɅT3zz'̃@+mHNZHJfN㲴c RJKuZrha<g R"y(.Hͮ܋^5utfp]:fcTԘ9OX]6F4ʴ ivrrm#yp9Iy#@L} RE-Vk'u ~uTaJid9e&+ W7W9S&-9jy[xs&Lk`W3(sfLF5{kv(yeJP&r'ΤZ 5I _\\2qxN@h#_?P&47l#maj~x ˆTR)Zes)M"-\ tZk[B7bCj9%9b^ } N&*&s* z}b'^ {B֙`b}Q`F}KQ65*&T W.0yM\c!R`uss4̂t#>,5[.Sma=F%^joCP;6VU̜5{9bX1sYHkl>q/c, #(IpC1Ȫ܄R*z&K1V}͝1%`#aАK;yɜvgd$mϖYT)!B߀n&V4̶[)e1ޟ]v-e>ȖՑR=)g!%; )děuZ@ak\lHv朗+&E :cDD"$^M;,RfZM&\۽622ԙsIa&T`ƙ7HʤDS0eRfY wgRLJx99BuORMzacx%%DU`3c9=nnn;K,U%A[ޑs $B"[m+3`@Ϭ﹔)])Lt(mT'F`_{.._ZaB˜nM>[ܐ|)Ӛ'FxsMcbiߦRJ/R uؖlcYmؿG)4Ab7ܨwd0=DL:+v((G3ot쒠jD`ka aQ=Ӆ?2#`>#)>A .ݶQ{$ۢιzi 8b̏*esnG2cOn4 7T  O3H3l& H[F%5Xҁf:!0'Vm74%5KQ}$$hL #N;Ե;ÍlX#I @VJ>M¡,q6tMn<$n$z`9Fd.d!{ ? ܌yj1B.9y2C-7cY.ĚkS7XTev4zɦۚy2W#,HۄH&MfHcsHOT ``b1>lG0%agJJU>]g,e30T8=VAܩ&uF]X!.HM M+Ն}gAqՔ>w#%f:cиx[{<:Edi^LL8G4\wn֣$ dh[~MJ"PnL;t@Cءw`4 Tڥۙ=j3f~XWIp|7RVOBZM75 8Ɇ1fN XmG3ögyQ*lʾ'̜c& rWI9^6VfՂlױGU:=aT`7&bVX2QF߈TLuD&-p".%Y`Lre$P#e qLK)bAH+9M# W[y"ԭ7. hIM@SD]yKkLLDsZ.Mn7Q .⽔,}:cP> b01l[tpZ)Kam2Gy2P W$?L߳`gxLGˤZא׳O(U~?Csi뿘M? UTr;Fc r&w.b{0,nsK~N, ڽ1Zd ics[&F솵V;0mR_6gpʱa͑͋ xP >gxu}`+-~+xZ̹\;y\Yq9n}ETsmlT.vHKusxi|*\̮Sm.FyUف%јD7Mªv}bPh2u=ŲCLۜw۳Υ<{:˺Wn~T^~|Te~af.>V5|>R-=ȤĞrĹFtA.!~#bۘK&IPCQcb#Wc|̋-sCQ~Vn3#M#=EyGȧ62qڟŪ4l ?.&{h[pLuK A5?KB'D7tt

twDt@찅o=@!fN8s̞X- [W>S//*Ddkr't auD,lH?c`@6h7*WBrׇ^LN1T66X/($&@`io9(tId7gt d{6yy9cKUOY%&j2w%3?og B_A#ٴ@o`Q{lHW\Se& X,3VGk69聼hӄVMd41Ȑd&B>#)XpB"A賔@Э끟yRJ Μk, dج7&@/gRg%EJ?  [tmȺeq ?i6ڀ7G:c<#@s0fRϥ}@p_~fZk[?kȏr-ˬ^Fq"ڴm<~|`})@X㰲[M)0m ][Ě݀}@%A U&Q@O9sCkl 㘼"[icM76OGuӱNiCRfTP喜V'wÇZu) /;)Q})]W oyLHN]xHgL. x.ԕٻ8LULpb(LqZc}G}8$bײ,-o[mXJr+RUѿСm]iQyB6jwAĴA}.d?~E`Lzu@Y"$*đ i/MDHb؅ن3 50/4Uʣyhy1BQԶ>03]I R/78δh"˙N`,ֿTJSbEHrll +h:Iﵭ2K6f"NI #!!:|STK3n'DVVOf铣ިp,Ur:ut IDATg%l?籠ߣQ ?R٢}.7m{B(q<(\v*$lf$49,`XR헲ZgFG݀99PLT2z Ap)x /\A(9{?x?H3,dX6^p-UVTk:*%B ?`aه0&Fmoc!AnsV'&0X\UHK/ Zu'^k3&o"h+)?[P5{Z%foט_݀5$a{a'E]ЙַMϙD&ܬ>_jp J8κxσ}pUQ*0|adԞkMU]cZYj|8zqvD^eP\ˊ}DLѐ.\:_wpCpaXlzsplr.`>9c2EXnPS '9 ?`H >TZ>3RA7џMͅ+%۝TsD ~@_j)P|CD5qo-@ej/Dd98Ky?P\}K&CV9vTgGܧ\B_̾Bd])h`N)6kb'r kniUD.OtP-yVsK7(nylK'@>gxhmB^} :o7!o];̤3)iz05 mY4%ϱ2$i9E0 x)%z b 2Bh<$uj-%A_հ&Ǟ اbmȺm#h-:R0pYqvXEEA#YfGVȍw:7#_JI Hj^8ox׻x%Mh\l{oAѩ,xDp"10TW•m>O`4O{_ێ%13sȑ R۴{ia/4c}DQΦ^H:˘q:il 6މsSwrUJLKuK6B6$'yCyR3ΐY]p^;܏:Ě2<''߹DBO5J5Z HB)G(8QHM3X o7Rԩ\ 3i/ًchׇ[:|, yP%s@}»0Rۣm^oz#6Vk7*pr(88̢7-S{QRJ pxSP=}umCLp oc_Q1JMA(^C@(ڈQAx튶ۓ*/ {p.'R+b]a8GݴKL&"IlK&ƛڃYo?T:=1&H/f lZ.=ݖ?8B8Ϸ"=lfn}Hؤm8B AAJY>E:c_8Q#5 )4Scs)y^賏I3ك8 j0uZh́6HZB}3I8/IuI}F;@;q"G*RSߑ~A}8#6.y-_X_6kC3Ny {?u`ֱ\JnGkp! 8O'@؍-_HIIJ"y$o>AJ}܁4W[qPdh(Sfd:Aڧ83ݘ5&S#{d_:a@oM]SOz(Rf#r[GgR-5'j2o{L( -gl;q jCa 9[ƹqϦGEw"Kd_=hsK1<a@jC};v$/Xʺ B>'p}GZ;4ە*w^]N[xIY)7 YRj@;#5i8R߻Anf|Y8BЮ)l8" ,|1}Ě3 O{tJZئ,jgݝsT8HJfS׷M3&,J`9˯(Re}uCtNxs±æ3imM xýw*Ԟ'tKOTkgI=g?Hȷp7D%M}~ЮDWjyŦyYpWv]/Ԟߑ5mMG{yV&M M<;Y^Z_'u$go0bdIįFc^Gm%lj+8^̲gv(b9E-IwvڽԥZO>#9xi6 %j q2]7ݾv=G4mޚq*9Qo~}$,#ԦS9%|Glۓ@z*.#3:^:9X\=Ǒ01@1[R??g2bW.L9R’t[FmZNK![?[Zn|$,%ƴcrJ֛n}wh9 pLģ;ROۨG'qSg !OT L$ jӟ؍9?gb?Sm"Jonw2䊼՞F͗H8;4s#/w>>ẓ;5'P@C4? }8pڌn~rg^Ɯm{{jΌarFIfc [Jʪ1ډ&F NsL9_H]xG\Z%-XoQkAHY41ϴ?c` 4ō327 @_?C2YG#f~B1#qώYmh ~*q@c zFk9<_ `y٫=3|𒃢8U+Tb5;!3NJk-SdCflMh1+1$8 `LJJj84fy 퇦e 6KhWuM3SDAYEׁpjJ=1Ʀ۶y>W='2P{viCX%AiNBLd2v"B}L_5Ūuïهeuk51O.e9$𝔼@"eMT@+[Hccl?_?+9_AeZR4a;+pС;u=J;ju67n$IQT^};7IHJ byh7LK`И:(+f[%d2fʾӥ]Tsx/kxC-Fϼ6}Ȟ>q/IToSk;I$;fl!>/V_;6ծK~Jㆎ$x00V<Dq{;1Ҍ$G4 ?טIZK!/Vy*Ч~'$A(d_ZaGDW"W+)bEPh&<Ngc={ !Т!jmT炡q1`}qX P|=7$\ЙCm@ި ~$X JxwbhZXr#Lʒۧ{R3h]|=ֵNt3FuCtM#'z];`2 {z*"?'HV Hὰ/9KGOwHu7XtwZ<'-+z%>ݠ >l_ 40QشSy^}m@QlJ} u+=rHRXif Gg[9ASW[mqJ #z+T|p[.tRC%}*KCi} {I6|P SlI>>z /̄^ȿ%}`>{.2q*"ot-Ϣ_}8|zR z4uP"/-J_Q8|8|W=.tgА őn7Ҿc6"Ngl#9t,~fW7kB $Slr 0iqs~JK^Y0 sGtAן3ӬUt#jBt3Қ  c{RV+Xj;׬/#=44@>fyQWC gqLV1<5T/IOlcHs_./3Coۢ MuO2%zc)o{̘|{Ї*w;v)`)ڦ|T1~Th\ށ`H]qސa+]Gtp}cTZW{5V zxD?woz`N6tboPN-e& ԬF< X_J[M281?Ix ynݔ)iO,'TT߾/%ǐigX :7UFlB}"&/\Da:{7=|&d'εANY#<t&u{z@tHUO% HuyEwu/bi#.Gq=|J̩]3'HW F+ @99RbL$ qI y^(4nvht6=+V1PVL]b\cGw&6|30(?[[kSh'~(xT8mYnҁڣwK3@`nw:L;76=.wo> lijMN"SQzĠo:T Qv IDATSi826o/59$F!kN#&9^P(lAG=.ŵ&p^R.Ex1]SJ*Z}A{}"I~> _+ׯg tQ/wAEQzhќ>􅱹Sic)q=N@0Kڟ@pÒ2igHnp uӄ}!{J!SJ3dh8LCh;nA?)HJcR55{-=fnة h/egZQFM%.k2j}'[ ݋wt"E&9'KѴ+J\E߈pn6API - M'^֍="x9Vv6kVms&[6h}'y&Do406/rSOeKyT:INO*_`O.8>KX|uR)88BZ0PeNN"HemD\’[)nV!O24%o6)igDzmD# hdvPפFj +ҜD}Ǭ ,sSyNEު1Gj* 9lT|]>Fz uPyHS}%8@k-HJhRF0;=[І[οӰ'!R]:599 EyHoPD+oQtdNIJĨ=YX:D :<=+"N}U7q= z_蒿*1NGl & K1뼭J^7{h-X0 ȹM7*A&lj;0[цl wɧֳZj:6)i Q= U9{+v1\srf% gmSK >% _RHH;]rofSb_e~vɍ&Rɗ@WplP0y|z2ejsv{ڞ<.y** e qYs72igOH%G8 K>mZsRY\LM̾Kynkmi+`C7Iy'9%إߞwO >`! `L>$_bDx$ΉKC||f .3:b#}&E}_%"\ɴE2gSeaBn3wOE,x L@s Tތ̇f>u>ٯtПc[g4gfCSqՌa}}@L=]Ï"- oM̚M(<5\ i Чs[tYzJMolNTD,j᫬|csm߷LHQnPY ́٢7)j,?dt(9x`&壸)ޗ7S#aV5OQN ,BW#jLCBR_ϸvMc.~M ў_4S-yudaP@wy|]8z!DxUϖ8n-x,&G:z{-eHTfYkU ɣ^K\gQvcb. Y7Gf0&/>˶') nI8҆6Iu%.Ͽ+.NNS2Y n%I0f@ ν撇Jyb% jtK}4 `*=TݾJƎQ񞙸9ZũXFƢ%r]wWu ߚy5{cq<\10պҫ^55%0 8wN̎I 'Mܝ+I/kymM\oFB$71&:BzKNȳ*'6T Ƈ 9@ p,^ ڐlY1f{0"oBHk>|_7iK`!{ qf1`c=YZ&s&vU&2O"SfT9.0lH{3 sȇ+-$D} XtóYq^>W#!5.LkI7)C i qe V2.>-5)|/yب% ;qHGa۬,dǛ"mlBF .?QZ$_[;$3j":)VS Q/Vғzؿs-?!S dVFHG6[㫤c g4L(egF4"l}{Z/,K<ϰ|cc&R'&?VhSb0cRb3s0fA0'. `H}߁쑓x\`ٵ3ݪ0AV"Pf#:oZ}Lr&щ=0WZV  gѺ::AҬqe6U@& YA]U um#m L̩~"XTN^bSJy)k1x=B[z6'T]*vA*X; $[W}`6Hm6KB^O8(b~ƥdH:nR5dž ^W9ϷB$)?-C3Xb +ĨUZ:8`g畸<dU}ڐUxUs<:8b K0*WO}@>|ula,3ߢ#8}Zjq8#8#8#8#8#8#8#8#8[vktF|aIENDB`criticalmass-1.0.0.orig/data/bitmaps/menuBoard.data0000644000175000017500000000003607630537344021530 0ustar danieldaniel0 0 0 0 255 255 [MenuBoard] criticalmass-1.0.0.orig/data/bitmaps/nebula.png0000644000175000017500000012575707630537344020757 0ustar danieldanielPNG  IHDR\rfgAMA abKGD pHYs  d_tIME$+.3 IDATx}˒Fr2M4ִ+i!#$.nw!.Q=lVe GdV5p 4 Ǐo~}_|q_={?9=&!7Z_v8 5A۷o/^g@xNj/_ƫW޽KLx.@lT_ p@ y.Ϥ 9=_~%UC\{>#u9k?$t z05 *˿ynL06_`C21/a(9QӮ7 )>ja0 J)eY,!g3)H~S((\^DB#DwzܯPN'Z1sYk Pqwv/QkūWoQJgdDfB69}}J!ӭ%֠3<楿mnxxx7779]Y{yVej&cd? E_zY5^gxbvlfdag ðIu` FY/! PZ} Rzmg0xNx5>G?%I닰w&>#COՎ:KB? AWheXJ)j0,_Ug7"PgxNmOHyFl܅N';o a'>8NvşAwI>&?$U|{3 $NHؙqX@?pkX Ǖ`&^{6M: 0 8t:az>CRzU((ReHBCwMR>F}W` 9d 9H#hc{/4k˷qq4ib!gYDZN48+> 84M4M˗Ԕ( 4/A%)+% MAҷ$PBb؀1Ulb0XadZDz^~o/:}N?d؄Z_=~E3VA)< G{a8OG4M032tE2lw`ןCcY}$䛽o>S|R!= …@3NOOǍ~f|>PĆV^]%By=Xy&DcwJ[TޢԾ'k3ؽ8_fIy}U!d/r7|O?a :ð |a{BzD}J'OQ_@d*;yA6 C#<˲(-gـz#d؜E_ 9 x>ɏɇ,'|R*;|'駟V͍ZkՙN>֋ބysl͌1}qVja5B!BXM6Moc"d g*ffnF4Q .YkЀRַ~ xe0?'Qk>$FP%91j*s%'^D/;v8yv:iz78(_=UO_[ 0lPJ)ܬ0's}ŋx{Z˗/~RO P0:sT@' ?p<~\ ?lB^w5meUzX5T4 }/ ?7)VaK9OS53 n 7 Py'ZJ SBxtܠpL8 "?<<vF4jxxx(t‹/}lk֕vxB;>wջ7WnG+a3IïF9T?Q7UXXcHOޖeᾎ_[&% }įO]VT`Z3^-GωwOp{{ːhC9N<??Wi<؋/p8<[y.Áo^xO|30 ߿n/W_E==GzR@?_[j1نz-)FE|v6R~[W&2ELs<ؙ/4 t*v:xI)=4;*Vf&Pjuᄈ/_/~x< xgȼY af1hm4w1 C!: uJ0lj zt 5,y+esCc~thRv&C1knP{ޖ4P< PeY3#5#u!;[<td777޿owww(`㈻; xN?4׿0 \7a|y<=IB!O1g!Aqk}9?;.IC6O)Ty\777e1ϟB h__A3  wwww>ӟ`cϏ3)slZ\`Cbkh{ Rjů< BZdz!!=1(l߷xc 13+((e6V)[ZVG],~I3O>!iɓ~VAh9zd ~%@G@ `=~_U_(f|3H)4hkN@uBť@fP}.F AL)@b{%U(jfDh3YJ/۳t͊:c~Տ-BO,2oy~\k]޾}zj^Na3K@t:5{3[ذVÛ-t}GExcw=4&y4] y!leY@8NT,~:M;-q q_j,,K<<4M%S'> nKC{ lŋ4$oސb9AOL?ZC>=hڿT BiA B5d;N{>(0pYllAh3u [ZjЈ؀1v2/"| KO3@/yZᣐk$Y ""c" @큵S]̲mLZ<#~Rs@Lֺ駟NMkx>8 ,`0jz Wg`i:/tzm; !4xI xѰ`dgH1&Aޙu51ѻo .'%֛CԺ΅X2  O<'|2ۿ[Ϻl/V\/@|&Pف?#x<^u*Pu*,?B8}+ ? ӌp L*L%uixSc45ɯ[߁Ӣy0P8P)4# gZD߀/&Ao1]S>q ~V ,Z~;>4!uOrtu-?is֒ϐixmCQlnQ @yd(6_ ؆N"̀*!yR,@P!ڿnN\J9y|>0 e9wm 9]5> @.[!MY:4[}z˵Lhg Y@ƺuib|F"aB,E;\h*43z"@Vhe;oPs-2eY{(w`N|8}wAaQ6PkR](1@s87yN=-݀KGP7J9 qD+% Kk@tRُUS.tO \s@0vXlӴP::|ShL @5Zc0#A"DYM@_?)Lk|![jl0T87R4& L3 Fo^ZjUͪEk<=p謚{' 0 C!|>U?o@M7"L2Z; ՆMn[hP5$Swፅ=!怇ߘj6 CzRJuSGy a=8 O4~R Cd*J)Z+ p& 93 =vs z),"50?G1@7 9P'\t =aZ0?mwݺGfL&y-\&>IgGmUṿRb}< B4B/Olњd;<)4M M8 9 @6D `Y/ Sw%@P0O?I,=:T :vQ^.yz53䟘j (=>PP7A G6NQh@4Mn1[(v4m,L[D<(rZ}X!#Ds/R&/Ddm$j/_,-bwww/w.okcbǀb+V x~n$ TY@-&60e>2evj܍/>9&V_-yXJk@s֐կ%a8Pp&zqL w>q%d*tPY@WWLRS! tO~pZeTW⹺9', Hk>@>MG 豂#豁ΊIQ;~-vONkk|}9F?>k#PB 0qд@'RyA@Q$Q޷波l^_ B8?a8gOu 777o/_dZkQKzfAo?Us";0?N 58u ̠GB]s];}K–ވfjIt<'."DmW}|V& pV"I0g3 0dfgTJyfD`~ t@ŋjn֥t 9 :?z,f6s.>!8ZNQmС21l 魛P{pw (:  z 3]("4`c' =$R)ρ֏ kiuB0ԏje])&$,PonnZPJ{--zASxVX~E?5z< p{{k _@}Zy<{Ei0)@ }?׏ hmAγoP ppB~? M)0 g57e`g' Ta" S6@| a>r<*zy0ܗp48v_>iyR͈F""]9k_z1dZ:2)]-23xsP@[x`1r&+Qn IDAT[P?otyh: 6m y` " W@fltLf8F¤"@@ @Hٚ_u2Nfvb]ZO0y>Zϥ3|>sp޿_$PxI&@ =#2ӣ!A9'ՂSof^F<[p ٍ{DSk=p,|QC]MoէEF!{8ڿGt۰RkTWk{p=`=aw{ay:9/!,m0NaQ^D)=>c]}7=\ׯ_y,L|s s>cjknyfON1ew?XoXkF3ү5Z ?g])y^{чm1wbWSTʐ~\|PdtуߣYȶBonn}bVv]}:p a{E$m&6x&4{Jf?bツ SP?>u >楦׮VkL أ8x罡So䚣 a(k.ckye^bWG;Ӂ FCa\o7V'[ ŋKw3wݻwVp:p>1ϳ.B`5[ hZ+sp2* 3OhV3ќiF6-DPZ jGj꡶ф[wj}yl8PdAu5X ž&lj^5 7XO3n%48R\-ľ 3ki>Y+fVw50^w LxrS'v:8.QS'6^ Ac<F}(G[{ݖRԾ3nl 7$-e+ШJ3uLO2,͆q:a%R07֣/`BߙoH'(/_4 e\zFy Wb?%&MaL\rMdLv<ځ*:~K/(,:L;O# 5Ł m C d:!ޥ̲3ӥ Os "=4OS4o =r 0p`~`P^zC6qX-Xҵ*ј7h!~u﨩g;yJI_B#h,cίݝ/Inr?YHMT[Y  *0 &* pʋ/! }Ͽ8v<hA ߝ t)io/CA/90k_A=lhFKbc\||TOGfl`ttkl(0C]{)xͶKrV&Dh)] 90L7ugWa/>1 î6y4lVnoo+v{{zic^-xd߷ vm8FgB#=ͮAv[(m4bX%I'hMY;f)#aTc[\} ZAM_{k&ԁ*_hf[\fF5TS7bgzvi~=v:͍=<<ĖZA"1=9: q}e |MGJ0$^%h̸$]vL1OPZ.h pAjTrq6?pb3QMSS3I„ ߁-KdMp37 By.4fR.MI Nbf@B<7\ I_h01h)Lwޅ/lj3]f낡9LVlZ=&6jV?Zu'E3^e["X:tp8h4~ Mڣфs?EUZtlN,C#Vk C,pw?:|YտYS!z:x<ևh~{~X?Y怌":~T޾} /P$5B+sVQc,S^a5S<~b>Ƕz|t}^cQ; ͂bs"Luy}6l6,.~b[ٍ#8ؒAHY[/W9?(`Q<6 Cpaft ?Ѕ1e#P; F󮷷xxx@>Djil=yɧO 1?t93=Tsd[tcFݷMHhAֵ,! 5C;G+=c I.HY+\_@i:+qʧǒ9)].E -B0?jT =P[jC43r Go\|ԴETo*zVBơ `:j[ mPoyEcD5G'2i4:Ra6pjD )fy WE:zFyٽ`z.;Xх_A/! ,&0^;y>q8cyej4 ǼS+ 55i :fBƙo|}(V0 y]AFzR]Ál[)BpT{A̼ FPׇY=ͯXqծ׆dά! ^G/XF}Uc{Oc0X.L} XO\uu5t_ibKlܣՑlwPLi;Cc\И@@  pI~4q\JB~x\̬><< ֆhhGeb6Un[+zޗ.&8.giH:h5V RhX f@&x@$ ޳F]SJWӨX8 2jfLlLI/Tʤ|>b-o ǛcmN\rS_L. yde"][Lz⼀o.RƆ0nnBAM̹m~*isgs7/h=m  ,|:&;Prhu~3KQY)h{+ 5yiR/;r> f{fA:S]bR^cƤט@v 21XzI@`wc<;6[.n mEZ9gZv=1 =;BL &$t x*ZFfD''򽔆˺̖6je=(<(uQg-6j[>iԬΊ#@I~b~ϡALNf#]-#fA8p 6hXijf(Wt39cotcy'hu6rk]RenMFPƪz׉cW['Hϱw2y cf\>&Mo(tmR+3'_\af&?ĕ۷xu}zSH/f6/~hz^,\J}%N:)\aHeF_+#'ϡu黇}.̦Ѫh5eF%\ֲT)-m !ϡoWRfѓp1O2&~+eԟ޳`telágd;{:Uu,F1F&6"N3_W0 Zk,iJ'ж]dޯi!{tY27sϸVv}FMszO8*<6ZNbyN,6m!ĢOk U&qk-b\pƇilYBH~;{ e6&!Nc;߱m[6c/K|W?* h:h#(05Yls6V{LkhFHR7?k,ڤy8hUU8`el/?mH$a?Z $Bz~?ˬ[b~Qf1ͥ Es4M?6<όW&T54_=3 5 >/p8ͩl&l[J r]pIc|A 4 l,y ]Ψ\ 438ٰ,KgY qitb`g}w8*i2]G| p8_DYnVcW%`i <C ~_www}yfJ/ΊuHi*EѦi[~`$#iJRaWsSCR:_S>R+ҏh۷o{TNd Tl}&B>'Yࡂά*oJeh_46Tc6mAN,x磺 \2y`qP˲9uL.K%ò,ܛj-NZ:I/@琿uq")K/W/o|@y.hlh'y0|V^ `HǠU]MṶ̑S3@ ^hve&gb3uᎦB]ifͥaY2ne*8exds Ιd=Jx\; Щ99PSV*R ӈdPW3KL,@ccCHsC~Zk aPbb<= rc }~Hv|!Q5Q)ȣ TTH ln*P[AqQ\?ǴuRԞeYm>]ؤEgA:˰#;y$܎/h޳`pQ (8Et[%eR/{J`+yyD 1bDB2sJwk^2#NN f/o߻)\3dheJ~c>YN۩՚km$ `9QfCz7:vUpygSouHI'3rM Fc#1#Wg Ar h(cfZk]|95#FMltt9ig6`p$wo9%zYI>e;T3" Qm v0f`eeE[ȄN.˲S7dg#]D9`p`q:˰So8:4ER8)e{AQf/ {?Vjb0o޼۷oqwwX)f6|^cyNIEтH@G=rL̓3@Z]Qв: U R|ff%>@W?Stn8 d7l[@Sgr]]Ths̞鹫s'S yfm7:t:8m쳁o5p>tмA yWBh2:0̌(kTeq2dTeP7ȇC zzm\sk#ƞn`T ]@|@c1 _uxg.uXۖ~l@u:DP\HSG=4Ee#HtO3@р} ԏ9\;;W`*\ǂ =!ITZGO^^zџ4x<׵gϓQ~,/Sg umiLg%n&;|Ru?f ͱ;/.jFy%c]4bs#yhÃcg[/&cGYݦa/L ecӈ˲<a0 a&Nl٢"(2֦&> d1?߿Nai`BiQ;9Cټ?j-bg;t>nP=F:4v ?']h܈u $@P Am| 9Qfy,}}6'EOewa w`#)>ȉyi:6CZ:μxact= pɬP +4kN'jځ\dCMtF1ehhXօ;wWSq:*8;q`V4o޼aL  }@qm ᬱMmvΤPjyk|RfkruJ= ;yS˶=϶yw-Z9CD ϼsk;=|GUB*X5{F׵۲Z+dz\OӇAF]#dᜧ+玫[~*A{#zw3Yă$ IDAThXmjMT3kxgK)cjlz\Kf6~ht^Q)\wlfoW}Yns6xu]*b,5ف`Pa*KcJCll ĭa*y^J.lf`njoynmO`c_~e69c{ YFQn @F1 6ieDousQ~i!LhH74K^:p|zHVU&z:ӟy]ȳi?ڒV̧15~<3B: 8lB6[R,ϻ߇@s.H/??\eOf$ SR7#lgarЌiG@ͥ]clM-eF;fχ;-ӡ}&o6+}4ghP}[޿(vQD9B&ej ;2ꓧ|qͫ׼9_cp.F(:ql]޽kw #, RYz NSǑK.5|vD: 5\c江a(l:r29uҀڻ!K/Ѯ #/7 8!?f*[-i[2aؾsԍr7}IL:OmvO`m+RZscX!A5B4Agؔq Zˉ# 2gܯqr~\)^KMly{.4zjʬ5kjx\cNjBXgsgO -VjϿXxk!oZȼ\}_Uc,/h@;~" RV1nG 4\LZ4JM>,׫ە P}R8"43qNARP3VSy1Ze\3X/GN Og5-6tn?c@̚*TM^^Xr$33{ixO`L~T_]3(ֹBM(xkژj2)4..Iw#tO5Z ƾSF-m0}RܘUxk6ctU+a0 ն+\+(G5=߿cxu.ʲ]H]kCt &Y)a[jK)^M}X;.mP˗<&1lq5ԥp.SYBq]{-]gf$J{ɗ'*z̦]ؾ~|ݗ@br&v@#&=%۹t̎H-^zq/6Y@;H%RІ:m4+&)xGWdh5H3fcŸL}(+.!?ڈCehC65 h f ~ eൣ\ϵʲ,^<ò,\\|x>i\糡uCQG? #a$¿LQ)`#aAN,ZZ߼!B}jq\Mi㐏n1u@D<'HQ Y&6^g)O= 9r}6 F]mq.eٷ]j(Yk׹8O3T5rT.l`)ao{@o4|H{?q4sh@2Xϱ/h=*UdB"jZJl;~D-Ζsr)9i!T̞ :Hm=O&IUC7pjǐ~_ra\g2&`w\1_8&F_Ld8V/'X%YE`^cVϴ;^3i\2ۅ8$R#I]Z:)ԎɐgTDzg9OP^79&,i ޻/XG/hm0 K]Gf5Um6"fǫWb$!A ෿5ywܲ2t+7D}l 2HH>nh>kDwjEQP~yD޻.́Q{0.&x_6b2Q\.rz\)3A1jt`am9pչalo@Lqdv%[qf R!nzu]ͱ☱ȅLEB]3ZAMѶLeu D:{,]m _ӳ@Li,xvu%(̝{7c`,T&ԚfA*AXY4j1#> 6: ɿq&K.gU/m-FeP5ȤfvFdHI @RSVAh5"!PO1 *6`k4ֹ7o2(EV)k㚮ϫNװz߫&Y3BͲz4d֬N;ka ^i0*mSٍW _<2 ]y91\8]@,{(V4>7|co߾Q/rEh^qN0/eMFkJB4mv\1Aj66?X 01ԁ{ ȵa;t購_X^ǠCesW dm4'>e$жظ.Ͼq^W1}ls 4Q/hyueaffR]槎kKW.~75X4K[@ Q7Rji~AC,3gգoRusMB{ ʧDAfS! 2-G1PA%d!?jx7+U%gVds az_k) {_<ߜP_n ,j,mq6P6"N&#);,,CUN 1"uހS؀#4@S/}=Nq19Vv JXѻm,Kֈ )X MTUs#mCR6&%bR~g!Kg1;Pk=};rX !󚞠^滈pF{zb=x;*]E@Wg"ۮYrYhg9(& >0H nE;k>F@y 2]@ S[>$syD$d[lW&nEh *= 8AйLn5M>ULք423qFrhj6C8dVZWz_ﻨ=X/&6 3ʪW.Eش6YܷFߥ{acQcUϋvd8ϲG4uGպ3뒖{LR½][4l1~ȕ=Fߊ]+(yfSp5jT߂ g!?Ciuq`_Y٬*l~"LDEEHpMv|N OƇMu1L#5+`-cMnņX.iP <5J= ̗'eg^Sx/4,= OIM ͎L<5}W5-g, C֑Qk3 e-.+5 B嶔b7@M]%D0Gc.˲ HYucdAl>7+R'?׭'bxaqaZu9-9:^qORR䗴/1}|mf913̐,\e4*P=xԵwZ5P_5XoR53*mRN.NS=hMi`~B[; zʱ6WBĖ`P*ѸjSϯOt ߻Uc5Iu(oDiHY\rcE҆6p%g$.q}\aj 2)>$LH{=sr$j%]m|e9ҏ`f1+ h5#n53h8[gg"3c*Ϧo@clBCptKVH 5-45(č&:wQ7~h}dͫyRT"yA>Ŷ_30,E\  D=PH)>R7$**Tjsk]JsDgn!s<4>lt5ZIS#6L{!Q&u>( i}2?~}~ڀ3WД:m*B2kR_#ljf7`jPRbPQʏq_. W9 zi'3[}|m@z29~sU? P),$ZQ%amYT#g `pPTg >'6Xöl exdi.:Pxa}kkv ?XlŦδ`-B.S0% 2:I"9N( RTBK3Pvhr<>91&Mo~(!nB2i? U&~*|ߤ4wÕ yYΟ3&(1bOZr]0|YJ%EkEi?ߞ9rO6ړRޯݥ>M;HJ_}q=go2b\e^H7pDCg*MrYُ~:6n2kpzÆa˗/r>K0`6np /.S4?~l_}ggյ&} }^ D%@ }wZ^7 BSOs ~(R (X;0thȾX  OT a6v5w( yeGUw^ 򨛉woN[=|0`% !>bPj~j:f}ՓO6`n@>^z9rZ2kh*Rs5>5XzSS{)(3|K]y!8ZI[h1SNOG-/۪[ڹ7g" ):se7{@7//w__9(H@PtTP[zibu ڣO=Zkwg0sf/̀|j%P`}v#lʽ~(D/i|ߵ>w#oV ]!r޼c_uւֻ b ^g<3xdaRɄN߇ீ4aHeQ[Ǩ;}k0 J)x/B;]cOtWPlsQQ!81) &}o4j5){`^IȺ9nƜx֛4y Tw}uo?^btu@n)oT``Ԑ݁&7XYfr7]=ޘBV/X-NũE)j|Zi ip<1Mh YOߛ4WIMhӎ1}:ckvYbw_}ڷ zeoe/UDu(G6 FC6&=jŅw-35[د}NRlu+@N!`?--=#q 21JaXP }ݚ Ìk ZA{Gu-N@9y7j@4M yŏHi5Y uAp Gm0>/|Y͗}kDMq[= @goIlc)C5~H$U{ m荁j)Y ŷ㻨Xk2ı*Q.T Tcvydʾ|}7iͧYr1o H)?ZCѧYCTMC.B"H4y5.5#}q  y7$B]DEx) -+{Px..p͘kl`t`of|1[9Ho1%MrՆujoLePWl0 p)˂ (pP0tJHR}~\r{~L MCm0B]v)H uH>4H1 @mjyT5~X)#g}^z}ِO G1Bjh0-,͘Uy#֛\\\~7Y6x8(﹂1Iv'DHifV[%:@VOmF=]rmθK3ddZt}:D' A*Gc l Ԉ%QnSþ e.QL Ǩ!*ucU$>czH|*4TRAFж;rJA_cf?j_<_~v5X$Pn1*e50|r"HHOC}KA۪]1 |:Lq6<ϳmauvXuY3nԢL…{h0;R(yR%1S 3@Ax+\z.HGL*Y+,z֯qºdL)!+ R#Q;Yy#g}~W g S %HM^K+L>׈ۻqh7 0trvQ}NzrTd(gFnG҃"ehJxuwWuﱏ\ôRT{^{5D.#ۆ̏խRS7mPՁ =yʆ\0_]]ARa{(TE{(^2Gw.sqd[t%ʋeZ)N.=!X@МF4= #%τqVmuS+^-/pyxyf&L&n.z!sc܏bRi|IeݫudnmQ{g)GHuyIʿ-.tnIIBV[<۟*uzQEb=3d ZMO^|6(V9ی1*ύ#uBFNyv6ƎH\O2AD) =Н|+$iߝݒUlzp˦়౎>̿~Rgsy:Dfݨp T!r$_}{V!/ŏF+rCOD]9i%UZX{F=8Rx -7oFeLnàhˈ-i $nF֬ϐјA%뀫Z^OO-~5X]2]~=[̓QUM)xOهKy>+La<(PȻP B9@ 3E:g>MӼnm"O9> ]E%#GFBFҀ~ePTW,Q"{a(?ZB$t]wU-6M#ޓI> #FKWT { " >aS ` Oz}}l|4M&l6t doҘA&cQPu[2VumUe#!ִrbƺ$ @ĸOO1\FJUaHU0km 5P^b-EQq0aDIHGuԖ'Llھ/ Timj35T7omԘDDFlYaՉNcp?Z90g=5$)d:vUzLP Plm5K[-J>dJwJD A0(w ^qxzd/DP|"E Yڣ^ޤl f1s 1"ᯯ.lAs5G]2Yi P$|2 VA$e "9c( *SYSú%AZ>{y6Ѐ"rF{Jٸ"S3>nmGoj,Ji5'A{pz]d*cf:5$T` m 6OMRo@Hׯ_Ix d=o6 -j2|BbX׃[>D fOLlYS[RbI#ZZ+J^W:'֫5uO6DEUdM~>gXkk"+}4dC_ӓkz*OC ωT`񛛛XWWW xRfmD-Oʳ1z<ﲪlfVBZ6Xs3e?FE:0jJѽ͹>]sj:o==>'ħվHhˤri (RVB?:c{5Q%ض@'\0.Ia#٥F"QʧCB*9I/#"QwJUq"ɒ1T7T Mх+`g-]w2T: x^c@ew{A{|tz*-)1'(ٳo]\|ZMPo^So" >-IUr R`)!-ǻֳ0JZ?y ,wcE?`}3Jg>Y0r}>ײ볣|6ԙ2Q 0%ʖfC&t@#!Z%`54P|VсJ\N T BD%+'גoEbbX:q@R%,@#\yU[=Wo.*U۵.xj\̚俎3ep^f0a~}fAMń!#T4=D#7()3nnn7.*|y}v>MStu !lw?\W.KVi 䁈z,QupQ)7*1WQf!-FQpY\l> tF bcnuŘn3FW&zWv #_Hx&J{Cz Zd. HߣREo޼PO ptcf8~qqA!8#-.d7&Te]a-אV_$|JB(w+8m ;#ac|S[ W~+^ʒN=c ۋyyN"}0pK#_79#qf·aniEXGWgQҁ8JBu mXyQJzo(ip!R Tb@7BiDX좵'I(g[e HPT/ IRZߤaihrN$;L󮌩ɈhN<}#!tJڮֶ?9ȼY]p3vfA FuY=jPt>OB` #aΣA'טЕK/ti C(dB*sTwޓY%!)̶U5j-"}/ `m@Hyi"fZtBԤז~ZuBm%EEo*c2+: )ʮMV\}&pt$+8 5*^k5U&P0LC0zV ݣyR^@ljU`ϟ;O0 M7 ev}"ݧKR&Zkz]\\p03kFLsy vM 1୔Apz\%(6:eM=[UiX yFKWPSBhD!XLѶM#Fmk#p5A/P!*QM 6)!i` K91IBr RF* vjR ԩœ89~{н@Fo=dRW`0yCPflNtVUE]ڎu3jt?N|qOEL%8]_%ظv-:>zԆ*z @W38(1;狁[3^"#.yuO"ϯ,ɪŷa/:7ek1SQX+P8 !gytW2O^x_}S}%w5QO)fHi8(5yaza٨L͎HIZhpj8wYKfAbr0ϑ|F="%aܯLHP- @˯lm(s+2'RSpRJ]jl%8 Zi6`h2{{+eUo],n}G 3iXp{ {^w;w bi,sc(g.>Z"PϤuB;lCv#L&6}F:%|J\۵s>l7" e@fP"e5Ưjy'M!G |N"3PC qtyyrE t N IPD`3Vv2X>?|d#ugXJ7^d[6@,|OʤRuI0Mϻ @~odlC*%+1еڻd:zi?TiOUӪW0N{^˗/ ,@fڦ,>A A WC,zU=r;X?A IDAT#v%8Bۉ@?F)q'Хޑi/"SSi`firHF?& 5&GL  ]1Ywmy(_[<`e OlZ]UZ Y'Hdv=@G?!&9 CAwr!;FB݄}L[/ʦ#u f)} `Nrb=^}K4%Ct%:N:<<χ&Q?h >ḨBvQѨw"{ěwU/.8TNR^]J0M?X_]]p%Hɸls̷#.BRq B̌˝q29p3%B/d!$ S9ӂH;QUg,`mUM#AIn[<ߑ(ѳ$t`G-lcń t7!0W`RRe| XI!xXXՂJǀ60]-ZtA 4(kŌHlR۱ɱZ&*ngMՇ+U3=-̎gg %fP8.f9X`݃&ӨĕcJ4s8:=à&ۢggߡ/`}&v-bfiuG꧆QN%0h>] VM7:ggQEok5Oݝ_]] 6 S~7 %Ơ4%Ҙ6MHvYlh!ֳHÍ7.lʰm{M]^T#@ c#57H(xP,dD%ȃe|ur›'Q&-C$)3jB/Dod 0b^z\n칶J@7o `syygvuueꟍompxi0:ᶡ`gvbV9|BȽjpTIrp&N&3hȌ.@X~]o"tUiR_47a=΁\3 )VfWY"\:= mH'D"WJ{E|$SOCg} 6m̚K0 *`q%Ah |PT 6c]߶ "qk Dn;?L*Q%C 2 u&!"LW]; ^ZQgI$C[D]]]K ʱZv]=qx>#Z.CR4X<|j7e嶵ZƼӍE$pTфZ50͕)O?tgA' z̺Y[ GiNԢ!ipL!UƂ&UFCY!r t}5oQe Bx 7& h>5<} f$hO]:֤"S]~r%-]c0e9ꆻͻ]hIlBԑLUT-V1 (<F@cb5j*ҵ F`.*:hgI(A֦<xN,f%>:&!MݛƗ z#tiB)EFL=kmhѷ>خES Y$G)56`' ဣtNЄ&>]0nʖ _gi`R'{! i߄,mKUl#AL{N@yT`"m(SyTgC*P DC׆ EF`WWWv{{%///m+cp8di]Vv$"2p]#TWTOJ{6z={n>{[un n<`Jߎ.T"5쨚(hh0WIP(1Os>TŚPcZ>dVAhPc "t|z?Cހw V@BRfPP@`fxYH֫@F(. @tq3 \^Yg {S`86844km‡D/ :P SrG uCCOmn}pU1TbNgI\,-(f\/^kA1΁@j0drPHMӥx[uyQx5...}yabk׫%; sjlY*4y&rm88 u 'oy伮: u+]ftrN]z<+W#_ZsJiHHARs: sMO^~M&@IXDk}s3bNFx왷%9˔t]ACغ:f*#NZaGwl˳q)u%1  oLd/DDšʵI$)A$Rz*LA .{(k[+F{i\x`%{ "=d  |XI<^;/?Ceo|M~8Ks-vt>I% DL4}'f7>bl !ntwq)ُvD@J֐dzvƨ*LLյ[uP{U2-ehY6'c@f5c9L)b_cEGL2N#ޯ!*=sEr|AHy v"98$ZN%A :ѶV)G ђU5H/mm MB'4lftj5"]/Y; ~\؎CU55X_'`Zvm.ޮ?$f=iJAVVʽzCij  Tro'&S! [="dBz$|0:MYޫКD}  kCeZʌ*# ZzExZzrs<(` | <l%\VvmF"\L!t,yDF5ȱro9e䛓SSu,u. +6 4ܧk2At2@W¶1eބT\x Tд@aZDŋ˗q+3ߧ{>ΧiiVyv4z^yI9z}1o6*cy!qa;7Xy!5$ X3x-6~p٠e;ZD{fI?U26`tmP7j,:0Y *}0D7;O tb_0u9gJ7MODXF^x8˗/\CGv:fIr̡2_ZGC`@;ϧi@X]6A$F>GqZ*N h<sxyPeX00`"tAGʓҲlJS)׈auØkjZZ9o /Ea[l4@{ R`t x9_KKp7uiPչe|bg.eւy\`z>dS-y)M}ij=T(˯NJ4naҺZwiysy1E=nA̵@ruʫ}?xcԂ:] CMNmώ˵oo $l68ʖcUS֬~o\5'1a4\ZlӮ^0 c\7A{7\Zg  ls389iV0 k̅|7&aU+ajDDCz.cW?]YDVgp4A01~"R2\g :kp%d@b~2A;"F 1Gɽ%䙂@r 8넡]S4 S!]KٖAcoǵSw ? ߗ_X][﮿]`cAm(wGIj۪3u>SY2LD, yMÄ|'4lG33q5/ཪLQ>[䱢 ЩF*@g :a kBPuIvH` x[5,  5*dYGK#$}/Z0mkSo6 !f%v*ݚV uգdͥ<- ^fcLFf8$:ڙnjp:Ӂ#Mcw]=а"G t0 H%`! qB2()*zOAK$)jfD$HX4z7Iq_%gU#tT˹y5ǥk~  sPG3!,AC!ho/UIO{lNS1A6YiJMM.udD1 =@s[ǩ$Pҭ9 ُ(_f *o|KH7%0Qz>dP:G|Uҏ@R0?lL8r!Դ=BD2eZE1zriRʳ1I* fW&Ef* V`Br(Ȓ=6! (%/i3HciI(z AlLW_}5|/H#p}@m8 DS*ķ !JА.!NiᐁHmL@H.G&!XA=%vosy= ovvJZ%&51dIor 1Ѓ*cp,Ba. ӻ `=ի8.#rqmrW0f$kn$n6mU_D֖?MAI󮒤RT3>wag-mo[(s Mt›Z2Ge$^/uUTP%׹JcP:fiR ~WZy&A)U%"PTY@< IH[s ۭ|8h(\"IhG묫QՀG󐁯5kAwD2v8ku%0 ?am#L$ؑԮj.^򣺔l]fVa~E:N*}_|`D!= SyF@:A 3N^vyMJ}BzJE)-U$ 4WUBc>Cv[0M;2ٶo } W l_?z=qo)R;HqE l6IIidԤBMWWW\~xAr<ԍL.+d°=X9x.YIA?#ƚ$2BGmPd -eJeo'/uMDi_oI՘`]99Q\z(/0Bu~Fot Pӈ01`3UAYd$ǔrr ]>~e@P[i<-ek Y)Sl?^-z2Y#"k8sX!, iHp-#}㫛]JIUl0,k@WBH(ޯkY"AґTSd\Hv`fv8ž䩰q"Դ0^LؤKyO &UT%e2ȉHPGty7 kjX^#H0` b cA:#Xz.UydTǻ  ⷑy#L VP0hۈQiB( 6^k&S;k@cFtƼ<@_`]S/mej[ϱN'o?xG2#V@"NO] Hn*[eĈxbbr*^v#+>„(s6E5?ю""h}؀0 dhJyi$y"=j:.\\S&HUyj)XO=$ ~ͧKrn5k:>I$buwG9@'yAACS뤷k@0I+h>MvXDc jG<˶sVO"p9;=yp~?qY[cK2S(*ALݶt ,u$ 1 ]SE+pxeZ(B%SҬk-oS)x!A!XItq|T7 @~O%4M81gL#FL]'T ߙ)},q (>{ff" BpEfzZ ⪄4k 0IDATTr^UTm*E;[ `~w=X_mM¥wZ wwwwwwG;~C\U)PG;6\$J~XhD>JAQy R+uYPF|? b!n1YZkPG}n@DYNQ2EG<33@g `ooo9(JڵR\i9*H GA}CTF2]$\&[anp8b1U3_l|/@Ԓ(0JpZrp*yW[Aeb2 zE! AB JUMkpLSV˛QWkp.mc%x5F=Z)Ax*:ȏ*c1jdi "J\U1ȒɳT>G֒D:4aNcOA&t +qReLtOޯk%gf`=-^tC_4@1 EAMuWf5Ž{J5ʟ| Jy;P}f$\w}ۏn2Г:իWnooށ...bhjA*u k(UUp7o\b*(|F2m6a)Fֈ;T`;2 rE(yI{z9O\Q9vQ[.PsJ{Uի_mH1BdeaebZ{ 1NQS5B,ky[ B FӉGmP Cc9>~ԚN -&L#?)(0TS$m0`Z3w@)Puĥ=TITYUߐ}"KWRb+3o~ -hy|F(i-c礁sYK|}vOӄ;oW_t#x `R81v(Վ a9pww7&<Jf?jxk̫Dwg?Y /M"4^[S7a*!zȳi/^xb6 EtFt;9I4;@pe㳉gd4o[5=$|7l駟.(*M"g WE(1gnqqqf_0J ֨#}$eLԛD8_N%ݦ/2tyy`%v z]ߞ̃(6+LTOd tȄ`gG?JT IJ|??ʟ={x?|_8_O?уAI6qyyl2U9i~KBl6nn WFmCOǕi{  xpNz1"-ߵA陑x2_ՁA~Gmfxݱpyy`?EjZ+C}SHs e#ԩ#>^ȊOg2h.(L?? 4h `NS|LzsiJ~cXsT]kL/V!CfOO:LыWWW&j§&~m=5~%S0l7z~)_~yqGw,l%kDq/\ N $9xj@&<>ǝv픛>>Ez[pJX)qOZ!/2X Fpuu*3\sP9_UW}E :$LwX?pP7N//Ʌ`*3`&0>SU1D}Yי$x> O//ߧ˿pdϞ={'Dd0rڵJ,m7OAQG=CM<%25Fp`ߟeԴFJؕGdSg{2>&~CZIazߞ8)?T}+|?`}]TO%)L ׸dYw~j؈5]&.sԓIENDB`criticalmass-1.0.0.orig/data/bitmaps/vipnaUpper.data0000644000175000017500000000231507630537344021747 0ustar danieldaniel0 39 2 2 0 0 [ ] 1 6 4 2 12 34 [!] 2 6 18 2 23 9 ["] 2 1 43 2 13 14 [#] 9 0 58 2 17 19 [$] 0 6 77 2 49 33 [%] 0 6 128 2 34 33 [&] 4 6 164 2 11 9 ['] 1 4 177 2 16 38 [(] 3 4 195 2 16 38 [)] 4 0 213 2 15 28 [*] 6 16 230 2 11 17 [+] 1 29 2 42 11 16 [,] 1 20 15 42 17 8 [-] 1 29 34 42 12 11 [.] -1 6 48 42 26 33 [/] 2 6 76 42 32 33 [0] 7 6 110 42 12 33 [1] 1 6 124 42 32 33 [2] 1 6 158 42 32 33 [3] 1 6 192 42 29 33 [4] 1 6 2 77 32 33 [5] 1 6 36 77 32 33 [6] 0 6 70 77 31 33 [7] 2 6 103 77 32 33 [8] 2 6 137 77 32 33 [9] 0 15 171 77 13 25 [:] 0 16 186 77 13 29 [;] 3 11 201 77 11 18 [<] 3 15 214 77 8 16 [=] 3 11 224 77 11 18 [>] 1 6 2 112 32 33 [?] 4 11 36 112 28 25 [@] 0 6 66 112 34 33 [A] 1 6 102 112 31 33 [B] 1 6 135 112 32 33 [C] 1 6 169 112 31 33 [D] 1 6 202 112 31 33 [E] 1 6 2 147 31 33 [F] 0 6 35 147 31 33 [G] 1 6 68 147 31 33 [H] 2 6 101 147 10 33 [I] 1 6 113 147 28 33 [J] 2 6 143 147 33 33 [K] 2 6 178 147 23 33 [L] 2 6 203 147 37 33 [M] 3 6 2 182 31 33 [N] 2 6 35 182 33 33 [O] 1 6 70 182 31 33 [P] 1 6 103 182 38 33 [Q] 1 6 143 182 31 33 [R] 1 6 176 182 32 33 [S] 1 6 210 182 29 33 [T] 2 6 2 217 33 33 [U] 0 6 37 217 34 33 [V] 0 6 73 217 56 33 [W] -1 6 131 217 32 33 [X] -1 6 165 217 32 33 [Y] 0 6 199 217 28 33 [Z] criticalmass-1.0.0.orig/data/bitmaps/vipnaUpper.font0000644000175000017500000004542007630537344022010 0ustar danieldanielPNG  IHDR\rfbKGD pHYs  ~tIME 1i9 IDATx{-Wu3sft%]I # 86a9@~p1Jv\a A/$B`M?X$w^?Vt^{w3sϷӽ{^kfafCR"MS~]i$zpA$[m.}[GF>K_ {P \l52$m]ߺW,%ڷmƅbܗ=KKX0koyH爵1hC5M0_9ȃǟ>!|.;N/;לցsQ8Dv~@ |2"ҏg<{ECw ,۲zVM_lc>fv*4Ss3+g.kt5!ւyys[7gieX@:5 z!03.70:0 OާD|gɋٵדs[20>gϱ,U[l'k^wd4xuM{/MAKXFl ɸMdorE[24}~?H$`ģ32E1u>N |:U/JB Uܛ?>>" S=Wu)<QM[UXB& "vr)c#ƟU@Hg 8*n_A .Q9p "ZNhtlg8b جftKK?=rf] +28ކo#z>"+dqrޗ]\M%".cl!nUb 3y_gS?/#L*BWRxR4c+,œ>xp."ͨd^dj Z\[QW[ͫou+vJ- 3b-.@t*?8ųEոxϪ]]_!T(2bO i:b}#vQ5w| *i([|kkC":r5a=DrkcVsp''eX: *Fo;&XC&&_0ޫj] | ƥ2UE 㬨܂~Ե]T%| H#T!UWPε*.LYGT*J=]s2r6 mA\7%F/(%/MU[X{^T˩ rc"EDj|zf{Mc $gf6|tAеܴoꡪ[ȶGUw[[]6 d8.*zyMYL $Ht*RHS kPSLBPP h#xH׮v9yl!ViAF&Y^{u{mL PBFCw!NuT(:y +5ۚC%lZp>ЄڎiU\Dݼ$j8TiTjtd+8XF݁˓&B4I+ b&0-֣F0Mڠڋ )BZdF)5Hދ.aERt %Yxލ[gĚ8&+D&-9ϰ-?rNc` lqcF E+EQh(TiTb;=+'& Tq"?n=w="xb,.𨸍d Ϛ7}B*Zx-?05*`< sאHJU0tOlpW9UVs>v66 ղ j~[Dh-#gMKY^JmMSvKDQ#XK]+($ A||R6QN`dt=<[a]e.5$ (DuE#HZ|zU؏0q-V;*;*²@>UCKyE "4_4($S|k=΢ 3шKb)/9T :bn6x%2IR.@2QiSP(ϥܪ!!D#W!~1EXs]SLlQ,IH5- +Hc؝m.CbF&ZcgQ9Icb'|цT$I>[u2F"5K "N4 (o"1 -9xiw|" ?춫Z~mP%hxhFS"+/RnJk{)M9Y~ 18";}1;5rއ0_u"M1u##5Hnʡg!*Jk?p?^we&ܵ ;YXκU41?K~b׀@J![& cweϠ>3k<&_"U@܍El_.6PS䝟Nt|,;m 2Z*)IbmD34GR/Ilg,"|Ic\_s!MS3HtK4}sN'sfaH4>/Ot-MNt1Mӷ\i4Mv\ءz]}fa"땈DSEn|3S2.p }H;Z%i=7c35l"$=3ȧzCl57Vvxok~ĸTcL燐 AFfaf(!{n-'N>$I綫{)UZ|X ;hf xycq4$I6Jߏbү5 1ѹM "}OagaTT$:Vx}/J\DǞKuɱ̇.& ȓ@t1"H }UCd҉~ >G]9&~2sx9{k˺ 0sJft-vmqb)z}-,)ϼLiB4BI溦׏!x,.u"My7Z/Kt\dTMLu?L*izw*^. 1>Y.*<4]踻᳇- Tk27%t#l/5M +o^B{ML)[v1{'\L؝xK9Kl!}_a2:Dƾ/[S>ߝgݠ^A*cr) 7)#ę`M+H&k] h)gt&єn.J;b a6)-(!ƛ2XeXBwϳ2Xb|MӽgClS.e(䦝{ȇcl1YieDĩIp2:GHJ*d}BKkQ[!vj}_1X2 OjeH<"=H$v7Pm!V[3Qx-#dZmxwn{MaMjV~F zn{:%DK2s-D) 3-2Rd`AWkKQeD+rS7,Jk?̹PrZOHzsHRAPU9A|%,)kT5Jiঌ`ipc]R_oe6ɭWU Cr-A1(DM5BEO6%V]C8KJ:Nk y9ʄ>F7OD^lHh2(#cX 'wӵQcݡ){ 8Lf,"Ewx9Z[kEWbh 4}v[0xYl>:6ge`U2 Ə'"t|5zu u-t"]Mm3 &5| a,x QԼw'}i'-բLC"T:1y&y(t#wL®~Lk󁟥yaۺx"uh*V6E绀d'<ԠTqߣ1f ۗEn H+ L>k>a$L1BvYH˨!z~ppd#J"Ci#؋ۀPL_Z%c_@%sarŊw~ڛ}ͷ/!ev=- q"k@7Wсk,!ێ$_#%%u$OТ46(B2MxJ:LL U7|1` 1PBUe35= ʌ 7,[}"t!;{< ,Kqy!73r&6F/.$1bRgO Pv 8H*2cԔPXT3)Ti*;I/hn_QO^l|v0_mm ɾ;r:S)$I>] }4=vAB^/E${g׭#> ckc,wfrw>= 30 30E4'R0+3V4q\FFM4kg\. *я$IKBm]Gb_thr՘t1kSA1޺j:'I]Ϝ$<=11_8~'{ 2\&_A y;^s( ~"x' ϽFs*~ms-) s)t)9Q!MuhyI]`a}2 .bcEI%] 3izY,A̯ oE4:B$_ ^]; UdnV:.C<,^w uh&jm}ӿ ē2,4j*&,v :.Ce]jӅk73_%jP6MH&߆jwm>t#MӁ$7xCGOzf";/,o{vDK0YfTC -75v!Mӗg-M_N :~*ΛKmwb $pϕ,*}]Q;[W"ܶ_,:ԯ2坄:dýeٱi x-Rj|46Aƍ+5\1mdLALfQBkXa$e&t#dSWx.6.G3O!tkٙdem{weQQi x42)VڴPW_a Țҡ5d 6{V㓴\Jԝ5.6+h' Tc`ZAB'Yy\x]$Ȁsl;9ƹen#Fi:}F}\d:K~Kk `yiDC'DC-,LJ|e\q2yn-WvSS oy'v谾 tt7M]&Ϋ@X]W?dxl 蓎<к;egM—:{$AtyeXtPU ]m?d<Ȥ70yFՖk]5KP Ff7ěuմ-ewдEݳiGHJp7uV_ I Ʋ䓸~+V8UKH99W`$ϽAoK>luJp#X>Ǧ`mRB0߇>_ӝi@.S?T'k/Mtw04}{M[H){m$&P鸀P Yc]O½{M":K!}>ND~W GT]> kAM%`EcɓYN p ï҈$|)N@oD|J XY IDAT*)wq]x^t34I,4I`vgDNT8A'ޤXB^ yZ4}B]B r'bx=@$Q f1YSQ}*m}ӖO}''}4/]ď!/P]˽:/TXVصZs&G\챡)ƾ@ݱ!ڣ]Kr(,\¥ B5 dYVU$)|.S@X~r&]Uap]>[~deEnСʹkW`U\B X]$X`,Btb߶ & 3a鋾0!c~dLFT[xX.xօN"M۵ XQ|tb 7 He(SɊJOeu;?o(x!mqGwt-cCۭ2NH{jdwtd{Mvq{XOD^l~tܾA?;o@ֈ[@"X-b[ Ž]-cbdX31 GIa+L~ 4E{12;-Bl#{?HgAc}t<\ &ψ#FZaW}JWcÂyˎp.(!<v'$Ϋԯ#ˑ Ʈ5M;i!̎/@$xUp=gFOIK_@78An#CQLt;|ы4OhIhHǃpbIU"IZ/H AO/žI3ć+{ q`⊺}{;tiO (KU"Ʋ+>hGN7G y @"Ʋ/~a<]C>.%Y'^վwL*-VLZؘ!2DޒFXO O5>uؕ E;tvRWt8?T$ı5qZy'g RұeC:#Ȅ5D18ќOiNwx>O!5WWp30 30 G'TیgN ;[xu n.\ޕ=bn pyЈヨ7GГhrբE>9-{;atIl8}}}q Kj$Z S7A^yr5 _FGDݞ}!~izyy#vl",`1^Cl]5D*&k0ՐBA1p4f٤L(2' K$PKVT)2S 7 W]=1V{& -֐0*e. *5Fu9c}P{$[#Al˨VTyL&p$b)Hiw@v BBwȍLQ휏ԬzһpL>T6N:=6%I~^{_XXAVh_$] S. #  Lb)bO}e{SPc~-~'5kP3Reb7i=1aI4q%ٶJzA>olL"St/&A]e֌]?s\m1Z-d t3",XBA?E*@KŞT\Ynqs-"bWɳAV623e=6*IE^+ ˆByl [h0kײ߭}XDtO^}?S 5sXkp!&tw@{]"4sH4."^a‘7&*@RDu}%k 6-@}XAg^Ӳ%;mN˪gaDKh.Omx#Hn`>[Oؗ}>odm,!-B~ 'yRsL rVкx}Xƻ2 LM$Q?\SWQiuC "Y]oɾWr'O |&2əj_ $B!b&/e}zHZPTFv1" vYeg:f a>FuMkqb'8yXCӠ:  d0ށDMk)y(m?~qe= IDvg*@ mN)iI>ϮZ>ul,!矷# ,RItu(^}Wlf*@Je/d!/[ѧb+Sz\EˈpM1JeQX\Lw Ͼ\G{ /*+6umR|w|b/B?rXA_;!ߗNLAvj.L `عh|MUEɻ)g bUu~ <߾h\ˀ q !o2-ĵqo!-ir Qv*:׊: ˀ WS#c3LBVrqCK")"̈TD_ed4Dn* FæiC"61UM~Þes哣% џkxd#/HrҢm$qx%n2ZC42èa?xeUK4L|ԁu eHM3jZ)R_pvο>@s-A >: g\/BU,K,@q! [g"̃H }%B%5 %=%dg5vOu;DZbB;a};LB*s0TdL}&9nNt(0.ebBi@^Z -y@Q,nϐY4 Gb8[mvIFts-5ʍkssY~ 8@VQ_bd'*/"^ Z%&xʹ=Y $!-Kj;Db}D-?wa7 'F]9ip#=RFN]oih$;ub@}nD:5KD_u%;E^DS&~7\{GVB-x dg"Ǒ 4$ ez+{!25>\$72z a%d o,@KEaLh_@1#_vǟH YE}$++|7k?0 30 3āE4cz2y$I3\~WuH0Iu,m!*;l;I UǩA[ I- ءt`y)\#lmz;:Gg!-Eosf Eh|.C}!A`1< 1Ľz1Z]79r+,zƀ6I6 6=Ofg`h2Mc^צfy4Xz2cy,+$,CvN.[9r1.d܎ p4s$8I:ShfIE7Vq :G5$ڴ u [qK5n1ж4Xl܁Hgw<&|"֢AXokd^.sѝ%K:$bew$] I%⾾󗐽w ɝP>ħ Iz `TF5LUuIf#]K8җ ykÄ@k+Y9ll:L3J_@uoikTEѽ ˴/AX:b#4FHAN `GOD,/AI}06Dٲ ; )Zpw`8%t7* Hiy;Bbx;0 -Av,) -*`{%qUFD 8xe u[Tiv|[~ |xiT Zn﹄{Wv*BahhPNE b/rOۡ[P "G!-k8fMVEr+jM,'ӌF2!9-hvǺQygS xXIcd[}7BChra7UW$OIlCY{eiUL!Rc 44%X@1Uty/d>OQL5?BuAU&0[c TG.@+_{UpKqW{yeӬYcZTہ@5*Dc]URc%*04WM0)`C$KHjӮZ$iex:tZ^A2| ԡE.C 3ڶ_ov=)D1EiC5'ۈSL DͲ4k F<"E۩x{MX"cxR,R!VcTsGl_ݮĈaxMƍ[%9D]+~/qT#?bc}aD)v M@/c#SwiHUc_ fT&hE \m<!X>TuRR^P~7#06-B0h1OW= aDh; L{5;ݼg*@=Tǫ[ܧ1u>mH # ?$/YCccW"/4oAhrx:%@˞ݿ,߁7#zUvϲxȴfafaሟ|nFD $I62kCNHx#MHGq{NCs?\:v}u}ޘ]18h}t.3J&)/ʎI `<VBxBsɳ<@r埇btzed01h{ĸNP"2)pfGtQWXux(cI\w\G5/6ٷeD&{+Oo zZaB۴&?yi__z9߀w]#QbZm!E\~u!e[v^3o &*b\FXcڃ&w[H?gbv!EdQnV%d5i+thxw~o_)Lr~H4kAf2%E6(­ֶbv .C g s!>:&0mE= HP%d .twi꣘̯+K4RWP(Q eu.bLfL`dMS2L fޤ.;4l 6WBdEJ䛆>RDz6ۀnU @$(^Pbx-BK1@BPc7i@[#ݦ)iWb̗cF]_R<t|I^]\tvK2# YU{A\uuJ}=c`Y eL p {5*@Lʰ]_C0٧ދ3b*}o$~*fG NgUh[oגW:kTv H%7^*@h#ƾ_#N0}G]$ΘwKYWHCWOw jpi]V>TXh]GnGD1o Ŏ mqm2{I$z,4ؠcmFnU%b+*Q]OM{5:mq- ނ6A (rŷ!-bMaǓb%d {B Ҭo@&>ȀF|B]L i!~v3#|BvMY.8u!҆=JSopOt$>`T]u*$3kAgEV%2 w_2/_X|݂im;S4(Bal 'v)pp7iPEo]h\  P5 hjJE7ܮ1G>`.ې`Te_$`l2h7ː} 끧~vYb/: #$-4hTeēAҩ7ӯ v%6ۘԊU˰ G*lZKƢ R"+5I%zdh^u}}6~O>q4:^62A3עOু0T+qsg4I鹕pEgK/"1֒]? ܍_|_I|ӐpB͵%l 3Z/?4M_]WRǨ@;4i99kiy]Kes/2.n?u-MӗW4ï"@\̖Iv^2nc5Ot*–] NB8] Y^dgg\BV!""@ \5bu!]s􉈪bb֨ 3SYȾ;@o 0&6s=dl ?D: 7|B}eod+X2>F7>R.,CH???c;TAšoMd\\?VnpJjخUh"]X`Wb$uH} UVzg' |=%9語S# yu蓐g5ĮQש̷taB҆;F3*:ߪ"NZcz>FW{B& ijXg?YV&t\^zv7fѷ$7Ux#!M-d:dR|2,'Gp',16m6FwۀBO Ȁw_W:,Bx7 ) %4n~4L ٔKY; bͽ jfY݇*0:.B;}X%:+T| aq*6UYi{ QU=&E,֢(>zS]V|jFTKepE!#ۡp Ҵ e;E<qT.BfL.B+8A˅Z&!DJY}PlnX"nam`{ PClM50!ßiW )茒,{ !_)ȐǶECy ~矦iK7YܓˀOEzl^Ts RW9{⫄%mF:/K;m#v矦M*?%kM(~kemݷg3anP{[tb}}0pHP7V)/ietYP\.4+OH"/k5^|:[c7 ߏL[cCzBSW}Njm{m&)x]ZotZFsFc|b7`w±ĥ.Z#H6x2yP/$Yh5] ,6V?&HN}H>Sݴ yXRE"ĭV}+T 9nȍ~-?g ~e='V̪?!x1)J#1$A;^VR;cT4= *@Nz t۶`*R-bpMGW5-qt2q^܂2Q8$#k~`x:!W,y? xv)F6EpN8s],XB.Bk` Wo)BUeсox<7QCqGhcȰFϻ[\dg/BY4C}8,~ c|,ef Iq!u *y??X 1VJy)]EPK(/Tbf0\`!<!+ :+u(CKqy'jd տW^:މw`ZAe isѥ ]1a`MFZp'k΂2T 52E#n>- {ٱF ѪaJ kxZNXxMS'CQZȤ{QW04Ib-!eMVṾ T$c`╁X@m M'xtVҬՓ cM\r)AF!bMѥ pTU˫:i#X A'lCԑWܡvzz!ϐan1"`W*DⷯޏԺۗxCrB4]uܷ>U!.Xrvrd}+yʣT {y)$Co`)d渮 30 30 30 30 30 30C /T,[IENDB`criticalmass-1.0.0.orig/data/bitmaps/titleA.png0000644000175000017500000020762107630537344020722 0ustar danieldanielPNG  IHDR\rfgAMA a IDATxyeYY's⽘2"#H2Ʉ(AiTa6*@uUj)5euk]6ZJ,[Q 2LH!!| {?>ݸq9HRZg7{o?㿼 "fc?+c_|E i_X쏗؃>ȉZ\y1=~oӾ?-YO~:;x lnnEhZ; 4MjZ!"!"cٳg -/^跻6_owm' v;'t7"}?UC~kYxg8yE 4M05dY6W0m 0MS 9gժy`  hktD3$d A,˄z"\)u " Z&4 d+zY^A}!?g 6'@q( ,SZrZ)3;縔96n0뉨*hx8ƕJ%`RrB$IBZkB1ƔBs8z41SQ$"%(Q!8" -:4Ӝ!eh]uqF`x19Ͼ/ƫիWʊþ߾`FsBk-,4cLqιZk!"D"bc,`iD[.]VWX󛏋{Yqc 9+sD)`P7}hss3rΡs%IιiG3w:`sL}, rYiJJcRJs#D!"FH2¯</ĭKn/]GU,窼[ p^^|)4q;u x HO=;i\dI1XB0/F?8q? 0e>7_^^j0rYsCs%X$,Q1Vn'^w_gz\O`=@b X+n&Gت] K1pރz<nce \S7M }a?^`JO"\.+!2Ƅ HQ)MӊR9/[k+O|#_gz=V%<`1$@l @HX6?K , Dq X{0`0PNGF#UDmt1/Qh}|}}]iej5PJE缂"H)+_xw/v?11 {)-]h}["i,9@|.CVOyv[u]vx~VmvEە@%IBI̋Lkw1'?^~`;B""*Qs^%sOW}cw_o" 7;@4~D1wSl-O=$k~ h ]'Nhu]+ju){Fn4Qe`I 鿙g[[/c%!Ds^85km㱿7ƒ{{LD1 sO} j{g(<Te!, -ȏȣn~/ǘet tV@>G̚* BGY(*sΫY5uyC?<$H}@>%޿7sL9g/U#`i/':v*mllM!}YkZO|} Z\ HK) _ꜫ#b1o^Usm@:mQ/7^/yɭ ʀXDWjhss677j<IP0ǩKV`^>CG=#677UcRʊeYSkc9}OollP݆VŻݮ2I$ fY\_4/P8-݂/}Ν }٠\.R)RTu5cMD<6|go }$ Wm AV[65@Oma lu”D pi ʙ?><|pwee677y@F#sa4[+ ܹs˲RCڲsQ1vةC.Y .}OG rk{rPx<=2`|6ϲ M]zsjnGHDiꬵn ū<[<طzBkU* e)eG8Gg"XB k@nSJa~ld>~%[@[8,w wi45,x<q,ˊ6dv;m}!#(e'f_x@)u~E_-G4 @4c_3[y*M@n>lnÎx:Z-v0YZ+QBHι*4#1!1ss9G!*PaRAJk4XV'DGaoL~~̙]7G?h{gٳ=v>ٳg_-ȊM9<اG9b$$Ff0W6$ILG2D̈9Oc}J Ngr{i -"k?|0 !|r\ M$I{[p^4Mq}} !pcc8ѣG|g._,ժRN~_-w} Pb`l ׋Bl3gܹNc766\hqC`s1s? AY3uh4M1R sΕR$D !@JIJ)bQ15@a r9 ЖJ%[.mE. 0DymIs $qA c 4Q_z\YYAz3 {x)y^ H8&&1Y(ii }.,,1EQ!38RDa2($c(Xz2и[;y`7spZ[?k-:PJ9k۶h`1-,,֚? /JJJ%)es^B4;>g ~mH9u&8s<h/Os?s^xv:h0Pǘ$ 3ƀ1ym=-M3߿>""2Ɛs֨  !|/WJ1)%Z HAhMEY& A0tsZXP !hN̉ReLι 2=zԌcERZ!#"WV]ݦ'N/Эʖ MSvQ.jUv:@BDy Bf c !`0@ιBJi3圣,;|0Rz P*g(HLQ/Gk ι$ gnt~>_hZksD !2cLjɌ1 AdBe @TU)鿼,K=BD yGF2 ?~` h.K V5yM~ƘښtN{y7ɛTl)FMc aBVcZ7Mh4x^rJEQRJZ;UJ)UJYRUJRΧ眤8@{D9j9DdYeE"T)K)c!DÇS7ƸEC (RIAjaeY%YBƘPYh99wYLϘZw亵B |DL8J2朏QqΓ,\PdT 0ZH),Rƿ/7y~<7}wW?#~sy~OuV^!$Ii2cL&5m6[I0px^3ZJ"&_\\䋋W~lQBd1Ɓ1N`Ā@y LlFb~ 'i:BZh`-ɥ7~|[uYI((Mӱ6.jqq1F\afV*^ץe_VBsق S"@rvtѤ.,lx|wʝg*1+JJJaX ðH3&8cs|Q5`gt*;•39?ϧY@t=&fɲ+6mvo[R !wE#yc=&O<1R*ֺkϿ||//a'QOb} < .{|;S?O\zխ~шc>$E7]kA5+{"\!, CVVe٤%ua67|z[yAQzn_EDeιȲ R7b .cǎ )v΅2Ԭ͟қ&sn4?U}Pw { \YYnss6hI95d3{Bt- = @kc(ˢV";x:|݇-*2"3%H_8 bE.-G.]Ɏ?zh? mG_ 0PJ%Y*XERdB98euc>b5B0{/('>u.{\',+cBAUkJ9s_uu% ĵB8vМ=.}"3Ƙ2 )%| a ʲ,ZGƘjO~Z/7b\t-Oko~6/nnpHEhEݼGqq΁sBRIj5աCX'}n Kdȍ\'pd㮕/p7/ƨ)7j4$28,OrÏ|U~O)xEL)0ZkR?-BTMu ƼNT0`/v=@ = .ph1wie8FeCT1V;c^+ !s_uxV = 6 `,-Nqs2,˸jjUi 9%up@4w;SrQ~h.>;\]]uhDq3OIso\fiA0+fyBI)!5ZXX`EՓnЬĔz52hom0"*Ӑg_|M_UB8!h9p΅R1ƪJz;j~pW*P@vfO0ppx`h "P@${`(* s ȬZ噷 6]>g"W IDAT|~g}'2 ( ( !w˽R"I94-aXvUD.ysO+{0t 7o.~~칵5(4?z=6X$e٤у?yvw`ۀt֚W*l6qaa:t-..B;.J]}37&wN] p{o&!2ƸkJ@)UR֟o~^|P߿oMI (k.Kp8d~_&I99} ]z =]ȶ2 É'6_׭z=>1pΫ7e3RJ9J"km?^^9!&{0g=y C\('Ou4M{ɩY"MP3e?ń5K2yCЗ{}>o5󒔲У$ځ`K@yZ?Qo-&qv6s) ^,̛˗/p8z aL)>ͦ;pX\\tF~_y_K_S/ŏ03 [\"/9Cj'gm`pΕqι ADA.W=H5X,Y@X RXN""=!U>w^ǀvK0b/9F< jVρKr;;=}z݆` Jks^O@Nw:!Ƙ9qˏGiq:r:eyAb /mjtX/R}C>?O)WMl`15+ˢ^cd TkO-Aepvȵ|=

txcBkcֺW.!r/ZQIJY?./k{=0 ͖'Nć]|x<4MiJOM}݋]2;xZB lzN㷼7>ʝۋ3 ØߤlT"rξTlYƘϥTJq(G>| `AʊmqY ʂB1cg62Phr+Gy`m׃ `s l~!`B{q_W.q!ϭ2y >Q.3ڟA^Y9HEGz CӾa%V}tň(nKz`onz=KA4eC6g!s& /Jlfd^r?G^L/fWm ȶr*{0W40Q&&|//#2H|.SIƘ31VJU~ g+EbV0`'OeSI=A Ѥ+0t /*f~fW<#͚ yE, CV.y^Džh岫V?~+6:Ir . ~qr s:dZ&gkx7IhPϼkFa7661&bZ(?z 6|,d$f;.QNphVy7<8vXwyyu:vE$$ Dd_}A|mfWLq~C`\-W3Lրq K^h 0&|00Ѷs+1^yGvmW766h41WJi)%'On3l86 (TJ_yJY(FX`>v އ2agϞ B3Ko0m_g~!?|0馛ؑ#GJzөW=1T–sM 6 11'0Zdфւ!"\1i-^^`28dpJ BW>7IPifyկ~u7cFD A b O F, 6$f2z3?}{߅VVu:vee DDnBy]<:LIYa׀cϞUx1KDŽuh'r765SP_}{fɁ1 6'SD4dŻǔeg))%R0 | `nno_;3ۘA2-کh4cرcȑ#pa/J zSR鯵^2T!"Qc$"4M%",DZ˳,ci$I1eYƭ9ljΊI)Bxm+KT*R?Lۮ0ƽ<]rӵph4Y)k-A ֠WݶUw#7y-˖ ?:tի.4MAJ1x1RdM^J¢(5x6`Ƚ,Hz)uP*(Z?Hnywлr? ^wtá6IgA3DD4Ƹ,l$6cNZ`10AD_|[ڿ1nmP>֭ B0`0lq9&s;c`!1Zpm},g~# СCp)~18rjh(TRQ(},0"Z"ʬy Ze̲̦i*$qx̓$$Ix<˲B"*k{NA@ RJ[^_M~JSȵ(&)?4^3gXdY<A`O8WBWٞSY^hwW.t:xPcs^T:c ql!xTZ#眔R'Daa,+;)TJ0"V^ !\Œb .e>.ٳUtxN7v@:P)=xNyMw)^DLW ?^ZZ]z Ӗ1*4 y Љ>ܳIƘTJ)uP.YR . COn2^l~&o{FZINcծ^@C/wx0  d\VJE}ێNkvrfbEPz$>?U)7DpM7/^,|i?$|ҙgs;jcǎCӧO[nnf~ QVj)*Z*c@YQ9@Yk结sᅩ "n- K$pHшFi E\SQ9/(c9PA'n*'6A =j"EEfsg|_ni :}s|yO3ДC +>v6vl8ro=qk`w(MSU\AdsR0RZ!ХR1^zL2 (KlK/L{hssס(yk^+@+#Y0,<"Q.s?ƀv",KpPJ)Dԗ6x~ %[ڟkOnc17"N<c 2ȲPh&TaҩS-ov <hKR쿮+4R! rGc9;z` FHGktcArg5ɲyB.`J)A(dE\.j*3v0^蓇JZ)4?T .~qtB~~`1";O~Vߗprrk7ιvp8dX$I,އ9c㤔VJiF !l/&w JE+/9{[B _"ޟLgnnnVN|;ֲ)V+02+rΝ("9Z(DZN/GSr]_ PM [ *#Rʻ-.bPlqG+3'?鷛حߙ3gٳg̙3twz.TZ _o{ $ >c&cpq0K>uPqgr,JU\V {? 6|m@̟ n眻B/o7zb~D8A[*O$4V -O+zo|n|;8{TK 8dAS0ƌע3QaEI)֚sL)QC~A}#}<} |\L}kGnf I/T1DD1dY!R"cYxRZM}9Ğ\kRZ]M;"0x}1MQxۑ{sv9s={;vJ%u9/q+Roe]GS$OL!. lo=MIa>v R2*"eh9;U}-o).|v ٢7 }t \|) _߯VY+NaRJ(>AqŶ+DJs5eoJJ}i2""p:;19w^?K)ge rLG ڼh&ڑ2H y೩Ѓp=L9j5h4㥿zۑ%l7Ϻm~=v xKR DT_ o3v=T}Ck\p4ޅ70ck;o[{9(,okeVSJ1VBԾrO}w[8L׃('?l0kl zgn?8v9W_% Qio*=3z3Woi.D L\6}}uD"jcv8ox#cdނ1EPܟARW*h4DG_rтlg*]=mkRJ=Fi i^ \O@t o;m?wnsةSȑ#9'K✇Js|]|<LF@|q1UQPZ1295"9+{(R?znnsL2 @] !0̵:3  7t%詼dُ7 ?Ǯh4BnC!WFåX-V|P\dc゙7ɓNAMōLHAQAZUZ,,,76L}XKgl;y@ Wyp8`q?޶ 2ƘPTj*:k6l6Cdy=M`81ku#?.#۾F012{z~>yӟ,#c09)= !zVgV.h%:t,..;OtW 9-?66mLl;1 n0x<$If3 IDATl9N:UHQ1RH e7z3NL_jB2K>x*m1<"S>RjlNt]XYYNmk_߸NRrX $Q /z6[}Ѽ[ MNŋn*!1 /!gR24zuu \}s¥DV`!B!9+^d=PYD  h4k 90ƶ[Xln`Ya?$Q໮ jP%ج0.@báfh[vd %E[1$4|v!\9hn1y@&Pg}vh4pz:jk VBP aB^粷tRHa>po$OLY~$6]ns*+ WR:n nUqi ~ѳB.Ƕ[_G?:?c` !Rr3›ϹoksJ) @FQ6nduum/s!+3g$,T>g< 8 &.*QSq<ņf 9<q,6)= 8b=#J)GJ!TRZ|t9hWt *&h9 ?ݴɠd  ߽N "۩L=ڧ˿Ԛ2J6|2+Wd?xj`o߾M)6% DFxsذzI,; CO)c4M j)ņ0`8 @avݮ>{,:s t:Nvz}A(W0;d;)(ŋyɬϲLy.cRJ)V,(8< Ci&O!4(w.Կq;ZPлkGj.>Vaᕺ>^gn:SU9!Uf&pcv&>ګ%,>xuy^#BuMk,#f;m#hZcp8TIC/#5USyiSC=J)~_F#mj`NK)|8IF'evd}W4_enVI/]9С!8u:r0e_vNtP ho'X *ʶĻb{{[T߷6ۉV`SJa0 hfëe⏍L954RЌgEoO>9hө2鐛KBEv̙33gNz_꾯yPbx=+<5yիMi+e?3Ģ(f@E8[_ve׼bH ґv {RT5Zf݂a@Nl#x千/QZ,#(@QԚ< 1 LdW^~e 駟FB(RJ( [Ro8u]aoK\7qRKN8 ico2_2ƈMqhܑRT%5rLMaZL͔9Bcjmm a'@Q1ӧFPx]yԸUKJjgyΎ4 7\?Zކ&]1DC@N?鴴e^6I?ʴBDfN5΋X3=<J *ŽyWqKKc傮P~Lx y^gϢsΑgv6Mlg//kK /'FXq,+0!ͬϭ;Ìxeeu]l6=W|.q@i91G_/W)_C FĮI'8P$շm'f8e9w֞R[48NkA= ` <8)u]EyiF0?j%pK-';|`o8j i؇<Ie]Spie8{p3LaƱ,0Ɩ`By'0ԍF5Mj&=%B1tR8G__1ʚW:N<[Z& ۀ/Xvwc캮+08Y ιe@Q_,} Ðj5y~FsF%IGdiJ)4M}Ty^(+Zn6,\BͪNVp֖=1OƘ>yYly뎤+.Jksxȕw 6'h/k4Ml6a?TBy ᧳2-"?,k&>WdUM9Ufij2L6Apeqjh4TSև}Kz[Eҕ4{x }>pڐ`(UE^CلV~ơύu\˸Ƨ@O̚(iZ|Ĭ?)wDFCv]X__deei~^zhlߔc677)_"?9pasފ(dVs7[U6^-kPUҥK6s3BHvG)a"P/#o;Ľ+k\ Ɍ2sBH΅iq.!2L0Ǝ:BՔRuBHϮyCUe S:/2mWA^*?UkMvV|Q`Um{mLx7(<)%Qjh\w?{^(ziy[lod[3yJ`V!}_6 Μ9ϟ?Ok_ͧL(fbS)m^ ƯZĶb0h4a!s?&duui4r{.dK[b ХK,Fce䣏֯}w:@gUa :AYähBFG{߼C'/4FB|q8Nn#.ric1fLz7Ͳ`bpY(cQ¿?u?3ZL 0TzTzƦXJ?Yyj4XAn}qjo s_y{ВINc:2bנ^5y0 Teb ?ZT2lz8f *3 XH ,1g6 LFR*UJ?卟F/gE%>E F$ \(?@wVCY{L.L1dr GJo՟|RiG[B4𗵧؟پ)h^wʊrr|W}5m i4 h4nI>p\<5?]*bZРeGҠT[p\ُ/~ceTϟ?O;~nt#r-ýDF@tsٳ˗wz7{*]mﺮHZ-X]]E67?la`Tz^,˲dt:o?@xهօj|٪6(/*5Vv.hB"19,y)KP>5A b*}MJcpZ7ﶞDx\1tA3bVy=ӻ|ޞ^eYڐ:jˌeNa`ӄi ,1 |=lL#C}fSm< lw"Y@d- 蘆 9hJn6_뿬?l6ڀ~ʊc:꿩=}.f91tdW|G޽ۯ}uppG4 M~ؼDq6׫nӕ^u1 9<$WGb`~?bfxc5[X}i)D$(k+ %*,V 1Ɇ%D:S6-2>WA_.[t4sJ)GkBos_}+|sA@qa]ӛ wX .L?O^_]]靝p8TfAPTkιycoou׳tN_$N X^ I{cu9'R"h7 /s`؆YT*)2%gr ?Ww]8d8.ld]6QO??-q`[[[0 `0{ l1֒bfA*2}qJAHZ iZ "ASpxH)Dk(v ~'<@bfhMߪZ֖DzŒs?s\_Z^YYkkkd}}z:~ӊ۽9*oe21~@nZ3 L,p /q\Ult.jhvMZjzڵ쐏"g3!D@% 'o.V^@cZ\J!&s? o?/Ko : a@T,\KT teCyP^! @%ŋ=p8$y;y+u5BgV=*߀4B&Ɵe2`s}'>񉷆á Àl?I0>mHm4֢2I%XZp̘LG儀ͼVK u)XaZFRБ'Yلٌ/1HI-?gϢR(D !9FT!$|Wv zi\d F1 +uk 15.]O^ӷn݂x<.8q$؆r Y!;Ҍ.cAZmq˯mUJ<#bv:T7Z2_9 c_"dnCрfj6,b|wQ(ogP?t:~/z=4 p'ɄNS$ 5{M /R"3DUJ>g~rylv Vj5_=ʋ!*f`1eg^( 3|Z7^^YYQ!BfYF4%Za0?g3 I_v7 dr@2{Jb)Nնk@^"F[ /ŋGw}> z8[n`0ᐎcDZeai%fҕeVlϿp:z|j빷Wu PVRIE *J@Xn{]6RJ2眥iJ' MDQD&'Iw_/o`|+_w<>r& '44(jӘ5\Ooe1DZ!Kof#<.e̓5?>"B:2+8y$XAIGQ((TG~GO/~}_~ǸD oFŀQ D4,&ʨ`Y{/SPTw$^yN(Zߺ?ֿ9+z/W\y3ϟ?{X)n޼)4eɄWHC$ LSaURUЕGZmRJW'I“$q?Tk_^(7|4fZf '6๿|~`JJJ 7.(ڔGqjT{W^Cncd \g}5zggd<;W繥J) 5[J3w׉7_J^*[PYPiP(Iʼnϯ\?ũ@ߗRJl Fd28i,ˀ1h&ch?s C1C!2J)B+gnrYXs6fOةʕ+BS)УHB11H4M"̳,aA(mud>Oq͛7C_|qEr0x Y!)%rmݷzjZJ֚s΅I4M4McCTiNJ7@Y߄䜫4Mt:' j"w? ;| n}>3PRcؿj17 @acL~B~}?ORt88d2``gg}d2q&eb!96 >dBWgI۪ U%RLk- 3MQ9 r[^DQw:88`@37GE0t\(r] )Gdy5u(u"Ji8N8N@)0S5c\%QB1Vp8@LBHOӔqF|<g4K$󜙤 @z}_B$B+$yug}}t:QݎFAD !WJRJW !!cG9玉MGd* $ b9cBڒKJRH9xIh2h cYeCxl5A+1W\yT~Ua(w\(PHsY>ă2IVI1Ƭ2}3*ޣcB=9/ԛw!Bi}Wq'y^s1pΝ$IJgY8~q975J"O)yMr`jc(naC9R TYo@WZRAXJ7 (q l]ȼ|\<Y'99)܊ " qd,rLk)|/Ȥ2WJeZ@)i=#t7E+#a#!$Ϳ񊄱]<`s ()%2rBnpGN M*"i<-GOS-Di"W/yZ;1&0*cyhqPV u810!s,cysn Iso,΄ !!0sjJCJ03}.BZ;F]JY ev) l_M?XyJi=rki82l\qẮ0.#[Bc&`ia:ϘUJQp n-=YPjQ1sx6_cyзo֮bkc1Fޠ4ME9*oo+y{e$x J)-DA @B1ƥ-yR``P r*@.V5M[3f4CkxfМE`}g"L-('H@-8@)XyE}f՘dX18F Ԃ[E9yBԂ$.>( =ZP}KT$VHcbEy'dq 1>%be* qI^VXdO*_:.zRr3'OA'$ka E16x}R9lr']SJQy~` <&$4>IEQd"4Ƹ|oc !q .A Vj%2Jln `RRJ.,8'jɵRsO/!zI •E VVd'^P&sXtBqə2 꿣(1ƚR !Ri)& $Rh $I2[& r'%BAd&@A0Ʋ^+JRTS9=AzϜ9s1Hi%slpL Ďyq8Ǝ跫0M@Leѡ M')b;6VAV0 Qhee:u]l,9r\+ajޠpB2P$`c$;;;iUeuk` MS(^:jjee::s aHZ6sy~qe} ~ Y7vR' J8B}888(AS;/Q^ߔN@;CARE)Fq8|? `Q8edW{TIFFqۅ tp v]cDA COyP. `aιXC8sjZj4魭-Z$I4BU ɝiBEX PaWVVvΜ9PӁf(BJ*R^Tu=M27}H)e MSiLdݖa`L? cLT)1#'x'uA! |ўiB}B)4h IDAT1B3I |  _F czuuyA@^ǵZ [K!E0 Z8CEǡJ!qE5+%{"u]8s gϞ%ϟ\ fn8bVJaqDP40z 0 c, l1N:18fT%I"+^>oS z:n^t94MNAE>w]rG:uFQvٔRRz:- !ZARRcngXk$AFjBE0)4R^~iΟ?q VFAhq(繄'uJCq !BHPZ&/0 ŽNiN:scϣutex衇=h4BAy{\H!Ѐ@id{yx ס*%R֠A#ř"%vKdYFZL&$ ϲ j,,ymHh4ٳg\xollzu]l e]&H#Jca:Ϭ>|oj@)ȵ)txp;ΛO?}Ak"FItgbq}l:w2IMB!APqhR8vBye}ߥ︃N*m,Nx62;N˗]w݅֜FAί us_שb]I\)Jޛy^gbϻ|h@ " "ULQmQ&%.S5US3)JjJqRI<$?)'L#kEIj {ݗo{m$!IIoխݍsDks^ҿMEZ.h4B%B! ?L ty[1W| jdiiΒEheT*ybwnRrC?ӉYKh8&t}'"WSHW/ ].Ba|?2cLFQ$mۖ1eTU*ս)JfffHR8^,9q>p,reYp֮n|Sx[K]I-wk4xrL涓}1r }Qz:77q ,*2ƪ4tiRfN9U۫=d :1k:[+b)x}8\.R[,JǑaNo:k~~(ѣGo>D"?z(})Jn~Rm.Bʖe^!:e%*YS#H}W9|٠MۑN-{ckHWב\>gP)*bJild4}UJvMX+g?Y F#y3mۖm۶(gy1(ʚFjFv)e A:r| x'R:Vs8s =r9x gjաl.~]!P}3G/k4}I `)@ $lg2'oiu<]*`0@(5O+(\9[6\38ri4ȑ#d~~p h+ǶmueY%۶ˌs㽐PCh(yHg.s:_D2 !6_Az}nu70"; C$%qeo՜y3j.ǼZZBb ;cy־>_)|A7}1N>X%)Bi _f(;%*x3>Mdzp"wy'n&R,yeYܗR,Ȯq ŜM[Pg4[ͬL ge-"|OWsK%'<9m&q_-7%xkȱc:u%ǎ tnnZm;jv]#,*0J*ʿ?{!)ATe's6t:6`~; *@ 6!!]>s(J__kۼ^gz=K(җ_~!;~wB}IKZQYJ)K)e!ܙWJkuRZ~Sz~7ǗSciStBmmgp>ϒzK*yny7FG))N =6tf3 @[e6J3Ts'ml8RySeY`˲h$o5:kz)>(YZZ"B:;;Ks]um !y@Ry>B4mX; >t<̜1+:\5]:CZۯ"p8DۥNu:vRHx빔]ծcǎeRV١CHTZkP(Xe9Rʜ (*xkZ t~&'ccyʔѣjdB 3oe/S@ĀhNFЃ-ͳ[JUV ۴nVe}'Iu3oqVT*E, ZCauuY8ޕkK_J*52d!4ZH3ֆ1q ~ O ιm[ڶmbY Ðps"ȵ^9s}!Z*hq8c۶Ţ*iZf֙'z)ʮA Ɲ|El)T؅@l (r=/c{{loov5D[aڊ&6)ArzNߏÇ#GE>;;c۶q JJJm˽^I~jըP0KAE9n?);ٳgYZeQٖe9yBϵX_ e-wP I.L@hPWM?sEqyE@;9m\6gp-U/g~X$z$8v`ٹxϷZ-lnnMjxӱDZBL;72~y<Z4M}Qp tiiu<ײ,1V <+j/PwCv:HM?P^i-7779?~% eYbSJ=)e.(}1ea ~VHzJ?V1[-1ܿ7ayqyҶme澑+#x " o㝠mv$.ϲ,1VTJ ²N L/$E50a~n-5eg+H&Qs b%@\xWWWaVnG$LD݆x#÷m]uo>u7bii.,,Xjv}P-*)*? =:2GH*gRĀ0Eڎ}_җYE6{Z"?P}QG7TA OɶP(˲8ZJxFFzՃ>jJnVo>&B9w.q@k]bU)e}2vZ Hu@C:4 Gې5/{do-@ GVvE]w/E ۗ{ZYYvz=>yEfr\X33yb\,.}nvc/XM :l=Rwޯ9<3l%ROwmCJaU VW{Cf J%Q-⯟{m#}O)vgqu$ID2$&Bz:;;fggQyV rugV0mSd_A Pa/C]p1Tԇh]@'O WWWs0 %!PJ!YOh5q] ^,k6sssܜ;l6曟3H͈4Tq䛉==sZIq*eQ+x?_m.hKy/C4іq{G7vA2h˿[*^qEqDZ2R ˲뺴hXsssr~~^ϳfi5 X,l.#'+g[MZ 'ՏG+e|ٱpxL.|)d2Wp]gEȚͦl6o;vXZ84QOg 2)_ CF#PMdg uk/R w+e}$cf// =A7/qq#B4 IDAT/8 $MӔ1&RʶmR(z.ͦl4^[9^*?yS"k~fޟކ?JM[D4Ǐkkk0r:"6ZZkPsHV+Gfiκ|ԃߩoU*s&4m" >d;3 9To}YxCWJ~u37яI͸lـA\0 yXX,q'Zq} F#!$AZJ &(J6QVlvv6fj6?_)KBe!j~'{ Z,i6' K[ 6_X;K-Rn-xϥׂ/3 } UYX5ec(2" ͵nOη8$I)"cmGjU4M=33j5?r+1cqU,Q.If.,,Ώ?ַ,O#Sd7jȞEGWA|5C 2OWBlXzw_t]w19ʊq~To hd!N2+Ze_ ; ff}wbFRp __i!T@T*nV ykX AϠ~&7uUklp)[(w-?quvmif NDI)ZRJ5\+l6i6pCxAn J=hdt3H .!];:K/L*sOtwH 8ukAߵ G+ϤQD26À rgхJaR 5۳uiP\qL !s ɓ_LsCȠ~eƐP[ Xj 9 5=f<0 Z|dZ:#}F΋Βy~㎻&A# 1fJ=a`|9]$4 1T8X͌^Ez}}Ç~WVVp8a0 uʤ;mo?"TZ1t'E_q<@ SgQ(q||E$5_:xvv:vVdfWCuSwi挼"j+fNh慫h4R8TJ)I1e۶}_Jlg̵7|,׉O5AG PNCXO<03?6'wtGih扩:Al]buuUI蟦iwUTҵZ tnn6My}_:u0a:4h2ǣ7P2 0;A bK/"9K/O>8q"4t#MC&IRRk8j~EcrzP㬛*Cu!6.@,^H%"`WzDk$|cд`uL,̄HL;.. Mհ yb{߆ p{Z@Emx l$n S>dw r{b} &㱊hW9Bժn4?ӧosdMItNʡY3*2oԃ H_Fzy$;W*~0^Tm'(4NЌ<ўGԠLj+ $/cmH) %e "$0ؓ9s2C(J]hUML? =CybUUA 4(W?GR"x|)jr>dϚ&g.35y/GGJ%m+-o#kVnm|]5H/w![ywqX)%WVVT׃`ba(ԔTn8;k?A@ߣQ l:k_:Cv6 _X9 5hѣn4M9ן(sqOne:,'Cq@ۻ@s×Q?hbЂXϚLҋ/B,0Їگڅvy^qe* g_.ѿ݄^F5qcҶm2ƏY677G<07g<10Clo`oM~A^zk"9aTJݮzj0(ϠLd˥BjZ0ƔeY1ArL 213@ #%e셥hL~ϼ-DQp̙Z-nUQ~_Qa! ɿRJSsL*k4tff˧NoT*EDm@YLŃd*%Twb`iiIq^lEQTR,˂8}q^~hU4wˈ2Jӝ fՠ3A yQ_|3Yn4e!tYѲ8sN=ϣ9S>S0-@b I['QN!Ԡ :wrǏ5666vz0`s/G]))c,,+5ݍV80$_8K_WX>;]~J~Mʊv+s)sضM,˂1~{#gh qB k^؍kkk9YTN*3k4SO- } }bvG@FMD?ӃhssSZ-nUSĥHT*RɔW \8# Pjj5k Co,둉oiT(iH)DkmFǎYC 4I)P{nK}77t2O Ʈ\46!s#"y9$/:M|v:/ͥK2s"Z(Wo`.deeE}d>Vj4҄04J%#4&TG&3q=A蟏~(z mUwwӟ E]׳wbԇZEjŧ>|[ք{O. ˌFbki4lbnnmrK\(:^ P8W{ '_ZLg)#=%tjB4I4"9p8$FZ#K3 ycYwW 09TM+ߞ4ec{ԝe޳`T !4Tٶ904Z.IX$~{-$[Y$ݓTa zmS=7ŧse}tZ% 7X{衙϶h%PÁYcuNabמȶ}3ֽ^/'USwdr?!"g !M~d?u]7-J^zeF'NWn&YGz+-..eߗXa:褙&ShiXԕJJ47<+iji-Teay$^vb}}=7~޸s'T*%0t SqJ硔RImKqP(`JPVouV( u{aa7X;} > !j۶uT*Z5R=RTV% $? } 8Bm*tMєWJ"3H6MX̤:Ĕ8;33/>|[Q 2љIy{'ԡe{" K1d{blWK$X[J4w&K$Tqh IDAT։R*iq ABA.ٿux 4#D~k=Qwx`tښzyLMI^wN֩RjR,KYreZTZ%<,w" a 7R9qDW1y^O[p B U@4԰k*$\Pd>hP>Qqjss0ƈmu] m!QJ|ԛEcsnpe}u]^,jWV }|4rx'6ѿ?a;!^e+t=I45Βt&\uq""91`0H PbQ}wA 'CjVBu6 A[,㵵5zLML((:,RRJ%^PoFY+Ya/ܾRW󲟮T*?\S0{.7po@!La KW=m꺮$Pfcؼ&w~[ ɪ;f M.k.-]VgIJ/g DJ)eiEE*ZW/W~kZݸqz=! l<$IX\J J)ZqE٭͕2Cx>Tg=>4p ^03k x"}Sɸ5 Sm'f|-s$׍ `OKUDJ.UI - ;o @E%Z)FjXZZzJ^zHEu4QfYB ZK)}1az=icJ!766 /YyY|0^}><{I)D5cuXut:^񗗗~'|h#-EtgӇ0郺[l7ۏ~tL spܷ6iuW`3ټġ8@LjBȆyh;SߑJͬE0 jq@? 4Ձt&\ @@v@xH)qZ7^ TRJec~ "!xww7LǾ~eҽ8"9}]ƙ*5Z&t:I?@[[=S]z6Jvtxu8Y@tܗ:4MяwCol`yj*Vҋ4(ѭ?6o"Bu4rMKS8L0 +{`;IۙmC{oyH}ꩧ ?բB@k-<לsFsقh4c5RQ$aeh4qeYe/֚#"f)D15 v^ۅ5v~#- p S˔J\Ò7u+Cr_f-<4DzU[=c#?D[1}s_+im?xƖ {xv`euqy1agU1]t)w,wL՗βL3`4q"2MS}?'0X)i:yfλ")@'}Ѓ=Ї۠.2,-#%?q!ڭxhsA`֧-"BR?١rگqS^;z =HTYVi>e}H$U6߳L_ԀKxU`Q|Ϗmv{>o/PjCQ}ilSj%GHآ)A]gyf/}앳O e;&0 b 8akw"5|vKB`qx^ ko;1F.BcNҒs:&"B`wt'+++^eyTJ_R?0SgP@{x 1_:t k$/StI  4( @SE4/3;aEJ)d[>aqF8t6x%?phU;ޯ?^5 x7gwtu#J%=_sl5GݟlO:1}56O?c>ʬ/lq(ڿъt%N5mԺ Z!h[DE;4`рf _:3+PޣASK'+@bN|Im[:˲Y&)3tInYzDZL>{ @➩R)&?˲PkGQTl<㍾a2OZ41htrAKKKj翄r4>\6䛛pYz;Μ9/--N'~ cY9M%d+;_J{W_vm_ ) 0 Q:AI )zxxxdǩX񍌱~-ުO<ϵr#v}<RtRGywM"j`=]GEnJz> ЇoCɬ?tY'&џf4Oj́F>C|mnnzF# EQ#1f>v¶$+gAA^/ Z?sS~nWj:p z+ZPP @&m7bM2Ʉ0]bcw=)폜sAviZA17j3-*,LEz$|P.? w':ڂ ii)(v{х+d!`62Q?)CZ[cE.|+x| G񗤀"R-Ej}FALz~q0`LYB >xLjya: O7_kJe 8ߔv=}8,#;GV~ӝ!<Du0{m3j>=.EteMS(x6B/Ƙf@c, C/v;.4ḚhxQ0TJž9MX/;4^ރ#gTUR\uC=Ebt!r3`^BE… ]z,--yz=ha5ysC~!P_V"h?:xy*gY^c} G%ğ /&P\3!g}V"0fJLҌ1X;۷&?_YYn޼Pc5+kLEĶ>5P׋BzJdo^KE_&5p/oee{s^7G7 DogBb pkd0F4A'Tl4ȥsg95؆6nNúnL_o}`͌#z m/"@k] ðMDl/r豽hV7M\.KczOBl>O/8y^E<<kQϯE/٣ؤX-Z_@v SX_h>?_Z 4jA1A.BU?Ҝ-~ ;}GYVV+t:dxh IDAT۱#_}gu:1#&mܝ[Nmm˲,jԤ(Z}ݿxuvWv+У] Io-_fO~o|k۞ `ED_g#abm}Lt 7 ](a *T(3= N/Ae/x'ɳeI?#?GRxMh5rǗtVS{zAc ZV 6E#AZ.Ν5omm-hZ}g:wG $>`zk ug<Jo׺!L>` z2d;徥Y}Qo3 t钷T[ agHKgi*0_-ږV~XfOz4{҅TZ 0)O0K? y}?jh`백Ϝ9w:^_+')t@lsT%p zQ><ϫ!bZp &Eȫr1LGK`Z,??%̟sG ?aY1+Rq(\k;RcвLrPF 32Ag¤& z]3g=f}3 +F@r _;ts'>O,y2YuUX__l/lN5//Sۉ"'e'^cMiۢQVW6=1NX R;;;z wER}U IaZby1Z x4h&t蟦VJi"^Cυ/_T7H* @G3 ,0-f d6mmmnv:^/9<1vCUt?8utEw`Q)j.M;ms|$4e]=~HA0VV_'1f_ w¶^Vv|]~V[L<?tp|\SO=UFϿn?nw,Nd: 03Ơ]PWՌ y'}WFC5 \[[c|}}weރ}sU/@';ǯ!p^g^NfJ PX{gtr01"ׅylƟ9M߬~[}U#oEpdjCgjXcf;dž\idYVT9Ͽmɠ@]P3EUWVa֩Ƿ$(M,uZ!*dh:Mii)j60 Oa43Jѿ `~03_?أ%u"$6 zt~PP(^'8y 1///N2}/sW˦ [Fa^S Hdc4sPݦNþ;pp}&d%f³lk 9= fz|zuo}}t:qѨkm~{lLBXB\^c?bCc$W`5(jxN7/w}c!acMhP~daKVTϢr umÏۏ7_R(Ѷf7@_R@W>1y^|3Xccl[vlƝN'ðz/;p8$^o6΍C{s;^٢?UBC5k$^㿄 nᇞ">n~j(jRVG?;d-PSb hgW&lU([П\9J`m:@gLYԠv+ϋL~eo4l6qeeJq_C4 PeG?#hѿWmx6?KVPv`0qVQMچ] 2~~Iؔ_6TVʻ>){ҔEtg)?@ENW@¤VZ._Njhiiڃ7_\'ƴ.Lп*y_g0 a}}={oQѨAh~βMOj#|0N.^ OmnlQtOhRT;gJX|W9/sj )']icUwСֺAge[@rlT*u$@T??no C =;uV] 89̮HkלREl[пhPWWWz^z엾=]|Pu/cӮ\,_ /^ϒVO :}xVlҏ+u%<럟3~[|aog 2۳`U-l-8NvѶ:m߻L1W&G`~H4Mѥj5"ۙ4gΜagϞ8~Z9z}sGjjF߲m i}=]"!TT,wa-dt~ 0}SKT~'C/P{W< g} ȱCZa@J9/v}Ƈ cbg"k#$jNGYrοm5kI_]]^_C9 gZSXV"Sj8(˲;e'"/"6}o_/qE 8TTA&%wFSwK s? ;E~Iج?_*W84ZJ#(+漯fGι,;O{˨ 0h# ]@6:.Gh uqcv(FOi9-=T)L"OAm4__FCWwyo D<6!);I۳~TT#K]]fzn޿S륗^Ο?4 jZ$`5oX˜uhZoTuB&m m@k[ZϭsIn?ZkӮ +O TTMҮP#/O>)LdsA Sߕ6ڋWjgkӤ(G L8gHk#tKo_picўy~eaݎR XuW C =Y)w(KɛU@q}C6=%g:YqyOpFR_8@[e$Hj@[K@NPCp9Acܠ-`\= ohD%P^+}@$p4M˭E`0nv8ka6>>bk:AumL(wAgR[˕.N5{V˲, ʲao( "n1eV:O@0=3Hϲl|i\f*la- kkkaRksfj2Uߴ"itM`1>!`0ХyJk qc٤fWu%XD*;9[֚_9'x"vnW-`lRӁV5͠VEf3k_5|*cgd$&!)Ж~0ለ`1ϲ^#r$pD^ 5@Qv .d;;;!'IN4&l<=ϋ!C~I, mL :N "rTiȧ}_A8Z:]wP^1xEV%k^¡p8n[e2BD9G3gъ*Eleew:^7U(nD'< ;2@ :1ʣ\sd<XoA1@j $ Nm:&]guz'ο_s=}=m%mnZ 7iJGYM[ [8x1s@_g&׀u "zO:oakcFt9nOE̠w5@Z[Ey~еvq]/7WYCgD}h()'SQ  o֖nbwwWiWJ!oL^z/--1B/"1?}>T;QI I#(*.Im @#GfSjk4M^Lsю??ylggk^VYaz_trʫ:Dei8k(}ϛ2{*}{ޓ}ei5-%)ι?tYڱ`@69?3sM@y>z8{vfNM3D,&"ѯ.id<_jch fF*MSa_.ysTuʬ?`Gv scO{W:o҆HQbSYifO0߿E<~DQ)=cV yޞy^);G9;J)~*r 11?A<UuֈHJ)/~ퟪ9csT44VpBd UU%cLr%:MM#`8~}yxxXCeRJ[Hi`~R&(\(r✫sÃQ]TW5@}Ä')/+{~x,s//saHA`sL_TU@c硇w:"'FD"֠{lR9x"涬Sέ!茿Ysɲy_?aWQ]W1~^|θ7";owRJ([^J5sG7"_Kw_I "pkUJR xC] -a~ {c0B|2T@x}=?e|/nYya ƽ^OC5T*s"+vjg>~O)APk4 u-ykJ8˲XH)"gr4xLyh4y !Z ι PunUnK+++lyyh@xs`9aômϾ~k y6<5s1mX%I"<RJʉ(Qit#< CQsGe"zeRJ&! !N6IbF7s8j`ooh)E ?5qRK@=(˲2~$IyeYeYl?NPksD#"HÔR+swRJ* s)s$siʲ GFQ("ɢ?YZkE>}T"bh < ZV-P6IərIS<\ !p8>v]~:*p<($ZkGe~4,@ B~ r5y^܏ ,pΥRZ}{ߣgbhH`QQA$ K_GI)eeYM)UtqYK " +mi"RdS:q{پd3.4F~7~>O`<1BhY,xiiジ<,'XJYs#ДR1"'ܝIJijf]@D1&s.cBi8VA yΙ1N -D8FpªVVG.!l=4yc}V0sj2\t$I$IBw?,˥1"OZQHD;/DdJ)f}4FWls`4"1.'> u}<σ4MCSmxi&I[5?BJEگ1"ƈQdx/@kMEuV]55tB ," p1|yyonnzq\&p0PcgDy׬K)MjJ|ֈ:wnɦFj6@D(ι#e2H9t!BUBM8]Xq9eR/")l]mt:L[[[̎8~:HӴqeYiRʚRi5ϱw[Dvds 7nZ?SJyYRJgN,˜][;1}a(Q(=K%ʲN.tg1б 9g #___ z !|"3)IcT4-Q#G`VvgtsyAHyzNMO !]OF`.X$2>{V0IRۅn ZGQ0ZWJIJ1~;iL܏)b(]pB%.hcc---ZI)~"Qv|PwG?L۝]y8e]p 7sN:y9B.c{w]"i< w;uuSΚ.[X|ߏCsJs5!D=y:(1zX (|.&:Mȉ{N 1. kkkLQy^~_&^\^8JoTz?3a>k%4ubeS4 @t8ko.g@\lBs ;v*b~t3Sb*0LY0. tASn3(^~)3@! 0SR&&TY'3f9zApBXC; 0y OI y4&hb], '5]4|( "&H5NzA1Qj`y_ެ_"Y \OLo,Ow=NCyWњf_@b,=E52|f忩KL|-KH:.N 0wZ5I ;~ Bopl@n$li'ztBziΗ>'7Oز9@E`zFt\.uގ ,}_#5)Zˤg ӈo~9(9=S./@'IY4iy?{M `BmY*"QizCy@4?\YḌ ;@ϣEa).!fJsE?!& Sϑғ;=E~R|UysֳvdEqfLSfj cӬU/@愁ٔyB`MzUYD9L:Јs$tRS$Ƈ7'/'ο|7q|_伧AL6w)Q>?.Nytqtä&<)O#fi>ůi)` TiH4MRRwmj\4gxʳPp4"}29NKΆXN SDp9Z078͞  Hi_jI'g!,~?0`;ko"`^i)Bíy%uv8%j(}D0i 1i,A@]"2A u9ҝlzϻ7O`A+9AzyӔ3\Ԍb3NC4Evb^4Oy<1O3; ۿK?p Oia~_Yf IkZis>NByi{Gb)c )k9!$꟤/r?edbNiMqOC?- iwnoGLC#8A  OK8g@ /gb'y;ĸQ.J'o6O#x&ZO+nNyO' e\tpeV(]'Nܷ{p3SLk=I $N)(O?dw(x(Q.J3F̫>Ӝ';5m 43NR+3{sQm\:қ{ Exf d/U^"x=$;\v aU8o:[{n4B~\y9}^xvzΝ;s[YAka_~ٳϟ|^wΞyȟ7͕ ೟jXVcrtM85v=pȢ("0 i2h4^Gqٳgk_asbjaףo|oɁ1Z\sB~B6N9kaڽ{c c(_wvMdbrEpy:d2W_}ommo& !8AP'cͮ5"{-Qֺ✛0 q2p8mFTVJš&T*|ii9S^-I)F# .~!{VqRJ"s.Jsfi?uHI0h4I!cm`1z+⋸džd"nt:|uuI)p8P<<˙q2/}H%0kc,MSvmR(LVٯ33ԩS,:|+^x-..E^.8|qqp)N1&H(眧i*\e4M=bJ)#MSFDT*Zֻ{_8Qks97I.J!OJW*yh61&cT*Q$LkbMHD:MSjƆT*t)<`iAŇ7VY.r,RJk-91 hR*DDy9Of Iz0hz8q]xv<ɓluu}PT뺼ȑ;Ə?㱨u]$p]i**ZKB)Ţ(V xfVSXXq/8t'uRVuAZtE^Nv ?{٬j3fJFOL4hbM_OSS}m%I0dZYA] ܸmt Cҕ8# 4 `rL*꿌'"EA2V9n &[YY+++jj8:BOq=).I)]Ƙ|kߪ9]>k< m:^v=M)-tLrL,y|JZclF8c j8lZ-8qT*nf)$9P h@z 0 &9 &~\LDE3oO|/?;>ͳ  &~L (fч`mmDZN_R C=#8#"Kï.CI_@Po@0w:WkjucrLfX^^+++j9j)JnVs]8羔c8gW?W\ʏǙu}^0G(>=D7'@`cju'@>I/π_EQT(3N1MSi D<]!Dǁ|W, g2!(©54o[L <> Ò1&H%Iө1q&3ϸV7Jֿ h@8i +Pc@YK`sI8nE 6jJ&_ZZ^;Zͭj8$)\}KzY? ;юyN(L1pΠ8Fn& Cscv]ej۰ 'NrXXXsWJ)KJD՗ωy﩯~K>t5 (V:!u3Ex,v 2K&~|g{?p8,""8s|` 0CR8;/\+3)L&o_eo8_?vNh4r&4efZkv >#7v ߮}eK [VbqENt #D@Z7d2Qa8]"qy\^^ n\.UU}<_)UoTK|N,,t8esKOI[Jz{"JfMi+`WA @!|ӟ0 p8TP}5LT$yJ%l6x1VWWEVF]ZZr+J󼲔3ݛ~A% NM?SX[%Ȕ!eqLg-L`|8$I(Ha8JQf5?X|r^3vLȌvml~y!`z*3@*|#Vr4`j2 $3w{wKW@^3'@*޲V$dEg ҍL+G @ <_b8x,cDTZZXXXpժW.jJ%_)U}#҃ 9T4Pd&X7K4MtdB <5 㓍 > `0HNS'MS3jQՂ$ejZIJYBT\׭(j?O?$.DQdƙ̅(pccε >z0\߀z>L&֚Dfe^5fr] `z0Zm3?3͇ázp04f+(nsJLnÉ( @ Z+XWwf@_dP׃ɟ|qkkY!p(r1u]T*hFZh4JJ//7y9QsgS|@1@l0m ԧ^zN#ݮNddR1z%jk\V+JگvßqIgzAf=Vd{&H0t5*Uqdݟ50Y xg^  q+c }_pKRo~i?@؛3[3g}p~u]vUWDQq [r>h y(h@ 4Vto1Shze<<3gF}d2q4%!ST^vZVlzF7o7pj| ~Pw hY!!fS^` Ʈ'O0EJ!m_5//Ofh3Ԗeh HoW@>3W^-vhDQd(4Mw[ݖwv+phzY 4 $zjd34MAeVetz7z1$J3kg&6f-N᭴e~Ԡ}!`\,{p8A8Bi4nҒjN,5Mŷscñ(,ݕnf{S q6^ئB&0AvkY;{{~ N}&p뷿on<4̤Ov @x ja>݂(˂o Ɛ=Kq%%2@,#ȥ~OSkk \.Zҿ{/o}^w &CtP2Kg3 YmϿ_A?dbG,h}p n&W_v'\__g^O&1N]5vWVl6YՒVxf?/C`LMojܳ(m!}"O3D7CQ0Y&PVzn i*6yq}gVoLeƐ7kn׃^ȿheK󈦁6rƮD p$m|'Z+xFя~6L&2׶R\jU5 ׿~eXL6hog{{2?x>d|sQ#P^JHquODo ﱊ>|24Ms\Uz6[ZZ‚Wwz [݋utV![K)Ȍ"-Ԛڸ?}f1 mEJlR/dn,辶|w@@f\BẮ^zu"},/: @8B,$i0LEx'ֆ! b:*c !XZz?<{uq9gxǶkӖO!3 LXwҔ楼ܱy}! Rae#M0k:xGcaa~۠O\.Sрf)ZXXpC㱏&"k0[nӲEB{C3A7,KY~'Їx"ӏ>4?f1 4E +ļ#7 'Ot("ҶJuI7I&[$/"3J=/ zfZt:q+?kuI2@`1"s]p C 駟^A4MJ"zso//f2JI \H8V䚍>l \bH(S Z[̙Q`"LXw@ica=W.z=_}$&"A:Ndv] 1u]9w`8kKvxpy(Jėr뿮666 ?NeEJkifSiH`@fwf`\[ᐍcʡZsˎm IDAT,YLqx'bHdP9|x-P}ݷaۥhTcFZ_ZZKKK}M5)jOmjS[X),7L50y5LL>unSO=Z35'"l82Ddr V3eD$L4M1c LSL&8N)IZs)%˔R}'7;=w`8{H2hl8t* PQ:Y3/ .Df0Ozcmu:4cR}W|='&d~bh_ogP-0y0х dn4`DzsŋP]ԩSWi8RLkcyVA`n;_;ogKwX1YMʃw>0e>Z⫢$6r&| LF|H{}ߟ Cse$1&xT~U!3ڙ)Yd@:ޤdzOmobykiـa%|WJkv.UrE7aߖceo$L!F#6LD"I)Z DXAxK[BXl]և{ɖ|l:20uQK_{U¼epl}ݣZ)`re0W|'xJO777q4t:Ekθ YEv1904Ơ\e؉7Mގ?|^{d&lF&FmD߳<O+rKw8/_xV9c \. u6|X@kq V{ 103lF}x{o=*|T*Zdsm,e9l-ř<`F>D"*~0 |-@&N8/--E!Sbq^*ċG;V@gm8/7 l\!F#3Bɕ+Wt3F# ,4?C%G::5܈)M) ۄ"`|se٬(efsof"KG5Hώ3W[n+Wxٸ:jwzEۼtP,%[`·t{wB!%IR>Vw-^ç Li%/..F`B_=ڄ+E*/(;m=yO|歍 i`0dBA P4w9z _:|cL&1CDqyŷ +0igzό `Oą-Mt:Y4ldhىsRJ>T*b[ߙYbd?qT* 0 =̭g4x}L Q<Hp@!0xgց2£>ګT*q_|둛Yd]#b_Fg`?M݊g!¿"w+ öacF6^\x^OIHPڱd"lh6\|: SAarEfly?k@35䅿 JjnE݆e:ul,Lt0L 2<бcOF(JCRJkl*}jU~㋃QI!`L `Qpcb= `Bx 0RN>ݱ7HDw\svug3%hpSx; I9uGF|Ug< J]RywYhss`ڱ ntQ V<\1F#6NYn$DdƘYK0{{=U3ACRJfRfw ݎE?2E[~2>{/[DD/P.F: 0LH1݆ڹj`e~RwxCl u])qq(˼\./\EǟٮGfuZWm88Ik]\ʼaJ`kcnhy]?$!TmAy;4ă zw LV|`bKOa2 XL o+ ѻ!=+7L.ٌp2Ph?pΙR R>]rm2;ZI`"b6YVg@:AB}h4Tf+++ ,// ]zO|XO[02PAWV BO"fl+mQ&=X%*=L&k0)%y) jF cl_ˠRīժXXXeyqZYYvy+o^^" ]*Zy33(>qiՃnN%Th7@)F؋{ۧWw"Ǩ!I0 F<+W`Z"3#/*1f8WfP訁r uۑzN/d~$ X>M=Gh4}mommQ>sR$:pGm}Pb{.(9|y `1P8drdfgGD:v9%vD;ZCZeQ C/r H͎Ƥ ^W\db0D닑!k%)%{c|Wdv`l PTxi4o<}Y.~d1.Y@Q1f8B?ιADm1ٍF[Z j\\\p1ͦGWxXXk0Hz1bl3=3̤0Lqiv;"8\(/eqzWȆ0G|.X WFÜ>}z|U~ )%!" !(s!˶ye*!R%=,ILk45RJvFp(fw+EgFcsl>Y\{1c;È;6rΜ?WUHB)8.@_`B30ƸYMgȦ c* op7nz-'"frt;c)D޲ߺ[}M^6Tx$`);PA850ӷ # ("=nZիWd0"$ r`1"4Y v`eƀszfTzҴj1cR)e(q cADs.cs.ΩJ)97!Z ?q̓$!!OKKK|iih4_GQv{O裳q)?yqVq֢5(qTiYJ(Lƿ3o&YpYG}t43{[QjE:ã{9F"[w8B2)%'n ! Ks,9J)n^ 0!w]q18t ш\E!lnn4HO2^ҙ?aIZmuȃAGY?WY+ U/>P(X(scSx( qȦ6(TKRRkQR,f[k뺬jǏZ|/|Xe]'06p0%MY> 0>(@3;.W X]ߡOM0eBh4桇ooos{YqGy=j;"{p{b677yZ`ӏda?rQRJR]Hq뺮R*+ι4ƈ4My0u]LTcj4p%7`cztd&6(cL~0وiQb/ `\I3ƦQ0Y 8WT քEx,RJXR&Js:3bD48q8(qjZR*qQ$*E'mbxۛOY,>~ M0]itl.[ګޡO:zay䑩Sf'SGGK`N8w?voq"* h?>+Z J)&+v庮8NuX) !b)e!I8id֚( C|2L!$= L,Z]Xy?/E@Cc j֚l}۬[Ʌ<4;zřGLqN9B(!cޓR&$R4~T f@eQ [s )ƵͦQ#|*y r-ѷЧ/p"pιS .@a6/ϴ?!'I\-(R )✛,4G!f#3j]܀. ;lBit:''VȬƀBwTljQZޓׁa1n1@P%K{__~cB!DPePU.Ґ88ddk{ <]cXm.B !W%!\J)9粪*9ͲL}=,> m! jt{&Bh^, 4 dZd #R|* SZ?;R#x6c)fx ]ޖwC6u5ίzOOGFz8b<66F< !\5Ǻ1z^0nռ6(pUlZϱ||gg@&z$Y/bsmyEQizYys_) am}= 48I7}y o@N__/K)C["Wo$8^7XmI>5WYwz<d&޺lrHdx-rEWZw]Fٱ[Zgf߹z<E:xݘo;̃$˞]J՘X`woWQ0.P ooyQ,co2xqIy<ϵAyMOqs7p|ꩧI$I܊-m#dVcZh*Ҥiʒ$QϼoLN%mWGr\4NS}>xz B5Kh^+[ZJUʺڃJ@N5}}'>W'h__:q7[z*4.:מ\i{ql\x醚=v_:ĭ$}e[zUBסҫ ~' 7anWg{IaFXי}75}g>W9]@P`!Ν;Ond8K+"pimV{j۽k6ݧl R\e)&DZ0P_zxqaQ-^416#0)[а+Yo)tvrrrr9?O/˒yɕ_}0rjlClGF*{2~c֊ׯkkmn',ǴmgطGz.i8WpkqZ糼a]=c 0 I&/':Aմ)bws$n>sX߭Qj/P:_ODcL&2tM&*m.F>?9jI.\#!ÕRBJYUU%gNXuEMC't~8S rlH5ZtGue( 绻.cc}jE޴谺R\C{0bjMu1o*p߱c37ںcze 9Ο??Ї>]G1L&~QҵK)͜ ,݈P,gct:UI ,je SiZkB6"$1шEQģ(O~Е7#~TNa1߭K}^{ͧ۔!58V:+aaǺ "Fwy.w!!'N#lAp=,_cq TA[uYѥrW0;Ǣg5t[S]~_җ^.p8dϲ/b6||3'r)SO=5X%I,SEQȦPMaA@yLDGQha=O^ؙN㭈vm } a]E ԯsubf_YZdQPkP?|CM&SAPD0 P0*߄7"ouB" t 9}r7>qz+m{ޕuwuv7ԪN*^*nϖu|D-[(\Îwg"~?M$ Ulٞ78"|ލcU}:ۄgvgwkkKF# C6LX^Ym}^[Нܛu8WeY*!ZK4p۬1xej2[]28.?3]h wj]u 2\nPv,j(vk?~s+Kp8I*[}''{ۆOk(Gu ,.l59L5Jނ߬54\[[666)lmc̙$ZEZt SaDZEJvw`dafSOq4M3}%BKw%観MrX.pȲ|^pas4phxϼ+'hu[/EçtUlP,n8uT⭭-m诘M; ;6PuY\`ÎG}t2 ei1& C9'Q5T]kb:߆u}-!8v߫SJXMXYWD:) x[B%,Y Y)['EQ~/,Qv]aX}?sõ˗/rjǭt^z5z'N/ Pktsm tm͢SO]ĥY]U[#c.ժZJVW!ǯBMd=p8uzr UL BeP+0nG}]1xCpor\ͣto+וBgUv c8q潹pʆ_.kmeIA)$E)Rq"T\,1LQ$6803p6헣*!✫(ܠI7-hj=2|NK)kS K--5 UJTAR =CcR·nR2Z0ƹ,Krϩ[A7s̚Bb8օY6Fw.]װܳVYMm[8ww/#M!2oZ̀!K871m1VHB${rk2P(괠e(,AimQ}P6`f%dfkΆ@2Y,ZnR.jK!`)x6oA(cogS{- Ts5!D@J1Ƥm#5xWB~~ėd极n?jA@9[ V]9Gmi{4 |o֙af3X- 7OE`h)c&^eQ1iq},XHSX^ڥجi}`a$1=clf1L[RiҖp@\2( 1a71|F*kox Rʷ4}nWcAP56*rϙ:Av=qXhVvZ: ~7D1~E[vsę`>S)cnMb߳3Dl-#9h>d-]zl,C-'KIfavH"h2 !PF s zw<4颔r Lf4ni̛ L/gz*q>7o^f  Hj!UD1cSJ>0~Sl1LZ0e# A:(Rh;uk`ܿ;5>San gs|p`p,EY.Xܵ-KL@S4]fW,``v4`ku/zjn AtV|P Ok`=9d4,ϛ -]b95{H>"Kpoe/JHC@b@?TG"K sL0"w ^bYax?_j%!xTIQA}0[0f*8Q9L[-0g#2K Zˀu9h#%Q鰣G Q3ca,M9P,N n02S@ҭ2 N/yd@qM"z/JIehOv a `|"7(0smn8BJ~@qH9#X՚AnͲ̗mqu9yYK - K.syO]m{#)u#w3 5Sdz.>6]L]{F˞m3-\7{aӖ&eF[bl[NJ<#A; QĉG ?l?? p[xyhzuŝ1n cLl53 p#lBPbOj eX̝s.Qx3c$Ʌ J)r},CvM0!kZ2Ok'쮻2jt͚ug7{抃f¿]!Z,i쳅#n?j,꾶?e~wxơ&?7OJJJb)[ P t}lX[[;RϜ93#ŋvJdmm)DWKA)uؕm%խVKŕ7}(H)eI+̵ٝ*XUUBר1 !ˀKJaߛ[' 0-cY[yewb IDAT]n p-˺eH0GwWv=>==&د5uyLko -Tt:<mcZJmM빱_رcd}}[__gN `0 |J)ZS7g^{dÄn{t:Iw_ac3|7MUժ|ƆVJbLA@>Y]]e~^VWWn}xQy1?F cn8΋wM] ޿Io;@\YUð2TJ9 PH)`0Pw~Qu ̙3}g1f]=7!D[ČsLHR UUɲ,(v]XR~~TUNDBL 8q=v=s挷毮+++~Ea < ZV֞M1DnjB]Ĕs, " :o&g^!tZz<T! !jF'Ncǎcǎcǎ~?XYY {^EQEQA }ߣzVQ)%B~K5Ѹ0cФ2:oCzߊ ,sQYn&13*)ey^˫b>iZ}RUZR|5୯z؛2\:oO (q1ys %uҴW2F+c0ZVUE1޵j=*4}o(dDJi,a0`mm8q={;s挿~?EQnCXh?W%Pb@!@` I0q8AiR̪nDC66s9m` J%r#dJwe|cX|BO0UxH#ǎN>׃ĉjv vݢFƘe=;WЌygz{^; NK}WRץ"F~4nL*֐7^߸zW8eSnV;{lpԩp}};.\/ =c?׈$ | w߆*_|~]v[J`YSZEMX4/&0i#|6#,IX) ͗} W03ի!}EQDcLw:r)v)'``Ѝ fQ/5lw} !4QtS92oo| '@NvM<ӽ^{gϞ O<:qDvvݽvdٯӦUſ[6~iW!^ _+՟=VUU*)eYβkyuYȍ.=& EdF93PE/0Q3 0U5݂U3[_Fu? ־AnǏgzw_xjw}}tW۽sΚf>@E|_{uEw^AWtw^+o} llnnva`nkVVVg'N;vN_uu.S& S?^ٸw_4s(@moeK_ƧTe+˲0I*IMV楥z8Ħ| #J@K%@Ϳ%V0l%73k1<.čQ]2Ol>s^YQ،1nrq J??.[ԾfN9 Ϗɝ8<)L)>/-ܗRztJt:ғ'OzvCCx% ܌0Zo=~yE<9tr"ou=}bӟ]( ?I? MSeӅ-.rD@Ё{rtZd#+djrb5ȭ,O9MӔMSV'cj ^u:;Ԥq&*nF0eR}x r~c{{۳!d(ښZ{Vk\Nj\[k 0.&v9Hz;>rEaxמOӔM&2xqK4,v=OGaRFrAśP+;AMc0ۿ ,}t:dee_]]mn诜 V c@eh# F5%L17!wހ}ٗ$q4M͵y:"Õ=:>䎥yÈjlh{{CgC/@`0 6L&l8I4YN LECLsdR9&0^ӝAq{d2h4r޽,5 ^n8o'2.s| S&6%!_y˿ߙN$IjMC|GE|~:4{%LCSK9!91FdP:m?W& t8=<iUUjfX fIs~pXf16E dj` A++h4K48M4 `u^>wӊu{ڬ_'1L1)@Ҫ~{K z 5G ަq$I!}ߏ{^Ϟ`a$jۂn kU-sa1 9L1nCAgVO|WFvwwh4$$ ]n|d2$ O^d<3p 1j! C/t?Dm@FV!t1Umi浢7g;ׯ]o2xIYIιqM4@R @VuYe 9B3̵M73}t:v~#6USck/iym*2Qv/ >wƍ4c/MSsnnvy P O[jhQz5~xo53F:)'^Y#Fe}:AY#,ݚyz `Qɓ_~щW1 eK~D}B39s):qdssxK~QAUU9Sh7n`x>@G-Au>t| rU`0'nܸAF?_Ji `n((/Pf I}bç,#Q5DSNoؙ;Y!lϋ(|'> LRM>Db֚?ހy|g<xLyiwV6o:l J#yBe8C'Pkb SP{oAl 9 m@$IB48>P^^i}>ҰsY?D7=W(ȡjrb .$]eW6v\ȯNZΫ 'ү",2Y[4wRt{rٯ}܄M<][W֬c:PeD(j† J0 ~)t2lB\}fOmnnb2tʲ4VEQz}Ps@MTm.~2!):A r]gM&$ Ͳqν9~#Rg5eYeu/CA^3<3㘌c:NzB_)%m<ILLW]e0Q)'7NK)jHQ-+Po5<1L0NIsδ־(XE{:VS&)!03:5hJz~4Z ]]o wΝ׋-))˒I)=J) X͠t>`vj* 4`_:AOn .FǘNc iZj_{󺨛LԶj7@߹ԓ8#&C*iܽZʈbF{5ހx˳86I 2ZU(ncJYhyjKDeTMweLLoYJY[@lSLgϞdKsRUS!s{6cʭVP c6Ok|RPe[G!x8*ceϴkб!I3;֜;`Fq"} _'?~?ۓX%I" Zk)Jq]Z_z'+Õ8@=]"n)L A(|q-Z}Zi81LeRJm74ܤM0 ;wN)H)R !)DjI**u&% 58p ֖$R gvlZ>m,ʺW2tuӜs]&hKR*RJ @Zȁq]UjZUz\.A<\tz˲Deբtñ̨ :ǜ As0&h3SpM"/ћ-Q3zt9vʲDQ-EQh!~5Gnہ-}ija@ȦnZ-E0]lW{i, sfQ$21n=UU c0Hi5#ͨuƕI9t Z HvV0Lښll8( c7(UGM1|HnBvРT9ٺ3i-:]c=a8?cqz/ߨ| a2PspQ]LZ9z7iV²YOgmHi} @i&,r t(xT1Lj|tOΝ g }7Qӱ c׾ꍿEAy:"n,(guI0w8% iEX/}gg(g5~ZKl0BmX@z]2YR8mk(Ԧvu ,bil%wz iuo~!`Y"Z%wdv,FoޙPlZ r[ɹsYt]L 6S_Сz.x 7[tH@G}Az[zQK-ntSB S䜑w8쭇s΍>EGQf"++"2bkk Druop8i֚R\nwpZB)HIi)RlA"!GuѴ+^2];~+X$IZkHwГe^1_L2 -hΟt:mʿon>1e<7 Ά+;\p'Tʏ=.ןq'DT7aumXH~MUo "{SI$J "ﵻ'$ "'4aaћhfR<d"jj"0 {=us$HR@YӇE(oҮ#.LhfZu`g?0wCc .=eYZk ݦODZs.5?$~Al#$T຀oCv8Ds=RV<-L+B Z@O~GPHwm@n оg 0QHIp$p(97>/+sIvz[39Nvvv7v5{rn<9/;g=u:oOx㍃;w#[ 0E#(Qe2CMHCkJÏ&,F" !JTd$Ȳ4֚Z褔q^4w笐 $R !H)"B)U x. @o :_lCp=IRc`5@ED] DnNGÞ293载=ʾ? >0y4wpڄ𭜺OGpoݿyfB+cZZ'0 y0Q]ג+"VOU<m#֔5JAv>d{HSK[yE ?x\ Y !@!D;F $$c4127כ@ A9ө=1 2 ^Bέ !M %JQ$`Uar#i !ĸ닂>DFY )%G*gițWt ]?׿~O7. 8y ]؅B`r @dww7v'CjUoݬ9kevAZϧeM?&A:% |4sE_^|yr><WQʲaιy4' ` "Xkn泅@0+<҃H;~9(`2]#)e; @ZlR!zE~:MZ)VED[XQCH }$SyDE㏩W`/X6hcWtcl2:+Yj {' WV1{Y4v^-0 kFJYC*P;j|Y훔LC@@Bh?|Dt+-%ybR2E @׏ԟ= l3{vl M{g- "E@PIM诰X(@6瑘+{>BwGd "x#,l0uق&+ӋZK"bB8n8w;P@2)i#W8J01Dg@d]LS"/ƴhgڵXyId_E]m />FT(BTU%"/dQA!c ͤ6Ql@rjc9 E B'uIDBj{5<6 $<6kRWy/|V6]w1GY7 !K.M[侢 gkS\YjzŹ?4޿scp9_a+G4Kkl=@dIDc`xM^&`[F@i`*{L&:IBR?3l s1Ϗ?Çu] km;/u4?_6?7N4{*9f~9*䐝!Jq4I8QՄ p| Y;I\5 2Z~[0Fѐʼd!P&&ov౎)W BrXW|NagԮ~SLϭO Ν;8::t:EZ<ֺ$I9gYXkelӆoM^f L?6\֛*&YH:͙d*4IV ~&XkDU8>|(}]s(DƦj#ʿJP`MC@$@jMmyp͂.0.ܟky|_y,>oS?t<xByJ*̵_mcZ9GyNU:@pE᪪7vb$/qShj.*[kZiby_K>5޻sw[F#ǘL&p-3n/}nH)19g`B=d7 y?u2GQ)O35)ϱ>c >w\8 `Is`y B:/˼ (V%g5TE P1;Eoxqۯ*뺙 ܋f]hRENn4J}bVz߽@H?shQHzG:Mܽѿw`2ǏsVBCDu{[ ʼ7*o_w.DgXt yj y/FY|`_{?^mVyCh.<cv]Q.҇9̗qk!d‘SoyÎBoݺ@dz$b碐 ;m6Rl5KX2~`jrw~BAܼX@4(qvXw:̭? 3QY\%ū-|4k+pDd뺶pw、 ~=C04!.d@ǸP-**O?mU"fn8[kO˺sA?B`h! 5#oF 'ڀ4sau( *˒W\=rS5)%.\1q, YP8N:isj#*\= - V@45<"uѺ/6wpp;;;;`5\l8-@W-`$9dg"a?UQޭy^H`r8Sj uh{Ņx)E4Kt3,KW6- '͖ZcSמ(T ik)H>QDo"<@e""c k12!"|?k"I ߚs;LZPg۷oi6Vb.1|\(@u@U:6X+fc̬_t`]ǫkpn2pFpJʇY &yi6Nf~N/>߻wz*8c{= ?%bX?IӺxZq*@R(+EV/ P9{xf,c~֖_F˴V cc' yQlK AZقHrܾ};iǾj)۲KN.uu]u딟B׫Bn"O 7n֭]=SpUKj"*8S ?Oޘu[ 9#*˒sQ$09I+^C(Hq]7|qJ7q (z 4둤R;f@b́nܸo6_t]{jHBAF9DL ]E,/ ^KtB4c%b_{xίd2ssfX|l#h911s3^T H#sH2=5Ik-pJ3 Dey)Ne\?Mb,m~$neK:Y5~ݮ3v.dM@3*A'n_c5=_uy1@9TU & ҍȄHlT6Lj`@҃Hs:N[ xſfUUT%yԮ\-l5e ;o(H@T#cժ*@t IDAT]zrm?-3S9_+ZYJIEQPs(/5 {Wa齾H6ߛ#. YYkO}#%y| =RDDO7#r]@?i{ E8/"0a=ؼFd !}=CVHN럻4.Ʉ%af~q[.GNu\wI.I&0/\o{>Ӱ]|;1Yf <|13eIIبDdޫ!XB*$q tNb`$y!33ÄU9Xf~sr/*A*ÍcZ1(+,i\Mߕe1}a),׮]cp5`7"O&.l`% ($I|u z)dY֌`Gz6"2}!$KyYO]XJq8>jƯf;2Kd~pQ;Kj{GA=oxiӀvO+ NãшfZ㑌1VQokwjOW2qWl}!7o)i~twPQJq$-Ff(<ؾ@ku߃; rSxUGuxS0s-=c΁M/0 RNܬk1U!_غjTURJ""&eeH!DrHrQ*k)1j6&L|'@eo> `kkř{q~MRguBf"Kէp Ax1ht 4 ߵsxw  b' z1M8/M' MKb7t,J !]v `ň2 L&Ρ1Tj\v-ܘ?CEE^d-Tj 7y?+kzUƿn4z$h{$!DjLOZ@8PT]l_ ^g@MRuSw!"K>=~3m~xE@TjdX:d+^ xj >j{jy3o/yo7nh4⪪*N*vHT!RݼGj{&K)7j{Ure ,:OE!ɓ'04־7>+<b击oʤ^_>R.D韰 34އ; ި aK!T$:nW$$ i<ov#^(\hѣGʕ+JJ)سsn>9Pz;5=~gZ*?\"JWz@ttdj{;!ME[B85+HJ"HTy.;\u]y..}www z@k_FL& )rgg}[sԯ5ryhٝCP葤9'H'eZN,sySevb8n+/_vq[^ۧ:\|d"өβL'I";;?N 3v| v^J)BNu̯~ @T<C?y=ٕR<< RH-rFeMTyNNnWy:zn0$IQep 󥵁p.@3!DFD 3+fD$|~ǰ-7|,J!0cW @DuLTyt:4st` {~á,82Z!<ϗ,R*Rf̜Fkp{ ) @30T?'#S%iβj 7 7:޽1)bORJZ֚[{k4M,\ӡ'u唘+d$%0ޞN]=s^v:eu:j5{W$b̕R9'&JL)WJ]!DïOGw {`&8Wn/RJu]=ӽ=r~իWywwsף<)5rﳏc>I "V!JJrVJ5GN1I ˼B["n ? *ٽрn{{sN筭-ڒ˺;DiNHi8)4Itj'IR9!% !( !I>ݙ_}nk@hT %Rt55>SF" 5L;fcE*IvV+^Jɗ3uouDGE.G T$`!Kj C\6$pp`)+D\ t!;z+΂Xpjmі7H@WsE:'؏߶|uMD.s =eq%}AƓL3ҋAQJSwؔnmv0@R \΀\dgg{{{ɕ+WĿW?ɯv; rfc'y9LǠ23oT0?M6G1s>_vny?UUEK֔9C핲O5Oqn)"~Q3SPy\=#jܿنjwxZޟg,Q֖tݻj J&`;F=Վy)!*0砌5@CPyo|ckb6d﫭-7lv P@#yvE'ovQUEvͲ=|x~,V^]I)]tx0`{{[Ϯr L\^sPp`3OoTUc8+a!C=oFYN@MP G/E޳Ty}]Yq51¼.a*%l^(yT6[oE{{{\UŒ !D$"251p8~ /o797wSWH,p5w|n5)s۩4aᇤ.IvO?|gD\=puE<7Uy׆WyTi(*2PT0#{b0;/FYF@=M1U_{p]ڵJC9 `$AG3 v\6\M7~-e0L&T%uDp y.{v|*n|#T|!kfW܁+o=UUZ& ?n*ax |߼z+UWBBY=U|^^?J)7L( V,@$^n scvs/\a om߮y:rUU܊|ļc4|"<߸náOxoMhAUH}P_5ز18`0@Wf}J yc:Glbw3ϻ@)z@+á;;>:m12ۅp_7jhKk͡*  OY;`nIj?#n<w .7PUcI<ϩ`0x}2j' ; nqhnOa))s΍F#7L"2?B_Xf{Wdb{Bޠ)>~ }5f}=7{>\_GiOKr~S~ֱ~ }O6̥- sT}7leﻣ#7Lj{lIDATͽ\*y0Yaz7; ۏco|<<\l ~ }v*|\͗UN}K COWoMc0Och4rYkm XqiREO4u2׏ChK?'|Nv&`..\}T}2O7}Ўc;Nm]Zk&ae~hd')8猔H)M ĽoFI^[`wLEe,Q摸(,q׆L`l>ʿ^Z=|0L&f:UUKD'.VaUg"  ^R?ܾL`{d#/xo ȶ= >|P'OF0Ƙ4M rW5=`wC#"6TG> /o>oo?:ݓ'O=::2p뺮s W:\NApYЂ };!L#0!4.g3^yz"l>Wl޽KȍF#rPSQ-4lZwyk[wo{<躇ߤ)!6~ LO~͛o~Tc*6YMym|ӿr\;õvl# %"2W?yܯA2҃eDG|>_ַ׿u;ԑGql٢(lQ&y;f&Qс6zZo7ayGGGt= <n2 sZ~1rDy]6K*5Zk1_|ٖ[ {~nﭷ޲ᐙ7nK{{{,K.o߾MɄ)M&W kBPk(Q휳ZwDtn͗}ǟ[yommћoovVEQpQ|ttqy(x֕ei˲UUŊ2 @9A;VM/oݮ޶|%#˲xJwEMD9)"3u*~<}P^/02Ia)˒PUUIɕe骪j}ZCD$ILmC{{{|%o-$I:r fD$ãssNYkܓ(s眎WM(ȁ;<c 4*ʜhb*[ޏE 94@zᙴ03zRs1EaH)1EQx<,(*c<*VF"j}zt0~MDQ!uh,v٥S+*(RHfxgddg>RЉPSǖQUU4NPh]Yn{ 7DHz" M p#Yf3ElB&"Su-BZʲᮢK3ǰwuKiiq|d(Iޭ(|c$@l%\wa=5uZ@8&lʲcL]׶( &Yfs "RB$x4!"21 7tVvXzۤB?G٨+,>4fYF&Zkuh c vVb8juLDpM!ďI0AWP-yչ;~^Z).| f;OsZ# 0gh)ff㜫kjfqr!Jf4|L3k**b0J*m6 YeZ咧2z)kmED&L{?@ᤔ_̬1J[ Oye̋3:CD0Q)Z@K2rN$P,N7LR6Pt gASI.&A!7jo;, 8[/L0i AD[)(X@KrV&fOUֳ (D)X7W|xzg߲DφX _/0~祌!E]Ҋ(;)Z[n{:_Iy/UQ1y - ;9(2OnIhKZK3W+g?/y]h 5s{ޯ;9B?fK5Y, eYF[ Z "; |g,@œb* ("psVZIV\"s\mɹ@(; %8.G(zq7Keay&r(`g5m^e.y x" ^:Pf`^$ TꉞwNi/`غ9n"zQ^2E|wk=b&4m+w.R穌zX]b\y_%y/uw=я @,Py0sr[\rliSx}Kn|J S X׹ yy(*Xtbz]e-f%t3xύGXyYKX:cwlY)sL^uyU*̿ugVXa'ϓYy2X #S<`S8cai9J^^a@ss XP\/2E)0 N#W] Y߇ )k<ŹHx\ۗ)ڔyzuu.P0M|| 9Yi<xÊ"? /gBN|!<CUUyIENDB`criticalmass-1.0.0.orig/data/bitmaps/ammo.data0000644000175000017500000000160007630537344020543 0ustar danieldaniel0 0 7 2 7 15 [Stinger] 0 0 1 17 19 48 [StingerTrail] 0 0 22 0 87 89 [SmokePuff1] 0 0 109 0 87 89 [SmokePuff2] 0 0 0 74 24 24 [Enemy1] 0 0 197 0 58 58 [Explosion1] 0 0 197 59 58 58 [Explosion2] 0 0 121 215 19 19 [PlasmaBullet1] 0 0 178 210 29 29 [PlasmaBullet2] 0 0 5 107 42 42 [Shield] 0 0 244 131 5 6 [Spark1] 0 0 60 91 20 21 [MiniSmoke1] 0 0 61 115 20 20 [MiniSmoke2] 0 0 86 91 20 21 [MiniSmoke3] 0 0 87 116 20 19 [MiniSmoke4] 0 0 243 141 7 15 [BallOfFire] 0 0 251 144 3 3 [FireSpark1] 0 0 251 148 3 3 [FireSpark2] 0 0 251 152 3 3 [FireSpark3] 0 0 245 157 4 4 [BallOfIce] 0 0 244 166 5 5 [BallOfPoison] 0 0 245 177 3 7 [WingPhaser1] 0 0 242 185 9 9 [WingPhaser2] 0 0 241 195 11 16 [MissleOfDoom] 0 0 210 213 22 43 [FlankBurstLeft] 0 0 233 213 22 43 [FlankBurstRight] 0 0 0 151 100 104 [MegaBlow] criticalmass-1.0.0.orig/data/bitmaps/nebula.data0000644000175000017500000000003107630537344021055 0ustar danieldaniel0 0 0 0 255 255 [Nebula] criticalmass-1.0.0.orig/data/bitmaps/board.png0000644000175000017500000030773510265636020020563 0ustar danieldanielPNG  IHDR\rf IDATxy]wy9=[vY"6 ƀ c`h'MB'nҐ ==$2yСdu x 6$[,k+Iګnսus=? JIG]~{]Xz}?֒°Q\^#6e>1 k co~}7\<0cc%)̯}n|}Vt=3Pm-1nVο cr|;­looyb??‹/z'}aD˔#Tۜ>}\Dvb//|ی3~~ٙ=+pHiGpxI寲@!_oo`(!]fll\ emu>~vz=~dq_DRDN\OMeet> ',> '^xvƷy홹_.?g޽8qG14 /oK|>{>AN<]4Mh|*t$C,/=%ɭx{dfzxG偷5{eL 7NU]k<,v{LLNr8u333k5ΜyzѣGs@ѤYX,N(seEUAjPL wZn~W(<&'xrW_+.9rN^]~Ÿ?_Gq ߽m]{>q~Mב$Vnvf|#K/ity/ʯ:SBE&O>Nċ]PlSؼuG)=j\6i2K_X,y[[ivzT*[ܹ_M~7~BHPCLLw~Urxq,kNxq<#8o~?Am18"j >% C{\5Mo|Ν/X$N<{70WIa|_B-8.{ayy9.\{zir,|YV$IEallt: 0;;02c=ŋ{Ŷ}YkkkT rVqU4Mcxx:;;K>gqqNX]^_q=t;wo>VW9~8]iHm;JA@t&nEQ<uvдn!.>Nvi XVAQUMzNȊ D$I J-<#5I$!fQU?<q]f?vX\\0 DQdxxVE:!H`"mctڨjN?={9q8uؽk'_>ճemm۱;{ rIp}z Ve{1O=sss?_my]FmT/߹(厾p<`tLjv;v`&/_&Jh44MRVFA.4Mrfs-P,?3wq$(LOqyuNùPTPa 2ccc,/r((c-iQ˲d2a x @6=0 JtsRI$I"bY6$2T*>PtȊ-A K#/!2$Tb(dEI& jۘmO:*i& "sss(댍fy衇zsTQxǨTe[*G橧a2;;;n/w]8C!>;v-,..rQ]&"#t7&&'1]~[CccF00MЕJYQ~xSq] m̮I"'ϓFV8xGkR,z;mTE%S)@(Jވ0l UU#\`'fޓI$etH$h y~l4h"4Mb1EUp2>Fzi:Di=it:N:g>yG4扩2G%Lj:f5\|N H i"LPZ! "4DIa"$j$|>O"lz.C!Q@ECC.αpiu&&h긮@3;&Y][` s=L2a(Wb]v?ȡ÷Rŀssp?D<ׯ~kɩS/BN^%Odj /|'Or1?ϑ#Gzb18'N Jq̙AϝdPUi^yX\\T*h4eשVhNFyzxat\NPJ֣"˥xU,¶>\EQ=k9|x\Ƕl `Th`vщlmmEA!J(Jt;C(,GګkJPf}*8M:&tzNȒ B3>N ۲*H8 @TnS*XZ^bY F;fHmq:JAi,' 4MG.Ƕ6+[,,- KW.!HgRjrr˭hZdi:oCx׻ͱy1}~=|0zςVNǸOW+_ ޽{9}4\z:wwի Jq~qA駟d.]DXDe"/x &fC*dǎlnmN5U67dl;N"Qٴ܉xB@>:x<%XFU@( EzidI"PV=HFL:Mu#aPEUU D$%BeYƶ{$@" DQ&L$|I.^H!all8+++Hi~@*d2v00M$ID: yȲ$,m#x]vquj%4EP(DV\# P(hwn`[moLȂ N"Pc2,rmٵ{Wb\n0s/cvK,ruo`Z%͓f'`YRX338Gqh^:{WΞ%ˣ*\={w~L<]󶷽G}}ǏT@cض1ZD.7 ۯ_y>K j `ѷ>FF;y-ξ2bWξ?Q(l˴-FGǸzuT*MR˴Zmz'PnsUʛ[u2[.oc*1m =A" CC4ulۦ2==Ӹr2KenE2`A Nzv{j)J$tXLUI$8MR4M677}MѩdsI%([- @A@QEADgzX^dŭvl6td6.L0uMbf @\ceqC"._fyyryv M4 ]בdfH(W+$i6 `[[z2( a(\DQnaEHR*5@sXk2< tv옥lrU**fq;q|fe6;ff平i"^c___>sqdt$I/]r#Z8;WUosC={8ude.?llso敳<QY[[H񥨼(J6!NY_7X\0MY >HjZ$ZuI$Ri\W8nZt ۶ HkNRAU"?F-("I"f qDx"N&jQmea|DZzHH(D4MGf"QhZǦR)l"J>P%g IDAT zxGu\.G⺎at::$)A(U6c#vvE` ճq\N, _fDuFFtI9u'On WI[t2JIXZZ^-+Wiy玣(*A4i<(c<($)2,SSSLMMERVx",Az4&++6U56u'$!2k:!!3<2LPedYBtd%ւ 0ciP,)QN>ò׋= 066iX&I@\X}PtQ ư8n۶,$IDDI$է0 RdR C%_sɊL; d|bb@6ҥ9DAD5U!M7DVX,0::,XB>85圮Cu,;SL%:=GG*K4q|"%fHH:FD<ץP@#96d]Hr9H E# ""(2S;v0c!bL\ıl;p"v~Iqmc6i8N1lƱ4M,ۢkmEa=t{]$r,ZmDShd2I.4M\/ '&5}j mҩ8K~HZe߾9rgkE n?>}~- TUjfJBh78Ĕ/]fǎY+˫juA$0:2eY |'3;;e?vb/OJ5Q:8?@%8JV98dYl{Q?q4~=11Nt(]m|bOɤLߧn0)W~\.O8K6ctt4Qo| Kgґ? D H%ȊL*f{J{ 4Mpg\et: JCrDHD!~<$m[C<oE\>G\tu|>8uIRLLL 5cdR* # c#J%dv[@؎G6-t:d2iz˧/O<4Loio`]tҨ5еu0L(|UQ.oH>u /23=m4-ƿOpH6t\.K!p /_m4]4 ?dnv&M:Ϗbtt )h}ͽ,mYXy.nTTntA8 aDRјdt&wq]:NnOd*6cq`jQ+*lmmMCb RڂvMYEQ跖mR$vAh6ݴfei'_dvfTIzuc?m9#1-vxѡbSٹF$ڹT2׉)rZM111i4 .,j0\.6iwfPaz@_oYV3WyNV+fxKӦ\.C}ӗF˶HR]_<ɉc;X"KM W!_+\YKu;B v|0(}C%`5 3$IDŢS_m~$6[`jG \ǍZAr4 jH[ȓП>iynh4uQG'lӳܼ;PMcxAH:B Au6uu]FDdƍhc>}7b|fiiI>k4MFdž9<;wmr߽z =d}}+ݷ]Eو J29j F%W рNGϧXryNqL a_$xyn۶IRMnW>\hn} _~lw3?m紏(&+ @0 87gQV#C!3 + i Jc A_,Kt4pY\Kx~vնUUh~R! =c4IgҤSi$IP܊e$dA>́|>!X}It dI"H^kM$F#IjQ:j5EFVJ!lF~|?ew{Hĕs5kXNŹPE:\Rgͳ0GalmۯCW^EebbgވWK?pԛu~nBWW馃:tL."jL̙0wl&Kczfv\ۦrLD~B6u`mS=2#^{'_<8noo8׃34^wgdYkN"ݟsm=u >v~a_H',Ggdiq ]cea`هzP軮*~3;- ڤidYKe?RJD.0 zDA }lp @EDZٿD0ixXvM߆\(Xӎ$GuEVc咑!{( z <򽳼Nҙ\Yv:|?ơ[onݻ={wŲ,jڍh[MnNjU_Eؽ{7 >|-O<]92Mc]\E#XlJAe 00 HGnokU_؟N>w];˶H&S}0csLRexdQqz]ľ W ~gk~XsW=rۋ~/ͥb@{T $ J8ƔxK>\Q qfT: KRvl2LD. j5s1DaE.A]<@\__'3==M&q"'+HR p]׍*(4P!ʛet]grrbJ걾шJdV+NȉXJDQ˜ͻJJ8n\67gfՅhhVK3PT:^_f?jă/lVբR!$A@"'ק~p:lTJZߊ"_>t4h(BZH#Q 0ٽg733}ys5:$OZPGc* kkA:Y|cxG6%Lbf<@*&5 Z,j\׉7ZmƲ,?:!#" ;m$La|ߧؿcccxiF=C*[[ lhlWڵݻwGd:y ɑf&ӧV ZN3M|^|}Umt]ެh g?˻nq<ę/}hPOIҌ pY7ɦxŹ*D~h@So٢h@"J(O|sqpNF&u-tdfT25`q:_FLUAqmތePUbo| ]7p][j5|#HX=pE?B#A ϼ&Jӈ(x,8a.CCCʠ\.yZbjQ.eiqz޷(4 YK= ܎ kt::cWoH$(J#dd#XVDklQ Ȓ:0^]Љ(loWڪ@%D`(! &}};3cǎsw*"V.܈N{Q02\nɦxb6"Q,I,-/H8ydԛkv=jlB1KW>._~}/鏾1|OS]"?Y dYDh6g$.~w^ cXV!$+ضpi2  V*HB26>6hg <۵Z{~yQsE$1J׮sk~Aq]YO$#Z&dtX,8&ޛI}߼^]l=N,"H%aC v#`3$C#TXeZAR"iH"@  0 Yګrϼ= 4|vߧ{_*P(; MSRol^O9\ϥW_e9d{{{NXMO_ū}<3ȃ)۶oz]Kzi6C͗I UQkszr*9Y fReY0Lq'O~pn+.iCZ+.FZg#B,^Vɧ8k>m3Z"S'4 iمa 2lcW._?opv-t:2 pylC+}B2w= W^Ų|嫯f){hUSOpr:䑇fo_/b\e8`wWƍ7Vq&O>$[g)+4X,bVWCl' N<Ҭq[؅Νeeh4hw,'2KBR/$v^{g>qLSr4lnnkR??mbmMlp**Onwom2'Xc6l__}X_]˗{<ԓ=rnsgwNql9+>fqxth*s$Ew&T(R> @Y"/X4@hJ- johTV"= ܰB96$\ Y$۱i*U& :ѶEe%`[)(xKɋ\nxj-hG(?v<|RZNPB9-,J),2@Bv,JETSl˱-4f@ƌ& JWf18{tm0 MSΜ٩}$M$DƆAD͈F#$I[vZjUYֱnPrJEm8"rUMߕkܸyɟds}'zo_ ~?) IDATiY;V[\${||7GG|}֭=77k9>9amma"vOjtԋ|VXZ>zTUm;ƶZ E<ףJ~=_ DD:.v@%di"'ȲB*|!=,J0ql@:%$YRUb:6UUvlƦL qAĴFeXU%amAQf8xCx3@{.ZU li0ݢ,s~5*,K$x=!}+deeVڪa%BgyFDQV?^xb:0چxb.JåyMZ硲4ފ. i)eYm3'~q,I>x{7yb99<XZ.r,B6I j(%ђO؈&^=צ(2"t Zsڽ6ᾱ g"ڊfI$RNOa@}nܸQieb=~%,kUX[ M2Ȣ&s5!5-ڲ,$ &~5t֐g_nװ\_r Mn<z ty{GiB<XYFBqW-Š(899e2眼.RNnkpT*xԖޮ+ӁU3dNUem)TUȈ Y6;;gp,|׵ѺI Euc[eFTUN" =OUfhU}|ϥiZU$ɜ8u *sm2ö4^wh6yJQYڕ*q]t:e 1^̈9ERЪ-KDQ$*lo`[b41zJ0:Y)gLS.^*;g k4My$WUEU$qB(xLj" Llmmtњ/Ant:xFUys=~)<]ʜg~RW`6%1^VC>bÐ׮}3|}ѐ5&1{wv=۷ t2}j۷o..Gkx[!''qRϣAMQJeVX(L,0Pd47Ak׮ı؜]\M._̏3N>le+1ΈGX]]*շ-,d/`q]ƔE]J+] O=E{.c1f$J<ϡ,rѠDƪQyZU%xs)%Sǵq,EZߪk֡^ --MUDa(3e6d)Ǧޠ,{GR0D s<dQUຮW;qUIh4ߜX@XMJƓ Ʌm Ҋ Td..-loe)''htU667v:Lg3>G“Yt'can߹:e`cw㻿YY]哿IƳ'yx2a4.VER%QsǶi" a*Tԥc<XHXPxAƸn0ʂ tU=mŲPEm#RU%<{eip,OiF!A֋Ռк$@_K!KT/NTeT 4ױh6,̘ϧdi 4&c[l"*\h4'0m,5JlRfƆ}}qn58(onlry,b<cYVK7ǡ(rl4%/r&1E-a).Up$4M&v4"hdD&677BłJ di8^4/8sm?'L''El6e2>vJ){߮~H+ş~˜Fx3ֶ?D>zãcpdSV}6!'[њ(h55u _o}/k&rRWeAaN;Ƕ\,|>M%E l &ʌl '/2l0@S:B3L@%eU+ۆb2U)R ױ-Vɂȱ,MYdfM/mC3j1Ei׵ql$YT%Hx3KhXavm!㰘ϱl M(r:.e61 S~~ڴZMvLyR9Vjq.}/̙G3N02ƬJΟt֪Nw ѶfnJ|{]ƣا[qxx|@jU>șmNC.>rg^寲A Vgs|WB57q2_'ڌ'*j]V/R$Q Rg=ܹCUa7>LlՌmϲ4Kv,4:"ۑQGd 6JJ0H-7( ql ۲ЪYybn70t*U^ D:a-%5iq(EW9VsdEZwۂVK4vl<'I)}qVU؀;$ayƶ67q̬N$ضG8\0it:WVg2GOmXշlX̍bQ~NC~D7ӼO0m%ݤ#n:-qh m1}yzk|+_|?/b ZJy.^_7:m1xI3MZstEd$ڶMYI^z,e,5|FٶMeN80ׁ, hVmK_yCEyRI9UE`P(dkUjFxm+%fp dHK9DQZy6`TU9CgTXr*Z'4xdx eTh[N׀dE^&4EHBeݗ/@ʢ$/r9b3gh%5, j iv4Mlo bܓ0Eذ7ϕ?[Qna?e.}CZ.~)\o|nJ/b #>'_Ïr6M =$i͛7}8IJ%S&k:2 XRocZ'F8O)lxd htG|qhL#7 n?͗%"Ƶ7( .02`>6o_9j`p<4^0 j|:8%^$E!]9=0TjVG&+^S7& ဳ;;L&oѪ2:E%xf q@*(l)JWol Êrʪ6GC3:P 7㽯6_>eYba\GZ-TX]]a:`NEMlG~Ij6i6[LcP$u\@3h Hu 4&U_k99eQbu_*h<`:RU=fl6]kvki>\I2Oإ=ԓ]E]{;ܯEY_Ydx W3;CfHHM:AfADaHX@l2:4&J+VV;ł*41(P؞cYXEYdD#I2B+$13ɘuD~HXdĶ-sVk[m ¶mǎ*sY縮Xf@ɜ?i2Lز-_ S^Hdyz=(t0`0i6å{:<|S"jnJy;U˫( W,vwwTeٝɶKa)yfՁyτ7^qQ%Hق4IvO Ʋ4aç D7֜늼h=8Zp\-qX `6cYdrJRt\-㋪R 0 P"I:!vzz,8eۨ Z>_lJe4˳˲8::ʊdiE#Ƕy׮]|Vӡvg3a˶@TX gXή٘m ۟8Rfߛ Z-Dasb}XXʿ?ö.t mM۰Xz`0iB>Xt(ӓS66t#gw1N. !h~@3j75"+}lJ*QM&#K R,JP<"sV ,s@|6!$N\Jq\lKMf PUXLҌ M愡,a}}\eVʄaHXe$q84P*4iX tIh}|rz*T-eH0Ae!EAUeZe<A ހ/tBҒ`PO JK?mypᷴ;, HV40~mʩClNYȆaZ-IN˔cеD#ҋ8&KS+:.NpՃ6,ϨT)P?Og&=zeHkߧ?aNS'IBY̌7eϞͩ*Ƌu xŠu}| )s?  :>%;m8PU (RU Z'=vݤkKzYVX. IQ 1FiLG˲(\2 d#-Ř&j5qlۖI@f4`Q)E碶42J)!7Z,(lPvS-3 WDAv+2rXbSe2ɲVtV&e(\E+-_O@.2brQoF)cR߂2,1jm1IQC2yѠmR)EYnd>\,5MYsxDє4}]LfS!*:Z}WEa0J>V91"s677[КiXdgiҊU|&Mk igxױ-oZuDU$IBef(P-(fs10&&qE f3U5BfSPAĐwlc҈ēt*IO*K,#"PY_Ya6` vlQ`&c'#C9oߒT0W b{h,{2훘ږEUQUdӐ\[p$*ʪ\ XhQ%Z'Wee07(8#F6*X8*\ϓq\ph6[dqy.i&tZ{$fi~FRi*A R@c>@~ϼ= xBQ4Mc}JYVXvNѢ [6oyM`1~8:l\A0 YGbu8)oggg7o`ph65˗и&;{pt2!2&)Ӊ 16|6@+dXi ܃X2v:1$LpXz_~_* p\mHZ%4ր*-K(}fwnF2Z嵘/ͦuvWE >zՌ"ָ%Y&“,Xhf7z8Lyׯ_' ⛟IJ!c;*C|8| ~i\U үxT|+"Z&nG}M1(U l0y @"͛&P챴V&ZM1I"YGeE* p_Y5Uwnf65ss1ޖK e8e2*lۖ ,G2Ev`yNɶb+}a *jO̸ +GE.Ӂ_;De:)_}Aoџ mD_c¾::<Y?o6PYQ o{8g oY IP :ҿLC|5*i rx907XzeUvJW{hڌ";w0 Ee"9fldG# Clb{{j€!,:mٖ}wC0^}xvo;6pycک%5Y`ubɸv,ʢ4v]Hu' Oy^XMe<a67Mwl'ŋK6{4[MR,9UUpJdд[M9a1?Q?z>v]쏟'nm?[w|cb0;OLa6GWy>?'x#>ѽ{~xw~GɲAgoNmmK[U%˂`\8]iDTlhZA6fJن+ ʐE(۲鋴[eQĒ(?M s!)UrKea[ Dl%ek>=t:m E`Y6,GxXSe1SoZk{6|I^~v``%廉W߭Ȥ;{̰E#[QO*@$F\_|N'(<<`|=,3NNOv(ӓ::z /lHt2Hho|3~wN[l/:p-2˗9=9;n-iKh5yfz(X[%|w$nbxzϿ׹}LaL;%> +m86][[ceuxDsΝ;!˖'E.L<k@>GDf,~Va#!GAH<l-qwhb6v2/HRɼW-(p=_c#9>:f8nGY'w4vrŷH:y衏 `i8<:W h>[0]Dh!zr.e:̖UYFOvO~>٨~ch>Rs/u999e>Yi qJ3Rc]68^p~=lw}DZ)ˊ5Fc! 5BW`\ϣ*Z:.ҵxz rꮜ91s}TY6c'9Z"mVqָg&Ҏ}6Ovl/e{eȲ65#"Te `6OE~[Q(pB}L[Jvg;zsi?~m(_{}ߑg$ؚɿyRUBlYn~ٶm>[~>RuR[ zFOrMRx+pG}7F;veIU;wYY]e4}@ QXS( 4Gu9*C5m6UlKh9 g`.~U$Bn4͘z7oޤ, qz@ {/X`;wrM7M9pp0d49=0O^| Ga{{of1O ?39a0|G?!IZjcee@?QEⶼa5)A,]R\ Jk<֭[T={֤1|64Myg\,j&E$z&r`CVJO@X2SZk02^H4UZͻk%veխfȦPVU-5,L'TeI׷#_/@UV&k|c7 ]]] :d2}Wz_L3xuv:tF24?%\R&<,sZYU#\ #Ccv7;0{odvzw=>}F]]IW$K(gR &BR( 1!0vmI^ùg{~w|x9gO{cq=V!IRy5U.^aӟÉ>m+ 7 5 @$ڝ8۴\e$tu3l[ 'P8oC^Ϳx <a@ mLm~뾸޿qj9Һ#MS./spxd2&'l:,׈D3oX\p|t~qᅬ /EOna6џAvwwduM 5鸸XF#NOOik}-1ܻwiZ-t:eZQוuyqsof2S%q,+jg{7y$&ooo^>x1Zk<y.)=b8nN.LƮT^ looDZ@3̻;Rp:qyO뫺rRN.Fw~~3ҞRt0q'nI ėl ЙNN't}OWeYY7>hإֽ=fөHɕxx!Vq qLQ5桵ք"/̺N|6g<[jEQavn*;*lX,X\Vvժ<ڊ/H:7?<%Ynr'ěiFehDx$rUM@Zs_/UDMΈ!Kk$ R+G>̢<<4 łM/Me2r)> !M0ɲplI;N@I8sRD,EAdB?XXk\IPJKɃ3)D3ZkZkh[4 I$0`$ U& ֜ʩy$%JaۚN)Lյtv豼}MScB M:‰4R+oxbQe1OG;Hr% ^#t޹ٽC?:۷=/;e@Op{r-=0 y]B=>}vZ21 [[ON8>>L[vvfloO𼖃ǧC2PZ^i q'_o)va( G +,"Ɯ4M(bȲp?bQHmBI K\*qw5(7J+y! BO`uִ_ŘM[\xJ}EFXc+8BѱsjDٴӠ; 5jCĴmM%(,1l:쬔 a;eYr~V1u#u8zp)U$1<- D,}jCۙo0mO:sՙkГfc#!P<<c(I"Џng|/>qu&4:>ugfJ YH#T!SP.7.i%D|ŐkUM`鰝S$$IBbMӔe.Ѻt ksv]kd6 cZ&,0(k=Ezx 2 X& }D6*\j ZYɢq7iR^+|ߡ==Hy{}uDϺ͡C:>?] c@LVJ jE%dE(l6C=<u_lmn  wEQDӶ$iBUUıd W/we젵fu'ΉE?eY2NI(K߽WKْS|w v%Zx" }V <߃(Aa\8j:|O3O*GZ~೽䳢[8“z:2U`kl؎ԹG07$Ƃ eaXWΫ.8ښ$N܆(RڷmDQ@Y([1J:]!s4Ji"moN/UXAUiL?dZ&ÚV~v hkZu6ܱ󵘴J$AS\Y+N`Okpd  l8A 5qv/&0Q7 iru PtkCZMC+~^|SMak{jEY5_Aei3$$)'7M0`s!H8;;8}d.}2PЉ xZa% '"0zf6`S[wZ{LSE1c3'_䖺<|ܼu ӭɋPlggf'DhpTek#35yryi,fЋWe㠞(N[iEn(˵Sմ&Mb(`VKi@\iJKftxZ DSgG^Ws IDAT؈0"nJ@{lmob\#۵Xe1Q^Sptt4I!wXtDQ'jj;kvm3{5jw|Qўw}XjW J-A:x5bA&`#SZ#`+<>0L_%[N8&u1;;3>{dɂ8G?ʃ8=9a]ݲ{wGVb1][SW%Zcu&zX i88F0 =D\g>VweYKkڦdٔA@U4i4~HUTc ~䱹jbZX3K]VKRlm9??RҖ/izJִҾ/smfz*U"T7uӗ~<Π1: W;h㐶k뚺Sa qQW3 1#c\ց@6Ω@ӌGc5I~x Zrnj|f_[|c fM1j%Jo Tt6L&vdZrnJAZͦ%Vtm5đI`(M]w'(Hu]GG$qL]VKPcZ.N}4(5(ܘ$^Dt]3H}P<XCg䪔9;'1Y '`mMшӓ CܹɉkF3 Gy{"譹$[:a;+}h%54a`t]+d} ZFn7=AHk0uk |g^s(T`EBڴr"F)M\EA&2Y v۪:?#'Ul:7|6qkA{u UYG)k]KUHfuzF Q*ׄOgB)]0xf:\]b:i B_JiD9 벨 Tul'ҵR ȸZ/c(d!9lW'yc uUQղ@ʪ=vvhg WC>%tyr{a1W~%wЕ`iD?l뾃jP@:#5--ΰs؃|?C yloogk[<.//f:Qq&Upzt,W+(r"ꈅ !y$P=Xcc>%W `]5ļ\,.8ȹii>"IbFi:d~>M)R/Aw;5Ji^) x.ֈ|6BhMYdYƺ=t0ѕ ϓDy,q$BH37^}ߣi̐$`ܵ-p !Q*N4b!9 =<<>{,~L^Rkxp/..iN}PӶkqu=i |O+. <3E]l:e#|"}0w 1m+lR;D 2NR9IFIk|T;XڦZC S]huU`;EO+LWQ47fl͍M!N+c Zb(J2r~!xÇzvH/NbjM̼Oڪ}|iJ`RJ@Nz\QѪPĤu,!7#dAi B jV~H dzMꚓc)$ʠ?m ka:Ri9lu<|(KʪhD{TUoyB8cQ(eEaӡ(MV( ,؎ B)V$ J+]ll'BaCׁ2`l)eIܽ|BeEetE< k=9qU\\S:+gY&kbDnn:5`hi)w6!f{&j~QoAKu%?R8p BRz= u.W-c<ª,)\^~~IEA:胻YKUK' ڶ^4Odm>SY+kjW^(Wע FI57_U="ǚ*ڶrr.<3U|>#'.k@+E(( )O'ZC/_7Q@JxzR5JY  ^"[.j+#r9D+ˍ1جm|O8~}=o#ߟƑtSYՒ|E]7 MۺUHYUO rL@Ed `1OXը'/$-+|϶W:TA 75RKm {iޘc{CL'r{$#𼔇dfGܸqrţG\^o$fksu* 9=M+xڦq'GM-TX'I4MCp#AOtO+ʪKPg]׊k\_Jpk:$ӊ|RB%_1]1eY 0VeTu5>~6 Q`mGUn.vZ,A%M"-U4"v"c0QOx ez7NDB~?{{p|ƿߣmZKp^yvXlqA]$IJ4\-R5ׯy8%syUE$K<>g[^dˋ pm9?=۱d^?1]|>+*|(4m[Ɠ1ec\ /0uYGGk pd-9'92eWQDWYNN' RNv5"'"NNNuuUQQx888`4Jޗs ї2sEο1FƞnZ Rb~26\ GfQxN8\X-*kslFU՜{ xJR ﱻÃloot32dx~d2!IbF܉ d4/֤I:tlXXjweŠ!߹v͝\^(L&bNӔՊ۷oSUr-p< ,K>z&u]3ږݽ=E"7{\..䭷d5$L&7q3W %vG6piS8y.T0t a&Ν;/E$}N;rГNꭗmD%̳y.&*Ayk{eRxZ2_ o~qE^z#_=X{>^>c6qsvwR^Kٚs|gkkrBFnZ%]+$ITcͦDQ4{\$lnnr]ʲk|?`ss,Hz=0|MKкԢtTnV:HR]x\\peY8{3#@y"uvi5\OkiSs!-B#"lBonk&_$OZn߾N%bPJf2M À%YhWweHXK^FR !UUamLj)w}maт|͡|my$+ڶu]}ўWul6Z76uU=hrRkx4>$(s(fsssQ 666G1KSgklmm9fY$qLN;ӱ%0dqv&W" ?~Q-łdoMtWQ%qkMc M۰/J&Еb<1ȋfq">@F14ۆy~z"Q\~)m]3s <= |'(j@VhH+!o I0VO4 Qϑ`[4MˍLr u׳k(m44l}B[}Ya͛l}?4uq2?g?q>~F4(Տ9؟C Y6 }_z<4<|;wLoqyt?7(dW-^['/5;wgyοePpx:5QAHʟ_+o?z?%7P[翝~*N~Ɔ.tbJK(k]7$qL5{Cr1s||x4b2FdU]1Ȧ6 ~Ex܈?}>W_)S6`Aϭr% «rߠ4Ӟ ׏iWϾLSn߾x<x Ie"pun߽ƛo]˕(8+_*|3~<Ӌ/l[U$x<} |G;{~1C~-~{?˃>g_ڜ?]}_~%IdVo-.\%#VC:8w}z]U<|"I_DtR-y.9-GQܸqc~8T}5{5dw;F}_YkBlT_;1ĺWw5{7Mgj$x-NOO )5υϸ4Mjy;;3$w_۾₍񘣣C<#I>oLN 5шy!ډLޑ,\1=Zˣt/sx:bR9>8r-TT{MϞv_[wX<'|kSIAԶ-צ?$3|݇ژN UU x]Qlq~v}~m dcR8l[7QI7nwaR腓m]_oo8'qsPWnԃ?[ o== 27I)& Ab뮰`pPU=QJ۵\^.Y9؇4EQR>;;,.bxQr0 z?k,iiZ(+^KŮܹs7/ޡiZ4 ?s?IΩϽŷ o vzzc]Fс$XCGgc/qx6b:i"t:i5tBL&cNONJÇKcv6]v3n޺I^nj'c|Mv6~}Z@~DZ7Ch$V@|GMy04 kYrnǦmh؍-OOO1FbTś[N]g8~j:3u}J'lmo u:&[lx_^^1׮mctW%U0RߓJbq!(Eg6歛s~pKsmȑO/ݻ L'O=Z~o_yџ9]lg_?q~?Kkr,Yb7npE IDAT}AP75i|J/iP7Y\?b9? I~&<(d =~<8ܿI4<&ڭTx؞۶%MS=~A ?[o)ZJg.ѠL&SUve1Bd!UU/&CڦE1 ǃ[+n]ujq['DIrz'#:}Fifl->-Bf_4 ]'28>>v(4ɷk{FKE{2o>:8- >0Ye+$R17^){ׯS~({oP-/~ɋ;o$꭪*9dp=O&$n\xs aL{H,xEIߐ4 f3N)u&i9mRŐw{9"3m=k2SeVt%\'Nvw7El,.:ǓɄlҊxPuGS/`wH7u޶ }{O{sW bf/&MP9d(鷷8>:b{{|NUU|ccZ*ioGUUƛo0u[n2>${vA/>7oHG#ϙME!R #gD O^2NErDqD4qS,KVjp\ּ7L'c/vg.5:7ͥS=\+di4,//7x ||U_8ZZ~O_M~?{nf4?a;=~o?N06 aH+uʟz_Z7@)EQ\5Sߋx!Jԇu];́oF#72Nͦ|+_ag9\NyQ;^_4iJeDq4Ķq"8{JiO3?"ci]߻Gu~w#̶mYD `_:xOeYRK*1wmGϣGvpyyԕ$Ixic1V>a="Lm#_u*B`06~nYA+<gh?u[h)WﱳÍۃ]㛨?Fu јZ677k0$IVqIZ>P( 9;;k I4aggW_}4M 7m9Z~kvxɲ7݄b~&"(msorq.Qq~>u%J͉Qu [,+:/Hq>\^rOՊ8*q)BVS!G%*ێ|^c8>P(Q׈eq<ϨkK XU7".zSD7i^4N^[bi eʲ 1^$(-^ˇݚ.(X4Q񵯽B6$Iw(Dѵߕ =MUIoU=c [UtP::}Lg+#JIܕ􋼗&>ڧ)b=5 .iJr&ػʺ}ŹC::E&+x<5$+_[E?~t" C؈,=eŏX\ysᛛEu?3ƈY ']AcGA1шuX]:`*! |K(L=eCViqdE!^{Ok(p.,[a9/o 𩜕yss,[9QBx<Wte>e+l*@Yr93OkMZ>뷶8~U1?z d\YE*4JÛIk}ȧuŋw CqsBS휺== !j:r=b_ eUH/=A1( $jnʙBĎ PgTUMU7mKQeIYVxZ& E!mО'5eQ qS5 `: >;_st|H]I1 khꊪH/$bj4>AB,sLײ\LB#I>kPLW ״U1dt]MS4C yF]TuAT4uAYW+2g>PW.LRpTm+ g!e!BJ`QZIT51%Iʝ۷MO` ggߨuenn)@ Y1YUW4~n#JyA+t'N듦)/ 0.b]ں!N6hj##p[Ff3HRb??aI?)\6'(4%/r+1SLpaHӔ̦|-sG5m&5Q;w&iLTXDu5k}MxMIhZ!=8\Vu! Q*[qU.ڒɲ%i>y+w`{4uIQ C8 RاyZ&Pyi}m&gc< 81aO6JM.6ΑƛqB6 iW3>{>yiMqڍj%, itEQ1h3J(zEA-QFx}_SйxpL>cJ@EtR2I024a m[SWO|ҾXwM9$DJ{rr^OGYe}ag{VUw5gC'HH ˎ)P'(N #(`#y"ɓ#<b0d[(HJMk;q{!׭m@֭{랽:O:`Bwޅiқ,+?$GTKCIk ,R=) C҇4T(gt6 EUGV$7- b3MR2ZPp2fز^!(EU`L: pذZTu3#껫k?y^@;/Wرtg>MpWp/5*Zk`g4p`Z;5ÀyǸKj _R!t.{FP(J# !( HB], ¯+sq.!t7}4Kz "MPa9!fct]|C%8)4 Q}Cu+8PHxhvBBh1RYFt] ,Ѷ Q}<߹ޗ:) ~upu ] |:RI%@oB,ٌΎ+1S%UfCL)hӴ.y֠ly;~ oP :aBVJY҅{}vW=Lz~f_*bFP=xөf=yx>AiEChSޛ1Y^JHQ"fW7\.qm\_]! Cl[l6cP{Ȁc6 @tq4MG`R)HBpM2۽h]B84Ɏ`@a^AR26I9BICȦic⬕FF$1OQW8'ʩ rIM][Xca@CH/n)3zmci1%0FY> (B'1T#baH:(zM$I7E/j=z Y4#j 8!۱ChE$n#`Qk 9423(e Gz$%. 9"q([o=Fwd\r:ўVΉXQ)vT6UNMw3EGLA)Yb8v[A 3n]+MqC 0)g8L8`.ӓ/4MMZ%.NN&\wM[@0(#፵a*0XՕ/ҐeHh0Nqu} )ȫ@1-4}O-Hj u2w@N9!\sSL?Nģ={py0O([zIذMnFae<8"CS21y=x18\.x[ IL@'A ~s+`4D"nK-8(9#2Uz,oޓx4ON0qȉn.`2i[|+o5sٲQ IDATA eYnjX݉oyBZxGk/m]W{Up?ae"}?$=} !,3y8P{4N99 VhIA g4EwN48[HNnksuix0( Z]u!ģPϚpJA"8U}wКٿ³1h2?8zE3d8b0 pmRxSU`q~_s0*2J€$NIsEqk=<0oz <$%jEt߾sH9&[֭[WWn7KݭƻPrqPބY9)&v@m}-t*ɎKdFT}Bit]K.,[D6g'18DԨm"N U( Xft~dk nuwt Z)RC{"YmJGA@:^)=0ެfWԫd)ȿ\0 (/<lC:Xc)oͯ)6LjG"E3Z\_] Ve j:7M( I7| XI eI.jnmq]>=ŻKC(GB ajX:5F 4M(nHi)(0n\}}ߛ&+-꡺ (A N՗rs1(`SՓ~ l6ڌpVCkз (8p A p!μ3;>63d8FĢ( i !Dx}0«rk5!$.6xSp1Ne#lzq~A-XK+v;Xt2Qt(= Z5*Hhݓ*,shաrUAuhAq ct-FiEg498mSAyB$qٝ$1GpRٺQU@)z4, }hɿln8x||1UUQw߹s歺3tm4M!j >9aD =941i4Io 2Ϥ mnZC=[ƀ (([wQҋCmʅ7%I}bx=w ve0;iof[h㭷Ż^Z UF#J $^ze|Dz&@>'j^[Q׍ G7A6}=ܽ{ָvo!e81qqvJv Ð_A2q^8u6N/G۶X,K9F~ UUX,h65-4K=pIIFT߾}~mMŞ96 ) o&ڶЍpyuUYrc8HN̜ Ϻ[3zfEh=kp0 ᰛgn 9q_4^9rzvmh+ TOznR)]_i=qqa6^KՓ#-#, Jre#$QjmX,-r|c4u0EYRVN~ht~~,02GQ`{F-a-ty2#bf1N\[)#pV9iEg &1!״b@y*_.X.x饗|!DUW \7L=zHL?炓g wxhH_xxw$^aJ~n(af;1ؖ形ހ;{z*+YRńN̯+ʲ"kx<8@D0 qzzJ;,A(q=\^^bۡ:lvߎSt}/| Z( [Cdu]'?/H+&K)qttdNNNprrc ro[*G` >k;v;4uKXZ)9?~D&%{Q?nPnzBĈmWY̑inNoL[Ƿ0N +qvA+%dA,ςZgAN҃'9cjCa p#8$lk Cp l>/ 2~)-FN,!ŭ[.jJRn{uUUa>1M]=0}XGgBHRma8vEU1-F1|;J;#*m4N8C HF8;;s&:Km8 > 6+8gB`޽{ (8F^899AӶn6(= \R1 SBx E10@YNO@k*K(nGHb)%!GX.9cdRW@qxq6ptxsH!PUf3 h N)*+, ?;Y.D4BP:NvuѸ^'cJ^>0exu=F#@"F(Zc4#=|ns.' ./(/0(­|6߳4ZG :Hʹ^;h'ik >8 / G(9\g[mA\p5w){}?޹K)Fc IQWX/1i)V+VJc6y1 OF_:J/?W_Ɵ7oc4~/wu?Rx"~?yo3տ/` H$tOIy2ڮ95K-EvB`:?v?3'!pOyH۵W0)hc\\\`a2_I<}{]|a@iȥymΤweMS{ᡋa}c7~7)hy2}(R*J]1 Brp3 pB?4HV]G4M`Մ1z8%nCA@bm7^hSă?TVeEgM'vh{( |ԧ gw__s\\\ X~PWx2ٟ=rk?~w8Կ2ԗS?~L[t,Km0/S?{/;8X..Er Ukc|_h~<#, `OkTֲ¿7{W_2~X.(WPJa:{J;df 8p7/EUU>7\.Q90FYsܺu!k+{Q(K`< $Y]I:g0XC3Ĕu 7DSb7O㔄x,P(=} *Y'B(#MRtmpfHBJTUbAXx0:>Ef'Hmx .//uƓ" `@gYc?qǛe_Gԃg?Z3nV~:GE|+ Lԣ1@E|EQ"iE~w&IO|dj:?GEPjL& ۯ=F /2>ym4چywݺPi_F TxzZ`>wrl{5z7MT%/b!>˯sJ! #lw[>oqk_W/O;֕7'Oq~~dtՑj'/6 U#K1zEXh'Oc>AQD"#2 fA %֛ >aBEʢ@$ǴM A91rXmKͺj"Bݸ5 3@0xփ\g1(P;9#Zğ:=s"4 tvk{}OJ+pvvztmk4M5G^uNKvZy~ݎpQOzgߦ~~!wX > x}bY GǷ>9f),H٬il/28::!&1L&88 `F7Q)%~q}"KS曾n#|k_gMKjEA QD ׫+r zЈq\DюL*!Mаgd"7` [x2IeJpPcz/dՋ'Tnhλo>NN6fxvǂX+;*۶ =?ooWƒHJ+׳fwo~rr7CS=⿌_BF8\.uO?#I+  H騵ƽ{>& >ȟN`NO0͠=mےAP}ki!avMxD \qt|$I㛿-t)7|ZW^qD_~lh nB0 os't柇 NiOm4(o,=e#_?&!MSMǯ~RHq VhEi(_!@Z4ji"IE~ߨm& ʪNnny쌄=e`6b^؃5p8IѣG~&{tt^1go,CϨ*ǧ!Tt(8 Qp/=C1нFJ+czdM(UG0{^F:҄u]a7 9{hh@.QV.!ZZk`ڛy)8d-Ӑȁlʜ9K|CےJ>ɋl} ќ:28/9LxHRH?jbW]bY#Mwqܾih`hBEvp}@4f6w]gsyNmڶubh>Ç%ȧڣ(je 9v[J)& e=(Vt ]<]T<=шOHJ9e_ c{kWAρCvMEUwva\]4Ǿqt_f{1ˆ׵j 6j1]0\öR:=b5ӽO bd8B׶h]BPWGG$2g%)ÐbZG(=8AQM(R(g䪳֢S#$#)ŀ9ml ]xi.I+vWxa88l ʹ{_e$i "4ܘvFk,dpC"&-m[VC!x0@X.Z],K3ЩzCzr[FQs6Ad r=tޫ./v ݠz})QS` <0S)\p0"M f1eh Zc2;@ ),DJA}zJ+ۓ$1zgg+/BaL׵`lhS;B`!ch7|4`2Л9&}euM/뒃D]WpI4nat7.Y! 4qȱ>EiV""pNnw$NЫm[#A(jIUn2w!]k`v)G, 7ZiJ dd #k\FDߵCD:C®Rԥ4HC)uS9!}̩q`!t?caH OȀ3 T!`UI$ø(pH/^y W_}+GpqqI./~#`FYR m۶nf2 r ,F`b8c[0$k%8爣RrG%f} !8$s!ŵ/"iAL. J{$qzq|<#RhL,j8"^SWAD3DQiU*1Nжۖc]#H \A`0Aсf583Xo(8#uFT155}uE)<$՘M9Ep׷Z4P{C:BU~rU0ԥ'ƎeUBl:E߷uB0< ]СRN`ߵ+ U7DQHkzҪs=n'"e%(iB5aڮd2AQd\.`4i9j sp1͠IAwq7С=L{{5E9ŧsBM<#?&UW>qOw/hDZˌ425R HR,.+TdY(/h7UKEC8hznEPGY0 C^h'ara=PB3 di @հFa |5d n!8d^z# 8.`f շh]ۃ3L6mKxG$4H#%C@Q+ED Cޢ4wJ6J@J\]]sH!p~~xB46(R k^r`ү1{CH@.S`vP3.__E~.b\\\Qˋ*N>|scEYV8}s Gz5@@2Z($1.sR(MQk'd:!$gQH @DY-D86+#)+&1272]bҫ:*#A" N0Z(W[';@ScTdJRZEC>u4.K34M!z#Nhmqty^iDܴBEa`,CPPnVt1y2!TYЅ01DQ a ' f .\&RG3݃0@U֮8 s ki.Cm8h=xum@ |vCYVCY7HX ;, Mp룱ɱs$nhRR~_ $Y)DPvF`((բmhUd4j[ ƨP.T˲ My͚8KL}z Z+j`E"ehƇ.K`4֭ȲYo9nxZ^VE-pttWW t8BwqŒc chQU51q~~(C M'0V0xs 7a:y(a_> am(=)I}(яwy/A'xDwnf@۵ $Dq~ ƁWoEڅgyNC=Z$B Rbۢu $N[nx:$i P=gMn1uo%j12,f;_SO8B[Wh''{t?`P!K&!xc+$90~CUG.˯CUU888𛛛$$ q}u.3@C~yԧ>K|_1R,Kl[EEB!&tmwOaGJ\}i[?"X8؝]#a~  E5gS_k(!IR!H(1ʮWN`vF WWW/s\^^xt2q'+b u]Mbb: Ib$׫kl6[?M"tNGPo֘Z[lA@PelU)mK'd ut86fT-$F6ʰmQSAYج)[PԆ4جW2*;}eHmmDGP}g!w R0avmGhl7HkF}0R6h9&"Bz}Gf.'a(]Y0j,p\B:: {zɘx#esWf)WNa)O~$JV@ 20v-KwW?Gh RЊoZUP빼VaB4Mp}}崕^hn,ati o<QUE}G*DqyJIL/`0pvy5f83L6 O ٥Ȇaw_XnU>O=ƀ9~)D<%v+K;ax݇PFZm#_bs=G9oh\.0{4'e^u1I3ϼf6b8[Bh=4uiAky]zEu+DP%鰱6Ma(6PV $bA(Pzi*Q%(+QgTS}ϑopDQcucs"iY, Ԅc^Ȩ6X2#_s|=C;䮛gF[h4Sy...yf ;}ʌHn y@{SaPO$?4X-iXP _-8Til#UFMw7c={x/|t*@Ot~,0D$Qo~7DZ:TeeUs=!e(M(DYd E!#ʀHTm08 b(LSEjL\fH({ae ڶ Ƹj F$3=g{-ë !\()j), q8∰EI )Tp"@|-%g 03, \zc6Y߼"|D>Dزk:0^E8/$_ yn>TЅojHޫĸ#vW8V?`9nc {q1),$Izbsz >7߄ ''gH>RyV3^x4FS779ENcՖe!ߥNIQVfN398h!4v&.pAj(DT&ad<V55}2yfAUa>D[d cXAY~@.F*f!D5`\pU*83whR %z\F:; :+sk <<#K}N:Mtm "D$>RR]DVh<1Kާӗ8W.7F.Z^ۜ ؄ȃggv?SJ/|eL&cDQ dƟ*b4m~oAh .1a2FT4A&\x.>z΁lDOd=<LKj+k8Phx 4\8hSJ(6"RU(k-p i4M -{Tq]^RH}HE0ho6HPpCxG >N =,[Q%f9\Nlv+uneYGCuf1ڐvvvH>B_.OؼM]HnE⾇Zɂ92qaOGйo'?`T'PTHOvKhR{O\qKqt8h x>I;H 1>#txmF@aE8E!^z%WgL[,aa6v44V S^ {O4agx;x1vC<1͛{hm#B+ZKyN! Ju] [8;=CUV%Tٙ( #sܨ:Hh $]ZkHÃIXl?@shEA2P̹$FfF6 /"9I GC.ǃCs M( |>G۶DOJ{-眐ZmKAthhَc4a:0$>(blrN IDAT|GfU3-KnmԨL[7f; $ 9D~iQ8*cDη|m? 4As#2Z~z?3iL3p'=8.\a3BYl0gwo ј֨FOAhJ;;;tjatu#0$n޼M1Q0y*4UaoombQaCH;w6ZXxg)mFCd j,[C^)#<]K))? qtti0/vZ! ~|Agyt>^Q%yi1u]#MSbXiȗgh w7pGAc@a. (Ui7RΉ~1gt0`J)Z@+p7 i4хt$κjⲾJ%&A"@[M&^rz<pηl6G}&&ј4ܽڶ1&qeXiFQ $kJ)Da? LRBݼyhWK"(fv0|">U R ļ Q66f\ =yS"Ǹ~ UUA>h[ܸyeII6Q"MSMH'En A ۶gSO?utW"ꆀ# \QlbA~r[<܆0Szm` AA`)d$ݦX"IFrhd߀SWhn|~;a2W c'@"&d@hi;`!wK0 ]+')\.3A@\qCrxXgǍk\\\K_go0d?B?1os͹pMӠu]ĿQu/~mfc~ )_z\?}#%޼'_H&qmՏ_g~&15NaZeLJ^/W_w}m0Y\9*5MM5O0^ new\@5€#MSvm:;aNwEPW*1.Gے~S$OZu:*)`DC=6Z<,WPJ1sMz s]`Z4V} gd# Nc:a6]1$Ml5ohP4ac[q|+B韺pNH?wLs)~5^zcpŸ_=¿ac߬#?co x~"/G B#o/|? s7ܻG,16 g$/m}4buCUYJͻwOp#Bk\vkXIS#r:o' 8K\!Ocl`Hu<¶ ٰ>M0M ԚMq|ӟFֿpz)@ˋsr0,=a's~Ӈ44!ÌA( =B'8Et4EoLQmCފV2}٩Zmcч{7Z;kc[l7ZҞʠ5RaкIz`'B0M Vu*6(qppr"/,A)m;zx1" ?PCB15K} G~软'~>1k/ZPU5NNNpN_~/?'Y>~~+4ʴ:wGh& wPJkǟ<6~Jw^ YAaa v׿pӳS! L1?:>BS7ؔo4ߥnt23+zB6>+ZQ6S({g7 Ɠᨮ ;)arܹsx@OEwc0 j+h4w#W+ #eҖ.4m ![I^C k>s>w_G>83̛/~/ү7=ìb஋;اhz,">?HRUr]bMcKlq/V?׸=gg=e#3 GY w?c0,J&?kۨ IXP'w\[{tNKT+> [jw'뺔"d>qp_{P0zfIrж[Z')ESJIðTx{Wz Zaf_'?p>Dc:Q045\í[\8t9)~巏qzK_~_~c_&զkg~xD_.B|]8p ʺc$vh( 6 xA*:iEؙxg>'~ͯEzӏ}|!Xa<?~+Oa99~yaG/? KGpy؟%g~Ċ\( ʒ^^J\I>k_=Ѷ I`8k<|@Zc8i$!);Kj!! L^Nc>@ :V׉jI6n16qFՐѴ|v۶3WEE!27um+ЍC )u]$Vo1 ^O0iJ2N-q۷rkrZ}}l6 AxW4 1>NN?/||'W/_qO@d}]>~ǿ7<'k }ןy.9T4X%NO=v/c?{*kgn?.?||SB6 |VASlfcZ>q!xc0_G "1luUZ?c%7jg"兑h@Iopl&]Ѩ\1Aڊº& =h[۷MN >( ޻Dupwk˒Ajm뤶:==^Q3 d >,K,Kd5W_pEQc"c"[gO2cg8ѷ%~m}usE0|w}M_΍'Z_EUF~7vx )E9LpeQ(sgs+l <L^5.l6EGFt} ߪ_8 AM3nQ6 Tt PН|Ѣ)| vGtTP~}RJAMd4֭lׯ?y]\w|o"LJ>>VwRII(]^;Çc o&I읮`ѯ!sQ>[u^y|ss,,y] o좩Dqm_%z}GZ!0l8G1 =6nݼQ9O679!>xC}hд-4̘3I\;qc$Ap9P\\JW"R~~y{9E$8?_pŽGzʢ@(AHn#0ͰZ.pҞ)n޼I܆DǸ}6N=N^=kA v]m&۱ ʅmiR]sf"Q3I5 Y5IyrcUb&1oD]t uMuvz$RHQUqD^0D(;~jd :x<&]zl~Or(.q}N.j㾣10g=;ܟ4?GrauZ+&2)Tera{{&7R2z)r?IJuF4X,0L&4MC!S>ypppjx7.&HƪQH -&s_. | ȋV^N[xW noͩ}τh RPkDapC&σ FJqV ,+xwm(v?NwUZ 5@4$7|_yc:b:]`2@**لX.ט/ t||їeQ@wY DKI}0֙MV%O DL&}7RF֩VXo':8, TCIi(=J J]'3`0@Y殬MXJ0T.w9f|W#^gX,hCs=4&1L; gz9'%w9ڦͧ X,6B^>Si;&ɘVmj#2 h6.B Gʢ-K<7gX.HӔ0stzy]EQ I6ǐ p$ay9^AEpG>VyиN86ԙ J  GL jj0_!}0TBnE!CԀd/(:JH*!Yf u]}E1Q젩+8&9HuQ "ǪP`L#~`Ѫ\š 8l&>p$Yl}u 81`o(*uM*6sQҞE ]ztb8ZU*W{fEa.Oi \.M>FqtƿOۼ(0 駟{/}:%>5n;,U QٓDQD\E}( KRJ5u]! Cpⰻ<SVSHc\PiH4亮ly(mM\RSR}P"J K&4NiBk!%~*٬؅h;ޕ)MPZxnb2 ?Lx !^h[eK]@#85go,.9v5"`6}*ч){֊܍|chu][uUl~nB>b ٢ix*e2c>NNN ½wZid uU0(!>aXm]qHmڶ%à4->{D^|%dg+ ( Hр;\U9SJFA,@]pPeClЊa7ڞ砮 Khsi^-z.e h06'VA@V T"ys0d %ж E86QV+C=qlH[mNv%V8Q55-rg; cc|ZvZ );iAA^%oiwN<$A pΰ?BS޽GNV Ž{8=} ZkF#|l:E+[F'~#/ _W ;KX#wá~(V xnFPf( ̦)☒l,6iZ4H9}C āw`ԦZ^-LCMHLsSJ  ֜|iH4D܋P29KokA~o0`ZC >!͸\+_R+d+]-tmӚ+aqG$;$\%! &pv }J\'ꪢU^L+BA_,í[0_,4-ꦂyDp]?cـ9Qqk=aA4%-84%0Jq9< ,L |MPLK!ekB6]Gzࡰ̖ۻ6UPnMS li!/6-~} IDAT<ͩXMA8<m FqԥIIS\BɭD4:LkG50R $I9kt~jUsS{^u`0m[<qd"M#q8^~my.^4 .//_zU]c໦2hy4 PFBJ hhj *ܙ9K{sf EKvIpI!jq چ$ŪQjW`L8)]%Gۻ8uv5i,#g&SHIyat~ Р8=(4}-rdJmRQ9$&9<4MƬ]%Q.//͈s0#H ;~0#vM_CC0,i:0ad:+M|`-Ǯ Ult0= u]#ssQBRgIlPZ!qtlՒ˞UŒA˹fX.sܺt?Zb6&i@-0O!Ss@ѦnE3zuVԔk׶m\)& DBUQaו5!4MI5I =2(E a6.Ѡn*ȋZi.|9l1Bg-OBmQՄ AstuǡCϡR-u8N܎9U FCa**&'+QpNHL!Ց+2v_!ձ֝)X9ёT_o_@)hd.ꪲ&20Q`gzpGkIvY%.ϭ0 B4G< !EK4}%[8LudM~3Env=  -I$29Tޛ BNO)Ĝ0 zNI-G|υ-5 u],rl%)~@p8(ق9 Bi3)0 E,`Oχ{bŚaH3fk:p8B)QVlw+a.uS$n Ma/̌X箭d=k ׯPJau],A=҈a|aC"(BӶ(~ 2J6͟}l6y\2rB߅:HK: )[{q<Dy5pXg,MMB[PFTFX$cd i xͥioPBK{ uF dG.=;YpNj<[ME<$B稪pi;0 ^g%HX,ִ-5duf*ZeI=n9%-KvD16%f̨Wj qضu}ܹi:҉XQ}0n^d%L1WRkTUtf5؁J(5 3Uu|9hz9B4AY܌Հؠ,6H,Z8 4*'k+H'pFop~M]"(BI%Dǡ|ZAUo^B[cZA !h(r6fIIiP75 sh&^v!6J82VyphNi4e-H*{Ќ44% 0n) fgf@u]s=P:M :|R"ȕ"YOX:7ŭeL^^^>F ~=a4 >ꦁRu=Ueܳ3"PWDI;v)," xs:U T0Anj9],r@Z EQ M]Z}{7@F7c6E*(b784[APqyDS3.{ YLWrsi9$KȄn6eeab(ipCklRII~,ۘٻ6̤l7!hn ,bvG慄ߘl6/[J)(FoL# ]XB<D1A6DKǭrisrMCS, cܾubBh F*6u! 3"*7}hMg{|Fr `ԅu0,sms>d2`CX,f|>R ZSjzܶJ&d`wwo}ɾbM&FϑeڶaZaӶ\UMi9]&Dkz("1H!AWiC.x% !mUJw5$9v<{0K}?{{l@j&z0 Fz=""ums"gwwW4tMv{ʹ `:7󈓘ť%f lήߧT*㱨ǡjq5!QɽedU5PJ5_'!fijhK/ G7%RK)<@䩹CUTP -)fb"yMPT&4XXX`wwg(`7Җ6zUOfY 4$I_xqxrlKؖ/5E?X(߽.N,ˈm Z??mS}4ɿɃI/vtHL.A೽-Q\#SAӄPeskj*TiENGB 4 6d ZwAw eI8j59~8Ʉ0"3c8i/_!MVGh j"ZLUU6Q z3)kz ^鮛/>P@423 E^7p!iVJq 7&j.],S(W77l@MXkM ϛG~I{mt$qO,,.liF#!mѿp՟ZٷHx"\n?#C~6?-w}smv3"Ѣl0+y׷O0u]&p8 tC(\% Cj՚ufVǎ1 tp@DhN#.>@n"b6ew\4 vv1 ˗/#M3UMSYYYkGLZߣwߗBщ7 al=|88e/^ s˲}a#>5Ͱ,ǃ87o/oIQGnV~w0l=`ȕ_Gڢ!O0hZ)DF lS^Wg>p./p˟[lMy0ӷ|.r-} Cgiq8Il2ms1 ʓf^X![Ng  C6G67iضM#K3 ivkdYFIJ7@4501(W%Zl6S~D?@[[-W^)#mۦV1uzVnkk{/diix,Dq il<}27 CZ"ƉB&$q 7 J\?WBf^|/|j[gz*Ϝ9׾Ox__ ӟ(xɯs7 3q}c+җUM+8u$fJBզpy >DF#(?|ߣnc& ߿[0Kx,FQooAM4KT[+vww1tE~yQ` ( Bl5N&lmo(bw5IF#ɗ87p*npӌcTUt677O&l6`HM*qnpA677ՒZwS_U(`@PV,y{ņ2{[K̎w]$MG̦Sꍺ *\~2rɓlle) im)]wowׯc: K36nl0vѤr˱S/Oㅅ`- `KH50駟ȑ#qY)x<&BQ&.Q}TUc<\yٗBBMbm0 tz&4J5Mz.XX谸ޞcI˗4 vJ`87/t*ͥ_^ WS/\=^x̯ޞJw2N_j4^x2alnnlwDeSBb[&j7}q .tD]>CP"n?LOV,/|Uem.Q9{{rSj5 >V,jcBEf8GxZ}Iː<ĞuIQ1U5LӔzASoR5iYewgUJ/,..Il d2fe2]i6(¡Cyʰ +@Q<ƍrhhlj%c ϛ,IKڳWyvqqzAِ:rDQ(}57 d/hQɼ+G( =QX_vwor hLC.?mjU^_}fO}G8`8pU>y/]biCR={hU*.( n(loox-֘Φ |/.X]6tRPi"YRb^& GmY5l,˨.(q4 Pdy7GRߑ[!WI}عO±m.0Y _j1iyGtP-Lx^mo8coo4Mh ;N â4UCU3Tg8ܡ^(3:]FFUt)wܢ,YYY%|VWdڑ&Q*ax{Ÿ}ΞES+B> lܸeY%LV@tM66bşCU5DtwoS@mb$`L1\TUa8WrA6 Pӄ"Ы!G=L@)'zRI-L9a&D􂈂LId,tq"#m ;KUQ ph(rsU U6fFF0B$Rs0thH`Ź[d #BQR4SܡgKn/-:i3 yt:v]V~}](P6qro>ˏ㨔_|TL x,6~_H~?ƥK/3N1Md\d8Rqߗa4P lES{ {{ǟdzy;ConnΜ=GKW74ׯ\<կqǝwM̋/~c$˱lϞeecqcK֡@/>9z]HU%bcc,:o*! Ð I\DEe,u4MtM#E!d%iLB{Tؖ4u4Y8,KQߑbruZ%R ]#A2D`Y*> ڢ,N &kDQ@ʌU)V]"NMU)DYL/*dڰ*1c:q)K8t:3i&CYx7ZmX dBWtL0"4TeSҍo^Ff3TUdS򲈏B8hE~ێqhi>i{#<3NΜ i-:r]7x饳OItwv _zaz>|;YZ]3|{odLGlmDdtVZlg i1MKղҒJ~HzAu L]YLK%=,KhuMnjH-VZ"IL2T TMƠEdYaiB {%x&tc (T3}W---bY6a(c m&1ﳴDe4+++,,,Ȟ\Xg<s18̙h4m\Wy˻K/wŕy{J3>Y^r{ JXbsnX%eh4M)˨*n"\x}:*F>-t%/_&nn}:a?T ˙d*/]೏?ɳg a2%x8 oWVE`r0q?`í7@xpasCtYZuɋIF!ɘ0 $ܹ?v0Quenmx0ʑWXtM(2 ǛNEQ(丮EQeF2uTv0$at,~GRPvlKV "18ĆY,J8@@Wvw׍C %Oh*ضy"c(4ϛ)Z$ iG!ENzضlo2mzd21yw"g8`,ݏVE 3_䋋Ke0gR,6tk_*!7nPBfUUeiil&/"A"1f?O& G}}+ɔ'؛xltlzY;x,*Oo^ 8NqopBx7P%KKíUy[dF7öWT+LUq]`Z&GV@R02TɿW4Hl6EtU1 i2MKD|i*SZHSpy1i`| 08v/^n57NR)Ӌ677h6?~pOaрok b>'x'/y锣ǎ/={ſ|togmDۿ?|ˏM4cqeʓ<DQr4nS6s,rTMALTb[E1lۤVUL~t-diBOƟHd0L0 N *9c[&k{3,D@7D. }"(`2B$ax4"ECS%SQͲlh ʁU֖FȭE/c~a&s666EXFض0)y CVWPJ)_^^fssCڡi:ntQV$Ԓn$4S8 fg.oxӛ|^ C,uiM߾}x sx?Z5c9ҋ9rGէqAD>}=\WR NgD(E'.YRqi-T(ʉql!4QMߟa!ۑh7 t2Hl2Rn*6 賙>!\}Պ+ 6 T\xmYh4a&,=OȔ6*2/r8 KS8F744M-S2GŵH1r,Cx)m34Cvw˄8uh4z}n@fyQl[L4h4\tQ|lnnν8XYY-E Biy{r3ktB뱰izZFG,--_ {}pٿڡÜ} t?;ﺗ`xzA'_!bjU#z K.}KGOb,3Dҏ^`qaJBlzӲͶz=e<3'B*y Hq]딟mKRa4t"Q!qj68.]0 XmUSQȨCנșNQHQc[hmfYEr!'/OSTeLMa2inP;ƶM1jVEN82Z!ViuZXuz%Tؚ82ECjjX+pTeb9p8XtǑ>~0 w߽e`,Dz)êrc۶I'b<y+++qL( c4۶HӔ2eww8}?^w~ϵ="n-k^ (M߻޿3g^8å˗Fq,tAx:ԩST K(BB?iuMeiq|Dq)ض(L5e{~[IqHs1X$"q: f>ץZq}0Fk䨨J.lTՑQPB IfYJVP;Q(iO0CS2/B,$r CñD8˳R2 >$ 2rkzPq,Ԉ\/LV!Q<%M,?{*y1#(9zPUK{~>Dt]G4M˰xaiaiiFAFtTU:2*7`JE=*h(7W""]l|y|y6b/3W<?o~[x焜yQ_9rK.QÈf *?Xg&⅗I… \|8|{#|$Cv״78R,2єr]td`K-<1ZR ]&7e6;hih8d" #0󦥫 oxDPnnzx{&׿Yr "qsl6yںyUe&q8{{ǜ$ш')C>v!0UC|_VrtZ'}*n4ewR8BȢkLc1W v4$gh*yI[(krR#\|P$" ]4#L/tEH7N_@t JӆsI[}ҥKź?N<~m|?`:q9F 6{ xut]xӛ"o~ӷ~7~wuY*2M9~O>iJoq돊E U 1uMFDrJ_}!D2rgLY(9ҝT%>ML:RGEN^!c*L: J]ie|>׶m$ٿPf3y AAZUFg";-E>s!ls<0Cl4p9Y0[b;:Kƒ%I‰ǙNZM9p㤌n _[[u]P9߰Py~C1aynIycaYO~CW_ƭW f;](ĉw9qnhrWFf5o#?2vjGymoy+v?x4UYӪ<^^?oyo7tͧ4ݥYHvql U0\fiyAL9as膁yTkU:E.H? V8 :*I i)$Hfd\7gIۓq#4UE׍*BԫItd4]g~}p@akK@C}~1kk+|7kgLoЧl$w:x ~?6|u{^5~Ykm,zx5ogN&CN:E$u=~} ڝ:FCQ<']ZupRۭxp#wAD } ;cdͦ$: ;^)Y.N_[o1[[[[y.6SVԪ殻ҥK(#0 u5 \/W:,-.rlvje7z?>?v]h2DUtj ˧x'9z3ߣ~OѨ& Q_±/'|,˸~ſt<Ü>\;OrA::՚bhtCuoxMJΩ;m}\!'B)NxBUjbn(u6>nO& VS<Ȓ7F! {=zE.w/(h4f3)aҨ7xޤ À,8v֜[Tlq+ e`.sndmJťZeEa6ni4Oiy:t^ޞ}%&" 8f:4F)u  ԟFAZi{˼JREΣ#߅W_sN^ǧ>)!4x@T< .spz++L&S:f޾| l |_dye#Gk3 7c2⹳x8ҥKLξ,/s˘MkhyA45hs/dMuqmԪ5F1ZMܻdL&{{$I\E"O8@ ? @$+ ]'xǘ)CG2ܭ$qY,//I 1Wu(pQ~i|iRP"@4 dqq'XI+M6%q]zyeY̜JԮ]FV6[ILB&Jz.K|ZeyeMS4R[yYl[T5W++˥wcc5d_]u~רV<^4tvʻDQ(gH"|9R܌Zz0Y]mjio.EĶIm[,..1 JjmcY&;; Rd-0L TU($H|H k/qG_ .ҋ g>e KK˗9u^+ra)XBtv-*;>z!翇mǑ7~՗Ytc&g_zaϠEWu,HGVѨc,ΰDy啗}6zX,ؘZnB!V1<<`vܥwX[rqv_8W.JNL>:-FĈ9ߏ}zlRZU w+?x؆j8_3yl.‹l2T <~j&Wo0<<^@sm ^{省tPHI|v޽w[N9ql:<:thE4/w\.H$8y$3334 ϟ' tbzzx il6;$`gNJfm|wbnn?w:lg}mZ-ԨV hk^(汘- FaiZT+!m4T p<SKTVG0Ġ7Q@C<ꬿ/ut: T鷩TJOb6ʮ6z9ǃln)|, k{Zb7 jenjN+8ɄRZUJ(칥RQ=h4d@n7T t{wƿy>ֻat[?ZXf`d _I+TT&8vW{>Fq\tp(Op:D"v&&&rh1qoNLLJgqal6K:<|Gy1n޼E Џg޽)N:F)Ta=d/Ng!T*۷<#ЇyRJqvAp * ÃSinݼO~t"w6~=T(m]", ¬VKv>jB?`$2u vht V{j^oP hzO`0D*R>x 7upO IJ ճ:vӯޥR D$2JR!Ni6d9,2ګ)lvJU^r(d!20d<|~ ƶmCq`9r?O<~7Vƅ3'23B.VxW/2m;/_bHpٽ),i1 @L&ŋ㌌ ?^-f BBHDmBA?n ulYZ&KˊTtp\$In7/^To\..UfffB$ }**{7n(L"r [.v ~qY1ʹM IQu:zEl6nbH.0RRQqW(FV0d2$IC2p(RV1Hh IF mX\Y`0$iX[['zV٬hZXJRJO#a6|"p˖-b124###$ z=>W9H_͆CѐJ,.^G詧Ga}c*o3?w$e,#s}<ܳAjǎl۶f\,}VVkh%|M%0Bx#SSSB!Ξ=,>K[%37) s ѐ`.,EWuj3L"TE*r"W }XZQٌ"4\b!I|l6V"$Xk5qW*y&v }ۤ^;uݻvsWd7Vy8xgtz,& VEzzIbbNb0,{s9@Bm@ECjS{i*ʇ={v]fQ~>߲<b>z$%h4vX[G@ T1Z et: )J8NȣU޻H3vD!H(7?ahy'I `> #<&/p_#]];iZLNL J`cc^"1Eޠ3Ig59E,.4 Z/3g%311ם;woSTi6g>6Ι3oҋ/36^xA}|s\.$x\/8N:˗ZB522 W\ ͪE  0LG9|0_t/~gy/r޻|l>VD (9{H$ڬ F¡0++.e'uQut'+7XLѼ1  ,qN{LFX{R X *`bDZ&G$ARVzf2XXW]VѠd πD$a~~^XqWt|gxxXm"L%LZA?<ի8uc0D'iٹ}̉~ѣG9;LLL;ШH'lcthwϣsd5$ 8}{ݩd0,.-',,--qi8q?XwRVT@0:xq:Y. (rYUr-岊r\.E#l6{n^/?Or߿g  ֟ׯ_g~~^mB]AsHP(]z`2F3X+gSϻMX# A2vx<1>(msj5Ց\x<,--p)3jT*vI$Z!7h$ _R*Ȳ"-W^W޷p]XGDk  ү) Hz^˲Z :FGGU3JZezz7|AdΝ fܹs$I}QŋyGf;t[sNj~WunBA6;F˗`S˪\7P^YsrYVǝ r9(d<VR$iyHnv|^eml+ЎpX#]IX^^hBab d0lV=KDZU3l6" t:EZ&JE*ueVE*R?;1frm@LOO/Q #zz͙Y.:8z}i$}sR)o044$|"S;'X]^Aػk7DE X&1D"c}(I 'OF*bccۉFy睼K>}^xnK$Qb۷oX,r1z!UtW/~ Ξ=ˑ#GXZZT*e8Fn:].m۷FÉ'%޽8͹;D`΄GDj#ϩը#L&*8^d2W@DmX,V5׫;x<RZCYN1W^t248Ft>7^?O~XOS,8xp?EN%ͰohuZ"%YsĔ1ޫ  #i% lٶZai%6GrÏғi233C(TٳqDԯOFY^^B˛ǹO:V\.b144KKKbq\$b.]"L&$ Bzr$ ~[,/Fh4HS T*BP$NQ,q9$ItYto\doNj io_CI(A;7 Ţb+u>M2c9qBѐT~g֕'(Zqb6YFX,TE,.U)ǛJH Nj"$ Î"NrTWOFAiFt:8}`m0h6DW Ef^VI%Ytspq?yHAg}$Sif_'s{nfI8<ġß"Sp\_~7Kpxxa\.7>XPֹr $JeSqR'o޼jVK,F`4Jp{ܜ9sNG"h4el@{zKD} zv;ٌxB!WF*AwĮjx?⥋DWC.pq"<BR?20,: 5({L&In &_=h- t5]VV02D0,m0H$^uJY$Dݡjb6t˲p٬t;h6)EcnGtJjq_o} JCMV\*r(T2v HK:fv;Z^WP2Z]V0[, izב2WFLV'zls|T~%_T*^WLb^)˄¬b)l2+ -l ڭ6rDN͆NAwunQ4oxocq~L6KզO9ٵ3h6&JE|/VzHdB*hes}(ժ &F:dMl5U@^Wbzݼ>f8{ T+U%Vec}CQ ] 1 5 2 70 19 27 [?] 1 5 23 70 23 27 [@] 1 5 48 70 22 27 [A] 1 5 72 70 21 27 [B] 1 5 95 70 18 27 [C] 1 5 115 70 21 27 [D] 1 5 138 70 17 27 [E] 1 5 157 70 17 27 [F] 1 5 176 70 21 27 [G] 1 5 199 70 21 27 [H] 1 5 222 70 7 27 [I] 1 5 231 70 15 27 [J] 1 5 2 99 22 27 [K] 1 5 26 99 17 27 [L] 1 5 45 99 26 27 [M] 1 5 73 99 22 27 [N] 1 5 97 99 21 27 [O] 1 5 120 99 21 27 [P] 1 5 143 99 22 32 [Q] 1 5 167 99 21 27 [R] 1 5 190 99 21 27 [S] 1 5 213 99 17 27 [T] 1 5 232 99 21 27 [U] 0 5 2 138 22 27 [V] 0 5 26 138 34 27 [W] 1 5 62 138 23 27 [X] 0 5 87 138 22 27 [Y] 1 5 111 138 21 27 [Z] 1 0 134 133 9 37 [[] 1 5 145 138 16 27 [\] 1 0 163 133 9 37 []] 0 32 174 165 0 0 [^] 1 32 176 165 21 4 [_] 7 0 199 133 8 5 [`] 1 11 209 144 20 21 [a] 1 5 231 138 20 27 [b] 1 11 2 178 16 21 [c] 1 5 20 172 20 27 [d] 1 11 42 178 20 21 [e] 1 5 64 172 12 27 [f] 1 11 78 178 20 29 [g] 1 5 100 172 20 27 [h] 1 5 122 172 7 27 [i] 1 5 131 172 10 35 [j] 1 5 143 172 18 27 [k] 1 5 163 172 7 27 [l] 1 11 172 178 29 21 [m] 1 11 203 178 20 21 [n] 1 11 225 178 20 21 [o] 1 11 2 215 20 27 [p] 1 11 24 215 20 27 [q] 1 11 46 215 12 21 [r] 1 11 60 215 20 21 [s] 1 5 82 209 9 27 [t] 1 11 93 215 20 21 [u] 0 11 115 215 22 21 [v] 0 11 139 215 35 21 [w] 1 11 176 215 23 21 [x] 0 11 201 215 22 29 [y] 1 11 225 215 21 21 [z] 0 32 248 236 0 0 [{] criticalmass-1.0.0.orig/data/bitmaps/menuWhite.font0000644000175000017500000003442007630537344021622 0ustar danieldanielPNG  IHDR\rf IDATxw$EոĒ% H `Dş "( OAQ " "|QD 쒖²qf5=UysOt8]u9H$D"1ЈC r6kn "Z."`{Ȳ"ؿug?͇e9QDfByB-{e?[OV‘Fk5Z_TD<=e<,"]D^tgKg7Yk,Ǿ=c/kc{ۜW)8}5e40}7g,:p PhG,efX99@,o2_KER;ˌ}#Ա,pmGpg>h9 `gze@,W6]jGTOX-n3M4i1qfG#A`Fx! oMmZ\N ,z2 N˶{9mZ-=vF8i~8/?fq<Ƙ=a9[=ݻTWU6lòeH LDߍa0&@D("oVӲl lh9?m7cVmU,`pzcCgi0q:zY].E`y%,x XmeͲQB̷1Ǟ^,p\T:aC `Q|{Mt#VDm="rLy݉"g;[Do0o7Ytv[`-ޢ:`?N /'<>k1]DP@xhLl(5iFF1h,Fav[mzZeBn8B5-e.EzrY3<-6*,[¼Q6 X E1fˌ4H *g-&5 8:9] BCΧ5灇QͲc0ˁQ#*?h~p]fvm--vld|ߕᙁe-aF*3<9w/kL:\.#V]ޚ9Iǁ/+Sjۡ ?|`rek7r-2{5O8fX7Z(UlݭE\Sknhk8yW mazL>GS p7!؛^ST׍>Yms-i[:{wͩů)4JLO̾ "/>ul= J\ Oepqo p?fU\7k`q0ڦ(}7ڙrE_ج\"[β1;8隈u +Ӿ{eKHxqe+"t-ԬN*rro0gi-ZZ2@}o(FDäO7Y̹t,\vXpx2?ZL%mM·>Rl<:=~7y'-fmSat.{"y$x sפ=]=_3>9ƕ,)7Awo9O׋tssg\ݛmu|P1rXʽ$i~UEf5Z{"KXf(t΃\OX-5z]"KhS{/gJb #q0Ql +w_7'HtQE=R H$Dbpt}"3Y)۵sBYa*^$j@D6+qRHZGo3Dфd[v("?]3"򐈜&mq=9[D>D?{xo'-lyWDsD2 `mqf*;6XY!L, ME dD}~YU8uu8p\Dyd 8 j~P5hB)9Ե6̀~6-UMP%ޗ_/H~`K3kiOa6"!?"ZЗۭ*1-ОcY (6$g(cib+D歨AU -w.kj +pE{h@"t{p )DƗ52͓@Z LQ8-[Rƴ?d'ed==s܃Yً~_8{"ŀVhܔPR1cqE?E퓗R3?x[ Gdl ?":m7ºɒdT;ءe{C`ʬËM25˭,>ڔ]3Es)c; &9"-]D\命X9bsQ?ȲRooYN>ccl+6e_h5޽pyֳli e :ŵ3Ba )q~g%rẎё!&wI{[BD$ۣ31_;.J>1P[!,O#7cn]\ۤxzy"29[>#{WB{] 2m:(Qf3yS!Y]*gǼ^n/Ȧl }Re46!^mlNyݩ'4y x\ր纎7W#Y'sADVlXq,1Bd?W_("KZ'"{ڽZ]~xdWZ< "[ڸJs_%YuD䙜̵֖Kl&%/T OTQ>!],]ݻzwÞ_9.q.Ptyc:<""k,,Eė:ƲWĠl\%xܞ}3c6=kO*5v_ ؒq6XMx;A|~ŖP%Uسl)keSvף l9(دͼf0 `,O^Go_®aaq`Ǿ[C GoGoc b*>dl{vedΦ5Ԭq]b[v]1ꌭtR [k)_ݱ19ߝnKD3ϒf1Ϲ5?4-j]$"#ˠpa"HYU+o=h$Og'u_T5i,lNDӃqV 5&cB ^7 /> r&cG"1>|<P|yzwMTL}W16Ӂ{݈t<{Yub$\TwFgAq `]{ uէ A|v8[gSPW}XЭvFx9N;[.5Gݡo@VC#h|o)2Yht2D|~ àwEܼGFǚ/0:}D"ѯݛCM{H$*RDO+O%"[O$D"yQʢ{Lmq\QD~&"ӤXxY"r-ˉOE^)،۱nd{[_QDK]$yPDN,mJTwo?J4܊Cg^J3R=u+">iiVdcL$eu1K [D*/QC,'c1@L?t>iwAS#\su`y op~MnĠhCڃ[~4|"ޒRGgsu~b1cHz:<Ww| 8Y4;tX3{kU漟\S=1׍k5*CL0oKțcX:C,5}#O\E[XPʄޒ"dK4AC !#d񍯭E7UCB XYw܇L` yϟG3 ЬU8r)Wއn$`w;TyߍH}Hy284'{7xo8`'%[ѵϠ}eJjT%p㘙F *\4^LYYBSo8[C98ў=u-YZD"_ʽC-&*jκR'';_DOlqs4vh•>)e cA4Uŕ>)>:~#w峑h?ǰ:lD8 um=)نsbQ XExA2__yKVn\Jkʹ(Ghf~`!pg/o"U|F4_ 6Hya"1ȵh7]"ppD7TUL +H]-Uf#pZkf}U~t%[Lޅzzb) s5k}*:?_EuΡOFu Wޢ]W | h ќ願/@#e"k١lž"A8Eco16<ג Hrz!4Ez  ,@Q &uyi@%n@q5("©_zpqdpoگF 3)h)+4&A{<_6.fal 9Am#'[@^[sS^FM`l$D" JA;s̅"Ґryy:;*'9!ϕmHD>T@w*œ.ETi&7.}E>)$fƮ'v,!3Y7TVϊu8!%$TDi7c [r}F:Rx+sƣh^~`)ٸ< VV aYtv8:m Ĭ?qQT,ۖZ胝j`'\63eYYb& -&z%70XYF@l^WЇ{˾rqMxEO{ҘdJE\G,ES1O8Xn'xBU!v:0R޶$;L=a]*%ߣ؜.i.^8s\nAU nZ Qk:'j,j1oFT!fQ,F^4F! xe%yÀ,BâėGΙj7TO%Π&Y=lG>F+>[SGAfG&!Y\_R6 }> 8t[4J/(ܴ_31kE7Zf:eQF<w\ÀY*l4 ʒMZwERFJuCK7x7̶PE,\~~_}.\Y$98eyO_ِȾEg b?ƷѸ# ^86gcH)ba@ B-w:@W<ψ\_/YH9^u@f!hLd@S(c/-gf`eQMPcl"Ac6s>. C]a`ctJJ;D$! o/wqOBi:=c*$BC];M3<]=ey} o]z4)Bm.3m#z#ۺ E^$/QCՆ ˆ"TF\Q?Tiu萧bאY]%&u;PWgo`uw ܞSf*q?(:{343(*q$@cc2pbEU@w&sP[^%"teX 8vUiANkyIhh<_0u31L,)"x2\ߕH$(EJ?[DߕH$"ryZdgQDEL͇?)2VDalh2H$D"2i7οǮ3=ExY-kH$F,Ib=WDF;|DIqLpHxusU9Nt(`Z7RHy]&i4㾃кHCǥczXIDATqy,Gc9G]Qfˑ?FDnwQ_eBюc5o0۲z t*PgW{s =lb.qcK=1u+\Kp_ewe&kKfzE~ڳP,sh=O($c_p84X|3 k2<2ކ;$xڱ}dD &?l5t}=0Þ% v`%{{]S 4#å.=PeL>̰u}l.4ȩɒ4b Be)4|vmaHW9T &b |Dd: lxWZ0,0`Y4I6Fp}9pe mVqnsJgeW:r5h(,i04-Ku71]ƞp:ձ^:'{^}_{ٌk~6nc;l;l Qߖ>'>cſ{aBitMy\ ޲=;j5/j2ef?+vqd cnuynM|o.|Q`q&&+;ղm1J;A4yR>qlO k;b|w)7Eӊi,U:=GOl-7'㾙κ @SȏT>!u-2҂[.p+eh`=Z3xɲ},d6=rƝP05vMȌU_l]I؝ W>Qʝ+ `D{$OZB>wCo ^#m^7,y 2ڗ¦b܁Hܶ?ð+-*XOLm - 8Ͳr 2zOe|`%Ow~f |>dԪ \! `~҃WY|1@"6d&KG;"g!y}o?q)&2RemĖ(s^@ _Vڧa/(+Ah,-lݿ`m~ ?C8˲q?Es ٦܎ڳ:5.;@٘-[7Y= &pS1w* U@gDlr\1lKY iؗ \#w0lt*ķ0Qk:ڈBNY2:+w>o&F !azPgGHl^t#_N$qH $HbR޶@h4F7a"H$D#lѥE3زt=κ˜[CyLnŌ2VߙQ">ZI6,|^7f>A фy'4 qFßHXI `H :]loǽV6Oo4mHH^UM"r'x"Rʬ b[{O:-Jg4(L0c\INk[Kz݀>yǘLTEp9Y~[ܲF` *#}'bUfhLX)Ƣ9NA#󄆖Zm43D!`%qu_/ehksl=&@s`IǾ[(7=w.r;s\׈=29X-r=_>Qq7m>c^il[4/8d@q0&{Av4y?MyfȹsUYh4d;VbW1oQW$‡f Da8׾h_;p5퓀Ǽ[c{,(kfk<gqgv)*P` @h7!'lDl=׻7u6aì6rh{c߉}k1v?xL\)nnMc?zK5Q6H'pcMz `p㘏g_|Qbgv <ر9Fa{ӻ՞z N4D1g1ԈV_I4mc">䦼:mnf0vv].w1p]qt|k/[m!ڗ>䘋Wr仆?;~^'q=!2mDϵKIY)^/`9 v[l,k)78#jܖ݌[8䛬ws/q5 e% :(D<}*Ca U6g~ jF]M.o =6m~5fNu Iܩ̞w-ųIEg_\Ӊ F'`KˁOiNmV=u[rkB@ګ EЇ0o,G|kɸzy*GϯANMewgciM^=Lxj}mzĭl\< S{މKsLܽ2GwڏbѨbe !pM]튻:Ɔ[ a3ч(x<|6BZ!cLb۞Gތ H 8JJ$9uq&!Ϧ[-7 .t\k67nۏ袁>y>(oݥq*,J6pSc_6t(;<8ًc8GY߅ݡ\!oj.K[|o_g`)ԭV|6Bן/] `BFgћdMi)o 7T(n2LYvAƣeG׊afv:r)˳}CP):TpXFm7rI(wP;t[Ml1M!)Atͺv j(硶pߠ鷁O; ~t6>>5[@]f@\@XFPb˻_؆٭dM""D{Ƶ!L9p.{0CͿ6֢s\KV [z.`k|G8QԨbΕk6Nrj-B|ONsQ{M(_q/g/3DA6P3/=pi(>6QkS nTtz@"rl{}\t7q[p#,Q_ `1XZȹWsܫׅ>#d4z&x=pgO (gfv')DbŲ-ՠ#A&d*+ / ) u߲x0aqX0ks~zPP~sa蝯WM|/z[ ˁ m7H79 hYs'_i:4MKJ >ruڸ0WミĈ y6'~y1zܠ~?~ 1:C ֧3ށh@%Fι@0~qa`ܧ2v6cL|>GUM3?(?k856(n9sߴ*HJ6yiGbW 5`30tHd4 ub#Vh;Kx1^: CFJ3c*U =k._u@džL8pږ@<LCG@Z\`\KHpLSlocZg9;Ɗ7\L&Yφ-&D 1F3.~||I}a\ $ӰvN#!i/1{J AP/o{΅TPcS{lꄋᤦ:?Гt_9gUX%9(aF?dʁx/.d*жl >O*+qC$2 H:JM"V'/_ۆ#}J2ٍ|oI$Y%~8 ,"*K(M23vݾ*ψ<ͣ~?UYm`~[xB4 ijړ06̿7krٵzI'eGzvioĉP  14Qs;:V}~`j R)[nᣦY̦ wyf'{~~)>Η󡫭'6ㇴ3gθdia R)iӚFϿj̙56ƚ2]<|] i\$жnKNa671|42&q?wQFM`~ƍ aWojgμk!麮.+9?N8)>OtF? IyS,̐Q5ظ~護Qa ;w:IӔ2iJ (Wt!S>>F%G\ؕڿ,>v"4Mp8&ӌP[ggя%rς#16|ްMش b;vҜ@T.# %6$B.E"mv| _0=O t\T0SG}^`cΧsJq"! \xd L5laB/F&2^/w8zwu0t]c㍍dtWWWc0jFS2 ]dXΗE>rgn`wlG$(Gbcr/><aahn~Z`|}dLmm={fRܟmĬh)忆ÀV!=lEv<2tXwi8,:1xj7ؐiU1vsg566sɒ%A˲afdQ}ns;&Q?x@ñT~nAy)w \C{akUUU|Z[[tRhѢrݩP(;f6F;2Nk9x0?OF3{5Ն~q/>T2o]1pm]_qXֱo?GvAg c,rR555Zss3[x1_hQr…a6m>C(#W%T3X쨏QF!g8|3>IA$ ggL]us$շt]70ιt:lm7 +k$ß[||,HX tM QA`n-" ݘ%~1僮#*S\=K+y~bY=_ 7]OKV6777p0H^R0V0|/iUKW+_)-DCVX,d_yWȕs2ssH^TxzIcq !`C#/8+i`-Y麞x[KQ|:. Cmۭo#b;oc6]o)qA8t:O޶J0joDG݊K㗷*acʽx `ЏjX?X+%}A_beiO􍩸uuuq4-ۋם́ _ra>Ӈ߸D:{״1|J'2.\knnUWWC4M]ERbrԊFejؗ>mӇL&,H}NA1*eq?cv&bŊ13󈿑\s`D><D ު:74r,݃{V/F.}^{5o޼aVNDrWW$ZQ}Ծ,Owoc خ(vƊ B7sʊ'0 өcY2`97Wd F_\[ȸ%";%Cz1ZN/ǚ2fKеpķi]׹H{^&ؘsGϮ|'mřD[[c,^x 8uwT<ѫ7B  W }$=J>.ݜR`yp+K O7 s]p8xee%N]tnk]ЊE2/Ocq?rB0}saV om?%Y{>-OqUZ/7,vun\ix<Ԃ RO\sp-l~W\q?/Ƹ//6k0*nqn V{Q ʋ,_*:z g n#vnC8-X0M%C?-?2nӬir]/W#{GM?HP8FR#K%2M*2oR^$yL90فq`8Ԭus?鰑h0ŪͦSG8y^}B^@"i1Cf'(Fni$ do(ZVBBӉLOB"~qsrHw@9>]ɺ:^p_0YDIqi0J)܏=bbbaa{\,x_&΢fZ~Z W {)^+rS m*/9!K[YA z^@@0W m9=?8OvU5MK\.^__jjj:\E]W?U-ީ#]Q{dֿKA7`}f\1ЄW`P) rVa:[ʋ~sN/6O `!`i8ϽxGd5M+V UWW|U[|?ָXU9z;];%yئb orcP81Pv_%(D0r`1y xpY.Ɵ{f3zӋ-744 {toԒ_}'%xb.hwܣI|,(ѻ9- i!MzN3^+H]y~^>L I)JKh5˺z*'Ihw6=Gzv *~ ,ΟZom (_Sp"y ,_ܨF{{{޽{+?BTJrl@+Vg <m+#;ÿM<A`/rD'a LZ֪ ; w8&3/!R8FNKJG`7@b/X*Jv*P+01k@J wioP+01@\^kKZBr|u2笜ZiU9,P|m L41*^s_؀;0 L p& =-\w,7?)P@ޗ`>{`oIL\FiP+\~6~~~CS4!WZ!a#xrtMV`H 3G\zW}S4s j&fwbǓ7uNфBj&flމܼOCb*wj&fp ICĬttV`Mس*}s)zN`*B T[Fx,{ѥx* \бw|߉u IxNτP[0$'z*m22ʪ^Sy$c)xp&{L#s:'@V`9 R"Bu|MCu: {ɷVث=ky \n} ɗw=)ݕ a.`drbSL PL< h\7w% ;hp c+Vu3'vǦX[Dx,T,']]7q] Nyk%Z[t!n%O()e尓iVuð8$D`#W&f1 >ֈyM"q)0 %^`nSO^q 0@ XJ";W>ӕٟ豖b OFeQP@^*adv]䧫?c"? 1~n0}=V& AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASO2e1IENDB`criticalmass-1.0.0.orig/data/bitmaps/gameover.data0000644000175000017500000000025310355351306021410 0ustar danieldaniel0 0 5 5 20 0 [ ] 0 -72 10 5 90 72 [A] 9 -71 100 5 68 71 [E] 6 -73 169 5 84 74 [G] 8 -72 5 84 86 72 [M] 5 -73 91 84 83 74 [O] 9 -72 5 163 81 72 [R] -1 -72 86 163 85 72 [V] criticalmass-1.0.0.orig/data/bitmaps/gameover.font0000644000175000017500000002741110355351306021452 0ustar danieldanielPNG  IHDR\rf IDATxy\E?$aE}G&K@AH B" "(+la\&! Î![ ӷ0Ifvߞ̃fo-[:9⦑Цȴ3 BBB"#A˂$zi{)چp&ڹD kqAVYX d5DVb UӁQ}x@}@=?АC>[Nhӭ'db .TW{+k.xRTm=usK,后X7hݤo fMEmLj=%bs꠯&hK0`Cҵk bN-l͸?RydӝDmE^Mj4z؞Dz|_-Ww۔|`vGlТc4uTj80r[?RZ]|  f>1RFw/.ɮ+ w~/c5ա eZH@c+VDQwv4O{Gmm $1裣P~mY(;`*w4@SMW׌yJ @>ƃ#L](k Q Uf?' @cqv= eNky)#LQOPx]3b*˴'}P42(VÛ/'ЅNC elf\Ư$TRL/a%A 1HXyMb\uST@fRv4/%oVdcY W~,{w@c ͬρ쉱#"?4_ݮZT9G _|O20Y- xw*蝑ZtonĎ#v@ƛCPQ?j,J۪ h#؟aO"G4u`&"G|յ$-~̠ 3N> Jo4}NF]חbOGUԝ3 U#Y5}W]]a&>$0H@i"Ō|` @hIPbGՕp7adHUwrưC z8پ'ǘk z8]M=yX,;~CmOlܔ7_Ż!1?&}2{,I0In OųbvC-|V/dOA@O>|}uo>qxwD"R5D ~<ޝU.r|{gP :A'3zЛd2su|Ȃ4ge-Uݑ;#yfOmEx{_5G:xss`kŌ3׻ vT3 թ]i &+Y xLlw8^RMW"3;EܟY;-͍8|ܟ_]O/ hi=~/.K WҚM@LX>~ O؂1G39Q}=Jr #+|Mfckb6|P^Cƥ&T nuJM``}T\x#~>rSwI*/Au2yu)mvX'M#6%nn@x|ds`H40yC>j⳩mC -CSQ" d#3GNt'pf%lՅh"n6 0}D @̾hg^-;dlHnD &+Dٹs}>9M{l`nO՟ۻ7u "T &ڈz*JߪNM0HGCw/ar;,؁0f' $6"u'#}-|3 ?wg_A_ˆ%B= ȲQStV}2ณبvJI@";-[LZn|l@"F@y`5 ]ݢF9swnX\*ӔѸ|D #~'_kSI|-X\_0&xWʺS8z/)c1s!1&ϝI%0dx\~p"(9@xPiCd6@uox"j C4B#+}dA;%]!Y:3OolLۜ%@?r+D лTl\[WfxxRڞiad#$%Z6EIZ?wrOOKuJvÑʽ kT˂A퇷߇}O:븠]6"[ Xlc*n{XtrIϘ %zKH p!m@ i! @!f7UكY#6) Hv3Fܼ0G#jب?C ,Fb~skm&OPKU5ٵG 4?uoƗA:^ zHB-&`GEhɂ=?|Y @* qEb?Y"$BQ/caIĀw[ @w"#:W{W߶Tӡs=q2*tg?/mb`O{ }NW= RpC-@Bd7`f>p,xσz*P n8kU}\6ʣqDzhfq`t]?N^(3<3~7%@Br 2*LwP{ː@g,7/~x(Fk:%HHh_4 $$$27# BBB~?7" }Ј%#kl)`H+j?ҿ 0t6h]u%7$7 6fӡsE.o0 3Ȏ Xi(mݕFlԝtͿ]ߘ5V'=P}tB;JP#@00q}kw'"+X5SQyL `MT huFY?*b+#bOs7p䨿ܩ&+̺hupo!H{./Zk)hד#@@fhc5 Ğܴ}Z5h V3_ZݢVhUh @"ٵi} vPK4xfA*nTnlb׀7}ߑLYG7:@0z?S.>-Mخf8 $R Ğ.koQV@݉$M0;YxƗĭOBo)TP7*e)]_[|SXJ`n3Q/HWTeb SpiD 1HǡTh?5@ЦT5lLAOSEZz)}xtqOaBR(.% ybSrӿjΗ 0[Y Syԝ3n6bO,@W>L`xݑp0[|'4+!1;c[sa* Y\EoĻt%, 1CTW7f'3-Н/[ GH2 'zLT㟍ϏD ZC>c1ٕDk!kOj )XA:XY|uh3gY?]Q wM\uMZNkbW dkG@ lպ$n\+ܵ zΕNr";D˷pjzVdw#V|dtp:V}7PNb6CF,vD3Y7~wVs0;d橚NE ~q ǹ_̚a_84,h.3ʳ$?5NsD|G2qL7:'X*D4ꖠzϿ\eKsH }uI:7ꐁ^ axc ðG]~Lf,r;>l#>~_ =~ 7x|W*_XW=\)]^*;cOoKJP:yr.mX]B @³lݙ_b<2;sY<9sp@.8 oCWcdkǕVx?SM Sx%hot""C|quSލczc05-u__@v8u`8=`v'i2ZAǠQKq:Lo([Sդ[~=VV mkez@6: jlqc󭋏qZVsVʺ ͠L1}B0^_Fd^p93gW}\/n >Y7JpjJØ`\6,WS_<ȋ?}@a؞ +3(_Y/:}}KO'-{:~\nuJ}&$?` cv0ܝȿfX}0X2Ђ@$`D-J((8Sߝq]EgH `z *[D$Y@ݵ)~,:Z32./.@iߢY"Rۭ'/3bt&ÍFU:LCd^Ԛa8B_W?L+b *,9-DœF$)$su/RevC^HEANZ$0-@:`|3ԙz*ױ EAQv0)V$G"M)\@ suV!c֙}߹^G2 J e X=1." q'1D$@Gſ 2~,AV پE.CP٬.X38Nd}ORoK}33@̮:O)` Dٽfd2Al ՏS1ꈌS3 8Չ@c#C /.j)bېTX̶tb3Ŵ-LfvSO@@3ocu2R盋y{i 0q> -G dW ?Eѻ0@7q8fLw'`#ܣXϋ1##Op__novȧu|rFW3B c=G!{oqmzlAlkL㪟nG̎: `.=1@O^?s0n3n7Oc?OkG4Q VѰ޺6YʗqD~xdkk "ES={ u:zg(`~zߊч|R,c"d}1fo TLvmx~Y NMο_S W`t2"=o&쒈}?OHH+(q CoݦZxpGa;u+YN.b?>A2F+߫j:F٢8ByУ17#jT6DJށ_"v&3m5۫!@ާnGc:vV*[Ptq]ue[𤽌OH&Z{Aw'쥜0W7Y}f&.:u? MAxǷ*D &+`0+7}Mc X)={Qw9z .fw쏘)o_̳]?!Y? w"#怂~ȶCAs 3/UhU6lE={5_n u~l1곗fA~0U[[-nY/FY6& ٨uHV@YC# D' nG,Jٜ1:<:bm599%.pǁNB1M^H\;4TGAQ5{ ו9Y0gRTaMF* Ԕ"b-f$pg{#@7!}G;`A˕T_uy1^I@gYw?Bv?5"w:4} 9m =[u~x2@-%-s#0DIDAT+վIMz`?'JfŠSie\٭`v/ @s̗f^, k֩\ԾHv3| d; ,hлO-WNOX`uA  +KP`NGg@~x )Їa$$$& ABB"6D !aۀ|g脄UAwQ;J-nS t 6wey xTE}漚< NxS\(} @㡺fݗzH,f> _z"n#wsZ_JkA6.WȇG5ڀ:'ys_"]KC4Eu]wBk-X G׎Hˤ0?@ø1##<=PRґ\F P}P`6&н@h`o7&  ۢ7vh#l̾4"=ʝGt+_<<A`+΁5G90`\5r/U@a9;R9ek${<.ȴ3\XCŕzD_|ePwbҎ1( C@_fň=) G>nTIX7dU^|/_˶xٰ K+B7{bhi\ah b OjB߀"12vE-qG=l>b4$wcBNC B 4ԂL2~Բ, *"[ fG^@z-eODxe, ٿ9$hxa2þz9h0 B(~"w>C0|PTNKfMҗjA2wFU#YxY 8+1j &蹚 4{`dpAM&@l"xm0޻w-T>>B]5#Qwdk};*!C#udil|wsgiROl<&GϜYn$T;W%Z5b)}W9iyXݷLW,l1ہlOKP'9FEc"TYcBVT# ,%H09+?w ^ P#;Țs4 `9+Cv%ƹ@_hc8>ja#;0@ɤ3>`+{G0#ZT x?cO $ `AɤLSƞߋϥ rU[kܥdgg=Ӝ%{B*y;[xݵ|8 | P:))XS 0x]6;[q]w[H! %#(:?~%NnFV Ѽ[ 1U: 2&w-iB:6`mL6.$Y4FD}.ld{$ Xsp1LOԗ@V! [/{.A+HX ˇ5cCQ};wn2&VVH3;k.Qaprߪ꿓%Y7:m|=)|@C @dβKqէ@/?1{oT}oH&` 1~|7b/5c0nEhT%L^TRˏT6>efF/@ }d&=@/LW}-A]oLv?Ҙ;;ğ4 ')fCL.`@vqx:;E~TRIAdyʆr|uSK:w 9cxg2JBļ325@u;J)`LiO |F#|)g%u<轈lӠ/_XVDM#"!15[a TYc@(3#D fɇ#va>T2ZD =z2K& u Z|'b)ȮEP/A &[KS;1!)E,؟El ٙhMSd_RBMxmTi1_)}K@  He"EhAЧJF/ԡ It]NIr\ͮSY7rd*Yȿxgd d@~h: 3M{{{ "ZcéSl&;;;4NѶ-=xꩧ9wq. =::j??SཇsDX.䜱^я~T0:P1s*pu9g#猣#ivk׮ޞzK)C0PUu-9pjƥ0b)cRJ8}4uMs1ʥKR.]H)!{J{9WuG_>ԗ0,>;B#9`8WHywK3t +:M^bx)ۯo#7`x #f[&s 8$7{ovsZ8\/X>qxdts(/|Oxu5GWk?hUUAUX,p/m۶&$sNCxgpyv9GmХb̬'NC*kra2G-m҅ P5SU˗/r#\xQǩ3B%ommjRfk<H)%#h=B(ܴH@UUj9eff33cMӸ*q}#j%Dι4 mڶ1sMDtIUHDҥK3mKrpUU4lmmb4 OSOD'PRRVU !ܜMTϾ8E2~x[[#lCP+czu<Ɩ?s4$8KQq[H!C W!H4C&JdݟÛ> yu\/~wWx J}o}w|#H)qڵbp_~'rummmk^>_¡\ di?jzUC?yG9ĉ.^K.oO|.n6v]GUUa%_Z,\.9]בC!9 !=܃g}VDJsDDG40'4 ڶ]xQYD "׽uXVz9|Abf9GADp)u ,űpw|w>1 QhQUr9fYa=j "RUD$if9"r)\4:tdܶmkv-!hJi (efH}N)i]n^ީ*9<=k9Q[[[U `o7ciP^K> vx ; VĤXΒIU"kT2`3գCmh#!`]cUz #EVnAbI//]>z '~W̸x"UUÀG}Q|>G4ܶ-r : !_Ub"R]dWUȧXDԎED,b@m%1sASJzʕ4 mo{u3%3k!tkz@D 1FuҠ!"{?a ^M91%UEuݪj0(m[lِ-bŠsr$}*=cfUUdB0 ιg# cT˗/{-*1ܟy稑d &'A%@=–?;DĐ9F5vPQg]I|F3NiFfVƔjA"kqMZƶ }[_#r9Ut:o> _-߯??M)%1R$"4{~~).]f3m9gqw:L&*T1seF(BqgfWA=q &"~5)%۰^sfU4M-cZ.i:hasОrb ؉]̩DM9)KDl-mCeM唒T+CUR*"l"B9;JD Q9gw9/'pըItTN.mBE ZabPH[ M ;TawApnfH\ U@Aj `{rdBst1-hj79dERԿhrB&xѶ-}mwΜ9Dg>C(w}75M㙙{_u]hkUumnZVt93'"DUs.2s:s OÀzM1ƒJkJ)iUU>{==ׯ_O}SR|>בR"眚Sl6t:w_+{{{BHJ5UU%)>::r7Z;Rn7sED^DE}5:( υ#0G"ʉ1fsF}۶ǑYDmY4$"JDIDbu\.RGpM4;w%|I뮻n&7d-Ϣ}#o@fphdtOP9lQ-!,ptP 8F""h)!A8Mr/BT@,*09<+DȎb>hGռ; RZ3ª/C?3<u]c\^ЇzUؗ} o??wх (|l `(b>'NP]ljfny̵^Eday0+%ksn 573uys6!""N)afm# ڢm[:{l^,O0 a6{_}L?^RT9TD:flu]eD^%"  t=3 0u],KafODsmrIU3DaR5™DQ8s$09*m9<dۆ03D DW3gȭԌExs8I~3]vGGhU1GKiYa+)1#"oT# k7Gps T#< Ռ F `͇8xB_??Gƚ=H.TbIr_л޵QV… 8{,X,tz}LK=ӟ +^fƃ>HOF]uIUPooEJc\.K=MB9aNrmtZ4کj%"~6IUUrε'f3B 0H9!78fN(RJDNpD!Vcr&[[[9?__՗r /amy>{C7ZsD4)VD\KD3UmGW5& m?k-8ȱ "'":A]+OD=UU2ld[q676Yc!$"BP d2[ȘoU wMpr;|`jS `kt` 6A/=s(*$x0f)܂A*"9@Y3г 3Xqxa=^H /]ww~g;px*rs0OE:z]qJɥGl#=yA#PM)JJ ,r΁v{pp0s* 3fJ5:粪f-X1sNTd*├f3lr'Ode8Zv,K|ֱc?#wiMxZYI)9U왹%{彟jGDu"gP +ŨY*,DHF*EGDYUݻR.BD^Uk5PpI+w)d03W: "ƉKH7 2ZbÌQui" 'c Z*$#P 2ZpDdL VAਂJ JS8lP8 JQB"P+!c Y! Xp 훾޶Hݍ'?G!/7x߈ooooHpyک1PRjrZ):9YޚűcT=3f)u a,H9guqJIsYDDwέhmDjm ɨD4BNs3իWq% ÀKyx矧TϏk௳kZ|הrd$ha)fDTݤl0mq jjTuՔ }izk]hj0gr9'ܗ"ls@DU  fKq$("f[49 Sa+CpF; : ^8@3T !EFnX?B dDSg\!mjuJ}12]FENOCƽ畢"D2 kqx^~:WՒ{jC1bHlq Gk&"^BdjCD]a !45+.IRy `!"GDb9ypE4{àx;ܳ>{9_e]V!3 G2kh5"<@' y>PS=AuP$mntѕ'Rkʬ躎ke'yK|L*}XG5Sι97À9UuDQզDU[ T՛CREl$[ DN˱#-h+1a"p|>׋/?LD|׽^jӧ\.1oo'?It:tʣnRf s0Pٹ@EHdro`}P,'fҬVUЍj*ȉk3腪#TP8KKI-@pq]9  "ll tSݎN$Dz D(:.B>@pp4E>˸OQi 9A* 4H"Hz#c]+ރo+hB/K|]tmVjDtXcf3a8w}E9rW-\zX&k UM{o눝PUbfo, l:K#(ȶ8+56Ph^]~Q$\7hh0/!98谪TUJ)IJɝ'?I-tz|cέc)9UXb5',@g=fEJ=r "BЖ""LdEzT#<7tx*ID⨈ jѢv/eUU%ړQip,ڣ}x7CƏ>y_H<S0I{ȥ£@8&bS^Ë@2o"=SG.e8HH ZAckHF}p/@`9@%GzM%!du)CSzC~GNūg>!~5UF?UUMȣVr*s l?@17 }߇}WUU-JDE]"K! |J6̜̔Ip!-RUy[oWR.^b8{$xggVM0- Dh:,ѺJP;ι#fnUufgBxKʾQ*Sȿqgqp' 3̸ 0XzFiLI=fbux$Ltͅ]ਁC&(@i$zPZsIx'(0DVP ҞB 4b@HI{ Pʸc%ٿx=H4s~vk>W9sJQ%/7HJXS[P$ q+ IDATNj,D&3d҄&T#@ \A7c]y Xq U uC -hNCσz GP!h`ʗW~;}hU/>bɺ?ag>{N+Աfc-EoP9lwkyFDeJWE X}֣ӕR}(fV",9lUAUUㆩ,j9LND4ME!XٱRFԪ$@D}ι1TA{W9JP/" ?(r*dTd vp/Y8ht@`LzLU09AtTCy u; *+0Z!%xeY+ΠG C(Si0 sk*ORR)7Mr%/PьVT?鵥ZkkQSջ;fnL*y(E{ h*Wh-KYԎ90 bp))tZu@N>-'N{LaC=88rYqYp0=e))QH ?gȤ؁6Q*~)%WX!9x) C8\.}:XՐsFʨ*Gb }/!ReAD8::"CZOp|0Ka*KlsMk [ÃᨁgN@ȃu#@tU`LB$$ R3t )MC#8 mϛK9gOt}vr6OY1i`iګ ?\Ok}r g~g{ɍi2`wwo|cb W"}}sR"-ܶF8:"72!jw7cHo/%jى`q0rSlBvڂuox//*P /7Νc's,keqZι6꠪{՜H6]Dey=umiJUK9PGsJ_J(bl]j?QUrx~(oNb4]@wqB@1:Y5:M <3;  hڨu@>n $"x@ZAHA:ڂP SLI!:?\AaچPWŝ::<{fSuI֫C3 >vke S3SYo|K/7`b0OHBLVҪLB fX4ȶmGD"X7YG r$d}etk %5C ){[2ҫUՙʬ9[n^$V˗/bmc~ג,8XKD6&z㨆_dD> ӏη ; !gT})ŕ-/"k"ڠzeMH92䳐n4 eۺasN[TyޗmX,te߬ u?x6M1ӄ,й2`+)O&` ( DDbmuk&8ehLH1ArDQoR;{M!PNq "?_#aW6c$8'ق+f^;9U}'D|x%9UJLo^˿8l˹9G[[[ToXc۰̲9KgYll7J({SՉFUU{ME Y[dL3aEdysYxliL._v GmtfVi;u]p̙3|5(H&)EM/B)24Ug/,?uB\:.>9sEV/ҷA񗦟\E482{N̰Y sS< ik94aSLytK+?)NhG p 14C4 HD)8m;?'S`^q bxh؂ GsT*H!G$LS(`7L&N!TA:܂P@[qsDճ^ud~foADW;w}o|> / KL??N֒I~yJ)qUUlC)˔:j*͋4W%z{3_K|A 44:Rs&uigKo1s p9g^QUNs !p4͎ɿ#;4Ć((0REDqJ z}U1Ʃ@VU5. PG4$G܏4jo\*E]ФÏ\ k "" po}x;ytèӕ{1cW  ~Cop4!QC#DACFF-x -3"H"T3*a Q3 $y>x$$IE!X䜒sN8Uzp2GUErE¿ {s}ЗjrR^]wE)%l|#c3`M(\rgnr%g.^! 6Z"Dn=!`0 u6,L˟q԰K$Ӣo0%"RJ%*}}*>}ܹs|NgΜdRVY>"1=4`)xo0ytJ]BcوG2MSv- Z,>XȮ载2䘘yaZ8h%dCcE־](]Dk j6=ִC4J6MÆ"v5D"1M67(ԡx(BA!T9()<n$GqQC1`k\=9 c8V&br#߬BTR'~N*I@iBo}?g/i0f+}gRx2paιJD+BE9r3P'[E@ DT$ÝPc+_YjIi@VEXStyxTUE[[[X.xk^Cٌwvv WB\J}rDUdhE\X?it=a9}oEB,i^s})(*ZDXUEŔ㊪ȿM)&;2yh&?X8+!޻A2Dr0s jAz*K(@C&E$oiɀWcM . `pڀqn uK XBt*Hn6m|- u'A _ِu!C|*_BAx wq4bI@REh+TCo//T_Cq\ A\umq(K|C &ZcH䯻AbQA;~!BLR`bMgϿtwsrA @!,~Uι:؄rHU /E#)D_ΙsLTu""uιJAFe Y V&b#RBP}Q*#dðjHᜣcѥZ (0ٳg $,Ml?Q"y1ؒbMsv#-F)VKy.{A(jRuaT,!]YRt,\*&.*e#̯([GtԞ,#ԂȎt QE Moz TcM-zjT! xYe߃C@BGHz k?ux6"M_Oy)] 9!eiRp4m?zOt| `ymT0A$@4agw3wݗnaUǹYJ TFMDt\5ɤHHxWHv<ӚVsR˼a*dѨ~T@-΃@D"""*]gΜ!!PhJ))^q=2j*"w4}x}biOɭiTERZ9`WDrHcxPX&DZrSŏ+Y99 mZ M)P1BpPq)i> {uLjBń$9@͙Uy%jY 4OX#B5ep4Q"Z!# -DemNk0XZ]()ޥd,М3l6#h\k_Z24Wf\S8T[I.ʣj1T_md׏ҲKfis\ ^DBـՉMFQ]PFU\d*n4\m؀W BI9:ʹ5k@5lw‹CE@%XAJP P-"V= k(CyBuP"{dy y?@/  -T878.@; Ihh BMܬp+/ }{rx;" .=s4q5ԣV¨WP@~anY2}(9gT/콌r4K.=fshVfuhJ2z|G0 u=V P| %Q^!:U#uױ6'ojMVk#ZRPns¨ a׼tk2SkS f39Wz?BڍBbjSt>gFoUU ÐʗʎQ&$ $!}4P0}?iF, nhBy5XV`e DPІADQsLr,/#hS ~3DB 7UP(h~^]k76B]1c.à@}NkRUnk_Қ"RÎo@7? z$Uu Jp/#AIb?d(`#Q-2u{ǹD h^ y;CN"r*Uإ e>#"VG=˦j^m&pVAť*CiihC淪AFDB)44Me&䦃c l@wV c!7KEF'`g-y9kIL v"Պa8:l6Y,} NGGGmNـAd-MT#Aq.aU@R|~c(ݛd=( &SN^%yb"T jF4TCY6aJ+sA3.!  ((h$ oD0{ L""%(2D x7BТYV(sdtA4<RBlP@a<Bf )-A 96P :׈3iD= JX@j!ǫLd BȴDɊ_D8p؟!0WQO.+%AU.KYD]@?N-ߢ!݉aBhr,;43I4UJU& NdR Y.X%f*WV-8.WU܈ HLL[wjFE1дi L3W_^xyV,Nu_pc2=3>@9O} *섙u W5Ħ #oi'\\k݈q#!T<>})2ִ\2"C1$BDP^*(h@dM D( %„9 fPD(>AC-ĪyX( B/EȴD/1P-*@/n9p$|O%1m&B ]Li7Uxgm[>ܼy5F10TY=&J7oN}O6+fcqs {c09` NQ%]D$3 " C>b4%\GJ MӰ.\\\4]y>|xXf:wm.wkO8^+(o6'ہx@ L8`ǃL@Z`m|c~]x UlF2\CBçnA㵿<9U@=$,A{?e" (Ci I`fdb@}}@ zLAHHK [MLX)) &3TPURN6neʛ`JYe"2WչVB[w$˖\[^A046M#1ƺ@-e+;W)PJ٩֨Mݳo|Wm\ IDAT+@]ADhۉۤc_Hp4:$kM7ܘ\w3fߓV<`Cf,޼_OPnJg3=G-\xQEal~8l) UH'|lpC„}* YltK-8Bs4Ԁ >EWtBߡz%(fԁÄJ A A'-~ gC[0&L@ . :`+@`p|$-QX؅D,{ JZQD'U}ŦByӝ7 ;::B)etQ` 9zXepldSl 7[M" "C۶\idΨ%Psퟓe`C7'`U !%d |||L~TJfqu6xa8y6Bcl*Qb yʫ{Ͼd~:]q 2W|MEB Q'lUd^@GW6Pㅵ4biRΊ 088mi 舮hj*>Y  8$I @haVwDPEtBaO-t%NT1~_p RE҂I/Qt ;rJ-?_7 " Q 廸x(jV57e9L/TttĞP6/;ODL1ID"jҋCgT_l6WxٳK[W暡H0 :جBszvvmu\0`ιTՇjq{qBM௶TePʔRq @*_WgVwpr ̓#ZW̼ !Ur.F`lkQo6*~B-T'dQq7[~KБhAPP( D$A-D#r `^QI2Adm< TL "34F*8Ź\bHs $86Ie}J)[[:(G2eRv./R$㈾y&z||0 f*4[KNõQaV0pN RSQ&1ƙPL^>Yͨj W\ٝ6JO WpTM#~ݻwjU#zꩧ4 UBM{]Ι>.zraU+Zgruжݳ, 9 3@b8k"UCR.V6i|ugU{*hU5p4K}cfiJ)c>1 (O">oѠ5&R)!Aw !ˈ  d֕s@.ҡ# >xF;HO2>tϢ@tD#+nAe7ń;d>Bx<^Kx@޿OK'Pk4 Yh#I҂c!,H%!@8yPU_ !看`@/U }Z?TZveSe/e4 ͺ vvR곪b* "=T>T4ڲZ+/C2bo!}E"RaμSO=%oNcwu]00/a8nyXaցnbCC@5*TJBR|$P+U' ysu\&(ң#]0GT}脮[r%X~ژ@A [d`f2P P4#^TTt0b0#~E!""<"I8RN"?gn"CI!@t *zhZTTCTD?vK"䜩{1f3F~!E2R].s0܀&;: Qނd?lS\nM5.x97N'1;y6nݚqRJY,z-}L,8qgsk'J @xkw X;{Mey*VœV>t@WPSEBZ.^8~~q<U`dRʥك)~_ށH@s\P=ԃdZ`MP hBiU8B{soTBE~{ Di|„6. iq#D>Bh?/lw0T=k⩜hU@p}9V3KUY Y6diBA)5M$ 1GƽoǑ}Mp[sbAֳe`Qpa?)3r'g Hu:p=tf߆ihXpzz2aBLX !Īuf"{2VZ|^lF(eZw*Mq*Wl=P+s"OBׂ>C2|Gx$-ޚD$w]W2$~?H ) 8Eq SAc"{YBtKUA`hz@J @ Z4gäd†+lф,} :(/ 8:XDTLj0a*F94x-K-(U6Rr@RF[ۄ=,{ɻeyaxz-+cZOY+;ㅻm0dacAyT! ]viľT_kD- KRqgy!hhySAV77MSrβX,jr16yp /A(0A=`R@u@,\in"[ 40AkH(6ZpI}N8/q} y Mb^(Gc 9Xj E肸`d=9Ay@G9/|[9_lؘz 'pb~gLhcE}E1Qcd?]ܪVӞrF׷IJnvՊK+VTSgDU )j`2vK蛖ޭ \.ޞ?b>dWMBa+co![\m+f`^#Y:Bu \J%@ /Gj^F'Z]$x@!}5_k V@(*9plb%2uN=-Gh0U2ޱ 12֙ET|:rriY,vaciY`b*"+[ϩU jv'ɮ$c:#F[qM2o(^q;:5 !8ӏ+gaNJb޲lYT&U ɂՁg?!*m5osθLdsPscΈi)$ ~ Xl*# :=??3y|>x} άGn)bC!:K^#TJ^gLEʞK!%-9k;Ho18z6LmۊH㥯:lxgi@ uֲMWeN+Ozb̹肈v6u^05^Z9Cz݁m@%6]~yZ =H>RczkVU5NuUJnuvP9e@T;+ӵ\ 7WRJ+]&Ŷ&O-+"+S5ؔ+6aގz7 o2i=Tr]Mt t êoc_RXD hC <Ü 0$3NYGl1|?UQʙ瀂 #H7Ȳà Z&p_3V: ?yeCxX61(6iƁ%zD)=l_ Z*U_d4;%it1p72s`s.J.[O/RO!+0+\VV.!.6+^J:C`f36.U 9rGj 4M#3cY.c,M3"K>Z5JsZeb_hdX\dV'zxo)%j}j,\r"h$PU^Z"mv<߻wOi>٭Al|MϽ (xӘH3A=+g X仸k̴`(k4fzy3#X.уP^6h@K$u|H'L h KlM\ kqg3ǘL~rSs,aWSMӽ8q|͒RmR6Y5k*o4ނTGKqLVPAv݈RJq@2|I*c.6 ]P~]$gk0\.@gb/0_|xthzq 73::K8F @ɂ-$LPe(t4D3,y/> a vV7Xg0<&>Ujg:Ww7uȓOBf]QTHI"9^ !Tt&zih߿ EELӤ]a^"lh;+V.mo߹_tellddw6 &Cr F'>Wc VU d%+vͱoMTu 3(vv;jwps1T>̵\[S!*Jujv@uwbQ5Op FV* T4l+W֯bfG"0Rb8NT(X.0nOm 2Ⲭ˯Am:bଚ;Eіu:=;P&LA]@=@ 96X``\ h!> m.( BuH_Bڽ==-vE [Qx$q lLƜ=3R>;IzEl6Rb!9g}/OɲzW Գ9I<6@UOmLhi>tϭÏ߰DҗR7!s y=T3w>֥ȦsVR !4MsnGŢXTЉfV}}7o0=źҿ?dzhMu\)>"W$P 3}:3Dي+, ֚H,D ;KV3ԡCd\[UUi4Mԟ픀qs-xE'| n%6oak1Xm @N.#V^GX{0f cL#v:!W~Z0 :4>ef|b x_~/#G-0[L8$U{d֊ypkUhHY[ȫՊJ)*"ِɠZؘ)!ԳTZ}k,f*4VYp`cP՝$:c%;㚈Vv郡s)%'tnj51ƬDDSQD1Fܾ}n޼ׯr cxf7.g[ <gxu.U%ж2ݸlX|a;U +Y pLX@J!'&}'29Q"˃%g7tV?pP*Jr[êzA+D$а%ux]8YMC #b7ٯ{aep a>Z#`'Omh3D/DDapZ/m+LT׎e}]zݟWSgȼ";|`ˏ&Tq~]|5[9R@DYd%Eo%0[f__c T޸q*ǜBDK{aeJg47k5 EP-R]n эJP RnZ;[l-UpMct"{VW,`ݻ0m &ܬ$&;s~y{l-`Q"pnbC"+wpN .5C<KK1v&^7_kfj>$^}r$'!-ߓTVP rv?h\rgjң#:M5GK)iYYTJ369p$t\[Up.=["nC>GAd|Se8.Qr0 Ca&ll>[1{ЅK`۶4 v^^^pp<Xۂ͕fK;Of-M@+,@TCXIzQX9VQ"t]$"2*c_ˋl$^D!/0 >oUf+g:&|g>!`slěXXQQw5Bw/W ]+U3C?Ҕ> s\yXwY [$|q1!"hۖbOHPw5OBrΘVfJkO#U=yiމ F[-|nNrrQDMJi3)-b1^sq Pp.1FԬpqqW!Zl\ Bô;pLеP@=DW 6lZc_R~+`'k/Fk}E6dY[î]_(n?0t\BeNZT쀉gU|39zSGmluMw Fs)J&GbP-L|&+N׮]c'ьmۢ*UYKTߡҦk쭪>nUW0T RM-;ˆ}mKQUp5x '^EYoj򈋋+" Subg~.ԮOne "glJzzz [8 Z(m`\qZʕlTB'Z z؆K[:$]}Aɨ̡"ɕaYghKk|RJBo@e_!D `̏Z[ob[סCB4|/"PM ss?j Wmmz;@ח8# H]Um!gWuG !(}߻KL"RA!]e+<} zyd":\BT8r+Զ@CEU%4SxZq5ƨ?|-Εyg XVU;0T>VW 9V .!f<\n@¡.v͇..n"[1@v:C۶Qu(Nڶ=3ўy#П[nֿCNۨgrN. 1 2:Hш5<^7y.b971;ex(Mv -#xiH3zS5_6Hk' lA_eؔf]pmK)20s1mN1F23TVR}αB'N6gМV+V+ܸqCW_}UM Pc7MCpsRd.b^?  s .=.*4W7žx>W:Sz䊃P`ǶJ@RifRq\¾uupЧ[5KO@&(D d0G>% y0)6NCz< )k0" w<g<-͢74>"u>g⛽o6N]7r;LfTxuO}6l61j4'?Їj)8:8n jim}V[͕4]'Y]>l߀)y x)x D&8.(岬bk+4 ߿/ HEej! gF#8\6V+U }}~͕5S sӱ69]}4}kA윉hrhMՊmlJҫ+*iJ)Q)Eoܸ0`zI/+f|OXv^sBϥ.,7M/oHy'2kmo$2Xߝ^NjJIJ0ҌENgouo?t(E'hށ XB0l_JksD§>SN ŔR/7rͿ#?<& M uwz@'~+_!łrκ\.DJ`q~uo!8X6w7θ*~0R P+DC.$Vb׼wn6Ndry""'.J/矧qq02 Cf:}ш|)֮p;ZNWBr tE<`kх^U`l+{)f+<LpVcX JYYCs.4Q۶oEHдo2]D^ tGUg@;mp|z d# 4r|齴DNAP1K-{'R&(~ BBπ-GkMW\K)yXl6/| x5E]޲?pT#Zz;6V@0hcd?8lS;)XV=oaGkIS2+ VUP"BRRJuZoZ΂ʇww sj*X_eY˥c%DhhxE]1[j18B)Ͱ5\gP)_;b?v()(,)4G L_30;?GΚoDeKmh& mlBw'ed|?$~"2a߿EϿos۷O>y8t+7{VB5*|藟MK Th5&GY0Z /5QWqGWkuu ױJDX,MmC, nFs!9s(mh9#]KJ >QMQa |Y34MssjP4E>lxĤ,,\[U4"raky < 7M|>gj[wϟ>4f3zw G9uQs6`pO'.TVWUM8izEmYi'dS%/W+jJё:܌HDh44b0}T՘R1¢fU`fޮ"MȪ1r~I[բdڍvtt93_ئZmƥ uEuVpZn9@MF8lzà5tܳ'>c>Gş93hƛhiŽ:yF FӌJwDy ed' c%bhQ Z5N>EVeL#JbB#Бcİ@sD6%6-(x=O-漈yC)(vg\+x%i½LK+dϊe8Q;Wuu3V%6/*.5MC9σu(3@!BPLܫ$U#~ V $Ag3W8B%[u>pߔy;Y(>_qqӄtw(ϛ@kaldfΕRJRzTrWE0o?\VC5*EN0Ms Rh:E?^N&Фmuq!4aqx~{hK萠SahbDKS %^:阥 ǫ|<6ϷM-"-j{ߍ_ ڶծi18pzM{FiHSODϺ>8øF]8w:{\-JbYi408 (r/niˆN0~肜,bT#|4b<[|L13\-MGrzXu*@Dk6D !CsQsK`^UMz8=RAs%U""ڶ\vѪsOA6%.~Op=>Q?8:(P Oě93B9uV[ JN$IhEe65eMP; Զ(aQJ*,AieU"hf ngŲ6^djF߫gkJ{駟VlFMӨegx05[f/O~wŴ-kl?XƊ`1s CP "eT}vcż+0}C8w]7|BmWXi !H]~/*qyTBR;8fk>ݬus~XAV+Dtiϧ.zmZogC *.،sQURj.ڧh7`̯/Ký42k:]On@9a*4Nx]GwFde)L!jzPZ(hQ)z*hA12RLH, Md>G`~œG-;vs]\2c/!!֭[RJ3\VCsW;Xd+]ģ l5t# +sHU?hAKn&b+ǚ~T;t74נej->o0hu~1br TmKP=;Wν5*dT*x*d;XCչɸ*xPӅ3&U][uDZx{_uNHb2p(V*Z4Z ^W^3}=H A-c|C4.G,h3[b92]LMjz4,(OmOj~?y6( 1II&$ڳy !-% p& ͈OW)̖Ds%/e;iwAuy}ZM] !- )%5 є CRudyDXv}ȦK#}l|PYUy2v E+gw)>p87oy:<Ф"BmBD0 RJ\p\9 Q֛qts-Q '5YSF]إ~[0򒼆*\j2%@F>Fr<VxwpYKV+^.//ƍ *kIJvBwyMNoh#Kڣ X4%F1\}EäN)#d1 b`^K` )SjP'sf4HՔn6zyQb;l+r2{w _40 l]mVrp |۶dl*|uOZ3\!שRl:n?=stewꢓnR=Tf;F@U+Do]֨20y,`^m[|_ RQDCbx` qR) nnD*>zUyvTu] 4p^qcU%Uc+ $נGi ]̉=*{Zk AD5*jYJ=&R J@Q:BĄIq_)[yȪ- %"ieU&9ラ/_ѩ-ۙ6Ʋ@*ll#HnpGSt3(AC4PT pC$c!ɒҒ2x3g'S)kqpyk r5uYB;5𚄻nj$?I}Q;lH1"3Ƞ7;C,4ƈ"i!D8 IGShm3g=L+iZFhNE o# TIPeNml8m0Ke1T*p{ 0LYI3(©2]āTUM^,qj,# *ڙMתtZUm'6#%:AdQU'=ZQplaQ]#ꮫ]ѻ&\0#Us?g ,5dչO5I>}laaĂNd* (˲=tN!,UU%P4n`F 4񾑝nz8Hl*mHQM-DS(od uْVΏ#hMӔ&}??x<ޙ {ӳE9nT=C[9mk6A8["jijrMUdN#c0 5,K-ʴ&JZ8 mwrQ5NhE'@Oƾ}cǎ6 򺋢jVE*ӄhHJv_CtEJQh¤im W׀B_F)ְzu , LJ0LV)dTy_]lL%V~2M3csxӫS:~7ws^ ?Ͻ֘׻#w𱅅 |*VWVVZK3g^2!h"#ыs&l6C+oTwLk`Zu$_\uM1t: T7h;Dž%ADiڪޞvD +,KcP%`kk,!p$VA&IҀkBr7>qn+ARZ:h^=TUB2 %U" R*)Ԩ (jPo0`1 wR ѻDR!iPD#M\#f\\ K3JQj.Z( 6/ \~8I$(ݏ͓7O?p=q&X8Ux~UD0??{EQqs1lW `nZo;؇nB l jC ўK IDATlwRt(@!KDƘFRD$ai/;>Yd2i UU[?}E-N377TU9ixigmAeY[y1q,|nZlOؙČE†\#4# 46B@deF 6}͘O5E-ҖiGX5ؽ{1g.Mv z:O*iHی12+d )f@ՃX`U!'ȑV@+%L!DLPTd1da# 'X2H0RH*~fP}!_1vZzpaaoν!/f>4]hil ccǎСCiiiIi+6PX__^"ҽ{36b..n& x>4pߤ|oIHp>2&|b.ic(S+qGZJ1&TХc:u<SC8&Iu΅,%I !46kidLC'L93" :9Nl6@1n 5Ѐzb z 6jVLӡnhm7Y7N/B,U/ܜLOL KI߱a#52#+B @eWD-՗}Ĺ|G?Sx0s5{>=|ހ/y$E㦙+_f34*"5:簸Z}Gj$Ѳ,Z+kP69Zv9g!Zf4MnK4N@ex/L $ksZv MF4 1 {mxʒZ *"( ][[,Kf3y~EYxG~9SKDDYl 2U&RU8!hPpM6!+\C#x0sai9":m"Zi8^u-0Oө9X*}.03}sl,]zt/O|7ig]oPp_q ʲRkw轻`uDH) '!Imʔxh$ϔ@)ArM?fAK *@R2d,[g1sk]8J%BC5'Fv%Z&) 酬/UI*pcJXAɤJ֪Y*RJ/J,)I $ps`nsl[?q/--6"fFGc SOv5?˖ߓ$簭&[oMߓ$XLf~Ͳ9}t2hSi 3Ϛ)MkZj4XmΌ197H,qFķ<}~!x!4MaiZرt6|]Z| Ai|4@G-w @2_XySp)TaZ%1"L`J)QHRbipKRx:B<[ꦆ ;] q QRkj;@Q#&JYb1[Wa}"<q1XO\E@`m/~ygg⚩x4Ҧ@=zT:XkqY__gϞF#,,,($SX UU,KrU[h"=7UUH{r꜃ f֣G N>뮻=ç?ɾ4MSU̙3tI4?,~\~{e!c9椦!hRxzkm1j:MƂ6B(sbc'lƩqd&.BET,CUUnnn M}\8Vz>7?wŌ2{n{@3WFneYc "(IZjr_Z?Ef}N%JCP ,iǓaM5'UThRV Ho}ȟ`>m ax3PQJJd&S[3*< O'Nc=0Wyyb': 4%jOunvlmma8^P__X2bg6~zGW_-q}vZU,4lDDMMӴ<MS03666`:Jdfֵ5!"lnnX*<ǪIXhS#:E !eվ t\dHGA@IM`hAOdf$Rq"Cɂ¸3@H;z:U'J yt(` (Q%&ocnA!_f4OX";?61$>(#g3&ξUW " xf N:BH,;2I-1Re#R!F Ղ .@d,/XQ+q! TB "5D%JALFv;fߴlAbAD `.t:BϋnE8Л'2[텔Gf38T+4#[[1ĉc;#}]Txd2ꋯ{u? nSG3V:}(@ Բ:!VV2PBuUPuF" $L0Lj4@(*qW b ȁ9"0;*2(ΓnIػOޒ$$IE5}ow Z0s>Zͱ Zcy5PUZ]]M4h$<9rD[p!8p;Ѩ?ȑ#;8ロo5Hq42 t/O׀ۜG2U`0d$y>ԊԢ@ lFd jEPePFeH|l0V (RGHKPJ75wxQ&CW]T`xJsRCE p ׎1xշ8 XxpFhџxRU@d!DI;_8紪*=w\9U^ݧ>)w]wcz+VWWBA#4w#A`/:ş IH^EdU1/pnc~}*#'Y€!*>SæGD*ZJY w!QQJԘL\?Qԣ{A UlIAT]#nc~f`Wt iBzkl?T#*0+z b ؽ~ӹz7 B']97???z}666]wU}n';WWW,H*$ʯ7ߜZYYa"2!9km~WLSw/$'ߙ??2{($DiR-,+L1V <9%*@bӴJV8#5R\QH件TDL$BI Q,LU&Q% z !S#OFJ8bAFPp<sk81_iAUa֒q 8ST囸V$7V`m$fm!XCJx"@;j_u"BDB4̼89cLp6n N஻µ^`$IРCU^zdee%C-xrYVUUܜPǪ"]y0 ZN}q Z SG %`up> ꢤ3,VSż>r5b p6NhhoZ.GEr P$*(uOQz(ٻwXk1E~u9+"Ufϲ+Uz$A3`4+зv$Yy"1s'MSޟSmt7[oUg_ur qN?y4dȂYV(”:\pOS$b]dt;J3j!&` R+J)K$J(J%\{v诿gMTg a-CEABVp0$0 SxA C=,FxnEUlt'1N`#)K5?u%@Q$S4aC"W0vװC;Ѳ2,+]"mF~eeE9mݶt:f(]wet$c.#E"Ѿx~zen-m|;؛?iZro͢`.ջAg*U¶J=7l_WN)-D$P%cD ؃ QMXUT*<"Pm  (P$%TǺ-Cu gpRL](, iz اN`88|-kk l>~'}_#GS'0>z0Em@P<2BBJ U5j& *%p-bT5!V% S@:憵 9_F ـ8QU[S͙F!lE1цNecJ8L.Z<c:L&(CGa{:d-9!O^(f¡CGM:N'R9)]hP3<zDb5Ƙ "^_>P4:3_#@~MgfűO( 3sz+_Y]]]w݅=>WSxЧ W-/U;}*j8?nY-0ɶr6'!3uƐɂP"1&POC}%!lHɈ>%!X$DghH >sԕ gJ̀̿C/%)t2VGa4R=BO`*13  tle^}Z$1@Y]hdJ0CXLD u]Dc-<3 +/~~)%ssRp t42s7Y# n"fi.z=>|$A`0CpK|U5W-xKw+0`1)Yc럙z;5B%lOzrc[Nn p6Mg )*) h(SeUiUyP^R+<8Ƀ{Px')uJx*0QJZA}*UPM  hG*Upf{i Lz5}Ձr'nPtlm4+!>Eg`+BP A/ԯsmɲcn&IƘ9f# r]Kg,Edb5+7S9"q$yTW] ܸ6syNNh,еu@1jT|N \x gNWRI |R7A7xNQJpA% [" N(gRJO.3Ē+Dr"z-3;}3_iYt:݃{*B~v:,muFa-njdZLf,)I9e-r|?p~x{!d R+@vJ~2o7Pt4 6*qq;{7ݚ?Nybڀ ciH3@PΣ 1DAD3a<2KpYk]ͩD ASo=j֠sd2s=ڮ/4+wygH;|UUιC_RꃪNDs㒫F :1%"G&8tê '}EXa*:WVchW:ؕ{|@|F.lqT!0E®A{.dllJ[03$$,UBR1ii9  g_=2Q&B 0)PNJӮ?^n?qOONSZNbZ~{}}8iDX-jH5:eB++yn{wozӛDDcLr)kunsnrܹԩS"cUbẺ,Q oFD[Y" 6jBǎkÇGى֞pa-q%'\ߜ,w~u^\LGFڑtڙ,v{N"Nπ{.ZB(C,9 X=:)ҮEoa='gCR525#R1UEe (7ޯe` I"h@  -eS N!&Avv/!,U NE`DLHz. I.ȍ7X"[8:kb>OVUvwM^~Ajcccϓ$ 1f@?rPFΨQUBYUܹsnӵ5⦛nwމGyOZkk]H`+ ߵ7^r6pfL=5u'S-/zV_gC+ J(̡RkPťTxsK,]/ttSl/cT2AA(Ue=TæfAQ0 s5LFTԗAIL A5*3 mL[:& Tbka SL*s=-G[8 ( ^R~BEE_O^ꭞ>} d2^!fd4JsnSDNDCk(r™3g~oEDn7%N#2>:<׈d2uX^^n4vc>;% W X)@C/j/;(å#oXs7Ϊ.хoz<؀orҀV ziJŹFYzQit83 L2dG@VS~0^YJ2d0DБQlS$#P.A -Qa l)[ lb 0V 'SdDA:Md7!D{5/]F8?&Uڰc{6JkX`SȀ$))k/}onChey=YUՠQOreYV>HZ\jh'O+^xY)3,:,{Yx6Namm|hT;䖏?8>y_p\oiFO_)0]G ][w 3_ڬ KPpbR;?>(@4"Ɠs 0K^N|咥>u@yGQZdFezZ+&٬LX+ fe"e F)xIQRw}RuZ8R*HmY3p:6xr"At꼎 9e(9Ŕ)`C3(8E I& PV\d?2I|?~4dk''xǟ|wէ##9 1"H@>clo]E`<[cN;殹*NS̙tg/v7tS[p 7TF]kfCkzW_] +Gn??Ç@pqŋubRꭲ6=:\_H?zSYBZcU;/n+=o먢<N!W$.NAݻ'kI.锨7{UutZR1-A@Z`ľ&'q籝C]]2}I,LkZ#zӢ4|_Lg5vV;f{{~.>LTWszEg:f{aϢvYX gE7 |,md-ܹ/}<2>w4J>B C^ۀgʢ?' jƲ}ww6; IonW>,~y݁|׽umv~>qdf۷q7u_^RmOv t}K?|vUx68 ;r.loP 3#n`P#u$+gZS0nbi?0Ro3AB#MSڔ6|#3PT&H_<#oc+qy&7PpbPIK^4W#v'K.WV C@$:}?wW78sE!xx70]eyT7)@P ZMrwǯ|+Me C=N&UlrR)Q}guϞ=cw4z?8]+7vݻ7*jЇ*NRہ|.m1/}6ʐ4;vR{v2|WaXMK$2=m9.mr;N{ G|_ ' Ikd8KdEwA6O>}[8?P*οW 5}.>]3 |m}?H L؛;0 އ^0Տyw)r-Eb\qpT&#ChG,S`AG#87'ځl Mxs)rljdU;rǂ=Cɣa O?_{^vkロLOOl6)8!Ģjl6mN[ȣWRR~{ 1% }l n"/)Nݏoa/"LFA<8҆45 q%!ɿKoƯ-Dt^wgKswnq~;B!ہWc kh(Upv]m1Ɛ9n4Mˍv'ڸ}+=_iKnY^^^#=ǔk&`7 7~LQx#6{ptERt23φsEYoZ!RYKQM $A5ʼnMIʕYT u]`UCVy]h^sbcMEz cZ8$S8&8ux LaIvg@#ES;_- ~[*?+}?}|3{x%@#;^!Pj߰ʯq^p*yCS;_qw(Q+ѯ !,gTabxJw۩%/yamie{w‚?:thlP^˯jv?~t]f,:ٳg{ǂ/b x=QbB &!ix+], ¿!p= GF{ ck+';/gpXUnyv@u={hAMEq(097PUt=X:nranv.qWlF:`Уtp*:_Ϗ٪gmPyP{)D <'t2'];x-g+!]>|8RtEf[ 茍1S7<5\ݴ>D$;1-}7cUflc$oYwΡ_ZZ/9J/yQKx7<?\Ռ<@ 5ّQ/?vК!X#čnǽ ?oPs1OHB ~`6~^_f߳gOc׮]͉(m- tp0~{wC|e<@|761WVUy"bD$p1 IDATZלss Nk׮LDpnENNCGKKkIҾ=3|!̪\.cp!9 z:6B1EoxP@i?jFӂ#‚+ - ‚0ia&1yugZU5ǏY58^}UnL#""bVD weF MSDdgϞM߿,Z~~Oh6a9$aϞ=C$oiqU.ꯏo9M8 w#w#o7W_}/VT`VDDdri\3c^fn!k-f3{ 1^,"y[^D6\ehp Q Gk-I099I٤j133 Džq 7pYz5`Dh6B[o ecffYxפ@7K}bDE2o]o_ YhO݄2Co=OꄵUsriѻ?j5&́8qBo&?N_jiqq㱈t/ȕ4(EoʬD :@&''hpmmh.QE-ZȆ}6 CPyqzO@G~7p__/0;yo=Rxy?%%4Za97l6g1ی1T$ʼnR 1ҔɌ3feR'333XnDZcŽZj a$հKqEDVvLUu\eF L--o}{~y){ #Ս޽{YXX֡yiZ)=y#A =R{jTG/΁dyyر#n=彜Z.暫jVsyͲ9 6/zы|"YIEdիչO@nq{ {c/~= sDm۷RTF1̫[166۷ogeee5(.%^\P޷>`=pY M#?SoHk\+}G (*b@k^?)'~1=X>Zk#i4ف~[iZk#F[2AYe3==- [wu`0 kD:Ab'E䫄̖,QUQUt=PĬLLLgA4&~5Fm-l qL,fE:EU̸g7t$!G9o˽JG=Gח%[4x0X;&HHgl>Hz<{{ܝyLFQt.RwdUjwgΜ)b2z*wu=z4OӴOjN#\ ] ;TUwDd̙3ͻnDUl7 Q cJc̚š1VJ 5NUdԌH]:#0dwtg=ĤHAj~]~ii?My) ثh1k's4M`TF"5 uKY*3jo8|G\K:}p2nL΀(r4@c Y({љifUkR!y)Wx;Y(Bl@CsK|fDc 86ykmifLΨWpE=2ޏ θ2^ka\}17\XCNCr!)N7Ã!N^ Pk9rIM< M8E=@$" JgH#C)LȊ;1說ѣG+ED,"`q:{ˊカmFېusq~Wu`* 3rzU2ӖJg9Vo$`0 c'T;s!;;;:<^ |?kxbz]ȫgOy|b(={,,9g0~ >Lf5MQ{Z|:Yg(zڳId~?Jd:(ŧ39gc+]կ}kd#:]8WΝ;3>Z^n4b*k 4M9},eQ- )0侺nkݲ-s(.y^K_8Id):Д3].5@1k?_߭7nT?X,|k6$I2@&&&|d!e(_sQjND0֐g96` ˲u{cKZCedYso`%cuiKeAfI‘ 1*DU:?t1EVWF{Tu,(Iǐ 42eWPz5ɓ'G|tnnn_?yʰNаv8p@7cǎ6z|}E<ٳ9rdS:,zF=.wI p)fGF-ɥ c\6ouH_ pfJoKPJ|$շuy$[/)n@!I Zt܁6vH4AgoߊjGyD`뺊n;4zdb`PQrqOI,oUOO=N8lVVSλʋǘ _%N|=M =29_aWߏaw|W`:h~2ۈiK1>pQt C'I: !1QyCHRe,#9/ 8$vE5%{&7Kk mRtzy:%- |xoV'w8q+03Bi@Z[h L0rӶjDN;wV}t*aw7Q(։q)։O|bni'>wlR8z`B ֤161acdmZW 0oC~|?ȇ07l_UsF2 |GUbosf[Ql"1:B-hqZF<:vXԅVfY6V[w_X9??Ϟ={;vlկ&IJ`k6|K_>}{1Μ9-ݻm*_y ^rkSI(+ ǕGJ:^Y5&"C;X5v ׸UlP6 Р| qF Okk>5;DR0)"77">r,8~/Lį ΝhI'dZ3H6S8T4M+l6+///3??{>Fe@YnYZZs72??ύ7޸F}/ ze8t+ʲL Nkb"YO GkH 4wv۸Gy [hzpȤEfH$0=& $ИFmM_}WX^^nWkJ~9'}ݼujUZk8}G1j2*YLiFx=YyJ NDS-Mq-r* Vy񻁿Qfo]/*&PS[GEٹoGY.I $#SɐI&h"I6&B;p q6_Çٻw/sssCA1r֞BG(W9D"E&Mh q $-5Qi#OMALӰ&MRP\b?2}j_ghŧ0+~۷k0ʸGk׮׽zѠ?ԦIi&&l*ÅS44nOPgFwj"/I^?-O@<ģp;J̧Ny#UߏxD<7$s]sXX^F>L@09 dEZ@`4 1a`T<:rW GN5J{TD}ϫΞy4*fǘ!!J="W|q }ANԌր/ 8>Iբ%ǬF sw7j|CUy\ /,9>A ` \H~x1?_g,` >%Hϣ|UGiD9iٰ>HC` ġĨDz C4/ ;E`44̠Y z;} ЕD+t {43zɦq={عsgۗww޽{8.ʬ{e>MS:yӳ3f(hJWCFCk¡mXx^n o`?woyɃSgɯo3E=>{ju&p!1W5o607=见W___G8G b3h@ACC! qAF`-S\ 4% x rD&, Do#le\QHy. fWzeHyI9zh캧{;v{cꡓyiGE۶mؑ$ .sخX7Ěk'K*zݡ/#}gǹlc%`0EBW~[UcVtkb/rBր/"c''$G4=Аl$fu-`lQo`D- 4,-b9 C;\ԢAS#Ha%>GW CyVV$2ŔϾaÓ̙37V{;v099FQ_SSG@Steyr&&Wk!"E} ?UXR 7 #l44C|kN~qg;Gq >ň( ^=0'L)URd ώ>q݊H#$G$6$CI坱yhI3xy1;E$1~?Lq1FB #0~Y@wY+=X@>"Ȏ&zf?133Cժ]LOOs׼ J| {eC5z{OǸG ]G9_B]8F6<҈T4QLHDA,m՟'-h룝hc0Xf&ZAWFE)zye(Pͫ|pZK̍ .ˁ#|M'ۓ P'?诅 }#x8)ӁYq=`:O= X!Aȭk X»GQ1R #09 I#u"T*olDxd=br4dHJ %Ȗ!] Ve3b߾}ܹshhu^(??iX.c21RUk~*rH=7ֽ(Hu(qCm@o]3t`>Wہ/} p 4^Dê0#mwz0HoI9d B#(( Q?+2!~aR`p5'Qjs櫥s"A"A<Cl>";!gHE`5%9rEڡŔA.N'^5^ .nC=.-A_; +PL {{nnVկV9m۶wݼMo _Bu2Cw^>яܗ3u ̭neǁ|WF\3ϺgЉ+z[++'h`,`J/\CyN~Wx H`wT##FR*żU@f30z`Vz.,#KmXegߣIMOz3P9[so6'g~ggU `cU`hlP/h'l)KQ6l7[9gӿ(è" ^Pz~*z4>T,\ݴ^C|}"׍왭/6v)XMHc(6CȒ .<_ڀ@[=W 7cO C*:ۏU7 ˈN`WjE6g(Cf3Z4J7iƇij 9xj1ZՐǪt xÙ=U 5&ٿOKY!CPz-DBqQk"-I;4P)1C}A2/fp9h\ޖL[lT`bXE|ͼ!x&9=!-Iתҥ6G NyBOKG(*@,  d(w/UA)̌ Z Q$o[QQψ` yVY xwGh+ ]$uaPcǎU}unÁ8sL5xݓ`0~Q0J+tf ^pNx>>#0?Qre+uNuFa"0`z(BY\]|1:+RbV)503BQAߚ*jID$YR!FFEGbIEeoxHZ6UހsqnΞ=[ 8cyy+rSeH h+3gc,)z}Nakn*873@5Q@jlHe|iYe>}63LIbQ.0|^B~U'bQ4JA>%Uhi S)HWXW=DFfD"nɔ`c0Q8)ʒc+6k$C5,FT$j@<5Ubqvڵ`СCLOO1N⪫ۭo^y~$UEKGT h!Ee8v 5F_ @owѕ;|uR"9 ÒcɉHIi(.19Qq)k1dyq +$ 9sDB|4!JP$3m@I4D[`!x '-<᭷u]즏뮻BΥ%'nЈ q EwI;hf0n̏<|[z-[\\$9blo\8xu#wA U%CZhQ)[˹,"]1( 4 I q8S kQqNDM-<Նëǂ}tuO($/ !!\L]H=>^nEػw/ ˖>QUj[d(kr8q>paFE`mjyyR0Kki?JUjSK]yGz5-hjNCsp FsL*JD)DI%;GLD-އ*`$>Ǫ vENiJ#ӄQ+5ѨqQ87 ݻwW"b$DQTҒ" 1"`o 4^c 5`[=v8}t͠Cpirh<bfF F^ FDEh€=քըU-8)Ñj8"qDUė–)HK.4Ѩ J#?n х.O0&Cְ1K?Lӣo$F~}]VCai0Qx1zǓO>`x6\SpӜhbDcUɁ宫2|-1-ׇ׼acrd$ hhNfajlO-Q>h<=yH l tA7\A\p0??O0Fg^c,jDz j,C66:Y_O،QltZ)XLwY~8ÜhL^R |jÏm ՞?Ѻ֫˪}_H[-0ڔ0*^aVM^\ j)4 ՉEYilyi]+ރ/fڹL լ(iH]Q,Q` _ȑ#߿}cn{oof@hH.>EӜ~/rD,2:NV ޯV f;X@ѕ21Aހ+ k%GFxh\ȀaM~?}g<ǹ1VN/ b)9_0ya ʾ@ j|(_~V! Gf%kKc!=< Ma٢>e锑#?WS~щz aPp1H/4!iP $BF>3RN A> P"Eri rk ngP7xlTz6@j6{WӀo<P|k^N8ARIx|y'8|R@~hI|N4xVC\?E1gmM~X'\ݽ*_ܻ\EE53Bd F-I#" ň%!! RV <^sT$4CV)/',~E,Ib^շ?+oc4/o0Dh,6T R/@^6՗~}: dҰʜ.\Z:ne=058j BnJG+Rs ;S.*giFGaŎ;V&j*, \o|g9_*ߖt) @Ѥ^=4 bp1gN&bb:&$3MM֔&4;H+$$6WKd!,Yz,+e].YtϜ>}™>%꯹KЫ^l5/3&l>4bD# hA-XT-Xje K%K.N3fQWlGN㟼|2 eO}x*3֓˽{zA-25v?Hхe=%њqLeaak {٨|ta7a{k<{,K_zO`^/O[! wwyFmtǵ"Vq,efYl$Gp3 ;2YKWpT'[h?"{Z^~$Y[IhklXoFҳeeB3ֲXPSjEZ`y?ƿWqEEoI/9h64 fX1ߣ ?2Z7l0)*IQ㦐s|( c\Bz>F_9:H|+iI`:'pjeQ-3lN\sf()G%~/$1Xk֘ůNMmF)VĚ Yixq]f5Oϐg mdsigOBbpw31muf09e%`2FdE\2i^0`4a/R_TPqIX`%3~$lV^ڎR@ղӭ4IzLF0;x ̯7C<ƻG$Z=x"Hjp[+xC!Xs3T;.wsrΝQz]6b9zˑRGU…J|64J"TjF 52"2"1`]ф0y:2]G0F_z{1677N `W;vfj5$M!frh]c bMn&%iؙ]fTu+9  QX4pP N_Q?ew$)ϴ%Qhkg)RH9)wq$<5 =r2ZqzhԗD֟S}ٳs[Vpyk;'S)u;:4m&M!֢4mwzSQ:U^NȠQ9ԁtKKذi2!茿{6ʔdvёCH ?/D&kz9u}??[[[Y˯SkԹfR{wƑ8hspc'0,XY&eۀ#5WLAkWZ);Orx]?ivȰ9#ŭw=f8ϓhě'eHA .+_1wYow?[I{R)UYpъ9񺕭l\Q6/&vH#i"$L4O)%xIc=%x 2Ipx9:Zl,Ҝ-JCL$NaYL"&-X2.H:F;R^0Ҙ2ԗs"^x}=oQuFvE3<Gu0s͞לh:b -bҁNfaNxO:o< ޮw?픦mٹ{[pFzaDO>J],QjSEd{I@1_G.P UQ1(tS7zz0YGv@1P&GVJu2/C)%R!;`d*n )dp,{k2taee9rszlԔNѳZSؑ9Ygd0x]VqU1ijiGH|NQ:۔gH O Y{.=vΜ9Å n{yGWw y֞k] !Ϟ)hu7_7eSfop%x{t}u|^~0t4 e89ȧwސKN & \sIG՝ԟIFyjn7]G0NF*Vt(& pV+KẁV-iQXފQRR'.Fd,7>ybH@=R0%#?Ȓ*Y%!GʊK2UD=<(roi~G`_eW PZƟ{\1L@Pmm+[$%4MDA\]lll]:܋> o:7/&_a3 $PS9~YvF.8/? ܶ@Q\#?MD 퍽kj{5$"a@,aތR9#' Xrljѡ mA%Sd %S20J2bh ܀r(KE(8<ʀSJ钕#%G*F˥Z_hOnz^e^s rV01I->=h 'D YKO#~э^W1SWkA )z:H0Z$SۢMȀ~-'nŋLS x≅zg_+ kW>MKlN`Σ'럛;~޿_&Nɜx*}ꚝ(D#fR$IҤީUF}zcLt_fT=vPUVԕrPQo<7JޔTcJ-IAm FemaB*L鸎$EPV,:a |YP.9Qyrwt:%Ƹ3!{8?P{ݑscxr+g uᚩ:C~ n^GZt:u=tMd IDATP&n_jZ=5nDjĦQ$szRI$9 ^-{F7#ejʼnayzWTJbH+J`McHR $))$diSG jʰƢhe KiРq1D 3a )JLD JhESP4h%Α2NEc栁tv_dysw+Cuwh3w^hr ? omm/ 2C\KvM#L ^]?A^K-v?|SrtDTy&pU'!.Cqw ~41N !ȑ#B~g~;d qup1w_L^_L_Xp ~@4#TLD  ]?GrFpFFt,IL䴵l:-$n*jԴ*#뵰VpZ+EŠ]uqRg Tc 1vN6$H.eV8i&5et[Z hZ(PSh`'N%Mj=TDH6`Z4TV!t?j"JW ${?Azۨa"{qz{OrT{֒nYFq/-t@/¿z:喿v#n!Pl^ac'{f =2p8 ) l7*ؓ[||NS~}^\jw`޼{ݽÑ]8ݍd%}گG@N5 4%/(h=aV)H&H1p:(V#Q[,;NEFޫSA CqĹ 01;$Vȃdo^Gލ<7t-ӀqwA5mw3u/_eNiַ3K*ɕggm9){MTn[ɝ:ZϝKvH: 󊜍vPNzYU}ND6V3v;hߞ[ L SN˲M:l1#(M JQe uhaK~ {\1~s[18QSirtxK1$j%hG=-pz4lOpMMSӆZm4 +' #6m+!E7hQPs;Ġ&;Wҗ7wׄА(RJ B,kvE䙓CP1߹ɁQ ozqJ6 /UƁt)|ҡo ASE`g ǩD8cH6ѩ3Cl;LBAX)ZN11("$)TI))Pa0gޔXqJ1e4~#'))I D_ z;޿]AXubb0cCLlC+mۨkI;mh-v*ҸH֙&M+6lD$r}OKE7vN:@UUEygNY!]<1_FN 8aeWJ+xe@FN&kЗA"R5@וns±.]̙3F x^_5x8Q'xJ!ěM6s3,@ys8\[nN-r3.z-2/HN4Sb8]hϳ6 cT -UL*)EHT *eBK)bpp kKbO:zL4\paHRa r t o}~oFzaѨ0t:q!]馛U,'N6ݷƥzts-feIajtVw#Q_c㍘2IIj|h%FCDLǁQ67H*;1`RF9w.e2NlԿY{ 8Ha4.kӜp'/-'?I~wN~[_p;feż#H i8'o^k0Lxҥݾ%3â(y'I~n())}zўÿCL&kyƿAX'18ZBa2pm ώsh}c;?s.ϬiuU ƍF0 .Mdcu+{&) Y@^ҎQg_$K%kLc0βfe}[uk  \DkpJ2Qkebc!֭!)\gC<^ZaW=4\pK@o8j{1YޟS>8~8=m=`05 /h0奦]G3_Cy.˒ロD,Kn8͸i9g |}+w'M {ׯzWK٘we0 D?w!`h~vBF#^D'ْQrle`pIV UGG*[p+G1Q:9j?Nu> P INS1,1dz:-t}mK._qi*gag'հ4A6-+ʘ+cxO% &UVЧn{cg785Cms}I;F.34QUՂsF;%cx̚!O3ɮM^PT?+ x|+ 7Mx GS'uqe{Qk򻉹_q+SFHvb\i* UcG#ĸcjqIkjiB1F?"-tYfY@1}h.EcU 4)QE"JaL"u`VeʑN=r\lz]vg* g)ܹ5U?_4́wxLllp&#j?0ep·^wߤ9Mdڔ|OdgW1V~

{ٗ"2 ~ll]g@By3FIFJJ\3=CD" mWDLh0Z1$ߢ($~f]P[c->[ 73hpV`Xg VD-ԻѲ4a+C!ATmD|L9}Z) :T' (2^wǧ:7Emjd}֯hB!F_37V%^G0?1#~o 2s?[s{clǾpc}ێs_w|)?lppQοwtfß4 ZI7>IIt$2 M#ʲJ A: [m>YbԦ,0ߗQE.;}+2+fqtZ;٘~".8\^(U5V#KK I1VVm|VO AV" 񅙩V\`WǒbJ_+0ߖ=3k^Å 8y$[[[3gpH|DJig&u}9zҗཷNq4皏:X;DFDĜX7(V)%$%ULY`,%1#Ӏ/7_[H- 7_/"ut&H"_ǘcSWH`JDB)m$QS401a)m T:RCX B*lQ*Ì/Y5~ǵ"Η9WBthB$͐Q]~._~dr:/y "DgROYAsMl!Cv]>Wcsf+g5slsP;9#<u-VyqF;btQDP'f _ЪGRC1 +K%S˖oZ`Q>s}kr3ej'q-;|䍽nZ3`)+̿)>m%NA+LRwn4Uȕõ^7^mp^wvwZF7tb+xaQ5Vq5=;P_)HY͞c@[0niDUDb1NZ#6LpQ )5*ŕ9uHA^d S8vV쌾˩0e +Ee#|U6" |E7y}'uV=y'rWw6@G\FcxK'ͷDgawIC|fͫO^(&"w7򘁃x/8X80nO^+ϓZ/c씬N],eKBSQW~qE9%:K2=E d|vؓU+&% Χ~gzoŷh0oY><7Rzsnjxz>/VOqeЏBT> 8),ԶNWT. ^=nE[)TvX e%R=jR[8K"5?zԱ`qˊq*Ƌ1#TJ/aS%ZGYt]ٶ{ogݡ`O b%}[&ӞW`| |ǧ5X:FІmy'h> 9yܨ8G (XASʶ`( W[ԖA|vJq'A/[̺8 v\w8[&#K0)TR -i /pZLqި+L IDATc` b0ƒLguWVU%iT5)1MRޟ[ A߯0 ɉMFĠAu>f"Gψ(EDU LK4yIlN#'3IXoƚ3,"kcvEcɪ%Ugo>hnBPZ3 D&'uc Ą*񆦁 ON%&a$볥NX5=CʧW}πn|#5rFwy:3aBS:h'(b i+^VFX:bHGNs۶ hes$N>x{uue/Qtil™40cmm,FJ)r#X&b P!ɎD풊S"8{t  )ބ]G| Rc Zbl4ZڦZZ% QZ)jHbjj%1zT_Mheq:pۅwNNtfJ„2HiJJ D TJ?IIEfz6?N1a,}v;Q_hf3Ϟ&cӚ >O!.B,iz):UB>FFνIS_Zu6b)חzamSڣ?pl,+lZHo9-3>37v*?Cߐ>oL͝"t(lGY@5$sP77a%4RCd4[1vSvkcb'M̤./5 C3||xv ~!v!Ab1̜E#w 8 oδO<MYK_iy<`/l4P泀}tJ=y}wֺpz;@v)JckJ̈ˢS3Q*6f4D FIi*ni:bh5[1F޸eC]&f׵lmAEVZz-Ǐ s eZIfZ9bB83kd֞K:}f9/t9: < ۮN!Hz6#Rt@:4T`Gi$%m*q:Ʀv44iD VI}~+1X1DW{u{h"Tiݳ'oFsџI QV?F]o҆)MSSSiFtxU-忉|ܦit5s1>ا߶[!2?DϹlGdd=_8׼'Q~N'?5COƧNюrOO3Rn5? Kc8tM"Qo~&+sv'}9qsuGN#>>0svBݴ:t}5 .h뉴6LP𒻌2p֗h nl A`qi&)ls8@Zbi65&[꺤 A[ے0L&RIڄmmcR.2ܒىJʬAH4a'_p*"8ĶVIyDi'Z&m#`%f57)~l^СWpj UEkSP턙cOQWOo>k՝w*[Le\CsؘX^pkrq^FN<Җ:TE3Iܴ̠Qu)%ޞI/ν}µ /\oMA})|06Ϥ| $4F3z"Bm'XӌF ˒l"#ڑZluY<#>aYW,Ƽ)fCW"?wXtZ9SAw~^աT҄IP7 UUhXhTV-gL*J RҒ-ڙ6 _j&3%cX0?ud8y38W4aօJ@K O?C=‡]z5_H'{OB{/qÛOV N]PrJm*a"76d]9Jjt EuҹL8k5  9#Vd4 uHMF 43y,ˡטXsdŏA:7~ťg\R2mD@P&Fz朗hP1j3S+ۆQYKԌFAF͓&5`N-MDjq\jaWwj0nEcU]:`.]{ւ1@dwC;[m5'8uXls O="n]/ [4dSOm~EdLuXEbN|ݼݧO^NxȜV|x2K+[k{<n/Uv%ӝ0Eɧ^]NmF NO*OǼ-NgSKǵsb\DPȡM;z+7㒎QM߶P9jő#9T"l Nh] ~ -BJBY mDKE.srjE:). eE?lEb.6[hj~n6.u} LBk\m椱&4rhM*mL[J9VhjJVYYQ)~`So7G,*U"T97o8xT#SZLFCڃ:U g` <.<@'v/ށ~M*2,{:j0]0љ1:Vwu].]ڴǏ\rEXf=#?/f "qpc 49RSs;ɔj$`6qK݅t9ln?VTK0:9PrF9Qי&g0gfN,8CzmI֔ffx 8Ѷ|.>:(i&vB.hYZkxw7iOihCI1̴k]/^K=Yq3A f]\f8P T+5H>n&Z67[BPib=۪*e93{^ ?293=mS%Ԟ"mRifp,;I,4{8r˭`<0rnޗr^%ZMOłޯ XO>{k:€uB$<@D 2[-ڶ/)F<) 2K~{R7r:Ǜs6Qϟ ʵmzGqY͹A! ?Ο8aJ;rh+RM\znF+:xVhVXXPE2oTnP ږ*5֚&Ⱥ#h7EhFB[B[A1mQ"L]n`  i3 NZ- &'(7TZz_ "~&E2W. L{^V<߃B}phD@B-tBdR{i2)?B)3*s}1v,˫ӟmcDT`dccIƾ+Nj_, X`4p{?_}gܞ+w4ux*sgKu^~Swuz8E tW=o4K"dIڳ,4Ub̥tך*Z-JA79anԛHL&NJ߲m'Xbn>Ԙ6UHn"ͦ vl40 hX@0,CCj)S9's4tުЁ]Z'}|kU2:*' fEKl ~NXcXLosDbgkQ-a6dbAD]$"hfKB[Hw 4"23eԔ*G[YzB Mmpj:`u-pcv e䌇ms!6U[K)]ןH?|ɂ/1Al1{*o5 ]) ~xƢT+fp4p5 -]ȝK 7PtMWSDM\Su$MXV-QGŵ)-@bxb:n⚑Y=Ҭ`M8$0ӆj,[R3qbm("}Ȗ=̑-xRMgI2FR/S ho7X,ik=e[H]Ii 6 {|:P2ϱ*8pe#!6{Źȋ#,L휯{֊ aaIy_^H;f=G]nvi7۩eKYÙ Nȩr &wydf:^% Da@3GKWZW|h++q>Gz8fRo:˲H=@>v份m!xi1S03UuE57"&ԛB5FVMĚ6h)P{ڴW4R[eX+)G3oi !2k[![ɐΠT Ot -4Cu>.} oiY$̉y1'b⟿Ėyݮtn拡xYj3d>Ԁ[S}Vm^.h=_o'}4_~H;ʖ޳1x!--@"e2a\ƦqDv IDAT1_B$/{XcqH][^w4c&\|a_|r/v9|y&MdlI?s&_g dzRtP:U),E8(K~[pt19L11@m_e(TP5E6 mml+MmMh),N ODTQ)ЬA4X=ʑYYbU) ucؗq={f޲N9h3gg=2a1'k8Yյr!Š[1/&X?}[J*Үgs5YD/λ/m~e`,cR(BWdv:n/x o߰>Am+a~#pɌhhH5;˫S͒72*{ͩ]T({qJngc[}[tWnrÛJ&Q^xڧ;\=þ=w-#.:kves%[ͫV6[j0,tIu~:eֻYYUMu>~8f-ޠ~YX?!rYaxsByPz|S:+  RtO6i;G sNt7ڝSP(4š;9KI q/>oD.{٣){<"`+ {/s:+ "/9co7|&Tb$Xi7zkOvTnVjĞ` -k-X% ̹`s-D^ X2eQZ۫W'qsg.|ocOO ¯+bz{7u A+/9s4f6 mH=i{`ͤ Y]5add4^uS{_D D':L6qίOuϾ,M fe<`x+o U#%U'49~ʄ m*uC]/]-av\Pf.Z~$fq,ש54MFLhMcRcDR9yxӀ/_,"87AI;eFv *Rzutt [EB0`,ϱd|@Aj rj׷мe{44LDC=֖fX[Ht=x#_ -г@Sd-yO驑[Ne[F8U:GZ'9'xbRc uCb4Omua@s#NSW'O2! 9'[躝=&5qKwHz'jy/Ad]l'C`h3FiyQԻ#|qKc#,d=Ǯ .!纛rIx-3'Fʠf F{,qe^s{`\sfC[0,܂8x^i؃sWZkȲ!Y 퐠iqn>ʛ>ǟRh4ā;\˄\zm=%x5(e=>wԓiwkދwv Muwb 3z|3I:m&BC|>_g0X~ \{eyYv ʩ PL'l@ϢzOpr'D, We'صus$m3D {“lK8 p599a>7©5x3-X*{Ό/j~9OSGsf:73c<y}p +xcH3_ť]_T?3=:wmOSP) ޻ȝI|~F|7wtw8?]ȏYPco[ a:PFX(ـb@6\E+_eL9:R2i=eXOBi Z*: u}d/x=dwo@& uZߧuf-J,I:{{ P}24է㝿4~pJyw.Dn`Gr!ҶWR7kڵS1ȼ i\߸;Rb?7Fϋ':*^ܘsѣW8咶R.[ye隺UKN+ T*3fԃzN'28L32!oZe@>iyڀ3|1-!:Vc(\׷C/}.Y@gtvۅq z*q ,/y XД"RN&25pKQ1҆V&2Q70[T{BhͼfXe-:@de=K=Jd{s}1`nJ}gqFaxm3|2R\ua0( j &!D"F6Uqń -e4kp"qr"!c9W!`4Rvメ=^JY>ϩ#?sۥ c{jz2r<'7m(M}8L˳ׄZ75Ǚqk-x lnt_O (#5}qxGqp# ](kKϻ;)?:1N`!ABL şQ®"Y;HgRE/CۿwUI0n|0i6-*&*Uچt(Z1Ya%Zɠz-iMƹ-uU9=KŠu+YGXQRaGIE:Siݵw}ao^ws̢baLMD; q :k8B5U(`1YvVCfʹg&4Mt"eY_}eK +:y8VW{v?GN~/@) ե0Mln -Q;r.>g{vjiWEnw  brъ'fG9i>;2:Ijv]Mࢗ\|gcN_zj+.Kǀ/KӭsHB; ܎7κƯ:E5ř_F5aVTZ CĆ&60)hX\\ 9Ҷ60YmzmcejKOU S}IkZ\b_L]?zǝmt6y ֧A-2&{uf2jEFO}Dmb6&R Q;DxXL/aB:#%U)^O] yVr]pxX~BNp?upp (\ 'jp33.=(.Ű7C]7L&Ϣ@6ѱx& w]\8bIo0J|SCF&I] T\.9 |җ9V|z|Pkhlтt<3dF)R3V$ŧZ5n=_俇 $pD8d::J<77S4hGޘ]?.y~HA Q 9ہK=HEu%F {205?Slpbfv\Z8*,~KlQMW=`!S-}jDjT&nM)@6 Q,&8=E?KoKÐ9gϦvE=铮I;ÐbstmF|/)h dlM ܬ.E&/?9)U8#k(D~{F\(1wl.9MW*4wF Dګ.I5/(8"9@Tصt eʶhټQ6uH<)u-3g:טw[n{Ԡ$,2ϽFKK9 r7ߟͣ;:>\Q%uX_#ѓ>vIRo.U! hGsn9O/1k_I嗎9\Edy}:~I$7߅sg(h 3'hGn׏CK]hhg.9IN-QӋÙ-5.5!NӚ:OT8T>{o~^:ܪ[d`VD lBCx6W[ڃs?o};?Xo-9cȦӨNY*^+zWAŢD  ߙzWV[yf#/iwP/MyK:nL3.JgHd F"-=}hJMlߠ.zhek:sD$g\K63'Mů6Y"p">iMzZ@; w_/,0`Ћ@p.BDX=>wË+6j\着b_Zp܅iTOuI0Yz 2.L#)/?\Kզ~7j%ΈtD7ݔsqzoK^xVYS)Nc[d ijcIDAT9FfJR1P-b,EFHN`vaz ~l!N/- nsHq8 _T/x樝U7-۾}{~ONŶY#).&wӗ6~ a/UܾnX-r:N~|S/K'Rwڀ+yx?r`?v^2m6߇[3 z9?X@H`u}X4Rk4]ajQyZdK=mM;U".$Jtwa3I'q10iuƄNgyјmK?WHiKy) \"=Sx:jH#LCa>΄0ݛ;PbB##'o B*iDRsa( 3v"s%.S!;5~uO[|g3nemxg/FO)_}ю~6?C6}x/ξ缟h' +9_NgN](ûwu G1+Y??:k!TSfY$dfb,Rw .lFZ6͊*_lh74t1pnjVo@h{^ w˾_B)ѹ^v/}Kx ޔdD OL#1{Q2"R}#=MaS&`ןSGt(Q"19H@9ռ3wk3Elw y:Sw &\%7Wj ׹Jo}nl(KW E{ :<=Giر(QowaS43)".ֹv Z~ /qiwFm[ѩ\pKxk.v;Y`;y+ucEڹw|Dޕ Q"`DG7oHRђ i+]ZyYL=V)|s̒ΰŪ{J=e2lVX F?c10~|C\'u/Ӱ_E"C2|!"/ef?jt{{S2=DS8?~yljCM`ϗҜw&E8 g@* :Ἑ3,U[ޯ ,9Ev _;G[&?Wڄ>pr_ޔ}Ϥ}Giۋ;[s@c3IENDB`criticalmass-1.0.0.orig/data/description_file0000644000175000017500000000024607774717175020605 0ustar danieldaniel../data/paths paths ../data/models models ../data/bitmaps bitmaps ../data/sounds sounds ../data/levelpacks levelpacks ../data/system system criticalmass-1.0.0.orig/curl/0002755000175000017500000000000010355431306015346 5ustar danieldanielcriticalmass-1.0.0.orig/curl/lib/0002755000175000017500000000000010355431306016114 5ustar danieldanielcriticalmass-1.0.0.orig/curl/lib/Makefile.Watcom0000644000175000017500000004356710265631023021020 0ustar danieldaniel# # Watcom / OpenWatcom / Win32 makefile for libcurl. # G. Vanem # # $Id: Makefile.Watcom,v 1.3 2005/04/07 21:10:31 bagder Exp $ TARGETS = libcurl_wc.lib libcurl_wc.dll libcurl_wc_imp.lib CC = wcc386 CFLAGS = -3r -mf -d3 -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm -bt=nt -bd & -d+ -dWIN32 -dHAVE_LONGLONG -dCURL_CA_BUNDLE=getenv("CURL_CA_BUNDLE") & -dBUILDING_LIBCURL -dWITHOUT_MM_LIB -dHAVE_SPNEGO=1 -dENABLE_IPV6 & -dDEBUG_THREADING_GETADDRINFO -dDEBUG=1 -dCURLDEBUG -I. -I..\include OBJ_DIR = Watcom_obj LIB_ARG = $(OBJ_DIR)\wlib.arg LINK_ARG = $(OBJ_DIR)\wlink.arg OBJS = $(OBJ_DIR)\transfer.obj $(OBJ_DIR)\file.obj & $(OBJ_DIR)\strequal.obj $(OBJ_DIR)\timeval.obj & $(OBJ_DIR)\easy.obj $(OBJ_DIR)\base64.obj & $(OBJ_DIR)\security.obj $(OBJ_DIR)\hostip.obj & $(OBJ_DIR)\krb4.obj $(OBJ_DIR)\progress.obj & $(OBJ_DIR)\memdebug.obj $(OBJ_DIR)\formdata.obj & $(OBJ_DIR)\http_chunks.obj $(OBJ_DIR)\cookie.obj & $(OBJ_DIR)\strtok.obj $(OBJ_DIR)\http.obj & $(OBJ_DIR)\connect.obj $(OBJ_DIR)\sendf.obj & $(OBJ_DIR)\llist.obj $(OBJ_DIR)\ftp.obj & $(OBJ_DIR)\hash.obj $(OBJ_DIR)\url.obj & $(OBJ_DIR)\multi.obj $(OBJ_DIR)\dict.obj & $(OBJ_DIR)\content_encoding.obj $(OBJ_DIR)\if2ip.obj & $(OBJ_DIR)\share.obj $(OBJ_DIR)\speedcheck.obj & $(OBJ_DIR)\http_digest.obj $(OBJ_DIR)\ldap.obj & $(OBJ_DIR)\md5.obj $(OBJ_DIR)\ssluse.obj & $(OBJ_DIR)\http_negotiate.obj $(OBJ_DIR)\version.obj & $(OBJ_DIR)\http_ntlm.obj $(OBJ_DIR)\getenv.obj & $(OBJ_DIR)\inet_pton.obj $(OBJ_DIR)\escape.obj & $(OBJ_DIR)\strtoofft.obj $(OBJ_DIR)\mprintf.obj & $(OBJ_DIR)\strerror.obj $(OBJ_DIR)\telnet.obj & $(OBJ_DIR)\hostares.obj $(OBJ_DIR)\netrc.obj & $(OBJ_DIR)\hostasyn.obj $(OBJ_DIR)\getinfo.obj & $(OBJ_DIR)\hostip4.obj $(OBJ_DIR)\hostthre.obj & $(OBJ_DIR)\hostip6.obj $(OBJ_DIR)\inet_ntop.obj & $(OBJ_DIR)\hostsyn.obj $(OBJ_DIR)\parsedate.obj & $(OBJ_DIR)\select.obj $(OBJ_DIR)\sslgen.obj & $(OBJ_DIR)\gtls.obj RESOURCE = $(OBJ_DIR)\libcurl.res all: $(OBJ_DIR) $(TARGETS) .SYMBOLIC @echo Welcome to libcurl $(OBJ_DIR): mkdir $(OBJ_DIR) libcurl_wc.lib: $(OBJS) $(LIB_ARG) wlib -q -b -c $@ @$(LIB_ARG) libcurl_wc.dll: $(OBJS) $(RESOURCE) $(LINK_ARG) wlink name libcurl_wc.dll @$(LINK_ARG) clean: .SYMBOLIC - rm -f $(OBJS) $(RESOURCE) vclean realclean: clean .SYMBOLIC - rm -f $(TARGETS) $(LIB_ARG) $(LINK_ARG) libcurl_wc.map - rmdir $(OBJ_DIR) .ERASE $(RESOURCE): libcurl.rc wrc -dCURLDEBUG=1 -q -r -zm -I..\include -fo=$@ libcurl.rc .ERASE .c{$(OBJ_DIR)}.obj: $(CC) $[@ $(CFLAGS) -fo=$@ @echo . $(LIB_ARG): $(__MAKEFILES__) %create $^@ for %f in ($(OBJS)) do @%append $^@ +- %f $(LINK_ARG): $(__MAKEFILES__) %create $^@ @%append $^@ system nt dll @%append $^@ file { $(OBJS) } @%append $^@ option quiet, map, caseexact, eliminate, implib=libcurl_wc_imp.lib, @%append $^@ res=$(RESOURCE) libpath $(%watcom)\lib386;$(%watcom)\lib386\nt @%append $^@ library clib3r.lib, ws2_32.lib # # Dependencies based on "gcc -MM .." # $(OBJ_DIR)\file.obj: file.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h progress.h sendf.h escape.h file.h & speedcheck.h getinfo.h transfer.h url.h memory.h ..\include\curl\mprintf.h & memdebug.h $(OBJ_DIR)\timeval.obj: timeval.c timeval.h setup.h config-win32.h $(OBJ_DIR)\base64.obj: base64.c setup.h config-win32.h ..\include\curl\mprintf.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h base64.h memory.h ..\include\curl\curl.h & memdebug.h $(OBJ_DIR)\hostip.obj: hostip.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h & inet_ntop.h ..\include\curl\mprintf.h memory.h memdebug.h $(OBJ_DIR)\progress.obj: progress.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h & ..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h http_chunks.h & hostip.h hash.h llist.h sendf.h progress.h ..\include\curl\mprintf.h $(OBJ_DIR)\formdata.obj: formdata.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h strequal.h & memory.h ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\cookie.obj: cookie.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h strequal.h strtok.h sendf.h & memory.h memdebug.h $(OBJ_DIR)\http.obj: http.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h & base64.h strequal.h ssluse.h http_digest.h http_ntlm.h http_negotiate.h & url.h share.h http.h memory.h select.h ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\sendf.obj: sendf.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h & ..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h connect.h & ..\include\curl\mprintf.h memory.h strerror.h memdebug.h $(OBJ_DIR)\ftp.obj: ftp.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h & if2ip.h progress.h transfer.h escape.h http.h ftp.h strtoofft.h & strequal.h ssluse.h connect.h strerror.h memory.h inet_ntop.h select.h & ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\url.obj: url.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h netrc.h base64.h ssluse.h if2ip.h & transfer.h sendf.h progress.h strequal.h strerror.h escape.h strtok.h & share.h content_encoding.h http_digest.h http_negotiate.h select.h multiif.h & ftp.h dict.h telnet.h http.h file.h ldap.h url.h connect.h inet_ntop.h & ./ca-bundle.h ..\include\curl\mprintf.h memory.h memdebug.h $(OBJ_DIR)\dict.obj: dict.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h & strequal.h dict.h ..\include\curl\mprintf.h $(OBJ_DIR)\if2ip.obj: if2ip.c setup.h config-win32.h $(OBJ_DIR)\speedcheck.obj: speedcheck.c setup.h config-win32.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h & speedcheck.h $(OBJ_DIR)\ldap.obj: ldap.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h escape.h transfer.h & strequal.h strtok.h ldap.h memory.h ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\ssluse.obj: ssluse.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h url.h inet_pton.h & ssluse.h connect.h strequal.h select.h ..\include\curl\mprintf.h $(OBJ_DIR)\version.obj: version.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h & ..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h ..\include\curl\mprintf.h $(OBJ_DIR)\getenv.obj: getenv.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h memory.h memdebug.h $(OBJ_DIR)\escape.obj: escape.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h memory.h & ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\mprintf.obj: mprintf.c setup.h config-win32.h ..\include\curl\mprintf.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h memory.h ..\include\curl\curl.h memdebug.h $(OBJ_DIR)\telnet.obj: telnet.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h telnet.h & ..\include\curl\mprintf.h arpa_telnet.h memory.h select.h memdebug.h $(OBJ_DIR)\netrc.obj: netrc.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h netrc.h strequal.h & strtok.h memory.h ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\getinfo.obj: getinfo.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h & getinfo.h memory.h ssluse.h memdebug.h $(OBJ_DIR)\transfer.obj: transfer.c setup.h config-win32.h strtoofft.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h strequal.h urldata.h & cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h & netrc.h content_encoding.h transfer.h sendf.h speedcheck.h progress.h & http.h url.h getinfo.h ssluse.h http_digest.h http_ntlm.h & http_negotiate.h share.h memory.h select.h ..\include\curl\mprintf.h & memdebug.h $(OBJ_DIR)\strequal.obj: strequal.c setup.h config-win32.h strequal.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h $(OBJ_DIR)\easy.obj: easy.c setup.h config-win32.h strequal.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h & transfer.h ssluse.h url.h getinfo.h share.h memory.h progress.h & easyif.h ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\security.obj: security.c setup.h config-win32.h $(OBJ_DIR)\krb4.obj: krb4.c setup.h config-win32.h $(OBJ_DIR)\memdebug.obj: memdebug.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h & ..\include\curl\curl.h ..\include\curl\mprintf.h urldata.h cookie.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h memory.h memdebug.h $(OBJ_DIR)\http_chunks.obj: http_chunks.c setup.h config-win32.h urldata.h & cookie.h ..\include\curl\curl.h ..\include\curl\curlver.h & ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h & content_encoding.h http.h memory.h ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\strtok.obj: strtok.c setup.h config-win32.h strtok.h $(OBJ_DIR)\connect.obj: connect.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h if2ip.h strerror.h connect.h & memory.h select.h memdebug.h $(OBJ_DIR)\llist.obj: llist.c setup.h config-win32.h llist.h memory.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h memdebug.h $(OBJ_DIR)\hash.obj: hash.c setup.h config-win32.h hash.h llist.h memory.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h memdebug.h $(OBJ_DIR)\multi.obj: multi.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h urldata.h cookie.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h & transfer.h url.h connect.h progress.h memory.h easyif.h multiif.h & memdebug.h $(OBJ_DIR)\content_encoding.obj: content_encoding.c setup.h config-win32.h urldata.h & cookie.h ..\include\curl\curl.h ..\include\curl\curlver.h & ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sendf.h & content_encoding.h memory.h memdebug.h $(OBJ_DIR)\share.obj: share.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h ..\include\curl\multi.h & ..\include\curl\curl.h urldata.h cookie.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h share.h memory.h memdebug.h $(OBJ_DIR)\http_digest.obj: http_digest.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h strequal.h base64.h md5.h & http_digest.h strtok.h url.h memory.h ..\include\curl\mprintf.h memdebug.h $(OBJ_DIR)\md5.obj: md5.c setup.h config-win32.h md5.h $(OBJ_DIR)\http_negotiate.obj: http_negotiate.c setup.h config-win32.h $(OBJ_DIR)\http_ntlm.obj: http_ntlm.c setup.h config-win32.h $(OBJ_DIR)\inet_pton.obj: inet_pton.c setup.h config-win32.h inet_pton.h $(OBJ_DIR)\strtoofft.obj: strtoofft.c setup.h config-win32.h strtoofft.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h $(OBJ_DIR)\strerror.obj: strerror.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h strerror.h urldata.h & cookie.h formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h & ..\include\curl\mprintf.h $(OBJ_DIR)\hostares.obj: hostares.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h & ..\include\curl\mprintf.h memory.h memdebug.h $(OBJ_DIR)\hostasyn.obj: hostasyn.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h & ..\include\curl\mprintf.h memory.h memdebug.h $(OBJ_DIR)\hostip4.obj: hostip4.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h & ..\include\curl\mprintf.h memory.h memdebug.h $(OBJ_DIR)\hostip6.obj: hostip6.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h & ..\include\curl\mprintf.h memory.h memdebug.h $(OBJ_DIR)\hostsyn.obj: hostsyn.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h & ..\include\curl\mprintf.h memory.h memdebug.h $(OBJ_DIR)\hostthre.obj: hostthre.c setup.h config-win32.h urldata.h cookie.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h formdata.h timeval.h & http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h & ..\include\curl\mprintf.h inet_ntop.h memory.h memdebug.h $(OBJ_DIR)\inet_ntop.obj: inet_ntop.c setup.h config-win32.h ..\include\curl\mprintf.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h inet_ntop.h $(OBJ_DIR)\parsedate.obj: parsedate.c setup.h config-win32.h ..\include\curl\curl.h & ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h $(OBJ_DIR)\select.obj: select.c setup.h config-win32.h select.h $(OBJ_DIR)\gtls.obj: gtls.c setup.h config-win32.h $(OBJ_DIR)\sslgen.obj: sslgen.c setup.h config-win32.h urldata.h cookie.h & formdata.h timeval.h http_chunks.h hostip.h hash.h llist.h sslgen.h & ssluse.h gtls.h sendf.h strequal.h url.h memory.h memdebug.h criticalmass-1.0.0.orig/curl/lib/ca-bundle.crt0000644000175000017500000072102610265631023020464 0ustar danieldaniel## ## $Id: ca-bundle.crt,v 1.2 2003/03/24 11:06:57 bagder Exp $ ## ## ca-bundle.crt -- Bundle of CA Root Certificates ## Last Modified: Thu Mar 2 09:32:46 CET 2000 ## ## This is a bundle of X.509 certificates of public ## Certificate Authorities (CA). These were automatically ## extracted from Netscape Communicator 4.72's certificate database ## (the file `cert7.db'). It contains the certificates in both ## plain text and PEM format and therefore can be directly used ## with an Apache+mod_ssl webserver for SSL client authentication. ## Just configure this file as the SSLCACertificateFile. ## ## (SKIPME) ## ABAecom (sub., Am. Bankers Assn.) Root CA ========================================= MD5 Fingerprint: 82:12:F7:89:E1:0B:91:60:A4:B6:22:9F:94:68:11:92 PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuCgAwIBAgIRANAeQJAAACdLAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw gYwxCzAJBgNVBAYTAlVTMQ0wCwYDVQQIEwRVdGFoMRcwFQYDVQQHEw5TYWx0IExh a2UgQ2l0eTEYMBYGA1UEChMPWGNlcnQgRVogYnkgRFNUMRgwFgYDVQQDEw9YY2Vy dCBFWiBieSBEU1QxITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAe Fw05OTA3MTQxNjE0MThaFw0wOTA3MTExNjE0MThaMIGMMQswCQYDVQQGEwJVUzEN MAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxGDAWBgNVBAoT D1hjZXJ0IEVaIGJ5IERTVDEYMBYGA1UEAxMPWGNlcnQgRVogYnkgRFNUMSEwHwYJ KoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUA A4IBDwAwggEKAoIBAQCtVBjetL/3reh0qu2LfI/C1HUa1YS5tmL8ie/kl2GS+x24 4VpHNJ6eBiL70+o4y7iLB/caoBd3B1owHNQpOCDXJ0DYUJNDv9IYoil2BXKqa7Zp mKt5Hhxl9WqL/MUWqqJy2mDtTm4ZJXoKHTDjUJtCPETrobAgHtsCfv49H7/QAIrb QHamGKUVp1e2UsIBF5h3j4qBxhq0airmr6nWAKzP2BVJfNsbof6B+of505DBAsD5 0ELpkWglX8a/hznplQBgKL+DLMDnXrbXNhbnYId26OcnsiUNi3rlqh3lWc3OCw5v xsic4xDZhTnTt5v6xrp8dNJddVardKSiUb9SfO5xAgMBAAGjUzBRMA8GA1UdEwEB /wQFMAMBAf8wHwYDVR0jBBgwFoAUCCBsZuuBCmxc1bWmPEHdHJaRJ3cwHQYDVR0O BBYEFAggbGbrgQpsXNW1pjxB3RyWkSd3MA0GCSqGSIb3DQEBBQUAA4IBAQBah1iP Lat2IWtUDNnxQfZOzSue4x+boy1/2St9WMhnpCn16ezVvZY/o3P4xFs2fNBjLDQ5 m0i4PW/2FMWeY+anNG7T6DOzxzwYbiOuQ5KZP5jFaTDxNjutuTCC1rZZFpYCCykS YbQRifcML5SQhZgonFNsfmPdc/QZ/0qB0bJSI/08SjTOWhvgUIrtT4GV2GDn5MQN u1g+WPdOaG8+Z8nLepcWJ+xCYRR2uwDF6wg9FX9LtiJdhzuQ9PPA/jez6dliDMDD Wa9gvR8N26E0HzDEPYutsB0Ek+1f1eS/IDAE9EjpMwHRLpAnUrOb3jocq6mXf5vr wo3CbezcE9NGxXl8 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: d0:1e:40:90:00:00:27:4b:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Validity Not Before: Jul 14 16:14:18 1999 GMT Not After : Jul 11 16:14:18 2009 GMT Subject: C=US, ST=Utah, L=Salt Lake City, O=Xcert EZ by DST, CN=Xcert EZ by DST/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:54:18:de:b4:bf:f7:ad:e8:74:aa:ed:8b:7c: 8f:c2:d4:75:1a:d5:84:b9:b6:62:fc:89:ef:e4:97: 61:92:fb:1d:b8:e1:5a:47:34:9e:9e:06:22:fb:d3: ea:38:cb:b8:8b:07:f7:1a:a0:17:77:07:5a:30:1c: d4:29:38:20:d7:27:40:d8:50:93:43:bf:d2:18:a2: 29:76:05:72:aa:6b:b6:69:98:ab:79:1e:1c:65:f5: 6a:8b:fc:c5:16:aa:a2:72:da:60:ed:4e:6e:19:25: 7a:0a:1d:30:e3:50:9b:42:3c:44:eb:a1:b0:20:1e: db:02:7e:fe:3d:1f:bf:d0:00:8a:db:40:76:a6:18: a5:15:a7:57:b6:52:c2:01:17:98:77:8f:8a:81:c6: 1a:b4:6a:2a:e6:af:a9:d6:00:ac:cf:d8:15:49:7c: db:1b:a1:fe:81:fa:87:f9:d3:90:c1:02:c0:f9:d0: 42:e9:91:68:25:5f:c6:bf:87:39:e9:95:00:60:28: bf:83:2c:c0:e7:5e:b6:d7:36:16:e7:60:87:76:e8: e7:27:b2:25:0d:8b:7a:e5:aa:1d:e5:59:cd:ce:0b: 0e:6f:c6:c8:9c:e3:10:d9:85:39:d3:b7:9b:fa:c6: ba:7c:74:d2:5d:75:56:ab:74:a4:a2:51:bf:52:7c: ee:71 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE X509v3 Authority Key Identifier: keyid:08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 X509v3 Subject Key Identifier: 08:20:6C:66:EB:81:0A:6C:5C:D5:B5:A6:3C:41:DD:1C:96:91:27:77 Signature Algorithm: sha1WithRSAEncryption 5a:87:58:8f:2d:ab:76:21:6b:54:0c:d9:f1:41:f6:4e:cd:2b: 9e:e3:1f:9b:a3:2d:7f:d9:2b:7d:58:c8:67:a4:29:f5:e9:ec: d5:bd:96:3f:a3:73:f8:c4:5b:36:7c:d0:63:2c:34:39:9b:48: b8:3d:6f:f6:14:c5:9e:63:e6:a7:34:6e:d3:e8:33:b3:c7:3c: 18:6e:23:ae:43:92:99:3f:98:c5:69:30:f1:36:3b:ad:b9:30: 82:d6:b6:59:16:96:02:0b:29:12:61:b4:11:89:f7:0c:2f:94: 90:85:98:28:9c:53:6c:7e:63:dd:73:f4:19:ff:4a:81:d1:b2: 52:23:fd:3c:4a:34:ce:5a:1b:e0:50:8a:ed:4f:81:95:d8:60: e7:e4:c4:0d:bb:58:3e:58:f7:4e:68:6f:3e:67:c9:cb:7a:97: 16:27:ec:42:61:14:76:bb:00:c5:eb:08:3d:15:7f:4b:b6:22: 5d:87:3b:90:f4:f3:c0:fe:37:b3:e9:d9:62:0c:c0:c3:59:af: 60:bd:1f:0d:db:a1:34:1f:30:c4:3d:8b:ad:b0:1d:04:93:ed: 5f:d5:e4:bf:20:30:04:f4:48:e9:33:01:d1:2e:90:27:52:b3: 9b:de:3a:1c:ab:a9:97:7f:9b:eb:c2:8d:c2:6d:ec:dc:13:d3: 46:c5:79:7c ANX Network CA by DST ===================== MD5 Fingerprint: A8:ED:DE:EB:93:88:66:D8:2F:C3:BD:1D:BE:45:BE:4D PEM Data: -----BEGIN CERTIFICATE----- MIIDTTCCAragAwIBAgIENm6ibzANBgkqhkiG9w0BAQUFADBSMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMR0wGwYDVQQL ExREU1QgKEFOWCBOZXR3b3JrKSBDQTAeFw05ODEyMDkxNTQ2NDhaFw0xODEyMDkx NjE2NDhaMFIxCzAJBgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVy ZSBUcnVzdCBDby4xHTAbBgNVBAsTFERTVCAoQU5YIE5ldHdvcmspIENBMIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQC0SBGAWKDVpZkP9jcsRLZu0XzzKmueEbaI IwRccSWeahJ3EW6/aDllqPay9qIYsokVoGe3eowiSGv2hDQftsr3G3LL8ltI04ce InYTBLSsbJZ/5w4IyTJRMC3VgOghZ7rzXggkLAdZnZAa7kbJtaQelrRBkdR/0o04 JrBvQ24JfQIBA6OCATAwggEsMBEGCWCGSAGG+EIBAQQEAwIABzB0BgNVHR8EbTBr MGmgZ6BlpGMwYTELMAkGA1UEBhMCVVMxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0 dXJlIFRydXN0IENvLjEdMBsGA1UECxMURFNUIChBTlggTmV0d29yaykgQ0ExDTAL BgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxNTQ2NDhagQ8yMDE4MTIw OTE1NDY0OFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFIwWVXDMFgpTZMKlhKqz ZBdDP4I2MB0GA1UdDgQWBBSMFlVwzBYKU2TCpYSqs2QXQz+CNjAMBgNVHRMEBTAD AQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GB AEklyWCxDF+pORDTxTRVfc95wynr3vnCQPnoVsXwL+z02exIUbhjOF6TbhiWhbnK UJykuOpmJmiThW9vTHHQvnoLPDG5975pnhDX0UDorBZxq66rOOFwscqSFuBdhaYY gAYAnOGmGEJRp2hoWe8mlF+tMQz+KR4XAYQ3W+gSMqNd -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913220207 (0x366ea26f) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Validity Not Before: Dec 9 15:46:48 1998 GMT Not After : Dec 9 16:16:48 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DST (ANX Network) CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b4:48:11:80:58:a0:d5:a5:99:0f:f6:37:2c:44: b6:6e:d1:7c:f3:2a:6b:9e:11:b6:88:23:04:5c:71: 25:9e:6a:12:77:11:6e:bf:68:39:65:a8:f6:b2:f6: a2:18:b2:89:15:a0:67:b7:7a:8c:22:48:6b:f6:84: 34:1f:b6:ca:f7:1b:72:cb:f2:5b:48:d3:87:1e:22: 76:13:04:b4:ac:6c:96:7f:e7:0e:08:c9:32:51:30: 2d:d5:80:e8:21:67:ba:f3:5e:08:24:2c:07:59:9d: 90:1a:ee:46:c9:b5:a4:1e:96:b4:41:91:d4:7f:d2: 8d:38:26:b0:6f:43:6e:09:7d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DST (ANX Network) CA/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 15:46:48 1998 GMT, Not After: Dec 9 15:46:48 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Subject Key Identifier: 8C:16:55:70:CC:16:0A:53:64:C2:A5:84:AA:B3:64:17:43:3F:82:36 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 49:25:c9:60:b1:0c:5f:a9:39:10:d3:c5:34:55:7d:cf:79:c3: 29:eb:de:f9:c2:40:f9:e8:56:c5:f0:2f:ec:f4:d9:ec:48:51: b8:63:38:5e:93:6e:18:96:85:b9:ca:50:9c:a4:b8:ea:66:26: 68:93:85:6f:6f:4c:71:d0:be:7a:0b:3c:31:b9:f7:be:69:9e: 10:d7:d1:40:e8:ac:16:71:ab:ae:ab:38:e1:70:b1:ca:92:16: e0:5d:85:a6:18:80:06:00:9c:e1:a6:18:42:51:a7:68:68:59: ef:26:94:5f:ad:31:0c:fe:29:1e:17:01:84:37:5b:e8:12:32: a3:5d American Express CA =================== MD5 Fingerprint: 1C:D5:8E:82:BE:70:55:8E:39:61:DF:AD:51:DB:6B:A0 PEM Data: -----BEGIN CERTIFICATE----- MIICkDCCAfkCAgCNMA0GCSqGSIb3DQEBBAUAMIGPMQswCQYDVQQGEwJVUzEnMCUG A1UEChMeQW1lcmljYW4gRXhwcmVzcyBDb21wYW55LCBJbmMuMSYwJAYDVQQLEx1B bWVyaWNhbiBFeHByZXNzIFRlY2hub2xvZ2llczEvMC0GA1UEAxMmQW1lcmljYW4g RXhwcmVzcyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgwODE0MjIwMTAwWhcN MDYwODE0MjM1OTAwWjCBjzELMAkGA1UEBhMCVVMxJzAlBgNVBAoTHkFtZXJpY2Fu IEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1lcmljYW4gRXhwcmVz cyBUZWNobm9sb2dpZXMxLzAtBgNVBAMTJkFtZXJpY2FuIEV4cHJlc3MgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJ8kmS hcr9FSm1BrZE7PyIo/KGzv8UTyQckvnCI8HOQ99dNMi4FOzVKnCRSZXXVs2U8amT 0Ggi3E19oApyKkfqJfCFAF82VGHPC/k3Wmed6R/pZD9wlWGn0DAC3iYopGYDBOkw +48zB/lvYYeictvzaHhjZlmpybdm4RWySDYs+QIDAQABMA0GCSqGSIb3DQEBBAUA A4GBAGgXYrhzi0xs60qlPqvlnS7SzYoHV/PGWZd2Fxf4Uo4nk9hY2Chs9KIEeorC diSxArTfKPL386infiNIYYj0EWiuJl32oUtTJWrYKhQCDuCHIG6eGVxzkAsj4jGX Iz/VIqLTBnvaN/XXtUFEF3pFAtmFRWbWjsfwegyZYiJpW+3S -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 141 (0x8d) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Validity Not Before: Aug 14 22:01:00 1998 GMT Not After : Aug 14 23:59:00 2006 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:f2:49:92:85:ca:fd:15:29:b5:06:b6:44:ec: fc:88:a3:f2:86:ce:ff:14:4f:24:1c:92:f9:c2:23: c1:ce:43:df:5d:34:c8:b8:14:ec:d5:2a:70:91:49: 95:d7:56:cd:94:f1:a9:93:d0:68:22:dc:4d:7d:a0: 0a:72:2a:47:ea:25:f0:85:00:5f:36:54:61:cf:0b: f9:37:5a:67:9d:e9:1f:e9:64:3f:70:95:61:a7:d0: 30:02:de:26:28:a4:66:03:04:e9:30:fb:8f:33:07: f9:6f:61:87:a2:72:db:f3:68:78:63:66:59:a9:c9: b7:66:e1:15:b2:48:36:2c:f9 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 68:17:62:b8:73:8b:4c:6c:eb:4a:a5:3e:ab:e5:9d:2e:d2:cd: 8a:07:57:f3:c6:59:97:76:17:17:f8:52:8e:27:93:d8:58:d8: 28:6c:f4:a2:04:7a:8a:c2:76:24:b1:02:b4:df:28:f2:f7:f3: a8:a7:7e:23:48:61:88:f4:11:68:ae:26:5d:f6:a1:4b:53:25: 6a:d8:2a:14:02:0e:e0:87:20:6e:9e:19:5c:73:90:0b:23:e2: 31:97:23:3f:d5:22:a2:d3:06:7b:da:37:f5:d7:b5:41:44:17: 7a:45:02:d9:85:45:66:d6:8e:c7:f0:7a:0c:99:62:22:69:5b: ed:d2 American Express Global CA ========================== MD5 Fingerprint: 63:1B:66:93:8C:F3:66:CB:3C:79:57:DC:05:49:EA:DB PEM Data: -----BEGIN CERTIFICATE----- MIIEBDCCAuygAwIBAgICAIUwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVT MScwJQYDVQQKEx5BbWVyaWNhbiBFeHByZXNzIENvbXBhbnksIEluYy4xJjAkBgNV BAsTHUFtZXJpY2FuIEV4cHJlc3MgVGVjaG5vbG9naWVzMTYwNAYDVQQDEy1BbWVy aWNhbiBFeHByZXNzIEdsb2JhbCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNOTgw ODE0MTkwNjAwWhcNMTMwODE0MjM1OTAwWjCBljELMAkGA1UEBhMCVVMxJzAlBgNV BAoTHkFtZXJpY2FuIEV4cHJlc3MgQ29tcGFueSwgSW5jLjEmMCQGA1UECxMdQW1l cmljYW4gRXhwcmVzcyBUZWNobm9sb2dpZXMxNjA0BgNVBAMTLUFtZXJpY2FuIEV4 cHJlc3MgR2xvYmFsIENlcnRpZmljYXRlIEF1dGhvcml0eTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBAPAkJmYu++tKc3FTiUfLJjxTkpRMysKFtQ34w1e9 Lyofahi3V68MABb6oLaQpvcaoS5mJsdoo4qTaWa1RlYtHYLqkAwKIsKJUI0F89Sr c0HwzxKsKLRvFJSWWUuekHWG3+JH6+HpT0N+h8onGGaetcFAZX38YW+tm3LPqV7Y 8/nabpEQ+ky16n4g3qk5L/WI5IpvNcYgnCuGRjMK/DFVpWusFkDpzTVZbzIEw3u1 D3t3cPNIuypSgs6vKW3xEW9t5gcAAe+a8yYNpnkTZ6/4qxx1rJG1a75AsN6cDLFp hRlxkRNFyt/R/eayypaDedvFuKpbepALeFY+xteflEgR9a0CAwEAAaNaMFgwEgYD VR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMCAQYwFwYDVR0gBBAwDjAMBgoq hkiG+Q8KAQUBMBkGA1UdDgQSBBBXRzV7NicRqAj8L0Yl6yRpMA0GCSqGSIb3DQEB BQUAA4IBAQDHYUWoinG5vjTpIXshzVYTmNUwY+kYqkuSFb8LHbvskmnFLsNhi+gw RcsQRsFzOFyLGdIr80DrfHKzLh4n43WVihybLsSVBYZy0FX0oZJSeVzb9Pjc5dcS sUDHPIbkMWVKyjfG3nZXGWlMRmn8Kq0WN3qTrPchSy3766lQy8HRQAjaA2mHpzde VcHF7cTjjgwml5tcV0ty4/IDBdACOyYDQJCevgtbSQx48dVMVSng9v1MA6lUAjLR V1qFrEPtWzsWX6C/NdtLnnvo/+cNPDuom0lBRvVzTv+SZSGDE1Vx60k8f4gawhIo JaFGS0E3l3/sjvHUoZbCILZerakcHhGg -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 133 (0x85) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Validity Not Before: Aug 14 19:06:00 1998 GMT Not After : Aug 14 23:59:00 2013 GMT Subject: C=US, O=American Express Company, Inc., OU=American Express Technologies, CN=American Express Global Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:f0:24:26:66:2e:fb:eb:4a:73:71:53:89:47:cb: 26:3c:53:92:94:4c:ca:c2:85:b5:0d:f8:c3:57:bd: 2f:2a:1f:6a:18:b7:57:af:0c:00:16:fa:a0:b6:90: a6:f7:1a:a1:2e:66:26:c7:68:a3:8a:93:69:66:b5: 46:56:2d:1d:82:ea:90:0c:0a:22:c2:89:50:8d:05: f3:d4:ab:73:41:f0:cf:12:ac:28:b4:6f:14:94:96: 59:4b:9e:90:75:86:df:e2:47:eb:e1:e9:4f:43:7e: 87:ca:27:18:66:9e:b5:c1:40:65:7d:fc:61:6f:ad: 9b:72:cf:a9:5e:d8:f3:f9:da:6e:91:10:fa:4c:b5: ea:7e:20:de:a9:39:2f:f5:88:e4:8a:6f:35:c6:20: 9c:2b:86:46:33:0a:fc:31:55:a5:6b:ac:16:40:e9: cd:35:59:6f:32:04:c3:7b:b5:0f:7b:77:70:f3:48: bb:2a:52:82:ce:af:29:6d:f1:11:6f:6d:e6:07:00: 01:ef:9a:f3:26:0d:a6:79:13:67:af:f8:ab:1c:75: ac:91:b5:6b:be:40:b0:de:9c:0c:b1:69:85:19:71: 91:13:45:ca:df:d1:fd:e6:b2:ca:96:83:79:db:c5: b8:aa:5b:7a:90:0b:78:56:3e:c6:d7:9f:94:48:11: f5:ad Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.840.113807.10.1.5.1 X509v3 Subject Key Identifier: 57:47:35:7B:36:27:11:A8:08:FC:2F:46:25:EB:24:69 Signature Algorithm: sha1WithRSAEncryption c7:61:45:a8:8a:71:b9:be:34:e9:21:7b:21:cd:56:13:98:d5: 30:63:e9:18:aa:4b:92:15:bf:0b:1d:bb:ec:92:69:c5:2e:c3: 61:8b:e8:30:45:cb:10:46:c1:73:38:5c:8b:19:d2:2b:f3:40: eb:7c:72:b3:2e:1e:27:e3:75:95:8a:1c:9b:2e:c4:95:05:86: 72:d0:55:f4:a1:92:52:79:5c:db:f4:f8:dc:e5:d7:12:b1:40: c7:3c:86:e4:31:65:4a:ca:37:c6:de:76:57:19:69:4c:46:69: fc:2a:ad:16:37:7a:93:ac:f7:21:4b:2d:fb:eb:a9:50:cb:c1: d1:40:08:da:03:69:87:a7:37:5e:55:c1:c5:ed:c4:e3:8e:0c: 26:97:9b:5c:57:4b:72:e3:f2:03:05:d0:02:3b:26:03:40:90: 9e:be:0b:5b:49:0c:78:f1:d5:4c:55:29:e0:f6:fd:4c:03:a9: 54:02:32:d1:57:5a:85:ac:43:ed:5b:3b:16:5f:a0:bf:35:db: 4b:9e:7b:e8:ff:e7:0d:3c:3b:a8:9b:49:41:46:f5:73:4e:ff: 92:65:21:83:13:55:71:eb:49:3c:7f:88:1a:c2:12:28:25:a1: 46:4b:41:37:97:7f:ec:8e:f1:d4:a1:96:c2:20:b6:5e:ad:a9: 1c:1e:11:a0 BelSign Object Publishing CA ============================ MD5 Fingerprint: 8A:02:F8:DF:B8:E1:84:9F:5A:C2:60:24:65:D1:73:FB PEM Data: -----BEGIN CERTIFICATE----- MIIDAzCCAmygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBuzELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQL Ey9CZWxTaWduIE9iamVjdCBQdWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0 eTElMCMGA1UEAxMcQmVsU2lnbiBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqG SIb3DQEJARYUd2VibWFzdGVyQGJlbHNpZ24uYmUwHhcNOTcwOTE5MjIwMzAwWhcN MDcwOTE5MjIwMzAwWjCBuzELMAkGA1UEBhMCQkUxETAPBgNVBAcTCEJydXNzZWxz MRMwEQYDVQQKEwpCZWxTaWduIE5WMTgwNgYDVQQLEy9CZWxTaWduIE9iamVjdCBQ dWJsaXNoaW5nIENlcnRpZmljYXRlIEF1dGhvcml0eTElMCMGA1UEAxMcQmVsU2ln biBPYmplY3QgUHVibGlzaGluZyBDQTEjMCEGCSqGSIb3DQEJARYUd2VibWFzdGVy QGJlbHNpZ24uYmUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMQuH7a/7oJA 3fm3LkHVngWxWtAmfGJVA5v8y2HeS+/+6Jn+h7mIz5DaDwk8dt8Xl7bLPyVF/bS8 WAC+sFq2FIeP7mdkrR2Ig7tnn2VhAFgIgFCfgMkx9iqQHC33SmwQ9iNDXTgJYIhX As0WbBj8zfuSKnfQnpOjXYhk0Mj4XVRRAgMBAAGjFTATMBEGCWCGSAGG+EIBAQQE AwIABzANBgkqhkiG9w0BAQQFAAOBgQBjdhd8lvBTpV0BHFPOKcJ+daxMDaIIc7Rq Mf0CBhSZ3FQEpL/IloafMUMyJVf2hfYluze+oXkjyVcGJXFrRU/49AJAFoIir1Tq Mij2De6ZuksIUQ9uhiMhTC0liIHELg7xEyw4ipUCJMM6lWPkk45IuwhHcl+u5jpa R9Zxxp6aUg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Validity Not Before: Sep 19 22:03:00 1997 GMT Not After : Sep 19 22:03:00 2007 GMT Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Object Publishing Certificate Authority, CN=BelSign Object Publishing CA/Email=webmaster@belsign.be Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c4:2e:1f:b6:bf:ee:82:40:dd:f9:b7:2e:41:d5: 9e:05:b1:5a:d0:26:7c:62:55:03:9b:fc:cb:61:de: 4b:ef:fe:e8:99:fe:87:b9:88:cf:90:da:0f:09:3c: 76:df:17:97:b6:cb:3f:25:45:fd:b4:bc:58:00:be: b0:5a:b6:14:87:8f:ee:67:64:ad:1d:88:83:bb:67: 9f:65:61:00:58:08:80:50:9f:80:c9:31:f6:2a:90: 1c:2d:f7:4a:6c:10:f6:23:43:5d:38:09:60:88:57: 02:cd:16:6c:18:fc:cd:fb:92:2a:77:d0:9e:93:a3: 5d:88:64:d0:c8:f8:5d:54:51 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 63:76:17:7c:96:f0:53:a5:5d:01:1c:53:ce:29:c2:7e:75:ac: 4c:0d:a2:08:73:b4:6a:31:fd:02:06:14:99:dc:54:04:a4:bf: c8:96:86:9f:31:43:32:25:57:f6:85:f6:25:bb:37:be:a1:79: 23:c9:57:06:25:71:6b:45:4f:f8:f4:02:40:16:82:22:af:54: ea:32:28:f6:0d:ee:99:ba:4b:08:51:0f:6e:86:23:21:4c:2d: 25:88:81:c4:2e:0e:f1:13:2c:38:8a:95:02:24:c3:3a:95:63: e4:93:8e:48:bb:08:47:72:5f:ae:e6:3a:5a:47:d6:71:c6:9e: 9a:52 BelSign Secure Server CA ======================== MD5 Fingerprint: 3D:5E:82:C6:D9:AD:D9:8B:93:6B:0C:10:B9:49:0A:B1 PEM Data: -----BEGIN CERTIFICATE----- MIIC8zCCAlygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBszELMAkGA1UEBhMCQkUx ETAPBgNVBAcTCEJydXNzZWxzMRMwEQYDVQQKEwpCZWxTaWduIE5WMTQwMgYDVQQL EytCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSEw HwYDVQQDExhCZWxTaWduIFNlY3VyZSBTZXJ2ZXIgQ0ExIzAhBgkqhkiG9w0BCQEW FHdlYm1hc3RlckBiZWxzaWduLmJlMB4XDTk3MDcxNjIyMDA1NFoXDTA3MDcxNjIy MDA1NFowgbMxCzAJBgNVBAYTAkJFMREwDwYDVQQHEwhCcnVzc2VsczETMBEGA1UE ChMKQmVsU2lnbiBOVjE0MDIGA1UECxMrQmVsU2lnbiBTZWN1cmUgU2VydmVyIENl cnRpZmljYXRlIEF1dGhvcml0eTEhMB8GA1UEAxMYQmVsU2lnbiBTZWN1cmUgU2Vy dmVyIENBMSMwIQYJKoZIhvcNAQkBFhR3ZWJtYXN0ZXJAYmVsc2lnbi5iZTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1gESeJL4BEJ/yccig/x8R3AwK0kLPjZA kCjaIXODU/LE0RZAwFP/rqbGJLMnbaWzPTl3XagG9ubpvGMRTgZlcAqdk/miQIt/ SoQOjRax1swIZBIM4ChLyKWEkBf7EUYu1qeFGMsYrmOasFgG9ADP+MQJGjUMofnu Sv1t3v4mpTsCAwEAAaMVMBMwEQYJYIZIAYb4QgEBBAQDAgCgMA0GCSqGSIb3DQEB BAUAA4GBAGw9mcMF4h3K5S2qaIWLQDEgZhNo5lg6idCNdbLFYth9go/32TKBd/Y1 W4UpzmeyubwrGXjP84f9RvGVdbIJVwMwwXrNckdxgMp9ncllPEcRIn36BwsoeKGT 6AVFSOIyMko96FMcELfHc4wHUOH5yStTQfWDjeUJOUqOA2KqQGOL -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be Validity Not Before: Jul 16 22:00:54 1997 GMT Not After : Jul 16 22:00:54 2007 GMT Subject: C=BE, L=Brussels, O=BelSign NV, OU=BelSign Secure Server Certificate Authority, CN=BelSign Secure Server CA/Email=webmaster@belsign.be Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d6:01:12:78:92:f8:04:42:7f:c9:c7:22:83:fc: 7c:47:70:30:2b:49:0b:3e:36:40:90:28:da:21:73: 83:53:f2:c4:d1:16:40:c0:53:ff:ae:a6:c6:24:b3: 27:6d:a5:b3:3d:39:77:5d:a8:06:f6:e6:e9:bc:63: 11:4e:06:65:70:0a:9d:93:f9:a2:40:8b:7f:4a:84: 0e:8d:16:b1:d6:cc:08:64:12:0c:e0:28:4b:c8:a5: 84:90:17:fb:11:46:2e:d6:a7:85:18:cb:18:ae:63: 9a:b0:58:06:f4:00:cf:f8:c4:09:1a:35:0c:a1:f9: ee:4a:fd:6d:de:fe:26:a5:3b Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL Client, S/MIME Signature Algorithm: md5WithRSAEncryption 6c:3d:99:c3:05:e2:1d:ca:e5:2d:aa:68:85:8b:40:31:20:66: 13:68:e6:58:3a:89:d0:8d:75:b2:c5:62:d8:7d:82:8f:f7:d9: 32:81:77:f6:35:5b:85:29:ce:67:b2:b9:bc:2b:19:78:cf:f3: 87:fd:46:f1:95:75:b2:09:57:03:30:c1:7a:cd:72:47:71:80: ca:7d:9d:c9:65:3c:47:11:22:7d:fa:07:0b:28:78:a1:93:e8: 05:45:48:e2:32:32:4a:3d:e8:53:1c:10:b7:c7:73:8c:07:50: e1:f9:c9:2b:53:41:f5:83:8d:e5:09:39:4a:8e:03:62:aa:40: 63:8b Deutsche Telekom AG Root CA =========================== MD5 Fingerprint: 77:DE:04:94:77:D0:0C:5F:A7:B1:F4:30:18:87:FB:55 PEM Data: -----BEGIN CERTIFICATE----- MIICjjCCAfegAwIBAgIBBjANBgkqhkiG9w0BAQQFADBtMQswCQYDVQQGEwJERTEc MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEdMBsGA1UECxMUVGVsZVNlYyBU cnVzdCBDZW50ZXIxITAfBgNVBAMTGERldXRzY2hlIFRlbGVrb20gUm9vdCBDQTAe Fw05ODEyMDkwOTExMDBaFw0wNDEyMDkyMzU5MDBaMG0xCzAJBgNVBAYTAkRFMRww GgYDVQQKExNEZXV0c2NoZSBUZWxla29tIEFHMR0wGwYDVQQLExRUZWxlU2VjIFRy dXN0IENlbnRlcjEhMB8GA1UEAxMYRGV1dHNjaGUgVGVsZWtvbSBSb290IENBMIGf MA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDdBSz5BbO5EtdpcffqVjAIVxRDe7sa nG0vV2HX4vVEa+42QZb2ZM7hwbK5pBQEmFDocPiONZp9ScFhHVmu2gYYlX2tzuyp vtEYD0CRdiqj5f3+iRX0V/fgVdp1rQD0LME1zLRDJlViRC4BJZyKW/DB0AA1eP41 3pRAZHiDocw5iQIDAQABoz4wPDAPBgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQE AwIBBjAZBgNVHQ4EEgQQLIdZH4sTgLL5hp0+En5YljANBgkqhkiG9w0BAQQFAAOB gQAP/nO1B4hvoAuJ6spQH5TelCsLJ15P9RyVJtqMllStGZE3Q12ryYuzzW+YOT3t 3TXjcbftE5OD6IblKTMTE7w1e/0oL3BZ1dO0jSgTWTvI1XT5RcIHYKq4GFT5pWj/ 1wXVj7YFMS5BSvQQH2BHGguLGU2SVyDS71AZ6M3QcLy8Ng== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 6 (0x6) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA Validity Not Before: Dec 9 09:11:00 1998 GMT Not After : Dec 9 23:59:00 2004 GMT Subject: C=DE, O=Deutsche Telekom AG, OU=TeleSec Trust Center, CN=Deutsche Telekom Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:dd:05:2c:f9:05:b3:b9:12:d7:69:71:f7:ea:56: 30:08:57:14:43:7b:bb:1a:9c:6d:2f:57:61:d7:e2: f5:44:6b:ee:36:41:96:f6:64:ce:e1:c1:b2:b9:a4: 14:04:98:50:e8:70:f8:8e:35:9a:7d:49:c1:61:1d: 59:ae:da:06:18:95:7d:ad:ce:ec:a9:be:d1:18:0f: 40:91:76:2a:a3:e5:fd:fe:89:15:f4:57:f7:e0:55: da:75:ad:00:f4:2c:c1:35:cc:b4:43:26:55:62:44: 2e:01:25:9c:8a:5b:f0:c1:d0:00:35:78:fe:35:de: 94:40:64:78:83:a1:cc:39:89 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 2C:87:59:1F:8B:13:80:B2:F9:86:9D:3E:12:7E:58:96 Signature Algorithm: md5WithRSAEncryption 0f:fe:73:b5:07:88:6f:a0:0b:89:ea:ca:50:1f:94:de:94:2b: 0b:27:5e:4f:f5:1c:95:26:da:8c:96:54:ad:19:91:37:43:5d: ab:c9:8b:b3:cd:6f:98:39:3d:ed:dd:35:e3:71:b7:ed:13:93: 83:e8:86:e5:29:33:13:13:bc:35:7b:fd:28:2f:70:59:d5:d3: b4:8d:28:13:59:3b:c8:d5:74:f9:45:c2:07:60:aa:b8:18:54: f9:a5:68:ff:d7:05:d5:8f:b6:05:31:2e:41:4a:f4:10:1f:60: 47:1a:0b:8b:19:4d:92:57:20:d2:ef:50:19:e8:cd:d0:70:bc: bc:36 Digital Signature Trust Co. Global CA 1 ======================================= MD5 Fingerprint: 25:7A:BA:83:2E:B6:A2:0B:DA:FE:F5:02:0F:08:D7:AD PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5 fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i +DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+ gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913315222 (0x36701596) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Validity Not Before: Dec 10 18:10:23 1998 GMT Not After : Dec 10 18:40:23 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E1 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:a0:6c:81:a9:cf:34:1e:24:dd:fe:86:28:cc:de: 83:2f:f9:5e:d4:42:d2:e8:74:60:66:13:98:06:1c: a9:51:12:69:6f:31:55:b9:49:72:00:08:7e:d3:a5: 62:44:37:24:99:8f:d9:83:48:8f:99:6d:95:13:bb: 43:3b:2e:49:4e:88:37:c1:bb:58:7f:fe:e1:bd:f8: bb:61:cd:f3:47:c0:99:a6:f1:f3:91:e8:78:7c:00: cb:61:c9:44:27:71:69:55:4a:7e:49:4d:ed:a2:a3: be:02:4c:00:ca:02:a8:ee:01:02:31:64:0f:52:2d: 13:74:76:36:b5:7a:b4:2d:71 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E1/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 10 18:10:23 1998 GMT, Not After: Dec 10 18:10:23 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Subject Key Identifier: 6A:79:7E:91:69:46:18:13:0A:02:77:A5:59:5B:60:98:25:0E:A2:F8 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 22:12:d8:7a:1d:dc:81:06:b6:09:65:b2:87:c8:1f:5e:b4:2f: e9:c4:1e:f2:3c:c1:bb:04:90:11:4a:83:4e:7e:93:b9:4d:42: c7:92:26:a0:5c:34:9a:38:72:f8:fd:6b:16:3e:20:ee:82:8b: 31:2a:93:36:85:23:88:8a:3c:03:68:d3:c9:09:0f:4d:fc:6c: a4:da:28:72:93:0e:89:80:b0:7d:fe:80:6f:65:6d:18:33:97: 8b:c2:6b:89:ee:60:3d:c8:9b:ef:7f:2b:32:62:73:93:cb:3c: e3:7b:e2:76:78:45:bc:a1:93:04:bb:86:9f:3a:5b:43:7a:c3: 8a:65 Digital Signature Trust Co. Global CA 2 ======================================= MD5 Fingerprint: 6C:C9:A7:6E:47:F1:0C:E3:53:3B:78:4C:4D:C2:6A:C5 PEM Data: -----BEGIN CERTIFICATE----- MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F 5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG 9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:02:7c:00:00:00:02:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com Validity Not Before: Dec 1 18:18:55 1998 GMT Not After : Nov 28 18:18:55 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X1, CN=DST RootCA X1/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d2:c6:26:b6:e7:a5:3d:c1:c4:68:d5:50:6f:53: c5:6f:49:13:09:b8:af:2c:48:8d:14:6a:a3:17:5f: 5a:f9:d3:2e:75:2f:d8:28:62:d1:93:2f:fc:4d:d4: ab:87:e5:08:c7:99:e7:92:3f:75:bd:eb:25:b4:15: c1:9b:19:3d:d2:44:8d:d7:74:20:6d:37:02:8f:69: 93:5b:8a:c4:19:9d:f4:b2:0e:fc:16:6c:b9:b1:05: 92:83:d1:85:2c:60:94:3e:45:55:a0:d9:ab:08:21: e6:60:e8:3b:74:f2:99:50:51:68:d0:03:2d:b1:80: be:a3:d8:52:b0:44:cd:43:4a:70:8e:58:85:95:e1: 4e:2c:d6:2d:41:6f:d6:84:e7:c8:98:44:ca:47:db: 2c:24:a5:69:26:cf:6b:b8:27:62:c3:f4:c9:7a:92: 23:ed:13:67:82:ae:45:2e:45:e5:7e:72:3f:85:9d: 94:62:10:e6:3c:91:a1:ad:77:00:e0:15:ec:f3:84: 80:72:7a:8e:6e:60:97:c7:24:59:10:34:83:5b:e1: a5:a4:69:b6:57:35:1c:78:59:c6:d3:2f:3a:73:67: ee:94:ca:04:13:05:62:06:70:23:b3:f4:7c:ee:45: d9:64:0b:5b:49:aa:a4:43:ce:26:c4:44:12:6c:b8: dd:79 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption a2:37:b2:3f:69:fb:d7:86:79:54:49:31:95:33:2b:f3:d1:09: 14:49:62:60:86:a5:b0:11:e2:50:c2:1d:06:57:3e:2d:e8:33: 64:be:9b:aa:ad:5f:1b:4d:d4:99:95:a2:8b:9a:c9:62:72:b5: 69:ea:d9:58:ab:35:ed:15:a2:43:d6:b6:bc:07:79:65:64:73: 7d:d7:79:ca:7b:d5:5a:51:c6:e1:53:04:96:8d:38:cf:a3:17: ac:39:71:6b:01:c3:8b:53:3c:63:e9:ee:79:c0:e4:be:92:32: 64:7a:b3:1f:97:94:62:bd:ea:b2:20:15:95:fb:97:f2:78:2f: 63:36:40:38:e3:46:0f:1d:dd:ac:95:ca:e7:4b:90:7b:b1:4b: a9:d4:c5:eb:9a:da:aa:d5:a3:94:14:46:8d:2d:1f:f3:3a:d6: 93:3a:f6:3e:79:fc:e8:e6:b0:75:ed:ee:3d:c9:70:c7:5d:aa: 81:4b:46:25:1c:c7:6c:15:e3:95:4e:0f:aa:32:37:94:0a:17: 24:92:13:84:58:d2:63:6f:2b:f7:e6:5b:62:0b:13:17:b0:0d: 52:4c:fe:fe:6f:5c:e2:91:6e:1d:fd:a4:62:d7:68:fa:8e:7a: 4f:d2:08:da:93:dc:f0:92:11:7a:d0:dc:72:93:0c:73:93:62: 85:68:d0:f4 Digital Signature Trust Co. Global CA 3 ======================================= MD5 Fingerprint: 93:C2:8E:11:7B:D4:F3:03:19:BD:28:75:13:4A:45:4A PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/ k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3 MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5 WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913232846 (0x366ed3ce) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Validity Not Before: Dec 9 19:17:26 1998 GMT Not After : Dec 9 19:47:26 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DSTCA E2 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bf:93:8f:17:92:ef:33:13:18:eb:10:7f:4e:16: bf:ff:06:8f:2a:85:bc:5e:f9:24:a6:24:88:b6:03: b7:c1:c3:5f:03:5b:d1:6f:ae:7e:42:ea:66:23:b8: 63:83:56:fb:28:2d:e1:38:8b:b4:ee:a8:01:e1:ce: 1c:b6:88:2a:22:46:85:fb:9f:a7:70:a9:47:14:3f: ce:de:65:f0:a8:71:f7:4f:26:6c:8c:bc:c6:b5:ef: de:49:27:ff:48:2a:7d:e8:4d:03:cc:c7:b2:52:c6: 17:31:13:3b:b5:4d:db:c8:c4:f6:c3:0f:24:2a:da: 0c:9d:e7:91:5b:80:cd:94:9d Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DSTCA E2/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 19:17:26 1998 GMT, Not After: Dec 9 19:17:26 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Subject Key Identifier: 1E:82:4D:28:65:80:3C:C9:41:6E:AC:35:2E:5A:CB:DE:EE:F8:39:5B X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 47:8d:83:ad:62:f2:db:b0:9e:45:22:05:b9:a2:d6:03:0e:38: 72:e7:9e:fc:7b:e6:93:b6:9a:a5:a2:94:c8:34:1d:91:d1:c5: d7:f4:0a:25:0f:3d:78:81:9e:0f:b1:67:c4:90:4c:63:dd:5e: a7:e2:ba:9f:f5:f7:4d:a5:31:7b:9c:29:2d:4c:fe:64:3e:ec: b6:53:fe:ea:9b:ed:82:db:74:75:4b:07:79:6e:1e:d8:19:83: 73:de:f5:3e:d0:b5:de:e7:4b:68:7d:43:2e:2a:20:e1:7e:a0: 78:44:9e:08:f5:98:f9:c7:7f:1b:1b:d6:06:20:02:58:a1:c3: a2:03 Digital Signature Trust Co. Global CA 4 ======================================= MD5 Fingerprint: CD:3B:3D:62:5B:09:B8:09:36:87:9E:12:2F:71:64:BA PEM Data: -----BEGIN CERTIFICATE----- MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0 IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl 5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi 3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+ QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG 9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ 2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL 553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q 10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:77:6d:00:00:00:01:00:00:00:04 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com Validity Not Before: Nov 30 22:46:16 1998 GMT Not After : Nov 27 22:46:16 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=DSTCA X2, CN=DST RootCA X2/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:dc:75:f0:8c:c0:75:96:9a:c0:62:1f:26:f7:c4: e1:9a:ea:e0:56:73:5b:99:cd:01:44:a8:08:b6:d5: a7:da:1a:04:18:39:92:4a:78:a3:81:c2:f5:77:7a: 50:b4:70:ff:9a:ab:c6:c7:ca:6e:83:4f:42:98:fb: 26:0b:da:dc:6d:d6:a9:99:55:52:67:e9:28:03:92: dc:e5:b0:05:9a:0f:15:f9:6b:59:72:56:f2:fa:39: fc:aa:68:ee:0f:1f:10:83:2f:fc:9d:fa:17:96:dd: 82:e3:e6:45:7d:c0:4b:80:44:1f:ed:2c:e0:84:fd: 91:5c:92:54:69:25:e5:62:69:dc:e5:ee:00:52:bd: 33:0b:ad:75:02:85:a7:64:50:2d:c5:19:19:30:c0: 26:db:c9:d3:fd:2e:99:ad:59:b5:0b:4d:d4:41:ae: 85:48:43:59:dc:b7:a8:e2:a2:de:c3:8f:d7:b8:a1: 62:a6:68:50:52:e4:cf:31:a7:94:85:da:9f:46:32: 17:56:e5:f2:eb:66:3d:12:ff:43:db:98:ef:77:cf: cb:81:8d:34:b1:c6:50:4a:26:d1:e4:3e:41:50:af: 6c:ae:22:34:2e:d5:6b:6e:83:ba:79:b8:76:65:48: da:09:29:64:63:22:b9:fb:47:76:85:8c:86:44:cb: 09:db Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption b5:36:0e:5d:e1:61:28:5a:11:65:c0:3f:83:03:79:4d:be:28: a6:0b:07:02:52:85:cd:f8:91:d0:10:6c:b5:6a:20:5b:1c:90: d9:30:3c:c6:48:9e:8a:5e:64:f9:a1:71:77:ef:04:27:1f:07: eb:e4:26:f7:73:74:c9:44:18:1a:66:d3:e0:43:af:91:3b:d1: cb:2c:d8:74:54:3a:1c:4d:ca:d4:68:cd:23:7c:1d:10:9e:45: e9:f6:00:6e:a6:cd:19:ff:4f:2c:29:8f:57:4d:c4:77:92:be: e0:4c:09:fb:5d:44:86:66:21:a8:b9:32:a2:56:d5:e9:8c:83: 7c:59:3f:c4:f1:0b:e7:9d:ec:9e:bd:9c:18:0e:3e:c2:39:79: 28:b7:03:0d:08:cb:c6:e7:d9:01:37:50:10:ec:cc:61:16:40: d4:af:31:74:7b:fc:3f:31:a7:d0:47:73:33:39:1b:cc:4e:6a: d7:49:83:11:06:fe:eb:82:58:33:32:4c:f0:56:ac:1e:9c:2f: 56:9a:7b:c1:4a:1c:a5:fd:55:36:ce:fc:96:4d:f4:b0:f0:ec: b7:6c:82:ed:2f:31:99:42:4c:a9:b2:0d:b8:15:5d:f1:df:ba: c9:b5:4a:d4:64:98:b3:26:a9:30:c8:fd:a6:ec:ab:96:21:ad: 7f:c2:78:b6 Entrust Worldwide by DST ======================== MD5 Fingerprint: B4:65:22:0A:7C:AD:DF:41:B7:D5:44:D5:AD:FA:9A:75 PEM Data: -----BEGIN CERTIFICATE----- MIIDRzCCArCgAwIBAgIENm3FGDANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJV UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRswGQYDVQQL ExJEU1QtRW50cnVzdCBHVEkgQ0EwHhcNOTgxMjA5MDAwMjI0WhcNMTgxMjA5MDAz MjI0WjBQMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0EwgZ0wDQYJKoZI hvcNAQEBBQADgYsAMIGHAoGBALYd90uNDxPjEvUJ/gYyDq9MQfV91Ec9KgrfgwXe 3n3mAxb2UTrLRxpKrX7E/R20vnSKeN0Lg460hBPE+/htKa6h4Q8PQ+O1XmBp+oOU /Hnm3Hbt0UQrjv0Su/4XdxcMie2n71F9xO04wzujevviTaBgtfL9E2XTxuw/vjWc PSLvAgEDo4IBLjCCASowEQYJYIZIAYb4QgEBBAQDAgAHMHIGA1UdHwRrMGkwZ6Bl oGOkYTBfMQswCQYDVQQGEwJVUzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUg VHJ1c3QgQ28uMRswGQYDVQQLExJEU1QtRW50cnVzdCBHVEkgQ0ExDTALBgNVBAMT BENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkwMDAyMjRagQ8yMDE4MTIwOTAwMDIy NFowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFJOaRMrQeFOAKUkE38evMz+ZdV+u MB0GA1UdDgQWBBSTmkTK0HhTgClJBN/HrzM/mXVfrjAMBgNVHRMEBTADAQH/MBkG CSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4GBAGSJzAOn 3AryWCDn/RegKHLNh7DNmLUkR2MzMRAQsu+KV3KuTAPgZ5+sYEOEIsGpo+Wxp94J 1M8NeEYjW49Je/4TIpeU6nJI4SwgeJbpZkUZywllY2E/0UmYsXYQVdVjSmZLpAdr 3nt/ueaTWxoCW4AO3Y0Y1Iqjwmjxo+AY0U5M -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 913163544 (0x366dc518) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA Validity Not Before: Dec 9 00:02:24 1998 GMT Not After : Dec 9 00:32:24 2018 GMT Subject: C=US, O=Digital Signature Trust Co., OU=DST-Entrust GTI CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:1d:f7:4b:8d:0f:13:e3:12:f5:09:fe:06:32: 0e:af:4c:41:f5:7d:d4:47:3d:2a:0a:df:83:05:de: de:7d:e6:03:16:f6:51:3a:cb:47:1a:4a:ad:7e:c4: fd:1d:b4:be:74:8a:78:dd:0b:83:8e:b4:84:13:c4: fb:f8:6d:29:ae:a1:e1:0f:0f:43:e3:b5:5e:60:69: fa:83:94:fc:79:e6:dc:76:ed:d1:44:2b:8e:fd:12: bb:fe:17:77:17:0c:89:ed:a7:ef:51:7d:c4:ed:38: c3:3b:a3:7a:fb:e2:4d:a0:60:b5:f2:fd:13:65:d3: c6:ec:3f:be:35:9c:3d:22:ef Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Digital Signature Trust Co./OU=DST-Entrust GTI CA/CN=CRL1 X509v3 Private Key Usage Period: Not Before: Dec 9 00:02:24 1998 GMT, Not After: Dec 9 00:02:24 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE X509v3 Subject Key Identifier: 93:9A:44:CA:D0:78:53:80:29:49:04:DF:C7:AF:33:3F:99:75:5F:AE X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 64:89:cc:03:a7:dc:0a:f2:58:20:e7:fd:17:a0:28:72:cd:87: b0:cd:98:b5:24:47:63:33:31:10:10:b2:ef:8a:57:72:ae:4c: 03:e0:67:9f:ac:60:43:84:22:c1:a9:a3:e5:b1:a7:de:09:d4: cf:0d:78:46:23:5b:8f:49:7b:fe:13:22:97:94:ea:72:48:e1: 2c:20:78:96:e9:66:45:19:cb:09:65:63:61:3f:d1:49:98:b1: 76:10:55:d5:63:4a:66:4b:a4:07:6b:de:7b:7f:b9:e6:93:5b: 1a:02:5b:80:0e:dd:8d:18:d4:8a:a3:c2:68:f1:a3:e0:18:d1: 4e:4c Entrust.net Premium 2048 Secure Server CA ========================================= MD5 Fingerprint: BA:21:EA:20:D6:DD:DB:8F:C1:57:8B:40:AD:A1:FC:FC PEM Data: -----BEGIN CERTIFICATE----- MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH 4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy vUxFnmG6v4SBkgPR0ml8xQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 946059622 (0x3863b966) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Validity Not Before: Dec 24 17:50:51 1999 GMT Not After : Dec 24 18:20:51 2019 GMT Subject: O=Entrust.net, OU=www.entrust.net/CPS_2048 incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Certification Authority (2048) Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:4d:4b:a9:12:86:b2:ea:a3:20:07:15:16:64: 2a:2b:4b:d1:bf:0b:4a:4d:8e:ed:80:76:a5:67:b7: 78:40:c0:73:42:c8:68:c0:db:53:2b:dd:5e:b8:76: 98:35:93:8b:1a:9d:7c:13:3a:0e:1f:5b:b7:1e:cf: e5:24:14:1e:b1:81:a9:8d:7d:b8:cc:6b:4b:03:f1: 02:0c:dc:ab:a5:40:24:00:7f:74:94:a1:9d:08:29: b3:88:0b:f5:87:77:9d:55:cd:e4:c3:7e:d7:6a:64: ab:85:14:86:95:5b:97:32:50:6f:3d:c8:ba:66:0c: e3:fc:bd:b8:49:c1:76:89:49:19:fd:c0:a8:bd:89: a3:67:2f:c6:9f:bc:71:19:60:b8:2d:e9:2c:c9:90: 76:66:7b:94:e2:af:78:d6:65:53:5d:3c:d6:9c:b2: cf:29:03:f9:2f:a4:50:b2:d4:48:ce:05:32:55:8a: fd:b2:64:4c:0e:e4:98:07:75:db:7f:df:b9:08:55: 60:85:30:29:f9:7b:48:a4:69:86:e3:35:3f:1e:86: 5d:7a:7a:15:bd:ef:00:8e:15:22:54:17:00:90:26: 93:bc:0e:49:68:91:bf:f8:47:d3:9d:95:42:c1:0e: 4d:df:6f:26:cf:c3:18:21:62:66:43:70:d6:d5:c0: 07:e1 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 Authority Key Identifier: keyid:55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 X509v3 Subject Key Identifier: 55:E4:81:D1:11:80:BE:D8:89:B9:08:A3:31:F9:A1:24:09:16:B9:70 1.2.840.113533.7.65.0: 0...V5.0:4.0.... Signature Algorithm: sha1WithRSAEncryption 59:47:ac:21:84:8a:17:c9:9c:89:53:1e:ba:80:85:1a:c6:3c: 4e:3e:b1:9c:b6:7c:c6:92:5d:18:64:02:e3:d3:06:08:11:61: 7c:63:e3:2b:9d:31:03:70:76:d2:a3:28:a0:f4:bb:9a:63:73: ed:6d:e5:2a:db:ed:14:a9:2b:c6:36:11:d0:2b:eb:07:8b:a5: da:9e:5c:19:9d:56:12:f5:54:29:c8:05:ed:b2:12:2a:8d:f4: 03:1b:ff:e7:92:10:87:b0:3a:b5:c3:9d:05:37:12:a3:c7:f4: 15:b9:d5:a4:39:16:9b:53:3a:23:91:f1:a8:82:a2:6a:88:68: c1:79:02:22:bc:aa:a6:d6:ae:df:b0:14:5f:b8:87:d0:dd:7c: 7f:7b:ff:af:1c:cf:e6:db:07:ad:5e:db:85:9d:d0:2b:0d:33: db:04:d1:e6:49:40:13:2b:76:fb:3e:e9:9c:89:0f:15:ce:18: b0:85:78:21:4f:6b:4f:0e:fa:36:67:cd:07:f2:ff:08:d0:e2: de:d9:bf:2a:af:b8:87:86:21:3c:04:ca:b7:94:68:7f:cf:3c: e9:98:d7:38:ff:ec:c0:d9:50:f0:2e:4b:58:ae:46:6f:d0:2e: c3:60:da:72:55:72:bd:4c:45:9e:61:ba:bf:84:81:92:03:d1: d2:69:7c:c5 Entrust.net Secure Personal CA ============================== MD5 Fingerprint: 0C:41:2F:13:5B:A0:54:F5:96:66:2D:7E:CD:0E:03:F4 PEM Data: -----BEGIN CERTIFICATE----- MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo 6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux 5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50 cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7 pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a EkP/TOYGJqibGapEPHayXOw= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 939758062 (0x380391ee) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority Validity Not Before: Oct 12 19:24:30 1999 GMT Not After : Oct 12 19:54:30 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab., OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Client Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c8:3a:99:5e:31:17:df:ac:27:6f:90:7b:e4:19: ff:45:a3:34:c2:db:c1:a8:4f:f0:68:ea:84:fd:9f: 75:79:cf:c1:8a:51:94:af:c7:57:03:47:64:9e:ad: 82:1b:5a:da:7f:37:78:47:bb:37:98:12:96:ce:c6: 13:7d:ef:d2:0c:30:51:a9:39:9e:55:f8:fb:b1:e7: 30:de:83:b2:ba:3e:f1:d5:89:3b:3b:85:ba:aa:74: 2c:fe:3f:31:6e:af:91:95:6e:06:d4:07:4d:4b:2c: 56:47:18:04:52:da:0e:10:93:bf:63:90:9b:e1:df: 8c:e6:02:a4:e6:4f:5e:f7:8b Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Entrust.net/OU=www.entrust.net/Client_CA_Info/CPS incorp. by ref. limits liab./OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Client Certification Authority/CN=CRL1 URI:http://www.entrust.net/CRL/Client1.crl X509v3 Private Key Usage Period: Not Before: Oct 12 19:24:30 1999 GMT, Not After: Oct 12 19:24:30 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C X509v3 Subject Key Identifier: C4:FB:9C:29:7B:97:CD:4C:96:FC:EE:5B:B3:CA:99:74:8B:95:EA:4C X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: md5WithRSAEncryption 3f:ae:8a:f1:d7:66:03:05:9e:3e:fa:ea:1c:46:bb:a4:5b:8f: 78:9a:12:48:99:f9:f4:35:de:0c:36:07:02:6b:10:3a:89:14: 81:9c:31:a6:7c:b2:41:b2:6a:e7:07:01:a1:4b:f9:9f:25:3b: 96:ca:99:c3:3e:a1:51:1c:f3:c3:2e:44:f7:b0:67:46:aa:92: e5:3b:da:1c:19:14:38:30:d5:e2:a2:31:25:2e:f1:ec:45:38: ed:f8:06:58:03:73:62:b0:10:31:8f:40:bf:64:e0:5c:3e:c5: 4f:1f:da:12:43:ff:4c:e6:06:26:a8:9b:19:aa:44:3c:76:b2: 5c:ec Entrust.net Secure Server CA ============================ MD5 Fingerprint: DF:F2:80:73:CC:F1:E6:61:73:FC:F5:42:E9:C5:7C:EE PEM Data: -----BEGIN CERTIFICATE----- MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1 MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/ I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3 wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5 BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0 MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN 95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd 2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 927650371 (0x374ad243) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Validity Not Before: May 25 16:09:40 1999 GMT Not After : May 25 16:39:40 2019 GMT Subject: C=US, O=Entrust.net, OU=www.entrust.net/CPS incorp. by ref. (limits liab.), OU=(c) 1999 Entrust.net Limited, CN=Entrust.net Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:cd:28:83:34:54:1b:89:f3:0f:af:37:91:31:ff: af:31:60:c9:a8:e8:b2:10:68:ed:9f:e7:93:36:f1: 0a:64:bb:47:f5:04:17:3f:23:47:4d:c5:27:19:81: 26:0c:54:72:0d:88:2d:d9:1f:9a:12:9f:bc:b3:71: d3:80:19:3f:47:66:7b:8c:35:28:d2:b9:0a:df:24: da:9c:d6:50:79:81:7a:5a:d3:37:f7:c2:4a:d8:29: 92:26:64:d1:e4:98:6c:3a:00:8a:f5:34:9b:65:f8: ed:e3:10:ff:fd:b8:49:58:dc:a0:de:82:39:6b:81: b1:16:19:61:b9:54:b6:e6:43 Exponent: 3 (0x3) X509v3 extensions: Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA X509v3 CRL Distribution Points: DirName:/C=US/O=Entrust.net/OU=www.entrust.net/CPS incorp. by ref. (limits liab.)/OU=(c) 1999 Entrust.net Limited/CN=Entrust.net Secure Server Certification Authority/CN=CRL1 URI:http://www.entrust.net/CRL/net1.crl X509v3 Private Key Usage Period: Not Before: May 25 16:09:40 1999 GMT, Not After: May 25 16:09:40 2019 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Subject Key Identifier: F0:17:62:13:55:3D:B3:FF:0A:00:6B:FB:50:84:97:F3:ED:62:D0:1A X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0 ..V4.0.... Signature Algorithm: sha1WithRSAEncryption 90:dc:30:02:fa:64:74:c2:a7:0a:a5:7c:21:8d:34:17:a8:fb: 47:0e:ff:25:7c:8d:13:0a:fb:e4:98:b5:ef:8c:f8:c5:10:0d: f7:92:be:f1:c3:d5:d5:95:6a:04:bb:2c:ce:26:36:65:c8:31: c6:e7:ee:3f:e3:57:75:84:7a:11:ef:46:4f:18:f4:d3:98:bb: a8:87:32:ba:72:f6:3c:e2:3d:9f:d7:1d:d9:c3:60:43:8c:58: 0e:22:96:2f:62:a3:2c:1f:ba:ad:05:ef:ab:32:78:87:a0:54: 73:19:b5:5c:05:f9:52:3e:6d:2d:45:0b:f7:0a:93:ea:ed:06: f9:b2 Equifax Premium CA ================== MD5 Fingerprint: A9:E9:A8:9D:0E:73:E3:B1:2F:37:0D:E8:48:3F:86:ED PEM Data: -----BEGIN CERTIFICATE----- MIIDIzCCAoygAwIBAgIENeHvHjANBgkqhkiG9w0BAQUFADBPMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEuMCwGA1UECxMlRXF1aWZheCBQcmVtaXVtIENl cnRpZmljYXRlIEF1dGhvcml0eTAeFw05ODA4MjQyMjU0MjNaFw0xODA4MjQyMjU0 MjNaME8xCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVF cXVpZmF4IFByZW1pdW0gQ2VydGlmaWNhdGUgQXV0aG9yaXR5MIGfMA0GCSqGSIb3 DQEBAQUAA4GNADCBiQKBgQDOoQaOBswIC8GGqN4g1Q0O0Q3En+pq2bPCMkdAb4qI pAm9OCwd5svmpPM269rrvPxkswf2Lbyqzp8ZSGhK/PWiRX4JEPWPs0lcIwY56hOL uAvNkR12X9k3oUT7X5DyZ7PNGJlDH3YSawLylYM4Q8L2YjTKyXhdX9LYupr/vhBg WwIDAQABo4IBCjCCAQYwcQYDVR0fBGowaDBmoGSgYqRgMF4xCzAJBgNVBAYTAlVT MRAwDgYDVQQKEwdFcXVpZmF4MS4wLAYDVQQLEyVFcXVpZmF4IFByZW1pdW0gQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIw MTgwODI0MjI1NDIzWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUFe6yKFmrbuX4 z4uB9CThrj91G5gwHQYDVR0OBBYEFBXusihZq27l+M+LgfQk4a4/dRuYMAwGA1Ud EwQFMAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEB BQUAA4GBAL0LnCepA9so3JipS9DRjqeoGlqR4Jzx9xh8LiKeNh/JqLXNRkpu+jUH G4YI65/iqPmdQS06rlxctl80BOv8KmCw+3TkhellOJbuFcfGd2MSvYpoH6tsfdrK XBPO6snrCVzFc+cSAdXZUwee4A+W8Iu0u0VIn4bFGVWgy5bFA/xI -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 903999262 (0x35e1ef1e) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax, OU=Equifax Premium Certificate Authority Validity Not Before: Aug 24 22:54:23 1998 GMT Not After : Aug 24 22:54:23 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Premium Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ce:a1:06:8e:06:cc:08:0b:c1:86:a8:de:20:d5: 0d:0e:d1:0d:c4:9f:ea:6a:d9:b3:c2:32:47:40:6f: 8a:88:a4:09:bd:38:2c:1d:e6:cb:e6:a4:f3:36:eb: da:eb:bc:fc:64:b3:07:f6:2d:bc:aa:ce:9f:19:48: 68:4a:fc:f5:a2:45:7e:09:10:f5:8f:b3:49:5c:23: 06:39:ea:13:8b:b8:0b:cd:91:1d:76:5f:d9:37:a1: 44:fb:5f:90:f2:67:b3:cd:18:99:43:1f:76:12:6b: 02:f2:95:83:38:43:c2:f6:62:34:ca:c9:78:5d:5f: d2:d8:ba:9a:ff:be:10:60:5b Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: DirName:/C=US/O=Equifax/OU=Equifax Premium Certificate Authority/CN=CRL1 X509v3 Private Key Usage Period: Not After: Aug 24 22:54:23 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 X509v3 Subject Key Identifier: 15:EE:B2:28:59:AB:6E:E5:F8:CF:8B:81:F4:24:E1:AE:3F:75:1B:98 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption bd:0b:9c:27:a9:03:db:28:dc:98:a9:4b:d0:d1:8e:a7:a8:1a: 5a:91:e0:9c:f1:f7:18:7c:2e:22:9e:36:1f:c9:a8:b5:cd:46: 4a:6e:fa:35:07:1b:86:08:eb:9f:e2:a8:f9:9d:41:2d:3a:ae: 5c:5c:b6:5f:34:04:eb:fc:2a:60:b0:fb:74:e4:85:e9:65:38: 96:ee:15:c7:c6:77:63:12:bd:8a:68:1f:ab:6c:7d:da:ca:5c: 13:ce:ea:c9:eb:09:5c:c5:73:e7:12:01:d5:d9:53:07:9e:e0: 0f:96:f0:8b:b4:bb:45:48:9f:86:c5:19:55:a0:cb:96:c5:03: fc:48 Equifax Secure CA ================= MD5 Fingerprint: 67:CB:9D:C0:13:24:8A:82:9B:B2:17:1E:D1:1B:EC:D4 PEM Data: -----BEGIN CERTIFICATE----- MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 903804111 (0x35def4cf) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Validity Not Before: Aug 22 16:41:51 1998 GMT Not After : Aug 22 16:41:51 2018 GMT Subject: C=US, O=Equifax, OU=Equifax Secure Certificate Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c1:5d:b1:58:67:08:62:ee:a0:9a:2d:1f:08:6d: 91:14:68:98:0a:1e:fe:da:04:6f:13:84:62:21:c3: d1:7c:ce:9f:05:e0:b8:01:f0:4e:34:ec:e2:8a:95: 04:64:ac:f1:6b:53:5f:05:b3:cb:67:80:bf:42:02: 8e:fe:dd:01:09:ec:e1:00:14:4f:fc:fb:f0:0c:dd: 43:ba:5b:2b:e1:1f:80:70:99:15:57:93:16:f1:0f: 97:6a:b7:c2:68:23:1c:cc:4d:59:30:ac:51:1e:3b: af:2b:d6:ee:63:45:7b:c5:d9:5f:50:d2:e3:50:0f: 3a:88:e7:bf:14:fd:e0:c7:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 CRL Distribution Points: DirName:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority/CN=CRL1 X509v3 Private Key Usage Period: Not After: Aug 22 16:41:51 2018 GMT X509v3 Key Usage: Certificate Sign, CRL Sign X509v3 Authority Key Identifier: keyid:48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Subject Key Identifier: 48:E6:68:F9:2B:D2:B2:95:D7:47:D8:23:20:10:4F:33:98:90:9F:D4 X509v3 Basic Constraints: CA:TRUE 1.2.840.113533.7.65.0: 0...V3.0c.... Signature Algorithm: sha1WithRSAEncryption 58:ce:29:ea:fc:f7:de:b5:ce:02:b9:17:b5:85:d1:b9:e3:e0: 95:cc:25:31:0d:00:a6:92:6e:7f:b6:92:63:9e:50:95:d1:9a: 6f:e4:11:de:63:85:6e:98:ee:a8:ff:5a:c8:d3:55:b2:66:71: 57:de:c0:21:eb:3d:2a:a7:23:49:01:04:86:42:7b:fc:ee:7f: a2:16:52:b5:67:67:d3:40:db:3b:26:58:b2:28:77:3d:ae:14: 77:61:d6:fa:2a:66:27:a0:0d:fa:a7:73:5c:ea:70:f1:94:21: 65:44:5f:fa:fc:ef:29:68:a9:a2:87:79:ef:79:ef:4f:ac:07: 77:38 GTE CyberTrust Global Root ========================== MD5 Fingerprint: CA:3D:D3:68:F1:03:5C:D0:32:FA:B8:2B:59:E8:5A:DB PEM Data: -----BEGIN CERTIFICATE----- MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4 04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9 3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/ -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 421 (0x1a5) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Validity Not Before: Aug 13 00:29:00 1998 GMT Not After : Aug 13 23:59:00 2018 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Global Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:95:0f:a0:b6:f0:50:9c:e8:7a:c7:88:cd:dd:17: 0e:2e:b0:94:d0:1b:3d:0e:f6:94:c0:8a:94:c7:06: c8:90:97:c8:b8:64:1a:7a:7e:6c:3c:53:e1:37:28: 73:60:7f:b2:97:53:07:9f:53:f9:6d:58:94:d2:af: 8d:6d:88:67:80:e6:ed:b2:95:cf:72:31:ca:a5:1c: 72:ba:5c:02:e7:64:42:e7:f9:a9:2c:d6:3a:0d:ac: 8d:42:aa:24:01:39:e6:9c:3f:01:85:57:0d:58:87: 45:f8:d3:85:aa:93:69:26:85:70:48:80:3f:12:15: c7:79:b4:1f:05:2f:3b:62:99 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 6d:eb:1b:09:e9:5e:d9:51:db:67:22:61:a4:2a:3c:48:77:e3: a0:7c:a6:de:73:a2:14:03:85:3d:fb:ab:0e:30:c5:83:16:33: 81:13:08:9e:7b:34:4e:df:40:c8:74:d7:b9:7d:dc:f4:76:55: 7d:9b:63:54:18:e9:f0:ea:f3:5c:b1:d9:8b:42:1e:b9:c0:95: 4e:ba:fa:d5:e2:7c:f5:68:61:bf:8e:ec:05:97:5f:5b:b0:d7: a3:85:34:c4:24:a7:0d:0f:95:93:ef:cb:94:d8:9e:1f:9d:5c: 85:6d:c7:aa:ae:4f:1f:22:b5:cd:95:ad:ba:a7:cc:f9:ab:0b: 7a:7f GTE CyberTrust Japan Root CA ============================ MD5 Fingerprint: DE:AB:FF:43:2A:65:37:06:9B:28:B5:7A:E8:84:D3:8E PEM Data: -----BEGIN CERTIFICATE----- MIICETCCAXoCAU4wDQYJKoZIhvcNAQEEBQAwUTELMAkGA1UEBhMCSlAxHzAdBgNV BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xITAfBgNVBAMTGEN5YmVyVHJ1c3Qg SkFQQU4gUm9vdCBDQTAeFw05ODA4MDQwNzU3MDBaFw0wMzA4MDQyMzU5MDBaMFEx CzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFuLCBJbmMuMSEw HwYDVQQDExhDeWJlclRydXN0IEpBUEFOIFJvb3QgQ0EwgZ8wDQYJKoZIhvcNAQEB BQADgY0AMIGJAoGBALet/MpHEHaJ/Wes5HMGfIFLHda1fA5Hr+ymVHWoxP1lr+fI sbFsNDWN97lkVygLIVredP7ceC6GRhJMfxEf3JO9X75mmIa4t+xtSdOQ2eF5AFZo uq1sHyw7H8ksjEOwBELqgXOmzjN1RQ2KRXIvqldV5AfDQ+J1Og+8PNCEzrrvAgMB AAEwDQYJKoZIhvcNAQEEBQADgYEAt6ZkowyAPBzE2O5BO+WGpJ5gXdYBMqhqZC0g cEC6ck5m+gdlTgOOC/1W4K07IKcy+rISHoDfHuN6GMxX2+bJNGDvdesQFtCkLnDY JCO4pXdzQvkHOt0BbAiTBzUmECVgKf8J5WSfabkWSfNc3SRjRpMNsFM2dbxIILsZ to/QIv0= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 78 (0x4e) Signature Algorithm: md5WithRSAEncryption Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA Validity Not Before: Aug 4 07:57:00 1998 GMT Not After : Aug 4 23:59:00 2003 GMT Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b7:ad:fc:ca:47:10:76:89:fd:67:ac:e4:73:06: 7c:81:4b:1d:d6:b5:7c:0e:47:af:ec:a6:54:75:a8: c4:fd:65:af:e7:c8:b1:b1:6c:34:35:8d:f7:b9:64: 57:28:0b:21:5a:de:74:fe:dc:78:2e:86:46:12:4c: 7f:11:1f:dc:93:bd:5f:be:66:98:86:b8:b7:ec:6d: 49:d3:90:d9:e1:79:00:56:68:ba:ad:6c:1f:2c:3b: 1f:c9:2c:8c:43:b0:04:42:ea:81:73:a6:ce:33:75: 45:0d:8a:45:72:2f:aa:57:55:e4:07:c3:43:e2:75: 3a:0f:bc:3c:d0:84:ce:ba:ef Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption b7:a6:64:a3:0c:80:3c:1c:c4:d8:ee:41:3b:e5:86:a4:9e:60: 5d:d6:01:32:a8:6a:64:2d:20:70:40:ba:72:4e:66:fa:07:65: 4e:03:8e:0b:fd:56:e0:ad:3b:20:a7:32:fa:b2:12:1e:80:df: 1e:e3:7a:18:cc:57:db:e6:c9:34:60:ef:75:eb:10:16:d0:a4: 2e:70:d8:24:23:b8:a5:77:73:42:f9:07:3a:dd:01:6c:08:93: 07:35:26:10:25:60:29:ff:09:e5:64:9f:69:b9:16:49:f3:5c: dd:24:63:46:93:0d:b0:53:36:75:bc:48:20:bb:19:b6:8f:d0: 22:fd GTE CyberTrust Japan Secure Server CA ===================================== MD5 Fingerprint: DD:0D:0D:B4:78:4B:7D:CE:30:0A:A6:35:C6:AB:4C:88 PEM Data: -----BEGIN CERTIFICATE----- MIICIzCCAYwCAU8wDQYJKoZIhvcNAQEEBQAwWjELMAkGA1UEBhMCSlAxHzAdBgNV BAoTFkN5YmVyVHJ1c3QgSmFwYW4sIEluYy4xKjAoBgNVBAMTIUN5YmVyVHJ1c3Qg SkFQQU4gU2VjdXJlIFNlcnZlciBDQTAeFw05ODA4MDQwODA2MzJaFw0wMzA4MDQy MzU5MDBaMFoxCzAJBgNVBAYTAkpQMR8wHQYDVQQKExZDeWJlclRydXN0IEphcGFu LCBJbmMuMSowKAYDVQQDEyFDeWJlclRydXN0IEpBUEFOIFNlY3VyZSBTZXJ2ZXIg Q0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKwmo6G4b2rALBL52zEFkuf9 +tSBtLjVKtWQ+vBDZfwSFcrs27lh3jNjN0+vADx/kjcbGHPlnzyI8RoTRP558sMm lQ8L8J4UByFsV8Jdw+JRsM2LX81fhjj4eZc57Oi/Ui6xXqqprozt7tfIty4xi7Q5 kjt8gScHGgFEL0lzILbJAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAaB17Eu5aeSkx ygGsi1CpJ5ksAPw4Ghz/wtXwE/4bpzn1gBTrUfrAjXuEG1musTVRbqE+1xvsoJ7f 4KWCluOxP9io8ct5gI738ESZfhT1I6MR42hLBTZuiOOrhqo4UwNCO9O5+eC/BenT X8NKp7b9t12QSfiasq1mpoIAk65g/yA= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 79 (0x4f) Signature Algorithm: md5WithRSAEncryption Issuer: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA Validity Not Before: Aug 4 08:06:32 1998 GMT Not After : Aug 4 23:59:00 2003 GMT Subject: C=JP, O=CyberTrust Japan, Inc., CN=CyberTrust JAPAN Secure Server CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ac:26:a3:a1:b8:6f:6a:c0:2c:12:f9:db:31:05: 92:e7:fd:fa:d4:81:b4:b8:d5:2a:d5:90:fa:f0:43: 65:fc:12:15:ca:ec:db:b9:61:de:33:63:37:4f:af: 00:3c:7f:92:37:1b:18:73:e5:9f:3c:88:f1:1a:13: 44:fe:79:f2:c3:26:95:0f:0b:f0:9e:14:07:21:6c: 57:c2:5d:c3:e2:51:b0:cd:8b:5f:cd:5f:86:38:f8: 79:97:39:ec:e8:bf:52:2e:b1:5e:aa:a9:ae:8c:ed: ee:d7:c8:b7:2e:31:8b:b4:39:92:3b:7c:81:27:07: 1a:01:44:2f:49:73:20:b6:c9 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 68:1d:7b:12:ee:5a:79:29:31:ca:01:ac:8b:50:a9:27:99:2c: 00:fc:38:1a:1c:ff:c2:d5:f0:13:fe:1b:a7:39:f5:80:14:eb: 51:fa:c0:8d:7b:84:1b:59:ae:b1:35:51:6e:a1:3e:d7:1b:ec: a0:9e:df:e0:a5:82:96:e3:b1:3f:d8:a8:f1:cb:79:80:8e:f7: f0:44:99:7e:14:f5:23:a3:11:e3:68:4b:05:36:6e:88:e3:ab: 86:aa:38:53:03:42:3b:d3:b9:f9:e0:bf:05:e9:d3:5f:c3:4a: a7:b6:fd:b7:5d:90:49:f8:9a:b2:ad:66:a6:82:00:93:ae:60: ff:20 GTE CyberTrust Root 2 ===================== MD5 Fingerprint: BA:ED:17:57:9A:4B:FF:7C:F9:C9:1F:A2:CD:1A:D6:87 PEM Data: -----BEGIN CERTIFICATE----- MIICUDCCAbkCAgGbMA0GCSqGSIb3DQEBBAUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAyMB4X DTk4MDgxMTExMzUwN1oXDTA4MDgxMTExMjIxNlowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDIw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANksTE4vaRoj41a6886EwAnAefFE XzMfFZF/iogouCRFzI8YzR900bWPcUzWMfZzloSUQMWpg2Akfa9vNLdLTMIJgDtF BJ7EPMQndXsADKFkR7UUXYJLUTpYu0RMPdPlBjjoYVyYeLuAs5zacoJioN+cX+v5 T3fCzGAYAGs0giWzAgMBAAEwDQYJKoZIhvcNAQEEBQADgYEAo2SRbxDt526iQkCU eM74FAjR+kOF60bNkhTQ7y4tNjkY2brJJ4gp6UgXb/jBqshhbS39QC11QzCXOfgU ZL1v72OoK0LfsloNJex7N9jOkSmCFvnoYqLhdsQCfd0li5jh9g1gjPZZkEBRRNHC +xkkHhc5a3QhFTPWVdeCHnAsJ6g= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 411 (0x19b) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 Validity Not Before: Aug 11 11:35:07 1998 GMT Not After : Aug 11 11:22:16 2008 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 2 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d9:2c:4c:4e:2f:69:1a:23:e3:56:ba:f3:ce:84: c0:09:c0:79:f1:44:5f:33:1f:15:91:7f:8a:88:28: b8:24:45:cc:8f:18:cd:1f:74:d1:b5:8f:71:4c:d6: 31:f6:73:96:84:94:40:c5:a9:83:60:24:7d:af:6f: 34:b7:4b:4c:c2:09:80:3b:45:04:9e:c4:3c:c4:27: 75:7b:00:0c:a1:64:47:b5:14:5d:82:4b:51:3a:58: bb:44:4c:3d:d3:e5:06:38:e8:61:5c:98:78:bb:80: b3:9c:da:72:82:62:a0:df:9c:5f:eb:f9:4f:77:c2: cc:60:18:00:6b:34:82:25:b3 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption a3:64:91:6f:10:ed:e7:6e:a2:42:40:94:78:ce:f8:14:08:d1: fa:43:85:eb:46:cd:92:14:d0:ef:2e:2d:36:39:18:d9:ba:c9: 27:88:29:e9:48:17:6f:f8:c1:aa:c8:61:6d:2d:fd:40:2d:75: 43:30:97:39:f8:14:64:bd:6f:ef:63:a8:2b:42:df:b2:5a:0d: 25:ec:7b:37:d8:ce:91:29:82:16:f9:e8:62:a2:e1:76:c4:02: 7d:dd:25:8b:98:e1:f6:0d:60:8c:f6:59:90:40:51:44:d1:c2: fb:19:24:1e:17:39:6b:74:21:15:33:d6:55:d7:82:1e:70:2c: 27:a8 GTE CyberTrust Root 3 ===================== MD5 Fingerprint: DB:81:96:57:AE:64:61:EF:77:A7:83:C4:51:24:3C:87 PEM Data: -----BEGIN CERTIFICATE----- MIICUDCCAbkCAgGXMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCAzMB4X DTk4MDgxMDE5NTkwOFoXDTA4MDgxMDE5MzYzOVowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDMw gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOHzsSsLztwU2TSXYlASVmOETFP6 wIXP+sHdD955E39T+6oOYN3iYr/G7k6ZNKpoQzWZ+KP982O9AVRqnrI6lix7eCjG WrWNGhUY/eOMLqJQCVtx1g21GB8ZjgQpk5N4q18U53NC8gMMV6IbUDsLu1ngoDoD 7icbWky5sAjKuRqJAgMBAAEwDQYJKoZIhvcNAQEFBQADgYEAheutlCAG6bKiazvy ZuvjS7gSJgXl9JGo3IfcmPSUwfRhvdWcbFFzlV7QvdfmRdw8z0aE1ee57ORnY24A KHdxXUoF6bl8hszCRLveKUja6t29F58dUQGo6BResVf3/9qPzpX+Le0yEnf/fGph la4xcgYI8PnzDY7i76hTXZEDg94= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 407 (0x197) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 Validity Not Before: Aug 10 19:59:08 1998 GMT Not After : Aug 10 19:36:39 2008 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e1:f3:b1:2b:0b:ce:dc:14:d9:34:97:62:50:12: 56:63:84:4c:53:fa:c0:85:cf:fa:c1:dd:0f:de:79: 13:7f:53:fb:aa:0e:60:dd:e2:62:bf:c6:ee:4e:99: 34:aa:68:43:35:99:f8:a3:fd:f3:63:bd:01:54:6a: 9e:b2:3a:96:2c:7b:78:28:c6:5a:b5:8d:1a:15:18: fd:e3:8c:2e:a2:50:09:5b:71:d6:0d:b5:18:1f:19: 8e:04:29:93:93:78:ab:5f:14:e7:73:42:f2:03:0c: 57:a2:1b:50:3b:0b:bb:59:e0:a0:3a:03:ee:27:1b: 5a:4c:b9:b0:08:ca:b9:1a:89 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 85:eb:ad:94:20:06:e9:b2:a2:6b:3b:f2:66:eb:e3:4b:b8:12: 26:05:e5:f4:91:a8:dc:87:dc:98:f4:94:c1:f4:61:bd:d5:9c: 6c:51:73:95:5e:d0:bd:d7:e6:45:dc:3c:cf:46:84:d5:e7:b9: ec:e4:67:63:6e:00:28:77:71:5d:4a:05:e9:b9:7c:86:cc:c2: 44:bb:de:29:48:da:ea:dd:bd:17:9f:1d:51:01:a8:e8:14:5e: b1:57:f7:ff:da:8f:ce:95:fe:2d:ed:32:12:77:ff:7c:6a:61: 95:ae:31:72:06:08:f0:f9:f3:0d:8e:e2:ef:a8:53:5d:91:03: 83:de GTE CyberTrust Root 4 ===================== MD5 Fingerprint: 33:43:02:B1:B9:E0:73:B1:B1:20:CA:CB:C7:84:03:50 PEM Data: -----BEGIN CERTIFICATE----- MIIDVTCCAj0CAgGoMA0GCSqGSIb3DQEBBQUAMHAxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv bHV0aW9ucywgSW5jLjEeMBwGA1UEAxMVR1RFIEN5YmVyVHJ1c3QgUm9vdCA0MB4X DTk4MDgxMzEzNTEwMFoXDTEzMDgxMzIzNTkwMFowcDELMAkGA1UEBhMCVVMxGDAW BgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1c3Qg U29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290IDQw ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6nSJuf9pmPDlCsaMqb9P3 vK6sMVrXEZBHuZ0ZLvnzGyKgw+GnusT8XgqUS5haSybkH/Tc8/6OiNxsLXx3hyZQ wF5OqCih6hdpT03GAQ7amg0GViYVtqRdejWvje14Uob5OKuzAdPaBZaxtlCrwKGu F1P6QzkgcWUj223Etu2YRYPX0vbiqWv7+XXM78WrcZY16N+OkZuoEHUft84Tjmuz lneXGpEvxyxpmfAPKmgAmHZEG4wo0uuO9IO0f6QlXmw72cZo1WG41F4xB7VbkDVS V3sXIO0tuB6OiDk+Usvf8FyxZbulErSQY79xnTLB2r9QSpW+BjrEK+vNmHZETQvl AgMBAAEwDQYJKoZIhvcNAQEFBQADggEBAEOvHIfJSbpliTRJPOoHO0eiedSgO5Bs 3n+oVMPoTEAyvMjsHOXZrEC6/Iw/wnOc9GTq36ntTlvIAWDuOW1DJ/N/qgjS/k5v FDJNfeQ0gKU1xNZGULQ7oC1lH09lfjQoLcCndn0xyQ0zFvYgGSARULsDzHBtlrfv TKfaNhXPu03UltyITWyY7blz/ihXoO1k+AqBKXP29pcyhzm0ge/ZTRoHNPe6QjXe V9xc1vfF6wonDIGmwtBoTv2SW0iD9haKjzZb7TFsP0F6cfeSPzGkCkBM84biYcE8 SYEtpbjvupcPvCsdm4ny0o4eTYbywqv2LZnAGyoNobZP+SxYTT19Nwo= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 424 (0x1a8) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 Validity Not Before: Aug 13 13:51:00 1998 GMT Not After : Aug 13 23:59:00 2013 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 4 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ba:9d:22:6e:7f:da:66:3c:39:42:b1:a3:2a:6f: d3:f7:bc:ae:ac:31:5a:d7:11:90:47:b9:9d:19:2e: f9:f3:1b:22:a0:c3:e1:a7:ba:c4:fc:5e:0a:94:4b: 98:5a:4b:26:e4:1f:f4:dc:f3:fe:8e:88:dc:6c:2d: 7c:77:87:26:50:c0:5e:4e:a8:28:a1:ea:17:69:4f: 4d:c6:01:0e:da:9a:0d:06:56:26:15:b6:a4:5d:7a: 35:af:8d:ed:78:52:86:f9:38:ab:b3:01:d3:da:05: 96:b1:b6:50:ab:c0:a1:ae:17:53:fa:43:39:20:71: 65:23:db:6d:c4:b6:ed:98:45:83:d7:d2:f6:e2:a9: 6b:fb:f9:75:cc:ef:c5:ab:71:96:35:e8:df:8e:91: 9b:a8:10:75:1f:b7:ce:13:8e:6b:b3:96:77:97:1a: 91:2f:c7:2c:69:99:f0:0f:2a:68:00:98:76:44:1b: 8c:28:d2:eb:8e:f4:83:b4:7f:a4:25:5e:6c:3b:d9: c6:68:d5:61:b8:d4:5e:31:07:b5:5b:90:35:52:57: 7b:17:20:ed:2d:b8:1e:8e:88:39:3e:52:cb:df:f0: 5c:b1:65:bb:a5:12:b4:90:63:bf:71:9d:32:c1:da: bf:50:4a:95:be:06:3a:c4:2b:eb:cd:98:76:44:4d: 0b:e5 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 43:af:1c:87:c9:49:ba:65:89:34:49:3c:ea:07:3b:47:a2:79: d4:a0:3b:90:6c:de:7f:a8:54:c3:e8:4c:40:32:bc:c8:ec:1c: e5:d9:ac:40:ba:fc:8c:3f:c2:73:9c:f4:64:ea:df:a9:ed:4e: 5b:c8:01:60:ee:39:6d:43:27:f3:7f:aa:08:d2:fe:4e:6f:14: 32:4d:7d:e4:34:80:a5:35:c4:d6:46:50:b4:3b:a0:2d:65:1f: 4f:65:7e:34:28:2d:c0:a7:76:7d:31:c9:0d:33:16:f6:20:19: 20:11:50:bb:03:cc:70:6d:96:b7:ef:4c:a7:da:36:15:cf:bb: 4d:d4:96:dc:88:4d:6c:98:ed:b9:73:fe:28:57:a0:ed:64:f8: 0a:81:29:73:f6:f6:97:32:87:39:b4:81:ef:d9:4d:1a:07:34: f7:ba:42:35:de:57:dc:5c:d6:f7:c5:eb:0a:27:0c:81:a6:c2: d0:68:4e:fd:92:5b:48:83:f6:16:8a:8f:36:5b:ed:31:6c:3f: 41:7a:71:f7:92:3f:31:a4:0a:40:4c:f3:86:e2:61:c1:3c:49: 81:2d:a5:b8:ef:ba:97:0f:bc:2b:1d:9b:89:f2:d2:8e:1e:4d: 86:f2:c2:ab:f6:2d:99:c0:1b:2a:0d:a1:b6:4f:f9:2c:58:4d: 3d:7d:37:0a GTE CyberTrust Root 5 ===================== MD5 Fingerprint: 7D:6C:86:E4:FC:4D:D1:0B:00:BA:22:BB:4E:7C:6A:8E PEM Data: -----BEGIN CERTIFICATE----- MIIDtjCCAp6gAwIBAgICAbYwDQYJKoZIhvcNAQEFBQAwcDELMAkGA1UEBhMCVVMx GDAWBgNVBAoTD0dURSBDb3Jwb3JhdGlvbjEnMCUGA1UECxMeR1RFIEN5YmVyVHJ1 c3QgU29sdXRpb25zLCBJbmMuMR4wHAYDVQQDExVHVEUgQ3liZXJUcnVzdCBSb290 IDUwHhcNOTgwODE0MTQ1MDAwWhcNMTMwODE0MjM1OTAwWjBwMQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU cnVzdCBTb2x1dGlvbnMsIEluYy4xHjAcBgNVBAMTFUdURSBDeWJlclRydXN0IFJv b3QgNTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALwSbj+KfHqXAewe uzlaAvR4RKJIG457SVJ6uHtHs6+Um2+7lvoramVcuByUc76/iQoigO5X/IwFu3Cf lzkE2qOHXKjlyq/AM5rVN1xLrOSA0KYjYPv9ci6UncfOwgQy73hgXe2thw9FZR48 mgqavl0dmezn8tHGehfZrZtUln/EfGC/haoVNR1A2hG87FQhKC0joajwzy3N3fx+ D17hZQdWywe00lboXjHMGGPEhtIthc+Tkqtt/mg5+95zvYb45EZ66p8My/QZ/mO8 0Sx7iDM29uThnAxTgWAc2i6rlqkWiBNQmbK9Vd8VMH7o5Zj7cH5stQf8/Ea30O03 ln4y/iECAwEAAaNaMFgwEgYDVR0TAQH/BAgwBgEB/wIBBTAOBgNVHQ8BAf8EBAMC AQYwFwYDVR0gBBAwDjAMBgoqhkiG+GMBAgEDMBkGA1UdDgQSBBB2CkkhOEyf3vjE ScdxcZGdMA0GCSqGSIb3DQEBBQUAA4IBAQBBOtQYW9q43iEc4Y4J5fFoNP/elvQH 9ac886xKsZv6kvqb7eYyIapKdsXcTzjl39WG5NXIdn2Y17HNj021kSNsi4rr6nzv FJTExvAfSi0ycWMrY5EmAgm2gB3t4sy4f9uHY8jh0GwmsTUdQGYQG82VVBgzYewT T9oT95mvPtDPjqZyorPDBZrJJ32SzH5SjbOrcG2eiZ9N6xp1wpiq1QIW1wyKvyXk 6y28mOlYOBl8uTf+2+KZCHMGx5eDan0QAS8yuRcFSmXmL86+XlOmgumaUwqEdC2D ysiUFnZflGEo8IWnObvXi9moshMdVAk0JH0ggX1mfqKQdFwQxr3sqxvC -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 438 (0x1b6) Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 Validity Not Before: Aug 14 14:50:00 1998 GMT Not After : Aug 14 23:59:00 2013 GMT Subject: C=US, O=GTE Corporation, OU=GTE CyberTrust Solutions, Inc., CN=GTE CyberTrust Root 5 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:bc:12:6e:3f:8a:7c:7a:97:01:ec:1e:bb:39:5a: 02:f4:78:44:a2:48:1b:8e:7b:49:52:7a:b8:7b:47: b3:af:94:9b:6f:bb:96:fa:2b:6a:65:5c:b8:1c:94: 73:be:bf:89:0a:22:80:ee:57:fc:8c:05:bb:70:9f: 97:39:04:da:a3:87:5c:a8:e5:ca:af:c0:33:9a:d5: 37:5c:4b:ac:e4:80:d0:a6:23:60:fb:fd:72:2e:94: 9d:c7:ce:c2:04:32:ef:78:60:5d:ed:ad:87:0f:45: 65:1e:3c:9a:0a:9a:be:5d:1d:99:ec:e7:f2:d1:c6: 7a:17:d9:ad:9b:54:96:7f:c4:7c:60:bf:85:aa:15: 35:1d:40:da:11:bc:ec:54:21:28:2d:23:a1:a8:f0: cf:2d:cd:dd:fc:7e:0f:5e:e1:65:07:56:cb:07:b4: d2:56:e8:5e:31:cc:18:63:c4:86:d2:2d:85:cf:93: 92:ab:6d:fe:68:39:fb:de:73:bd:86:f8:e4:46:7a: ea:9f:0c:cb:f4:19:fe:63:bc:d1:2c:7b:88:33:36: f6:e4:e1:9c:0c:53:81:60:1c:da:2e:ab:96:a9:16: 88:13:50:99:b2:bd:55:df:15:30:7e:e8:e5:98:fb: 70:7e:6c:b5:07:fc:fc:46:b7:d0:ed:37:96:7e:32: fe:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE, pathlen:5 X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Certificate Policies: Policy: 1.2.840.113763.1.2.1.3 X509v3 Subject Key Identifier: 76:0A:49:21:38:4C:9F:DE:F8:C4:49:C7:71:71:91:9D Signature Algorithm: sha1WithRSAEncryption 41:3a:d4:18:5b:da:b8:de:21:1c:e1:8e:09:e5:f1:68:34:ff: de:96:f4:07:f5:a7:3c:f3:ac:4a:b1:9b:fa:92:fa:9b:ed:e6: 32:21:aa:4a:76:c5:dc:4f:38:e5:df:d5:86:e4:d5:c8:76:7d: 98:d7:b1:cd:8f:4d:b5:91:23:6c:8b:8a:eb:ea:7c:ef:14:94: c4:c6:f0:1f:4a:2d:32:71:63:2b:63:91:26:02:09:b6:80:1d: ed:e2:cc:b8:7f:db:87:63:c8:e1:d0:6c:26:b1:35:1d:40:66: 10:1b:cd:95:54:18:33:61:ec:13:4f:da:13:f7:99:af:3e:d0: cf:8e:a6:72:a2:b3:c3:05:9a:c9:27:7d:92:cc:7e:52:8d:b3: ab:70:6d:9e:89:9f:4d:eb:1a:75:c2:98:aa:d5:02:16:d7:0c: 8a:bf:25:e4:eb:2d:bc:98:e9:58:38:19:7c:b9:37:fe:db:e2: 99:08:73:06:c7:97:83:6a:7d:10:01:2f:32:b9:17:05:4a:65: e6:2f:ce:be:5e:53:a6:82:e9:9a:53:0a:84:74:2d:83:ca:c8: 94:16:76:5f:94:61:28:f0:85:a7:39:bb:d7:8b:d9:a8:b2:13: 1d:54:09:34:24:7d:20:81:7d:66:7e:a2:90:74:5c:10:c6:bd: ec:ab:1b:c2 GTE CyberTrust Root CA ====================== MD5 Fingerprint: C4:D7:F0:B2:A3:C5:7D:61:67:F0:04:CD:43:D3:BA:58 PEM Data: -----BEGIN CERTIFICATE----- MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5 1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 419 (0x1a3) Signature Algorithm: md5WithRSAEncryption Issuer: C=US, O=GTE Corporation, CN=GTE CyberTrust Root Validity Not Before: Feb 23 23:01:00 1996 GMT Not After : Feb 23 23:59:00 2006 GMT Subject: C=US, O=GTE Corporation, CN=GTE CyberTrust Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b8:e6:4f:ba:db:98:7c:71:7c:af:44:b7:d3:0f: 46:d9:64:e5:93:c1:42:8e:c7:ba:49:8d:35:2d:7a: e7:8b:bd:e5:05:31:59:c6:b1:2f:0a:0c:fb:9f:a7: 3f:a2:09:66:84:56:1e:37:29:1b:87:e9:7e:0c:ca: 9a:9f:a5:7f:f5:15:94:a3:d5:a2:46:82:d8:68:4c: d1:37:15:06:68:af:bd:f8:b0:b3:f0:29:f5:95:5a: 09:16:61:77:0a:22:25:d4:4f:45:aa:c7:bd:e5:96: df:f9:d4:a8:8e:42:cc:24:c0:1e:91:27:4a:b5:6d: 06:80:63:39:c4:a2:5e:38:03 Exponent: 65537 (0x10001) Signature Algorithm: md5WithRSAEncryption 12:b3:75:c6:5f:1d:e1:61:55:80:00:d4:81:4b:7b:31:0f:23: 63:e7:3d:f3:03:f9:f4:36:a8:bb:d9:e3:a5:97:4d:ea:2b:29: e0:d6:6a:73:81:e6:c0:89:a3:d3:f1:e0:a5:a5:22:37:9a:63: c2:48:20:b4:db:72:e3:c8:f6:d9:7c:be:b1:af:53:da:14:b4: 21:b8:d6:d5:96:e3:fe:4e:0c:59:62:b6:9a:4a:f9:42:dd:8c: 6f:81:a9:71:ff:f4:0a:72:6d:6d:44:0e:9d:f3:74:74:a8:d5: 34:49:e9:5e:9e:e9:b4:7a:e1:e5:5a:1f:84:30:9c:d3:9f:a5: 25:d8 GlobalSign Partners CA ====================== MD5 Fingerprint: 3C:75:CD:4C:BD:A9:D0:8A:79:4F:50:16:37:84:F4:2B PEM Data: -----BEGIN CERTIFICATE----- MIIDnjCCAoagAwIBAgILAgAAAAAA1ni50a8wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMF8xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRQwEgYDVQQLEwtQYXJ0bmVycyBDQTEfMB0GA1UEAxMWR2xv YmFsU2lnbiBQYXJ0bmVycyBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC ggEBANIs+DKsShJ6N8gpkaWujG4eDsA0M4jlM3EWHHiEaMMYNFAuFj6xlIJPsZqf APjGETXGaXuYAq0ABohs50wzKACIJ0Yfh7NxdWO8MruI3mYYDlAGk7T2vBQ3MD0i 3z3/dX7ZChrFn7P80KyzCHqJ0wHoAFznSgs9TXsmordiBovaRt2TFz8/WwJLC7aI IBGSAK27xy7U40Wu9YlafI2krYVkMsAnjMbyioCShiRWWY10aKKDQrOePVBBhm8g bvb9ztMZ4zLMj+2aXm0fKPVSrG4YXvg90ZLlumwBiEsK8i3eZTMFQqBMqjF2vv2/ gXj5cRxGXi0VlS0wWY5MQdFiqz0CAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgAGMB0G A1UdDgQWBBRDJI1wFQhiVZxPDEAXXYZeD6JM+zAfBgNVHSMEGDAWgBRge2YaRQ2X yolQL30EzTSo//z9SzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBAUAA4IB AQBm7bSIaRGZgiGDrKFti5uErQ8tyB6Mynt+rarUjt4H1p5Fx6W4nAc5YCVVGsBP GeXPFylJiRg1ZuXrKEBOV8mvs+S4IAWjO5VQkUmUKX0s5YhBpUWIXp2CJ/fS71u1 T5++/jVlLFVkn+FR2iJhd7pYTo/GeVlZbjCAok+QbiELrdBoOZAQm+0iZW8eETjm f4zS8zltR9Uh6Op1OkHRrfYWnV0LIb3zH2MGJR3BHzVxLOsgGdXBsOw95W/tAgc/ E3tmktZEwZj3X1CLelvCb22w0fjldKBAN6MlD+Q9ymQxk5BcMHu5OTGaXkzNuUFP UOQ9OK7IZtnHO11RR6ybq/Kt -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b9:d1:af Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Partners CA, CN=GlobalSign Partners CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d2:2c:f8:32:ac:4a:12:7a:37:c8:29:91:a5:ae: 8c:6e:1e:0e:c0:34:33:88:e5:33:71:16:1c:78:84: 68:c3:18:34:50:2e:16:3e:b1:94:82:4f:b1:9a:9f: 00:f8:c6:11:35:c6:69:7b:98:02:ad:00:06:88:6c: e7:4c:33:28:00:88:27:46:1f:87:b3:71:75:63:bc: 32:bb:88:de:66:18:0e:50:06:93:b4:f6:bc:14:37: 30:3d:22:df:3d:ff:75:7e:d9:0a:1a:c5:9f:b3:fc: d0:ac:b3:08:7a:89:d3:01:e8:00:5c:e7:4a:0b:3d: 4d:7b:26:a2:b7:62:06:8b:da:46:dd:93:17:3f:3f: 5b:02:4b:0b:b6:88:20:11:92:00:ad:bb:c7:2e:d4: e3:45:ae:f5:89:5a:7c:8d:a4:ad:85:64:32:c0:27: 8c:c6:f2:8a:80:92:86:24:56:59:8d:74:68:a2:83: 42:b3:9e:3d:50:41:86:6f:20:6e:f6:fd:ce:d3:19: e3:32:cc:8f:ed:9a:5e:6d:1f:28:f5:52:ac:6e:18: 5e:f8:3d:d1:92:e5:ba:6c:01:88:4b:0a:f2:2d:de: 65:33:05:42:a0:4c:aa:31:76:be:fd:bf:81:78:f9: 71:1c:46:5e:2d:15:95:2d:30:59:8e:4c:41:d1:62: ab:3d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 43:24:8D:70:15:08:62:55:9C:4F:0C:40:17:5D:86:5E:0F:A2:4C:FB X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 66:ed:b4:88:69:11:99:82:21:83:ac:a1:6d:8b:9b:84:ad:0f: 2d:c8:1e:8c:ca:7b:7e:ad:aa:d4:8e:de:07:d6:9e:45:c7:a5: b8:9c:07:39:60:25:55:1a:c0:4f:19:e5:cf:17:29:49:89:18: 35:66:e5:eb:28:40:4e:57:c9:af:b3:e4:b8:20:05:a3:3b:95: 50:91:49:94:29:7d:2c:e5:88:41:a5:45:88:5e:9d:82:27:f7: d2:ef:5b:b5:4f:9f:be:fe:35:65:2c:55:64:9f:e1:51:da:22: 61:77:ba:58:4e:8f:c6:79:59:59:6e:30:80:a2:4f:90:6e:21: 0b:ad:d0:68:39:90:10:9b:ed:22:65:6f:1e:11:38:e6:7f:8c: d2:f3:39:6d:47:d5:21:e8:ea:75:3a:41:d1:ad:f6:16:9d:5d: 0b:21:bd:f3:1f:63:06:25:1d:c1:1f:35:71:2c:eb:20:19:d5: c1:b0:ec:3d:e5:6f:ed:02:07:3f:13:7b:66:92:d6:44:c1:98: f7:5f:50:8b:7a:5b:c2:6f:6d:b0:d1:f8:e5:74:a0:40:37:a3: 25:0f:e4:3d:ca:64:31:93:90:5c:30:7b:b9:39:31:9a:5e:4c: cd:b9:41:4f:50:e4:3d:38:ae:c8:66:d9:c7:3b:5d:51:47:ac: 9b:ab:f2:ad GlobalSign Primary Class 1 CA ============================= MD5 Fingerprint: 5C:AC:59:01:A4:86:53:CB:10:66:B5:D6:D6:71:FF:01 PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4N88wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MTUxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDEgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAxIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAvSA1R9Eo1gijEjkjRw29cCFSDlcxlaY0V2vsfkN5 wwZSSM28taGZvdgfMrzP125ybS53IpCCTkuPmgwBQprZcFm2nR/mY9EMrR1O+IWB +a7vn6ZSYUR5GnVF4GFWRW1CjD1yy6akErea9dZg0GBQs46mpuy09BLNf6jO77Ph hTD+csTm53eznlhB1lGDiAfGtmlPNt7RC0g/vdafIXRkbycGPkv9Dqabv6RIV4yQ 7okYCwKBGL5n/lNgiCe6o3M0S1pWtN5zBe2Yll3sSudA/EsJYuvQ4zFPhdF6q1ln K/uID+uqg701/WEn7GYOQlf3acIM7/xqwm5J2o9BOK5IqQIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFPzgZvZaNZnrQB7SuB5DvJiOH4rDMB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAJujCETO8pCdcfMyswVqterPKZjeVT6gFn0GekTWr9L6 E1iM+BzHqx20G+9paJhcCDmP4Pf7SMwh57gz2wWqNCRsSuXpe2Deg7MfCr5BdfzM MEi3wSYdBDOqtnjtKsu6VpcybvcxlS5G8hTuJ8f3Yom5XFrTOIpk9Te08bM0ctXV IT1L13iT1zFmNR6j2EdJbxyt4YB/+JgkbHOsDsIadwKjJge3x2tdvILVKkgdY89Q Mqb7HBhHFQpbDFw4JJoEmKgISF98NIdjqy2NTAB3lBt2uvUWGKMVry+U9ikAdsEV F9PpN0121MtLKVkkrNpKoOpj3l9Usfrz0UXLxWS0cyE= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:37:cf Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Sep 15 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 1 CA, CN=GlobalSign Primary Class 1 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:bd:20:35:47:d1:28:d6:08:a3:12:39:23:47:0d: bd:70:21:52:0e:57:31:95:a6:34:57:6b:ec:7e:43: 79:c3:06:52:48:cd:bc:b5:a1:99:bd:d8:1f:32:bc: cf:d7:6e:72:6d:2e:77:22:90:82:4e:4b:8f:9a:0c: 01:42:9a:d9:70:59:b6:9d:1f:e6:63:d1:0c:ad:1d: 4e:f8:85:81:f9:ae:ef:9f:a6:52:61:44:79:1a:75: 45:e0:61:56:45:6d:42:8c:3d:72:cb:a6:a4:12:b7: 9a:f5:d6:60:d0:60:50:b3:8e:a6:a6:ec:b4:f4:12: cd:7f:a8:ce:ef:b3:e1:85:30:fe:72:c4:e6:e7:77: b3:9e:58:41:d6:51:83:88:07:c6:b6:69:4f:36:de: d1:0b:48:3f:bd:d6:9f:21:74:64:6f:27:06:3e:4b: fd:0e:a6:9b:bf:a4:48:57:8c:90:ee:89:18:0b:02: 81:18:be:67:fe:53:60:88:27:ba:a3:73:34:4b:5a: 56:b4:de:73:05:ed:98:96:5d:ec:4a:e7:40:fc:4b: 09:62:eb:d0:e3:31:4f:85:d1:7a:ab:59:67:2b:fb: 88:0f:eb:aa:83:bd:35:fd:61:27:ec:66:0e:42:57: f7:69:c2:0c:ef:fc:6a:c2:6e:49:da:8f:41:38:ae: 48:a9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: FC:E0:66:F6:5A:35:99:EB:40:1E:D2:B8:1E:43:BC:98:8E:1F:8A:C3 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 9b:a3:08:44:ce:f2:90:9d:71:f3:32:b3:05:6a:b5:ea:cf:29: 98:de:55:3e:a0:16:7d:06:7a:44:d6:af:d2:fa:13:58:8c:f8: 1c:c7:ab:1d:b4:1b:ef:69:68:98:5c:08:39:8f:e0:f7:fb:48: cc:21:e7:b8:33:db:05:aa:34:24:6c:4a:e5:e9:7b:60:de:83: b3:1f:0a:be:41:75:fc:cc:30:48:b7:c1:26:1d:04:33:aa:b6: 78:ed:2a:cb:ba:56:97:32:6e:f7:31:95:2e:46:f2:14:ee:27: c7:f7:62:89:b9:5c:5a:d3:38:8a:64:f5:37:b4:f1:b3:34:72: d5:d5:21:3d:4b:d7:78:93:d7:31:66:35:1e:a3:d8:47:49:6f: 1c:ad:e1:80:7f:f8:98:24:6c:73:ac:0e:c2:1a:77:02:a3:26: 07:b7:c7:6b:5d:bc:82:d5:2a:48:1d:63:cf:50:32:a6:fb:1c: 18:47:15:0a:5b:0c:5c:38:24:9a:04:98:a8:08:48:5f:7c:34: 87:63:ab:2d:8d:4c:00:77:94:1b:76:ba:f5:16:18:a3:15:af: 2f:94:f6:29:00:76:c1:15:17:d3:e9:37:4d:76:d4:cb:4b:29: 59:24:ac:da:4a:a0:ea:63:de:5f:54:b1:fa:f3:d1:45:cb:c5: 64:b4:73:21 GlobalSign Primary Class 2 CA ============================= MD5 Fingerprint: A9:A9:42:59:7E:BE:5A:94:E4:2C:C6:8B:1C:2A:44:B6 PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni4jY0wDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDIgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAyIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAkoz+7/RFjhdBbvzYvyFvqwadUsEsAJ0/joW4f0qP vaBjKspJJ65agvR04lWS/8LRqnmitvrVnYIET8ayxl5jpzq62O7rim+ftrsoQcAi +05IGgaS17/Xz7nZvThPOw1EblVB/vwJ29i/844h8egStfYTpdPGTJMisAL/7h0M xKhrT3VoVujcKBJQ96gknS4kOfsJBd7lo2RJIdBofnEwkbFg4Dn0UPh6TZgAa3x5 uk7OSuK6Nh23xTYVlZxkQupfxLr1QAW+4TpZvYSnGbjeTVNQzgfR0lHT7w2BbObn bctdfD98zOxPgycl/3BQ9oNZdYQGZlgs3omNAKZJ+aVDdwIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFHznsrEs3rGna+l2DOGj/U5sx7n2MB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAGPdWc6KeaqYnU7FiWQ3foqTZy8Q6m8nw413bfJcVpQZ GmlgMEZdj/JtRTyONZd8L7hR4uiJvYjPJxwINFyIwWgk25GF5M/7+0ON6CUBG8QO 9wBCSIYfJAhYWoyN8mtHLGiRsWlC/Q2NySbmkoamZG6Sxc4+PH1x4yOkq8fVqKnf gqc76IbVw08Y40TQ4NzzxWgu/qUvBYTIfkdCU2uHSv4y/14+cIy3qBXMF8L/RuzQ 7C20bhIoqflA6evUZpdTqWlVwKmqsi7N0Wn0vvi7fGnuVKbbnvtapj7+mu+UUUt1 7tjU4ZrxAlYTiQ6nQouWi4UMG4W+Jq6rppm8IvFz30I= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:8d:8d Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 2 CA, CN=GlobalSign Primary Class 2 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:92:8c:fe:ef:f4:45:8e:17:41:6e:fc:d8:bf:21: 6f:ab:06:9d:52:c1:2c:00:9d:3f:8e:85:b8:7f:4a: 8f:bd:a0:63:2a:ca:49:27:ae:5a:82:f4:74:e2:55: 92:ff:c2:d1:aa:79:a2:b6:fa:d5:9d:82:04:4f:c6: b2:c6:5e:63:a7:3a:ba:d8:ee:eb:8a:6f:9f:b6:bb: 28:41:c0:22:fb:4e:48:1a:06:92:d7:bf:d7:cf:b9: d9:bd:38:4f:3b:0d:44:6e:55:41:fe:fc:09:db:d8: bf:f3:8e:21:f1:e8:12:b5:f6:13:a5:d3:c6:4c:93: 22:b0:02:ff:ee:1d:0c:c4:a8:6b:4f:75:68:56:e8: dc:28:12:50:f7:a8:24:9d:2e:24:39:fb:09:05:de: e5:a3:64:49:21:d0:68:7e:71:30:91:b1:60:e0:39: f4:50:f8:7a:4d:98:00:6b:7c:79:ba:4e:ce:4a:e2: ba:36:1d:b7:c5:36:15:95:9c:64:42:ea:5f:c4:ba: f5:40:05:be:e1:3a:59:bd:84:a7:19:b8:de:4d:53: 50:ce:07:d1:d2:51:d3:ef:0d:81:6c:e6:e7:6d:cb: 5d:7c:3f:7c:cc:ec:4f:83:27:25:ff:70:50:f6:83: 59:75:84:06:66:58:2c:de:89:8d:00:a6:49:f9:a5: 43:77 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 7C:E7:B2:B1:2C:DE:B1:A7:6B:E9:76:0C:E1:A3:FD:4E:6C:C7:B9:F6 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 63:dd:59:ce:8a:79:aa:98:9d:4e:c5:89:64:37:7e:8a:93:67: 2f:10:ea:6f:27:c3:8d:77:6d:f2:5c:56:94:19:1a:69:60:30: 46:5d:8f:f2:6d:45:3c:8e:35:97:7c:2f:b8:51:e2:e8:89:bd: 88:cf:27:1c:08:34:5c:88:c1:68:24:db:91:85:e4:cf:fb:fb: 43:8d:e8:25:01:1b:c4:0e:f7:00:42:48:86:1f:24:08:58:5a: 8c:8d:f2:6b:47:2c:68:91:b1:69:42:fd:0d:8d:c9:26:e6:92: 86:a6:64:6e:92:c5:ce:3e:3c:7d:71:e3:23:a4:ab:c7:d5:a8: a9:df:82:a7:3b:e8:86:d5:c3:4f:18:e3:44:d0:e0:dc:f3:c5: 68:2e:fe:a5:2f:05:84:c8:7e:47:42:53:6b:87:4a:fe:32:ff: 5e:3e:70:8c:b7:a8:15:cc:17:c2:ff:46:ec:d0:ec:2d:b4:6e: 12:28:a9:f9:40:e9:eb:d4:66:97:53:a9:69:55:c0:a9:aa:b2: 2e:cd:d1:69:f4:be:f8:bb:7c:69:ee:54:a6:db:9e:fb:5a:a6: 3e:fe:9a:ef:94:51:4b:75:ee:d8:d4:e1:9a:f1:02:56:13:89: 0e:a7:42:8b:96:8b:85:0c:1b:85:be:26:ae:ab:a6:99:bc:22: f1:73:df:42 GlobalSign Primary Class 3 CA ============================= MD5 Fingerprint: 98:12:A3:4B:95:A9:96:64:94:E7:50:8C:3E:E1:83:5A PEM Data: -----BEGIN CERTIFICATE----- MIIDrDCCApSgAwIBAgILAgAAAAAA1ni41sMwDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05OTAxMjgxMjAw MDBaFw0wOTAxMjgxMjAwMDBaMG0xCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRswGQYDVQQLExJQcmltYXJ5IENsYXNzIDMgQ0ExJjAkBgNV BAMTHUdsb2JhbFNpZ24gUHJpbWFyeSBDbGFzcyAzIENBMIIBIjANBgkqhkiG9w0B AQEFAAOCAQ8AMIIBCgKCAQEAkV5WZdbAwAScv0fEXHt6MQH5WJaZ4xyEL9xWj631 WYHVQ2ZdWpOMdcqp5xHBURAUYMks1HuvxneGq3onrm+VuQvKtkb7fhr0DRRt0slO sq7wVPZcQEw2SHToVIxlZhCnvSu3II0FSa14fdIkI1Dj8LR5mwE5/6870y3u4UmN jS88akFFL5vjPeES5JF1ns+gPjySgW+KLhjc4PKMjP2H2Qf0QJTJTk9D32dWb70D UHyZZ6S5PJFsAm6E1vxG98xvGD4X8O8LZBZX5qyG8UiqQ8HJJ3hzREXihX26/7Ph +xsFpEs7mRIlAVAUaq9d6sgM7uTa7EuLXGgTldzDtTA61wIDAQABo2MwYTAOBgNV HQ8BAf8EBAMCAAYwHQYDVR0OBBYEFMw2zBe0RZEv7c87MEh3+7UUmb7jMB8GA1Ud IwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA8GA1UdEwEB/wQFMAMBAf8wDQYJ KoZIhvcNAQEEBQADggEBAFeyVMy9lRdkYIm2U5EMRZLDPahsw8yyGPV4QXTYfaMn r3cNWT6UHWn6idMMvRoB9D/o4Hcagiha5mLXt+M2yQ6feuPC08xZiQzvFovwNnci yqS2t8FCZwFAY8znOGSHWxSWZnstFO69SW3/d9DiTlvTgMJND8q4nYGXpzRux+Oc SOW0qkX19mVMSPISwtKTjMIVJPMrUv/jCK64btYsEs85yxIq56l7X5g9o+HMpmOJ XH0xdfnV1l3y0NQ9355xqA7c5CCXeOZ/U6QNUU+OOwOuow1aTcN55zVYcELJXqFe tNkio0RTNaTQz3OAxc+fVph2+RRMd4eCydx+XTTVNnU= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b8:d6:c3 Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Jan 28 12:00:00 1999 GMT Not After : Jan 28 12:00:00 2009 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Primary Class 3 CA, CN=GlobalSign Primary Class 3 CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:91:5e:56:65:d6:c0:c0:04:9c:bf:47:c4:5c:7b: 7a:31:01:f9:58:96:99:e3:1c:84:2f:dc:56:8f:ad: f5:59:81:d5:43:66:5d:5a:93:8c:75:ca:a9:e7:11: c1:51:10:14:60:c9:2c:d4:7b:af:c6:77:86:ab:7a: 27:ae:6f:95:b9:0b:ca:b6:46:fb:7e:1a:f4:0d:14: 6d:d2:c9:4e:b2:ae:f0:54:f6:5c:40:4c:36:48:74: e8:54:8c:65:66:10:a7:bd:2b:b7:20:8d:05:49:ad: 78:7d:d2:24:23:50:e3:f0:b4:79:9b:01:39:ff:af: 3b:d3:2d:ee:e1:49:8d:8d:2f:3c:6a:41:45:2f:9b: e3:3d:e1:12:e4:91:75:9e:cf:a0:3e:3c:92:81:6f: 8a:2e:18:dc:e0:f2:8c:8c:fd:87:d9:07:f4:40:94: c9:4e:4f:43:df:67:56:6f:bd:03:50:7c:99:67:a4: b9:3c:91:6c:02:6e:84:d6:fc:46:f7:cc:6f:18:3e: 17:f0:ef:0b:64:16:57:e6:ac:86:f1:48:aa:43:c1: c9:27:78:73:44:45:e2:85:7d:ba:ff:b3:e1:fb:1b: 05:a4:4b:3b:99:12:25:01:50:14:6a:af:5d:ea:c8: 0c:ee:e4:da:ec:4b:8b:5c:68:13:95:dc:c3:b5:30: 3a:d7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: CC:36:CC:17:B4:45:91:2F:ED:CF:3B:30:48:77:FB:B5:14:99:BE:E3 X509v3 Authority Key Identifier: keyid:60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 57:b2:54:cc:bd:95:17:64:60:89:b6:53:91:0c:45:92:c3:3d: a8:6c:c3:cc:b2:18:f5:78:41:74:d8:7d:a3:27:af:77:0d:59: 3e:94:1d:69:fa:89:d3:0c:bd:1a:01:f4:3f:e8:e0:77:1a:82: 28:5a:e6:62:d7:b7:e3:36:c9:0e:9f:7a:e3:c2:d3:cc:59:89: 0c:ef:16:8b:f0:36:77:22:ca:a4:b6:b7:c1:42:67:01:40:63: cc:e7:38:64:87:5b:14:96:66:7b:2d:14:ee:bd:49:6d:ff:77: d0:e2:4e:5b:d3:80:c2:4d:0f:ca:b8:9d:81:97:a7:34:6e:c7: e3:9c:48:e5:b4:aa:45:f5:f6:65:4c:48:f2:12:c2:d2:93:8c: c2:15:24:f3:2b:52:ff:e3:08:ae:b8:6e:d6:2c:12:cf:39:cb: 12:2a:e7:a9:7b:5f:98:3d:a3:e1:cc:a6:63:89:5c:7d:31:75: f9:d5:d6:5d:f2:d0:d4:3d:df:9e:71:a8:0e:dc:e4:20:97:78: e6:7f:53:a4:0d:51:4f:8e:3b:03:ae:a3:0d:5a:4d:c3:79:e7: 35:58:70:42:c9:5e:a1:5e:b4:d9:22:a3:44:53:35:a4:d0:cf: 73:80:c5:cf:9f:56:98:76:f9:14:4c:77:87:82:c9:dc:7e:5d: 34:d5:36:75 GlobalSign Root CA ================== MD5 Fingerprint: AB:BF:EA:E3:6B:29:A6:CC:A6:78:35:99:EF:AD:2B:80 PEM Data: -----BEGIN CERTIFICATE----- MIIDdTCCAl2gAwIBAgILAgAAAAAA1ni3lAUwDQYJKoZIhvcNAQEEBQAwVzELMAkG A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw MDBaFw0xNDAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp 1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIABjAdBgNVHQ4EFgQU YHtmGkUNl8qJUC99BM00qP/8/UswDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0B AQQFAAOCAQEArqqf/LfSyx9fOSkoGJ40yWxPbxrwZKJwSk8ThptgKJ7ogUmYfQq7 5bCdPTbbjwVR/wkxKh/diXeeDy5slQTthsu0AD+EAk2AaioteAuubyuig0SDH81Q gkwkr733pbTIWg/050deSY43lv6aiAU62cDbKYfmGZZHpzqmjIs8d/5GY6dT2iHR rH5Jokvmw2dZL7OKDrssvamqQnw1wdh/1acxOk5jQzmvCLBhNIzTmKlDNPYPhyk7 ncJWWJh3w/cbrPad+D6qp1RF8PX51TFl/mtYnHGzHtdS6jIX/EBgHcl5JLL2bP2o Zg6C3ZjL2sJETy6ge/L3ayx2EYRGinij4w== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 02:00:00:00:00:00:d6:78:b7:94:05 Signature Algorithm: md5WithRSAEncryption Issuer: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Validity Not Before: Sep 1 12:00:00 1998 GMT Not After : Jan 28 12:00:00 2014 GMT Subject: C=BE, O=GlobalSign nv-sa, OU=Root CA, CN=GlobalSign Root CA Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:da:0e:e6:99:8d:ce:a3:e3:4f:8a:7e:fb:f1:8b: 83:25:6b:ea:48:1f:f1:2a:b0:b9:95:11:04:bd:f0: 63:d1:e2:67:66:cf:1c:dd:cf:1b:48:2b:ee:8d:89: 8e:9a:af:29:80:65:ab:e9:c7:2d:12:cb:ab:1c:4c: 70:07:a1:3d:0a:30:cd:15:8d:4f:f8:dd:d4:8c:50: 15:1c:ef:50:ee:c4:2e:f7:fc:e9:52:f2:91:7d:e0: 6d:d5:35:30:8e:5e:43:73:f2:41:e9:d5:6a:e3:b2: 89:3a:56:39:38:6f:06:3c:88:69:5b:2a:4d:c5:a7: 54:b8:6c:89:cc:9b:f9:3c:ca:e5:fd:89:f5:12:3c: 92:78:96:d6:dc:74:6e:93:44:61:d1:8d:c7:46:b2: 75:0e:86:e8:19:8a:d5:6d:6c:d5:78:16:95:a2:e9: c8:0a:38:eb:f2:24:13:4f:73:54:93:13:85:3a:1b: bc:1e:34:b5:8b:05:8c:b9:77:8b:b1:db:1f:20:91: ab:09:53:6e:90:ce:7b:37:74:b9:70:47:91:22:51: 63:16:79:ae:b1:ae:41:26:08:c8:19:2b:d1:46:aa: 48:d6:64:2a:d7:83:34:ff:2c:2a:c1:6c:19:43:4a: 07:85:e7:d3:7c:f6:21:68:ef:ea:f2:52:9f:7f:93: 90:cf Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Certificate Sign, CRL Sign X509v3 Subject Key Identifier: 60:7B:66:1A:45:0D:97:CA:89:50:2F:7D:04:CD:34:A8:FF:FC:FD:4B X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption ae:aa:9f:fc:b7:d2:cb:1f:5f:39:29:28:18:9e:34:c9:6c:4f: 6f:1a:f0:64:a2:70:4a:4f:13:86:9b:60:28:9e:e8:81:49:98: 7d:0a:bb:e5:b0:9d:3d:36:db:8f:05:51:ff:09:31:2a:1f:dd: 89:77:9e:0f:2e:6c:95:04:ed:86:cb:b4:00:3f:84:02:4d:80: 6a:2a:2d:78:0b:ae:6f:2b:a2:83:44:83:1f:cd:50:82:4c:24: af:bd:f7:a5:b4:c8:5a:0f:f4:e7:47:5e:49:8e:37:96:fe:9a: 88:05:3a:d9:c0:db:29:87:e6:19:96:47:a7:3a:a6:8c:8b:3c: 77:fe:46:63:a7:53:da:21:d1:ac:7e:49:a2:4b:e6:c3:67:59: 2f:b3:8a:0e:bb:2c:bd:a9:aa:42:7c:35:c1:d8:7f:d5:a7:31: 3a:4e:63:43:39:af:08:b0:61:34:8c:d3:98:a9:43:34:f6:0f: 87:29:3b:9d:c2:56:58:98:77:c3:f7:1b:ac:f6:9d:f8:3e:aa: a7:54:45:f0:f5:f9:d5:31:65:fe:6b:58:9c:71:b3:1e:d7:52: ea:32:17:fc:40:60:1d:c9:79:24:b2:f6:6c:fd:a8:66:0e:82: dd:98:cb:da:c2:44:4f:2e:a0:7b:f2:f7:6b:2c:76:11:84:46: 8a:78:a3:e3 National Retail Federation by DST ================================= MD5 Fingerprint: AD:8E:0F:9E:01:6B:A0:C5:74:D5:0C:D3:68:65:4F:1E PEM Data: -----BEGIN CERTIFICATE----- MIIEAjCCAuoCEQDQHkCKAAACfAAAAAMAAAABMA0GCSqGSIb3DQEBBQUAMIG+MQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UE CxMaTmF0aW9uYWwgUmV0YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJG KSBSb290Q0ExITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05 ODEyMTExNjE0MTZaFw0wODEyMDgxNjE0MTZaMIG+MQswCQYDVQQGEwJ1czENMAsG A1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0Rp Z2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEjMCEGA1UECxMaTmF0aW9uYWwgUmV0 YWlsIEZlZGVyYXRpb24xGTAXBgNVBAMTEERTVCAoTlJGKSBSb290Q0ExITAfBgkq hkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcNAQEBBQAD ggEPADCCAQoCggEBANmsm3f6UNPM3LlArLlyagCHI/wPliHQJq/k4rVf+tOmfSEw LswXgo+YdPxnpKbfiJeiQin1p9sRk/teIzDCqrwi50Eb5e0l3sg/295XRXhARoOy 1Ro93w9FbdVjAnXYL8Zuq5WRdDcNy00JXNHUWzra3Q7Ia5nY1TnM34VVxJJTAqPh 94DJcKPa3DPEf6JHCBw1lh+hAxwwg/TEzP+Yw7BGRKLAv63b0oH2TJgsp14k84bK Y9W6ffCawErQG1ju7Klnz2kCbCLAYCws0cgg6sgt+92cu8tRTNznVwQ7VJsRpTJ0 7HQB85AVWy98LJNluWZntIGINeWekRh/gahByMsCAwEAATANBgkqhkiG9w0BAQUF AAOCAQEAhF4LO+ygjRyb0DwdcWnkGn9kvoFlYcWMatd8AHTgemJV7SR84GHj8t0U 5hFugw7h6qmegK2aIL/gV37V0LWEYy3ZGOS9GzUsXq5hdqpnhTs44TGBHzF/5tf4 W9K7Y3mGxIzF3gqu19H8AXT/trYNYoFnHLsm+CSA4Fxe2KSKOo99y/+So/18qTJp B1hYYUKZUgOxOD3GcW9s8uh9BqrBfFPLGi2IT8mpp6xpb/ekH9h0gfVKv7FVt9N3 OKdvwkrI4nOJ01dy4UMvcjz2H7f4BEpuwemUF+SXF/QOE4ZvjavoXy20/2zWorQf 7LmUaqoSTxrd9Xe1JYzyigrx/FJbWA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8a:00:00:02:7c:00:00:00:03:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com Validity Not Before: Dec 11 16:14:16 1998 GMT Not After : Dec 8 16:14:16 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=National Retail Federation, CN=DST (NRF) RootCA/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:d9:ac:9b:77:fa:50:d3:cc:dc:b9:40:ac:b9:72: 6a:00:87:23:fc:0f:96:21:d0:26:af:e4:e2:b5:5f: fa:d3:a6:7d:21:30:2e:cc:17:82:8f:98:74:fc:67: a4:a6:df:88:97:a2:42:29:f5:a7:db:11:93:fb:5e: 23:30:c2:aa:bc:22:e7:41:1b:e5:ed:25:de:c8:3f: db:de:57:45:78:40:46:83:b2:d5:1a:3d:df:0f:45: 6d:d5:63:02:75:d8:2f:c6:6e:ab:95:91:74:37:0d: cb:4d:09:5c:d1:d4:5b:3a:da:dd:0e:c8:6b:99:d8: d5:39:cc:df:85:55:c4:92:53:02:a3:e1:f7:80:c9: 70:a3:da:dc:33:c4:7f:a2:47:08:1c:35:96:1f:a1: 03:1c:30:83:f4:c4:cc:ff:98:c3:b0:46:44:a2:c0: bf:ad:db:d2:81:f6:4c:98:2c:a7:5e:24:f3:86:ca: 63:d5:ba:7d:f0:9a:c0:4a:d0:1b:58:ee:ec:a9:67: cf:69:02:6c:22:c0:60:2c:2c:d1:c8:20:ea:c8:2d: fb:dd:9c:bb:cb:51:4c:dc:e7:57:04:3b:54:9b:11: a5:32:74:ec:74:01:f3:90:15:5b:2f:7c:2c:93:65: b9:66:67:b4:81:88:35:e5:9e:91:18:7f:81:a8:41: c8:cb Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 84:5e:0b:3b:ec:a0:8d:1c:9b:d0:3c:1d:71:69:e4:1a:7f:64: be:81:65:61:c5:8c:6a:d7:7c:00:74:e0:7a:62:55:ed:24:7c: e0:61:e3:f2:dd:14:e6:11:6e:83:0e:e1:ea:a9:9e:80:ad:9a: 20:bf:e0:57:7e:d5:d0:b5:84:63:2d:d9:18:e4:bd:1b:35:2c: 5e:ae:61:76:aa:67:85:3b:38:e1:31:81:1f:31:7f:e6:d7:f8: 5b:d2:bb:63:79:86:c4:8c:c5:de:0a:ae:d7:d1:fc:01:74:ff: b6:b6:0d:62:81:67:1c:bb:26:f8:24:80:e0:5c:5e:d8:a4:8a: 3a:8f:7d:cb:ff:92:a3:fd:7c:a9:32:69:07:58:58:61:42:99: 52:03:b1:38:3d:c6:71:6f:6c:f2:e8:7d:06:aa:c1:7c:53:cb: 1a:2d:88:4f:c9:a9:a7:ac:69:6f:f7:a4:1f:d8:74:81:f5:4a: bf:b1:55:b7:d3:77:38:a7:6f:c2:4a:c8:e2:73:89:d3:57:72: e1:43:2f:72:3c:f6:1f:b7:f8:04:4a:6e:c1:e9:94:17:e4:97: 17:f4:0e:13:86:6f:8d:ab:e8:5f:2d:b4:ff:6c:d6:a2:b4:1f: ec:b9:94:6a:aa:12:4f:1a:dd:f5:77:b5:25:8c:f2:8a:0a:f1: fc:52:5b:58 TC TrustCenter, Germany, Class 1 CA =================================== MD5 Fingerprint: 64:3F:F8:3E:52:14:4A:59:BA:93:56:04:0B:23:02:D1 PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBAjANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDEgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTYzM1oX DTA1MTIzMTEzNTYzM1owgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAxIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAsCnrtHaz rte2W7Re573jsZxJBFdboavZfxMb/bphq9jncd8tAJRdUUh9I+91YoSQPAofWRF0 L46Apf0wAj0pUs1yGkkhnLzLUo5IoWOWyBCFMGlXdEXAWobG1T3gaFd9MWokjUWX PjF+aGYybiRt7DI2yUHK8DFEyKNhyhugNh8CAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAx IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQAFQlImpAwn AUSsXCUowkRCVAi5HcU+bFlmxLNOUKf4+JZ1oZZ16BY4oM1dbvp5pxt7HR7DALlm vlrWYg/n8nu470zgwD9Zrjm3hAmeq/GpLmtp4q3M8up4CQUgOEJxGH7Hspfm1QIF BlajX/GqwsRP/vfvFg+d7KqFzz0pJPEEzQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 2 (0x2) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:56:33 1998 GMT Not After : Dec 31 13:56:33 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 1 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b0:29:eb:b4:76:b3:ae:d7:b6:5b:b4:5e:e7:bd: e3:b1:9c:49:04:57:5b:a1:ab:d9:7f:13:1b:fd:ba: 61:ab:d8:e7:71:df:2d:00:94:5d:51:48:7d:23:ef: 75:62:84:90:3c:0a:1f:59:11:74:2f:8e:80:a5:fd: 30:02:3d:29:52:cd:72:1a:49:21:9c:bc:cb:52:8e: 48:a1:63:96:c8:10:85:30:69:57:74:45:c0:5a:86: c6:d5:3d:e0:68:57:7d:31:6a:24:8d:45:97:3e:31: 7e:68:66:32:6e:24:6d:ec:32:36:c9:41:ca:f0:31: 44:c8:a3:61:ca:1b:a0:36:1f Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 1 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 05:42:52:26:a4:0c:27:01:44:ac:5c:25:28:c2:44:42:54:08: b9:1d:c5:3e:6c:59:66:c4:b3:4e:50:a7:f8:f8:96:75:a1:96: 75:e8:16:38:a0:cd:5d:6e:fa:79:a7:1b:7b:1d:1e:c3:00:b9: 66:be:5a:d6:62:0f:e7:f2:7b:b8:ef:4c:e0:c0:3f:59:ae:39: b7:84:09:9e:ab:f1:a9:2e:6b:69:e2:ad:cc:f2:ea:78:09:05: 20:38:42:71:18:7e:c7:b2:97:e6:d5:02:05:06:56:a3:5f:f1: aa:c2:c4:4f:fe:f7:ef:16:0f:9d:ec:aa:85:cf:3d:29:24:f1: 04:cd TC TrustCenter, Germany, Class 2 CA =================================== MD5 Fingerprint: E1:E9:96:53:77:E1:F0:38:A0:02:AB:94:C6:95:7B:FC PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBAzANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTc0NFoX DTA1MTIzMTEzNTc0NFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA2jjo7TIA KXGDAQ2/jAHc2satOaSpii/Vi1xoX1DGYvVmvcqRIuyqHVHXPbNRsoNOXctJsPBM VeVrLceFCzAckk6C1MoC7fdvvtzg4xS4BVPymvRWi1qehZPRtIJWrk27qEtXFrz+ +Fie+CmNsHvNeMlPrItnDPGc+/xXm1dcTw0CAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAy IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCJG/Tv6Tji bAz2zW9JzinM+6YP+Y0+lUbW/EcyibLIBmF60ucNEwKUC9mLVkf0u+fFX3v0Y0yu fDTqDaKpsyyF8+P+J1QQkrCPksGYQhhwSNtOLOsNJGjk0fe+Cakph7vo2tw+o4hC MfXR43+u2I4AWnSYsE/G/yN7XHMAeMnbTg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 3 (0x3) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:57:44 1998 GMT Not After : Dec 31 13:57:44 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 2 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:da:38:e8:ed:32:00:29:71:83:01:0d:bf:8c:01: dc:da:c6:ad:39:a4:a9:8a:2f:d5:8b:5c:68:5f:50: c6:62:f5:66:bd:ca:91:22:ec:aa:1d:51:d7:3d:b3: 51:b2:83:4e:5d:cb:49:b0:f0:4c:55:e5:6b:2d:c7: 85:0b:30:1c:92:4e:82:d4:ca:02:ed:f7:6f:be:dc: e0:e3:14:b8:05:53:f2:9a:f4:56:8b:5a:9e:85:93: d1:b4:82:56:ae:4d:bb:a8:4b:57:16:bc:fe:f8:58: 9e:f8:29:8d:b0:7b:cd:78:c9:4f:ac:8b:67:0c:f1: 9c:fb:fc:57:9b:57:5c:4f:0d Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 2 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 89:1b:f4:ef:e9:38:e2:6c:0c:f6:cd:6f:49:ce:29:cc:fb:a6: 0f:f9:8d:3e:95:46:d6:fc:47:32:89:b2:c8:06:61:7a:d2:e7: 0d:13:02:94:0b:d9:8b:56:47:f4:bb:e7:c5:5f:7b:f4:63:4c: ae:7c:34:ea:0d:a2:a9:b3:2c:85:f3:e3:fe:27:54:10:92:b0: 8f:92:c1:98:42:18:70:48:db:4e:2c:eb:0d:24:68:e4:d1:f7: be:09:a9:29:87:bb:e8:da:dc:3e:a3:88:42:31:f5:d1:e3:7f: ae:d8:8e:00:5a:74:98:b0:4f:c6:ff:23:7b:5c:73:00:78:c9: db:4e TC TrustCenter, Germany, Class 3 CA =================================== MD5 Fingerprint: 62:AB:B6:15:4A:B4:B0:16:77:FF:AE:CF:16:16:2B:8C PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBBDANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTEzNTg0OVoX DTA1MTIzMTEzNTg0OVowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAtrTBNQUu DY3soEBqHA4nplCSa1AbB94u53bM4Nr8hKhejGNqK03ZTgJ2EcEL8o15ygC28bAO 1/ukFz2vq2l6lie/rzOhmipZqsS1NwjyEqUxtkP1MpZxKCirjSiG37vu4wx9MNbD UquPXSeca8Cj5wVrV0lEs27qZM/SjnpQd3cCAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyAz IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCEhlBieaAn 4SW6CbE0DxMJ7S3Ko+aV+TCszRelzj2Xnex8jyZ/wGHKIveR3Tw2WZqbdfe85Mjt 7AK2IqfzLPHIknhttu7FKOyAIE+5awjnL6eGHn2xCJ9UuQA3PKDYGsiWHPQyFJw5 lbfu8ENJwl7oy3lvU7/7SYos2EvZVfIScA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 4 (0x4) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 13:58:49 1998 GMT Not After : Dec 31 13:58:49 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 3 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:b4:c1:35:05:2e:0d:8d:ec:a0:40:6a:1c:0e: 27:a6:50:92:6b:50:1b:07:de:2e:e7:76:cc:e0:da: fc:84:a8:5e:8c:63:6a:2b:4d:d9:4e:02:76:11:c1: 0b:f2:8d:79:ca:00:b6:f1:b0:0e:d7:fb:a4:17:3d: af:ab:69:7a:96:27:bf:af:33:a1:9a:2a:59:aa:c4: b5:37:08:f2:12:a5:31:b6:43:f5:32:96:71:28:28: ab:8d:28:86:df:bb:ee:e3:0c:7d:30:d6:c3:52:ab: 8f:5d:27:9c:6b:c0:a3:e7:05:6b:57:49:44:b3:6e: ea:64:cf:d2:8e:7a:50:77:77 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 3 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 84:86:50:62:79:a0:27:e1:25:ba:09:b1:34:0f:13:09:ed:2d: ca:a3:e6:95:f9:30:ac:cd:17:a5:ce:3d:97:9d:ec:7c:8f:26: 7f:c0:61:ca:22:f7:91:dd:3c:36:59:9a:9b:75:f7:bc:e4:c8: ed:ec:02:b6:22:a7:f3:2c:f1:c8:92:78:6d:b6:ee:c5:28:ec: 80:20:4f:b9:6b:08:e7:2f:a7:86:1e:7d:b1:08:9f:54:b9:00: 37:3c:a0:d8:1a:c8:96:1c:f4:32:14:9c:39:95:b7:ee:f0:43: 49:c2:5e:e8:cb:79:6f:53:bf:fb:49:8a:2c:d8:4b:d9:55:f2: 12:70 TC TrustCenter, Germany, Class 4 CA =================================== MD5 Fingerprint: BF:AF:EC:C4:DA:F9:30:F9:CA:35:CA:25:E4:3F:8D:89 PEM Data: -----BEGIN CERTIFICATE----- MIIENTCCA56gAwIBAgIBBTANBgkqhkiG9w0BAQQFADCBvDELMAkGA1UEBhMCREUx EDAOBgNVBAgTB0hhbWJ1cmcxEDAOBgNVBAcTB0hhbWJ1cmcxOjA4BgNVBAoTMVRD IFRydXN0Q2VudGVyIGZvciBTZWN1cml0eSBpbiBEYXRhIE5ldHdvcmtzIEdtYkgx IjAgBgNVBAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExKTAnBgkqhkiG9w0B CQEWGmNlcnRpZmljYXRlQHRydXN0Y2VudGVyLmRlMB4XDTk4MDMwOTE0MDAyMFoX DTA1MTIzMTE0MDAyMFowgbwxCzAJBgNVBAYTAkRFMRAwDgYDVQQIEwdIYW1idXJn MRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFUQyBUcnVzdENlbnRlciBmb3Ig U2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJIMSIwIAYDVQQLExlUQyBUcnVz dENlbnRlciBDbGFzcyA0IENBMSkwJwYJKoZIhvcNAQkBFhpjZXJ0aWZpY2F0ZUB0 cnVzdGNlbnRlci5kZTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvy9j1jZ7 sg3TVfVkbOYlXca0yBS6JTiD61ZipVWpZaP0I5nCS7nQzVRnpqOgo6kzK3bkva13 su1cEnTDxbYPUppyk0OQYmYVD0Wl3eDduG9AblfBeXKjYKq6dh0SiVNa/AK+4QkT xUov3D2LGa3XiyRF+0z0zVw1HSlMUfPybFUCAwEAAaOCAUMwggE/MEAGCWCGSAGG +EIBAwQzFjFodHRwczovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL2NoZWNr LXJldi5jZ2k/MEAGCWCGSAGG+EIBBAQzFjFodHRwczovL3d3dy50cnVzdGNlbnRl ci5kZS9jZ2ktYmluL2NoZWNrLXJldi5jZ2k/MDwGCWCGSAGG+EIBBwQvFi1odHRw czovL3d3dy50cnVzdGNlbnRlci5kZS9jZ2ktYmluL1JlbmV3LmNnaT8wPgYJYIZI AYb4QgEIBDEWL2h0dHA6Ly93d3cudHJ1c3RjZW50ZXIuZGUvZ3VpZGVsaW5lcy9p bmRleC5odG1sMCgGCWCGSAGG+EIBDQQbFhlUQyBUcnVzdENlbnRlciBDbGFzcyA0 IENBMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQQFAAOBgQCUaBQbJZ4p mbGyI9JEs5Wf0Z5VBN3jL4IzVZZ3GZ0rnmUc+orjx48l/LEeVUYPj/9PNy+kdlmm ZOvVFnC93ZUzDKQNJOtkULRDEfJDvg1xmCLsAa/s98dcccN1kVgZ6N2g9LTxvBBK 85O0Bkm7H2bSvXRH4Zr569erbR+64R0s2g== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 5 (0x5) Signature Algorithm: md5WithRSAEncryption Issuer: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de Validity Not Before: Mar 9 14:00:20 1998 GMT Not After : Dec 31 14:00:20 2005 GMT Subject: C=DE, ST=Hamburg, L=Hamburg, O=TC TrustCenter for Security in Data Networks GmbH, OU=TC TrustCenter Class 4 CA/Email=certificate@trustcenter.de Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bf:2f:63:d6:36:7b:b2:0d:d3:55:f5:64:6c:e6: 25:5d:c6:b4:c8:14:ba:25:38:83:eb:56:62:a5:55: a9:65:a3:f4:23:99:c2:4b:b9:d0:cd:54:67:a6:a3: a0:a3:a9:33:2b:76:e4:bd:ad:77:b2:ed:5c:12:74: c3:c5:b6:0f:52:9a:72:93:43:90:62:66:15:0f:45: a5:dd:e0:dd:b8:6f:40:6e:57:c1:79:72:a3:60:aa: ba:76:1d:12:89:53:5a:fc:02:be:e1:09:13:c5:4a: 2f:dc:3d:8b:19:ad:d7:8b:24:45:fb:4c:f4:cd:5c: 35:1d:29:4c:51:f3:f2:6c:55 Exponent: 65537 (0x10001) X509v3 extensions: Netscape Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape CA Revocation Url: https://www.trustcenter.de/cgi-bin/check-rev.cgi? Netscape Renewal Url: https://www.trustcenter.de/cgi-bin/Renew.cgi? Netscape CA Policy Url: http://www.trustcenter.de/guidelines/index.html Netscape Comment: TC TrustCenter Class 4 CA Netscape Cert Type: SSL CA, S/MIME CA, Object Signing CA Signature Algorithm: md5WithRSAEncryption 94:68:14:1b:25:9e:29:99:b1:b2:23:d2:44:b3:95:9f:d1:9e: 55:04:dd:e3:2f:82:33:55:96:77:19:9d:2b:9e:65:1c:fa:8a: e3:c7:8f:25:fc:b1:1e:55:46:0f:8f:ff:4f:37:2f:a4:76:59: a6:64:eb:d5:16:70:bd:dd:95:33:0c:a4:0d:24:eb:64:50:b4: 43:11:f2:43:be:0d:71:98:22:ec:01:af:ec:f7:c7:5c:71:c3: 75:91:58:19:e8:dd:a0:f4:b4:f1:bc:10:4a:f3:93:b4:06:49: bb:1f:66:d2:bd:74:47:e1:9a:f9:eb:d7:ab:6d:1f:ba:e1:1d: 2c:da Thawte Personal Basic CA ======================== MD5 Fingerprint: E6:0B:D2:C9:CA:2D:88:DB:1A:71:0E:4B:78:EB:02:41 PEM Data: -----BEGIN CERTIFICATE----- MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53 dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7 G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7 c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P 9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Basic CA/Email=personal-basic@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:bc:bc:93:53:6d:c0:50:4f:82:15:e6:48:94:35: a6:5a:be:6f:42:fa:0f:47:ee:77:75:72:dd:8d:49: 9b:96:57:a0:78:d4:ca:3f:51:b3:69:0b:91:76:17: 22:07:97:6a:c4:51:93:4b:e0:8d:ef:37:95:a1:0c: 4d:da:34:90:1d:17:89:97:e0:35:38:57:4a:c0:f4: 08:70:e9:3c:44:7b:50:7e:61:9a:90:e3:23:d3:88: 11:46:27:f5:0b:07:0e:bb:dd:d1:7f:20:0a:88:b9: 56:0b:2e:1c:80:da:f1:e3:9e:29:ef:14:bd:0a:44: fb:1b:5b:18:d1:bf:23:93:21 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 2d:e2:99:6b:b0:3d:7a:89:d7:59:a2:94:01:1f:2b:dd:12:4b: 53:c2:ad:7f:aa:a7:00:5c:91:40:57:25:4a:38:aa:84:70:b9: d9:80:0f:a5:7b:5c:fb:73:c6:bd:d7:8a:61:5c:03:e3:2d:27: a8:17:e0:84:85:42:dc:5e:9b:c6:b7:b2:6d:bb:74:af:e4:3f: cb:a7:b7:b0:e0:5d:be:78:83:25:94:d2:db:81:0f:79:07:6d: 4f:f4:39:15:5a:52:01:7b:de:32:d6:4d:38:f6:12:5c:06:50: df:05:5b:bd:14:4b:a1:df:29:ba:3b:41:8d:f7:63:56:a1:df: 22:b1 Thawte Personal Freemail CA =========================== MD5 Fingerprint: 1E:74:C3:86:3C:0C:35:C5:3E:C2:7F:EF:3C:AA:3C:D9 PEM Data: -----BEGIN CERTIFICATE----- MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa /RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei gQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Freemail CA/Email=personal-freemail@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d4:69:d7:d4:b0:94:64:5b:71:e9:47:d8:0c:51: b6:ea:72:91:b0:84:5e:7d:2d:0d:8f:7b:12:df:85: 25:75:28:74:3a:42:2c:63:27:9f:95:7b:4b:ef:7e: 19:87:1d:86:ea:a3:dd:b9:ce:96:64:1a:c2:14:6e: 44:ac:7c:e6:8f:e8:4d:0f:71:1f:40:38:a6:00:a3: 87:78:f6:f9:94:86:5e:ad:ea:c0:5e:76:eb:d9:14: a3:5d:6e:7a:7c:0c:a5:4b:55:7f:06:19:29:7f:9e: 9a:26:d5:6a:bb:38:24:08:6a:98:c7:b1:da:a3:98: 91:fd:79:db:e5:5a:c4:1c:b9 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption c7:ec:92:7e:4e:f8:f5:96:a5:67:62:2a:a4:f0:4d:11:60:d0: 6f:8d:60:58:61:ac:26:bb:52:35:5c:08:cf:30:fb:a8:4a:96: 8a:1f:62:42:23:8c:17:0f:f4:ba:64:9c:17:ac:47:29:df:9d: 98:5e:d2:6c:60:71:5c:a2:ac:dc:79:e3:e7:6e:00:47:1f:b5: 0d:28:e8:02:9d:e4:9a:fd:13:f4:a6:d9:7c:b1:f8:dc:5f:23: 26:09:91:80:73:d0:14:1b:de:43:a9:83:25:f2:e6:9c:2f:15: ca:fe:a6:ab:8a:07:75:8b:0c:dd:51:84:6b:e4:f8:d1:ce:77: a2:81 Thawte Personal Premium CA ========================== MD5 Fingerprint: 3A:B2:DE:22:9A:20:93:49:F9:ED:C8:D2:8A:E7:68:0D PEM Data: -----BEGIN CERTIFICATE----- MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 0 (0x0) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com Validity Not Before: Jan 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting, OU=Certification Services Division, CN=Thawte Personal Premium CA/Email=personal-premium@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:66:d9:f8:07:44:cf:b9:8c:2e:f0:a1:ef:13: 45:6c:05:df:de:27:16:51:36:41:11:6c:6c:3b:ed: fe:10:7d:12:9e:e5:9b:42:9a:fe:60:31:c3:66:b7: 73:3a:48:ae:4e:d0:32:37:94:88:b5:0d:b6:d9:f3: f2:44:d9:d5:88:12:dd:76:4d:f2:1a:fc:6f:23:1e: 7a:f1:d8:98:45:4e:07:10:ef:16:42:d0:43:75:6d: 4a:de:e2:aa:c9:31:ff:1f:00:70:7c:66:cf:10:25: 08:ba:fa:ee:00:e9:46:03:66:27:11:15:3b:aa:5b: f2:98:dd:36:42:b2:da:88:75 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 69:36:89:f7:34:2a:33:72:2f:6d:3b:d4:22:b2:b8:6f:9a:c5: 36:66:0e:1b:3c:a1:b1:75:5a:e6:fd:35:d3:f8:a8:f2:07:6f: 85:67:8e:de:2b:b9:e2:17:b0:3a:a0:f0:0e:a2:00:9a:df:f3: 14:15:6e:bb:c8:85:5a:98:80:f9:ff:be:74:1d:3d:f3:fe:30: 25:d1:37:34:67:fa:a5:71:79:30:61:29:72:c0:e0:2c:4c:fb: 56:e4:3a:a8:6f:e5:32:59:52:db:75:28:50:59:0c:f8:0b:19: e4:ac:d9:af:96:8d:2f:50:db:07:c3:ea:1f:ab:33:e0:f5:2b: 31:89 Thawte Premium Server CA ======================== MD5 Fingerprint: 06:9F:69:79:16:66:90:02:1B:8C:8C:A2:C3:07:6F:3A PEM Data: -----BEGIN CERTIFICATE----- MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG 9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Premium Server CA/Email=premium-server@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d2:36:36:6a:8b:d7:c2:5b:9e:da:81:41:62:8f: 38:ee:49:04:55:d6:d0:ef:1c:1b:95:16:47:ef:18: 48:35:3a:52:f4:2b:6a:06:8f:3b:2f:ea:56:e3:af: 86:8d:9e:17:f7:9e:b4:65:75:02:4d:ef:cb:09:a2: 21:51:d8:9b:d0:67:d0:ba:0d:92:06:14:73:d4:93: cb:97:2a:00:9c:5c:4e:0c:bc:fa:15:52:fc:f2:44: 6e:da:11:4a:6e:08:9f:2f:2d:e3:f9:aa:3a:86:73: b6:46:53:58:c8:89:05:bd:83:11:b8:73:3f:aa:07: 8d:f4:42:4d:e7:40:9d:1c:37 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 26:48:2c:16:c2:58:fa:e8:16:74:0c:aa:aa:5f:54:3f:f2:d7: c9:78:60:5e:5e:6e:37:63:22:77:36:7e:b2:17:c4:34:b9:f5: 08:85:fc:c9:01:38:ff:4d:be:f2:16:42:43:e7:bb:5a:46:fb: c1:c6:11:1f:f1:4a:b0:28:46:c9:c3:c4:42:7d:bc:fa:ab:59: 6e:d5:b7:51:88:11:e3:a4:85:19:6b:82:4c:a4:0c:12:ad:e9: a4:ae:3f:f1:c3:49:65:9a:8c:c5:c8:3e:25:b7:94:99:bb:92: 32:71:07:f0:86:5e:ed:50:27:a6:0d:a6:23:f9:bb:cb:a6:07: 14:42 Thawte Server CA ================ MD5 Fingerprint: C5:70:C4:A2:ED:53:78:0C:C8:10:53:81:64:CB:D0:1D PEM Data: -----BEGIN CERTIFICATE----- MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3 dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3 DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91 yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG 7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ qdq5snUb9kLy78fyGPmJvKP/iiMucEc= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 3 (0x2) Serial Number: 1 (0x1) Signature Algorithm: md5WithRSAEncryption Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com Validity Not Before: Aug 1 00:00:00 1996 GMT Not After : Dec 31 23:59:59 2020 GMT Subject: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc, OU=Certification Services Division, CN=Thawte Server CA/Email=server-certs@thawte.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d3:a4:50:6e:c8:ff:56:6b:e6:cf:5d:b6:ea:0c: 68:75:47:a2:aa:c2:da:84:25:fc:a8:f4:47:51:da: 85:b5:20:74:94:86:1e:0f:75:c9:e9:08:61:f5:06: 6d:30:6e:15:19:02:e9:52:c0:62:db:4d:99:9e:e2: 6a:0c:44:38:cd:fe:be:e3:64:09:70:c5:fe:b1:6b: 29:b6:2f:49:c8:3b:d4:27:04:25:10:97:2f:e7:90: 6d:c0:28:42:99:d7:4c:43:de:c3:f5:21:6d:54:9f: 5d:c3:58:e1:c0:e4:d9:5b:b0:b8:dc:b4:7b:df:36: 3a:c2:b5:66:22:12:d6:87:0d Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: md5WithRSAEncryption 07:fa:4c:69:5c:fb:95:cc:46:ee:85:83:4d:21:30:8e:ca:d9: a8:6f:49:1a:e6:da:51:e3:60:70:6c:84:61:11:a1:1a:c8:48: 3e:59:43:7d:4f:95:3d:a1:8b:b7:0b:62:98:7a:75:8a:dd:88: 4e:4e:9e:40:db:a8:cc:32:74:b9:6f:0d:c6:e3:b3:44:0b:d9: 8a:6f:9a:29:9b:99:18:28:3b:d1:e3:40:28:9a:5a:3c:d5:b5: e7:20:1b:8b:ca:a4:ab:8d:e9:51:d9:e2:4c:2c:59:a9:da:b9: b2:75:1b:f6:42:f2:ef:c7:f2:18:f9:89:bc:a3:ff:8a:23:2e: 70:47 Thawte Universal CA Root ======================== MD5 Fingerprint: 17:AF:71:16:52:7B:73:65:22:05:29:28:84:71:9D:13 PEM Data: -----BEGIN CERTIFICATE----- MIIRIjCCCQoCAQAwDQYJKoZIhvcNAQEFBQAwVzEPMA0GA1UEChMGVGhhd3RlMSEw HwYDVQQLExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3QxITAfBgNVBAMTGFRoYXd0 ZSBVbml2ZXJzYWwgQ0EgUm9vdDAeFw05OTEyMDUxMzU2MDVaFw0zNzA0MDMxMzU2 MDVaMFcxDzANBgNVBAoTBlRoYXd0ZTEhMB8GA1UECxMYVGhhd3RlIFVuaXZlcnNh bCBDQSBSb290MSEwHwYDVQQDExhUaGF3dGUgVW5pdmVyc2FsIENBIFJvb3Qwgggi MA0GCSqGSIb3DQEBAQUAA4IIDwAwgggKAoIIAQDiiQVtw3+tpok6/7vHzZ03seHS IR6bYSoV53tXT1U80Lv52T0+przstK1TmhYC6wty/Yryj0QFxevT5b22RDnm+0e/ ap4KlRjiaOLWltYhrYj99Rf109pCpZDtKZWWdTrah6HU9dOH3gVipuNmdJLPpby7 32j/cXVWQVk16zNaZlHy0qMKwYzOc1wRby2MlYyRsf3P5a1WlcyFkoOQVUHJwnft +aN0QgpoCPPQ0WX9Zyw0/yR/53nIBzslV92kDJg9vuDMGWXb8lSir0LUneKuhCMl CTMStWoedsSL2UkAbF66H/Ib2mfKJ6qjRCMbg4LO8qsz7VSk3MmrWWXROA7BPhtn j9Z1AeBVIt12d+yO3fTPeSJtuVcD9ZkIpzw+NPvEF64jWM0k8yPKagIolAGBNLRs a66LGsOj0gk8FlT1Nl8k459KoeJkxhbDpoF6JDZHjsFeDvv5FXgE1g5Z2Z1YZmLS lCkyMsh4uWb2tVbhbMYUS5ZSWZECJGpVR9c/tiMaYHeXLuJAr54EV56tEcXJQ3Dv SLRerBxpLi6C1VuLvoK+GRRe5w0ix1Eb/x6b8TCPcTEGszQnj196ZoJPii0Tq0LP IVael45mNg+Wm+Ur9AKpKmqMLMTDuHAsLSkeP1B3Hm0qVORVCpE4ocW1ZqJ2Wu4P v7Rn4ShuD+E2oYLRv9R34cRnMpN4yOdUU/4jeeZozCaQ9hBjXSpvkS2kczJRIfK7 Fd+qJAhIBt6hnia/uoO/fKTIoIy90v+8hGknEyQYxEUYIyZeGBTKLoiHYqNT5iG3 uIV7moW7FSZy+Ln3anQPST+SvqkFt5knv78JF0uZTK0REHzfdDH2jyZfqoiuOFfI VS3T+9gbUZm+JRs6usB9G+3O0km5z/PFfYmQgdhpSCAQo/jvklEYMosRGMA/G4VW zlfJ8oJkxt8CCS5KES+xJ203UvDwFmHxZ43fh3Kvh9rP+1CUbtSUheuKLOoh9ZZK RNXgzmp0RE3QBdOHFe020KSLZlVwk+5HBsF+LqUYeWfzKIXxcPcOg6R+VJ5adjLL ZRu4zfvIKAPSVJHRp8WFQwgXdqXmL2cI2KGigi0M+MGvY9RQd21rRkpBhdWQX3kt xOzXEYdAiuFo4mT4VTL7b5Ms2nfZIcEX5TYsTn6Qf6yUKzJnvjhQdriuQbnXIcUJ TGDIo1HENJtXN9/LyTNXi+v7dp8ZTcVqHypFrivtL42npQDLBPolYi50SBvKKoy6 27Z+9rsCfKnD21h4ob/w/hoQVRHO6GlOlmXGFwPWB2iMVIKuHCJVP/H0CZcowEb3 TgslHfcH1wkdOhhXODvoMwbnj3hGHlv1BrbsuKYN8boTS9YYIN1pM0ozFa64yJiK JyyTvC377jO/ZuZNurabBlVgl0u8RM1+9KHYqi/AAighFmJ42whU8vz0NOPGjxxD V86QGkvcLjsokYk/eto1HY4s7kns9DOtyVOojJ8EUz4kHFLJEvliV6O87izrQHwg I3ArlflzF4rRwRxpprc4mmf3cB16WgxAz2IPhTzCAk5+tfbFKimEsx83KuGqckLE 7Wsaj5IcXb7R8lvyq6qp0vW4pEErK5FuEkjKmNg3jcjtADC1tgROfpzahOzA+nvl HYikU0awlORcG6ElLA9IUneXCWzsWxgzgwLlgn7NhSEwEf0nT8/kHuw/pVds6Sow GSqI5cNpOKtvOXF/hOFBw+HMKokgUi6DD2w5P0stFqwt8CSsAHP0m7MGPwW4FIUf q55cPJ5inQ5tO4AJ/ALqopd0ysf541bhw8qlpprAkOAkElPSwovavu0CQ15n4YmY ee7LqsrDG9znpUalfGsWh7ZaKNfbJzxepb22Ud0fQ887Jsg6jSVhwUn0PBvJROqv HMIrlAEqDjDRW4srR+XD0QQDmw45LNYn1OZwWtl1zyrYyQAF5BOI7MM5+4dhMDZD A8ienKIGwi/F/PCAY7FUBKBMqS7G9XZ62NDk1JQR5RW1eAbcuICPmakgMz0QhUxl Cco+WF5gk5qqYl3AUQYcXWCgDZxLQ/anFiGkh6rywS7ukjC4nt/fEAGLhglw2Gyo t1AeFpa092f9NTohkCoyxwB7TQcQCbkvc9gYfmeZBE8G/FDHhZudQJ2zljf6pdyy ck7vTgks/ZH9Tfe7pqE+q3uiA0CmqVUn4vr5Gc6HdarxdTbz87iR+JHDi3UTjkxl mhY5auU06HqWWX81sAD9W2n8Qyb69Shu/ofZfiT7tKCCblSi/66/YrT0cgHCy5hH mOFMtReAgM6PpijuHkVq+9/xHfxaO9bq9GwdYklXO4qPhurwUwTOnBZo/7q5/IgP R/cCRHJAuMo7LVOd3DxWjFl7aBosjXG7bADHGs5vQJKxoy8P2UTyo3Aunu4OrjLQ Oz6LB+rmebNcKeJ9a6he+Vox6AiWoowDmEbxuH2QVCbtdmL+numabl7JScdcNFMp VNns5EbhgDt12d/7edWH8bqe6xnOTFJz5luHriVPOXnMxrj5EHvs8JtxpAWg0ynT Tn8f9C0oeMxVlXsekS/MVhhzi7LbvGkH5tDYT+2i/1iFo23gSlO3Z32NDFxbe3co AjVEegTTKEPIazAXXTK4KTW6dto7FEp2GFik+JI8nk0zb0ZrCNkxSGjd9PskVjSy z2lmvkjSimYizfJpzcJTE0UpQSLWXZgftqSyo8LuAi9RG9yDpOxwJajUCGEyb+Sh gS58Y3L6KWW8cETPXQIDAQABMA0GCSqGSIb3DQEBBQUAA4IIAQBVmjRqIgZpCUUz x66pXMcJTpuGvEGQ1JRS9s0jKZRLIs3ovf6dzVLyve2rh8mrq0YEtL2iPyIwR1DA S4x2DwP1ktKxLcR6NZzJc4frpp/eD3ON03+Z2LqPb8Tzvhqui6KUNpDi5euNBfT8 Zd+V8cSUTRdW1588j1A853e/lYYmZPtq/8ba6YyuQrtp5TPG2OkNxlUhScEMtKP5 m0tc3oNPQQPOKnloOH3wVEkg9bYQ/wjcM2aWm/8G3gCe185WQ5pR/HDN9vBRo7fN tFyFYs1xt8YrIyvdw25AQvo3/zcc9npXlIeFI9fUycdfwU0vyQ3XXOycJe6eMIKR lnK4dR34CWhXl7ItS+4l7HokKe5y1JwT26vcAwrYShTJCFdEXaG1U4A08hSXz1Le og6KEOkU79BgvmGh8SVd1RhzP5MQypbus0DS26NVz1dapQ5PdUff6veQmm31cC4d FBw3ZARZULDccoZvnDc9XSivc1Xv0u4kdHQT79zbMUn7P2P10wg+M6XnnQreUyxR jmfbm0FlQVC91KSWbIe8EuCUx9PA5MtzWACD4awnhdadU51cvQo+A0OcDJH1bXv4 QHJ1qxF2kSvhxqofcGl2cBUJ/pPQ1i23FWqbZ1y0aZ8lpn2K+30iqXHyzk6MuCEt 3v5BcQ3/nexzprsHT4gOWEcufqnCx3jdunqeTuAwTmNvhdQgQen6/kNF5/uverLO pAUdIppYht/kzkyp/tgWpW/72M5We/XWIO/kR81jJP+5vvFIo8EBcua9wK3tJg3K NJ/8Ai0gTwUgriE9DMIgPD/wBITcz4n9uSWRjtBD5rMgq1wt1UCeoEvY9LLMffFY Co6H7YisNpbkVqARivKa0LNXozS7Gas44XRrIsQxzgHVGzbjHjhMM5PfQONZV06s bnseWj3FHVusyBCCNQIisvx16BCRjcR9eJNHnhydrGtiAliM1hwj1q94woCcpKok VBS1FJjG+CsaJMtxMgrimw5pa91+jGTRLmPvDn+xPohMnVXlyW4XBLdB/72KQcsl MW9Edz9HsfyBiAeOBUkgtxHZaQMqA525M4Sa399640Zzo9iijFMZiFVMdLj2RIQr 0RQtTjkukmj/afyFYhvrVU/vJYRiRZnW2E5vP1MIfR0GlYGAf09OdDaYteKHcJjc 1/XcUhXmxtZ5ljl/j5XPq4BTrRsLRUAO1Bi9LN6Kd3b98kRHxiHQ5HTw2BgFyHww csff8bv8AjCp9EImWQ2TBYKhc+005ThdzVCQ/pT8E7y9/KiiiKdzxLKo0V2IxAKi evEEyf6MdMnvHWRBn6welmdkrKsoQced98CYG24HwmR9WoNmVig2nOf7HHcOKKDE 92t5OQQghMdXk7wboOq860LlqBH+/KxlzP34KIj0pZrlc1HgqJsNA3dO5eCYs4ja febGnnwUZsEuU0qSBzegfuk9CeQVfM/9uEGl755mncReBx2H+EGt6ucv0kFjGDf5 FONN0OX3Q/0V4/k2cwYm3wFPqcNO3iBGd5i0eiQrO3UrTliNm12kxxagvDKIP6GD 8wDI+NhY6WNdTCu18HJB2Kt3N9ZydK62NpzIpoNJS+DJVgspvgAwy93WyEKKANns FdE0cfJbZIf2J9K364awkL8p2yGeNozjIC+VI1FsG8Kk1ebYAkNnoP6bUANEf7vk ctXR5NqPkhRk+10UEBJKlQbJZQgpyiGjJjgRySffcGcE/cpIMn9jskV0MVBPh9kg cNIhcLHWEJ0zXXiDkW1Vguza5GJjx4FG1xllcipDGZC41yNNTBzgRKlmZ6zucXkn Jnhtcg71XUsjtXx8ZekXxjoLDd1eHlHDhrjsf8cnSqVG6GotGcGHo8uZk4dkolUU TLdDpZPX59JOeUDKZZlGPT96gHqIaswe5WszRvRQwNUfCbjNii6hJ+tdc6foawrl V4IqsPziVFJW8KupEsYjlgcknOC8RqW0IATaCZNj5dQuwn7FMe21FXSGF7mz8yaK HQJq2ho/6LrxBG2UUVTiWrRZgx1g0C1zzAe1Joz518aIke+Az10PoWDLRdRCItGx cB390LcwkDrGSG1n5TLaj9vjqOMdICWiHOFMuaT2xj9cWA27xrJ3ARaRnxcGDbdA PsyPjpxL4J1+mx4Fq4gi+tMoG1cUZEo+JCw4TSFpAHMu0FUtdPIV6JRDPkAqxsa5 alveoswYUFRdTiqFbPaSiykZfufqSuAiKyW892bPd5pBdPI8FA10afVQg83NLyHb IkaK0PdRGpVX8gWLGhntO0XoNsJufvtXIgAfBlOprpPGj3EqMUWS545t5pkiwIP8 79xXZndPojYx+6ETjeXKo5V9AQxkcDtTQmiAx7udqAA1aZgMqGfYQ+Wqz5XgUZWk Fz9CnbgEztN5ecjTihYykuDXou7XN0wvrLh7vkX28RgznHs3piTZvECrAOnDN4ur 2LbzXoFOsBRrBz4f7ML2RCKVu7Pmb9b5cGW6CoNlqg4TL4MTI1OLQBb6zi/8TQT4 69isxTbCFVdIOOxVs7Qeuq3SQgYXDXPIV6a+lk2p8sD7eiEc9clwqYKQtfEM1HkQ voGm6VxhnHd5mqTDNyZXN8lSLPoI/9BfxmHA9Ha+/N5Oz6tRmXHH33701s8GVhkT UwttdFlIGZtTBS2dMlTT5SxTi2Q+1GR744AJFMz+FkZja3Fp+PnLJ/aIVLxFs84C yJTuQFv5QgLC/7DYLOsof17JJgGZpw== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 0 (0x0) Signature Algorithm: sha1WithRSAEncryption Issuer: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root Validity Not Before: Dec 5 13:56:05 1999 GMT Not After : Apr 3 13:56:05 2037 GMT Subject: O=Thawte, OU=Thawte Universal CA Root, CN=Thawte Universal CA Root Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (16384 bit) Modulus (16384 bit): 00:e2:89:05:6d:c3:7f:ad:a6:89:3a:ff:bb:c7:cd: 9d:37:b1:e1:d2:21:1e:9b:61:2a:15:e7:7b:57:4f: 55:3c:d0:bb:f9:d9:3d:3e:a6:bc:ec:b4:ad:53:9a: 16:02:eb:0b:72:fd:8a:f2:8f:44:05:c5:eb:d3:e5: bd:b6:44:39:e6:fb:47:bf:6a:9e:0a:95:18:e2:68: e2:d6:96:d6:21:ad:88:fd:f5:17:f5:d3:da:42:a5: 90:ed:29:95:96:75:3a:da:87:a1:d4:f5:d3:87:de: 05:62:a6:e3:66:74:92:cf:a5:bc:bb:df:68:ff:71: 75:56:41:59:35:eb:33:5a:66:51:f2:d2:a3:0a:c1: 8c:ce:73:5c:11:6f:2d:8c:95:8c:91:b1:fd:cf:e5: ad:56:95:cc:85:92:83:90:55:41:c9:c2:77:ed:f9: a3:74:42:0a:68:08:f3:d0:d1:65:fd:67:2c:34:ff: 24:7f:e7:79:c8:07:3b:25:57:dd:a4:0c:98:3d:be: e0:cc:19:65:db:f2:54:a2:af:42:d4:9d:e2:ae:84: 23:25:09:33:12:b5:6a:1e:76:c4:8b:d9:49:00:6c: 5e:ba:1f:f2:1b:da:67:ca:27:aa:a3:44:23:1b:83: 82:ce:f2:ab:33:ed:54:a4:dc:c9:ab:59:65:d1:38: 0e:c1:3e:1b:67:8f:d6:75:01:e0:55:22:dd:76:77: ec:8e:dd:f4:cf:79:22:6d:b9:57:03:f5:99:08:a7: 3c:3e:34:fb:c4:17:ae:23:58:cd:24:f3:23:ca:6a: 02:28:94:01:81:34:b4:6c:6b:ae:8b:1a:c3:a3:d2: 09:3c:16:54:f5:36:5f:24:e3:9f:4a:a1:e2:64:c6: 16:c3:a6:81:7a:24:36:47:8e:c1:5e:0e:fb:f9:15: 78:04:d6:0e:59:d9:9d:58:66:62:d2:94:29:32:32: c8:78:b9:66:f6:b5:56:e1:6c:c6:14:4b:96:52:59: 91:02:24:6a:55:47:d7:3f:b6:23:1a:60:77:97:2e: e2:40:af:9e:04:57:9e:ad:11:c5:c9:43:70:ef:48: b4:5e:ac:1c:69:2e:2e:82:d5:5b:8b:be:82:be:19: 14:5e:e7:0d:22:c7:51:1b:ff:1e:9b:f1:30:8f:71: 31:06:b3:34:27:8f:5f:7a:66:82:4f:8a:2d:13:ab: 42:cf:21:56:9e:97:8e:66:36:0f:96:9b:e5:2b:f4: 02:a9:2a:6a:8c:2c:c4:c3:b8:70:2c:2d:29:1e:3f: 50:77:1e:6d:2a:54:e4:55:0a:91:38:a1:c5:b5:66: a2:76:5a:ee:0f:bf:b4:67:e1:28:6e:0f:e1:36:a1: 82:d1:bf:d4:77:e1:c4:67:32:93:78:c8:e7:54:53: fe:23:79:e6:68:cc:26:90:f6:10:63:5d:2a:6f:91: 2d:a4:73:32:51:21:f2:bb:15:df:aa:24:08:48:06: de:a1:9e:26:bf:ba:83:bf:7c:a4:c8:a0:8c:bd:d2: ff:bc:84:69:27:13:24:18:c4:45:18:23:26:5e:18: 14:ca:2e:88:87:62:a3:53:e6:21:b7:b8:85:7b:9a: 85:bb:15:26:72:f8:b9:f7:6a:74:0f:49:3f:92:be: a9:05:b7:99:27:bf:bf:09:17:4b:99:4c:ad:11:10: 7c:df:74:31:f6:8f:26:5f:aa:88:ae:38:57:c8:55: 2d:d3:fb:d8:1b:51:99:be:25:1b:3a:ba:c0:7d:1b: ed:ce:d2:49:b9:cf:f3:c5:7d:89:90:81:d8:69:48: 20:10:a3:f8:ef:92:51:18:32:8b:11:18:c0:3f:1b: 85:56:ce:57:c9:f2:82:64:c6:df:02:09:2e:4a:11: 2f:b1:27:6d:37:52:f0:f0:16:61:f1:67:8d:df:87: 72:af:87:da:cf:fb:50:94:6e:d4:94:85:eb:8a:2c: ea:21:f5:96:4a:44:d5:e0:ce:6a:74:44:4d:d0:05: d3:87:15:ed:36:d0:a4:8b:66:55:70:93:ee:47:06: c1:7e:2e:a5:18:79:67:f3:28:85:f1:70:f7:0e:83: a4:7e:54:9e:5a:76:32:cb:65:1b:b8:cd:fb:c8:28: 03:d2:54:91:d1:a7:c5:85:43:08:17:76:a5:e6:2f: 67:08:d8:a1:a2:82:2d:0c:f8:c1:af:63:d4:50:77: 6d:6b:46:4a:41:85:d5:90:5f:79:2d:c4:ec:d7:11: 87:40:8a:e1:68:e2:64:f8:55:32:fb:6f:93:2c:da: 77:d9:21:c1:17:e5:36:2c:4e:7e:90:7f:ac:94:2b: 32:67:be:38:50:76:b8:ae:41:b9:d7:21:c5:09:4c: 60:c8:a3:51:c4:34:9b:57:37:df:cb:c9:33:57:8b: eb:fb:76:9f:19:4d:c5:6a:1f:2a:45:ae:2b:ed:2f: 8d:a7:a5:00:cb:04:fa:25:62:2e:74:48:1b:ca:2a: 8c:ba:db:b6:7e:f6:bb:02:7c:a9:c3:db:58:78:a1: bf:f0:fe:1a:10:55:11:ce:e8:69:4e:96:65:c6:17: 03:d6:07:68:8c:54:82:ae:1c:22:55:3f:f1:f4:09: 97:28:c0:46:f7:4e:0b:25:1d:f7:07:d7:09:1d:3a: 18:57:38:3b:e8:33:06:e7:8f:78:46:1e:5b:f5:06: b6:ec:b8:a6:0d:f1:ba:13:4b:d6:18:20:dd:69:33: 4a:33:15:ae:b8:c8:98:8a:27:2c:93:bc:2d:fb:ee: 33:bf:66:e6:4d:ba:b6:9b:06:55:60:97:4b:bc:44: cd:7e:f4:a1:d8:aa:2f:c0:02:28:21:16:62:78:db: 08:54:f2:fc:f4:34:e3:c6:8f:1c:43:57:ce:90:1a: 4b:dc:2e:3b:28:91:89:3f:7a:da:35:1d:8e:2c:ee: 49:ec:f4:33:ad:c9:53:a8:8c:9f:04:53:3e:24:1c: 52:c9:12:f9:62:57:a3:bc:ee:2c:eb:40:7c:20:23: 70:2b:95:f9:73:17:8a:d1:c1:1c:69:a6:b7:38:9a: 67:f7:70:1d:7a:5a:0c:40:cf:62:0f:85:3c:c2:02: 4e:7e:b5:f6:c5:2a:29:84:b3:1f:37:2a:e1:aa:72: 42:c4:ed:6b:1a:8f:92:1c:5d:be:d1:f2:5b:f2:ab: aa:a9:d2:f5:b8:a4:41:2b:2b:91:6e:12:48:ca:98: d8:37:8d:c8:ed:00:30:b5:b6:04:4e:7e:9c:da:84: ec:c0:fa:7b:e5:1d:88:a4:53:46:b0:94:e4:5c:1b: a1:25:2c:0f:48:52:77:97:09:6c:ec:5b:18:33:83: 02:e5:82:7e:cd:85:21:30:11:fd:27:4f:cf:e4:1e: ec:3f:a5:57:6c:e9:2a:30:19:2a:88:e5:c3:69:38: ab:6f:39:71:7f:84:e1:41:c3:e1:cc:2a:89:20:52: 2e:83:0f:6c:39:3f:4b:2d:16:ac:2d:f0:24:ac:00: 73:f4:9b:b3:06:3f:05:b8:14:85:1f:ab:9e:5c:3c: 9e:62:9d:0e:6d:3b:80:09:fc:02:ea:a2:97:74:ca: c7:f9:e3:56:e1:c3:ca:a5:a6:9a:c0:90:e0:24:12: 53:d2:c2:8b:da:be:ed:02:43:5e:67:e1:89:98:79: ee:cb:aa:ca:c3:1b:dc:e7:a5:46:a5:7c:6b:16:87: b6:5a:28:d7:db:27:3c:5e:a5:bd:b6:51:dd:1f:43: cf:3b:26:c8:3a:8d:25:61:c1:49:f4:3c:1b:c9:44: ea:af:1c:c2:2b:94:01:2a:0e:30:d1:5b:8b:2b:47: e5:c3:d1:04:03:9b:0e:39:2c:d6:27:d4:e6:70:5a: d9:75:cf:2a:d8:c9:00:05:e4:13:88:ec:c3:39:fb: 87:61:30:36:43:03:c8:9e:9c:a2:06:c2:2f:c5:fc: f0:80:63:b1:54:04:a0:4c:a9:2e:c6:f5:76:7a:d8: d0:e4:d4:94:11:e5:15:b5:78:06:dc:b8:80:8f:99: a9:20:33:3d:10:85:4c:65:09:ca:3e:58:5e:60:93: 9a:aa:62:5d:c0:51:06:1c:5d:60:a0:0d:9c:4b:43: f6:a7:16:21:a4:87:aa:f2:c1:2e:ee:92:30:b8:9e: df:df:10:01:8b:86:09:70:d8:6c:a8:b7:50:1e:16: 96:b4:f7:67:fd:35:3a:21:90:2a:32:c7:00:7b:4d: 07:10:09:b9:2f:73:d8:18:7e:67:99:04:4f:06:fc: 50:c7:85:9b:9d:40:9d:b3:96:37:fa:a5:dc:b2:72: 4e:ef:4e:09:2c:fd:91:fd:4d:f7:bb:a6:a1:3e:ab: 7b:a2:03:40:a6:a9:55:27:e2:fa:f9:19:ce:87:75: aa:f1:75:36:f3:f3:b8:91:f8:91:c3:8b:75:13:8e: 4c:65:9a:16:39:6a:e5:34:e8:7a:96:59:7f:35:b0: 00:fd:5b:69:fc:43:26:fa:f5:28:6e:fe:87:d9:7e: 24:fb:b4:a0:82:6e:54:a2:ff:ae:bf:62:b4:f4:72: 01:c2:cb:98:47:98:e1:4c:b5:17:80:80:ce:8f:a6: 28:ee:1e:45:6a:fb:df:f1:1d:fc:5a:3b:d6:ea:f4: 6c:1d:62:49:57:3b:8a:8f:86:ea:f0:53:04:ce:9c: 16:68:ff:ba:b9:fc:88:0f:47:f7:02:44:72:40:b8: ca:3b:2d:53:9d:dc:3c:56:8c:59:7b:68:1a:2c:8d: 71:bb:6c:00:c7:1a:ce:6f:40:92:b1:a3:2f:0f:d9: 44:f2:a3:70:2e:9e:ee:0e:ae:32:d0:3b:3e:8b:07: ea:e6:79:b3:5c:29:e2:7d:6b:a8:5e:f9:5a:31:e8: 08:96:a2:8c:03:98:46:f1:b8:7d:90:54:26:ed:76: 62:fe:9e:e9:9a:6e:5e:c9:49:c7:5c:34:53:29:54: d9:ec:e4:46:e1:80:3b:75:d9:df:fb:79:d5:87:f1: ba:9e:eb:19:ce:4c:52:73:e6:5b:87:ae:25:4f:39: 79:cc:c6:b8:f9:10:7b:ec:f0:9b:71:a4:05:a0:d3: 29:d3:4e:7f:1f:f4:2d:28:78:cc:55:95:7b:1e:91: 2f:cc:56:18:73:8b:b2:db:bc:69:07:e6:d0:d8:4f: ed:a2:ff:58:85:a3:6d:e0:4a:53:b7:67:7d:8d:0c: 5c:5b:7b:77:28:02:35:44:7a:04:d3:28:43:c8:6b: 30:17:5d:32:b8:29:35:ba:76:da:3b:14:4a:76:18: 58:a4:f8:92:3c:9e:4d:33:6f:46:6b:08:d9:31:48: 68:dd:f4:fb:24:56:34:b2:cf:69:66:be:48:d2:8a: 66:22:cd:f2:69:cd:c2:53:13:45:29:41:22:d6:5d: 98:1f:b6:a4:b2:a3:c2:ee:02:2f:51:1b:dc:83:a4: ec:70:25:a8:d4:08:61:32:6f:e4:a1:81:2e:7c:63: 72:fa:29:65:bc:70:44:cf:5d Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 55:9a:34:6a:22:06:69:09:45:33:c7:ae:a9:5c:c7:09:4e:9b: 86:bc:41:90:d4:94:52:f6:cd:23:29:94:4b:22:cd:e8:bd:fe: 9d:cd:52:f2:bd:ed:ab:87:c9:ab:ab:46:04:b4:bd:a2:3f:22: 30:47:50:c0:4b:8c:76:0f:03:f5:92:d2:b1:2d:c4:7a:35:9c: c9:73:87:eb:a6:9f:de:0f:73:8d:d3:7f:99:d8:ba:8f:6f:c4: f3:be:1a:ae:8b:a2:94:36:90:e2:e5:eb:8d:05:f4:fc:65:df: 95:f1:c4:94:4d:17:56:d7:9f:3c:8f:50:3c:e7:77:bf:95:86: 26:64:fb:6a:ff:c6:da:e9:8c:ae:42:bb:69:e5:33:c6:d8:e9: 0d:c6:55:21:49:c1:0c:b4:a3:f9:9b:4b:5c:de:83:4f:41:03: ce:2a:79:68:38:7d:f0:54:49:20:f5:b6:10:ff:08:dc:33:66: 96:9b:ff:06:de:00:9e:d7:ce:56:43:9a:51:fc:70:cd:f6:f0: 51:a3:b7:cd:b4:5c:85:62:cd:71:b7:c6:2b:23:2b:dd:c3:6e: 40:42:fa:37:ff:37:1c:f6:7a:57:94:87:85:23:d7:d4:c9:c7: 5f:c1:4d:2f:c9:0d:d7:5c:ec:9c:25:ee:9e:30:82:91:96:72: b8:75:1d:f8:09:68:57:97:b2:2d:4b:ee:25:ec:7a:24:29:ee: 72:d4:9c:13:db:ab:dc:03:0a:d8:4a:14:c9:08:57:44:5d:a1: b5:53:80:34:f2:14:97:cf:52:de:a2:0e:8a:10:e9:14:ef:d0: 60:be:61:a1:f1:25:5d:d5:18:73:3f:93:10:ca:96:ee:b3:40: d2:db:a3:55:cf:57:5a:a5:0e:4f:75:47:df:ea:f7:90:9a:6d: f5:70:2e:1d:14:1c:37:64:04:59:50:b0:dc:72:86:6f:9c:37: 3d:5d:28:af:73:55:ef:d2:ee:24:74:74:13:ef:dc:db:31:49: fb:3f:63:f5:d3:08:3e:33:a5:e7:9d:0a:de:53:2c:51:8e:67: db:9b:41:65:41:50:bd:d4:a4:96:6c:87:bc:12:e0:94:c7:d3: c0:e4:cb:73:58:00:83:e1:ac:27:85:d6:9d:53:9d:5c:bd:0a: 3e:03:43:9c:0c:91:f5:6d:7b:f8:40:72:75:ab:11:76:91:2b: e1:c6:aa:1f:70:69:76:70:15:09:fe:93:d0:d6:2d:b7:15:6a: 9b:67:5c:b4:69:9f:25:a6:7d:8a:fb:7d:22:a9:71:f2:ce:4e: 8c:b8:21:2d:de:fe:41:71:0d:ff:9d:ec:73:a6:bb:07:4f:88: 0e:58:47:2e:7e:a9:c2:c7:78:dd:ba:7a:9e:4e:e0:30:4e:63: 6f:85:d4:20:41:e9:fa:fe:43:45:e7:fb:af:7a:b2:ce:a4:05: 1d:22:9a:58:86:df:e4:ce:4c:a9:fe:d8:16:a5:6f:fb:d8:ce: 56:7b:f5:d6:20:ef:e4:47:cd:63:24:ff:b9:be:f1:48:a3:c1: 01:72:e6:bd:c0:ad:ed:26:0d:ca:34:9f:fc:02:2d:20:4f:05: 20:ae:21:3d:0c:c2:20:3c:3f:f0:04:84:dc:cf:89:fd:b9:25: 91:8e:d0:43:e6:b3:20:ab:5c:2d:d5:40:9e:a0:4b:d8:f4:b2: cc:7d:f1:58:0a:8e:87:ed:88:ac:36:96:e4:56:a0:11:8a:f2: 9a:d0:b3:57:a3:34:bb:19:ab:38:e1:74:6b:22:c4:31:ce:01: d5:1b:36:e3:1e:38:4c:33:93:df:40:e3:59:57:4e:ac:6e:7b: 1e:5a:3d:c5:1d:5b:ac:c8:10:82:35:02:22:b2:fc:75:e8:10: 91:8d:c4:7d:78:93:47:9e:1c:9d:ac:6b:62:02:58:8c:d6:1c: 23:d6:af:78:c2:80:9c:a4:aa:24:54:14:b5:14:98:c6:f8:2b: 1a:24:cb:71:32:0a:e2:9b:0e:69:6b:dd:7e:8c:64:d1:2e:63: ef:0e:7f:b1:3e:88:4c:9d:55:e5:c9:6e:17:04:b7:41:ff:bd: 8a:41:cb:25:31:6f:44:77:3f:47:b1:fc:81:88:07:8e:05:49: 20:b7:11:d9:69:03:2a:03:9d:b9:33:84:9a:df:df:7a:e3:46: 73:a3:d8:a2:8c:53:19:88:55:4c:74:b8:f6:44:84:2b:d1:14: 2d:4e:39:2e:92:68:ff:69:fc:85:62:1b:eb:55:4f:ef:25:84: 62:45:99:d6:d8:4e:6f:3f:53:08:7d:1d:06:95:81:80:7f:4f: 4e:74:36:98:b5:e2:87:70:98:dc:d7:f5:dc:52:15:e6:c6:d6: 79:96:39:7f:8f:95:cf:ab:80:53:ad:1b:0b:45:40:0e:d4:18: bd:2c:de:8a:77:76:fd:f2:44:47:c6:21:d0:e4:74:f0:d8:18: 05:c8:7c:30:72:c7:df:f1:bb:fc:02:30:a9:f4:42:26:59:0d: 93:05:82:a1:73:ed:34:e5:38:5d:cd:50:90:fe:94:fc:13:bc: bd:fc:a8:a2:88:a7:73:c4:b2:a8:d1:5d:88:c4:02:a2:7a:f1: 04:c9:fe:8c:74:c9:ef:1d:64:41:9f:ac:1e:96:67:64:ac:ab: 28:41:c7:9d:f7:c0:98:1b:6e:07:c2:64:7d:5a:83:66:56:28: 36:9c:e7:fb:1c:77:0e:28:a0:c4:f7:6b:79:39:04:20:84:c7: 57:93:bc:1b:a0:ea:bc:eb:42:e5:a8:11:fe:fc:ac:65:cc:fd: f8:28:88:f4:a5:9a:e5:73:51:e0:a8:9b:0d:03:77:4e:e5:e0: 98:b3:88:da:7d:e6:c6:9e:7c:14:66:c1:2e:53:4a:92:07:37: a0:7e:e9:3d:09:e4:15:7c:cf:fd:b8:41:a5:ef:9e:66:9d:c4: 5e:07:1d:87:f8:41:ad:ea:e7:2f:d2:41:63:18:37:f9:14:e3: 4d:d0:e5:f7:43:fd:15:e3:f9:36:73:06:26:df:01:4f:a9:c3: 4e:de:20:46:77:98:b4:7a:24:2b:3b:75:2b:4e:58:8d:9b:5d: a4:c7:16:a0:bc:32:88:3f:a1:83:f3:00:c8:f8:d8:58:e9:63: 5d:4c:2b:b5:f0:72:41:d8:ab:77:37:d6:72:74:ae:b6:36:9c: c8:a6:83:49:4b:e0:c9:56:0b:29:be:00:30:cb:dd:d6:c8:42: 8a:00:d9:ec:15:d1:34:71:f2:5b:64:87:f6:27:d2:b7:eb:86: b0:90:bf:29:db:21:9e:36:8c:e3:20:2f:95:23:51:6c:1b:c2: a4:d5:e6:d8:02:43:67:a0:fe:9b:50:03:44:7f:bb:e4:72:d5: d1:e4:da:8f:92:14:64:fb:5d:14:10:12:4a:95:06:c9:65:08: 29:ca:21:a3:26:38:11:c9:27:df:70:67:04:fd:ca:48:32:7f: 63:b2:45:74:31:50:4f:87:d9:20:70:d2:21:70:b1:d6:10:9d: 33:5d:78:83:91:6d:55:82:ec:da:e4:62:63:c7:81:46:d7:19: 65:72:2a:43:19:90:b8:d7:23:4d:4c:1c:e0:44:a9:66:67:ac: ee:71:79:27:26:78:6d:72:0e:f5:5d:4b:23:b5:7c:7c:65:e9: 17:c6:3a:0b:0d:dd:5e:1e:51:c3:86:b8:ec:7f:c7:27:4a:a5: 46:e8:6a:2d:19:c1:87:a3:cb:99:93:87:64:a2:55:14:4c:b7: 43:a5:93:d7:e7:d2:4e:79:40:ca:65:99:46:3d:3f:7a:80:7a: 88:6a:cc:1e:e5:6b:33:46:f4:50:c0:d5:1f:09:b8:cd:8a:2e: a1:27:eb:5d:73:a7:e8:6b:0a:e5:57:82:2a:b0:fc:e2:54:52: 56:f0:ab:a9:12:c6:23:96:07:24:9c:e0:bc:46:a5:b4:20:04: da:09:93:63:e5:d4:2e:c2:7e:c5:31:ed:b5:15:74:86:17:b9: b3:f3:26:8a:1d:02:6a:da:1a:3f:e8:ba:f1:04:6d:94:51:54: e2:5a:b4:59:83:1d:60:d0:2d:73:cc:07:b5:26:8c:f9:d7:c6: 88:91:ef:80:cf:5d:0f:a1:60:cb:45:d4:42:22:d1:b1:70:1d: fd:d0:b7:30:90:3a:c6:48:6d:67:e5:32:da:8f:db:e3:a8:e3: 1d:20:25:a2:1c:e1:4c:b9:a4:f6:c6:3f:5c:58:0d:bb:c6:b2: 77:01:16:91:9f:17:06:0d:b7:40:3e:cc:8f:8e:9c:4b:e0:9d: 7e:9b:1e:05:ab:88:22:fa:d3:28:1b:57:14:64:4a:3e:24:2c: 38:4d:21:69:00:73:2e:d0:55:2d:74:f2:15:e8:94:43:3e:40: 2a:c6:c6:b9:6a:5b:de:a2:cc:18:50:54:5d:4e:2a:85:6c:f6: 92:8b:29:19:7e:e7:ea:4a:e0:22:2b:25:bc:f7:66:cf:77:9a: 41:74:f2:3c:14:0d:74:69:f5:50:83:cd:cd:2f:21:db:22:46: 8a:d0:f7:51:1a:95:57:f2:05:8b:1a:19:ed:3b:45:e8:36:c2: 6e:7e:fb:57:22:00:1f:06:53:a9:ae:93:c6:8f:71:2a:31:45: 92:e7:8e:6d:e6:99:22:c0:83:fc:ef:dc:57:66:77:4f:a2:36: 31:fb:a1:13:8d:e5:ca:a3:95:7d:01:0c:64:70:3b:53:42:68: 80:c7:bb:9d:a8:00:35:69:98:0c:a8:67:d8:43:e5:aa:cf:95: e0:51:95:a4:17:3f:42:9d:b8:04:ce:d3:79:79:c8:d3:8a:16: 32:92:e0:d7:a2:ee:d7:37:4c:2f:ac:b8:7b:be:45:f6:f1:18: 33:9c:7b:37:a6:24:d9:bc:40:ab:00:e9:c3:37:8b:ab:d8:b6: f3:5e:81:4e:b0:14:6b:07:3e:1f:ec:c2:f6:44:22:95:bb:b3: e6:6f:d6:f9:70:65:ba:0a:83:65:aa:0e:13:2f:83:13:23:53: 8b:40:16:fa:ce:2f:fc:4d:04:f8:eb:d8:ac:c5:36:c2:15:57: 48:38:ec:55:b3:b4:1e:ba:ad:d2:42:06:17:0d:73:c8:57:a6: be:96:4d:a9:f2:c0:fb:7a:21:1c:f5:c9:70:a9:82:90:b5:f1: 0c:d4:79:10:be:81:a6:e9:5c:61:9c:77:79:9a:a4:c3:37:26: 57:37:c9:52:2c:fa:08:ff:d0:5f:c6:61:c0:f4:76:be:fc:de: 4e:cf:ab:51:99:71:c7:df:7e:f4:d6:cf:06:56:19:13:53:0b: 6d:74:59:48:19:9b:53:05:2d:9d:32:54:d3:e5:2c:53:8b:64: 3e:d4:64:7b:e3:80:09:14:cc:fe:16:46:63:6b:71:69:f8:f9: cb:27:f6:88:54:bc:45:b3:ce:02:c8:94:ee:40:5b:f9:42:02: c2:ff:b0:d8:2c:eb:28:7f:5e:c9:26:01:99:a7 UPS Document Exchange by DST ============================ MD5 Fingerprint: 78:A5:FB:10:4B:E4:63:2E:D2:6B:FB:F2:B6:C2:4B:8E PEM Data: -----BEGIN CERTIFICATE----- MIID+DCCAuACEQDQHkCLAAACfAAAAAcAAAABMA0GCSqGSIb3DQEBBQUAMIG5MQsw CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEeMBwGA1UE CxMVVW5pdGVkIFBhcmNlbCBTZXJ2aWNlMRkwFwYDVQQDExBEU1QgKFVQUykgUm9v dENBMSEwHwYJKoZIhvcNAQkBFhJjYUBkaWdzaWd0cnVzdC5jb20wHhcNOTgxMjEw MDAyNTQ2WhcNMDgxMjA3MDAyNTQ2WjCBuTELMAkGA1UEBhMCdXMxDTALBgNVBAgT BFV0YWgxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MSQwIgYDVQQKExtEaWdpdGFs IFNpZ25hdHVyZSBUcnVzdCBDby4xHjAcBgNVBAsTFVVuaXRlZCBQYXJjZWwgU2Vy dmljZTEZMBcGA1UEAxMQRFNUIChVUFMpIFJvb3RDQTEhMB8GCSqGSIb3DQEJARYS Y2FAZGlnc2lndHJ1c3QuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC AQEA7xfsrynm2SsnwNt7JJ9m9ASjwq0KyrDNhCuqN/OAoWDvQo/lXXdfV0JU3Svb YbJxXpN7b1/rJCvnpPLr8XOzC431Wdcy36yQjk4xuiVNtgym8eWvDOHlb1IDFcHf vn5KpqYYRnA/76dNqNz1dNlhekA8oZQo6sKUiMs3FQUZPJViuhwt+yiM0ciekjxb EVQ7eNlHO5stSuY+e2vf9PYFzyj2upg2AJ48N4UKnN63pIXFY/23YhRtFx7MioCF QjIRsCHinXfJgBZBnuvlFIl/t8O8T8Gfh5uW7GP2+ZBWDpWjIwqMZNqbuxx3sExd 5sjo9X15LVckP8zjPSyYzxKfFwIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQC7OI4E IiZYDiFEVsy9WXwpaMtcD8iGVD+BeKetj8xG9xxUuHktW3IFaugh0OwdHf6kNFG+ 7u3OzJwWaOJddXMIQzGRahArEMJLafjJrZio/bjv9qvwXyHvy4VrCe0vSGa1YHLA 6KDHmNsO9xtzjTQICnvFd2KqMCObsB6LgJhU3AWHs6liWfyLtxWarETszzUa9w8u XZJLAch77qA37eQdgg2ZQUMXrdTVyuP5fReiAdAwD0C53LkEgmmDtvkP+gaS96j0 1hcc8F5/xCnI5uHi/zZoIVGu/6m6hJKtinsz2JDSwXltMzM5dKwbOHGfLAeQ6h3g 04lfy+8UjSdUpb1G -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: d0:1e:40:8b:00:00:02:7c:00:00:00:07:00:00:00:01 Signature Algorithm: sha1WithRSAEncryption Issuer: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com Validity Not Before: Dec 10 00:25:46 1998 GMT Not After : Dec 7 00:25:46 2008 GMT Subject: C=us, ST=Utah, L=Salt Lake City, O=Digital Signature Trust Co., OU=United Parcel Service, CN=DST (UPS) RootCA/Email=ca@digsigtrust.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ef:17:ec:af:29:e6:d9:2b:27:c0:db:7b:24:9f: 66:f4:04:a3:c2:ad:0a:ca:b0:cd:84:2b:aa:37:f3: 80:a1:60:ef:42:8f:e5:5d:77:5f:57:42:54:dd:2b: db:61:b2:71:5e:93:7b:6f:5f:eb:24:2b:e7:a4:f2: eb:f1:73:b3:0b:8d:f5:59:d7:32:df:ac:90:8e:4e: 31:ba:25:4d:b6:0c:a6:f1:e5:af:0c:e1:e5:6f:52: 03:15:c1:df:be:7e:4a:a6:a6:18:46:70:3f:ef:a7: 4d:a8:dc:f5:74:d9:61:7a:40:3c:a1:94:28:ea:c2: 94:88:cb:37:15:05:19:3c:95:62:ba:1c:2d:fb:28: 8c:d1:c8:9e:92:3c:5b:11:54:3b:78:d9:47:3b:9b: 2d:4a:e6:3e:7b:6b:df:f4:f6:05:cf:28:f6:ba:98: 36:00:9e:3c:37:85:0a:9c:de:b7:a4:85:c5:63:fd: b7:62:14:6d:17:1e:cc:8a:80:85:42:32:11:b0:21: e2:9d:77:c9:80:16:41:9e:eb:e5:14:89:7f:b7:c3: bc:4f:c1:9f:87:9b:96:ec:63:f6:f9:90:56:0e:95: a3:23:0a:8c:64:da:9b:bb:1c:77:b0:4c:5d:e6:c8: e8:f5:7d:79:2d:57:24:3f:cc:e3:3d:2c:98:cf:12: 9f:17 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption bb:38:8e:04:22:26:58:0e:21:44:56:cc:bd:59:7c:29:68:cb: 5c:0f:c8:86:54:3f:81:78:a7:ad:8f:cc:46:f7:1c:54:b8:79: 2d:5b:72:05:6a:e8:21:d0:ec:1d:1d:fe:a4:34:51:be:ee:ed: ce:cc:9c:16:68:e2:5d:75:73:08:43:31:91:6a:10:2b:10:c2: 4b:69:f8:c9:ad:98:a8:fd:b8:ef:f6:ab:f0:5f:21:ef:cb:85: 6b:09:ed:2f:48:66:b5:60:72:c0:e8:a0:c7:98:db:0e:f7:1b: 73:8d:34:08:0a:7b:c5:77:62:aa:30:23:9b:b0:1e:8b:80:98: 54:dc:05:87:b3:a9:62:59:fc:8b:b7:15:9a:ac:44:ec:cf:35: 1a:f7:0f:2e:5d:92:4b:01:c8:7b:ee:a0:37:ed:e4:1d:82:0d: 99:41:43:17:ad:d4:d5:ca:e3:f9:7d:17:a2:01:d0:30:0f:40: b9:dc:b9:04:82:69:83:b6:f9:0f:fa:06:92:f7:a8:f4:d6:17: 1c:f0:5e:7f:c4:29:c8:e6:e1:e2:ff:36:68:21:51:ae:ff:a9: ba:84:92:ad:8a:7b:33:d8:90:d2:c1:79:6d:33:33:39:74:ac: 1b:38:71:9f:2c:07:90:ea:1d:e0:d3:89:5f:cb:ef:14:8d:27: 54:a5:bd:46 ValiCert Class 1 VA =================== MD5 Fingerprint: 65:58:AB:15:AD:57:6C:1E:A8:A7:B5:69:AC:BF:FF:EB PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+ TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0 LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 25 22:23:48 1999 GMT Not After : Jun 25 22:23:48 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 1 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d8:59:82:7a:89:b8:96:ba:a6:2f:68:6f:58:2e: a7:54:1c:06:6e:f4:ea:8d:48:bc:31:94:17:f0:f3: 4e:bc:b2:b8:35:92:76:b0:d0:a5:a5:01:d7:00:03: 12:22:19:08:f8:ff:11:23:9b:ce:07:f5:bf:69:1a: 26:fe:4e:e9:d1:7f:9d:2c:40:1d:59:68:6e:a6:f8: 58:b0:9d:1a:8f:d3:3f:f1:dc:19:06:81:a8:0e:e0: 3a:dd:c8:53:45:09:06:e6:0f:70:c3:fa:40:a6:0e: e2:56:05:0f:18:4d:fc:20:82:d1:73:55:74:8d:76: 72:a0:1d:9d:1d:c0:dd:3f:71 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 50:68:3d:49:f4:2c:1c:06:94:df:95:60:7f:96:7b:17:fe:4f: 71:ad:64:c8:dd:77:d2:ef:59:55:e8:3f:e8:8e:05:2a:21:f2: 07:d2:b5:a7:52:fe:9c:b1:b6:e2:5b:77:17:40:ea:72:d6:23: cb:28:81:32:c3:00:79:18:ec:59:17:89:c9:c6:6a:1e:71:c9: fd:b7:74:a5:25:45:69:c5:48:ab:19:e1:45:8a:25:6b:19:ee: e5:bb:12:f5:7f:f7:a6:8d:51:c3:f0:9d:74:b7:a9:3e:a0:a5: ff:b6:49:03:13:da:22:cc:ed:71:82:2b:99:cf:3a:b7:f5:2d: 72:c8 ValiCert Class 2 VA =================== MD5 Fingerprint: A9:23:75:9B:BA:49:36:6E:31:C2:DB:F2:E7:66:BA:87 PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9 WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 26 00:19:54 1999 GMT Not After : Jun 26 00:19:54 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 2 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ce:3a:71:ca:e5:ab:c8:59:92:55:d7:ab:d8:74: 0e:f9:ee:d9:f6:55:47:59:65:47:0e:05:55:dc:eb: 98:36:3c:5c:53:5d:d3:30:cf:38:ec:bd:41:89:ed: 25:42:09:24:6b:0a:5e:b3:7c:dd:52:2d:4c:e6:d4: d6:7d:5a:59:a9:65:d4:49:13:2d:24:4d:1c:50:6f: b5:c1:85:54:3b:fe:71:e4:d3:5c:42:f9:80:e0:91: 1a:0a:5b:39:36:67:f3:3f:55:7c:1b:3f:b4:5f:64: 73:34:e3:b4:12:bf:87:64:f8:da:12:ff:37:27:c1: b3:43:bb:ef:7b:6e:2e:69:f7 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 3b:7f:50:6f:6f:50:94:99:49:62:38:38:1f:4b:f8:a5:c8:3e: a7:82:81:f6:2b:c7:e8:c5:ce:e8:3a:10:82:cb:18:00:8e:4d: bd:a8:58:7f:a1:79:00:b5:bb:e9:8d:af:41:d9:0f:34:ee:21: 81:19:a0:32:49:28:f4:c4:8e:56:d5:52:33:fd:50:d5:7e:99: 6c:03:e4:c9:4c:fc:cb:6c:ab:66:b3:4a:21:8c:e5:b5:0c:32: 3e:10:b2:cc:6c:a1:dc:9a:98:4c:02:5b:f3:ce:b9:9e:a5:72: 0e:4a:b7:3f:3c:e6:16:68:f8:be:ed:74:4c:bc:5b:d5:62:1f: 43:dd ValiCert Class 3 VA =================== MD5 Fingerprint: A2:6F:53:B7:EE:40:DB:4A:68:E7:FA:18:D9:10:4B:72 PEM Data: -----BEGIN CERTIFICATE----- MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0 IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG 9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs 2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 1 (0x1) Signature Algorithm: sha1WithRSAEncryption Issuer: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Validity Not Before: Jun 26 00:22:33 1999 GMT Not After : Jun 26 00:22:33 2019 GMT Subject: L=ValiCert Validation Network, O=ValiCert, Inc., OU=ValiCert Class 3 Policy Validation Authority, CN=http://www.valicert.com//Email=info@valicert.com Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e3:98:51:96:1c:e8:d5:b1:06:81:6a:57:c3:72: 75:93:ab:cf:9e:a6:fc:f3:16:52:d6:2d:4d:9f:35: 44:a8:2e:04:4d:07:49:8a:38:29:f5:77:37:e7:b7: ab:5d:df:36:71:14:99:8f:dc:c2:92:f1:e7:60:92: 97:ec:d8:48:dc:bf:c1:02:20:c6:24:a4:28:4c:30: 5a:76:6d:b1:5c:f3:dd:de:9e:10:71:a1:88:c7:5b: 9b:41:6d:ca:b0:b8:8e:15:ee:ad:33:2b:cf:47:04: 5c:75:71:0a:98:24:98:29:a7:49:59:a5:dd:f8:b7: 43:62:61:f3:d3:e2:d0:55:3f Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 56:bb:02:58:84:67:08:2c:df:1f:db:7b:49:33:f5:d3:67:9d: f4:b4:0a:10:b3:c9:c5:2c:e2:92:6a:71:78:27:f2:70:83:42: d3:3e:cf:a9:54:f4:f1:d8:92:16:8c:d1:04:cb:4b:ab:c9:9f: 45:ae:3c:8a:a9:b0:71:33:5d:c8:c5:57:df:af:a8:35:b3:7f: 89:87:e9:e8:25:92:b8:7f:85:7a:ae:d6:bc:1e:37:58:2a:67: c9:91:cf:2a:81:3e:ed:c6:39:df:c0:3e:19:9c:19:cc:13:4d: 82:41:b5:8c:de:e0:3d:60:08:20:0f:45:7e:6b:a2:7f:a3:8c: 15:ee VeriSign Class 4 Primary CA =========================== MD5 Fingerprint: 1B:D1:AD:17:8B:7F:22:13:24:F5:26:E2:5D:4E:B9:10 PEM Data: -----BEGIN CERTIFICATE----- MIICMTCCAZoCBQKmAAABMA0GCSqGSIb3DQEBAgUAMF8xCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NjAxMjkwMDAwMDBa Fw05OTEyMzEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2ln biwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZp Y2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0LJ1 9njQrlpQ9OlQqZ+M1++RlHDo0iSQdomF1t+s5gEXMoDwnZNHvJplnR+Xrr/phnVj IIm9gFidBAydqMEk6QvlMXi9/C0MN2qeeIDpRnX57aP7E3vIwUzSo+/1PLBij0pd O92VZ48TucE81qcmm+zDO3rZTbxtm+gVAePwR6kCAwEAATANBgkqhkiG9w0BAQIF AAOBgQBT3dPwnCR+QKri/AAa19oM/DJhuBUNlvP6Vxt/M3yv6ZiaYch6s7f/sdyZ g9ysEvxwyR84Qu1E9oAuW2szaayc01znX1oYx7EteQSWQZGZQbE8DbqEOcY7l/Am yY7uvcxClf8exwI/VAx49byqYHwCaejcrOICdmHEPgPq0ook0Q== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:a6:00:00:01 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Dec 31 23:59:59 1999 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:d0:b2:75:f6:78:d0:ae:5a:50:f4:e9:50:a9:9f: 8c:d7:ef:91:94:70:e8:d2:24:90:76:89:85:d6:df: ac:e6:01:17:32:80:f0:9d:93:47:bc:9a:65:9d:1f: 97:ae:bf:e9:86:75:63:20:89:bd:80:58:9d:04:0c: 9d:a8:c1:24:e9:0b:e5:31:78:bd:fc:2d:0c:37:6a: 9e:78:80:e9:46:75:f9:ed:a3:fb:13:7b:c8:c1:4c: d2:a3:ef:f5:3c:b0:62:8f:4a:5d:3b:dd:95:67:8f: 13:b9:c1:3c:d6:a7:26:9b:ec:c3:3b:7a:d9:4d:bc: 6d:9b:e8:15:01:e3:f0:47:a9 Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 53:dd:d3:f0:9c:24:7e:40:aa:e2:fc:00:1a:d7:da:0c:fc:32: 61:b8:15:0d:96:f3:fa:57:1b:7f:33:7c:af:e9:98:9a:61:c8: 7a:b3:b7:ff:b1:dc:99:83:dc:ac:12:fc:70:c9:1f:38:42:ed: 44:f6:80:2e:5b:6b:33:69:ac:9c:d3:5c:e7:5f:5a:18:c7:b1: 2d:79:04:96:41:91:99:41:b1:3c:0d:ba:84:39:c6:3b:97:f0: 26:c9:8e:ee:bd:cc:42:95:ff:1e:c7:02:3f:54:0c:78:f5:bc: aa:60:7c:02:69:e8:dc:ac:e2:02:76:61:c4:3e:03:ea:d2:8a: 24:d1 Verisign Class 1 Public Primary Certification Authority ======================================================= MD5 Fingerprint: 97:60:E8:57:5F:D3:50:47:E5:43:0C:94:36:8A:B0:62 PEM Data: -----BEGIN CERTIFICATE----- MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05 NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR 4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5 FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx lA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: cd:ba:7f:56:f0:df:e4:bc:54:fe:22:ac:b3:72:aa:55 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:e5:19:bf:6d:a3:56:61:2d:99:48:71:f6:67:de: b9:8d:eb:b7:9e:86:80:0a:91:0e:fa:38:25:af:46: 88:82:e5:73:a8:a0:9b:24:5d:0d:1f:cc:65:6e:0c: b0:d0:56:84:18:87:9a:06:9b:10:a1:73:df:b4:58: 39:6b:6e:c1:f6:15:d5:a8:a8:3f:aa:12:06:8d:31: ac:7f:b0:34:d7:8f:34:67:88:09:cd:14:11:e2:4e: 45:56:69:1f:78:02:80:da:dc:47:91:29:bb:36:c9: 63:5c:c5:e0:d7:2d:87:7b:a1:b7:32:b0:7b:30:ba: 2a:2f:31:aa:ee:a3:67:da:db Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 4c:3f:b8:8b:c6:68:df:ee:43:33:0e:5d:e9:a6:cb:07:84:4d: 7a:33:ff:92:1b:f4:36:ad:d8:95:22:36:68:11:6c:7c:42:cc: f3:9c:2e:c4:07:3f:14:b0:0f:4f:ff:90:92:76:f9:e2:bc:4a: e9:8f:cd:a0:80:0a:f7:c5:29:f1:82:22:5d:b8:b1:dd:81:23: a3:7b:25:15:46:30:79:16:f8:ea:05:4b:94:7f:1d:c2:1c:c8: e3:b7:f4:10:40:3c:13:c3:5f:1f:53:e8:48:e4:86:b4:7b:a1: 35:b0:7b:25:ba:b8:d3:8e:ab:3f:38:9d:00:34:00:98:f3:d1: 71:94 Verisign Class 1 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: F2:7D:E9:54:E4:A3:22:0D:76:9F:E7:0B:BB:B3:24:2B PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEDnKVIn+UCIy/jLZ2/sbhBkwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTE4MDUxODIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID AQABMA0GCSqGSIb3DQEBBQUAA4GBAIv3GhDOdlwHq4OZ3BeAbzQ5XZg+a3Is4cei e0ApuXiIukzFo2penm574/ICQQxmvq37rqIUzpLzojSLtLK2JPLl1eDI5WJthHvL vrsDi3xXyvA3qZCviu4Dvh0onNkmdqDNxJ1O8K4HFtW+r1cIatCgQkJCHvQgzKV4 gpUmOIpH -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 39:ca:54:89:fe:50:22:32:fe:32:d9:db:fb:1b:84:19 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : May 18 23:59:59 2018 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 1 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:aa:d0:ba:be:16:2d:b8:83:d4:ca:d2:0f:bc:76: 31:ca:94:d8:1d:93:8c:56:02:bc:d9:6f:1a:6f:52: 36:6e:75:56:0a:55:d3:df:43:87:21:11:65:8a:7e: 8f:bd:21:de:6b:32:3f:1b:84:34:95:05:9d:41:35: eb:92:eb:96:dd:aa:59:3f:01:53:6d:99:4f:ed:e5: e2:2a:5a:90:c1:b9:c4:a6:15:cf:c8:45:eb:a6:5d: 8e:9c:3e:f0:64:24:76:a5:cd:ab:1a:6f:b6:d8:7b: 51:61:6e:a6:7f:87:c8:e2:b7:e5:34:dc:41:88:ea: 09:40:be:73:92:3d:6b:e7:75 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 8b:f7:1a:10:ce:76:5c:07:ab:83:99:dc:17:80:6f:34:39:5d: 98:3e:6b:72:2c:e1:c7:a2:7b:40:29:b9:78:88:ba:4c:c5:a3: 6a:5e:9e:6e:7b:e3:f2:02:41:0c:66:be:ad:fb:ae:a2:14:ce: 92:f3:a2:34:8b:b4:b2:b6:24:f2:e5:d5:e0:c8:e5:62:6d:84: 7b:cb:be:bb:03:8b:7c:57:ca:f0:37:a9:90:af:8a:ee:03:be: 1d:28:9c:d9:26:76:a0:cd:c4:9d:4e:f0:ae:07:16:d5:be:af: 57:08:6a:d0:a0:42:42:42:1e:f4:20:cc:a5:78:82:95:26:38: 8a:47 Verisign Class 1 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: B1:47:BC:18:57:D1:18:A0:78:2D:EC:71:E8:2A:95:73 PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO 8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 8b:5b:75:56:84:54:85:0b:00:cf:af:38:48:ce:b1:a4 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 1 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:dd:84:d4:b9:b4:f9:a7:d8:f3:04:78:9c:de:3d: dc:6c:13:16:d9:7a:dd:24:51:66:c0:c7:26:59:0d: ac:06:08:c2:94:d1:33:1f:f0:83:35:1f:6e:1b:c8: de:aa:6e:15:4e:54:27:ef:c4:6d:1a:ec:0b:e3:0e: f0:44:a5:57:c7:40:58:1e:a3:47:1f:71:ec:60:f6: 6d:94:c8:18:39:ed:fe:42:18:56:df:e4:4c:49:10: 78:4e:01:76:35:63:12:36:dd:66:bc:01:04:36:a3: 55:68:d5:a2:36:09:ac:ab:21:26:54:06:ad:3f:ca: 14:e0:ac:ca:ad:06:1d:95:e2:f8:9d:f1:e0:60:ff: c2:7f:75:2b:4c:cc:da:fe:87:99:21:ea:ba:fe:3e: 54:d7:d2:59:78:db:3c:6e:cf:a0:13:00:1a:b8:27: a1:e4:be:67:96:ca:a0:c5:b3:9c:dd:c9:75:9e:eb: 30:9a:5f:a3:cd:d9:ae:78:19:3f:23:e9:5c:db:29: bd:ad:55:c8:1b:54:8c:63:f6:e8:a6:ea:c7:37:12: 5c:a3:29:1e:02:d9:db:1f:3b:b4:d7:0f:56:47:81: 15:04:4a:af:83:27:d1:c5:58:88:c1:dd:f6:aa:a7: a3:18:da:68:aa:6d:11:51:e1:bf:65:6b:9f:96:76: d1:3d Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption ab:66:8d:d7:b3:ba:c7:9a:b6:e6:55:d0:05:f1:9f:31:8d:5a: aa:d9:aa:46:26:0f:71:ed:a5:ad:53:56:62:01:47:2a:44:e9: fe:3f:74:0b:13:9b:b9:f4:4d:1b:b2:d1:5f:b2:b6:d2:88:5c: b3:9f:cd:cb:d4:a7:d9:60:95:84:3a:f8:c1:37:1d:61:ca:e7: b0:c5:e5:91:da:54:a6:ac:31:81:ae:97:de:cd:08:ac:b8:c0: 97:80:7f:6e:72:a4:e7:69:13:95:65:1f:c4:93:3c:fd:79:8f: 04:d4:3e:4f:ea:f7:9e:ce:cd:67:7c:4f:65:02:ff:91:85:54: 73:c7:ff:36:f7:86:2d:ec:d0:5e:4f:ff:11:9f:72:06:d6:b8: 1a:f1:4c:0d:26:65:e2:44:80:1e:c7:9f:e3:dd:e8:0a:da:ec: a5:20:80:69:68:a1:4f:7e:e1:6b:cf:07:41:fa:83:8e:bc:38: dd:b0:2e:11:b1:6b:b2:42:cc:9a:bc:f9:48:22:79:4a:19:0f: b2:1c:3e:20:74:d9:6a:c3:be:f2:28:78:13:56:79:4f:6d:50: ea:1b:b0:b5:57:b1:37:66:58:23:f3:dc:0f:df:0a:87:c4:ef: 86:05:d5:38:14:60:99:a3:4b:de:06:96:71:2c:f2:db:b6:1f: a4:ef:3f:ee Verisign Class 2 Public Primary Certification Authority ======================================================= MD5 Fingerprint: B3:9C:25:B1:C3:2E:32:53:80:15:30:9D:4D:02:77:3E PEM Data: -----BEGIN CERTIFICATE----- MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7 FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 2d:1b:fc:4a:17:8d:a3:91:eb:e7:ff:f5:8b:45:be:0b Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:b6:5a:8b:a3:0d:6a:23:83:80:6b:cf:39:87:f4: 21:13:33:06:4c:25:a2:ed:55:12:97:c5:a7:80:b9: fa:83:c1:20:a0:fa:2f:15:0d:7c:a1:60:6b:7e:79: 2c:fa:06:0f:3a:ae:f6:1b:6f:b1:d2:ff:2f:28:52: 5f:83:7d:4b:c4:7a:b7:f8:66:1f:80:54:fc:b7:c2: 8e:59:4a:14:57:46:d1:9a:93:be:41:91:03:bb:15: 80:93:5c:eb:e7:cc:08:6c:3f:3e:b3:4a:fc:ff:4b: 6c:23:d5:50:82:26:44:19:8e:23:c3:71:ea:19:24: 47:04:9e:75:bf:c8:a6:00:1f Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 8a:1b:2b:fa:39:c1:74:d7:5e:d8:19:64:a2:58:4a:2d:37:e0: 33:47:0f:ac:ed:f7:aa:db:1e:e4:8b:06:5c:60:27:ca:45:52: ce:16:ef:3f:06:64:e7:94:68:7c:60:33:15:11:69:af:9d:62: 8d:a3:03:54:6b:a6:be:e5:ee:05:18:60:04:bf:42:80:fd:d0: a8:a8:1e:01:3b:f7:a3:5c:af:a3:dc:e6:26:80:23:3c:b8:44: 74:f7:0a:ae:49:8b:61:78:cc:24:bf:88:8a:a7:0e:ea:73:19: 41:fd:4d:03:f0:88:d1:e5:78:8d:a5:2a:4f:f6:97:0d:17:77: ca:d8 Verisign Class 2 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: 2D:BB:E5:25:D3:D1:65:82:3A:B7:0E:FA:E6:EB:E2:E1 PEM Data: -----BEGIN CERTIFICATE----- MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn jBJ7xUS0rg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: b9:2f:60:cc:88:9f:a1:7a:46:09:b8:5b:70:6c:8a:af Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 2 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:a7:88:01:21:74:2c:e7:1a:03:f0:98:e1:97:3c: 0f:21:08:f1:9c:db:97:e9:9a:fc:c2:04:06:13:be: 5f:52:c8:cc:1e:2c:12:56:2c:b8:01:69:2c:cc:99: 1f:ad:b0:96:ae:79:04:f2:13:39:c1:7b:98:ba:08: 2c:e8:c2:84:13:2c:aa:69:e9:09:f4:c7:a9:02:a4: 42:c2:23:4f:4a:d8:f0:0e:a2:fb:31:6c:c9:e6:6f: 99:27:07:f5:e6:f4:4c:78:9e:6d:eb:46:86:fa:b9: 86:c9:54:f2:b2:c4:af:d4:46:1c:5a:c9:15:30:ff: 0d:6c:f5:2d:0e:6d:ce:7f:77 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 72:2e:f9:7f:d1:f1:71:fb:c4:9e:f6:c5:5e:51:8a:40:98:b8: 68:f8:9b:1c:83:d8:e2:9d:bd:ff:ed:a1:e6:66:ea:2f:09:f4: ca:d7:ea:a5:2b:95:f6:24:60:86:4d:44:2e:83:a5:c4:2d:a0: d3:ae:78:69:6f:72:da:6c:ae:08:f0:63:92:37:e6:bb:c4:30: 17:ad:77:cc:49:35:aa:cf:d8:8f:d1:be:b7:18:96:47:73:6a: 54:22:34:64:2d:b6:16:9b:59:5b:b4:51:59:3a:b3:0b:14:f4: 12:df:67:a0:f4:ad:32:64:5e:b1:46:72:27:8c:12:7b:c5:44: b4:ae Verisign Class 2 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: F8:BE:C4:63:22:C9:A8:46:74:8B:B8:1D:1E:4A:2B:F6 PEM Data: -----BEGIN CERTIFICATE----- MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u 7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 61:70:cb:49:8c:5f:98:45:29:e7:b0:a6:d9:50:5b:7a Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 2 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:af:0a:0d:c2:d5:2c:db:67:b9:2d:e5:94:27:dd: a5:be:e0:b0:4d:8f:b3:61:56:3c:d6:7c:c3:f4:cd: 3e:86:cb:a2:88:e2:e1:d8:a4:69:c5:b5:e2:bf:c1: a6:47:50:5e:46:39:8b:d5:96:ba:b5:6f:14:bf:10: ce:27:13:9e:05:47:9b:31:7a:13:d8:1f:d9:d3:02: 37:8b:ad:2c:47:f0:8e:81:06:a7:0d:30:0c:eb:f7: 3c:0f:20:1d:dc:72:46:ee:a5:02:c8:5b:c3:c9:56: 69:4c:c5:18:c1:91:7b:0b:d5:13:00:9b:bc:ef:c3: 48:3e:46:60:20:85:2a:d5:90:b6:cd:8b:a0:cc:32: dd:b7:fd:40:55:b2:50:1c:56:ae:cc:8d:77:4d:c7: 20:4d:a7:31:76:ef:68:92:8a:90:1e:08:81:56:b2: ad:69:a3:52:d0:cb:1c:c4:23:3d:1f:99:fe:4c:e8: 16:63:8e:c6:08:8e:f6:31:f6:d2:fa:e5:76:dd:b5: 1c:92:a3:49:cd:cd:01:cd:68:cd:a9:69:ba:a3:eb: 1d:0d:9c:a4:20:a6:c1:a0:c5:d1:46:4c:17:6d:d2: ac:66:3f:96:8c:e0:84:d4:36:ff:22:59:c5:f9:11: 60:a8:5f:04:7d:f2:1a:f6:25:42:61:0f:c4:4a:b8: 3e:89 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 34:26:15:3c:c0:8d:4d:43:49:1d:bd:e9:21:92:d7:66:9c:b7: de:c5:b8:d0:e4:5d:5f:76:22:c0:26:f9:84:3a:3a:f9:8c:b5: fb:ec:60:f1:e8:ce:04:b0:c8:dd:a7:03:8f:30:f3:98:df:a4: e6:a4:31:df:d3:1c:0b:46:dc:72:20:3f:ae:ee:05:3c:a4:33: 3f:0b:39:ac:70:78:73:4b:99:2b:df:30:c2:54:b0:a8:3b:55: a1:fe:16:28:cd:42:bd:74:6e:80:db:27:44:a7:ce:44:5d:d4: 1b:90:98:0d:1e:42:94:b1:00:2c:04:d0:74:a3:02:05:22:63: 63:cd:83:b5:fb:c1:6d:62:6b:69:75:fd:5d:70:41:b9:f5:bf: 7c:df:be:c1:32:73:22:21:8b:58:81:7b:15:91:7a:ba:e3:64: 48:b0:7f:fb:36:25:da:95:d0:f1:24:14:17:dd:18:80:6b:46: 23:39:54:f5:8e:62:09:04:1d:94:90:a6:9b:e6:25:e2:42:45: aa:b8:90:ad:be:08:8f:a9:0b:42:18:94:cf:72:39:e1:b1:43: e0:28:cf:b7:e7:5a:6c:13:6b:49:b3:ff:e3:18:7c:89:8b:33: 5d:ac:33:d7:a7:f9:da:3a:55:c9:58:10:f9:aa:ef:5a:b6:cf: 4b:4b:df:2a Verisign Class 3 Public Primary Certification Authority ======================================================= MD5 Fingerprint: 10:FC:63:5D:F6:26:3E:0D:F3:25:BE:5F:79:CD:67:67 PEM Data: -----BEGIN CERTIFICATE----- MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2 MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 70:ba:e4:1d:10:d9:29:34:b6:38:ca:7b:03:cc:ba:bf Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Validity Not Before: Jan 29 00:00:00 1996 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:c9:5c:59:9e:f2:1b:8a:01:14:b4:10:df:04:40: db:e3:57:af:6a:45:40:8f:84:0c:0b:d1:33:d9:d9: 11:cf:ee:02:58:1f:25:f7:2a:a8:44:05:aa:ec:03: 1f:78:7f:9e:93:b9:9a:00:aa:23:7d:d6:ac:85:a2: 63:45:c7:72:27:cc:f4:4c:c6:75:71:d2:39:ef:4f: 42:f0:75:df:0a:90:c6:8e:20:6f:98:0f:f8:ac:23: 5f:70:29:36:a4:c9:86:e7:b1:9a:20:cb:53:a5:85: e7:3d:be:7d:9a:fe:24:45:33:dc:76:15:ed:0f:a2: 71:64:4c:65:2e:81:68:45:a7 Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption bb:4c:12:2b:cf:2c:26:00:4f:14:13:dd:a6:fb:fc:0a:11:84: 8c:f3:28:1c:67:92:2f:7c:b6:c5:fa:df:f0:e8:95:bc:1d:8f: 6c:2c:a8:51:cc:73:d8:a4:c0:53:f0:4e:d6:26:c0:76:01:57: 81:92:5e:21:f1:d1:b1:ff:e7:d0:21:58:cd:69:17:e3:44:1c: 9c:19:44:39:89:5c:dc:9c:00:0f:56:8d:02:99:ed:a2:90:45: 4c:e4:bb:10:a4:3d:f0:32:03:0e:f1:ce:f8:e8:c9:51:8c:e6: 62:9f:e6:9f:c0:7d:b7:72:9c:c9:36:3a:6b:9f:4e:a8:ff:64: 0d:64 Verisign Class 3 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: A2:33:9B:4C:74:78:73:D4:6C:E7:C1:F3:8D:CB:5C:E9 PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4 pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0 13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY oJ2daZH9 -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 7d:d9:fe:07:cf:a8:1e:b7:10:79:67:fb:a7:89:34:c6 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 3 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:cc:5e:d1:11:5d:5c:69:d0:ab:d3:b9:6a:4c:99: 1f:59:98:30:8e:16:85:20:46:6d:47:3f:d4:85:20: 84:e1:6d:b3:f8:a4:ed:0c:f1:17:0f:3b:f9:a7:f9: 25:d7:c1:cf:84:63:f2:7c:63:cf:a2:47:f2:c6:5b: 33:8e:64:40:04:68:c1:80:b9:64:1c:45:77:c7:d8: 6e:f5:95:29:3c:50:e8:34:d7:78:1f:a8:ba:6d:43: 91:95:8f:45:57:5e:7e:c5:fb:ca:a4:04:eb:ea:97: 37:54:30:6f:bb:01:47:32:33:cd:dc:57:9b:64:69: 61:f8:9b:1d:1c:89:4f:5c:67 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 51:4d:cd:be:5c:cb:98:19:9c:15:b2:01:39:78:2e:4d:0f:67: 70:70:99:c6:10:5a:94:a4:53:4d:54:6d:2b:af:0d:5d:40:8b: 64:d3:d7:ee:de:56:61:92:5f:a6:c4:1d:10:61:36:d3:2c:27: 3c:e8:29:09:b9:11:64:74:cc:b5:73:9f:1c:48:a9:bc:61:01: ee:e2:17:a6:0c:e3:40:08:3b:0e:e7:eb:44:73:2a:9a:f1:69: 92:ef:71:14:c3:39:ac:71:a7:91:09:6f:e4:71:06:b3:ba:59: 57:26:79:00:f6:f8:0d:a2:33:30:28:d4:aa:58:a0:9d:9d:69: 91:fd Verisign Class 3 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: CD:68:B6:A7:C7:C4:CE:75:E0:1D:4F:57:44:61:92:09 PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te 2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 9b:7e:06:49:a3:3e:62:b9:d5:ee:90:48:71:29:ef:57 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 3 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:cb:ba:9c:52:fc:78:1f:1a:1e:6f:1b:37:73:bd: f8:c9:6b:94:12:30:4f:f0:36:47:f5:d0:91:0a:f5: 17:c8:a5:61:c1:16:40:4d:fb:8a:61:90:e5:76:20: c1:11:06:7d:ab:2c:6e:a6:f5:11:41:8e:fa:2d:ad: 2a:61:59:a4:67:26:4c:d0:e8:bc:52:5b:70:20:04: 58:d1:7a:c9:a4:69:bc:83:17:64:ad:05:8b:bc:d0: 58:ce:8d:8c:f5:eb:f0:42:49:0b:9d:97:27:67:32: 6e:e1:ae:93:15:1c:70:bc:20:4d:2f:18:de:92:88: e8:6c:85:57:11:1a:e9:7e:e3:26:11:54:a2:45:96: 55:83:ca:30:89:e8:dc:d8:a3:ed:2a:80:3f:7f:79: 65:57:3e:15:20:66:08:2f:95:93:bf:aa:47:2f:a8: 46:97:f0:12:e2:fe:c2:0a:2b:51:e6:76:e6:b7:46: b7:e2:0d:a6:cc:a8:c3:4c:59:55:89:e6:e8:53:5c: 1c:ea:9d:f0:62:16:0b:a7:c9:5f:0c:f0:de:c2:76: ce:af:f7:6a:f2:fa:41:a6:a2:33:14:c9:e5:7a:63: d3:9e:62:37:d5:85:65:9e:0e:e6:53:24:74:1b:5e: 1d:12:53:5b:c7:2c:e7:83:49:3b:15:ae:8a:68:b9: 57:97 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 11:14:96:c1:ab:92:08:f7:3f:2f:c9:b2:fe:e4:5a:9f:64:de: db:21:4f:86:99:34:76:36:57:dd:d0:15:2f:c5:ad:7f:15:1f: 37:62:73:3e:d4:e7:5f:ce:17:03:db:35:fa:2b:db:ae:60:09: 5f:1e:5f:8f:6e:bb:0b:3d:ea:5a:13:1e:0c:60:6f:b5:c0:b5: 23:22:2e:07:0b:cb:a9:74:cb:47:bb:1d:c1:d7:a5:6b:cc:2f: d2:42:fd:49:dd:a7:89:cf:53:ba:da:00:5a:28:bf:82:df:f8: ba:13:1d:50:86:82:fd:8e:30:8f:29:46:b0:1e:3d:35:da:38: 62:16:18:4a:ad:e6:b6:51:6c:de:af:62:eb:01:d0:1e:24:fe: 7a:8f:12:1a:12:68:b8:fb:66:99:14:14:45:5c:ae:e7:ae:69: 17:81:2b:5a:37:c9:5e:2a:f4:c6:e2:a1:5c:54:9b:a6:54:00: cf:f0:f1:c1:c7:98:30:1a:3b:36:16:db:a3:6e:ea:fd:ad:b2: c2:da:ef:02:47:13:8a:c0:f1:b3:31:ad:4f:1c:e1:4f:9c:af: 0f:0c:9d:f7:78:0d:d8:f4:35:56:80:da:b7:6d:17:8f:9d:1e: 81:64:e1:fe:c5:45:ba:ad:6b:b9:0a:7a:4e:4f:4b:84:ee:4b: f1:7d:dd:11 Verisign Class 4 Public Primary Certification Authority - G2 ============================================================ MD5 Fingerprint: 26:6D:2C:19:98:B6:70:68:38:50:54:19:EC:90:34:60 PEM Data: -----BEGIN CERTIFICATE----- MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5 MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP T8qAkbYp -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 32:88:8e:9a:d2:f5:eb:13:47:f8:7f:c4:20:37:25:f8 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Validity Not Before: May 18 00:00:00 1998 GMT Not After : Aug 1 23:59:59 2028 GMT Subject: C=US, O=VeriSign, Inc., OU=Class 4 Public Primary Certification Authority - G2, OU=(c) 1998 VeriSign, Inc. - For authorized use only, OU=VeriSign Trust Network Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1024 bit) Modulus (1024 bit): 00:ba:f0:e4:cf:f9:c4:ae:85:54:b9:07:57:f9:8f: c5:7f:68:11:f8:c4:17:b0:44:dc:e3:30:73:d5:2a: 62:2a:b8:d0:cc:1c:ed:28:5b:7e:bd:6a:dc:b3:91: 24:ca:41:62:3c:fc:02:01:bf:1c:16:31:94:05:97: 76:6e:a2:ad:bd:61:17:6c:4e:30:86:f0:51:37:2a: 50:c7:a8:62:81:dc:5b:4a:aa:c1:a0:b4:6e:eb:2f: e5:57:c5:b1:2b:40:70:db:5a:4d:a1:8e:1f:bd:03: 1f:d8:03:d4:8f:4c:99:71:bc:e2:82:cc:58:e8:98: 3a:86:d3:86:38:f3:00:29:1f Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 85:8c:12:c1:a7:b9:50:15:7a:cb:3e:ac:b8:43:8a:dc:aa:dd: 14:ba:89:81:7e:01:3c:23:71:21:88:2f:82:dc:63:fa:02:45: ac:45:59:d7:2a:58:44:5b:b7:9f:81:3b:92:68:3d:e2:37:24: f5:7b:6c:8f:76:35:96:09:a8:59:9d:b9:ce:23:ab:74:d6:83: fd:32:73:27:d8:69:3e:43:74:f6:ae:c5:89:9a:e7:53:7c:e9: 7b:f6:4b:f3:c1:65:83:de:8d:8a:9c:3c:88:8d:39:59:fc:aa: 3f:22:8d:a1:c1:66:50:81:72:4c:ed:22:64:4f:4f:ca:80:91: b6:29 Verisign Class 4 Public Primary Certification Authority - G3 ============================================================ MD5 Fingerprint: DB:C8:F2:27:2E:B1:EA:6A:29:23:5D:FE:56:3E:33:DF PEM Data: -----BEGIN CERTIFICATE----- MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ +mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c 2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: ec:a0:a7:8b:6e:75:6a:01:cf:c4:7c:cc:2f:94:5e:d7 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Validity Not Before: Oct 1 00:00:00 1999 GMT Not After : Jul 16 23:59:59 2036 GMT Subject: C=US, O=VeriSign, Inc., OU=VeriSign Trust Network, OU=(c) 1999 VeriSign, Inc. - For authorized use only, CN=VeriSign Class 4 Public Primary Certification Authority - G3 Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:ad:cb:a5:11:69:c6:59:ab:f1:8f:b5:19:0f:56: ce:cc:b5:1f:20:e4:9e:26:25:4b:e0:73:65:89:59: de:d0:83:e4:f5:0f:b5:bb:ad:f1:7c:e8:21:fc:e4: e8:0c:ee:7c:45:22:19:76:92:b4:13:b7:20:5b:09: fa:61:ae:a8:f2:a5:8d:85:c2:2a:d6:de:66:36:d2: 9b:02:f4:a8:92:60:7c:9c:69:b4:8f:24:1e:d0:86: 52:f6:32:9c:41:58:1e:22:bd:cd:45:62:95:08:6e: d0:66:dd:53:a2:cc:f0:10:dc:54:73:8b:04:a1:46: 33:33:5c:17:40:b9:9e:4d:d3:f3:be:55:83:e8:b1: 89:8e:5a:7c:9a:96:22:90:3b:88:25:f2:d2:53:88: 02:0c:0b:78:f2:e6:37:17:4b:30:46:07:e4:80:6d: a6:d8:96:2e:e8:2c:f8:11:b3:38:0d:66:a6:9b:ea: c9:23:5b:db:8e:e2:f3:13:8e:1a:59:2d:aa:02:f0: ec:a4:87:66:dc:c1:3f:f5:d8:b9:f4:ec:82:c6:d2: 3d:95:1d:e5:c0:4f:84:c9:d9:a3:44:28:06:6a:d7: 45:ac:f0:6b:6a:ef:4e:5f:f8:11:82:1e:38:63:34: 66:50:d4:3e:93:73:fa:30:c3:66:ad:ff:93:2d:97: ef:03 Exponent: 65537 (0x10001) Signature Algorithm: sha1WithRSAEncryption 8f:fa:25:6b:4f:5b:e4:a4:4e:27:55:ab:22:15:59:3c:ca:b5: 0a:d4:4a:db:ab:dd:a1:5f:53:c5:a0:57:39:c2:ce:47:2b:be: 3a:c8:56:bf:c2:d9:27:10:3a:b1:05:3c:c0:77:31:bb:3a:d3: 05:7b:6d:9a:1c:30:8c:80:cb:93:93:2a:83:ab:05:51:82:02: 00:11:67:6b:f3:88:61:47:5f:03:93:d5:5b:0d:e0:f1:d4:a1: 32:35:85:b2:3a:db:b0:82:ab:d1:cb:0a:bc:4f:8c:5b:c5:4b: 00:3b:1f:2a:82:a6:7e:36:85:dc:7e:3c:67:00:b5:e4:3b:52: e0:a8:eb:5d:15:f9:c6:6d:f0:ad:1d:0e:85:b7:a9:9a:73:14: 5a:5b:8f:41:28:c0:d5:e8:2d:4d:a4:5e:cd:aa:d9:ed:ce:dc: d8:d5:3c:42:1d:17:c1:12:5d:45:38:c3:38:f3:fc:85:2e:83: 46:48:b2:d7:20:5f:92:36:8f:e7:79:0f:98:5e:99:e8:f0:d0: a4:bb:f5:53:bd:2a:ce:59:b0:af:6e:7f:6c:bb:d2:1e:00:b0: 21:ed:f8:41:62:82:b9:d8:b2:c4:bb:46:50:f3:31:c5:8f:01: a8:74:eb:f5:78:27:da:e7:f7:66:43:f3:9e:83:3e:20:aa:c3: 35:60:91:ce Verisign/RSA Commercial CA ========================== MD5 Fingerprint: 5A:0B:DD:42:9E:B2:B4:62:97:32:7F:7F:0A:AA:9A:39 PEM Data: -----BEGIN CERTIFICATE----- MIICIzCCAZACBQJBAAAWMA0GCSqGSIb3DQEBAgUAMFwxCzAJBgNVBAYTAlVTMSAw HgYDVQQKExdSU0EgRGF0YSBTZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVy Y2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05NDExMDQxODU4MzRaFw05 OTExMDMxODU4MzRaMFwxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdSU0EgRGF0YSBT ZWN1cml0eSwgSW5jLjErMCkGA1UECxMiQ29tbWVyY2lhbCBDZXJ0aWZpY2F0aW9u IEF1dGhvcml0eTCBmzANBgkqhkiG9w0BAQEFAAOBiQAwgYUCfgCk+4Fie84QJ93o 975sbsZwmdu41QUDaSiCnHJ/lj+O7Kwpkj+KFPhCdr69XQO5kNTQvAayUTNfxMK/ touPmbZiImDd298ggrTKoi8tUO2UMt7gVY3UaOLgTNLNBRYulWZcYVI4HlGogqHE 7yXpCuaLK44xZtn42f29O2nZ6wIDAQABMA0GCSqGSIb3DQEBAgUAA34AdrW2EP4j 9/dZYkuwX5zBaLxJu7NJbyFHXSudVMQAKD+YufKKg5tgf+tQx6sFEC097TgCwaVI 0v5loMC86qYjFmZsGySp8+x5NRhPJsjjr1BKx6cxa9B8GJ1Qv6km+iYrRpwUqbtb MJhCKLVLU7tDCZJAuqiqWqTGtotXTcU= -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:41:00:00:16 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority Validity Not Before: Nov 4 18:58:34 1994 GMT Not After : Nov 3 18:58:34 1999 GMT Subject: C=US, O=RSA Data Security, Inc., OU=Commercial Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1000 bit) Modulus (1000 bit): 00:a4:fb:81:62:7b:ce:10:27:dd:e8:f7:be:6c:6e: c6:70:99:db:b8:d5:05:03:69:28:82:9c:72:7f:96: 3f:8e:ec:ac:29:92:3f:8a:14:f8:42:76:be:bd:5d: 03:b9:90:d4:d0:bc:06:b2:51:33:5f:c4:c2:bf:b6: 8b:8f:99:b6:62:22:60:dd:db:df:20:82:b4:ca:a2: 2f:2d:50:ed:94:32:de:e0:55:8d:d4:68:e2:e0:4c: d2:cd:05:16:2e:95:66:5c:61:52:38:1e:51:a8:82: a1:c4:ef:25:e9:0a:e6:8b:2b:8e:31:66:d9:f8:d9: fd:bd:3b:69:d9:eb Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 76:b5:b6:10:fe:23:f7:f7:59:62:4b:b0:5f:9c:c1:68:bc:49: bb:b3:49:6f:21:47:5d:2b:9d:54:c4:00:28:3f:98:b9:f2:8a: 83:9b:60:7f:eb:50:c7:ab:05:10:2d:3d:ed:38:02:c1:a5:48: d2:fe:65:a0:c0:bc:ea:a6:23:16:66:6c:1b:24:a9:f3:ec:79: 35:18:4f:26:c8:e3:af:50:4a:c7:a7:31:6b:d0:7c:18:9d:50: bf:a9:26:fa:26:2b:46:9c:14:a9:bb:5b:30:98:42:28:b5:4b: 53:bb:43:09:92:40:ba:a8:aa:5a:a4:c6:b6:8b:57:4d:c5 Verisign/RSA Secure Server CA ============================= MD5 Fingerprint: 74:7B:82:03:43:F0:00:9E:6B:B3:EC:47:BF:85:A5:93 PEM Data: -----BEGIN CERTIFICATE----- MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0 MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII 0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3 YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc 1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA== -----END CERTIFICATE----- Certificate Ingredients: Data: Version: 1 (0x0) Serial Number: 02:ad:66:7e:4e:45:fe:5e:57:6f:3c:98:19:5e:dd:c0 Signature Algorithm: md2WithRSAEncryption Issuer: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Validity Not Before: Nov 9 00:00:00 1994 GMT Not After : Jan 7 23:59:59 2010 GMT Subject: C=US, O=RSA Data Security, Inc., OU=Secure Server Certification Authority Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (1000 bit) Modulus (1000 bit): 00:92:ce:7a:c1:ae:83:3e:5a:aa:89:83:57:ac:25: 01:76:0c:ad:ae:8e:2c:37:ce:eb:35:78:64:54:03: e5:84:40:51:c9:bf:8f:08:e2:8a:82:08:d2:16:86: 37:55:e9:b1:21:02:ad:76:68:81:9a:05:a2:4b:c9: 4b:25:66:22:56:6c:88:07:8f:f7:81:59:6d:84:07: 65:70:13:71:76:3e:9b:77:4c:e3:50:89:56:98:48: b9:1d:a7:29:1a:13:2e:4a:11:59:9c:1e:15:d5:49: 54:2c:73:3a:69:82:b1:97:39:9c:6d:70:67:48:e5: dd:2d:d6:c8:1e:7b Exponent: 65537 (0x10001) Signature Algorithm: md2WithRSAEncryption 65:dd:7e:e1:b2:ec:b0:e2:3a:e0:ec:71:46:9a:19:11:b8:d3: c7:a0:b4:03:40:26:02:3e:09:9c:e1:12:b3:d1:5a:f6:37:a5: b7:61:03:b6:5b:16:69:3b:c6:44:08:0c:88:53:0c:6b:97:49: c7:3e:35:dc:6c:b9:bb:aa:df:5c:bb:3a:2f:93:60:b6:a9:4b: 4d:f2:20:f7:cd:5f:7f:64:7b:8e:dc:00:5c:d7:fa:77:ca:39: 16:59:6f:0e:ea:d3:b5:83:7f:4d:4d:42:56:76:b4:c9:5f:04: f8:38:f8:eb:d2:5f:75:5f:cd:7b:fc:e5:8e:80:7c:fc:50 criticalmass-1.0.0.orig/curl/lib/transfer.c0000644000175000017500000023371710265631023020115 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: transfer.c,v 1.279 2005/05/10 23:02:37 bagder Exp $ ***************************************************************************/ #include "setup.h" /* -- WIN32 approved -- */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #include "strtoofft.h" #include "strequal.h" #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #include #else #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #include #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #include #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #ifndef HAVE_SOCKET #error "We can't compile without socket() support!" #endif #endif #include "urldata.h" #include #include "netrc.h" #include "content_encoding.h" #include "hostip.h" #include "transfer.h" #include "sendf.h" #include "speedcheck.h" #include "progress.h" #include "http.h" #include "url.h" #include "getinfo.h" #include "sslgen.h" #include "http_digest.h" #include "http_ntlm.h" #include "http_negotiate.h" #include "share.h" #include "memory.h" #include "select.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" #define CURL_TIMEOUT_EXPECT_100 1000 /* counting ms here */ enum { KEEP_NONE, KEEP_READ, KEEP_WRITE }; /* * This function will call the read callback to fill our buffer with data * to upload. */ CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp) { struct SessionHandle *data = conn->data; size_t buffersize = (size_t)bytes; int nread; if(conn->bits.upload_chunky) { /* if chunked Transfer-Encoding */ buffersize -= (8 + 2 + 2); /* 32bit hex + CRLF + CRLF */ conn->upload_fromhere += 10; /* 32bit hex + CRLF */ } /* this function returns a size_t, so we typecast to int to prevent warnings with picky compilers */ nread = (int)conn->fread(conn->upload_fromhere, 1, buffersize, conn->fread_in); if(nread == CURL_READFUNC_ABORT) { failf(data, "operation aborted by callback\n"); return CURLE_ABORTED_BY_CALLBACK; } if(!conn->bits.forbidchunk && conn->bits.upload_chunky) { /* if chunked Transfer-Encoding */ char hexbuffer[11]; int hexlen = snprintf(hexbuffer, sizeof(hexbuffer), "%x\r\n", nread); /* move buffer pointer */ conn->upload_fromhere -= hexlen; nread += hexlen; /* copy the prefix to the buffer */ memcpy(conn->upload_fromhere, hexbuffer, hexlen); /* always append CRLF to the data */ memcpy(conn->upload_fromhere + nread, "\r\n", 2); if((nread - hexlen) == 0) { /* mark this as done once this chunk is transfered */ conn->keep.upload_done = TRUE; } nread+=2; /* for the added CRLF */ } *nreadp = nread; return CURLE_OK; } /* * checkhttpprefix() * * Returns TRUE if member of the list matches prefix of string */ static bool checkhttpprefix(struct SessionHandle *data, const char *s) { struct curl_slist *head = data->set.http200aliases; while (head) { if (checkprefix(head->data, s)) return TRUE; head = head->next; } if(checkprefix("HTTP/", s)) return TRUE; return FALSE; } /* * Curl_readrewind() rewinds the read stream. This typically (so far) only * used for HTTP POST/PUT with multi-pass authentication when a sending was * denied and a resend is necessary. */ CURLcode Curl_readrewind(struct connectdata *conn) { struct SessionHandle *data = conn->data; conn->bits.rewindaftersend = FALSE; /* we rewind now */ /* We have sent away data. If not using CURLOPT_POSTFIELDS or CURLOPT_HTTPPOST, call app to rewind */ if(data->set.postfields || (data->set.httpreq == HTTPREQ_POST_FORM)) ; /* do nothing */ else { if(data->set.ioctl) { curlioerr err; err = data->set.ioctl(data, CURLIOCMD_RESTARTREAD, data->set.ioctl_client); infof(data, "the ioctl callback returned %d\n", (int)err); if(err) { /* FIXME: convert to a human readable error message */ failf(data, "ioctl callback returned error %d\n", (int)err); return CURLE_SEND_FAIL_REWIND; } } else { /* If no CURLOPT_READFUNCTION is used, we know that we operate on a given FILE * stream and we can actually attempt to rewind that ourself with fseek() */ if(data->set.fread == (curl_read_callback)fread) { if(-1 != fseek(data->set.in, 0, SEEK_SET)) /* successful rewind */ return CURLE_OK; } /* no callback set or failure aboe, makes us fail at once */ failf(data, "necessary data rewind wasn't possible\n"); return CURLE_SEND_FAIL_REWIND; } } return CURLE_OK; } #ifdef USE_SSLEAY /* FIX: this is nasty OpenSSL-specific code that really shouldn't be here */ static int data_pending(struct connectdata *conn) { if(conn->ssl[FIRSTSOCKET].handle) /* SSL is in use */ return SSL_pending(conn->ssl[FIRSTSOCKET].handle); return 0; /* nothing */ } #else /* non-SSL never have pending data */ #define data_pending(x) 0 #endif /* * Curl_readwrite() is the low-level function to be called when data is to * be read and written to/from the connection. */ CURLcode Curl_readwrite(struct connectdata *conn, bool *done) { struct Curl_transfer_keeper *k = &conn->keep; struct SessionHandle *data = conn->data; CURLcode result; ssize_t nread; /* number of bytes read */ int didwhat=0; curl_socket_t fd_read; curl_socket_t fd_write; curl_socket_t select_res; curl_off_t contentlength; if(k->keepon & KEEP_READ) fd_read = conn->sockfd; else fd_read = CURL_SOCKET_BAD; if(k->keepon & KEEP_WRITE) fd_write = conn->writesockfd; else fd_write = CURL_SOCKET_BAD; select_res = Curl_select(fd_read, fd_write, 0); if(select_res == CSELECT_ERR) { failf(data, "select/poll returned error"); return CURLE_SEND_ERROR; } do { /* If we still have reading to do, we check if we have a readable socket. */ if((k->keepon & KEEP_READ) && (select_res & CSELECT_IN)) { bool is_empty_data = FALSE; /* This is where we loop until we have read everything there is to read or we get a EWOULDBLOCK */ do { size_t buffersize = data->set.buffer_size? data->set.buffer_size:BUFSIZE; /* receive data from the network! */ int readrc = Curl_read(conn, conn->sockfd, k->buf, buffersize, &nread); /* subzero, this would've blocked */ if(0>readrc) break; /* get out of loop */ /* get the CURLcode from the int */ result = (CURLcode)readrc; if(result>0) return result; if ((k->bytecount == 0) && (k->writebytecount == 0)) { Curl_pgrsTime(data, TIMER_STARTTRANSFER); if(k->wait100_after_headers) /* set time stamp to compare with when waiting for the 100 */ k->start100 = Curl_tvnow(); } didwhat |= KEEP_READ; /* indicates data of zero size, i.e. empty file */ is_empty_data = (nread == 0 && k->bodywrites == 0); /* NULL terminate, allowing string ops to be used */ if (0 < nread || is_empty_data) k->buf[nread] = 0; /* if we receive 0 or less here, the server closed the connection and we bail out from this! */ else if (0 >= nread) { k->keepon &= ~KEEP_READ; break; } /* Default buffer to use when we write the buffer, it may be changed in the flow below before the actual storing is done. */ k->str = k->buf; /* Since this is a two-state thing, we check if we are parsing headers at the moment or not. */ if (k->header) { /* we are in parse-the-header-mode */ bool stop_reading = FALSE; /* header line within buffer loop */ do { size_t hbufp_index; size_t rest_length; size_t full_length; int writetype; /* str_start is start of line within buf */ k->str_start = k->str; k->end_ptr = strchr (k->str_start, '\n'); if (!k->end_ptr) { /* Not a complete header line within buffer, append the data to the end of the headerbuff. */ if (k->hbuflen + nread >= data->state.headersize) { /* We enlarge the header buffer as it is too small */ char *newbuff; size_t newsize=CURLMAX((k->hbuflen+nread)*3/2, data->state.headersize*2); hbufp_index = k->hbufp - data->state.headerbuff; newbuff = (char *)realloc(data->state.headerbuff, newsize); if(!newbuff) { failf (data, "Failed to alloc memory for big header!"); return CURLE_OUT_OF_MEMORY; } data->state.headersize=newsize; data->state.headerbuff = newbuff; k->hbufp = data->state.headerbuff + hbufp_index; } memcpy(k->hbufp, k->str, nread); k->hbufp += nread; k->hbuflen += nread; if (!k->headerline && (k->hbuflen>5)) { /* make a first check that this looks like a HTTP header */ if(!checkhttpprefix(data, data->state.headerbuff)) { /* this is not the beginning of a HTTP first header line */ k->header = FALSE; k->badheader = HEADER_ALLBAD; break; } } break; /* read more and try again */ } /* decrease the size of the remaining (supposed) header line */ rest_length = (k->end_ptr - k->str)+1; nread -= (ssize_t)rest_length; k->str = k->end_ptr + 1; /* move past new line */ full_length = k->str - k->str_start; /* * We're about to copy a chunk of data to the end of the * already received header. We make sure that the full string * fit in the allocated header buffer, or else we enlarge * it. */ if (k->hbuflen + full_length >= data->state.headersize) { char *newbuff; size_t newsize=CURLMAX((k->hbuflen+full_length)*3/2, data->state.headersize*2); hbufp_index = k->hbufp - data->state.headerbuff; newbuff = (char *)realloc(data->state.headerbuff, newsize); if(!newbuff) { failf (data, "Failed to alloc memory for big header!"); return CURLE_OUT_OF_MEMORY; } data->state.headersize= newsize; data->state.headerbuff = newbuff; k->hbufp = data->state.headerbuff + hbufp_index; } /* copy to end of line */ strncpy (k->hbufp, k->str_start, full_length); k->hbufp += full_length; k->hbuflen += full_length; *k->hbufp = 0; k->end_ptr = k->hbufp; k->p = data->state.headerbuff; /**** * We now have a FULL header line that p points to *****/ if(!k->headerline) { /* the first read header */ if((k->hbuflen>5) && !checkhttpprefix(data, data->state.headerbuff)) { /* this is not the beginning of a HTTP first header line */ k->header = FALSE; if(nread) /* since there's more, this is a partial bad header */ k->badheader = HEADER_PARTHEADER; else { /* this was all we read so its all a bad header */ k->badheader = HEADER_ALLBAD; nread = (ssize_t)rest_length; } break; } } if (('\n' == *k->p) || ('\r' == *k->p)) { size_t headerlen; /* Zero-length header line means end of headers! */ if ('\r' == *k->p) k->p++; /* pass the \r byte */ if ('\n' == *k->p) k->p++; /* pass the \n byte */ if(100 == k->httpcode) { /* * We have made a HTTP PUT or POST and this is 1.1-lingo * that tells us that the server is OK with this and ready * to receive the data. * However, we'll get more headers now so we must get * back into the header-parsing state! */ k->header = TRUE; k->headerline = 0; /* restart the header line counter */ /* if we did wait for this do enable write now! */ if (k->write_after_100_header) { k->write_after_100_header = FALSE; k->keepon |= KEEP_WRITE; } } else k->header = FALSE; /* no more header to parse! */ if (417 == k->httpcode) { /* * we got: "417 Expectation Failed" this means: * we have made a HTTP call and our Expect Header * seems to cause a problem => abort the write operations * (or prevent them from starting). */ k->write_after_100_header = FALSE; k->keepon &= ~KEEP_WRITE; } #ifndef CURL_DISABLE_HTTP /* * When all the headers have been parsed, see if we should give * up and return an error. */ if (Curl_http_should_fail(conn)) { failf (data, "The requested URL returned error: %d", k->httpcode); return CURLE_HTTP_RETURNED_ERROR; } #endif /* CURL_DISABLE_HTTP */ /* now, only output this if the header AND body are requested: */ writetype = CLIENTWRITE_HEADER; if (data->set.include_header) writetype |= CLIENTWRITE_BODY; headerlen = k->p - data->state.headerbuff; result = Curl_client_write(data, writetype, data->state.headerbuff, headerlen); if(result) return result; data->info.header_size += (long)headerlen; conn->headerbytecount += (long)headerlen; conn->deductheadercount = (100 == k->httpcode)?conn->headerbytecount:0; if (conn->resume_from && (data->set.httpreq==HTTPREQ_GET) && (k->httpcode == 416)) { /* "Requested Range Not Satisfiable" */ stop_reading = TRUE; } #ifndef CURL_DISABLE_HTTP if(!stop_reading) { /* Curl_http_auth_act() checks what authentication methods * that are available and decides which one (if any) to * use. It will set 'newurl' if an auth metod was picked. */ result = Curl_http_auth_act(conn); if(result) return result; if(conn->bits.rewindaftersend) { /* We rewind after a complete send, so thus we continue sending now */ infof(data, "Keep sending data to get tossed away!\n"); k->keepon |= KEEP_WRITE; } } #endif /* CURL_DISABLE_HTTP */ if(!k->header) { /* * really end-of-headers. * * If we requested a "no body", this is a good time to get * out and return home. */ if(conn->bits.no_body) stop_reading = TRUE; else { /* If we know the expected size of this document, we set the maximum download size to the size of the expected document or else, we won't know when to stop reading! Note that we set the download maximum even if we read a "Connection: close" header, to make sure that "Content-Length: 0" still prevents us from attempting to read the (missing) response-body. */ /* According to RFC2616 section 4.4, we MUST ignore Content-Length: headers if we are now receiving data using chunked Transfer-Encoding. */ if(conn->bits.chunk) conn->size=-1; } if(-1 != conn->size) { /* We do this operation even if no_body is true, since this data might be retrieved later with curl_easy_getinfo() and its CURLINFO_CONTENT_LENGTH_DOWNLOAD option. */ Curl_pgrsSetDownloadSize(data, conn->size); conn->maxdownload = conn->size; } /* If max download size is *zero* (nothing) we already have nothing and can safely return ok now! */ if(0 == conn->maxdownload) stop_reading = TRUE; if(stop_reading) { /* we make sure that this socket isn't read more now */ k->keepon &= ~KEEP_READ; } break; /* exit header line loop */ } /* We continue reading headers, so reset the line-based header parsing variables hbufp && hbuflen */ k->hbufp = data->state.headerbuff; k->hbuflen = 0; continue; } /* * Checks for special headers coming up. */ if (!k->headerline++) { /* This is the first header, it MUST be the error code line or else we consiser this to be the body right away! */ int httpversion_major; int nc=sscanf(k->p, " HTTP/%d.%d %3d", &httpversion_major, &k->httpversion, &k->httpcode); if (nc==3) { k->httpversion += 10 * httpversion_major; } else { /* this is the real world, not a Nirvana NCSA 1.5.x returns this crap when asked for HTTP/1.1 */ nc=sscanf(k->p, " HTTP %3d", &k->httpcode); k->httpversion = 10; /* If user has set option HTTP200ALIASES, compare header line against list of aliases */ if (!nc) { if (checkhttpprefix(data, k->p)) { nc = 1; k->httpcode = 200; k->httpversion = (data->set.httpversion==CURL_HTTP_VERSION_1_0)? 10 : 11; } } } if (nc) { data->info.httpcode = k->httpcode; data->info.httpversion = k->httpversion; /* * This code executes as part of processing the header. As a * result, it's not totally clear how to interpret the * response code yet as that depends on what other headers may * be present. 401 and 407 may be errors, but may be OK * depending on how authentication is working. Other codes * are definitely errors, so give up here. */ if (data->set.http_fail_on_error && (k->httpcode >= 400) && (k->httpcode != 401) && (k->httpcode != 407)) { if (conn->resume_from && (data->set.httpreq==HTTPREQ_GET) && (k->httpcode == 416)) { /* "Requested Range Not Satisfiable", just proceed and pretend this is no error */ } else { /* serious error, go home! */ failf (data, "The requested URL returned error: %d", k->httpcode); return CURLE_HTTP_RETURNED_ERROR; } } if(k->httpversion == 10) /* Default action for HTTP/1.0 must be to close, unless we get one of those fancy headers that tell us the server keeps it open for us! */ conn->bits.close = TRUE; switch(k->httpcode) { case 204: /* (quote from RFC2616, section 10.2.5): The server has * fulfilled the request but does not need to return an * entity-body ... The 204 response MUST NOT include a * message-body, and thus is always terminated by the first * empty line after the header fields. */ /* FALLTHROUGH */ case 416: /* Requested Range Not Satisfiable, it has the Content-Length: set as the "real" document but no actual response is sent. */ case 304: /* (quote from RFC2616, section 10.3.5): The 304 response * MUST NOT contain a message-body, and thus is always * terminated by the first empty line after the header * fields. */ conn->size=0; conn->maxdownload=0; k->ignorecl = TRUE; /* ignore Content-Length headers */ break; default: /* nothing */ break; } } else { k->header = FALSE; /* this is not a header line */ break; } } /* Check for Content-Length: header lines to get size. Ignore the header completely if we get a 416 response as then we're resuming a document that we don't get, and this header contains info about the true size of the document we didn't get now. */ if (!k->ignorecl && checkprefix("Content-Length:", k->p)) { contentlength = curlx_strtoofft(k->p+15, NULL, 10); if (data->set.max_filesize && contentlength > data->set.max_filesize) { failf(data, "Maximum file size exceeded"); return CURLE_FILESIZE_EXCEEDED; } if(contentlength >= 0) conn->size = contentlength; else { /* Negative Content-Length is really odd, and we know it happens for example when older Apache servers send large files */ conn->bits.close = TRUE; infof(data, "Negative content-length: %" FORMAT_OFF_T ", closing after transfer\n", contentlength); } } /* check for Content-Type: header lines to get the mime-type */ else if (checkprefix("Content-Type:", k->p)) { char *start; char *end; size_t len; /* Find the first non-space letter */ for(start=k->p+13; *start && isspace((int)*start); start++) ; /* empty loop */ end = strchr(start, '\r'); if(!end) end = strchr(start, '\n'); if(end) { /* skip all trailing space letters */ for(; isspace((int)*end) && (end > start); end--) ; /* empty loop */ /* get length of the type */ len = end-start+1; /* allocate memory of a cloned copy */ Curl_safefree(data->info.contenttype); data->info.contenttype = malloc(len + 1); if (NULL == data->info.contenttype) return CURLE_OUT_OF_MEMORY; /* copy the content-type string */ memcpy(data->info.contenttype, start, len); data->info.contenttype[len] = 0; /* zero terminate */ } } #ifndef CURL_DISABLE_HTTP else if((k->httpversion == 10) && conn->bits.httpproxy && Curl_compareheader(k->p, "Proxy-Connection:", "keep-alive")) { /* * When a HTTP/1.0 reply comes when using a proxy, the * 'Proxy-Connection: keep-alive' line tells us the * connection will be kept alive for our pleasure. * Default action for 1.0 is to close. */ conn->bits.close = FALSE; /* don't close when done */ infof(data, "HTTP/1.0 proxy connection set to keep alive!\n"); } else if((k->httpversion == 11) && conn->bits.httpproxy && Curl_compareheader(k->p, "Proxy-Connection:", "close")) { /* * We get a HTTP/1.1 response from a proxy and it says it'll * close down after this transfer. */ conn->bits.close = TRUE; /* close when done */ infof(data, "HTTP/1.1 proxy connection set close!\n"); } else if((k->httpversion == 10) && Curl_compareheader(k->p, "Connection:", "keep-alive")) { /* * A HTTP/1.0 reply with the 'Connection: keep-alive' line * tells us the connection will be kept alive for our * pleasure. Default action for 1.0 is to close. * * [RFC2068, section 19.7.1] */ conn->bits.close = FALSE; /* don't close when done */ infof(data, "HTTP/1.0 connection set to keep alive!\n"); } else if (Curl_compareheader(k->p, "Connection:", "close")) { /* * [RFC 2616, section 8.1.2.1] * "Connection: close" is HTTP/1.1 language and means that * the connection will close when this request has been * served. */ conn->bits.close = TRUE; /* close when done */ } else if (Curl_compareheader(k->p, "Transfer-Encoding:", "chunked")) { /* * [RFC 2616, section 3.6.1] A 'chunked' transfer encoding * means that the server will send a series of "chunks". Each * chunk starts with line with info (including size of the * coming block) (terminated with CRLF), then a block of data * with the previously mentioned size. There can be any amount * of chunks, and a chunk-data set to zero signals the * end-of-chunks. */ conn->bits.chunk = TRUE; /* chunks coming our way */ /* init our chunky engine */ Curl_httpchunk_init(conn); } else if (checkprefix("Content-Encoding:", k->p) && data->set.encoding) { /* * Process Content-Encoding. Look for the values: identity, * gzip, deflate, compress, x-gzip and x-compress. x-gzip and * x-compress are the same as gzip and compress. (Sec 3.5 RFC * 2616). zlib cannot handle compress. However, errors are * handled further down when the response body is processed */ char *start; /* Find the first non-space letter */ for(start=k->p+17; *start && isspace((int)*start); start++) ; /* empty loop */ /* Record the content-encoding for later use */ if (checkprefix("identity", start)) k->content_encoding = IDENTITY; else if (checkprefix("deflate", start)) k->content_encoding = DEFLATE; else if (checkprefix("gzip", start) || checkprefix("x-gzip", start)) k->content_encoding = GZIP; else if (checkprefix("compress", start) || checkprefix("x-compress", start)) k->content_encoding = COMPRESS; } else if (Curl_compareheader(k->p, "Content-Range:", "bytes")) { /* Content-Range: bytes [num]- Content-Range: bytes: [num]- The second format was added August 1st 2000 by Igor Khristophorov since Sun's webserver JavaWebServer/1.1.1 obviously sends the header this way! :-( */ char *ptr = strstr(k->p, "bytes"); ptr+=5; if(*ptr == ':') /* stupid colon skip */ ptr++; k->offset = curlx_strtoofft(ptr, NULL, 10); if (conn->resume_from == k->offset) /* we asked for a resume and we got it */ k->content_range = TRUE; } #if !defined(CURL_DISABLE_COOKIES) else if(data->cookies && checkprefix("Set-Cookie:", k->p)) { Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); Curl_cookie_add(data, data->cookies, TRUE, k->p+11, /* If there is a custom-set Host: name, use it here, or else use real peer host name. */ conn->allocptr.cookiehost? conn->allocptr.cookiehost:conn->host.name, conn->path); Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); } #endif else if(checkprefix("Last-Modified:", k->p) && (data->set.timecondition || data->set.get_filetime) ) { time_t secs=time(NULL); k->timeofdoc = curl_getdate(k->p+strlen("Last-Modified:"), &secs); if(data->set.get_filetime) data->info.filetime = (long)k->timeofdoc; } else if((checkprefix("WWW-Authenticate:", k->p) && (401 == k->httpcode)) || (checkprefix("Proxy-authenticate:", k->p) && (407 == k->httpcode))) { result = Curl_http_input_auth(conn, k->httpcode, k->p); if(result) return result; } else if ((k->httpcode >= 300 && k->httpcode < 400) && checkprefix("Location:", k->p)) { if(data->set.http_follow_location) { /* this is the URL that the server advices us to get instead */ char *ptr; char *start=k->p; char backup; start += 9; /* pass "Location:" */ /* Skip spaces and tabs. We do this to support multiple white spaces after the "Location:" keyword. */ while(*start && isspace((int)*start )) start++; /* Scan through the string from the end to find the last non-space. k->end_ptr points to the actual terminating zero letter, move pointer one letter back and start from there. This logic strips off trailing whitespace, but keeps any embedded whitespace. */ ptr = k->end_ptr-1; while((ptr>=start) && isspace((int)*ptr)) ptr--; ptr++; backup = *ptr; /* store the ending letter */ if(ptr != start) { *ptr = '\0'; /* zero terminate */ conn->newurl = strdup(start); /* clone string */ *ptr = backup; /* restore ending letter */ if(!conn->newurl) return CURLE_OUT_OF_MEMORY; } } } #endif /* CURL_DISABLE_HTTP */ /* * End of header-checks. Write them to the client. */ writetype = CLIENTWRITE_HEADER; if (data->set.include_header) writetype |= CLIENTWRITE_BODY; if(data->set.verbose) Curl_debug(data, CURLINFO_HEADER_IN, k->p, k->hbuflen, conn); result = Curl_client_write(data, writetype, k->p, k->hbuflen); if(result) return result; data->info.header_size += (long)k->hbuflen; conn->headerbytecount += (long)k->hbuflen; /* reset hbufp pointer && hbuflen */ k->hbufp = data->state.headerbuff; k->hbuflen = 0; } while (!stop_reading && *k->str); /* header line within buffer */ if(stop_reading) /* We've stopped dealing with input, get out of the do-while loop */ break; /* We might have reached the end of the header part here, but there might be a non-header part left in the end of the read buffer. */ } /* end if header mode */ /* This is not an 'else if' since it may be a rest from the header parsing, where the beginning of the buffer is headers and the end is non-headers. */ if (k->str && !k->header && (nread > 0 || is_empty_data)) { if(0 == k->bodywrites && !is_empty_data) { /* These checks are only made the first time we are about to write a piece of the body */ if(conn->protocol&PROT_HTTP) { /* HTTP-only checks */ if (conn->newurl) { if(conn->bits.close) { /* Abort after the headers if "follow Location" is set and we're set to close anyway. */ k->keepon &= ~KEEP_READ; *done = TRUE; return CURLE_OK; } /* We have a new url to load, but since we want to be able to re-use this connection properly, we read the full response in "ignore more" */ k->ignorebody = TRUE; infof(data, "Ignoring the response-body\n"); } if (conn->resume_from && !k->content_range && (data->set.httpreq==HTTPREQ_GET) && !k->ignorebody) { /* we wanted to resume a download, although the server doesn't * seem to support this and we did this with a GET (if it * wasn't a GET we did a POST or PUT resume) */ failf(data, "HTTP server doesn't seem to support " "byte ranges. Cannot resume."); return CURLE_HTTP_RANGE_ERROR; } if(data->set.timecondition && !conn->range) { /* A time condition has been set AND no ranges have been requested. This seems to be what chapter 13.3.4 of RFC 2616 defines to be the correct action for a HTTP/1.1 client */ if((k->timeofdoc > 0) && (data->set.timevalue > 0)) { switch(data->set.timecondition) { case CURL_TIMECOND_IFMODSINCE: default: if(k->timeofdoc < data->set.timevalue) { infof(data, "The requested document is not new enough\n"); *done = TRUE; return CURLE_OK; } break; case CURL_TIMECOND_IFUNMODSINCE: if(k->timeofdoc > data->set.timevalue) { infof(data, "The requested document is not old enough\n"); *done = TRUE; return CURLE_OK; } break; } /* switch */ } /* two valid time strings */ } /* we have a time condition */ } /* this is HTTP */ } /* this is the first time we write a body part */ k->bodywrites++; /* pass data to the debug function before it gets "dechunked" */ if(data->set.verbose) { if(k->badheader) { Curl_debug(data, CURLINFO_DATA_IN, data->state.headerbuff, k->hbuflen, conn); if(k->badheader == HEADER_PARTHEADER) Curl_debug(data, CURLINFO_DATA_IN, k->str, nread, conn); } else Curl_debug(data, CURLINFO_DATA_IN, k->str, nread, conn); } #ifndef CURL_DISABLE_HTTP if(conn->bits.chunk) { /* * Bless me father for I have sinned. Here comes a chunked * transfer flying and we need to decode this properly. While * the name says read, this function both reads and writes away * the data. The returned 'nread' holds the number of actual * data it wrote to the client. */ CHUNKcode res = Curl_httpchunk_read(conn, k->str, nread, &nread); if(CHUNKE_OK < res) { if(CHUNKE_WRITE_ERROR == res) { failf(data, "Failed writing data"); return CURLE_WRITE_ERROR; } failf(data, "Received problem %d in the chunky parser", res); return CURLE_RECV_ERROR; } else if(CHUNKE_STOP == res) { /* we're done reading chunks! */ k->keepon &= ~KEEP_READ; /* read no more */ /* There are now possibly N number of bytes at the end of the str buffer that weren't written to the client, but we don't care about them right now. */ } /* If it returned OK, we just keep going */ } #endif /* CURL_DISABLE_HTTP */ if((-1 != conn->maxdownload) && (k->bytecount + nread >= conn->maxdownload)) { nread = (ssize_t) (conn->maxdownload - k->bytecount); if(nread < 0 ) /* this should be unusual */ nread = 0; k->keepon &= ~KEEP_READ; /* we're done reading */ } k->bytecount += nread; Curl_pgrsSetDownloadCounter(data, k->bytecount); if(!conn->bits.chunk && (nread || k->badheader || is_empty_data)) { /* If this is chunky transfer, it was already written */ if(k->badheader && !k->ignorebody) { /* we parsed a piece of data wrongly assuming it was a header and now we output it as body instead */ result = Curl_client_write(data, CLIENTWRITE_BODY, data->state.headerbuff, k->hbuflen); } if(k->badheader < HEADER_ALLBAD) { /* This switch handles various content encodings. If there's an error here, be sure to check over the almost identical code in http_chunks.c. Make sure that ALL_CONTENT_ENCODINGS contains all the encodings handled here. */ #ifdef HAVE_LIBZ switch (k->content_encoding) { case IDENTITY: #endif /* This is the default when the server sends no Content-Encoding header. See Curl_readwrite_init; the memset() call initializes k->content_encoding to zero. */ if(!k->ignorebody) result = Curl_client_write(data, CLIENTWRITE_BODY, k->str, nread); #ifdef HAVE_LIBZ break; case DEFLATE: /* Assume CLIENTWRITE_BODY; headers are not encoded. */ result = Curl_unencode_deflate_write(data, k, nread); break; case GZIP: /* Assume CLIENTWRITE_BODY; headers are not encoded. */ result = Curl_unencode_gzip_write(data, k, nread); break; case COMPRESS: default: failf (data, "Unrecognized content encoding type. " "libcurl understands `identity', `deflate' and `gzip' " "content encodings."); result = CURLE_BAD_CONTENT_ENCODING; break; } #endif } k->badheader = HEADER_NORMAL; /* taken care of now */ if(result) return result; } } /* if (! header and data to read ) */ if (is_empty_data) { /* if we received nothing, the server closed the connection and we are done */ k->keepon &= ~KEEP_READ; } } while(data_pending(conn)); } /* if( read from socket ) */ /* If we still have writing to do, we check if we have a writable socket. */ if((k->keepon & KEEP_WRITE) && (select_res & CSELECT_OUT)) { /* write */ int i, si; ssize_t bytes_written; bool writedone=TRUE; if ((k->bytecount == 0) && (k->writebytecount == 0)) Curl_pgrsTime(data, TIMER_STARTTRANSFER); didwhat |= KEEP_WRITE; /* * We loop here to do the READ and SEND loop until we run out of * data to send or until we get EWOULDBLOCK back */ do { /* only read more data if there's no upload data already present in the upload buffer */ if(0 == conn->upload_present) { /* init the "upload from here" pointer */ conn->upload_fromhere = k->uploadbuf; if(!k->upload_done) { /* HTTP pollution, this should be written nicer to become more protocol agnostic. */ int fillcount; if(k->wait100_after_headers && (conn->proto.http->sending == HTTPSEND_BODY)) { /* If this call is to send body data, we must take some action: We have sent off the full HTTP 1.1 request, and we shall now go into the Expect: 100 state and await such a header */ k->wait100_after_headers = FALSE; /* headers sent */ k->write_after_100_header = TRUE; /* wait for the header */ k->keepon &= ~KEEP_WRITE; /* disable writing */ k->start100 = Curl_tvnow(); /* timeout count starts now */ didwhat &= ~KEEP_WRITE; /* we didn't write anything actually */ break; } result = Curl_fillreadbuffer(conn, BUFSIZE, &fillcount); if(result) return result; nread = (ssize_t)fillcount; } else nread = 0; /* we're done uploading/reading */ /* the signed int typecase of nread of for systems that has unsigned size_t */ if (nread<=0) { /* done */ k->keepon &= ~KEEP_WRITE; /* we're done writing */ writedone = TRUE; if(conn->bits.rewindaftersend) { result = Curl_readrewind(conn); if(result) return result; } break; } /* store number of bytes available for upload */ conn->upload_present = nread; /* convert LF to CRLF if so asked */ if (data->set.crlf) { if(data->state.scratch == NULL) data->state.scratch = malloc(2*BUFSIZE); if(data->state.scratch == NULL) { failf (data, "Failed to alloc scratch buffer!"); return CURLE_OUT_OF_MEMORY; } for(i = 0, si = 0; i < nread; i++, si++) { if (conn->upload_fromhere[i] == 0x0a) { data->state.scratch[si++] = 0x0d; data->state.scratch[si] = 0x0a; } else data->state.scratch[si] = conn->upload_fromhere[i]; } if(si != nread) { /* only perform the special operation if we really did replace anything */ nread = si; /* upload from the new (replaced) buffer instead */ conn->upload_fromhere = data->state.scratch; /* set the new amount too */ conn->upload_present = nread; } } } else { /* We have a partial buffer left from a previous "round". Use that instead of reading more data */ } /* write to socket (send away data) */ result = Curl_write(conn, conn->writesockfd, /* socket to send to */ conn->upload_fromhere, /* buffer pointer */ conn->upload_present, /* buffer size */ &bytes_written); /* actually send away */ if(result) return result; if(data->set.verbose) /* show the data before we change the pointer upload_fromhere */ Curl_debug(data, CURLINFO_DATA_OUT, conn->upload_fromhere, bytes_written, conn); if(conn->upload_present != bytes_written) { /* we only wrote a part of the buffer (if anything), deal with it! */ /* store the amount of bytes left in the buffer to write */ conn->upload_present -= bytes_written; /* advance the pointer where to find the buffer when the next send is to happen */ conn->upload_fromhere += bytes_written; writedone = TRUE; /* we are done, stop the loop */ } else { /* we've uploaded that buffer now */ conn->upload_fromhere = k->uploadbuf; conn->upload_present = 0; /* no more bytes left */ if(k->upload_done) { /* switch off writing, we're done! */ k->keepon &= ~KEEP_WRITE; /* we're done writing */ writedone = TRUE; } } k->writebytecount += bytes_written; Curl_pgrsSetUploadCounter(data, k->writebytecount); } while(!writedone); /* loop until we're done writing! */ } } while(0); /* just to break out from! */ k->now = Curl_tvnow(); if(didwhat) { /* Update read/write counters */ if(conn->bytecountp) *conn->bytecountp = k->bytecount; /* read count */ if(conn->writebytecountp) *conn->writebytecountp = k->writebytecount; /* write count */ } else { /* no read no write, this is a timeout? */ if (k->write_after_100_header) { /* This should allow some time for the header to arrive, but only a very short time as otherwise it'll be too much wasted times too often. */ /* Quoting RFC2616, section "8.2.3 Use of the 100 (Continue) Status": Therefore, when a client sends this header field to an origin server (possibly via a proxy) from which it has never seen a 100 (Continue) status, the client SHOULD NOT wait for an indefinite period before sending the request body. */ long ms = Curl_tvdiff(k->now, k->start100); if(ms > CURL_TIMEOUT_EXPECT_100) { /* we've waited long enough, continue anyway */ k->write_after_100_header = FALSE; k->keepon |= KEEP_WRITE; } } } if(Curl_pgrsUpdate(conn)) result = CURLE_ABORTED_BY_CALLBACK; else result = Curl_speedcheck(data, k->now); if (result) return result; if (data->set.timeout && ((Curl_tvdiff(k->now, k->start)/1000) >= data->set.timeout)) { failf(data, "Operation timed out with %" FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes received", k->bytecount, conn->size); return CURLE_OPERATION_TIMEOUTED; } if(!k->keepon) { /* * The transfer has been performed. Just make some general checks before * returning. */ if(!(conn->bits.no_body) && (conn->size != -1) && (k->bytecount != conn->size) && !conn->newurl) { failf(data, "transfer closed with %" FORMAT_OFF_T " bytes remaining to read", conn->size - k->bytecount); return CURLE_PARTIAL_FILE; } else if(!(conn->bits.no_body) && conn->bits.chunk && (conn->proto.http->chunk.state != CHUNK_STOP)) { /* * In chunked mode, return an error if the connection is closed prior to * the empty (terminiating) chunk is read. * * The condition above used to check for * conn->proto.http->chunk.datasize != 0 which is true after reading * *any* chunk, not just the empty chunk. * */ failf(data, "transfer closed with outstanding read data remaining"); return CURLE_PARTIAL_FILE; } if(Curl_pgrsUpdate(conn)) return CURLE_ABORTED_BY_CALLBACK; } /* Now update the "done" boolean we return */ *done = !k->keepon; return CURLE_OK; } /* * Curl_readwrite_init() inits the readwrite session. */ CURLcode Curl_readwrite_init(struct connectdata *conn) { struct SessionHandle *data = conn->data; struct Curl_transfer_keeper *k = &conn->keep; /* NB: the content encoding software depends on this initialization of Curl_transfer_keeper. */ memset(k, 0, sizeof(struct Curl_transfer_keeper)); k->start = Curl_tvnow(); /* start time */ k->now = k->start; /* current time is now */ k->header = TRUE; /* assume header */ k->httpversion = -1; /* unknown at this point */ data = conn->data; /* there's the root struct */ k->buf = data->state.buffer; k->uploadbuf = data->state.uploadbuffer; k->maxfd = (conn->sockfd>conn->writesockfd? conn->sockfd:conn->writesockfd)+1; k->hbufp = data->state.headerbuff; k->ignorebody=FALSE; Curl_pgrsTime(data, TIMER_PRETRANSFER); Curl_speedinit(data); Curl_pgrsSetUploadCounter(data, 0); Curl_pgrsSetDownloadCounter(data, 0); if (!conn->bits.getheader) { k->header = FALSE; if(conn->size > 0) Curl_pgrsSetDownloadSize(data, conn->size); } /* we want header and/or body, if neither then don't do this! */ if(conn->bits.getheader || !conn->bits.no_body) { if(conn->sockfd != CURL_SOCKET_BAD) { k->keepon |= KEEP_READ; } if(conn->writesockfd != CURL_SOCKET_BAD) { /* HTTP 1.1 magic: Even if we require a 100-return code before uploading data, we might need to write data before that since the REQUEST may not have been finished sent off just yet. Thus, we must check if the request has been sent before we set the state info where we wait for the 100-return code */ if (data->set.expect100header && (conn->proto.http->sending == HTTPSEND_BODY)) { /* wait with write until we either got 100-continue or a timeout */ k->write_after_100_header = TRUE; k->start100 = k->start; } else { if(data->set.expect100header) /* when we've sent off the rest of the headers, we must await a 100-continue */ k->wait100_after_headers = TRUE; k->keepon |= KEEP_WRITE; } } } return CURLE_OK; } /* * Curl_single_fdset() gets called by the multi interface code when the app * has requested to get the fd_sets for the current connection. This function * will then be called once for every connection that the multi interface * keeps track of. This function will only be called for connections that are * in the proper state to have this information available. */ void Curl_single_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd) { *max_fd = -1; /* init */ if(conn->keep.keepon & KEEP_READ) { FD_SET(conn->sockfd, read_fd_set); *max_fd = (int)conn->sockfd; } if(conn->keep.keepon & KEEP_WRITE) { FD_SET(conn->writesockfd, write_fd_set); /* since sockets are curl_socket_t nowadays, we typecast it to int here to compare it nicely */ if((int)conn->writesockfd > *max_fd) *max_fd = (int)conn->writesockfd; } /* we don't use exceptions, only touch that one to prevent compiler warnings! */ *exc_fd_set = *exc_fd_set; } /* * Transfer() * * This function is what performs the actual transfer. It is capable of * doing both ways simultaneously. * The transfer must already have been setup by a call to Curl_Transfer(). * * Note that headers are created in a preallocated buffer of a default size. * That buffer can be enlarged on demand, but it is never shrunken again. * * Parts of this function was once written by the friendly Mark Butler * . */ static CURLcode Transfer(struct connectdata *conn) { CURLcode result; struct Curl_transfer_keeper *k = &conn->keep; bool done=FALSE; if(!(conn->protocol & PROT_FILE)) /* Only do this if we are not transferring FILE:, since the file: treatment is different*/ Curl_readwrite_init(conn); if((conn->sockfd == CURL_SOCKET_BAD) && (conn->writesockfd == CURL_SOCKET_BAD)) /* nothing to read, nothing to write, we're already OK! */ return CURLE_OK; /* we want header and/or body, if neither then don't do this! */ if(!conn->bits.getheader && conn->bits.no_body) return CURLE_OK; while (!done) { curl_socket_t fd_read; curl_socket_t fd_write; int interval_ms; interval_ms = 1 * 1000; if(k->keepon & KEEP_READ) fd_read = conn->sockfd; else fd_read = CURL_SOCKET_BAD; if(k->keepon & KEEP_WRITE) fd_write = conn->writesockfd; else fd_write = CURL_SOCKET_BAD; switch (Curl_select(fd_read, fd_write, interval_ms)) { case -1: /* select() error, stop reading */ #ifdef EINTR /* The EINTR is not serious, and it seems you might get this more ofen when using the lib in a multi-threaded environment! */ if(errno == EINTR) ; else #endif done = TRUE; /* no more read or write */ continue; case 0: /* timeout */ default: /* readable descriptors */ result = Curl_readwrite(conn, &done); break; } if(result) return result; /* "done" signals to us if the transfer(s) are ready */ } return CURLE_OK; } /* * Curl_pretransfer() is called immediately before a transfer starts. */ CURLcode Curl_pretransfer(struct SessionHandle *data) { CURLcode res; if(!data->change.url) /* we can't do anything wihout URL */ return CURLE_URL_MALFORMAT; /* Init the SSL session ID cache here. We do it here since we want to do it after the *_setopt() calls (that could change the size of the cache) but before any transfer takes place. */ res = Curl_ssl_initsessions(data, data->set.ssl.numsessions); if(res) return res; data->set.followlocation=0; /* reset the location-follow counter */ data->state.this_is_a_follow = FALSE; /* reset this */ data->state.errorbuf = FALSE; /* no error has occurred */ data->state.authproblem = FALSE; data->state.authhost.want = data->set.httpauth; data->state.authproxy.want = data->set.proxyauth; #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) /* If there was a list of cookie files to read and we haven't done it before, do it now! */ if(data->change.cookielist) { struct curl_slist *list = data->change.cookielist; Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); while(list) { data->cookies = Curl_cookie_init(data, list->data, data->cookies, data->set.cookiesession); list = list->next; } Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); curl_slist_free_all(data->change.cookielist); /* clean up list */ data->change.cookielist = NULL; /* don't do this again! */ } #endif /* CURL_DISABLE_HTTP */ /* Allow data->set.use_port to set which port to use. This needs to be * disabled for example when we follow Location: headers to URLs using * different ports! */ data->state.allow_port = TRUE; #if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL) /************************************************************* * Tell signal handler to ignore SIGPIPE *************************************************************/ if(!data->set.no_signal) data->state.prev_signal = signal(SIGPIPE, SIG_IGN); #endif Curl_initinfo(data); /* reset session-specific information "variables" */ Curl_pgrsStartNow(data); return CURLE_OK; } /* * Curl_posttransfer() is called immediately after a transfer ends */ CURLcode Curl_posttransfer(struct SessionHandle *data) { #if defined(HAVE_SIGNAL) && defined(SIGPIPE) && !defined(HAVE_MSG_NOSIGNAL) /* restore the signal handler for SIGPIPE before we get back */ if(!data->set.no_signal) signal(SIGPIPE, data->state.prev_signal); #else (void)data; /* unused parameter */ #endif if(!(data->progress.flags & PGRS_HIDE) && !data->progress.callback) /* only output if we don't use a progress callback and we're not hidden */ fprintf(data->set.err, "\n"); return CURLE_OK; } /* * strlen_url() returns the length of the given URL if the spaces within the * URL were properly URL encoded. */ static int strlen_url(char *url) { char *ptr; int newlen=0; bool left=TRUE; /* left side of the ? */ for(ptr=url; *ptr; ptr++) { switch(*ptr) { case '?': left=FALSE; default: newlen++; break; case ' ': if(left) newlen+=3; else newlen++; break; } } return newlen; } /* strcpy_url() copies a url to a output buffer and URL-encodes the spaces in * the source URL accordingly. */ static void strcpy_url(char *output, char *url) { /* we must add this with whitespace-replacing */ bool left=TRUE; char *iptr; char *optr = output; for(iptr = url; /* read from here */ *iptr; /* until zero byte */ iptr++) { switch(*iptr) { case '?': left=FALSE; default: *optr++=*iptr; break; case ' ': if(left) { *optr++='%'; /* add a '%' */ *optr++='2'; /* add a '2' */ *optr++='0'; /* add a '0' */ } else *optr++='+'; /* add a '+' here */ break; } } *optr=0; /* zero terminate output buffer */ } /* * Curl_follow() handles the URL redirect magic. Pass in the 'newurl' string * as given by the remote server and set up the new URL to request. */ CURLcode Curl_follow(struct SessionHandle *data, char *newurl, /* this 'newurl' is the Location: string, and it must be malloc()ed before passed here */ bool retry) /* set TRUE if this is a request retry as opposed to a real redirect following */ { /* Location: redirect */ char prot[16]; /* URL protocol string storage */ char letter; /* used for a silly sscanf */ size_t newlen; char *newest; if (data->set.maxredirs && (data->set.followlocation >= data->set.maxredirs)) { failf(data,"Maximum (%d) redirects followed", data->set.maxredirs); return CURLE_TOO_MANY_REDIRECTS; } if(!retry) /* mark the next request as a followed location: */ data->state.this_is_a_follow = TRUE; data->set.followlocation++; /* count location-followers */ if(data->set.http_auto_referer) { /* We are asked to automatically set the previous URL as the referer when we get the next URL. We pick the ->url field, which may or may not be 100% correct */ if(data->change.referer_alloc) /* If we already have an allocated referer, free this first */ free(data->change.referer); data->change.referer = strdup(data->change.url); data->change.referer_alloc = TRUE; /* yes, free this later */ } if(2 != sscanf(newurl, "%15[^?&/:]://%c", prot, &letter)) { /*** *DANG* this is an RFC 2068 violation. The URL is supposed to be absolute and this doesn't seem to be that! *** Instead, we have to TRY to append this new path to the old URL to the right of the host part. Oh crap, this is doomed to cause problems in the future... */ char *protsep; char *pathsep; char *useurl = newurl; size_t urllen; /* we must make our own copy of the URL to play with, as it may point to read-only data */ char *url_clone=strdup(data->change.url); if(!url_clone) return CURLE_OUT_OF_MEMORY; /* skip out of this NOW */ /* protsep points to the start of the host name */ protsep=strstr(url_clone, "//"); if(!protsep) protsep=url_clone; else protsep+=2; /* pass the slashes */ if('/' != newurl[0]) { int level=0; /* First we need to find out if there's a ?-letter in the URL, and cut it and the right-side of that off */ pathsep = strrchr(protsep, '?'); if(pathsep) *pathsep=0; /* we have a relative path to append to the last slash if there's one available */ pathsep = strrchr(protsep, '/'); if(pathsep) *pathsep=0; /* Check if there's any slash after the host name, and if so, remember that position instead */ pathsep = strchr(protsep, '/'); if(pathsep) protsep = pathsep+1; else protsep = NULL; /* now deal with one "./" or any amount of "../" in the newurl and act accordingly */ if((useurl[0] == '.') && (useurl[1] == '/')) useurl+=2; /* just skip the "./" */ while((useurl[0] == '.') && (useurl[1] == '.') && (useurl[2] == '/')) { level++; useurl+=3; /* pass the "../" */ } if(protsep) { while(level--) { /* cut off one more level from the right of the original URL */ pathsep = strrchr(protsep, '/'); if(pathsep) *pathsep=0; else { *protsep=0; break; } } } } else { /* We got a new absolute path for this server, cut off from the first slash */ pathsep = strchr(protsep, '/'); if(pathsep) { /* When people use badly formatted URLs, such as "http://www.url.com?dir=/home/daniel" we must not use the first slash, if there's a ?-letter before it! */ char *sep = strchr(protsep, '?'); if(sep && (sep < pathsep)) pathsep = sep; *pathsep=0; } else { /* There was no slash. Now, since we might be operating on a badly formatted URL, such as "http://www.url.com?id=2380" which doesn't use a slash separator as it is supposed to, we need to check for a ?-letter as well! */ pathsep = strchr(protsep, '?'); if(pathsep) *pathsep=0; } } /* If the new part contains a space, this is a mighty stupid redirect but we still make an effort to do "right". To the left of a '?' letter we replace each space with %20 while it is replaced with '+' on the right side of the '?' letter. */ newlen = strlen_url(useurl); urllen = strlen(url_clone); newest=(char *)malloc( urllen + 1 + /* possible slash */ newlen + 1 /* zero byte */); if(!newest) { free(url_clone); /* don't leak this */ return CURLE_OUT_OF_MEMORY; /* go out from this */ } /* copy over the root url part */ memcpy(newest, url_clone, urllen); /* check if we need to append a slash */ if(('/' == useurl[0]) || (protsep && !*protsep)) ; else newest[urllen++]='/'; /* then append the new piece on the right side */ strcpy_url(&newest[urllen], useurl); free(newurl); /* newurl is the allocated pointer */ free(url_clone); newurl = newest; } else { /* This is an absolute URL, don't allow the custom port number */ data->state.allow_port = FALSE; if(strchr(newurl, ' ')) { /* This new URL contains at least one space, this is a mighty stupid redirect but we still make an effort to do "right". */ newlen = strlen_url(newurl); newest = malloc(newlen+1); /* get memory for this */ if(newest) { strcpy_url(newest, newurl); /* create a space-free URL */ free(newurl); /* that was no good */ newurl = newest; /* use this instead now */ } } } if(data->change.url_alloc) free(data->change.url); else data->change.url_alloc = TRUE; /* the URL is allocated */ data->change.url = newurl; newurl = NULL; /* don't free! */ infof(data, "Issue another request to this URL: '%s'\n", data->change.url); /* * We get here when the HTTP code is 300-399 (and 401). We need to perform * differently based on exactly what return code there was. * * News from 7.10.6: we can also get here on a 401 or 407, in case we act on * a HTTP (proxy-) authentication scheme other than Basic. */ switch(data->info.httpcode) { /* 401 - Act on a www-authentication, we keep on moving and do the Authorization: XXXX header in the HTTP request code snippet */ /* 407 - Act on a proxy-authentication, we keep on moving and do the Proxy-Authorization: XXXX header in the HTTP request code snippet */ /* 300 - Multiple Choices */ /* 306 - Not used */ /* 307 - Temporary Redirect */ default: /* for all above (and the unknown ones) */ /* Some codes are explicitly mentioned since I've checked RFC2616 and they * seem to be OK to POST to. */ break; case 301: /* Moved Permanently */ /* (quote from RFC2616, section 10.3.2): * * Note: When automatically redirecting a POST request after receiving a * 301 status code, some existing HTTP/1.0 user agents will erroneously * change it into a GET request. * * ---- * * Warning: Because most of importants user agents do this obvious RFC2616 * violation, many webservers expect this misbehavior. So these servers * often answers to a POST request with an error page. To be sure that * libcurl gets the page that most user agents would get, libcurl has to * force GET: */ if( data->set.httpreq == HTTPREQ_POST || data->set.httpreq == HTTPREQ_POST_FORM) { infof(data, "Violate RFC 2616/10.3.2 and switch from POST to GET\n"); data->set.httpreq = HTTPREQ_GET; } break; case 302: /* Found */ /* (From 10.3.3) Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it were a 303 response, performing a GET on the Location field-value regardless of the original request method. The status codes 303 and 307 have been added for servers that wish to make unambiguously clear which kind of reaction is expected of the client. (From 10.3.4) Note: Many pre-HTTP/1.1 user agents do not understand the 303 status. When interoperability with such clients is a concern, the 302 status code may be used instead, since most user agents react to a 302 response as described here for 303. */ case 303: /* See Other */ /* Disable both types of POSTs, since doing a second POST when * following isn't what anyone would want! */ if(data->set.httpreq != HTTPREQ_GET) { data->set.httpreq = HTTPREQ_GET; /* enforce GET request */ infof(data, "Disables POST, goes with %s\n", data->set.opt_no_body?"HEAD":"GET"); } break; case 304: /* Not Modified */ /* 304 means we did a conditional request and it was "Not modified". * We shouldn't get any Location: header in this response! */ break; case 305: /* Use Proxy */ /* (quote from RFC2616, section 10.3.6): * "The requested resource MUST be accessed through the proxy given * by the Location field. The Location field gives the URI of the * proxy. The recipient is expected to repeat this single request * via the proxy. 305 responses MUST only be generated by origin * servers." */ break; } Curl_pgrsTime(data, TIMER_REDIRECT); Curl_pgrsResetTimes(data); return CURLE_OK; } static CURLcode Curl_connect_host(struct SessionHandle *data, struct connectdata **conn) { CURLcode res = CURLE_OK; int urlchanged = FALSE; do { bool async; bool protocol_done=TRUE; /* will be TRUE always since this is only used within the easy interface */ Curl_pgrsTime(data, TIMER_STARTSINGLE); data->change.url_changed = FALSE; res = Curl_connect(data, conn, &async, &protocol_done); if((CURLE_OK == res) && async) { /* Now, if async is TRUE here, we need to wait for the name to resolve */ res = Curl_wait_for_resolv(*conn, NULL); if(CURLE_OK == res) /* Resolved, continue with the connection */ res = Curl_async_resolved(*conn, &protocol_done); else /* if we can't resolve, we kill this "connection" now */ (void)Curl_disconnect(*conn); } if(res) break; /* If a callback (or something) has altered the URL we should use within the Curl_connect(), we detect it here and act as if we are redirected to the new URL */ urlchanged = data->change.url_changed; if ((CURLE_OK == res) && urlchanged) { res = Curl_done(conn, res); if(CURLE_OK == res) { char *gotourl = strdup(data->change.url); res = Curl_follow(data, gotourl, FALSE); if(res) free(gotourl); } } } while (urlchanged && res == CURLE_OK); return res; } /* Returns TRUE and sets '*url' if a request retry is wanted */ bool Curl_retry_request(struct connectdata *conn, char **url) { bool retry = FALSE; if((conn->keep.bytecount+conn->headerbytecount == 0) && conn->bits.reuse) { /* We got no data and we attempted to re-use a connection. This might happen if the connection was left alive when we were done using it before, but that was closed when we wanted to read from it again. Bad luck. Retry the same request on a fresh connect! */ infof(conn->data, "Connection died, retrying a fresh connect\n"); *url = strdup(conn->data->change.url); conn->bits.close = TRUE; /* close this connection */ conn->bits.retry = TRUE; /* mark this as a connection we're about to retry. Marking it this way should prevent i.e HTTP transfers to return error just because nothing has been transfered! */ retry = TRUE; } return retry; } /* * Curl_perform() is the internal high-level function that gets called by the * external curl_easy_perform() function. It inits, performs and cleans up a * single file transfer. */ CURLcode Curl_perform(struct SessionHandle *data) { CURLcode res; CURLcode res2; struct connectdata *conn=NULL; char *newurl = NULL; /* possibly a new URL to follow to! */ bool retry = FALSE; data->state.used_interface = Curl_if_easy; res = Curl_pretransfer(data); if(res) return res; /* * It is important that there is NO 'return' from this function at any other * place than falling down to the end of the function! This is because we * have cleanup stuff that must be done before we get back, and that is only * performed after this do-while loop. */ do { res = Curl_connect_host(data, &conn); /* primary connection */ if(res == CURLE_OK) { if (data->set.source_url) /* 3rd party transfer */ res = Curl_second_connect(conn); else conn->sec_conn = NULL; } if(res == CURLE_OK) { bool do_done; res = Curl_do(&conn, &do_done); /* for non 3rd party transfer only */ if(res == CURLE_OK && !data->set.source_url) { res = Transfer(conn); /* now fetch that URL please */ if(res == CURLE_OK) { retry = Curl_retry_request(conn, &newurl); if(!retry) /* * We must duplicate the new URL here as the connection data may * be free()ed in the Curl_done() function. */ newurl = conn->newurl?strdup(conn->newurl):NULL; } else { /* The transfer phase returned error, we mark the connection to get * closed to prevent being re-used. This is becasue we can't * possibly know if the connection is in a good shape or not now. */ conn->bits.close = TRUE; if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) { /* if we failed anywhere, we must clean up the secondary socket if it was used */ sclose(conn->sock[SECONDARYSOCKET]); conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; } } /* Always run Curl_done(), even if some of the previous calls failed, but return the previous (original) error code */ res2 = Curl_done(&conn, res); if(CURLE_OK == res) res = res2; } else /* Curl_do() failed, clean up left-overs in the done-call */ res2 = Curl_done(&conn, res); /* * Important: 'conn' cannot be used here, since it may have been closed * in 'Curl_done' or other functions. */ if((res == CURLE_OK) && newurl) { res = Curl_follow(data, newurl, retry); if(CURLE_OK == res) { newurl = NULL; continue; } } } break; /* it only reaches here when this shouldn't loop */ } while(1); /* loop if Location: */ if(newurl) free(newurl); /* run post-transfer uncondionally, but don't clobber the return code if we already have an error code recorder */ res2 = Curl_posttransfer(data); if(!res && res2) res = res2; return res; } /* * Curl_Transfer() is called to setup some basic properties for the upcoming * transfer. */ CURLcode Curl_Transfer(struct connectdata *c_conn, /* connection data */ int sockindex, /* socket index to read from or -1 */ curl_off_t size, /* -1 if unknown at this point */ bool getheader, /* TRUE if header parsing is wanted */ curl_off_t *bytecountp, /* return number of bytes read or NULL */ int writesockindex, /* socket index to write to, it may very well be the same we read from. -1 disables */ curl_off_t *writecountp /* return number of bytes written or NULL */ ) { struct connectdata *conn = (struct connectdata *)c_conn; if(!conn) return CURLE_BAD_FUNCTION_ARGUMENT; curlassert((sockindex <= 1) && (sockindex >= -1)); /* now copy all input parameters */ conn->sockfd = sockindex==-1? CURL_SOCKET_BAD:conn->sock[sockindex]; conn->size = size; conn->bits.getheader = getheader; conn->bytecountp = bytecountp; conn->writesockfd = writesockindex==-1? CURL_SOCKET_BAD:conn->sock[writesockindex]; conn->writebytecountp = writecountp; return CURLE_OK; } /* * Curl_second_connect() makes the secondary connection (used for 3rd party * FTP transfers). */ CURLcode Curl_second_connect(struct connectdata *conn) { CURLcode status = CURLE_OK; struct SessionHandle *data = conn->data; struct connectdata *sec_conn = NULL; /* secondary connection */ bool backup_reuse_fresh = data->set.reuse_fresh; char *backup_userpwd = data->set.userpwd; if(data->change.url_alloc) free(data->change.url); data->change.url_alloc = FALSE; data->change.url = data->set.source_url; /* We must never actually alter 'data->set' properties, so we restore the backed up values afterwards! */ #if 0 /* if both remote hosts are the same host - create new connection */ if (strequal(conn->host.dispname, data->set.source_host)) #endif data->set.reuse_fresh = TRUE; data->set.userpwd = data->set.source_userpwd; /* secondary connection */ status = Curl_connect_host(data, &sec_conn); if(CURLE_OK == status) { sec_conn->sec_conn = NULL; /* important if re-using existing connection to prevent loop */ sec_conn->data = data; conn->sec_conn = sec_conn; } data->set.reuse_fresh = backup_reuse_fresh; data->set.userpwd = backup_userpwd; return status; } criticalmass-1.0.0.orig/curl/lib/transfer.h0000644000175000017500000000513010265631023020104 0ustar danieldaniel#ifndef __TRANSFER_H #define __TRANSFER_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: transfer.h,v 1.24 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ CURLcode Curl_perform(struct SessionHandle *data); CURLcode Curl_pretransfer(struct SessionHandle *data); CURLcode Curl_second_connect(struct connectdata *conn); CURLcode Curl_posttransfer(struct SessionHandle *data); CURLcode Curl_follow(struct SessionHandle *data, char *newurl, bool retry); CURLcode Curl_readwrite(struct connectdata *conn, bool *done); void Curl_single_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd); CURLcode Curl_readwrite_init(struct connectdata *conn); CURLcode Curl_readrewind(struct connectdata *conn); CURLcode Curl_fillreadbuffer(struct connectdata *conn, int bytes, int *nreadp); bool Curl_retry_request(struct connectdata *conn, char **url); /* This sets up a forthcoming transfer */ CURLcode Curl_Transfer (struct connectdata *data, int sockindex, /* socket index to read from or -1 */ curl_off_t size, /* -1 if unknown at this point */ bool getheader, /* TRUE if header parsing is wanted */ curl_off_t *bytecountp, /* return number of bytes read */ int writesockindex, /* socket index to write to, it may very well be the same we read from. -1 disables */ curl_off_t *writecountp /* return number of bytes written */ ); #endif criticalmass-1.0.0.orig/curl/lib/README.hostip0000644000175000017500000000273510265631023020304 0ustar danieldaniel hostip.c explained ================== The main COMPILE-TIME DEFINES to keep in mind when reading the host*.c source file are these: CURLRES_IPV6 - this host has getaddrinfo() and family, and thus we use that. The host may not be able to resolve IPv6, but we don't really have to take that into account. Hosts that aren't IPv6-enabled have CURLRES_IPV4 defined. CURLRES_ARES - is defined if libcurl is built to use c-ares for asynchronous name resolves. It cannot have ENABLE_IPV6 defined at the same time, as c-ares has no ipv6 support. This can be Windows or *nix. CURLRES_THREADED - is defined if libcurl is built to run under (native) Windows, and then the name resolve will be done in a new thread, and the supported asynch API will be the same as for ares-builds. If any of the two previous are defined, CURLRES_ASYNCH is defined too. If libcurl is not built to use an asynchronous resolver, CURLRES_SYNCH is defined. The host*.c sources files are split up like this: hostip.c - method-independent resolver functions and utility functions hostasyn.c - functions for asynchronous name resolves hostsyn.c - functions for synchronous name resolves hostares.c - functions for ares-using name resolves hostthre.c - functions for threaded name resolves hostip4.c - ipv4-specific functions hostip6.c - ipv6-specific functions The hostip.h is the single united header file for all this. It defines the CURLRES_* defines based on the config*.h and setup.h defines. criticalmass-1.0.0.orig/curl/lib/libcurl.imp0000644000175000017500000000155110265631023020255 0ustar danieldaniel# # Definition file for the NLM version of the LIBCURL library from curl # # (LIBCURL) curl_easy_cleanup, curl_easy_getinfo, curl_easy_init, curl_easy_perform, curl_easy_setopt, curl_escape, curl_unescape, curl_formfree, curl_getdate, curl_getenv, curl_global_cleanup, curl_global_init, curl_slist_append, curl_slist_free_all, curl_version, curl_maprintf, curl_mfprintf, curl_mprintf, curl_msprintf, curl_msnprintf, curl_mvfprintf, curl_strequal, curl_strnequal, curl_easy_duphandle, curl_formadd, curl_multi_init, curl_multi_add_handle, curl_multi_remove_handle, curl_multi_fdset, curl_multi_perform, curl_multi_cleanup, curl_multi_info_read, curl_free, curl_version_info, curl_share_init, curl_share_setopt, curl_share_cleanup, curl_global_init_mem, curl_easy_strerror, curl_multi_strerror, curl_share_strerror, curl_easy_reset criticalmass-1.0.0.orig/curl/lib/escape.c0000644000175000017500000000704310265631023017520 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: escape.c,v 1.36 2004/07/01 08:10:21 bagder Exp $ ***************************************************************************/ /* Escape and unescape URL encoding in strings. The functions return a new * allocated string or NULL if an error occurred. */ #include "setup.h" #include #include #include #include #include #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" char *curl_escape(const char *string, int inlength) { size_t alloc = (inlength?(size_t)inlength:strlen(string))+1; char *ns; char *testing_ptr = NULL; unsigned char in; size_t newlen = alloc; int strindex=0; size_t length; ns = malloc(alloc); if(!ns) return NULL; length = alloc-1; while(length--) { in = *string; if(!(in >= 'a' && in <= 'z') && !(in >= 'A' && in <= 'Z') && !(in >= '0' && in <= '9')) { /* encode it */ newlen += 2; /* the size grows with two, since this'll become a %XX */ if(newlen > alloc) { alloc *= 2; testing_ptr = realloc(ns, alloc); if(!testing_ptr) { free( ns ); return NULL; } else { ns = testing_ptr; } } snprintf(&ns[strindex], 4, "%%%02X", in); strindex+=3; } else { /* just copy this */ ns[strindex++]=in; } string++; } ns[strindex]=0; /* terminate it */ return ns; } #define ishex(in) ((in >= 'a' && in <= 'f') || \ (in >= 'A' && in <= 'F') || \ (in >= '0' && in <= '9')) char *curl_unescape(const char *string, int length) { int alloc = (length?length:(int)strlen(string))+1; char *ns = malloc(alloc); unsigned char in; int strindex=0; long hex; if( !ns ) return NULL; while(--alloc > 0) { in = *string; if(('%' == in) && ishex(string[1]) && ishex(string[2])) { /* this is two hexadecimal digits following a '%' */ char hexstr[3]; char *ptr; hexstr[0] = string[1]; hexstr[1] = string[2]; hexstr[2] = 0; hex = strtol(hexstr, &ptr, 16); in = (unsigned char)hex; /* this long is never bigger than 255 anyway */ string+=2; alloc-=2; } ns[strindex++] = in; string++; } ns[strindex]=0; /* terminate it */ return ns; } /* For operating systems/environments that use different malloc/free ssystems for the app and for this library, we provide a free that uses the library's memory system */ void curl_free(void *p) { if(p) free(p); } criticalmass-1.0.0.orig/curl/lib/escape.h0000644000175000017500000000254210265631023017524 0ustar danieldaniel#ifndef __ESCAPE_H #define __ESCAPE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: escape.h,v 1.11 2004/01/07 09:19:35 bagder Exp $ ***************************************************************************/ /* Escape and unescape URL encoding in strings. The functions return a new * allocated string or NULL if an error occurred. */ char *curl_escape(const char *string, int length); char *curl_unescape(const char *string, int length); #endif criticalmass-1.0.0.orig/curl/lib/http_digest.c0000644000175000017500000003235710265631023020604 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_digest.c,v 1.24 2004/11/12 09:18:14 bagder Exp $ ***************************************************************************/ #include "setup.h" #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH) /* -- WIN32 approved -- */ #include #include #include #include #include #include "urldata.h" #include "sendf.h" #include "strequal.h" #include "base64.h" #include "md5.h" #include "http_digest.h" #include "strtok.h" #include "url.h" /* for Curl_safefree() */ #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" /* Test example headers: WWW-Authenticate: Digest realm="testrealm", nonce="1053604598" Proxy-Authenticate: Digest realm="testrealm", nonce="1053604598" */ CURLdigest Curl_input_digest(struct connectdata *conn, bool proxy, char *header) /* rest of the *-authenticate: header */ { bool more = TRUE; char *token = NULL; char *tmp = NULL; bool foundAuth = FALSE; bool foundAuthInt = FALSE; struct SessionHandle *data=conn->data; bool before = FALSE; /* got a nonce before */ struct digestdata *d; if(proxy) { d = &data->state.proxydigest; } else { d = &data->state.digest; } /* skip initial whitespaces */ while(*header && isspace((int)*header)) header++; if(checkprefix("Digest", header)) { header += strlen("Digest"); /* If we already have received a nonce, keep that in mind */ if(d->nonce) before = TRUE; /* clear off any former leftovers and init to defaults */ Curl_digest_cleanup_one(d); while(more) { char value[32]; char content[128]; size_t totlen=0; while(*header && isspace((int)*header)) header++; /* how big can these strings be? */ if((2 == sscanf(header, "%31[^=]=\"%127[^\"]\"", value, content)) || /* try the same scan but without quotes around the content but don't include the possibly trailing comma */ (2 == sscanf(header, "%31[^=]=%127[^,]", value, content)) ) { if(strequal(value, "nonce")) { d->nonce = strdup(content); if(!d->nonce) return CURLDIGEST_NOMEM; } else if(strequal(value, "stale")) { if(strequal(content, "true")) { d->stale = TRUE; d->nc = 1; /* we make a new nonce now */ } } else if(strequal(value, "realm")) { d->realm = strdup(content); if(!d->realm) return CURLDIGEST_NOMEM; } else if(strequal(value, "opaque")) { d->opaque = strdup(content); if(!d->opaque) return CURLDIGEST_NOMEM; } else if(strequal(value, "qop")) { char *tok_buf; /* tokenize the list and choose auth if possible, use a temporary clone of the buffer since strtok_r() ruins it */ tmp = strdup(content); if(!tmp) return CURLDIGEST_NOMEM; token = strtok_r(tmp, ",", &tok_buf); while (token != NULL) { if (strequal(token, "auth")) { foundAuth = TRUE; } else if (strequal(token, "auth-int")) { foundAuthInt = TRUE; } token = strtok_r(NULL, ",", &tok_buf); } free(tmp); /*select only auth o auth-int. Otherwise, ignore*/ if (foundAuth) { d->qop = strdup("auth"); if(!d->qop) return CURLDIGEST_NOMEM; } else if (foundAuthInt) { d->qop = strdup("auth-int"); if(!d->qop) return CURLDIGEST_NOMEM; } } else if(strequal(value, "algorithm")) { d->algorithm = strdup(content); if(!d->algorithm) return CURLDIGEST_NOMEM; if(strequal(content, "MD5-sess")) d->algo = CURLDIGESTALGO_MD5SESS; else if(strequal(content, "MD5")) d->algo = CURLDIGESTALGO_MD5; else return CURLDIGEST_BADALGO; } else { /* unknown specifier, ignore it! */ } totlen = strlen(value)+strlen(content)+1; if(header[strlen(value)+1] == '\"') /* the contents were within quotes, then add 2 for them to the length */ totlen += 2; } else break; /* we're done here */ header += totlen; if(',' == *header) /* allow the list to be comma-separated */ header++; } /* We had a nonce since before, and we got another one now without 'stale=true'. This means we provided bad credentials in the previous request */ if(before && !d->stale) return CURLDIGEST_BAD; /* We got this header without a nonce, that's a bad Digest line! */ if(!d->nonce) return CURLDIGEST_BAD; } else /* else not a digest, get out */ return CURLDIGEST_NONE; return CURLDIGEST_FINE; } /* convert md5 chunk to RFC2617 (section 3.1.3) -suitable ascii string*/ static void md5_to_ascii(unsigned char *source, /* 16 bytes */ unsigned char *dest) /* 33 bytes */ { int i; for(i=0; i<16; i++) snprintf((char *)&dest[i*2], 3, "%02x", source[i]); } CURLcode Curl_output_digest(struct connectdata *conn, bool proxy, unsigned char *request, unsigned char *uripath) { /* We have a Digest setup for this, use it! Now, to get all the details for this sorted out, I must urge you dear friend to read up on the RFC2617 section 3.2.2, */ unsigned char md5buf[16]; /* 16 bytes/128 bits */ unsigned char request_digest[33]; unsigned char *md5this; unsigned char *ha1; unsigned char ha2[33];/* 32 digits and 1 zero byte */ char cnoncebuf[7]; char *cnonce; char *tmp = NULL; struct timeval now; char **allocuserpwd; char *userp; char *passwdp; struct auth *authp; struct SessionHandle *data = conn->data; struct digestdata *d; if(proxy) { d = &data->state.proxydigest; allocuserpwd = &conn->allocptr.proxyuserpwd; userp = conn->proxyuser; passwdp = conn->proxypasswd; authp = &data->state.authproxy; } else { d = &data->state.digest; allocuserpwd = &conn->allocptr.userpwd; userp = conn->user; passwdp = conn->passwd; authp = &data->state.authhost; } /* not set means empty */ if(!userp) userp=(char *)""; if(!passwdp) passwdp=(char *)""; if(!d->nonce) { authp->done = FALSE; return CURLE_OK; } authp->done = TRUE; if(!d->nc) d->nc = 1; if(!d->cnonce) { /* Generate a cnonce */ now = Curl_tvnow(); snprintf(cnoncebuf, sizeof(cnoncebuf), "%06ld", now.tv_sec); if(Curl_base64_encode(cnoncebuf, strlen(cnoncebuf), &cnonce)) d->cnonce = cnonce; else return CURLE_OUT_OF_MEMORY; } /* if the algorithm is "MD5" or unspecified (which then defaults to MD5): A1 = unq(username-value) ":" unq(realm-value) ":" passwd if the algorithm is "MD5-sess" then: A1 = H( unq(username-value) ":" unq(realm-value) ":" passwd ) ":" unq(nonce-value) ":" unq(cnonce-value) */ md5this = (unsigned char *) aprintf("%s:%s:%s", userp, d->realm, passwdp); if(!md5this) return CURLE_OUT_OF_MEMORY; Curl_md5it(md5buf, md5this); free(md5this); /* free this again */ ha1 = (unsigned char *)malloc(33); /* 32 digits and 1 zero byte */ if(!ha1) return CURLE_OUT_OF_MEMORY; md5_to_ascii(md5buf, ha1); if(d->algo == CURLDIGESTALGO_MD5SESS) { /* nonce and cnonce are OUTSIDE the hash */ tmp = aprintf("%s:%s:%s", ha1, d->nonce, d->cnonce); free(ha1); if(!tmp) return CURLE_OUT_OF_MEMORY; ha1 = (unsigned char *)tmp; } /* If the "qop" directive's value is "auth" or is unspecified, then A2 is: A2 = Method ":" digest-uri-value If the "qop" value is "auth-int", then A2 is: A2 = Method ":" digest-uri-value ":" H(entity-body) (The "Method" value is the HTTP request method as specified in section 5.1.1 of RFC 2616) */ md5this = (unsigned char *)aprintf("%s:%s", request, uripath); if(!md5this) { free(ha1); return CURLE_OUT_OF_MEMORY; } if (d->qop && strequal(d->qop, "auth-int")) { /* We don't support auth-int at the moment. I can't see a easy way to get entity-body here */ /* TODO: Append H(entity-body)*/ } Curl_md5it(md5buf, md5this); free(md5this); /* free this again */ md5_to_ascii(md5buf, ha2); if (d->qop) { md5this = (unsigned char *)aprintf("%s:%s:%08x:%s:%s:%s", ha1, d->nonce, d->nc, d->cnonce, d->qop, ha2); } else { md5this = (unsigned char *)aprintf("%s:%s:%s", ha1, d->nonce, ha2); } free(ha1); if(!md5this) return CURLE_OUT_OF_MEMORY; Curl_md5it(md5buf, md5this); free(md5this); /* free this again */ md5_to_ascii(md5buf, request_digest); /* for test case 64 (snooped from a Mozilla 1.3a request) Authorization: Digest username="testuser", realm="testrealm", \ nonce="1053604145", uri="/64", response="c55f7f30d83d774a3d2dcacf725abaca" */ Curl_safefree(*allocuserpwd); if (d->qop) { *allocuserpwd = aprintf( "%sAuthorization: Digest " "username=\"%s\", " "realm=\"%s\", " "nonce=\"%s\", " "uri=\"%s\", " "cnonce=\"%s\", " "nc=%08x, " "qop=\"%s\", " "response=\"%s\"", proxy?"Proxy-":"", userp, d->realm, d->nonce, uripath, /* this is the PATH part of the URL */ d->cnonce, d->nc, d->qop, request_digest); if(strequal(d->qop, "auth")) d->nc++; /* The nc (from RFC) has to be a 8 hex digit number 0 padded which tells to the server how many times you are using the same nonce in the qop=auth mode. */ } else { *allocuserpwd = aprintf( "%sAuthorization: Digest " "username=\"%s\", " "realm=\"%s\", " "nonce=\"%s\", " "uri=\"%s\", " "response=\"%s\"", proxy?"Proxy-":"", userp, d->realm, d->nonce, uripath, /* this is the PATH part of the URL */ request_digest); } if(!*allocuserpwd) return CURLE_OUT_OF_MEMORY; /* Add optional fields */ if(d->opaque) { /* append opaque */ tmp = aprintf("%s, opaque=\"%s\"", *allocuserpwd, d->opaque); if(!tmp) return CURLE_OUT_OF_MEMORY; free(*allocuserpwd); *allocuserpwd = tmp; } if(d->algorithm) { /* append algorithm */ tmp = aprintf("%s, algorithm=\"%s\"", *allocuserpwd, d->algorithm); if(!tmp) return CURLE_OUT_OF_MEMORY; free(*allocuserpwd); *allocuserpwd = tmp; } /* append CRLF to the userpwd header */ tmp = (char*) realloc(*allocuserpwd, strlen(*allocuserpwd) + 3 + 1); if(!tmp) return CURLE_OUT_OF_MEMORY; strcat(tmp, "\r\n"); *allocuserpwd = tmp; return CURLE_OK; } void Curl_digest_cleanup_one(struct digestdata *d) { if(d->nonce) free(d->nonce); d->nonce = NULL; if(d->cnonce) free(d->cnonce); d->cnonce = NULL; if(d->realm) free(d->realm); d->realm = NULL; if(d->opaque) free(d->opaque); d->opaque = NULL; if(d->qop) free(d->qop); d->qop = NULL; if(d->algorithm) free(d->algorithm); d->algorithm = NULL; d->nc = 0; d->algo = CURLDIGESTALGO_MD5; /* default algorithm */ d->stale = FALSE; /* default means normal, not stale */ } void Curl_digest_cleanup(struct SessionHandle *data) { Curl_digest_cleanup_one(&data->state.digest); Curl_digest_cleanup_one(&data->state.proxydigest); } #endif criticalmass-1.0.0.orig/curl/lib/http_digest.h0000644000175000017500000000375710265631023020613 0ustar danieldaniel#ifndef __HTTP_DIGEST_H #define __HTTP_DIGEST_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_digest.h,v 1.7 2004/05/13 14:14:03 bagder Exp $ ***************************************************************************/ typedef enum { CURLDIGEST_NONE, /* not a digest */ CURLDIGEST_BAD, /* a digest, but one we don't like */ CURLDIGEST_BADALGO, /* unsupported algorithm requested */ CURLDIGEST_NOMEM, CURLDIGEST_FINE, /* a digest we act on */ CURLDIGEST_LAST /* last entry in this enum, don't use */ } CURLdigest; enum { CURLDIGESTALGO_MD5, CURLDIGESTALGO_MD5SESS }; /* this is for digest header input */ CURLdigest Curl_input_digest(struct connectdata *conn, bool proxy, char *header); /* this is for creating digest header output */ CURLcode Curl_output_digest(struct connectdata *conn, bool proxy, unsigned char *request, unsigned char *uripath); void Curl_digest_cleanup(struct SessionHandle *data); void Curl_digest_cleanup_one(struct digestdata *dig); #endif criticalmass-1.0.0.orig/curl/lib/urldata.h0000644000175000017500000012446010265631023017724 0ustar danieldaniel#ifndef __URLDATA_H #define __URLDATA_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: urldata.h,v 1.267 2005/04/25 21:39:48 bagder Exp $ ***************************************************************************/ /* This file is for lib internal stuff */ #include "setup.h" #define PORT_FTP 21 #define PORT_FTPS 990 #define PORT_TELNET 23 #define PORT_GOPHER 70 #define PORT_HTTP 80 #define PORT_HTTPS 443 #define PORT_DICT 2628 #define PORT_LDAP 389 #define DICT_MATCH "/MATCH:" #define DICT_MATCH2 "/M:" #define DICT_MATCH3 "/FIND:" #define DICT_DEFINE "/DEFINE:" #define DICT_DEFINE2 "/D:" #define DICT_DEFINE3 "/LOOKUP:" #define CURL_DEFAULT_USER "anonymous" #define CURL_DEFAULT_PASSWORD "curl_by_daniel@haxx.se" #include "cookie.h" #include "formdata.h" #ifdef USE_SSLEAY #ifdef USE_OPENSSL #include "openssl/rsa.h" #include "openssl/crypto.h" #include "openssl/x509.h" #include "openssl/pem.h" #include "openssl/ssl.h" #include "openssl/err.h" #ifdef HAVE_OPENSSL_ENGINE_H #include #endif #ifdef HAVE_OPENSSL_PKCS12_H #include #endif #else /* SSLeay-style includes */ #include "rsa.h" #include "crypto.h" #include "x509.h" #include "pem.h" #include "ssl.h" #include "err.h" #endif /* USE_OPENSSL */ #endif /* USE_SSLEAY */ #ifdef USE_GNUTLS #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #include "timeval.h" #ifdef HAVE_ZLIB_H #include /* for content-encoding */ #endif #ifdef USE_ARES #include #endif #include #include "http_chunks.h" /* for the structs and enum stuff */ #include "hostip.h" #include "hash.h" #ifdef HAVE_GSSAPI #ifdef HAVE_GSSMIT #include #include #else #include #endif #endif /* Download buffer size, keep it fairly big for speed reasons */ #define BUFSIZE CURL_MAX_WRITE_SIZE /* Initial size of the buffer to store headers in, it'll be enlarged in case of need. */ #define HEADERSIZE 256 /* Just a convenience macro to get the larger value out of two given. We prefix with CURL to prevent name collisions. */ #define CURLMAX(x,y) ((x)>(y)?(x):(y)) #ifdef HAVE_KRB4 /* Types needed for krb4-ftp connections */ struct krb4buffer { void *data; size_t size; size_t index; int eof_flag; }; enum protection_level { prot_clear, prot_safe, prot_confidential, prot_private }; #endif /* struct for data related to each SSL connection */ struct ssl_connect_data { bool use; /* use ssl encrypted communications TRUE/FALSE */ #ifdef USE_SSLEAY /* these ones requires specific SSL-types */ SSL_CTX* ctx; SSL* handle; X509* server_cert; #endif /* USE_SSLEAY */ #ifdef USE_GNUTLS gnutls_session session; gnutls_anon_client_credentials cred; #endif /* USE_GNUTLS */ }; struct ssl_config_data { long version; /* what version the client wants to use */ long certverifyresult; /* result from the certificate verification */ long verifypeer; /* set TRUE if this is desired */ long verifyhost; /* 0: no verify 1: check that CN exists 2: CN must match hostname */ char *CApath; /* DOES NOT WORK ON WINDOWS */ char *CAfile; /* cerficate to verify peer against */ char *random_file; /* path to file containing "random" data */ char *egdsocket; /* path to file containing the EGD daemon socket */ char *cipher_list; /* list of ciphers to use */ long numsessions; /* SSL session id cache size */ curl_ssl_ctx_callback fsslctx; /* function to initialize ssl ctx */ void *fsslctxp; /*parameter for call back */ }; /* information stored about one single SSL session */ struct curl_ssl_session { char *name; /* host name for which this ID was used */ void *sessionid; /* as returned from the SSL layer */ size_t idsize; /* if known, otherwise 0 */ long age; /* just a number, the higher the more recent */ unsigned short remote_port; /* remote port to connect to */ struct ssl_config_data ssl_config; /* setup for this session */ }; /* Struct used for Digest challenge-response authentication */ struct digestdata { char *nonce; char *cnonce; char *realm; int algo; bool stale; /* set true for re-negotiation */ char *opaque; char *qop; char *algorithm; int nc; /* nounce count */ }; typedef enum { NTLMSTATE_NONE, NTLMSTATE_TYPE1, NTLMSTATE_TYPE2, NTLMSTATE_TYPE3, NTLMSTATE_LAST } curlntlm; #ifdef USE_WINDOWS_SSPI /* When including these headers, you must define either SECURITY_WIN32 * or SECURITY_KERNEL, indicating who is compiling the code. */ #define SECURITY_WIN32 1 #include #include #include #endif /* Struct used for NTLM challenge-response authentication */ struct ntlmdata { curlntlm state; #ifdef USE_WINDOWS_SSPI CredHandle handle; CtxtHandle c_handle; SEC_WINNT_AUTH_IDENTITY identity; SEC_WINNT_AUTH_IDENTITY *p_identity; int has_handles; void *type_2; int n_type_2; #else unsigned char nonce[8]; #endif }; #ifdef HAVE_GSSAPI struct negotiatedata { bool gss; /* Whether we're processing GSS-Negotiate or Negotiate */ const char* protocol; /* "GSS-Negotiate" or "Negotiate" */ OM_uint32 status; gss_ctx_id_t context; gss_name_t server_name; gss_buffer_desc output_token; }; #endif /**************************************************************************** * HTTP unique setup ***************************************************************************/ struct HTTP { struct FormData *sendit; curl_off_t postsize; /* off_t to handle large file sizes */ char *postdata; const char *p_pragma; /* Pragma: string */ const char *p_accept; /* Accept: string */ curl_off_t readbytecount; curl_off_t writebytecount; /* For FORM posting */ struct Form form; struct Curl_chunker chunk; struct back { curl_read_callback fread; /* backup storage for fread pointer */ void *fread_in; /* backup storage for fread_in pointer */ char *postdata; curl_off_t postsize; } backup; enum { HTTPSEND_NADA, /* init */ HTTPSEND_REQUEST, /* sending a request */ HTTPSEND_BODY, /* sending body */ HTTPSEND_LAST /* never use this */ } sending; void *send_buffer; /* used if the request couldn't be sent in one chunk, points to an allocated send_buffer struct */ }; /**************************************************************************** * FTP unique setup ***************************************************************************/ typedef enum { FTP_STOP, /* do nothing state, stops the state machine */ FTP_WAIT220, /* waiting for the inintial 220 response immediately after a connect */ FTP_AUTH, FTP_USER, FTP_PASS, FTP_ACCT, FTP_PBSZ, FTP_PROT, FTP_PWD, FTP_QUOTE, /* waiting for a response to a command sent in a quote list */ FTP_RETR_PREQUOTE, FTP_STOR_PREQUOTE, FTP_POSTQUOTE, FTP_CWD, /* change dir */ FTP_MKD, /* if the dir didn't exist */ FTP_MDTM, /* to figure out the datestamp */ FTP_TYPE, /* to set type when doing a head-like request */ FTP_LIST_TYPE, /* set type when about to do a dir list */ FTP_RETR_TYPE, /* set type when about to RETR a file */ FTP_STOR_TYPE, /* set type when about to STOR a file */ FTP_SIZE, /* get the remote file's size for head-like request */ FTP_RETR_SIZE, /* get the remote file's size for RETR */ FTP_STOR_SIZE, /* get the size for (resumed) STOR */ FTP_REST, /* when used to check if the server supports it in head-like */ FTP_RETR_REST, /* when asking for "resume" in for RETR */ FTP_PORT, /* generic state for PORT, LPRT and EPRT, check count1 */ FTP_PASV, /* generic state for PASV and EPSV, check count1 */ FTP_LIST, /* generic state for LIST, NLST or a custom list command */ FTP_RETR, FTP_STOR, /* generic state for STOR and APPE */ FTP_QUIT, FTP_LAST /* never used */ } ftpstate; struct FTP { curl_off_t *bytecountp; char *user; /* user name string */ char *passwd; /* password string */ char *urlpath; /* the originally given path part of the URL */ char **dirs; /* realloc()ed array for path components */ int dirdepth; /* number of entries used in the 'dirs' array */ int diralloc; /* number of entries allocated for the 'dirs' array */ char *file; /* decoded file */ char *entrypath; /* the PWD reply when we logged on */ char *cache; /* data cache between getresponse()-calls */ curl_off_t cache_size; /* size of cache in bytes */ bool dont_check; /* Set to TRUE to prevent the final (post-transfer) file size and 226/250 status check. It should still read the line, just ignore the result. */ bool no_transfer; /* nothing was transfered, (possibly because a resumed transfer already was complete) */ long response_time; /* When no timeout is given, this is the amount of seconds we await for an FTP response. Initialized in Curl_ftp_connect() */ bool ctl_valid; /* Tells Curl_ftp_quit() whether or not to do anything. If the connection has timed out or been closed, this should be FALSE when it gets to Curl_ftp_quit() */ bool cwddone; /* if it has been determined that the proper CWD combo already has been done */ char *prevpath; /* conn->path from the previous transfer */ size_t nread_resp; /* number of bytes currently read of a server response */ char *linestart_resp; /* line start pointer for the FTP server response reader function */ int count1; /* general purpose counter for the state machine */ int count2; /* general purpose counter for the state machine */ int count3; /* general purpose counter for the state machine */ char *sendthis; /* allocated pointer to a buffer that is to be sent to the ftp server */ size_t sendleft; /* number of bytes left to send from the sendthis buffer */ size_t sendsize; /* total size of the sendthis buffer */ struct timeval response; /* set to Curl_tvnow() when a command has been sent off, used to time-out response reading */ ftpstate state; /* always use ftp.c:state() to change state! */ curl_off_t downloadsize; }; /**************************************************************************** * FILE unique setup ***************************************************************************/ struct FILEPROTO { char *path; /* the path we operate on */ char *freepath; /* pointer to the allocated block we must free, this might differ from the 'path' pointer */ int fd; /* open file descriptor to read from! */ }; /* * Boolean values that concerns this connection. */ struct ConnectBits { bool close; /* if set, we close the connection after this request */ bool reuse; /* if set, this is a re-used connection */ bool chunk; /* if set, this is a chunked transfer-encoding */ bool httpproxy; /* if set, this transfer is done through a http proxy */ bool user_passwd; /* do we use user+password for this connection? */ bool proxy_user_passwd; /* user+password for the proxy? */ bool ipv6_ip; /* we communicate with a remote site specified with pure IPv6 IP address */ bool ipv6; /* we communicate with a site using an IPv6 address */ bool use_range; bool rangestringalloc; /* the range string is malloc()'ed */ bool do_more; /* this is set TRUE if the ->curl_do_more() function is supposed to be called, after ->curl_do() */ bool upload_chunky; /* set TRUE if we are doing chunked transfer-encoding on upload */ bool getheader; /* TRUE if header parsing is wanted */ bool forbidchunk; /* used only to explicitly forbid chunk-upload for specific upload buffers. See readmoredata() in http.c for details. */ bool tcpconnect; /* the TCP layer (or simimlar) is connected, this is set the first time on the first connect function call */ bool protoconnstart;/* the protocol layer has STARTED its operation after the TCP layer connect */ bool retry; /* this connection is about to get closed and then re-attempted at another connection. */ bool no_body; /* CURLOPT_NO_BODY (or similar) was set */ bool tunnel_proxy; /* if CONNECT is used to "tunnel" through the proxy. This is implicit when SSL-protocols are used through proxies, but can also be enabled explicitly by apps */ bool authneg; /* TRUE when the auth phase has started, which means that we are creating a request with an auth header, but it is not the final request in the auth negotiation. */ bool rewindaftersend;/* TRUE when the sending couldn't be stopped even though it will be discarded. When the whole send operation is done, we must call the data rewind callback. */ bool ftp_use_epsv; /* As set with CURLOPT_FTP_USE_EPSV, but if we find out EPSV doesn't work we disable it for the forthcoming requests */ bool ftp_use_eprt; /* As set with CURLOPT_FTP_USE_EPRT, but if we find out EPRT doesn't work we disable it for the forthcoming requests */ bool ftp_use_lprt; /* As set with CURLOPT_FTP_USE_EPRT, but if we find out LPRT doesn't work we disable it for the forthcoming requests */ bool netrc; /* name+password provided by netrc */ }; struct hostname { char *rawalloc; /* allocated "raw" version of the name */ char *encalloc; /* allocated IDN-encoded version of the name */ char *name; /* name to use internally, might be encoded, might be raw */ char *dispname; /* name to display, as 'name' might be encoded */ }; /* * This struct is all the previously local variables from Curl_perform() moved * to struct to allow the function to return and get re-invoked better without * losing state. */ struct Curl_transfer_keeper { curl_off_t bytecount; /* total number of bytes read */ curl_off_t writebytecount; /* number of bytes written */ struct timeval start; /* transfer started at this time */ struct timeval now; /* current time */ bool header; /* incoming data has HTTP header */ enum { HEADER_NORMAL, /* no bad header at all */ HEADER_PARTHEADER, /* part of the chunk is a bad header, the rest is normal data */ HEADER_ALLBAD /* all was believed to be header */ } badheader; /* the header was deemed bad and will be written as body */ int headerline; /* counts header lines to better track the first one */ char *hbufp; /* points at *end* of header line */ size_t hbuflen; char *str; /* within buf */ char *str_start; /* within buf */ char *end_ptr; /* within buf */ char *p; /* within headerbuff */ bool content_range; /* set TRUE if Content-Range: was found */ curl_off_t offset; /* possible resume offset read from the Content-Range: header */ int httpcode; /* error code from the 'HTTP/1.? XXX' line */ int httpversion; /* the HTTP version*10 */ struct timeval start100; /* time stamp to wait for the 100 code from */ bool write_after_100_header; /* TRUE = we enable the write after we received a 100-continue/timeout or FALSE = directly */ bool wait100_after_headers; /* TRUE = after the request-headers have been sent off properly, we go into the wait100 state, FALSE = don't */ int content_encoding; /* What content encoding. sec 3.5, RFC2616. */ #define IDENTITY 0 /* No encoding */ #define DEFLATE 1 /* zlib delfate [RFC 1950 & 1951] */ #define GZIP 2 /* gzip algorithm [RFC 1952] */ #define COMPRESS 3 /* Not handled, added for completeness */ #ifdef HAVE_LIBZ bool zlib_init; /* True if zlib already initialized; undefined if Content-Encoding header. */ z_stream z; /* State structure for zlib. */ #endif time_t timeofdoc; long bodywrites; char *buf; char *uploadbuf; curl_socket_t maxfd; int keepon; bool upload_done; /* set to TRUE when doing chunked transfer-encoding upload and we're uploading the last chunk */ bool ignorebody; /* we read a response-body but we ignore it! */ bool ignorecl; /* This HTTP response has no body so we ignore the Content- Length: header */ }; #if defined(USE_ARES) || defined(USE_THREADING_GETHOSTBYNAME) || \ defined(USE_THREADING_GETADDRINFO) struct Curl_async { char *hostname; int port; struct Curl_dns_entry *dns; bool done; /* set TRUE when the lookup is complete */ int status; /* if done is TRUE, this is the status from the callback */ void *os_specific; /* 'struct thread_data' for Windows */ }; #endif #define FIRSTSOCKET 0 #define SECONDARYSOCKET 1 /* * The connectdata struct contains all fields and variables that should be * unique for an entire connection. */ struct connectdata { /**** Fields set when inited and not modified again */ struct SessionHandle *data; /* link to the root CURL struct */ long connectindex; /* what index in the connects index this particular struct has */ long protocol; /* PROT_* flags concerning the protocol set */ #define PROT_MISSING (1<<0) #define PROT_GOPHER (1<<1) #define PROT_HTTP (1<<2) #define PROT_HTTPS (1<<3) #define PROT_FTP (1<<4) #define PROT_TELNET (1<<5) #define PROT_DICT (1<<6) #define PROT_LDAP (1<<7) #define PROT_FILE (1<<8) #define PROT_FTPS (1<<9) #define PROT_SSL (1<<10) /* protocol requires SSL */ /* 'dns_entry' is the particular host we use. This points to an entry in the DNS cache and it will not get pruned while locked. It gets unlocked in Curl_done() */ struct Curl_dns_entry *dns_entry; /* 'ip_addr' is the particular IP we connected to. It points to a struct within the DNS cache, so this pointer is only valid as long as the DNS cache entry remains locked. It gets unlocked in Curl_done() */ Curl_addrinfo *ip_addr; /* 'ip_addr_str' is the ip_addr data as a human readable malloc()ed string. It remains available as long as the connection does, which is longer than the ip_addr itself. Set with Curl_store_ip_addr() when ip_addr has been set. */ char *ip_addr_str; char protostr[16]; /* store the protocol string in this buffer */ struct hostname host; struct hostname proxy; char *pathbuffer;/* allocated buffer to store the URL's path part in */ char *path; /* path to use, points to somewhere within the pathbuffer area */ long port; /* which port to use locally */ unsigned short remote_port; /* what remote port to connect to, not the proxy port! */ curl_off_t bytecount; long headerbytecount; /* only count received headers */ long deductheadercount; /* this amount of bytes doesn't count when we check if anything has been transfered at the end of a connection. We use this counter to make only a 100 reply (without a following second response code) result in a CURLE_GOT_NOTHING error code */ char *range; /* range, if used. See README for detailed specification on this syntax. */ curl_off_t resume_from; /* continue [ftp] transfer from here */ char *user; /* user name string, allocated */ char *passwd; /* password string, allocated */ char *proxyuser; /* proxy user name string, allocated */ char *proxypasswd; /* proxy password string, allocated */ struct timeval now; /* "current" time */ struct timeval created; /* creation time */ curl_socket_t sock[2]; /* two sockets, the second is used for the data transfer when doing FTP */ curl_off_t maxdownload; /* in bytes, the maximum amount of data to fetch, 0 means unlimited */ struct ssl_connect_data ssl[2]; /* this is for ssl-stuff */ struct ssl_config_data ssl_config; struct ConnectBits bits; /* various state-flags for this connection */ /* These two functions MUST be set by the curl_connect() function to be be protocol dependent */ CURLcode (*curl_do)(struct connectdata *, bool *done); CURLcode (*curl_done)(struct connectdata *, CURLcode); /* If the curl_do() function is better made in two halves, this * curl_do_more() function will be called afterwards, if set. For example * for doing the FTP stuff after the PASV/PORT command. */ CURLcode (*curl_do_more)(struct connectdata *); /* This function *MAY* be set to a protocol-dependent function that is run * after the connect() and everything is done, as a step in the connection. * The 'done' pointer points to a bool that should be set to TRUE if the * function completes before return. If it doesn't complete, the caller * should call the curl_connecting() function until it is. */ CURLcode (*curl_connect)(struct connectdata *, bool *done); /* See above. Currently only used for FTP. */ CURLcode (*curl_connecting)(struct connectdata *, bool *done); CURLcode (*curl_doing)(struct connectdata *, bool *done); /* Called from the multi interface during the PROTOCONNECT phase, and it should then return a proper fd set */ CURLcode (*curl_proto_fdset)(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp); /* Called from the multi interface during the DOING phase, and it should then return a proper fd set */ CURLcode (*curl_doing_fdset)(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp); /* This function *MAY* be set to a protocol-dependent function that is run * by the curl_disconnect(), as a step in the disconnection. */ CURLcode (*curl_disconnect)(struct connectdata *); /* This function *MAY* be set to a protocol-dependent function that is run * in the curl_close() function if protocol-specific cleanups are required. */ CURLcode (*curl_close)(struct connectdata *); /**** curl_get() phase fields */ /* READ stuff */ curl_socket_t sockfd; /* socket to read from or CURL_SOCKET_BAD */ curl_off_t size; /* -1 if unknown at this point */ curl_off_t *bytecountp; /* return number of bytes read or NULL */ /* WRITE stuff */ curl_socket_t writesockfd; /* socket to write to, it may very well be the same we read from. CURL_SOCKET_BAD disables */ curl_off_t *writebytecountp; /* return number of bytes written or NULL */ /** Dynamicly allocated strings, may need to be freed before this **/ /** struct is killed. **/ struct dynamically_allocated_data { char *proxyuserpwd; /* free later if not NULL! */ char *uagent; /* free later if not NULL! */ char *accept_encoding; /* free later if not NULL! */ char *userpwd; /* free later if not NULL! */ char *rangeline; /* free later if not NULL! */ char *ref; /* free later if not NULL! */ char *host; /* free later if not NULL */ char *cookiehost; /* free later if not NULL */ } allocptr; char *newurl; /* This can only be set if a Location: was in the document headers */ int sec_complete; /* if krb4 is enabled for this connection */ #ifdef HAVE_KRB4 enum protection_level command_prot; enum protection_level data_prot; enum protection_level request_data_prot; size_t buffer_size; struct krb4buffer in_buffer, out_buffer; void *app_data; const struct Curl_sec_client_mech *mech; struct sockaddr_in local_addr; #endif /*************** Request - specific items ************/ /* previously this was in the urldata struct */ union { struct HTTP *http; struct HTTP *gopher; /* alias, just for the sake of being more readable */ struct HTTP *https; /* alias, just for the sake of being more readable */ struct FTP *ftp; struct FILEPROTO *file; void *telnet; /* private for telnet.c-eyes only */ void *generic; } proto; /* This struct is inited when needed */ struct Curl_transfer_keeper keep; /* 'upload_present' is used to keep a byte counter of how much data there is still left in the buffer, aimed for upload. */ ssize_t upload_present; /* 'upload_fromhere' is used as a read-pointer when we uploaded parts of a buffer, so the next read should read from where this pointer points to, and the 'upload_present' contains the number of bytes available at this position */ char *upload_fromhere; curl_read_callback fread; /* function that reads the input */ void *fread_in; /* pointer to pass to the fread() above */ struct ntlmdata ntlm; /* NTLM differs from other authentication schemes because it authenticates connections, not single requests! */ struct ntlmdata proxyntlm; /* NTLM data for proxy */ char syserr_buf [256]; /* buffer for Curl_strerror() */ #if defined(USE_ARES) || defined(USE_THREADING_GETHOSTBYNAME) || \ defined(USE_THREADING_GETADDRINFO) /* data used for the asynch name resolve callback */ struct Curl_async async; #endif struct connectdata *sec_conn; /* secondary connection for 3rd party transfer */ enum { NORMAL, SOURCE3RD, TARGET3RD } xfertype; }; /* The end of connectdata. */ /* * Struct to keep statistical and informational data. */ struct PureInfo { int httpcode; /* Recent HTTP or FTP response code */ int httpproxycode; int httpversion; long filetime; /* If requested, this is might get set. Set to -1 if the time was unretrievable. We cannot have this of type time_t, since time_t is unsigned on several platforms such as OpenVMS. */ long header_size; /* size of read header(s) in bytes */ long request_size; /* the amount of bytes sent in the request(s) */ long proxyauthavail; long httpauthavail; long numconnects; /* how many new connection did libcurl created */ char *contenttype; /* the content type of the object */ }; struct Progress { long lastshow; /* time() of the last displayed progress meter or NULL to force redraw at next call */ curl_off_t size_dl; /* total expected size */ curl_off_t size_ul; /* total expected size */ curl_off_t downloaded; /* transfered so far */ curl_off_t uploaded; /* transfered so far */ curl_off_t current_speed; /* uses the currently fastest transfer */ bool callback; /* set when progress callback is used */ int width; /* screen width at download start */ int flags; /* see progress.h */ double timespent; curl_off_t dlspeed; curl_off_t ulspeed; double t_nslookup; double t_connect; double t_pretransfer; double t_starttransfer; double t_redirect; struct timeval start; struct timeval t_startsingle; #define CURR_TIME (5+1) /* 6 entries for 5 seconds */ curl_off_t speeder[ CURR_TIME ]; struct timeval speeder_time[ CURR_TIME ]; int speeder_c; }; typedef enum { HTTPREQ_NONE, /* first in list */ HTTPREQ_GET, HTTPREQ_POST, HTTPREQ_POST_FORM, /* we make a difference internally */ HTTPREQ_PUT, HTTPREQ_HEAD, HTTPREQ_CUSTOM, HTTPREQ_LAST /* last in list */ } Curl_HttpReq; /* * Values that are generated, temporary or calculated internally for a * "session handle" must be defined within the 'struct urlstate'. This struct * will be used within the SessionHandle struct. When the 'SessionHandle' * struct is cloned, this data MUST NOT be copied. * * Remember that any "state" information goes globally for the curl handle. * Session-data MUST be put in the connectdata struct and here. */ #define MAX_CURL_USER_LENGTH 256 #define MAX_CURL_PASSWORD_LENGTH 256 #define MAX_CURL_USER_LENGTH_TXT "255" #define MAX_CURL_PASSWORD_LENGTH_TXT "255" struct auth { long want; /* Bitmask set to the authentication methods wanted by the app (with CURLOPT_HTTPAUTH or CURLOPT_PROXYAUTH). */ long picked; long avail; /* bitmask for what the server reports to support for this resource */ bool done; /* TRUE when the auth phase is done and ready to do the *actual* request */ bool multi; /* TRUE if this is not yet authenticated but within the auth multipass negotiation */ }; struct UrlState { enum { Curl_if_none, Curl_if_easy, Curl_if_multi } used_interface; /* buffers to store authentication data in, as parsed from input options */ struct timeval keeps_speed; /* for the progress meter really */ /* 'connects' will be an allocated array with pointers. If the pointer is set, it holds an allocated connection. */ struct connectdata **connects; long numconnects; /* size of the 'connects' array */ char *headerbuff; /* allocated buffer to store headers in */ size_t headersize; /* size of the allocation */ char buffer[BUFSIZE+1]; /* download buffer */ char uploadbuffer[BUFSIZE+1]; /* upload buffer */ curl_off_t current_speed; /* the ProgressShow() funcion sets this, bytes / second */ bool this_is_a_follow; /* this is a followed Location: request */ char *first_host; /* if set, this should be the host name that we will sent authorization to, no else. Used to make Location: following not keep sending user+password... This is strdup() data. */ struct curl_ssl_session *session; /* array of 'numsessions' size */ long sessionage; /* number of the most recent session */ char *scratch; /* huge buffer[BUFSIZE*2] when doing upload CRLF replacing */ bool errorbuf; /* Set to TRUE if the error buffer is already filled in. This must be set to FALSE every time _easy_perform() is called. */ int os_errno; /* filled in with errno whenever an error occurs */ #ifdef HAVE_SIGNAL /* storage for the previous bag^H^H^HSIGPIPE signal handler :-) */ void (*prev_signal)(int sig); #endif bool allow_port; /* Is set.use_port allowed to take effect or not. This is always set TRUE when curl_easy_perform() is called. */ struct digestdata digest; struct digestdata proxydigest; #ifdef HAVE_GSSAPI struct negotiatedata negotiate; #endif struct auth authhost; struct auth authproxy; bool authproblem; /* TRUE if there's some problem authenticating */ #ifdef USE_ARES ares_channel areschannel; /* for name resolves */ #endif #if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H) ENGINE *engine; #endif /* USE_SSLEAY */ }; /* * This 'DynamicStatic' struct defines dynamic states that actually change * values in the 'UserDefined' area, which MUST be taken into consideration * if the UserDefined struct is cloned or similar. You can probably just * copy these, but each one indicate a special action on other data. */ struct DynamicStatic { char *url; /* work URL, copied from UserDefined */ bool url_alloc; /* URL string is malloc()'ed */ bool url_changed; /* set on CURL_OPT_URL, used to detect if the URL was changed after the connect phase, as we allow callback to change it and if so, we reconnect to use the new URL instead */ char *proxy; /* work proxy, copied from UserDefined */ bool proxy_alloc; /* http proxy string is malloc()'ed */ char *referer; /* referer string */ bool referer_alloc; /* referer sting is malloc()ed */ struct curl_slist *cookielist; /* list of cookie files set by curl_easy_setopt(COOKIEFILE) calls */ }; /* * This 'UserDefined' struct must only contain data that is set once to go * for many (perhaps) independent connections. Values that are generated or * calculated internally for the "session handle" MUST be defined within the * 'struct urlstate' instead. The only exceptions MUST note the changes in * the 'DynamicStatic' struct. */ struct UserDefined { FILE *err; /* the stderr user data goes here */ void *debugdata; /* the data that will be passed to fdebug */ char *errorbuffer; /* store failure messages in here */ char *proxyuserpwd; /* Proxy , if used */ long proxyport; /* If non-zero, use this port number by default. If the proxy string features a ":[port]" that one will override this. */ void *out; /* the fetched file goes here */ void *in; /* the uploaded file is read from here */ void *writeheader; /* write the header to this is non-NULL */ char *set_url; /* what original URL to work on */ char *set_proxy; /* proxy to use */ long use_port; /* which port to use (when not using default) */ char *userpwd; /* , if used */ long httpauth; /* what kind of HTTP authentication to use (bitmask) */ long proxyauth; /* what kind of proxy authentication to use (bitmask) */ char *set_range; /* range, if used. See README for detailed specification on this syntax. */ long followlocation; /* as in HTTP Location: */ long maxredirs; /* maximum no. of http(s) redirects to follow */ char *set_referer; /* custom string */ bool free_referer; /* set TRUE if 'referer' points to a string we allocated */ char *useragent; /* User-Agent string */ char *encoding; /* Accept-Encoding string */ char *postfields; /* if POST, set the fields' values here */ curl_off_t postfieldsize; /* if POST, this might have a size to use instead of strlen(), and then the data *may* be binary (contain zero bytes) */ char *ftpport; /* port to send with the FTP PORT command */ char *device; /* network interface to use */ curl_write_callback fwrite; /* function that stores the output */ curl_write_callback fwrite_header; /* function that stores headers */ curl_read_callback fread; /* function that reads the input */ curl_progress_callback fprogress; /* function for progress information */ curl_debug_callback fdebug; /* function that write informational data */ curl_ioctl_callback ioctl; /* function for I/O control */ void *progress_client; /* pointer to pass to the progress callback */ void *ioctl_client; /* pointer to pass to the ioctl callback */ long timeout; /* in seconds, 0 means no timeout */ long connecttimeout; /* in seconds, 0 means no timeout */ long ftp_response_timeout; /* in seconds, 0 means no timeout */ curl_off_t infilesize; /* size of file to upload, -1 means unknown */ long low_speed_limit; /* bytes/second */ long low_speed_time; /* number of seconds */ curl_off_t set_resume_from; /* continue [ftp] transfer from here */ char *cookie; /* HTTP cookie string to send */ struct curl_slist *headers; /* linked list of extra headers */ struct curl_httppost *httppost; /* linked list of POST data */ char *cert; /* certificate */ char *cert_type; /* format for certificate (default: PEM) */ char *key; /* private key */ char *key_type; /* format for private key (default: PEM) */ char *key_passwd; /* plain text private key password */ char *cookiejar; /* dump all cookies to this file */ bool cookiesession; /* new cookie session? */ bool crlf; /* convert crlf on ftp upload(?) */ char *ftp_account; /* ftp account data */ struct curl_slist *quote; /* after connection is established */ struct curl_slist *postquote; /* after the transfer */ struct curl_slist *prequote; /* before the transfer, after type */ struct curl_slist *source_quote; /* 3rd party quote */ struct curl_slist *source_prequote; /* in 3rd party transfer mode - before the transfer on source host */ struct curl_slist *source_postquote; /* in 3rd party transfer mode - after the transfer on source host */ struct curl_slist *telnet_options; /* linked list of telnet options */ curl_TimeCond timecondition; /* kind of time/date comparison */ time_t timevalue; /* what time to compare with */ curl_closepolicy closepolicy; /* connection cache close concept */ Curl_HttpReq httpreq; /* what kind of HTTP request (if any) is this */ char *customrequest; /* HTTP/FTP request to use */ long httpversion; /* when non-zero, a specific HTTP version requested to be used in the library's request(s) */ char *auth_host; /* if set, this is the allocated string to the host name * to which to send the authorization data to, and no other * host (which location-following otherwise could lead to) */ char *krb4_level; /* what security level */ struct ssl_config_data ssl; /* user defined SSL stuff */ curl_proxytype proxytype; /* what kind of proxy that is in use */ int dns_cache_timeout; /* DNS cache timeout */ long buffer_size; /* size of receive buffer to use */ char *private_data; /* Private data */ struct curl_slist *http200aliases; /* linked list of aliases for http200 */ long ip_version; curl_off_t max_filesize; /* Maximum file size to download */ char *source_url; /* for 3rd party transfer */ char *source_userpwd; /* for 3rd party transfer */ /* Here follows boolean settings that define how to behave during this session. They are STATIC, set by libcurl users or at least initially and they don't change during operations. */ bool printhost; /* printing host name in debug info */ bool get_filetime; bool tunnel_thru_httpproxy; bool ftp_append; bool ftp_ascii; bool ftp_list_only; bool ftp_create_missing_dirs; bool ftp_use_port; bool hide_progress; bool http_fail_on_error; bool http_follow_location; bool http_disable_hostname_check_before_authentication; bool include_header; /* include received protocol headers in data output */ bool http_set_referer; bool http_auto_referer; /* set "correct" referer when following location: */ bool opt_no_body; /* as set with CURLOPT_NO_BODY */ bool set_port; bool upload; enum CURL_NETRC_OPTION use_netrc; /* defined in include/curl.h */ char *netrc_file; /* if not NULL, use this instead of trying to find $HOME/.netrc */ bool verbose; bool krb4; /* kerberos4 connection requested */ bool reuse_forbid; /* forbidden to be reused, close after use */ bool reuse_fresh; /* do not re-use an existing connection */ bool expect100header; /* TRUE if we added Expect: 100-continue */ bool ftp_use_epsv; /* if EPSV is to be attempted or not */ bool ftp_use_eprt; /* if EPRT is to be attempted or not */ bool ftp_use_lprt; /* if LPRT is to be attempted or not */ curl_ftpssl ftp_ssl; /* if AUTH TLS is to be attempted etc */ curl_ftpauth ftpsslauth; /* what AUTH XXX to be attempted */ bool no_signal; /* do not use any signal/alarm handler */ bool global_dns_cache; /* subject for future removal */ bool tcp_nodelay; /* whether to enable TCP_NODELAY or not */ }; /* * In August 2001, this struct was redesigned and is since stricter than * before. The 'connectdata' struct MUST have all the connection oriented * stuff as we may now have several simultaneous connections and connection * structs in memory. * * From now on, the 'SessionHandle' must only contain data that is set once to * go for many (perhaps) independent connections. Values that are generated or * calculated internally for the "session handle" must be defined within the * 'struct urlstate' instead. */ struct SessionHandle { struct curl_hash *hostcache; void *multi; /* if non-NULL, points to the multi handle struct of which this "belongs" */ struct Curl_share *share; /* Share, handles global variable mutexing */ struct UserDefined set; /* values set by the libcurl user */ struct DynamicStatic change; /* possibly modified userdefined data */ struct CookieInfo *cookies; /* the cookies, read from files and servers */ struct Progress progress; /* for all the progress meter data */ struct UrlState state; /* struct for fields used for state info and other dynamic purposes */ struct PureInfo info; /* stats, reports and info data */ }; #define LIBCURL_NAME "libcurl" #endif criticalmass-1.0.0.orig/curl/lib/libcurl.framework.make0000644000175000017500000000644410265631023022407 0ustar danieldaniel# to build Mac OS X framework call the following line with the directory set properly to lib # make build -e -f libcurl.framework.make TMP_DIR = ../lib/.lib LIB_DIR = ../lib # for debug symbols add the -g option. Remove the -O2 option for best debuggin. # Can be compiled with -O3 optimizations. C_OPTIONS = \ -fno-common \ -O2 \ -DHAVE_CONFIG_H \ -DPIC \ -I../lib \ -I../include \ -Wall LIBRARIES = /usr/lib/libssl.dylib \ /usr/lib/libcrypto.dylib \ -lz # These libtool options are needed for a framework. # @executable_path tells the application that links to this library where to find it. # On Mac OS X frameworks are usually iniside the application bundle in a frameworks folder. # Define a seg1addr so prebinding does not overlap with other frameworks or bundles. # For prebinding 0x10400000 was chosen a bit at random. # If this overlaps one of you current libs just change in the makefile. # This address is safe for all built in frameworks. LINK_OPTIONS = -prebind \ -seg1addr 0x10400000 \ -dynamiclib \ -install_name @executable_path/../Frameworks/libcurl.framework/libcurl # This is the file list. It is not dynamically generated so this must be updated if new files are added to the build. OBJECTS = $(TMP_DIR)/base64.o \ $(TMP_DIR)/connect.o \ $(TMP_DIR)/content_encoding.o \ $(TMP_DIR)/cookie.o \ $(TMP_DIR)/dict.o \ $(TMP_DIR)/easy.o \ $(TMP_DIR)/escape.o \ $(TMP_DIR)/file.o \ $(TMP_DIR)/formdata.o \ $(TMP_DIR)/ftp.o \ $(TMP_DIR)/getenv.o \ $(TMP_DIR)/getinfo.o \ $(TMP_DIR)/gtls.o \ $(TMP_DIR)/hash.o \ $(TMP_DIR)/hostares.o \ $(TMP_DIR)/hostasyn.o \ $(TMP_DIR)/hostip.o \ $(TMP_DIR)/hostip4.o \ $(TMP_DIR)/hostip6.o \ $(TMP_DIR)/hostsyn.o \ $(TMP_DIR)/hostthre.o \ $(TMP_DIR)/http.o \ $(TMP_DIR)/http_chunks.o \ $(TMP_DIR)/http_digest.o \ $(TMP_DIR)/http_negotiate.o \ $(TMP_DIR)/http_ntlm.o \ $(TMP_DIR)/if2ip.o \ $(TMP_DIR)/inet_ntop.o \ $(TMP_DIR)/inet_pton.o \ $(TMP_DIR)/krb4.o \ $(TMP_DIR)/ldap.o \ $(TMP_DIR)/llist.o \ $(TMP_DIR)/md5.o \ $(TMP_DIR)/memdebug.o \ $(TMP_DIR)/mprintf.o \ $(TMP_DIR)/multi.o \ $(TMP_DIR)/netrc.o \ $(TMP_DIR)/parsedate.o \ $(TMP_DIR)/progress.o \ $(TMP_DIR)/security.o \ $(TMP_DIR)/sendf.o \ $(TMP_DIR)/share.o \ $(TMP_DIR)/speedcheck.o \ $(TMP_DIR)/sslgen.o \ $(TMP_DIR)/ssluse.o \ $(TMP_DIR)/strequal.o \ $(TMP_DIR)/strerror.o \ $(TMP_DIR)/strtok.o \ $(TMP_DIR)/strtoofft.o \ $(TMP_DIR)/telnet.o \ $(TMP_DIR)/timeval.o \ $(TMP_DIR)/transfer.o \ $(TMP_DIR)/url.o \ $(TMP_DIR)/version.o build: $(TMP_DIR) $(LIB_DIR) $(LIB_DIR)/libcurl.framework $(TMP_DIR) : mkdir -p $(TMP_DIR) $(LIB_DIR) : mkdir -p $(LIB_DIR) # This builds the framework structure and links everything properly $(LIB_DIR)/libcurl.framework: $(OBJECTS) $(LIB_DIR)/libcurl.plist mkdir -p $(LIB_DIR)/libcurl.framework/Versions/A/Resources $(CC) $(LINK_OPTIONS) $(LIBRARIES) $(OBJECTS) \ -o $(LIB_DIR)/libcurl.framework/Versions/A/libcurl cp $(LIB_DIR)/libcurl.plist $(LIB_DIR)/libcurl.framework/Versions/A/Resources/Info.plist cd $(LIB_DIR)/libcurl.framework; \ ln -fs ./Versions/A/libcurl libcurl; \ ln -fs ./Versions/A/Resources Resources cd $(LIB_DIR)/libcurl.framework/Versions; \ ln -fs ./A Current $(OBJECTS) : $(TMP_DIR)/%.o: $(LIB_DIR)/%.c $(CC) $(C_OPTIONS) -c $< -o $@ clean: rm -fr $(LIB_DIR)/libcurl.framework rm -f $(OBJECTS) criticalmass-1.0.0.orig/curl/lib/curlx.h0000644000175000017500000000633410265631023017424 0ustar danieldaniel#ifndef __CURLX_H #define __CURLX_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: curlx.h,v 1.2 2004/05/24 11:57:34 bagder Exp $ ***************************************************************************/ /* * Defines protos and includes all header files that provide the curlx_* * functions. The curlx_* functions are not part of the libcurl API, but are * stand-alone functions whose sources can be built and linked by apps if need * be. */ #include /* this is still a public header file that provides the curl_mprintf() functions while they still are offered publicly. They will be made library- private one day */ #include "strequal.h" /* "strequal.h" provides the strequal protos */ #include "strtoofft.h" /* "strtoofft.h" provides this function: curlx_strtoofft(), returns a curl_off_t number from a given string. */ #include "timeval.h" /* "timeval.h" sets up a 'struct timeval' even for platforms that otherwise don't have one and has protos for these functions: curlx_tvnow() curlx_tvdiff() curlx_tvdiff_secs() */ /* Now setup curlx_ * names for the functions that are to become curlx_ and be removed from a future libcurl official API: curlx_getenv curlx_mprintf (and its variations) curlx_strequal curlx_strnequal */ #define curlx_getenv curl_getenv #define curlx_strequal curl_strequal #define curlx_strnequal curl_strnequal #define curlx_mvsnprintf curl_mvsnprintf #define curlx_msnprintf curl_msnprintf #define curlx_maprintf curl_maprintf #define curlx_mvaprintf curl_mvaprintf #define curlx_msprintf curl_msprintf #define curlx_mprintf curl_mprintf #define curlx_mfprintf curl_mfprintf #define curlx_mvsprintf curl_mvsprintf #define curlx_mvprintf curl_mvprintf #define curlx_mvfprintf curl_mvfprintf #ifdef ENABLE_CURLX_PRINTF /* If this define is set, we define all "standard" printf() functions to use the curlx_* version instead. It makes the source code transparant and easier to understand/patch. */ # define printf curlx_mprintf # define fprintf curlx_mfprintf # define sprintf curlx_msprintf # define snprintf curlx_msnprintf # define vprintf curlx_mvprintf # define vfprintf curlx_mvfprintf # define vsprintf curlx_mvsprintf # define vsnprintf curlx_mvsnprintf # define aprintf curlx_maprintf # define vaprintf curlx_mvaprintf #endif /* ENABLE_CURLX_PRINTF */ #endif /* __CURLX_H */ criticalmass-1.0.0.orig/curl/lib/ftp.c0000644000175000017500000033245410265631023017060 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: ftp.c,v 1.322 2005/05/14 06:00:40 giva Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_FTP #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #else /* probably some kind of unix */ #ifdef HAVE_SYS_SOCKET_H #include #endif #include #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_UTSNAME_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef VMS #include #include #endif #endif #if defined(WIN32) && defined(__GNUC__) || defined(__MINGW32__) #include #endif #if (defined(NETWARE) && defined(__NOVELL_LIBC__)) #undef in_addr_t #define in_addr_t unsigned long #endif #include #include "urldata.h" #include "sendf.h" #include "if2ip.h" #include "hostip.h" #include "progress.h" #include "transfer.h" #include "escape.h" #include "http.h" /* for HTTP proxy tunnel stuff */ #include "ftp.h" #ifdef HAVE_KRB4 #include "krb4.h" #endif #include "strtoofft.h" #include "strequal.h" #include "sslgen.h" #include "connect.h" #include "strerror.h" #include "memory.h" #include "inet_ntop.h" #include "select.h" #include "parsedate.h" /* for the week day and month names */ #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #ifdef CURLDEBUG #include "memdebug.h" #endif #ifdef HAVE_NI_WITHSCOPEID #define NIFLAGS NI_NUMERICHOST | NI_NUMERICSERV | NI_WITHSCOPEID #else #define NIFLAGS NI_NUMERICHOST | NI_NUMERICSERV #endif /* Local API functions */ static CURLcode ftp_sendquote(struct connectdata *conn, struct curl_slist *quote); static CURLcode ftp_cwd(struct connectdata *conn, char *path); static CURLcode ftp_mkd(struct connectdata *conn, char *path); static CURLcode ftp_cwd_and_mkd(struct connectdata *conn, char *path); static CURLcode ftp_quit(struct connectdata *conn); static CURLcode ftp_3rdparty_pretransfer(struct connectdata *conn); static CURLcode ftp_3rdparty_transfer(struct connectdata *conn); static CURLcode ftp_parse_url_path(struct connectdata *conn); static CURLcode ftp_cwd_and_create_path(struct connectdata *conn); static CURLcode ftp_regular_transfer(struct connectdata *conn, bool *done); static CURLcode ftp_3rdparty(struct connectdata *conn); static void ftp_pasv_verbose(struct connectdata *conn, Curl_addrinfo *ai, char *newhost, /* ascii version */ int port); static CURLcode ftp_state_post_rest(struct connectdata *conn); static CURLcode ftp_state_post_cwd(struct connectdata *conn); static CURLcode ftp_state_quote(struct connectdata *conn, bool init, ftpstate instate); /* easy-to-use macro: */ #define FTPSENDF(x,y,z) if((result = Curl_ftpsendf(x,y,z))) return result #define NBFTPSENDF(x,y,z) if((result = Curl_nbftpsendf(x,y,z))) return result static void freedirs(struct FTP *ftp) { int i; if(ftp->dirs) { for (i=0; i < ftp->dirdepth; i++){ if(ftp->dirs[i]) { free(ftp->dirs[i]); ftp->dirs[i]=NULL; } } free(ftp->dirs); ftp->dirs = NULL; } if(ftp->file) { free(ftp->file); ftp->file = NULL; } } /* Returns non-zero iff the given string contains CR (0x0D) or LF (0x0A), which are not allowed within RFC 959 . */ static bool isBadFtpString(const char *string) { return strchr(string, 0x0D) != NULL || strchr(string, 0x0A) != NULL; } /*********************************************************************** * * AllowServerConnect() * * When we've issue the PORT command, we have told the server to connect * to us. This function will sit and wait here until the server has * connected. * */ static CURLcode AllowServerConnect(struct connectdata *conn) { int timeout_ms; struct SessionHandle *data = conn->data; curl_socket_t sock = conn->sock[SECONDARYSOCKET]; struct timeval now = Curl_tvnow(); long timespent = Curl_tvdiff(Curl_tvnow(), now)/1000; long timeout = data->set.connecttimeout?data->set.connecttimeout: (data->set.timeout?data->set.timeout: 0); if(timeout) { timeout -= timespent; if(timeout<=0) { failf(data, "Timed out before server could connect to us"); return CURLE_OPERATION_TIMEDOUT; } } /* We allow the server 60 seconds to connect to us, or a custom timeout. Note the typecast here. */ timeout_ms = (timeout?(int)timeout:60) * 1000; switch (Curl_select(sock, CURL_SOCKET_BAD, timeout_ms)) { case -1: /* error */ /* let's die here */ failf(data, "Error while waiting for server connect"); return CURLE_FTP_PORT_FAILED; case 0: /* timeout */ /* let's die here */ failf(data, "Timeout while waiting for server connect"); return CURLE_FTP_PORT_FAILED; default: /* we have received data here */ { curl_socket_t s; size_t size = sizeof(struct sockaddr_in); struct sockaddr_in add; getsockname(sock, (struct sockaddr *) &add, (socklen_t *)&size); s=accept(sock, (struct sockaddr *) &add, (socklen_t *)&size); sclose(sock); /* close the first socket */ if (CURL_SOCKET_BAD == s) { /* DIE! */ failf(data, "Error accept()ing server connect"); return CURLE_FTP_PORT_FAILED; } infof(data, "Connection accepted from server\n"); conn->sock[SECONDARYSOCKET] = s; Curl_nonblock(s, TRUE); /* enable non-blocking */ } break; } return CURLE_OK; } /* initialize stuff to prepare for reading a fresh new response */ static void ftp_respinit(struct connectdata *conn) { struct FTP *ftp = conn->proto.ftp; ftp->nread_resp = 0; ftp->linestart_resp = conn->data->state.buffer; } /* macro to check for the last line in an FTP server response */ #define lastline(line) (isdigit((int)line[0]) && isdigit((int)line[1]) && \ isdigit((int)line[2]) && (' ' == line[3])) static CURLcode ftp_readresp(curl_socket_t sockfd, struct connectdata *conn, int *ftpcode, /* return the ftp-code if done */ size_t *size) /* size of the response */ { int perline; /* count bytes per line */ bool keepon=TRUE; ssize_t gotbytes; char *ptr; struct SessionHandle *data = conn->data; char *buf = data->state.buffer; CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; int code = 0; if (ftpcode) *ftpcode = 0; /* 0 for errors or not done */ ptr=buf + ftp->nread_resp; perline= (int)(ptr-ftp->linestart_resp); /* number of bytes in the current line, so far */ keepon=TRUE; while((ftp->nread_respcache) { /* we had data in the "cache", copy that instead of doing an actual * read * * ftp->cache_size is cast to int here. This should be safe, * because it would have been populated with something of size * int to begin with, even though its datatype may be larger * than an int. */ memcpy(ptr, ftp->cache, (int)ftp->cache_size); gotbytes = (int)ftp->cache_size; free(ftp->cache); /* free the cache */ ftp->cache = NULL; /* clear the pointer */ ftp->cache_size = 0; /* zero the size just in case */ } else { int res = Curl_read(conn, sockfd, ptr, BUFSIZE-ftp->nread_resp, &gotbytes); if(res < 0) /* EWOULDBLOCK */ return CURLE_OK; /* return */ if(CURLE_OK != res) keepon = FALSE; } if(!keepon) ; else if(gotbytes <= 0) { keepon = FALSE; result = CURLE_RECV_ERROR; failf(data, "FTP response reading failed"); } else { /* we got a whole chunk of data, which can be anything from one * byte to a set of lines and possible just a piece of the last * line */ int i; conn->headerbytecount += gotbytes; ftp->nread_resp += gotbytes; for(i = 0; i < gotbytes; ptr++, i++) { perline++; if(*ptr=='\n') { /* a newline is CRLF in ftp-talk, so the CR is ignored as the line isn't really terminated until the LF comes */ /* output debug output if that is requested */ if(data->set.verbose) Curl_debug(data, CURLINFO_HEADER_IN, ftp->linestart_resp, perline, conn); /* * We pass all response-lines to the callback function registered * for "headers". The response lines can be seen as a kind of * headers. */ result = Curl_client_write(data, CLIENTWRITE_HEADER, ftp->linestart_resp, perline); if(result) return result; if(perline>3 && lastline(ftp->linestart_resp)) { /* This is the end of the last line, copy the last line to the start of the buffer and zero terminate, for old times sake (and krb4)! */ char *meow; int n; for(meow=ftp->linestart_resp, n=0; meowlinestart_resp = ptr+1; /* advance pointer */ i++; /* skip this before getting out */ *size = ftp->nread_resp; /* size of the response */ ftp->nread_resp = 0; /* restart */ break; } perline=0; /* line starts over here */ ftp->linestart_resp = ptr+1; } } if(!keepon && (i != gotbytes)) { /* We found the end of the response lines, but we didn't parse the full chunk of data we have read from the server. We therefore need to store the rest of the data to be checked on the next invoke as it may actually contain another end of response already! */ ftp->cache_size = gotbytes - i; ftp->cache = (char *)malloc((int)ftp->cache_size); if(ftp->cache) memcpy(ftp->cache, ftp->linestart_resp, (int)ftp->cache_size); else return CURLE_OUT_OF_MEMORY; /**BANG**/ } } /* there was data */ } /* while there's buffer left and loop is requested */ if(!result) code = atoi(buf); #ifdef HAVE_KRB4 /* handle the security-oriented responses 6xx ***/ /* FIXME: some errorchecking perhaps... ***/ switch(code) { case 631: Curl_sec_read_msg(conn, buf, prot_safe); break; case 632: Curl_sec_read_msg(conn, buf, prot_private); break; case 633: Curl_sec_read_msg(conn, buf, prot_confidential); break; default: /* normal ftp stuff we pass through! */ break; } #endif *ftpcode=code; /* return the initial number like this */ /* store the latest code for later retrieval */ conn->data->info.httpcode=code; return result; } /* --- parse FTP server responses --- */ /* * Curl_GetFTPResponse() is supposed to be invoked after each command sent to * a remote FTP server. This function will wait and read all lines of the * response and extract the relevant return code for the invoking function. */ CURLcode Curl_GetFTPResponse(ssize_t *nreadp, /* return number of bytes read */ struct connectdata *conn, int *ftpcode) /* return the ftp-code */ { /* * We cannot read just one byte per read() and then go back to select() as * the OpenSSL read() doesn't grok that properly. * * Alas, read as much as possible, split up into lines, use the ending * line in a response or continue reading. */ curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; int perline; /* count bytes per line */ bool keepon=TRUE; ssize_t gotbytes; char *ptr; long timeout; /* timeout in seconds */ int interval_ms; struct SessionHandle *data = conn->data; char *line_start; int code=0; /* default ftp "error code" to return */ char *buf = data->state.buffer; CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct timeval now = Curl_tvnow(); if (ftpcode) *ftpcode = 0; /* 0 for errors */ ptr=buf; line_start = buf; *nreadp=0; perline=0; keepon=TRUE; while((*nreadpset.ftp_response_timeout ) /* if CURLOPT_FTP_RESPONSE_TIMEOUT is set, use that to determine remaining time. Also, use "now" as opposed to "conn->now" because ftp_response_timeout is only supposed to govern the response for any given ftp response, not for the time from connect to the given ftp response. */ timeout = data->set.ftp_response_timeout - /* timeout time */ Curl_tvdiff(Curl_tvnow(), now)/1000; /* spent time */ else if(data->set.timeout) /* if timeout is requested, find out how much remaining time we have */ timeout = data->set.timeout - /* timeout time */ Curl_tvdiff(Curl_tvnow(), conn->now)/1000; /* spent time */ else /* Even without a requested timeout, we only wait response_time seconds for the full response to arrive before we bail out */ timeout = ftp->response_time - Curl_tvdiff(Curl_tvnow(), now)/1000; /* spent time */ if(timeout <=0 ) { failf(data, "FTP response timeout"); return CURLE_OPERATION_TIMEDOUT; /* already too little time */ } if(!ftp->cache) { interval_ms = 1 * 1000; /* use 1 second timeout intervals */ switch (Curl_select(sockfd, CURL_SOCKET_BAD, interval_ms)) { case -1: /* select() error, stop reading */ result = CURLE_RECV_ERROR; failf(data, "FTP response aborted due to select() error: %d", errno); break; case 0: /* timeout */ if(Curl_pgrsUpdate(conn)) return CURLE_ABORTED_BY_CALLBACK; continue; /* just continue in our loop for the timeout duration */ default: break; } } if(CURLE_OK == result) { /* * This code previously didn't use the kerberos sec_read() code * to read, but when we use Curl_read() it may do so. Do confirm * that this is still ok and then remove this comment! */ if(ftp->cache) { /* we had data in the "cache", copy that instead of doing an actual * read * * Dave Meyer, December 2003: * ftp->cache_size is cast to int here. This should be safe, * because it would have been populated with something of size * int to begin with, even though its datatype may be larger * than an int. */ memcpy(ptr, ftp->cache, (int)ftp->cache_size); gotbytes = (int)ftp->cache_size; free(ftp->cache); /* free the cache */ ftp->cache = NULL; /* clear the pointer */ ftp->cache_size = 0; /* zero the size just in case */ } else { int res = Curl_read(conn, sockfd, ptr, BUFSIZE-*nreadp, &gotbytes); if(res < 0) /* EWOULDBLOCK */ continue; /* go looping again */ if(CURLE_OK != res) keepon = FALSE; } if(!keepon) ; else if(gotbytes <= 0) { keepon = FALSE; result = CURLE_RECV_ERROR; failf(data, "FTP response reading failed"); } else { /* we got a whole chunk of data, which can be anything from one * byte to a set of lines and possible just a piece of the last * line */ int i; conn->headerbytecount += gotbytes; *nreadp += gotbytes; for(i = 0; i < gotbytes; ptr++, i++) { perline++; if(*ptr=='\n') { /* a newline is CRLF in ftp-talk, so the CR is ignored as the line isn't really terminated until the LF comes */ /* output debug output if that is requested */ if(data->set.verbose) Curl_debug(data, CURLINFO_HEADER_IN, line_start, perline, conn); /* * We pass all response-lines to the callback function registered * for "headers". The response lines can be seen as a kind of * headers. */ result = Curl_client_write(data, CLIENTWRITE_HEADER, line_start, perline); if(result) return result; if(perline>3 && lastline(line_start)) { /* This is the end of the last line, copy the last * line to the start of the buffer and zero terminate, * for old times sake (and krb4)! */ char *meow; int n; for(meow=line_start, n=0; meowcache_size = gotbytes - i; ftp->cache = (char *)malloc((int)ftp->cache_size); if(ftp->cache) memcpy(ftp->cache, line_start, (int)ftp->cache_size); else return CURLE_OUT_OF_MEMORY; /**BANG**/ } } /* there was data */ } /* if(no error) */ } /* while there's buffer left and loop is requested */ if(!result) code = atoi(buf); #ifdef HAVE_KRB4 /* handle the security-oriented responses 6xx ***/ /* FIXME: some errorchecking perhaps... ***/ switch(code) { case 631: Curl_sec_read_msg(conn, buf, prot_safe); break; case 632: Curl_sec_read_msg(conn, buf, prot_private); break; case 633: Curl_sec_read_msg(conn, buf, prot_confidential); break; default: /* normal ftp stuff we pass through! */ break; } #endif if(ftpcode) *ftpcode=code; /* return the initial number like this */ /* store the latest code for later retrieval */ conn->data->info.httpcode=code; return result; } /* This is the ONLY way to change FTP state! */ static void state(struct connectdata *conn, ftpstate state) { #ifdef CURLDEBUG /* for debug purposes */ const char *names[]={ "STOP", "WAIT220", "AUTH", "USER", "PASS", "ACCT", "PBSZ", "PROT", "PWD", "QUOTE", "RETR_PREQUOTE", "STOR_PREQUOTE", "POSTQUOTE", "CWD", "MKD", "MDTM", "TYPE", "LIST_TYPE", "RETR_TYPE", "STOR_TYPE", "SIZE", "RETR_SIZE", "STOR_SIZE", "REST", "RETR_REST", "PORT", "PASV", "LIST", "RETR", "STOR", "QUIT" }; #endif struct FTP *ftp = conn->proto.ftp; #ifdef CURLDEBUG if(ftp->state != state) infof(conn->data, "FTP %p state change from %s to %s\n", ftp, names[ftp->state], names[state]); #endif ftp->state = state; } static CURLcode ftp_state_user(struct connectdata *conn) { CURLcode result; struct FTP *ftp = conn->proto.ftp; /* send USER */ NBFTPSENDF(conn, "USER %s", ftp->user?ftp->user:""); state(conn, FTP_USER); return CURLE_OK; } static CURLcode ftp_state_pwd(struct connectdata *conn) { CURLcode result; /* send PWD to discover our entry point */ NBFTPSENDF(conn, "PWD", NULL); state(conn, FTP_PWD); return CURLE_OK; } /* For the FTP "protocol connect" and "doing" phases only */ CURLcode Curl_ftp_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp) { struct FTP *ftp = conn->proto.ftp; curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; if(ftp->sendleft) { /* write mode */ FD_SET(sockfd, write_fd_set); } else { /* read mode */ FD_SET(sockfd, read_fd_set); } if((int)sockfd > *max_fdp) *max_fdp = (int)sockfd; return CURLE_OK; } /* This is called after the FTP_QUOTE state is passed. ftp_state_cwd() sends the range of PWD commands to the server to change to the correct directory. It may also need to send MKD commands to create missing ones, if that option is enabled. */ static CURLcode ftp_state_cwd(struct connectdata *conn) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; if(ftp->cwddone) /* already done and fine */ result = ftp_state_post_cwd(conn); else { ftp->count2 = 0; if (conn->bits.reuse && ftp->entrypath) { /* This is a re-used connection. Since we change directory to where the transfer is taking place, we must first get back to the original dir where we ended up after login: */ ftp->count1 = 0; /* we count this as the first path, then we add one for all upcoming ones in the ftp->dirs[] array */ NBFTPSENDF(conn, "CWD %s", ftp->entrypath); state(conn, FTP_CWD); } else { if(ftp->dirdepth) { ftp->count1 = 1; /* issue the first CWD, the rest is sent when the CWD responses are received... */ NBFTPSENDF(conn, "CWD %s", ftp->dirs[ftp->count1 -1]); state(conn, FTP_CWD); } else { /* No CWD necessary */ result = ftp_state_post_cwd(conn); } } } return result; } typedef enum { EPRT, LPRT, PORT, DONE } ftpport; static CURLcode ftp_state_use_port(struct connectdata *conn, ftpport fcmd) /* start with this */ { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data=conn->data; curl_socket_t portsock= CURL_SOCKET_BAD; #ifdef ENABLE_IPV6 /****************************************************************** * IPv6-specific section */ #ifdef HAVE_STRUCT_SOCKADDR_STORAGE struct sockaddr_storage ss; #else char ss[256]; /* this should be big enough to fit a lot */ #endif struct addrinfo *res, *ai; socklen_t sslen; char hbuf[NI_MAXHOST]; struct sockaddr *sa=(struct sockaddr *)&ss; unsigned char *ap; unsigned char *pp; char portmsgbuf[1024], tmp[1024]; const char *mode[] = { "EPRT", "LPRT", "PORT", NULL }; int rc; int error; char *host=NULL; struct Curl_dns_entry *h=NULL; if(data->set.ftpport && (strlen(data->set.ftpport) > 1)) { /* attempt to get the address of the given interface name */ if(!Curl_if2ip(data->set.ftpport, hbuf, sizeof(hbuf))) /* not an interface, use the given string as host name instead */ host = data->set.ftpport; else host = hbuf; /* use the hbuf for host name */ } /* data->set.ftpport */ if(!host) { /* not an interface and not a host name, get default by extracting the IP from the control connection */ sslen = sizeof(ss); rc = getsockname(conn->sock[FIRSTSOCKET], (struct sockaddr *)&ss, &sslen); if(rc < 0) { failf(data, "getsockname() returned %d\n", rc); return CURLE_FTP_PORT_FAILED; } rc = getnameinfo((struct sockaddr *)&ss, sslen, hbuf, sizeof(hbuf), NULL, 0, NIFLAGS); if(rc) { failf(data, "getnameinfo() returned %d\n", rc); return CURLE_FTP_PORT_FAILED; } host = hbuf; /* use this host name */ } rc = Curl_resolv(conn, host, 0, &h); if(rc == CURLRESOLV_PENDING) rc = Curl_wait_for_resolv(conn, &h); if(h) { res = h->addr; /* when we return from this function, we can forget about this entry to we can unlock it now already */ Curl_resolv_unlock(data, h); } /* (h) */ else res = NULL; /* failure! */ portsock = CURL_SOCKET_BAD; error = 0; for (ai = res; ai; ai = ai->ai_next) { /* * Workaround for AIX5 getaddrinfo() problem (it doesn't set ai_socktype): */ if (ai->ai_socktype == 0) ai->ai_socktype = SOCK_STREAM; portsock = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (portsock == CURL_SOCKET_BAD) { error = Curl_ourerrno(); continue; } if (bind(portsock, ai->ai_addr, ai->ai_addrlen) < 0) { error = Curl_ourerrno(); sclose(portsock); portsock = CURL_SOCKET_BAD; continue; } if (listen(portsock, 1) < 0) { error = Curl_ourerrno(); sclose(portsock); portsock = CURL_SOCKET_BAD; continue; } break; } if (portsock == CURL_SOCKET_BAD) { failf(data, "socket failure: %s", Curl_strerror(conn,error)); return CURLE_FTP_PORT_FAILED; } sslen = sizeof(ss); if (getsockname(portsock, sa, &sslen) < 0) { failf(data, "getsockname(): %s", Curl_strerror(conn,Curl_ourerrno())); return CURLE_FTP_PORT_FAILED; } #ifdef PF_INET6 if(!conn->bits.ftp_use_eprt && conn->bits.ipv6) /* EPRT is disabled but we are connected to a IPv6 host, so we ignore the request and enable EPRT again! */ conn->bits.ftp_use_eprt = TRUE; #endif for (; fcmd != DONE; fcmd++) { int lprtaf, eprtaf; int alen=0, plen=0; if(!conn->bits.ftp_use_eprt && (EPRT == fcmd)) /* if disabled, goto next */ continue; if(!conn->bits.ftp_use_lprt && (LPRT == fcmd)) /* if disabled, goto next */ continue; switch (sa->sa_family) { case AF_INET: ap = (unsigned char *)&((struct sockaddr_in *)&ss)->sin_addr; alen = sizeof(((struct sockaddr_in *)&ss)->sin_addr); pp = (unsigned char *)&((struct sockaddr_in *)&ss)->sin_port; plen = sizeof(((struct sockaddr_in *)&ss)->sin_port); lprtaf = 4; eprtaf = 1; break; case AF_INET6: ap = (unsigned char *)&((struct sockaddr_in6 *)&ss)->sin6_addr; alen = sizeof(((struct sockaddr_in6 *)&ss)->sin6_addr); pp = (unsigned char *)&((struct sockaddr_in6 *)&ss)->sin6_port; plen = sizeof(((struct sockaddr_in6 *)&ss)->sin6_port); lprtaf = 6; eprtaf = 2; break; default: ap = pp = NULL; lprtaf = eprtaf = -1; break; } if (EPRT == fcmd) { if (eprtaf < 0) continue; if (getnameinfo((struct sockaddr *)&ss, sslen, portmsgbuf, sizeof(portmsgbuf), tmp, sizeof(tmp), NIFLAGS)) continue; /* do not transmit IPv6 scope identifier to the wire */ if (sa->sa_family == AF_INET6) { char *q = strchr(portmsgbuf, '%'); if (q) *q = '\0'; } result = Curl_nbftpsendf(conn, "%s |%d|%s|%s|", mode[fcmd], eprtaf, portmsgbuf, tmp); if(result) return result; break; } else if ((LPRT == fcmd) || (PORT == fcmd)) { int i; if ((LPRT == fcmd) && lprtaf < 0) continue; if ((PORT == fcmd) && sa->sa_family != AF_INET) continue; portmsgbuf[0] = '\0'; if (LPRT == fcmd) { snprintf(tmp, sizeof(tmp), "%d,%d", lprtaf, alen); if (strlcat(portmsgbuf, tmp, sizeof(portmsgbuf)) >= sizeof(portmsgbuf)) { continue; } } for (i = 0; i < alen; i++) { if (portmsgbuf[0]) snprintf(tmp, sizeof(tmp), ",%u", ap[i]); else snprintf(tmp, sizeof(tmp), "%u", ap[i]); if (strlcat(portmsgbuf, tmp, sizeof(portmsgbuf)) >= sizeof(portmsgbuf)) { continue; } } if (LPRT == fcmd) { snprintf(tmp, sizeof(tmp), ",%d", plen); if (strlcat(portmsgbuf, tmp, sizeof(portmsgbuf)) >= sizeof(portmsgbuf)) continue; } for (i = 0; i < plen; i++) { snprintf(tmp, sizeof(tmp), ",%u", pp[i]); if (strlcat(portmsgbuf, tmp, sizeof(portmsgbuf)) >= sizeof(portmsgbuf)) { continue; } } result = Curl_nbftpsendf(conn, "%s %s", mode[fcmd], portmsgbuf); if(result) return result; break; } } /* store which command was sent */ ftp->count1 = fcmd; /* we set the secondary socket variable to this for now, it is only so that the cleanup function will close it in case we fail before the true secondary stuff is made */ if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) sclose(conn->sock[SECONDARYSOCKET]); conn->sock[SECONDARYSOCKET] = portsock; #else /****************************************************************** * IPv4-specific section */ struct sockaddr_in sa; unsigned short porttouse; char myhost[256] = ""; bool sa_filled_in = FALSE; Curl_addrinfo *addr = NULL; unsigned short ip[4]; (void)fcmd; /* not used in the IPv4 code */ if(data->set.ftpport) { in_addr_t in; /* First check if the given name is an IP address */ in=inet_addr(data->set.ftpport); if(in != CURL_INADDR_NONE) /* this is an IPv4 address */ addr = Curl_ip2addr(in, data->set.ftpport, 0); else { if(Curl_if2ip(data->set.ftpport, myhost, sizeof(myhost))) { /* The interface to IP conversion provided a dotted address */ in=inet_addr(myhost); addr = Curl_ip2addr(in, myhost, 0); } else if(strlen(data->set.ftpport)> 1) { /* might be a host name! */ struct Curl_dns_entry *h=NULL; int rc = Curl_resolv(conn, myhost, 0, &h); if(rc == CURLRESOLV_PENDING) /* BLOCKING */ rc = Curl_wait_for_resolv(conn, &h); if(h) { addr = h->addr; /* when we return from this function, we can forget about this entry so we can unlock it now already */ Curl_resolv_unlock(data, h); } /* (h) */ } /* strlen */ } /* CURL_INADDR_NONE */ } /* data->set.ftpport */ if(!addr) { /* pick a suitable default here */ socklen_t sslen; sslen = sizeof(sa); if (getsockname(conn->sock[FIRSTSOCKET], (struct sockaddr *)&sa, &sslen) < 0) { failf(data, "getsockname() failed"); return CURLE_FTP_PORT_FAILED; } sa_filled_in = TRUE; /* the sa struct is filled in */ } if (addr || sa_filled_in) { portsock = socket(AF_INET, SOCK_STREAM, 0); if(CURL_SOCKET_BAD != portsock) { socklen_t size; /* we set the secondary socket variable to this for now, it is only so that the cleanup function will close it in case we fail before the true secondary stuff is made */ if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) sclose(conn->sock[SECONDARYSOCKET]); conn->sock[SECONDARYSOCKET] = portsock; if(!sa_filled_in) { memcpy(&sa, addr->ai_addr, sizeof(sa)); sa.sin_addr.s_addr = INADDR_ANY; } sa.sin_port = 0; size = sizeof(sa); if(bind(portsock, (struct sockaddr *)&sa, size) >= 0) { /* we succeeded to bind */ struct sockaddr_in add; socklen_t socksize = sizeof(add); if(getsockname(portsock, (struct sockaddr *) &add, &socksize)<0) { failf(data, "getsockname() failed"); return CURLE_FTP_PORT_FAILED; } porttouse = ntohs(add.sin_port); if ( listen(portsock, 1) < 0 ) { failf(data, "listen(2) failed on socket"); return CURLE_FTP_PORT_FAILED; } } else { failf(data, "bind(2) failed on socket"); return CURLE_FTP_PORT_FAILED; } } else { failf(data, "socket(2) failed (%s)"); return CURLE_FTP_PORT_FAILED; } } else { failf(data, "could't find IP address to use"); return CURLE_FTP_PORT_FAILED; } if(sa_filled_in) Curl_inet_ntop(AF_INET, &((struct sockaddr_in *)&sa)->sin_addr, myhost, sizeof(myhost)); else Curl_printable_address(addr, myhost, sizeof(myhost)); if(4 == sscanf(myhost, "%hu.%hu.%hu.%hu", &ip[0], &ip[1], &ip[2], &ip[3])) { infof(data, "Telling server to connect to %d.%d.%d.%d:%d\n", ip[0], ip[1], ip[2], ip[3], porttouse); result=Curl_nbftpsendf(conn, "PORT %d,%d,%d,%d,%d,%d", ip[0], ip[1], ip[2], ip[3], porttouse >> 8, porttouse & 255); if(result) return result; } else return CURLE_FTP_PORT_FAILED; Curl_freeaddrinfo(addr); ftp->count1 = PORT; #endif /* end of ipv4-specific code */ state(conn, FTP_PORT); return result; } static CURLcode ftp_state_use_pasv(struct connectdata *conn) { struct FTP *ftp = conn->proto.ftp; CURLcode result = CURLE_OK; /* Here's the excecutive summary on what to do: PASV is RFC959, expect: 227 Entering Passive Mode (a1,a2,a3,a4,p1,p2) LPSV is RFC1639, expect: 228 Entering Long Passive Mode (4,4,a1,a2,a3,a4,2,p1,p2) EPSV is RFC2428, expect: 229 Entering Extended Passive Mode (|||port|) */ const char *mode[] = { "EPSV", "PASV", NULL }; int modeoff; #ifdef PF_INET6 if(!conn->bits.ftp_use_epsv && conn->bits.ipv6) /* EPSV is disabled but we are connected to a IPv6 host, so we ignore the request and enable EPSV again! */ conn->bits.ftp_use_epsv = TRUE; #endif modeoff = conn->bits.ftp_use_epsv?0:1; result = Curl_nbftpsendf(conn, "%s", mode[modeoff]); if(result) return result; ftp->count1 = modeoff; state(conn, FTP_PASV); infof(conn->data, "Connect data stream passively\n"); return result; } /* REST is the last command in the chain of commands when a "head"-like request is made. Thus, if an actual transfer is to be made this is where we take off for real. */ static CURLcode ftp_state_post_rest(struct connectdata *conn) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data = conn->data; if(ftp->no_transfer || conn->bits.no_body) { /* then we're done with a "head"-like request, goto STOP */ state(conn, FTP_STOP); /* doesn't transfer any data */ ftp->no_transfer = TRUE; } else if(data->set.ftp_use_port) { /* We have chosen to use the PORT (or similar) command */ result = ftp_state_use_port(conn, EPRT); } else { /* We have chosen (this is default) to use the PASV (or similar) command */ result = ftp_state_use_pasv(conn); } return result; } static CURLcode ftp_state_post_size(struct connectdata *conn) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; if(ftp->no_transfer) { /* if a "head"-like request is being made */ /* Determine if server can respond to REST command and therefore whether it supports range */ NBFTPSENDF(conn, "REST %d", 0); state(conn, FTP_REST); } else result = ftp_state_post_rest(conn); return result; } static CURLcode ftp_state_post_type(struct connectdata *conn) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; if(ftp->no_transfer) { /* if a "head"-like request is being made */ /* we know ftp->file is a valid pointer to a file name */ NBFTPSENDF(conn, "SIZE %s", ftp->file); state(conn, FTP_SIZE); } else result = ftp_state_post_size(conn); return result; } static CURLcode ftp_state_post_listtype(struct connectdata *conn) { CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; /* If this output is to be machine-parsed, the NLST command might be better to use, since the LIST command output is not specified or standard in any way. It has turned out that the NLST list output is not the same on all servers either... */ NBFTPSENDF(conn, "%s", data->set.customrequest?data->set.customrequest: (data->set.ftp_list_only?"NLST":"LIST")); state(conn, FTP_LIST); return result; } static CURLcode ftp_state_post_retrtype(struct connectdata *conn) { CURLcode result = CURLE_OK; /* We've sent the TYPE, now we must send the list of prequote strings */ result = ftp_state_quote(conn, TRUE, FTP_RETR_PREQUOTE); return result; } static CURLcode ftp_state_post_stortype(struct connectdata *conn) { CURLcode result = CURLE_OK; /* We've sent the TYPE, now we must send the list of prequote strings */ result = ftp_state_quote(conn, TRUE, FTP_STOR_PREQUOTE); return result; } static CURLcode ftp_state_post_mdtm(struct connectdata *conn) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data = conn->data; /* If we have selected NOBODY and HEADER, it means that we only want file information. Which in FTP can't be much more than the file size and date. */ if(conn->bits.no_body && data->set.include_header && ftp->file) { /* The SIZE command is _not_ RFC 959 specified, and therefor many servers may not support it! It is however the only way we have to get a file's size! */ ftp->no_transfer = TRUE; /* this means no actual transfer will be made */ /* Some servers return different sizes for different modes, and thus we must set the proper type before we check the size */ NBFTPSENDF(conn, "TYPE %c", data->set.ftp_ascii?'A':'I'); state(conn, FTP_TYPE); } else result = ftp_state_post_type(conn); return result; } /* This is called after the CWD commands have been done in the beginning of the DO phase */ static CURLcode ftp_state_post_cwd(struct connectdata *conn) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data = conn->data; /* Requested time of file or time-depended transfer? */ if((data->set.get_filetime || data->set.timecondition) && ftp->file) { /* we have requested to get the modified-time of the file, this is a white spot as the MDTM is not mentioned in RFC959 */ NBFTPSENDF(conn, "MDTM %s", ftp->file); state(conn, FTP_MDTM); } else result = ftp_state_post_mdtm(conn); return result; } /* This is called after the TYPE and possible quote commands have been sent */ static CURLcode ftp_state_ul_setup(struct connectdata *conn, bool sizechecked) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data = conn->data; curl_off_t passed=0; if((conn->resume_from && !sizechecked) || ((conn->resume_from > 0) && sizechecked)) { /* we're about to continue the uploading of a file */ /* 1. get already existing file's size. We use the SIZE command for this which may not exist in the server! The SIZE command is not in RFC959. */ /* 2. This used to set REST. But since we can do append, we don't another ftp command. We just skip the source file offset and then we APPEND the rest on the file instead */ /* 3. pass file-size number of bytes in the source file */ /* 4. lower the infilesize counter */ /* => transfer as usual */ if(conn->resume_from < 0 ) { /* Got no given size to start from, figure it out */ NBFTPSENDF(conn, "SIZE %s", ftp->file); state(conn, FTP_STOR_SIZE); return result; } /* enable append */ data->set.ftp_append = TRUE; /* Let's read off the proper amount of bytes from the input. If we knew it was a proper file we could've just fseek()ed but we only have a stream here */ /* TODO: allow the ioctlfunction to provide a fast forward function that can be used here and use this method only as a fallback! */ do { curl_off_t readthisamountnow = (conn->resume_from - passed); curl_off_t actuallyread; if(readthisamountnow > BUFSIZE) readthisamountnow = BUFSIZE; actuallyread = (curl_off_t) conn->fread(data->state.buffer, 1, (size_t)readthisamountnow, conn->fread_in); passed += actuallyread; if(actuallyread != readthisamountnow) { failf(data, "Could only read %" FORMAT_OFF_T " bytes from the input", passed); return CURLE_FTP_COULDNT_USE_REST; } } while(passed != conn->resume_from); /* now, decrease the size of the read */ if(data->set.infilesize>0) { data->set.infilesize -= conn->resume_from; if(data->set.infilesize <= 0) { infof(data, "File already completely uploaded\n"); /* no data to transfer */ result=Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL); /* Set no_transfer so that we won't get any error in * Curl_ftp_done() because we didn't transfer anything! */ ftp->no_transfer = TRUE; state(conn, FTP_STOP); return CURLE_OK; } } /* we've passed, proceed as normal */ } /* resume_from */ NBFTPSENDF(conn, data->set.ftp_append?"APPE %s":"STOR %s", ftp->file); state(conn, FTP_STOR); return result; } static CURLcode ftp_state_quote(struct connectdata *conn, bool init, ftpstate instate) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data = conn->data; bool quote=FALSE; struct curl_slist *item; switch(instate) { case FTP_QUOTE: default: item = data->set.quote; break; case FTP_RETR_PREQUOTE: case FTP_STOR_PREQUOTE: item = data->set.prequote; break; case FTP_POSTQUOTE: item = data->set.postquote; break; } if(init) ftp->count1 = 0; else ftp->count1++; if(item) { int i = 0; /* Skip count1 items in the linked list */ while((i< ftp->count1) && item) { item = item->next; i++; } if(item) { NBFTPSENDF(conn, "%s", item->data); state(conn, instate); quote = TRUE; } } if(!quote) { /* No more quote to send, continue to ... */ switch(instate) { case FTP_QUOTE: default: result = ftp_state_cwd(conn); break; case FTP_RETR_PREQUOTE: NBFTPSENDF(conn, "SIZE %s", ftp->file); state(conn, FTP_RETR_SIZE); break; case FTP_STOR_PREQUOTE: result = ftp_state_ul_setup(conn, FALSE); break; case FTP_POSTQUOTE: break; } } return result; } static CURLcode ftp_state_pasv_resp(struct connectdata *conn, int ftpcode) { struct FTP *ftp = conn->proto.ftp; CURLcode result; struct SessionHandle *data=conn->data; Curl_addrinfo *conninfo; struct Curl_dns_entry *addr=NULL; int rc; unsigned short connectport; /* the local port connect() should use! */ unsigned short newport=0; /* remote port */ bool connected; /* newhost must be able to hold a full IP-style address in ASCII, which in the IPv6 case means 5*8-1 = 39 letters */ #define NEWHOST_BUFSIZE 48 char newhost[NEWHOST_BUFSIZE]; char *str=&data->state.buffer[4]; /* start on the first letter */ if((ftp->count1 == 0) && (ftpcode == 229)) { /* positive EPSV response */ char *ptr = strchr(str, '('); if(ptr) { unsigned int num; char separator[4]; ptr++; if(5 == sscanf(ptr, "%c%c%c%u%c", &separator[0], &separator[1], &separator[2], &num, &separator[3])) { const char sep1 = separator[0]; int i; /* The four separators should be identical, or else this is an oddly formatted reply and we bail out immediately. */ for(i=1; i<4; i++) { if(separator[i] != sep1) { ptr=NULL; /* set to NULL to signal error */ break; } } if(ptr) { newport = num; /* use the same IP we are already connected to */ snprintf(newhost, NEWHOST_BUFSIZE, "%s", conn->ip_addr_str); } } else ptr=NULL; } if(!ptr) { failf(data, "Weirdly formatted EPSV reply"); return CURLE_FTP_WEIRD_PASV_REPLY; } } else if((ftp->count1 == 1) && (ftpcode == 227)) { /* positive PASV response */ int ip[4]; int port[2]; /* * Scan for a sequence of six comma-separated numbers and use them as * IP+port indicators. * * Found reply-strings include: * "227 Entering Passive Mode (127,0,0,1,4,51)" * "227 Data transfer will passively listen to 127,0,0,1,4,51" * "227 Entering passive mode. 127,0,0,1,4,51" */ while(*str) { if (6 == sscanf(str, "%d,%d,%d,%d,%d,%d", &ip[0], &ip[1], &ip[2], &ip[3], &port[0], &port[1])) break; str++; } if(!*str) { failf(data, "Couldn't interpret the 227-response"); return CURLE_FTP_WEIRD_227_FORMAT; } snprintf(newhost, sizeof(newhost), "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]); newport = (port[0]<<8) + port[1]; } else if(ftp->count1 == 0) { /* EPSV failed, move on to PASV */ /* disable it for next transfer */ conn->bits.ftp_use_epsv = FALSE; infof(data, "disabling EPSV usage\n"); NBFTPSENDF(conn, "PASV", NULL); ftp->count1++; /* remain in the FTP_PASV state */ return result; } else { failf(data, "Bad PASV/EPSV response: %03d", ftpcode); return CURLE_FTP_WEIRD_PASV_REPLY; } /* we got OK from server */ if(data->change.proxy && *data->change.proxy) { /* * This is a tunnel through a http proxy and we need to connect to the * proxy again here. * * We don't want to rely on a former host lookup that might've expired * now, instead we remake the lookup here and now! */ rc = Curl_resolv(conn, conn->proxy.name, (int)conn->port, &addr); if(rc == CURLRESOLV_PENDING) /* BLOCKING */ rc = Curl_wait_for_resolv(conn, &addr); connectport = (unsigned short)conn->port; /* we connect to the proxy's port */ } else { /* normal, direct, ftp connection */ rc = Curl_resolv(conn, newhost, newport, &addr); if(rc == CURLRESOLV_PENDING) /* BLOCKING */ rc = Curl_wait_for_resolv(conn, &addr); if(!addr) { failf(data, "Can't resolve new host %s:%d", newhost, newport); return CURLE_FTP_CANT_GET_HOST; } connectport = newport; /* we connect to the remote port */ } result = Curl_connecthost(conn, addr, &conn->sock[SECONDARYSOCKET], &conninfo, &connected); Curl_resolv_unlock(data, addr); /* we're done using this address */ if(result) return result; conn->bits.tcpconnect = connected; /* simply TRUE or FALSE */ /* * When this is used from the multi interface, this might've returned with * the 'connected' set to FALSE and thus we are now awaiting a non-blocking * connect to connect and we should not be "hanging" here waiting. */ if(data->set.verbose) /* this just dumps information about this second connection */ ftp_pasv_verbose(conn, conninfo, newhost, connectport); #ifndef CURL_DISABLE_HTTP if(conn->bits.tunnel_proxy) { /* FIX: this MUST wait for a proper connect first if 'connected' is * FALSE */ /* BLOCKING */ /* We want "seamless" FTP operations through HTTP proxy tunnel */ result = Curl_ConnectHTTPProxyTunnel(conn, SECONDARYSOCKET, newhost, newport); if(CURLE_OK != result) return result; } #endif /* CURL_DISABLE_HTTP */ state(conn, FTP_STOP); /* this phase is completed */ return result; } static CURLcode ftp_state_port_resp(struct connectdata *conn, int ftpcode) { struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data = conn->data; ftpport fcmd = (ftpport)ftp->count1; CURLcode result = CURLE_OK; if(ftpcode != 200) { /* the command failed */ if (EPRT == fcmd) { infof(data, "disabling EPRT usage\n"); conn->bits.ftp_use_eprt = FALSE; } else if (LPRT == fcmd) { infof(data, "disabling LPRT usage\n"); conn->bits.ftp_use_lprt = FALSE; } fcmd++; if(fcmd == DONE) { failf(data, "Failed to do PORT"); result = CURLE_FTP_PORT_FAILED; } else /* try next */ result = ftp_state_use_port(conn, fcmd); } else { infof(data, "Connect data stream actively\n"); state(conn, FTP_STOP); /* end of DO phase */ } return result; } static CURLcode ftp_state_mdtm_resp(struct connectdata *conn, int ftpcode) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data=conn->data; switch(ftpcode) { case 213: { /* we got a time. Format should be: "YYYYMMDDHHMMSS[.sss]" where the last .sss part is optional and means fractions of a second */ int year, month, day, hour, minute, second; char *buf = data->state.buffer; if(6 == sscanf(buf+4, "%04d%02d%02d%02d%02d%02d", &year, &month, &day, &hour, &minute, &second)) { /* we have a time, reformat it */ time_t secs=time(NULL); /* using the good old yacc/bison yuck */ snprintf(buf, sizeof(conn->data->state.buffer), "%04d%02d%02d %02d:%02d:%02d GMT", year, month, day, hour, minute, second); /* now, convert this into a time() value: */ data->info.filetime = (long)curl_getdate(buf, &secs); } /* If we asked for a time of the file and we actually got one as well, we "emulate" a HTTP-style header in our output. */ if(conn->bits.no_body && data->set.include_header && ftp->file && data->set.get_filetime && (data->info.filetime>=0) ) { struct tm *tm; time_t clock = (time_t)data->info.filetime; #ifdef HAVE_GMTIME_R struct tm buffer; tm = (struct tm *)gmtime_r(&clock, &buffer); #else tm = gmtime(&clock); #endif /* format: "Tue, 15 Nov 1994 12:45:26" */ snprintf(buf, BUFSIZE-1, "Last-Modified: %s, %02d %s %4d %02d:%02d:%02d GMT\r\n", Curl_wkday[tm->tm_wday?tm->tm_wday-1:6], tm->tm_mday, Curl_month[tm->tm_mon], tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec); result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0); if(result) return result; } /* end of a ridiculous amount of conditionals */ } break; default: infof(data, "unsupported MDTM reply format\n"); break; case 550: /* "No such file or directory" */ failf(data, "Given file does not exist"); result = CURLE_FTP_COULDNT_RETR_FILE; break; } if(data->set.timecondition) { if((data->info.filetime > 0) && (data->set.timevalue > 0)) { switch(data->set.timecondition) { case CURL_TIMECOND_IFMODSINCE: default: if(data->info.filetime < data->set.timevalue) { infof(data, "The requested document is not new enough\n"); ftp->no_transfer = TRUE; /* mark this to not transfer data */ state(conn, FTP_STOP); return CURLE_OK; } break; case CURL_TIMECOND_IFUNMODSINCE: if(data->info.filetime > data->set.timevalue) { infof(data, "The requested document is not old enough\n"); ftp->no_transfer = TRUE; /* mark this to not transfer data */ state(conn, FTP_STOP); return CURLE_OK; } break; } /* switch */ } else { infof(data, "Skipping time comparison\n"); } } if(!result) result = ftp_state_post_mdtm(conn); return result; } static CURLcode ftp_state_type_resp(struct connectdata *conn, int ftpcode, ftpstate instate) { CURLcode result = CURLE_OK; struct SessionHandle *data=conn->data; if(ftpcode != 200) { failf(data, "Couldn't set desired mode"); return CURLE_FTP_COULDNT_SET_BINARY; /* FIX */ } if(instate == FTP_TYPE) result = ftp_state_post_type(conn); else if(instate == FTP_LIST_TYPE) result = ftp_state_post_listtype(conn); else if(instate == FTP_RETR_TYPE) result = ftp_state_post_retrtype(conn); else if(instate == FTP_STOR_TYPE) result = ftp_state_post_stortype(conn); return result; } static CURLcode ftp_state_post_retr_size(struct connectdata *conn, curl_off_t filesize) { CURLcode result = CURLE_OK; struct SessionHandle *data=conn->data; struct FTP *ftp = conn->proto.ftp; if (data->set.max_filesize && (filesize > data->set.max_filesize)) { failf(data, "Maximum file size exceeded"); return CURLE_FILESIZE_EXCEEDED; } ftp->downloadsize = filesize; if(conn->resume_from) { /* We always (attempt to) get the size of downloads, so it is done before this even when not doing resumes. */ if(filesize == -1) { infof(data, "ftp server doesn't support SIZE\n"); /* We couldn't get the size and therefore we can't know if there really is a part of the file left to get, although the server will just close the connection when we start the connection so it won't cause us any harm, just not make us exit as nicely. */ } else { /* We got a file size report, so we check that there actually is a part of the file left to get, or else we go home. */ if(conn->resume_from< 0) { /* We're supposed to download the last abs(from) bytes */ if(filesize < -conn->resume_from) { failf(data, "Offset (%" FORMAT_OFF_T ") was beyond file size (%" FORMAT_OFF_T ")", conn->resume_from, filesize); return CURLE_BAD_DOWNLOAD_RESUME; } /* convert to size to download */ ftp->downloadsize = -conn->resume_from; /* download from where? */ conn->resume_from = filesize - ftp->downloadsize; } else { if(filesize < conn->resume_from) { failf(data, "Offset (%" FORMAT_OFF_T ") was beyond file size (%" FORMAT_OFF_T ")", conn->resume_from, filesize); return CURLE_BAD_DOWNLOAD_RESUME; } /* Now store the number of bytes we are expected to download */ ftp->downloadsize = filesize-conn->resume_from; } } if(ftp->downloadsize == 0) { /* no data to transfer */ result=Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL); infof(data, "File already completely downloaded\n"); /* Set no_transfer so that we won't get any error in Curl_ftp_done() * because we didn't transfer the any file */ ftp->no_transfer = TRUE; state(conn, FTP_STOP); return CURLE_OK; } /* Set resume file transfer offset */ infof(data, "Instructs server to resume from offset %" FORMAT_OFF_T "\n", conn->resume_from); NBFTPSENDF(conn, "REST %" FORMAT_OFF_T, conn->resume_from); state(conn, FTP_RETR_REST); } else { /* no resume */ NBFTPSENDF(conn, "RETR %s", ftp->file); state(conn, FTP_RETR); } return result; } static CURLcode ftp_state_size_resp(struct connectdata *conn, int ftpcode, ftpstate instate) { CURLcode result = CURLE_OK; struct SessionHandle *data=conn->data; curl_off_t filesize; char *buf = data->state.buffer; /* get the size from the ascii string: */ filesize = (ftpcode == 213)?curlx_strtoofft(buf+4, NULL, 0):-1; if(instate == FTP_SIZE) { if(-1 != filesize) { snprintf(buf, sizeof(data->state.buffer), "Content-Length: %" FORMAT_OFF_T "\r\n", filesize); result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0); if(result) return result; } result = ftp_state_post_size(conn); } else if(instate == FTP_RETR_SIZE) result = ftp_state_post_retr_size(conn, filesize); else if(instate == FTP_STOR_SIZE) { conn->resume_from = filesize; result = ftp_state_ul_setup(conn, TRUE); } return result; } static CURLcode ftp_state_rest_resp(struct connectdata *conn, int ftpcode, ftpstate instate) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; switch(instate) { case FTP_REST: default: if (ftpcode == 350) { result = Curl_client_write(conn->data, CLIENTWRITE_BOTH, (char *)"Accept-ranges: bytes\r\n", 0); if(result) return result; } result = ftp_state_post_rest(conn); break; case FTP_RETR_REST: if (ftpcode != 350) { failf(conn->data, "Couldn't use REST"); result = CURLE_FTP_COULDNT_USE_REST; } else { NBFTPSENDF(conn, "RETR %s", ftp->file); state(conn, FTP_RETR); } break; } return result; } static CURLcode ftp_state_stor_resp(struct connectdata *conn, int ftpcode) { CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; struct FTP *ftp = conn->proto.ftp; if(ftpcode>=400) { failf(data, "Failed FTP upload: %0d", ftpcode); /* oops, we never close the sockets! */ return CURLE_FTP_COULDNT_STOR_FILE; } if(data->set.ftp_use_port) { /* BLOCKING */ /* PORT means we are now awaiting the server to connect to us. */ result = AllowServerConnect(conn); if( result ) return result; } if(conn->ssl[SECONDARYSOCKET].use) { /* since we only have a plaintext TCP connection here, we must now do the TLS stuff */ infof(data, "Doing the SSL/TLS handshake on the data stream\n"); /* BLOCKING */ result = Curl_ssl_connect(conn, SECONDARYSOCKET); if(result) return result; } *(ftp->bytecountp)=0; /* When we know we're uploading a specified file, we can get the file size prior to the actual upload. */ Curl_pgrsSetUploadSize(data, data->set.infilesize); result = Curl_Transfer(conn, -1, -1, FALSE, NULL, /* no download */ SECONDARYSOCKET, ftp->bytecountp); state(conn, FTP_STOP); return result; } /* for LIST and RETR responses */ static CURLcode ftp_state_get_resp(struct connectdata *conn, int ftpcode, ftpstate instate) { CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; struct FTP *ftp = conn->proto.ftp; char *buf = data->state.buffer; if((ftpcode == 150) || (ftpcode == 125)) { /* A; 150 Opening BINARY mode data connection for /etc/passwd (2241 bytes). (ok, the file is being transfered) B: 150 Opening ASCII mode data connection for /bin/ls C: 150 ASCII data connection for /bin/ls (137.167.104.91,37445) (0 bytes). D: 150 Opening ASCII mode data connection for /linux/fisk/kpanelrc (0.0.0.0,0) (545 bytes). E: 125 Data connection already open; Transfer starting. */ curl_off_t size=-1; /* default unknown size */ /* * It appears that there are FTP-servers that return size 0 for files when * SIZE is used on the file while being in BINARY mode. To work around * that (stupid) behavior, we attempt to parse the RETR response even if * the SIZE returned size zero. * * Debugging help from Salvatore Sorrentino on February 26, 2003. */ if((instate != FTP_LIST) && !data->set.ftp_ascii && (ftp->downloadsize < 1)) { /* * It seems directory listings either don't show the size or very * often uses size 0 anyway. ASCII transfers may very well turn out * that the transfered amount of data is not the same as this line * tells, why using this number in those cases only confuses us. * * Example D above makes this parsing a little tricky */ char *bytes; bytes=strstr(buf, " bytes"); if(bytes--) { long in=(long)(bytes-buf); /* this is a hint there is size information in there! ;-) */ while(--in) { /* scan for the left parenthesis and break there */ if('(' == *bytes) break; /* skip only digits */ if(!isdigit((int)*bytes)) { bytes=NULL; break; } /* one more estep backwards */ bytes--; } /* if we have nothing but digits: */ if(bytes++) { /* get the number! */ size = curlx_strtoofft(bytes, NULL, 0); } } } else if(ftp->downloadsize > -1) size = ftp->downloadsize; if(data->set.ftp_use_port) { /* BLOCKING */ result = AllowServerConnect(conn); if( result ) return result; } if(conn->ssl[SECONDARYSOCKET].use) { /* since we only have a plaintext TCP connection here, we must now do the TLS stuff */ infof(data, "Doing the SSL/TLS handshake on the data stream\n"); result = Curl_ssl_connect(conn, SECONDARYSOCKET); if(result) return result; } if(size > conn->maxdownload && conn->maxdownload > 0) size = conn->size = conn->maxdownload; if(instate != FTP_LIST) infof(data, "Getting file with size: %" FORMAT_OFF_T "\n", size); /* FTP download: */ result=Curl_Transfer(conn, SECONDARYSOCKET, size, FALSE, ftp->bytecountp, -1, NULL); /* no upload here */ if(result) return result; state(conn, FTP_STOP); } else { if((instate == FTP_LIST) && (ftpcode == 450)) { /* simply no matching files in the dir listing */ ftp->no_transfer = TRUE; /* don't download anything */ state(conn, FTP_STOP); /* this phase is over */ } else { failf(data, "RETR response: %03d", ftpcode); return CURLE_FTP_COULDNT_RETR_FILE; } } return result; } /* after USER, PASS and ACCT */ static CURLcode ftp_state_loggedin(struct connectdata *conn) { CURLcode result = CURLE_OK; #ifdef HAVE_KRB4 if(conn->data->set.krb4) { /* We are logged in, asked to use Kerberos. Set the requested * protection level */ if(conn->sec_complete) /* BLOCKING */ Curl_sec_set_protection_level(conn); /* We may need to issue a KAUTH here to have access to the files * do it if user supplied a password */ if(conn->passwd && *conn->passwd) { /* BLOCKING */ result = Curl_krb_kauth(conn); if(result) return result; } } #endif if(conn->ssl[FIRSTSOCKET].use) { /* PBSZ = PROTECTION BUFFER SIZE. The 'draft-murray-auth-ftp-ssl' (draft 12, page 7) says: Specifically, the PROT command MUST be preceded by a PBSZ command and a PBSZ command MUST be preceded by a successful security data exchange (the TLS negotiation in this case) ... (and on page 8): Thus the PBSZ command must still be issued, but must have a parameter of '0' to indicate that no buffering is taking place and the data connection should not be encapsulated. */ NBFTPSENDF(conn, "PBSZ %d", 0); state(conn, FTP_PBSZ); } else { result = ftp_state_pwd(conn); } return result; } /* for USER and PASS responses */ static CURLcode ftp_state_user_resp(struct connectdata *conn, int ftpcode, ftpstate instate) { CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; struct FTP *ftp = conn->proto.ftp; (void)instate; /* no use for this yet */ if((ftpcode == 331) && (ftp->state == FTP_USER)) { /* 331 Password required for ... (the server requires to send the user's password too) */ NBFTPSENDF(conn, "PASS %s", ftp->passwd?ftp->passwd:""); state(conn, FTP_PASS); } else if(ftpcode/100 == 2) { /* 230 User ... logged in. (the user logged in with or without password) */ result = ftp_state_loggedin(conn); } else if(ftpcode == 332) { if(data->set.ftp_account) { NBFTPSENDF(conn, "ACCT %s", data->set.ftp_account); state(conn, FTP_ACCT); } else { failf(data, "ACCT requested but none available"); result = CURLE_LOGIN_DENIED; } } else { /* All other response codes, like: 530 User ... access denied (the server denies to log the specified user) */ failf(data, "Access denied: %03d", ftpcode); result = CURLE_LOGIN_DENIED; } return result; } /* for ACCT response */ static CURLcode ftp_state_acct_resp(struct connectdata *conn, int ftpcode) { CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; if(ftpcode != 230) { failf(data, "ACCT rejected by server: %03d", ftpcode); result = CURLE_FTP_WEIRD_PASS_REPLY; /* FIX */ } else result = ftp_state_loggedin(conn); return result; } static CURLcode ftp_statemach_act(struct connectdata *conn) { CURLcode result; curl_socket_t sock = conn->sock[FIRSTSOCKET]; struct SessionHandle *data=conn->data; int ftpcode; struct FTP *ftp = conn->proto.ftp; static const char * const ftpauth[] = { "SSL", "TLS" }; size_t nread = 0; if(ftp->sendleft) { /* we have a piece of a command still left to send */ ssize_t written; result = Curl_write(conn, sock, ftp->sendthis + ftp->sendsize - ftp->sendleft, ftp->sendleft, &written); if(result) return result; if(written != (ssize_t)ftp->sendleft) { /* only a fraction was sent */ ftp->sendleft -= written; } else { free(ftp->sendthis); ftp->sendthis=NULL; ftp->sendleft = ftp->sendsize = 0; ftp->response = Curl_tvnow(); } return CURLE_OK; } /* we read a piece of response */ result = ftp_readresp(sock, conn, &ftpcode, &nread); if(result) return result; if(ftpcode) { /* we have now received a full FTP server response */ switch(ftp->state) { case FTP_WAIT220: if(ftpcode != 220) { failf(data, "This doesn't seem like a nice ftp-server response"); return CURLE_FTP_WEIRD_SERVER_REPLY; } /* We have received a 220 response fine, now we proceed. */ #ifdef HAVE_KRB4 if(data->set.krb4) { /* If not anonymous login, try a secure login. Note that this procedure is still BLOCKING. */ Curl_sec_request_prot(conn, "private"); /* We set private first as default, in case the line below fails to set a valid level */ Curl_sec_request_prot(conn, data->set.krb4_level); if(Curl_sec_login(conn) != 0) infof(data, "Logging in with password in cleartext!\n"); else infof(data, "Authentication successful\n"); } #endif if(data->set.ftp_ssl && !conn->ssl[FIRSTSOCKET].use) { /* We don't have a SSL/TLS connection yet, but FTPS is requested. Try a FTPS connection now */ ftp->count3=0; switch(data->set.ftpsslauth) { case CURLFTPAUTH_DEFAULT: case CURLFTPAUTH_SSL: ftp->count2 = 1; /* add one to get next */ ftp->count1 = 0; break; case CURLFTPAUTH_TLS: ftp->count2 = -1; /* subtract one to get next */ ftp->count1 = 1; break; default: failf(data, "unsupported parameter to CURLOPT_FTPSSLAUTH: %d\n", data->set.ftpsslauth); return CURLE_FAILED_INIT; /* we don't know what to do */ } NBFTPSENDF(conn, "AUTH %s", ftpauth[ftp->count1]); state(conn, FTP_AUTH); } else { ftp_state_user(conn); if(result) return result; } break; case FTP_AUTH: /* we have gotten the response to a previous AUTH command */ /* RFC2228 (page 5) says: * * If the server is willing to accept the named security mechanism, * and does not require any security data, it must respond with * reply code 234/334. */ if((ftpcode == 234) || (ftpcode == 334)) { /* Curl_ssl_connect is BLOCKING */ result = Curl_ssl_connect(conn, FIRSTSOCKET); if(CURLE_OK == result) { conn->protocol |= PROT_FTPS; conn->ssl[SECONDARYSOCKET].use = FALSE; /* clear-text data */ result = ftp_state_user(conn); } } else if(ftp->count3 < 1) { ftp->count3++; ftp->count1 += ftp->count2; /* get next attempt */ result = Curl_nbftpsendf(conn, "AUTH %s", ftpauth[ftp->count1]); /* remain in this same state */ } else result = ftp_state_user(conn); if(result) return result; break; case FTP_USER: case FTP_PASS: result = ftp_state_user_resp(conn, ftpcode, ftp->state); break; case FTP_ACCT: result = ftp_state_acct_resp(conn, ftpcode); break; case FTP_PBSZ: /* FIX: check response code */ /* For TLS, the data connection can have one of two security levels. 1) Clear (requested by 'PROT C') 2)Private (requested by 'PROT P') */ if(!conn->ssl[SECONDARYSOCKET].use) { NBFTPSENDF(conn, "PROT %c", 'P'); state(conn, FTP_PROT); } else { result = ftp_state_pwd(conn); if(result) return result; } break; case FTP_PROT: if(ftpcode/100 == 2) /* We have enabled SSL for the data connection! */ conn->ssl[SECONDARYSOCKET].use = TRUE; /* FTP servers typically responds with 500 if they decide to reject our 'P' request */ else if(data->set.ftp_ssl> CURLFTPSSL_CONTROL) /* we failed and bails out */ return CURLE_FTP_SSL_FAILED; result = ftp_state_pwd(conn); if(result) return result; break; case FTP_PWD: if(ftpcode == 257) { char *dir = (char *)malloc(nread+1); char *store=dir; char *ptr=&data->state.buffer[4]; /* start on the first letter */ if(!dir) return CURLE_OUT_OF_MEMORY; /* Reply format is like 257"" and the RFC959 says The directory name can contain any character; embedded double-quotes should be escaped by double-quotes (the "quote-doubling" convention). */ if('\"' == *ptr) { /* it started good */ ptr++; while(ptr && *ptr) { if('\"' == *ptr) { if('\"' == ptr[1]) { /* "quote-doubling" */ *store = ptr[1]; ptr++; } else { /* end of path */ *store = '\0'; /* zero terminate */ break; /* get out of this loop */ } } else *store = *ptr; store++; ptr++; } ftp->entrypath =dir; /* remember this */ infof(data, "Entry path is '%s'\n", ftp->entrypath); } else { /* couldn't get the path */ free(dir); infof(data, "Failed to figure out path\n"); } } state(conn, FTP_STOP); /* we are done with the CONNECT phase! */ DEBUGF(infof(data, "protocol connect phase DONE\n")); break; case FTP_QUOTE: case FTP_POSTQUOTE: case FTP_RETR_PREQUOTE: case FTP_STOR_PREQUOTE: if(ftpcode >= 400) { failf(conn->data, "QUOT command failed with %03d", ftpcode); return CURLE_FTP_QUOTE_ERROR; } result = ftp_state_quote(conn, FALSE, ftp->state); if(result) return result; break; case FTP_CWD: if(ftpcode/100 != 2) { /* failure to CWD there */ if(conn->data->set.ftp_create_missing_dirs && ftp->count1 && !ftp->count2) { /* try making it */ ftp->count2++; /* counter to prevent CWD-MKD loops */ NBFTPSENDF(conn, "MKD %s", ftp->dirs[ftp->count1 - 1]); state(conn, FTP_MKD); } else /* return failure */ return CURLE_FTP_ACCESS_DENIED; } else { /* success */ ftp->count2=0; if(++ftp->count1 <= ftp->dirdepth) { /* send next CWD */ NBFTPSENDF(conn, "CWD %s", ftp->dirs[ftp->count1 - 1]); } else { result = ftp_state_post_cwd(conn); if(result) return result; } } break; case FTP_MKD: if(ftpcode/100 != 2) { /* failure to MKD the dir */ failf(data, "Failed to MKD dir: %03d", ftpcode); return CURLE_FTP_ACCESS_DENIED; } state(conn, FTP_CWD); /* send CWD */ NBFTPSENDF(conn, "CWD %s", ftp->dirs[ftp->count1 - 1]); break; case FTP_MDTM: result = ftp_state_mdtm_resp(conn, ftpcode); break; case FTP_TYPE: case FTP_LIST_TYPE: case FTP_RETR_TYPE: case FTP_STOR_TYPE: result = ftp_state_type_resp(conn, ftpcode, ftp->state); break; case FTP_SIZE: case FTP_RETR_SIZE: case FTP_STOR_SIZE: result = ftp_state_size_resp(conn, ftpcode, ftp->state); break; case FTP_REST: case FTP_RETR_REST: result = ftp_state_rest_resp(conn, ftpcode, ftp->state); break; case FTP_PASV: result = ftp_state_pasv_resp(conn, ftpcode); break; case FTP_PORT: result = ftp_state_port_resp(conn, ftpcode); break; case FTP_LIST: case FTP_RETR: result = ftp_state_get_resp(conn, ftpcode, ftp->state); break; case FTP_STOR: result = ftp_state_stor_resp(conn, ftpcode); break; case FTP_QUIT: /* fallthrough, just stop! */ default: /* internal error */ state(conn, FTP_STOP); break; } } /* if(ftpcode) */ return result; } /* Returns timeout in ms. 0 or negative number means the timeout has already triggered */ static long ftp_state_timeout(struct connectdata *conn) { struct SessionHandle *data=conn->data; struct FTP *ftp = conn->proto.ftp; long timeout_ms=360000; /* in milliseconds */ if(data->set.ftp_response_timeout ) /* if CURLOPT_FTP_RESPONSE_TIMEOUT is set, use that to determine remaining time. Also, use ftp->response because FTP_RESPONSE_TIMEOUT is supposed to govern the response for any given ftp response, not for the time from connect to the given ftp response. */ timeout_ms = data->set.ftp_response_timeout*1000 - /* timeout time */ Curl_tvdiff(Curl_tvnow(), ftp->response); /* spent time */ else if(data->set.timeout) /* if timeout is requested, find out how much remaining time we have */ timeout_ms = data->set.timeout*1000 - /* timeout time */ Curl_tvdiff(Curl_tvnow(), conn->now); /* spent time */ else /* Without a requested timeout, we only wait 'response_time' seconds for the full response to arrive before we bail out */ timeout_ms = ftp->response_time*1000 - Curl_tvdiff(Curl_tvnow(), ftp->response); /* spent time */ return timeout_ms; } /* called repeatedly until done from multi.c */ CURLcode Curl_ftp_multi_statemach(struct connectdata *conn, bool *done) { curl_socket_t sock = conn->sock[FIRSTSOCKET]; int rc; struct SessionHandle *data=conn->data; struct FTP *ftp = conn->proto.ftp; CURLcode result = CURLE_OK; long timeout_ms = ftp_state_timeout(conn); *done = FALSE; /* default to not done yet */ if(timeout_ms <= 0) { failf(data, "FTP response timeout"); return CURLE_OPERATION_TIMEDOUT; } rc = Curl_select(ftp->sendleft?CURL_SOCKET_BAD:sock, /* reading */ ftp->sendleft?sock:CURL_SOCKET_BAD, /* writing */ 0); if(rc == -1) { failf(data, "select error"); return CURLE_OUT_OF_MEMORY; } else if(rc != 0) { result = ftp_statemach_act(conn); *done = (ftp->state == FTP_STOP); } /* if rc == 0, then select() timed out */ return result; } static CURLcode ftp_easy_statemach(struct connectdata *conn) { curl_socket_t sock = conn->sock[FIRSTSOCKET]; int rc; struct SessionHandle *data=conn->data; struct FTP *ftp = conn->proto.ftp; CURLcode result = CURLE_OK; while(ftp->state != FTP_STOP) { long timeout_ms = ftp_state_timeout(conn); if(timeout_ms <=0 ) { failf(data, "FTP response timeout"); return CURLE_OPERATION_TIMEDOUT; /* already too little time */ } rc = Curl_select(ftp->sendleft?CURL_SOCKET_BAD:sock, /* reading */ ftp->sendleft?sock:CURL_SOCKET_BAD, /* writing */ (int)timeout_ms); if(rc == -1) { failf(data, "select error"); return CURLE_OUT_OF_MEMORY; } else if(rc == 0) { result = CURLE_OPERATION_TIMEDOUT; break; } else { result = ftp_statemach_act(conn); if(result) break; } } return result; } /* * Curl_ftp_connect() should do everything that is to be considered a part of * the connection phase. * * The variable 'done' points to will be TRUE if the protocol-layer connect * phase is done when this function returns, or FALSE is not. When called as * a part of the easy interface, it will always be TRUE. */ CURLcode Curl_ftp_connect(struct connectdata *conn, bool *done) /* see description above */ { struct FTP *ftp; CURLcode result; *done = FALSE; /* default to not done yet */ ftp = (struct FTP *)calloc(sizeof(struct FTP), 1); if(!ftp) return CURLE_OUT_OF_MEMORY; conn->proto.ftp = ftp; /* We always support persistant connections on ftp */ conn->bits.close = FALSE; /* get some initial data into the ftp struct */ ftp->bytecountp = &conn->bytecount; /* no need to duplicate them, this connectdata struct won't change */ ftp->user = conn->user; ftp->passwd = conn->passwd; if (isBadFtpString(ftp->user) || isBadFtpString(ftp->passwd)) return CURLE_URL_MALFORMAT; ftp->response_time = 3600; /* set default response time-out */ #ifndef CURL_DISABLE_HTTP if (conn->bits.tunnel_proxy) { /* BLOCKING */ /* We want "seamless" FTP operations through HTTP proxy tunnel */ result = Curl_ConnectHTTPProxyTunnel(conn, FIRSTSOCKET, conn->host.name, conn->remote_port); if(CURLE_OK != result) return result; } #endif /* CURL_DISABLE_HTTP */ if(conn->protocol & PROT_FTPS) { /* BLOCKING */ /* FTPS is simply ftp with SSL for the control channel */ /* now, perform the SSL initialization for this socket */ result = Curl_ssl_connect(conn, FIRSTSOCKET); if(result) return result; } /* When we connect, we start in the state where we await the 220 response */ ftp_respinit(conn); /* init the response reader stuff */ state(conn, FTP_WAIT220); ftp->response = Curl_tvnow(); /* start response time-out now! */ if(conn->data->state.used_interface == Curl_if_multi) result = Curl_ftp_multi_statemach(conn, done); else { result = ftp_easy_statemach(conn); if(!result) *done = TRUE; } return result; } /*********************************************************************** * * Curl_ftp_done() * * The DONE function. This does what needs to be done after a single DO has * performed. * * Input argument is already checked for validity. */ CURLcode Curl_ftp_done(struct connectdata *conn, CURLcode status) { struct SessionHandle *data = conn->data; struct FTP *ftp = conn->proto.ftp; ssize_t nread; int ftpcode; CURLcode result=CURLE_OK; bool was_ctl_valid = ftp->ctl_valid; size_t flen; size_t dlen; char *path; /* now store a copy of the directory we are in */ if(ftp->prevpath) free(ftp->prevpath); path = curl_unescape(conn->path, 0); /* get the "raw" path */ if(!path) return CURLE_OUT_OF_MEMORY; flen = ftp->file?strlen(ftp->file):0; /* file is "raw" already */ dlen = strlen(path)-flen; if(dlen) { ftp->prevpath = path; if(flen) /* if 'path' is not the whole string */ ftp->prevpath[dlen]=0; /* terminate */ infof(data, "Remembering we are in dir %s\n", ftp->prevpath); } else { ftp->prevpath = NULL; /* no path */ free(path); } /* free the dir tree and file parts */ freedirs(ftp); ftp->ctl_valid = FALSE; if(data->set.upload) { if((-1 != data->set.infilesize) && (data->set.infilesize != *ftp->bytecountp) && !data->set.crlf && !ftp->no_transfer) { failf(data, "Uploaded unaligned file size (%" FORMAT_OFF_T " out of %" FORMAT_OFF_T " bytes)", *ftp->bytecountp, data->set.infilesize); conn->bits.close = TRUE; /* close this connection since we don't know what state this error leaves us in */ return CURLE_PARTIAL_FILE; } } else { if((-1 != conn->size) && (conn->size != *ftp->bytecountp) && (conn->maxdownload != *ftp->bytecountp)) { failf(data, "Received only partial file: %" FORMAT_OFF_T " bytes", *ftp->bytecountp); conn->bits.close = TRUE; /* close this connection since we don't know what state this error leaves us in */ return CURLE_PARTIAL_FILE; } else if(!ftp->dont_check && !*ftp->bytecountp && (conn->size>0)) { /* We consider this an error, but there's no true FTP error received why we need to continue to "read out" the server response too. We don't want to leave a "waiting" server reply if we'll get told to make a second request on this same connection! */ failf(data, "No data was received!"); result = CURLE_FTP_COULDNT_RETR_FILE; } } switch(status) { case CURLE_BAD_DOWNLOAD_RESUME: case CURLE_FTP_WEIRD_PASV_REPLY: case CURLE_FTP_PORT_FAILED: case CURLE_FTP_COULDNT_SET_BINARY: case CURLE_FTP_COULDNT_RETR_FILE: case CURLE_FTP_ACCESS_DENIED: /* the connection stays alive fine even though this happened */ /* fall-through */ case CURLE_OK: /* doesn't affect the control connection's status */ ftp->ctl_valid = was_ctl_valid; break; default: /* by default, an error means the control connection is wedged and should not be used anymore */ ftp->ctl_valid = FALSE; break; } #ifdef HAVE_KRB4 Curl_sec_fflush_fd(conn, conn->sock[SECONDARYSOCKET]); #endif /* shut down the socket to inform the server we're done */ #ifdef _WIN32_WCE shutdown(conn->sock[SECONDARYSOCKET],2); /* SD_BOTH */ #endif sclose(conn->sock[SECONDARYSOCKET]); conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; if(!ftp->no_transfer && !status) { /* Let's see what the server says about the transfer we just performed, * but lower the timeout as sometimes this connection has died while the * data has been transfered. This happens when doing through NATs etc that * abandon old silent connections. */ ftp->response_time = 60; /* give it only a minute for now */ result = Curl_GetFTPResponse(&nread, conn, &ftpcode); ftp->response_time = 3600; /* set this back to one hour waits */ if(!nread && (CURLE_OPERATION_TIMEDOUT == result)) { failf(data, "control connection looks dead"); return result; } if(result) return result; if(!ftp->dont_check) { /* 226 Transfer complete, 250 Requested file action okay, completed. */ if((ftpcode != 226) && (ftpcode != 250)) { failf(data, "server did not report OK, got %d", ftpcode); return CURLE_FTP_WRITE_ERROR; } } } /* clear these for next connection */ ftp->no_transfer = FALSE; ftp->dont_check = FALSE; if (!result && conn->sec_conn) { /* 3rd party transfer */ /* "done" with the secondary connection */ result = Curl_ftp_done(conn->sec_conn, status); } /* Send any post-transfer QUOTE strings? */ if(!status && !result && data->set.postquote) result = ftp_sendquote(conn, data->set.postquote); return result; } /*********************************************************************** * * ftp_sendquote() * * Where a 'quote' means a list of custom commands to send to the server. * The quote list is passed as an argument. */ static CURLcode ftp_sendquote(struct connectdata *conn, struct curl_slist *quote) { struct curl_slist *item; ssize_t nread; int ftpcode; CURLcode result; item = quote; while (item) { if (item->data) { FTPSENDF(conn, "%s", item->data); result = Curl_GetFTPResponse(&nread, conn, &ftpcode); if (result) return result; if (ftpcode >= 400) { failf(conn->data, "QUOT string not accepted: %s", item->data); return CURLE_FTP_QUOTE_ERROR; } } item = item->next; } return CURLE_OK; } /*********************************************************************** * * ftp_transfertype() * * Set transfer type. We only deal with ASCII or BINARY so this function * sets one of them. */ static CURLcode ftp_transfertype(struct connectdata *conn, bool ascii) { struct SessionHandle *data = conn->data; int ftpcode; ssize_t nread; CURLcode result; FTPSENDF(conn, "TYPE %s", ascii?"A":"I"); result = Curl_GetFTPResponse(&nread, conn, &ftpcode); if(result) return result; if(ftpcode != 200) { failf(data, "Couldn't set %s mode", ascii?"ASCII":"binary"); return ascii? CURLE_FTP_COULDNT_SET_ASCII:CURLE_FTP_COULDNT_SET_BINARY; } return CURLE_OK; } /*************************************************************************** * * ftp_pasv_verbose() * * This function only outputs some informationals about this second connection * when we've issued a PASV command before and thus we have connected to a * possibly new IP address. * */ static void ftp_pasv_verbose(struct connectdata *conn, Curl_addrinfo *ai, char *newhost, /* ascii version */ int port) { char buf[256]; Curl_printable_address(ai, buf, sizeof(buf)); infof(conn->data, "Connecting to %s (%s) port %d\n", newhost, buf, port); } /* Check if this is a range download, and if so, set the internal variables properly. */ static CURLcode ftp_range(struct connectdata *conn) { curl_off_t from, to; curl_off_t totalsize=-1; char *ptr; char *ptr2; struct FTP *ftp = conn->proto.ftp; if(conn->bits.use_range && conn->range) { from=curlx_strtoofft(conn->range, &ptr, 0); while(ptr && *ptr && (isspace((int)*ptr) || (*ptr=='-'))) ptr++; to=curlx_strtoofft(ptr, &ptr2, 0); if(ptr == ptr2) { /* we didn't get any digit */ to=-1; } if((-1 == to) && (from>=0)) { /* X - */ conn->resume_from = from; DEBUGF(infof(conn->data, "FTP RANGE %" FORMAT_OFF_T " to end of file\n", from)); } else if(from < 0) { /* -Y */ totalsize = -from; conn->maxdownload = -from; conn->resume_from = from; DEBUGF(infof(conn->data, "FTP RANGE the last %" FORMAT_OFF_T " bytes\n", totalsize)); } else { /* X-Y */ totalsize = to-from; conn->maxdownload = totalsize+1; /* include the last mentioned byte */ conn->resume_from = from; DEBUGF(infof(conn->data, "FTP RANGE from %" FORMAT_OFF_T " getting %" FORMAT_OFF_T " bytes\n", from, conn->maxdownload)); } DEBUGF(infof(conn->data, "range-download from %" FORMAT_OFF_T " to %" FORMAT_OFF_T ", totally %" FORMAT_OFF_T " bytes\n", from, to, conn->maxdownload)); ftp->dont_check = TRUE; /* dont check for successful transfer */ } return CURLE_OK; } /* * Curl_ftp_nextconnect() * * This function shall be called when the second FTP (data) connection is * connected. */ CURLcode Curl_ftp_nextconnect(struct connectdata *conn) { struct SessionHandle *data=conn->data; CURLcode result = CURLE_OK; /* the ftp struct is inited in Curl_ftp_connect() */ struct FTP *ftp = conn->proto.ftp; DEBUGF(infof(data, "DO-MORE phase starts\n")); if(!ftp->no_transfer && !conn->bits.no_body) { /* a transfer is about to take place */ if(data->set.upload) { NBFTPSENDF(conn, "TYPE %c", data->set.ftp_ascii?'A':'I'); state(conn, FTP_STOR_TYPE); } else { /* download */ ftp->downloadsize = -1; /* unknown as of yet */ result = ftp_range(conn); if(result) ; else if((data->set.ftp_list_only) || !ftp->file) { /* The specified path ends with a slash, and therefore we think this is a directory that is requested, use LIST. But before that we need to set ASCII transfer mode. */ NBFTPSENDF(conn, "TYPE A", NULL); state(conn, FTP_LIST_TYPE); } else { NBFTPSENDF(conn, "TYPE %c", data->set.ftp_ascii?'A':'I'); state(conn, FTP_RETR_TYPE); } } result = ftp_easy_statemach(conn); } if(ftp->no_transfer) /* no data to transfer. FIX: it feels like a kludge to have this here too! */ result=Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL); /* end of transfer */ DEBUGF(infof(data, "DO-MORE phase ends\n")); return result; } /*********************************************************************** * * ftp_perform() * * This is the actual DO function for FTP. Get a file/directory according to * the options previously setup. */ static CURLcode ftp_perform(struct connectdata *conn, bool *connected, /* connect status after PASV / PORT */ bool *dophase_done) { /* this is FTP and no proxy */ CURLcode result=CURLE_OK; DEBUGF(infof(conn->data, "DO phase starts\n")); *dophase_done = FALSE; /* not done yet */ /* start the first command in the DO phase */ result = ftp_state_quote(conn, TRUE, FTP_QUOTE); if(result) return result; /* run the state-machine */ if(conn->data->state.used_interface == Curl_if_multi) result = Curl_ftp_multi_statemach(conn, dophase_done); else { result = ftp_easy_statemach(conn); *dophase_done = TRUE; /* with the easy interface we are done here */ } *connected = conn->bits.tcpconnect; if(*dophase_done) DEBUGF(infof(conn->data, "DO phase is comlete\n")); return result; } /*********************************************************************** * * Curl_ftp() * * This function is registered as 'curl_do' function. It decodes the path * parts etc as a wrapper to the actual DO function (ftp_perform). * * The input argument is already checked for validity. */ CURLcode Curl_ftp(struct connectdata *conn, bool *done) { CURLcode retcode = CURLE_OK; *done = FALSE; /* default to false */ retcode = ftp_parse_url_path(conn); if (retcode) return retcode; if (conn->sec_conn) { /* 3rd party transfer */ *done = TRUE; /* BLOCKING */ retcode = ftp_3rdparty(conn); } else retcode = ftp_regular_transfer(conn, done); return retcode; } /*********************************************************************** * * Curl_(nb)ftpsendf() * * Sends the formated string as a ftp command to a ftp server * * NOTE: we build the command in a fixed-length buffer, which sets length * restrictions on the command! * * The "nb" version is made to Never Block. */ CURLcode Curl_nbftpsendf(struct connectdata *conn, const char *fmt, ...) { ssize_t bytes_written; char s[256]; size_t write_len; char *sptr=s; CURLcode res = CURLE_OK; struct FTP *ftp = conn->proto.ftp; struct SessionHandle *data = conn->data; va_list ap; va_start(ap, fmt); vsnprintf(s, 250, fmt, ap); va_end(ap); strcat(s, "\r\n"); /* append a trailing CRLF */ bytes_written=0; write_len = strlen(s); ftp_respinit(conn); res = Curl_write(conn, conn->sock[FIRSTSOCKET], sptr, write_len, &bytes_written); if(CURLE_OK != res) return res; if(conn->data->set.verbose) Curl_debug(conn->data, CURLINFO_HEADER_OUT, sptr, bytes_written, conn); if(bytes_written != (ssize_t)write_len) { /* the whole chunk was not sent, store the rest of the data */ write_len -= bytes_written; sptr += bytes_written; ftp->sendthis = malloc(write_len); if(ftp->sendthis) { memcpy(ftp->sendthis, sptr, write_len); ftp->sendsize=ftp->sendleft=write_len; } else { failf(data, "out of memory"); res = CURLE_OUT_OF_MEMORY; } } else ftp->response = Curl_tvnow(); return res; } CURLcode Curl_ftpsendf(struct connectdata *conn, const char *fmt, ...) { ssize_t bytes_written; char s[256]; size_t write_len; char *sptr=s; CURLcode res = CURLE_OK; va_list ap; va_start(ap, fmt); vsnprintf(s, 250, fmt, ap); va_end(ap); strcat(s, "\r\n"); /* append a trailing CRLF */ bytes_written=0; write_len = strlen(s); while(1) { res = Curl_write(conn, conn->sock[FIRSTSOCKET], sptr, write_len, &bytes_written); if(CURLE_OK != res) break; if(conn->data->set.verbose) Curl_debug(conn->data, CURLINFO_HEADER_OUT, sptr, bytes_written, conn); if(bytes_written != (ssize_t)write_len) { write_len -= bytes_written; sptr += bytes_written; } else break; } return res; } /*********************************************************************** * * ftp_quit() * * This should be called before calling sclose() on an ftp control connection * (not data connections). We should then wait for the response from the * server before returning. The calling code should then try to close the * connection. * */ static CURLcode ftp_quit(struct connectdata *conn) { CURLcode result = CURLE_OK; if(conn->proto.ftp->ctl_valid) { NBFTPSENDF(conn, "QUIT", NULL); state(conn, FTP_QUIT); result = ftp_easy_statemach(conn); } return result; } /*********************************************************************** * * Curl_ftp_disconnect() * * Disconnect from an FTP server. Cleanup protocol-specific per-connection * resources. BLOCKING. */ CURLcode Curl_ftp_disconnect(struct connectdata *conn) { struct FTP *ftp= conn->proto.ftp; /* We cannot send quit unconditionally. If this connection is stale or bad in any way, sending quit and waiting around here will make the disconnect wait in vain and cause more problems than we need to. ftp_quit() will check the state of ftp->ctl_valid. If it's ok it will try to send the QUIT command, otherwise it will just return. */ /* The FTP session may or may not have been allocated/setup at this point! */ if(ftp) { (void)ftp_quit(conn); /* ignore errors on the QUIT */ if(ftp->entrypath) free(ftp->entrypath); if(ftp->cache) { free(ftp->cache); ftp->cache = NULL; } freedirs(ftp); if(ftp->prevpath) { free(ftp->prevpath); ftp->prevpath = NULL; } } return CURLE_OK; } /*********************************************************************** * * ftp_mkd() * * Makes a directory on the FTP server. * * Calls failf() */ static CURLcode ftp_mkd(struct connectdata *conn, char *path) { CURLcode result=CURLE_OK; int ftpcode; /* for ftp status */ ssize_t nread; /* Create a directory on the remote server */ FTPSENDF(conn, "MKD %s", path); result = Curl_GetFTPResponse(&nread, conn, &ftpcode); if(result) return result; switch(ftpcode) { case 257: /* success! */ infof( conn->data , "Created remote directory %s\n" , path ); break; case 550: failf(conn->data, "Permission denied to make directory %s", path); result = CURLE_FTP_ACCESS_DENIED; break; default: failf(conn->data, "unrecognized MKD response: %d", ftpcode ); result = CURLE_FTP_ACCESS_DENIED; break; } return result; } /*********************************************************************** * * ftp_cwd() * * Send 'CWD' to the remote server to Change Working Directory. It is the ftp * version of the unix 'cd' command. This function is only called from the * ftp_cwd_and_mkd() function these days. * * This function does NOT call failf(). */ static CURLcode ftp_cwd(struct connectdata *conn, char *path) { ssize_t nread; int ftpcode; CURLcode result; FTPSENDF(conn, "CWD %s", path); result = Curl_GetFTPResponse(&nread, conn, &ftpcode); if (!result) { /* According to RFC959, CWD is supposed to return 250 on success, but there seem to be non-compliant FTP servers out there that return 200, so we accept any '2xy' code here. */ if (ftpcode/100 != 2) result = CURLE_FTP_ACCESS_DENIED; } return result; } /*********************************************************************** * * ftp_cwd_and_mkd() * * Change to the given directory. If the directory is not present, and we * have been told to allow it, then create the directory and cd to it. * */ static CURLcode ftp_cwd_and_mkd(struct connectdata *conn, char *path) { CURLcode result; result = ftp_cwd(conn, path); if (result) { if(conn->data->set.ftp_create_missing_dirs) { result = ftp_mkd(conn, path); if (result) /* ftp_mkd() calls failf() itself */ return result; result = ftp_cwd(conn, path); } if(result) failf(conn->data, "Couldn't CWD to %s", path); } return result; } /*********************************************************************** * * ftp_3rdparty_pretransfer() * * Preparation for 3rd party transfer. * */ static CURLcode ftp_3rdparty_pretransfer(struct connectdata *conn) { CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; struct connectdata *sec_conn = conn->sec_conn; conn->xfertype = TARGET3RD; sec_conn->xfertype = SOURCE3RD; /* sets transfer type */ result = ftp_transfertype(conn, data->set.ftp_ascii); if (result) return result; result = ftp_transfertype(sec_conn, data->set.ftp_ascii); if (result) return result; /* Send any PREQUOTE strings after transfer type is set? */ if (data->set.source_prequote) { /* sends command(s) to source server before file transfer */ result = ftp_sendquote(sec_conn, data->set.source_prequote); } if (!result && data->set.prequote) result = ftp_sendquote(conn, data->set.prequote); return result; } /*********************************************************************** * * ftp_3rdparty_transfer() * * Performs 3rd party transfer. * */ static CURLcode ftp_3rdparty_transfer(struct connectdata *conn) { CURLcode result = CURLE_OK; ssize_t nread; int ftpcode, ip[4], port[2]; struct SessionHandle *data = conn->data; struct connectdata *sec_conn = conn->sec_conn; char *buf = data->state.buffer; /* this is our buffer */ char *str = buf; char pasv_port[50]; const char *stor_cmd; struct connectdata *pasv_conn; struct connectdata *port_conn; if (data->set.ftpport == NULL) { pasv_conn = conn; port_conn = sec_conn; } else { pasv_conn = sec_conn; port_conn = conn; } result = ftp_cwd_and_create_path(conn); if (result) return result; /* sets the passive mode */ FTPSENDF(pasv_conn, "%s", "PASV"); result = Curl_GetFTPResponse(&nread, pasv_conn, &ftpcode); if (result) return result; if (ftpcode != 227) { failf(data, "Odd return code after PASV: %03d", ftpcode); return CURLE_FTP_WEIRD_PASV_REPLY; } while (*str) { if (6 == sscanf(str, "%d,%d,%d,%d,%d,%d", &ip[0], &ip[1], &ip[2], &ip[3], &port[0], &port[1])) break; str++; } if (!*str) { failf(pasv_conn->data, "Couldn't interpret the 227-reply"); return CURLE_FTP_WEIRD_227_FORMAT; } snprintf(pasv_port, sizeof(pasv_port), "%d,%d,%d,%d,%d,%d", ip[0], ip[1], ip[2], ip[3], port[0], port[1]); /* sets data connection between remote hosts */ FTPSENDF(port_conn, "PORT %s", pasv_port); result = Curl_GetFTPResponse(&nread, port_conn, &ftpcode); if (result) return result; if (ftpcode != 200) { failf(data, "PORT command attempts failed: %03d", ftpcode); return CURLE_FTP_PORT_FAILED; } /* we might append onto the file instead of overwriting it */ stor_cmd = data->set.ftp_append?"APPE":"STOR"; /* transfers file between remote hosts */ /* FIX: this should send a series of CWD commands and then RETR only the ftp->file file. The conn->path "full path" is not unescaped. Test case 230 tests this. */ FTPSENDF(sec_conn, "RETR %s", sec_conn->path); if(!data->set.ftpport) { result = Curl_GetFTPResponse(&nread, sec_conn, &ftpcode); if (result) return result; if((ftpcode != 150) && (ftpcode != 125)) { failf(data, "Failed RETR: %03d", ftpcode); return CURLE_FTP_COULDNT_RETR_FILE; } result = Curl_ftpsendf(conn, "%s %s", stor_cmd, conn->proto.ftp->file); if(CURLE_OK == result) result = Curl_GetFTPResponse(&nread, conn, &ftpcode); if (result) return result; if (ftpcode >= 400) { failf(data, "Failed FTP upload: %03d", ftpcode); return CURLE_FTP_COULDNT_STOR_FILE; } } else { result = Curl_ftpsendf(conn, "%s %s", stor_cmd, conn->proto.ftp->file); if(CURLE_OK == result) result = Curl_GetFTPResponse(&nread, sec_conn, &ftpcode); if (result) return result; if (ftpcode >= 400) { failf(data, "Failed FTP upload: %03d", ftpcode); return CURLE_FTP_COULDNT_STOR_FILE; } result = Curl_GetFTPResponse(&nread, conn, &ftpcode); if (result) return result; if((ftpcode != 150) && (ftpcode != 125)) { failf(data, "Failed FTP upload: %03d", ftpcode); return CURLE_FTP_COULDNT_STOR_FILE; } } return CURLE_OK; } /*********************************************************************** * * ftp_parse_url_path() * * Parse the URL path into separate path components. * */ static CURLcode ftp_parse_url_path(struct connectdata *conn) { CURLcode retcode = CURLE_OK; struct SessionHandle *data = conn->data; struct FTP *ftp; size_t dlen; char *slash_pos; /* position of the first '/' char in curpos */ char *cur_pos = conn->path; /* current position in path. point at the begin of next path component */ /* the ftp struct is already inited in ftp_connect() */ ftp = conn->proto.ftp; ftp->ctl_valid = FALSE; ftp->dirdepth = 0; ftp->diralloc = 5; /* default dir depth to allocate */ ftp->dirs = (char **)calloc(ftp->diralloc, sizeof(ftp->dirs[0])); if(!ftp->dirs) return CURLE_OUT_OF_MEMORY; /* parse the URL path into separate path components */ while((slash_pos=strchr(cur_pos, '/'))) { /* 1 or 0 to indicate absolute directory */ bool absolute_dir = (cur_pos - conn->path > 0) && (ftp->dirdepth == 0); /* seek out the next path component */ if (slash_pos-cur_pos) { /* we skip empty path components, like "x//y" since the FTP command CWD requires a parameter and a non-existant parameter a) doesn't work on many servers and b) has no effect on the others. */ int len = (int)(slash_pos - cur_pos + absolute_dir); ftp->dirs[ftp->dirdepth] = curl_unescape(cur_pos - absolute_dir, len); if (!ftp->dirs[ftp->dirdepth]) { /* run out of memory ... */ failf(data, "no memory"); freedirs(ftp); return CURLE_OUT_OF_MEMORY; } if (isBadFtpString(ftp->dirs[ftp->dirdepth])) { freedirs(ftp); return CURLE_URL_MALFORMAT; } } else { cur_pos = slash_pos + 1; /* jump to the rest of the string */ continue; } if(!retcode) { cur_pos = slash_pos + 1; /* jump to the rest of the string */ if(++ftp->dirdepth >= ftp->diralloc) { /* enlarge array */ char *bigger; ftp->diralloc *= 2; /* double the size each time */ bigger = realloc(ftp->dirs, ftp->diralloc * sizeof(ftp->dirs[0])); if(!bigger) { ftp->dirdepth--; freedirs(ftp); return CURLE_OUT_OF_MEMORY; } ftp->dirs = (char **)bigger; } } } ftp->file = cur_pos; /* the rest is the file name */ if(*ftp->file) { ftp->file = curl_unescape(ftp->file, 0); if(NULL == ftp->file) { freedirs(ftp); failf(data, "no memory"); return CURLE_OUT_OF_MEMORY; } if (isBadFtpString(ftp->file)) { freedirs(ftp); return CURLE_URL_MALFORMAT; } } else ftp->file=NULL; /* instead of point to a zero byte, we make it a NULL pointer */ ftp->cwddone = FALSE; /* default to not done */ if(ftp->prevpath) { /* prevpath is "raw" so we convert the input path before we compare the strings */ char *path = curl_unescape(conn->path, 0); if(!path) return CURLE_OUT_OF_MEMORY; dlen = strlen(path) - (ftp->file?strlen(ftp->file):0); if((dlen == strlen(ftp->prevpath)) && curl_strnequal(path, ftp->prevpath, dlen)) { infof(data, "Request has same path as previous transfer\n"); ftp->cwddone = TRUE; } free(path); } return retcode; } /*********************************************************************** * * ftp_cwd_and_create_path() * * Creates full path on remote target host. * */ static CURLcode ftp_cwd_and_create_path(struct connectdata *conn) { CURLcode result = CURLE_OK; /* the ftp struct is already inited in Curl_ftp_connect() */ struct FTP *ftp = conn->proto.ftp; int i; if(ftp->cwddone) /* already done and fine */ return CURLE_OK; /* This is a re-used connection. Since we change directory to where the transfer is taking place, we must now get back to the original dir where we ended up after login: */ if (conn->bits.reuse && ftp->entrypath) { if ((result = ftp_cwd_and_mkd(conn, ftp->entrypath)) != CURLE_OK) return result; } for (i=0; i < ftp->dirdepth; i++) { /* RFC 1738 says empty components should be respected too, but that is plain stupid since CWD can't be used with an empty argument */ if ((result = ftp_cwd_and_mkd(conn, ftp->dirs[i])) != CURLE_OK) return result; } return result; } /* call this when the DO phase has completed */ static CURLcode ftp_dophase_done(struct connectdata *conn, bool connected) { CURLcode result = CURLE_OK; struct FTP *ftp = conn->proto.ftp; if(connected) result = Curl_ftp_nextconnect(conn); if(result && (conn->sock[SECONDARYSOCKET] != CURL_SOCKET_BAD)) { /* Failure detected, close the second socket if it was created already */ sclose(conn->sock[SECONDARYSOCKET]); conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; } if(ftp->no_transfer) /* no data to transfer */ result=Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL); else if(!connected) /* since we didn't connect now, we want do_more to get called */ conn->bits.do_more = TRUE; ftp->ctl_valid = TRUE; /* seems good */ return result; } /* called from multi.c while DOing */ CURLcode Curl_ftp_doing(struct connectdata *conn, bool *dophase_done) { CURLcode result; result = Curl_ftp_multi_statemach(conn, dophase_done); if(*dophase_done) { result = ftp_dophase_done(conn, FALSE /* not connected */); DEBUGF(infof(conn->data, "DO phase is comlete\n")); } return result; } /*********************************************************************** * * ftp_regular_transfer() * * The input argument is already checked for validity. * * Performs all commands done before a regular transfer between a local and a * remote host. * * ftp->ctl_valid starts out as FALSE, and gets set to TRUE if we reach the * Curl_ftp_done() function without finding any major problem. */ static CURLcode ftp_regular_transfer(struct connectdata *conn, bool *dophase_done) { CURLcode result=CURLE_OK; bool connected=0; struct SessionHandle *data = conn->data; struct FTP *ftp; /* the ftp struct is already inited in ftp_connect() */ ftp = conn->proto.ftp; conn->size = -1; /* make sure this is unknown at this point */ Curl_pgrsSetUploadCounter(data, 0); Curl_pgrsSetDownloadCounter(data, 0); Curl_pgrsSetUploadSize(data, 0); Curl_pgrsSetDownloadSize(data, 0); ftp->ctl_valid = TRUE; /* starts good */ result = ftp_perform(conn, &connected, /* have we connected after PASV/PORT */ dophase_done); /* all commands in the DO-phase done? */ if(CURLE_OK == result) { if(!*dophase_done) /* the DO phase has not completed yet */ return CURLE_OK; result = ftp_dophase_done(conn, connected); if(result) return result; } else freedirs(ftp); return result; } /*********************************************************************** * * ftp_3rdparty() * * The input argument is already checked for validity. * Performs a 3rd party transfer between two remote hosts. */ static CURLcode ftp_3rdparty(struct connectdata *conn) { CURLcode result = CURLE_OK; conn->proto.ftp->ctl_valid = conn->sec_conn->proto.ftp->ctl_valid = TRUE; conn->size = conn->sec_conn->size = -1; result = ftp_3rdparty_pretransfer(conn); if (!result) result = ftp_3rdparty_transfer(conn); return result; } #endif /* CURL_DISABLE_FTP */ criticalmass-1.0.0.orig/curl/lib/ftp.h0000644000175000017500000000404410265631023017054 0ustar danieldaniel#ifndef __FTP_H #define __FTP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: ftp.h,v 1.22 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ #ifndef CURL_DISABLE_FTP CURLcode Curl_ftp(struct connectdata *conn, bool *done); CURLcode Curl_ftp_done(struct connectdata *conn, CURLcode); CURLcode Curl_ftp_connect(struct connectdata *conn, bool *done); CURLcode Curl_ftp_disconnect(struct connectdata *conn); CURLcode Curl_ftpsendf(struct connectdata *, const char *fmt, ...); CURLcode Curl_nbftpsendf(struct connectdata *, const char *fmt, ...); CURLcode Curl_GetFTPResponse(ssize_t *nread, struct connectdata *conn, int *ftpcode); CURLcode Curl_ftp_nextconnect(struct connectdata *conn); CURLcode Curl_ftp_multi_statemach(struct connectdata *conn, bool *done); CURLcode Curl_ftp_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp); CURLcode Curl_ftp_doing(struct connectdata *conn, bool *dophase_done); #endif /* CURL_DISABLE_FTP */ #endif /* __FTP_H */ criticalmass-1.0.0.orig/curl/lib/md5.c0000644000175000017500000002717510265631023016755 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: md5.c,v 1.11 2005/05/02 14:33:07 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_CRYPTO_AUTH #if !defined(USE_SSLEAY) || !defined(USE_OPENSSL) /* This code segment is only used if OpenSSL is not provided, as if it is we use the MD5-function provided there instead. No good duplicating code! */ /* Copyright (C) 1991-2, RSA Data Security, Inc. Created 1991. All rights reserved. License to copy and use this software is granted provided that it is identified as the "RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing this software or this function. License is also granted to make and use derivative works provided that such works are identified as "derived from the RSA Data Security, Inc. MD5 Message-Digest Algorithm" in all material mentioning or referencing the derived work. RSA Data Security, Inc. makes no representations concerning either the merchantability of this software or the suitability of this software for any particular purpose. It is provided "as is" without express or implied warranty of any kind. These notices must be retained in any copies of any part of this documentation and/or software. */ #include /* UINT4 defines a four byte word */ typedef unsigned int UINT4; /* MD5 context. */ struct md5_ctx { UINT4 state[4]; /* state (ABCD) */ UINT4 count[2]; /* number of bits, modulo 2^64 (lsb first) */ unsigned char buffer[64]; /* input buffer */ }; typedef struct md5_ctx MD5_CTX; static void MD5_Init(struct md5_ctx *); static void MD5_Update(struct md5_ctx *, const unsigned char *, unsigned int); static void MD5_Final(unsigned char [16], struct md5_ctx *); /* Constants for MD5Transform routine. */ #define S11 7 #define S12 12 #define S13 17 #define S14 22 #define S21 5 #define S22 9 #define S23 14 #define S24 20 #define S31 4 #define S32 11 #define S33 16 #define S34 23 #define S41 6 #define S42 10 #define S43 15 #define S44 21 static void MD5Transform(UINT4 [4], const unsigned char [64]); static void Encode(unsigned char *, UINT4 *, unsigned int); static void Decode(UINT4 *, const unsigned char *, unsigned int); static const unsigned char PADDING[64] = { 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; /* F, G, H and I are basic MD5 functions. */ #define F(x, y, z) (((x) & (y)) | ((~x) & (z))) #define G(x, y, z) (((x) & (z)) | ((y) & (~z))) #define H(x, y, z) ((x) ^ (y) ^ (z)) #define I(x, y, z) ((y) ^ ((x) | (~z))) /* ROTATE_LEFT rotates x left n bits. */ #define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32-(n)))) /* FF, GG, HH, and II transformations for rounds 1, 2, 3, and 4. Rotation is separate from addition to prevent recomputation. */ #define FF(a, b, c, d, x, s, ac) { \ (a) += F ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define GG(a, b, c, d, x, s, ac) { \ (a) += G ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define HH(a, b, c, d, x, s, ac) { \ (a) += H ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } #define II(a, b, c, d, x, s, ac) { \ (a) += I ((b), (c), (d)) + (x) + (UINT4)(ac); \ (a) = ROTATE_LEFT ((a), (s)); \ (a) += (b); \ } /* MD5 initialization. Begins an MD5 operation, writing a new context. */ static void MD5_Init(struct md5_ctx *context) { context->count[0] = context->count[1] = 0; /* Load magic initialization constants. */ context->state[0] = 0x67452301; context->state[1] = 0xefcdab89; context->state[2] = 0x98badcfe; context->state[3] = 0x10325476; } /* MD5 block update operation. Continues an MD5 message-digest operation, processing another message block, and updating the context. */ static void MD5_Update (struct md5_ctx *context, /* context */ const unsigned char *input, /* input block */ unsigned int inputLen) /* length of input block */ { unsigned int i, bufindex, partLen; /* Compute number of bytes mod 64 */ bufindex = (unsigned int)((context->count[0] >> 3) & 0x3F); /* Update number of bits */ if ((context->count[0] += ((UINT4)inputLen << 3)) < ((UINT4)inputLen << 3)) context->count[1]++; context->count[1] += ((UINT4)inputLen >> 29); partLen = 64 - bufindex; /* Transform as many times as possible. */ if (inputLen >= partLen) { memcpy((void *)&context->buffer[bufindex], (void *)input, partLen); MD5Transform(context->state, context->buffer); for (i = partLen; i + 63 < inputLen; i += 64) MD5Transform(context->state, &input[i]); bufindex = 0; } else i = 0; /* Buffer remaining input */ memcpy((void *)&context->buffer[bufindex], (void *)&input[i], inputLen-i); } /* MD5 finalization. Ends an MD5 message-digest operation, writing the the message digest and zeroizing the context. */ static void MD5_Final(unsigned char digest[16], /* message digest */ struct md5_ctx *context) /* context */ { unsigned char bits[8]; unsigned int count, padLen; /* Save number of bits */ Encode (bits, context->count, 8); /* Pad out to 56 mod 64. */ count = (unsigned int)((context->count[0] >> 3) & 0x3f); padLen = (count < 56) ? (56 - count) : (120 - count); MD5_Update (context, PADDING, padLen); /* Append length (before padding) */ MD5_Update (context, bits, 8); /* Store state in digest */ Encode (digest, context->state, 16); /* Zeroize sensitive information. */ memset ((void *)context, 0, sizeof (*context)); } /* MD5 basic transformation. Transforms state based on block. */ static void MD5Transform(UINT4 state[4], const unsigned char block[64]) { UINT4 a = state[0], b = state[1], c = state[2], d = state[3], x[16]; Decode (x, block, 64); /* Round 1 */ FF (a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ FF (d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ FF (c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ FF (b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ FF (a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ FF (d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ FF (c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ FF (b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ FF (a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ FF (d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ FF (c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ FF (b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ FF (a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ FF (d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ FF (c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ FF (b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ /* Round 2 */ GG (a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ GG (d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ GG (c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ GG (b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ GG (a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ GG (d, a, b, c, x[10], S22, 0x2441453); /* 22 */ GG (c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ GG (b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ GG (a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ GG (d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ GG (c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ GG (b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ GG (a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ GG (d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ GG (c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ GG (b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ /* Round 3 */ HH (a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ HH (d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ HH (c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ HH (b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ HH (a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ HH (d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ HH (c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ HH (b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ HH (a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ HH (d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ HH (c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ HH (b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ HH (a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ HH (d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ HH (c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ HH (b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ /* Round 4 */ II (a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ II (d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ II (c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ II (b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ II (a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ II (d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ II (c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ II (b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ II (a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ II (d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ II (c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ II (b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ II (a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ II (d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ II (c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ II (b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ state[0] += a; state[1] += b; state[2] += c; state[3] += d; /* Zeroize sensitive information. */ memset((void *)x, 0, sizeof (x)); } /* Encodes input (UINT4) into output (unsigned char). Assumes len is a multiple of 4. */ static void Encode (unsigned char *output, UINT4 *input, unsigned int len) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) { output[j] = (unsigned char)(input[i] & 0xff); output[j+1] = (unsigned char)((input[i] >> 8) & 0xff); output[j+2] = (unsigned char)((input[i] >> 16) & 0xff); output[j+3] = (unsigned char)((input[i] >> 24) & 0xff); } } /* Decodes input (unsigned char) into output (UINT4). Assumes len is a multiple of 4. */ static void Decode (UINT4 *output, const unsigned char *input, unsigned int len) { unsigned int i, j; for (i = 0, j = 0; j < len; i++, j += 4) output[i] = ((UINT4)input[j]) | (((UINT4)input[j+1]) << 8) | (((UINT4)input[j+2]) << 16) | (((UINT4)input[j+3]) << 24); } #else /* If OpenSSL is present */ #include #include #endif #include "md5.h" void Curl_md5it(unsigned char *outbuffer, /* 16 bytes */ const unsigned char *input) { MD5_CTX ctx; MD5_Init(&ctx); MD5_Update(&ctx, input, (unsigned int)strlen((char *)input)); MD5_Final(outbuffer, &ctx); } #endif criticalmass-1.0.0.orig/curl/lib/md5.h0000644000175000017500000000230010265631023016741 0ustar danieldaniel#ifndef __MD5_H #define __MD5_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: md5.h,v 1.4 2004/12/15 01:38:25 danf Exp $ ***************************************************************************/ void Curl_md5it(unsigned char *output, const unsigned char *input); #endif criticalmass-1.0.0.orig/curl/lib/url.c0000644000175000017500000034320610265631023017066 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: url.c,v 1.461 2005/05/14 06:00:40 giva Exp $ ***************************************************************************/ /* -- WIN32 approved -- */ #include "setup.h" #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #include #else #ifdef HAVE_SYS_SOCKET_H #include #endif #include #include #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef VMS #include #include #endif #ifdef HAVE_SETJMP_H #include #endif #ifndef HAVE_SOCKET #error "We can't compile without socket() support!" #endif #endif #ifdef USE_LIBIDN #include #include #include #ifdef HAVE_IDN_FREE_H #include #else void idn_free (void *ptr); /* prototype from idn-free.h, not provided by libidn 0.4.5's make install! */ #endif #ifndef HAVE_IDN_FREE /* if idn_free() was not found in this version of libidn, use plain free() instead */ #define idn_free(x) (free)(x) #endif #endif #include "urldata.h" #include "netrc.h" #include "formdata.h" #include "base64.h" #include "sslgen.h" #include "hostip.h" #include "transfer.h" #include "sendf.h" #include "progress.h" #include "cookie.h" #include "strequal.h" #include "strerror.h" #include "escape.h" #include "strtok.h" #include "share.h" #include "content_encoding.h" #include "http_digest.h" #include "http_negotiate.h" #include "select.h" #include "multiif.h" /* And now for the protocols */ #include "ftp.h" #include "dict.h" #include "telnet.h" #include "http.h" #include "file.h" #include "ldap.h" #include "url.h" #include "connect.h" #include "inet_ntop.h" #include "http_ntlm.h" #include #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #define _MPRINTF_REPLACE /* use our functions only */ #include #ifdef HAVE_KRB4 #include "krb4.h" #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /* Local static prototypes */ static long ConnectionKillOne(struct SessionHandle *data); static bool ConnectionExists(struct SessionHandle *data, struct connectdata *needle, struct connectdata **usethis); static long ConnectionStore(struct SessionHandle *data, struct connectdata *conn); #ifndef USE_ARES /* not for Win32, unless it is cygwin not for ares builds */ #if !defined(WIN32) || defined(__CYGWIN32__) #ifndef RETSIGTYPE #define RETSIGTYPE void #endif #ifdef HAVE_SIGSETJMP extern sigjmp_buf curl_jmpenv; #endif static RETSIGTYPE alarmfunc(int sig) { /* this is for "-ansi -Wall -pedantic" to stop complaining! (rabe) */ (void)sig; #ifdef HAVE_SIGSETJMP siglongjmp(curl_jmpenv, 1); #endif return; } #endif #endif /* USE_ARES */ void Curl_safefree(void *ptr) { if(ptr) free(ptr); } /* * This is the internal function curl_easy_cleanup() calls. This should * cleanup and free all resources associated with this sessionhandle. * * NOTE: if we ever add something that attempts to write to a socket or * similar here, we must ignore SIGPIPE first. It is currently only done * when curl_easy_perform() is invoked. */ CURLcode Curl_close(struct SessionHandle *data) { if(data->multi) { /* this handle is still part of a multi handle, take care of this first */ Curl_multi_rmeasy(data->multi, data); } /* Loop through all open connections and kill them one by one */ while(-1 != ConnectionKillOne(data)) ; /* empty loop */ if ( ! (data->share && data->share->hostcache) ) { if ( !Curl_global_host_cache_use(data)) { Curl_hash_destroy(data->hostcache); } } /* Close down all open SSL info and sessions */ Curl_ssl_close_all(data); Curl_safefree(data->state.first_host); Curl_safefree(data->state.scratch); if(data->change.proxy_alloc) free(data->change.proxy); if(data->change.referer_alloc) free(data->change.referer); if(data->change.url_alloc) free(data->change.url); Curl_safefree(data->state.headerbuff); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) if(data->change.cookielist) /* clean up list if any */ curl_slist_free_all(data->change.cookielist); Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); if(data->set.cookiejar) { /* we have a "destination" for all the cookies to get dumped to */ if(Curl_cookie_output(data->cookies, data->set.cookiejar)) infof(data, "WARNING: failed to save cookies in %s\n", data->set.cookiejar); } if( !data->share || (data->cookies != data->share->cookies) ) { Curl_cookie_cleanup(data->cookies); } Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); #endif #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_CRYPTO_AUTH) Curl_digest_cleanup(data); #endif /* free the connection cache */ free(data->state.connects); Curl_safefree(data->info.contenttype); #ifdef USE_ARES /* this destroys the channel and we cannot use it anymore after this */ ares_destroy(data->state.areschannel); #endif /* No longer a dirty share, if it exists */ if (data->share) data->share->dirty--; free(data); return CURLE_OK; } /** * Curl_open() * * @param curl is a pointer to a sessionhandle pointer that gets set by this * function. * @return CURLcode */ CURLcode Curl_open(struct SessionHandle **curl) { CURLcode res = CURLE_OK; struct SessionHandle *data; /* Very simple start-up: alloc the struct, init it with zeroes and return */ data = (struct SessionHandle *)calloc(1, sizeof(struct SessionHandle)); if(!data) /* this is a very serious error */ return CURLE_OUT_OF_MEMORY; #ifdef USE_ARES if(ARES_SUCCESS != ares_init(&data->state.areschannel)) { free(data); return CURLE_FAILED_INIT; } /* make sure that all other returns from this function should destroy the ares channel before returning error! */ #endif /* We do some initial setup here, all those fields that can't be just 0 */ data->state.headerbuff=(char*)malloc(HEADERSIZE); if(!data->state.headerbuff) res = CURLE_OUT_OF_MEMORY; else { data->state.headersize=HEADERSIZE; data->set.out = stdout; /* default output to stdout */ data->set.in = stdin; /* default input from stdin */ data->set.err = stderr; /* default stderr to stderr */ /* use fwrite as default function to store output */ data->set.fwrite = (curl_write_callback)fwrite; /* use fread as default function to read input */ data->set.fread = (curl_read_callback)fread; data->set.infilesize = -1; /* we don't know any size */ data->set.postfieldsize = -1; data->state.current_speed = -1; /* init to negative == impossible */ data->set.httpreq = HTTPREQ_GET; /* Default HTTP request */ data->set.ftp_use_epsv = TRUE; /* FTP defaults to EPSV operations */ data->set.ftp_use_eprt = TRUE; /* FTP defaults to EPRT operations */ data->set.ftp_use_lprt = TRUE; /* FTP defaults to EPRT operations */ data->set.dns_cache_timeout = 60; /* Timeout every 60 seconds by default */ /* make libcurl quiet by default: */ data->set.hide_progress = TRUE; /* CURLOPT_NOPROGRESS changes these */ data->progress.flags |= PGRS_HIDE; /* Set the default size of the SSL session ID cache */ data->set.ssl.numsessions = 5; data->set.proxyport = 1080; data->set.proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */ data->set.httpauth = CURLAUTH_BASIC; /* defaults to basic */ data->set.proxyauth = CURLAUTH_BASIC; /* defaults to basic */ /* create an array with connection data struct pointers */ data->state.numconnects = 5; /* hard-coded right now */ data->state.connects = (struct connectdata **) malloc(sizeof(struct connectdata *) * data->state.numconnects); if(!data->state.connects) res = CURLE_OUT_OF_MEMORY; else memset(data->state.connects, 0, sizeof(struct connectdata *)*data->state.numconnects); /* * libcurl 7.10 introduced SSL verification *by default*! This needs to be * switched off unless wanted. */ data->set.ssl.verifypeer = TRUE; data->set.ssl.verifyhost = 2; #ifdef CURL_CA_BUNDLE /* This is our prefered CA cert bundle since install time */ data->set.ssl.CAfile = (char *)CURL_CA_BUNDLE; #endif } if(res) { #ifdef USE_ARES ares_destroy(data->state.areschannel); #endif if(data->state.headerbuff) free(data->state.headerbuff); free(data); data = NULL; } *curl = data; return CURLE_OK; } CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...) { va_list param; char *argptr; CURLcode result = CURLE_OK; va_start(param, option); switch(option) { case CURLOPT_DNS_CACHE_TIMEOUT: data->set.dns_cache_timeout = va_arg(param, int); break; case CURLOPT_DNS_USE_GLOBAL_CACHE: { int use_cache = va_arg(param, int); if (use_cache) { Curl_global_host_cache_init(); } data->set.global_dns_cache = use_cache; } break; case CURLOPT_SSL_CIPHER_LIST: /* set a list of cipher we want to use in the SSL connection */ data->set.ssl.cipher_list = va_arg(param, char *); break; case CURLOPT_RANDOM_FILE: /* * This is the path name to a file that contains random data to seed * the random SSL stuff with. The file is only used for reading. */ data->set.ssl.random_file = va_arg(param, char *); break; case CURLOPT_EGDSOCKET: /* * The Entropy Gathering Daemon socket pathname */ data->set.ssl.egdsocket = va_arg(param, char *); break; case CURLOPT_MAXCONNECTS: /* * Set the absolute number of maximum simultaneous alive connection that * libcurl is allowed to have. */ { long newconnects= va_arg(param, long); struct connectdata **newptr; long i; if(newconnects < data->state.numconnects) { /* Since this number is *decreased* from the existing number, we must close the possibly open connections that live on the indexes that are being removed! */ for(i=newconnects; i< data->state.numconnects; i++) Curl_disconnect(data->state.connects[i]); } if(newconnects) { newptr= (struct connectdata **) realloc(data->state.connects, sizeof(struct connectdata *) * newconnects); if(!newptr) /* we closed a few connections in vain, but so what? */ return CURLE_OUT_OF_MEMORY; /* nullify the newly added pointers */ for(i=data->state.numconnects; istate.connects = newptr; data->state.numconnects = newconnects; } else { /* zero makes NO cache at all */ if(data->state.connects) free(data->state.connects); data->state.connects=NULL; data->state.numconnects=0; } } break; case CURLOPT_FORBID_REUSE: /* * When this transfer is done, it must not be left to be reused by a * subsequent transfer but shall be closed immediately. */ data->set.reuse_forbid = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_FRESH_CONNECT: /* * This transfer shall not use a previously cached connection but * should be made with a fresh new connect! */ data->set.reuse_fresh = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_VERBOSE: /* * Verbose means infof() calls that give a lot of information about * the connection and transfer procedures as well as internal choices. */ data->set.verbose = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_HEADER: /* * Set to include the header in the general data output stream. */ data->set.include_header = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_NOPROGRESS: /* * Shut off the internal supported progress meter */ data->set.hide_progress = va_arg(param, long)?TRUE:FALSE; if(data->set.hide_progress) data->progress.flags |= PGRS_HIDE; else data->progress.flags &= ~PGRS_HIDE; break; case CURLOPT_NOBODY: /* * Do not include the body part in the output data stream. */ data->set.opt_no_body = va_arg(param, long)?TRUE:FALSE; if(data->set.opt_no_body) /* in HTTP lingo, this means using the HEAD request */ data->set.httpreq = HTTPREQ_HEAD; break; case CURLOPT_FAILONERROR: /* * Don't output the >=300 error code HTML-page, but instead only * return error. */ data->set.http_fail_on_error = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_UPLOAD: case CURLOPT_PUT: /* * We want to sent data to the remote host. If this is HTTP, that equals * using the PUT request. */ data->set.upload = va_arg(param, long)?TRUE:FALSE; if(data->set.upload) /* If this is HTTP, PUT is what's needed to "upload" */ data->set.httpreq = HTTPREQ_PUT; break; case CURLOPT_FILETIME: /* * Try to get the file time of the remote document. The time will * later (possibly) become available using curl_easy_getinfo(). */ data->set.get_filetime = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_FTP_CREATE_MISSING_DIRS: /* * An FTP option that modifies an upload to create missing directories on * the server. */ data->set.ftp_create_missing_dirs = va_arg( param , long )?TRUE:FALSE; break; case CURLOPT_FTP_RESPONSE_TIMEOUT: /* * An FTP option that specifies how quickly an FTP response must be * obtained before it is considered failure. */ data->set.ftp_response_timeout = va_arg( param , long ); break; case CURLOPT_FTPLISTONLY: /* * An FTP option that changes the command to one that asks for a list * only, no file info details. */ data->set.ftp_list_only = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_FTPAPPEND: /* * We want to upload and append to an existing (FTP) file. */ data->set.ftp_append = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_NETRC: /* * Parse the $HOME/.netrc file */ data->set.use_netrc = (enum CURL_NETRC_OPTION)va_arg(param, long); break; case CURLOPT_NETRC_FILE: /* * Use this file instead of the $HOME/.netrc file */ data->set.netrc_file = va_arg(param, char *); break; case CURLOPT_TRANSFERTEXT: /* * This option was previously named 'FTPASCII'. Renamed to work with * more protocols than merely FTP. * * Transfer using ASCII (instead of BINARY). */ data->set.ftp_ascii = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_TIMECONDITION: /* * Set HTTP time condition. This must be one of the defines in the * curl/curl.h header file. */ data->set.timecondition = (curl_TimeCond)va_arg(param, long); break; case CURLOPT_TIMEVALUE: /* * This is the value to compare with the remote document with the * method set with CURLOPT_TIMECONDITION */ data->set.timevalue = (time_t)va_arg(param, long); break; case CURLOPT_SSLVERSION: /* * Set explicit SSL version to try to connect with, as some SSL * implementations are lame. */ data->set.ssl.version = va_arg(param, long); break; #ifndef CURL_DISABLE_HTTP case CURLOPT_AUTOREFERER: /* * Switch on automatic referer that gets set if curl follows locations. */ data->set.http_auto_referer = va_arg(param, long)?1:0; break; case CURLOPT_ENCODING: /* * String to use at the value of Accept-Encoding header. * * If the encoding is set to "" we use an Accept-Encoding header that * encompasses all the encodings we support. * If the encoding is set to NULL we don't send an Accept-Encoding header * and ignore an received Content-Encoding header. * */ data->set.encoding = va_arg(param, char *); if(data->set.encoding && !*data->set.encoding) data->set.encoding = (char*)ALL_CONTENT_ENCODINGS; break; case CURLOPT_FOLLOWLOCATION: /* * Follow Location: header hints on a HTTP-server. */ data->set.http_follow_location = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_UNRESTRICTED_AUTH: /* * Send authentication (user+password) when following locations, even when * hostname changed. */ data->set.http_disable_hostname_check_before_authentication = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_MAXREDIRS: /* * The maximum amount of hops you allow curl to follow Location: * headers. This should mostly be used to detect never-ending loops. */ data->set.maxredirs = va_arg(param, long); break; case CURLOPT_POST: /* Does this option serve a purpose anymore? Yes it does, when CURLOPT_POSTFIELDS isn't used and the POST data is read off the callback! */ if(va_arg(param, long)) data->set.httpreq = HTTPREQ_POST; else data->set.httpreq = HTTPREQ_GET; break; case CURLOPT_POSTFIELDS: /* * A string with POST data. Makes curl HTTP POST. Even if it is NULL. */ data->set.postfields = va_arg(param, char *); data->set.httpreq = HTTPREQ_POST; break; case CURLOPT_POSTFIELDSIZE: /* * The size of the POSTFIELD data to prevent libcurl to do strlen() to * figure it out. Enables binary posts. */ data->set.postfieldsize = va_arg(param, long); break; case CURLOPT_POSTFIELDSIZE_LARGE: /* * The size of the POSTFIELD data to prevent libcurl to do strlen() to * figure it out. Enables binary posts. */ data->set.postfieldsize = va_arg(param, curl_off_t); break; case CURLOPT_HTTPPOST: /* * Set to make us do HTTP POST */ data->set.httppost = va_arg(param, struct curl_httppost *); data->set.httpreq = HTTPREQ_POST_FORM; break; case CURLOPT_REFERER: /* * String to set in the HTTP Referer: field. */ if(data->change.referer_alloc) { free(data->change.referer); data->change.referer_alloc = FALSE; } data->set.set_referer = va_arg(param, char *); data->change.referer = data->set.set_referer; break; case CURLOPT_USERAGENT: /* * String to use in the HTTP User-Agent field */ data->set.useragent = va_arg(param, char *); break; case CURLOPT_HTTPHEADER: /* * Set a list with HTTP headers to use (or replace internals with) */ data->set.headers = va_arg(param, struct curl_slist *); break; case CURLOPT_HTTP200ALIASES: /* * Set a list of aliases for HTTP 200 in response header */ data->set.http200aliases = va_arg(param, struct curl_slist *); break; #if !defined(CURL_DISABLE_COOKIES) case CURLOPT_COOKIE: /* * Cookie string to send to the remote server in the request. */ data->set.cookie = va_arg(param, char *); break; case CURLOPT_COOKIEFILE: /* * Set cookie file to read and parse. Can be used multiple times. */ argptr = (char *)va_arg(param, void *); if(argptr) { struct curl_slist *cl; /* append the cookie file name to the list of file names, and deal with them later */ cl = curl_slist_append(data->change.cookielist, argptr); if(!cl) return CURLE_OUT_OF_MEMORY; data->change.cookielist = cl; } break; case CURLOPT_COOKIEJAR: /* * Set cookie file name to dump all cookies to when we're done. */ data->set.cookiejar = (char *)va_arg(param, void *); /* * Activate the cookie parser. This may or may not already * have been made. */ data->cookies = Curl_cookie_init(data, NULL, data->cookies, data->set.cookiesession); break; case CURLOPT_COOKIESESSION: /* * Set this option to TRUE to start a new "cookie session". It will * prevent the forthcoming read-cookies-from-file actions to accept * cookies that are marked as being session cookies, as they belong to a * previous session. * * In the original Netscape cookie spec, "session cookies" are cookies * with no expire date set. RFC2109 describes the same action if no * 'Max-Age' is set and RFC2965 includes the RFC2109 description and adds * a 'Discard' action that can enforce the discard even for cookies that * have a Max-Age. * * We run mostly with the original cookie spec, as hardly anyone implements * anything else. */ data->set.cookiesession = (bool)va_arg(param, long); break; #endif /* CURL_DISABLE_COOKIES */ case CURLOPT_HTTPGET: /* * Set to force us do HTTP GET */ if(va_arg(param, long)) { data->set.httpreq = HTTPREQ_GET; data->set.upload = FALSE; /* switch off upload */ } break; case CURLOPT_HTTP_VERSION: /* * This sets a requested HTTP version to be used. The value is one of * the listed enums in curl/curl.h. */ data->set.httpversion = va_arg(param, long); break; case CURLOPT_HTTPPROXYTUNNEL: /* * Tunnel operations through the proxy instead of normal proxy use */ data->set.tunnel_thru_httpproxy = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_CUSTOMREQUEST: /* * Set a custom string to use as request */ data->set.customrequest = va_arg(param, char *); /* we don't set data->set.httpreq = HTTPREQ_CUSTOM; here, we continue as if we were using the already set type and this just changes the actual request keyword */ break; case CURLOPT_PROXYPORT: /* * Explicitly set HTTP proxy port number. */ data->set.proxyport = va_arg(param, long); break; case CURLOPT_HTTPAUTH: /* * Set HTTP Authentication type BITMASK. */ { long auth = va_arg(param, long); /* switch off bits we can't support */ #ifndef USE_NTLM auth &= ~CURLAUTH_NTLM; /* no NTLM without SSL */ #endif #ifndef HAVE_GSSAPI auth &= ~CURLAUTH_GSSNEGOTIATE; /* no GSS-Negotiate without GSSAPI */ #endif if(!auth) return CURLE_FAILED_INIT; /* no supported types left! */ data->set.httpauth = auth; } break; case CURLOPT_PROXYAUTH: /* * Set HTTP Authentication type BITMASK. */ { long auth = va_arg(param, long); /* switch off bits we can't support */ #ifndef USE_NTLM auth &= ~CURLAUTH_NTLM; /* no NTLM without SSL */ #endif #ifndef HAVE_GSSAPI auth &= ~CURLAUTH_GSSNEGOTIATE; /* no GSS-Negotiate without GSSAPI */ #endif if(!auth) return CURLE_FAILED_INIT; /* no supported types left! */ data->set.proxyauth = auth; } break; #endif /* CURL_DISABLE_HTTP */ case CURLOPT_PROXY: /* * Set proxy server:port to use as HTTP proxy. * * If the proxy is set to "" we explicitly say that we don't want to use a * proxy (even though there might be environment variables saying so). * * Setting it to NULL, means no proxy but allows the environment variables * to decide for us. */ if(data->change.proxy_alloc) { /* * The already set string is allocated, free that first */ data->change.proxy_alloc=FALSE;; free(data->change.proxy); } data->set.set_proxy = va_arg(param, char *); data->change.proxy = data->set.set_proxy; break; case CURLOPT_WRITEHEADER: /* * Custom pointer to pass the header write callback function */ data->set.writeheader = (void *)va_arg(param, void *); break; case CURLOPT_ERRORBUFFER: /* * Error buffer provided by the caller to get the human readable * error string in. */ data->set.errorbuffer = va_arg(param, char *); break; case CURLOPT_FILE: /* * FILE pointer to write to or include in the data write callback */ data->set.out = va_arg(param, FILE *); break; case CURLOPT_FTPPORT: /* * Use FTP PORT, this also specifies which IP address to use */ data->set.ftpport = va_arg(param, char *); data->set.ftp_use_port = data->set.ftpport?1:0; break; case CURLOPT_FTP_USE_EPRT: data->set.ftp_use_eprt = va_arg(param, long)?TRUE:FALSE; data->set.ftp_use_lprt = data->set.ftp_use_eprt; break; case CURLOPT_FTP_USE_EPSV: data->set.ftp_use_epsv = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_INFILE: /* * FILE pointer to read the file to be uploaded from. Or possibly * used as argument to the read callback. */ data->set.in = va_arg(param, FILE *); break; case CURLOPT_INFILESIZE: /* * If known, this should inform curl about the file size of the * to-be-uploaded file. */ data->set.infilesize = va_arg(param, long); break; case CURLOPT_INFILESIZE_LARGE: /* * If known, this should inform curl about the file size of the * to-be-uploaded file. */ data->set.infilesize = va_arg(param, curl_off_t); break; case CURLOPT_LOW_SPEED_LIMIT: /* * The low speed limit that if transfers are below this for * CURLOPT_LOW_SPEED_TIME, the transfer is aborted. */ data->set.low_speed_limit=va_arg(param, long); break; case CURLOPT_LOW_SPEED_TIME: /* * The low speed time that if transfers are below the set * CURLOPT_LOW_SPEED_LIMIT during this time, the transfer is aborted. */ data->set.low_speed_time=va_arg(param, long); break; case CURLOPT_URL: /* * The URL to fetch. */ if(data->change.url_alloc) { /* the already set URL is allocated, free it first! */ free(data->change.url); data->change.url_alloc=FALSE; } data->set.set_url = va_arg(param, char *); data->change.url = data->set.set_url; data->change.url_changed = TRUE; break; case CURLOPT_PORT: /* * The port number to use when getting the URL */ data->set.use_port = va_arg(param, long); break; case CURLOPT_TIMEOUT: /* * The maximum time you allow curl to use for a single transfer * operation. */ data->set.timeout = va_arg(param, long); break; case CURLOPT_CONNECTTIMEOUT: /* * The maximum time you allow curl to use to connect. */ data->set.connecttimeout = va_arg(param, long); break; case CURLOPT_USERPWD: /* * user:password to use in the operation */ data->set.userpwd = va_arg(param, char *); break; case CURLOPT_POSTQUOTE: /* * List of RAW FTP commands to use after a transfer */ data->set.postquote = va_arg(param, struct curl_slist *); break; case CURLOPT_PREQUOTE: /* * List of RAW FTP commands to use prior to RETR (Wesley Laxton) */ data->set.prequote = va_arg(param, struct curl_slist *); break; case CURLOPT_QUOTE: /* * List of RAW FTP commands to use before a transfer */ data->set.quote = va_arg(param, struct curl_slist *); break; case CURLOPT_PROGRESSFUNCTION: /* * Progress callback function */ data->set.fprogress = va_arg(param, curl_progress_callback); if(data->set.fprogress) data->progress.callback = TRUE; /* no longer internal */ else data->progress.callback = FALSE; /* NULL enforces internal */ break; case CURLOPT_PROGRESSDATA: /* * Custom client data to pass to the progress callback */ data->set.progress_client = va_arg(param, void *); break; case CURLOPT_PROXYUSERPWD: /* * user:password needed to use the proxy */ data->set.proxyuserpwd = va_arg(param, char *); break; case CURLOPT_RANGE: /* * What range of the file you want to transfer */ data->set.set_range = va_arg(param, char *); break; case CURLOPT_RESUME_FROM: /* * Resume transfer at the give file position */ data->set.set_resume_from = va_arg(param, long); break; case CURLOPT_RESUME_FROM_LARGE: /* * Resume transfer at the give file position */ data->set.set_resume_from = va_arg(param, curl_off_t); break; case CURLOPT_DEBUGFUNCTION: /* * stderr write callback. */ data->set.fdebug = va_arg(param, curl_debug_callback); /* * if the callback provided is NULL, it'll use the default callback */ break; case CURLOPT_DEBUGDATA: /* * Set to a void * that should receive all error writes. This * defaults to CURLOPT_STDERR for normal operations. */ data->set.debugdata = va_arg(param, void *); break; case CURLOPT_STDERR: /* * Set to a FILE * that should receive all error writes. This * defaults to stderr for normal operations. */ data->set.err = va_arg(param, FILE *); if(!data->set.err) data->set.err = stderr; break; case CURLOPT_HEADERFUNCTION: /* * Set header write callback */ data->set.fwrite_header = va_arg(param, curl_write_callback); break; case CURLOPT_WRITEFUNCTION: /* * Set data write callback */ data->set.fwrite = va_arg(param, curl_write_callback); if(!data->set.fwrite) /* When set to NULL, reset to our internal default function */ data->set.fwrite = (curl_write_callback)fwrite; break; case CURLOPT_READFUNCTION: /* * Read data callback */ data->set.fread = va_arg(param, curl_read_callback); if(!data->set.fread) /* When set to NULL, reset to our internal default function */ data->set.fread = (curl_read_callback)fread; break; case CURLOPT_IOCTLFUNCTION: /* * I/O control callback. Might be NULL. */ data->set.ioctl = va_arg(param, curl_ioctl_callback); break; case CURLOPT_IOCTLDATA: /* * I/O control data pointer. Might be NULL. */ data->set.ioctl_client = va_arg(param, void *); break; case CURLOPT_SSLCERT: /* * String that holds file name of the SSL certificate to use */ data->set.cert = va_arg(param, char *); break; case CURLOPT_SSLCERTTYPE: /* * String that holds file type of the SSL certificate to use */ data->set.cert_type = va_arg(param, char *); break; case CURLOPT_SSLKEY: /* * String that holds file name of the SSL certificate to use */ data->set.key = va_arg(param, char *); break; case CURLOPT_SSLKEYTYPE: /* * String that holds file type of the SSL certificate to use */ data->set.key_type = va_arg(param, char *); break; case CURLOPT_SSLKEYPASSWD: /* * String that holds the SSL private key password. */ data->set.key_passwd = va_arg(param, char *); break; case CURLOPT_SSLENGINE: /* * String that holds the SSL crypto engine. */ argptr = va_arg(param, char *); if (argptr && argptr[0]) result = Curl_ssl_set_engine(data, argptr); break; case CURLOPT_SSLENGINE_DEFAULT: /* * flag to set engine as default. */ result = Curl_ssl_set_engine_default(data); break; case CURLOPT_CRLF: /* * Kludgy option to enable CRLF convertions. Subject for removal. */ data->set.crlf = va_arg(param, long)?TRUE:FALSE; break; case CURLOPT_INTERFACE: /* * Set what interface to bind to when performing an operation and thus * what from-IP your connection will use. */ data->set.device = va_arg(param, char *); break; case CURLOPT_KRB4LEVEL: /* * A string that defines the krb4 security level. */ data->set.krb4_level = va_arg(param, char *); data->set.krb4=data->set.krb4_level?TRUE:FALSE; break; case CURLOPT_SSL_VERIFYPEER: /* * Enable peer SSL verifying. */ data->set.ssl.verifypeer = va_arg(param, long); break; case CURLOPT_SSL_VERIFYHOST: /* * Enable verification of the CN contained in the peer certificate */ data->set.ssl.verifyhost = va_arg(param, long); break; case CURLOPT_SSL_CTX_FUNCTION: /* * Set a SSL_CTX callback */ data->set.ssl.fsslctx = va_arg(param, curl_ssl_ctx_callback); break; case CURLOPT_SSL_CTX_DATA: /* * Set a SSL_CTX callback parameter pointer */ data->set.ssl.fsslctxp = va_arg(param, void *); break; case CURLOPT_CAINFO: /* * Set CA info for SSL connection. Specify file name of the CA certificate */ data->set.ssl.CAfile = va_arg(param, char *); break; case CURLOPT_CAPATH: /* * Set CA path info for SSL connection. Specify directory name of the CA * certificates which have been prepared using openssl c_rehash utility. */ /* This does not work on windows. */ data->set.ssl.CApath = va_arg(param, char *); break; case CURLOPT_TELNETOPTIONS: /* * Set a linked list of telnet options */ data->set.telnet_options = va_arg(param, struct curl_slist *); break; case CURLOPT_BUFFERSIZE: /* * The application kindly asks for a differently sized receive buffer. * If it seems reasonable, we'll use it. */ data->set.buffer_size = va_arg(param, long); if((data->set.buffer_size> (BUFSIZE -1 )) || (data->set.buffer_size < 1)) data->set.buffer_size = 0; /* huge internal default */ break; case CURLOPT_NOSIGNAL: /* * The application asks not to set any signal() or alarm() handlers, * even when using a timeout. */ data->set.no_signal = va_arg(param, long) ? TRUE : FALSE; break; case CURLOPT_SHARE: { struct Curl_share *set; set = va_arg(param, struct Curl_share *); /* disconnect from old share, if any */ if(data->share) { Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE); if(data->share->hostcache == data->hostcache) data->hostcache = NULL; if(data->share->cookies == data->cookies) data->cookies = NULL; data->share->dirty--; Curl_share_unlock(data, CURL_LOCK_DATA_SHARE); data->share = NULL; } /* use new share if it set */ data->share = set; if(data->share) { Curl_share_lock(data, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE); data->share->dirty++; if(data->share->hostcache) { /* use shared host cache, first free own one if any */ if(data->hostcache) Curl_hash_destroy(data->hostcache); data->hostcache = data->share->hostcache; } #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) if(data->share->cookies) { /* use shared cookie list, first free own one if any */ if (data->cookies) Curl_cookie_cleanup(data->cookies); data->cookies = data->share->cookies; } #endif /* CURL_DISABLE_HTTP */ Curl_share_unlock(data, CURL_LOCK_DATA_SHARE); } #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) /* check cookie list is set */ if(!data->cookies) data->cookies = Curl_cookie_init(data, NULL, NULL, TRUE ); #endif /* CURL_DISABLE_HTTP */ /* check for host cache not needed, * it will be done by curl_easy_perform */ } break; case CURLOPT_PROXYTYPE: /* * Set proxy type. HTTP/SOCKS4/SOCKS5 */ data->set.proxytype = (curl_proxytype)va_arg(param, long); break; case CURLOPT_PRIVATE: /* * Set private data pointer. */ data->set.private_data = va_arg(param, char *); break; case CURLOPT_MAXFILESIZE: /* * Set the maximum size of a file to download. */ data->set.max_filesize = va_arg(param, long); break; case CURLOPT_FTP_SSL: /* * Make FTP transfers attempt to use SSL/TLS. */ data->set.ftp_ssl = (curl_ftpssl)va_arg(param, long); break; case CURLOPT_FTPSSLAUTH: /* * Set a specific auth for FTP-SSL transfers. */ data->set.ftpsslauth = (curl_ftpauth)va_arg(param, long); break; case CURLOPT_IPRESOLVE: data->set.ip_version = va_arg(param, long); break; case CURLOPT_MAXFILESIZE_LARGE: /* * Set the maximum size of a file to download. */ data->set.max_filesize = va_arg(param, curl_off_t); break; case CURLOPT_TCP_NODELAY: /* * Enable or disable TCP_NODELAY, which will disable/enable the Nagle * algorithm */ data->set.tcp_nodelay = (bool)va_arg(param, long); break; /*********** 3rd party transfer options ***********/ case CURLOPT_SOURCE_URL: /* * SOURCE URL */ data->set.source_url = va_arg(param, char *); data->set.printhost = (data->set.source_url != NULL); break; case CURLOPT_SOURCE_USERPWD: /* * Use SOURCE USER[:PASSWORD] */ data->set.source_userpwd = va_arg(param, char *); break; case CURLOPT_SOURCE_QUOTE: /* * List of RAW FTP commands to use after a connect */ data->set.source_quote = va_arg(param, struct curl_slist *); break; case CURLOPT_SOURCE_PREQUOTE: /* * List of RAW FTP commands to use before a transfer on the source host */ data->set.source_prequote = va_arg(param, struct curl_slist *); break; case CURLOPT_SOURCE_POSTQUOTE: /* * List of RAW FTP commands to use after a transfer on the source host */ data->set.source_postquote = va_arg(param, struct curl_slist *); break; case CURLOPT_FTP_ACCOUNT: data->set.ftp_account = va_arg(param, char *); break; default: /* unknown tag and its companion, just ignore: */ result = CURLE_FAILED_INIT; /* correct this */ break; } return result; } CURLcode Curl_disconnect(struct connectdata *conn) { struct SessionHandle *data; if(!conn) return CURLE_OK; /* this is closed and fine already */ data = conn->data; #if defined(CURLDEBUG) && defined(AGGRESIVE_TEST) /* scan for DNS cache entries still marked as in use */ Curl_hash_apply(data->hostcache, NULL, Curl_scan_cache_used); #endif Curl_hostcache_prune(data); /* kill old DNS cache entries */ /* * The range string is usually freed in curl_done(), but we might * get here *instead* if we fail prematurely. Thus we need to be able * to free this resource here as well. */ if(conn->bits.rangestringalloc) { free(conn->range); conn->bits.rangestringalloc = FALSE; } if((conn->ntlm.state != NTLMSTATE_NONE) || (conn->proxyntlm.state != NTLMSTATE_NONE)) { /* Authentication data is a mix of connection-related and sessionhandle- related stuff. NTLM is connection-related so when we close the shop we shall forget. */ data->state.authhost.done = FALSE; data->state.authhost.picked = data->state.authhost.want; data->state.authproxy.done = FALSE; data->state.authproxy.picked = data->state.authproxy.want; data->state.authproblem = FALSE; Curl_ntlm_cleanup(conn); } if(conn->curl_disconnect) /* This is set if protocol-specific cleanups should be made */ conn->curl_disconnect(conn); if(-1 != conn->connectindex) { /* unlink ourselves! */ infof(data, "Closing connection #%ld\n", conn->connectindex); data->state.connects[conn->connectindex] = NULL; } Curl_safefree(conn->proto.generic); Curl_safefree(conn->newurl); Curl_safefree(conn->pathbuffer); /* the URL path buffer */ Curl_safefree(conn->host.rawalloc); /* host name buffer */ Curl_safefree(conn->proxy.rawalloc); /* proxy name buffer */ #ifdef USE_LIBIDN if(conn->host.encalloc) idn_free(conn->host.encalloc); /* encoded host name buffer, must be freed with idn_free() since this was allocated by libidn */ if(conn->proxy.encalloc) idn_free(conn->proxy.encalloc); /* encoded proxy name buffer, must be freed with idn_free() since this was allocated by libidn */ #endif Curl_ssl_close(conn); /* close possibly still open sockets */ if(CURL_SOCKET_BAD != conn->sock[SECONDARYSOCKET]) sclose(conn->sock[SECONDARYSOCKET]); if(CURL_SOCKET_BAD != conn->sock[FIRSTSOCKET]) sclose(conn->sock[FIRSTSOCKET]); Curl_safefree(conn->user); Curl_safefree(conn->passwd); Curl_safefree(conn->proxyuser); Curl_safefree(conn->proxypasswd); Curl_safefree(conn->allocptr.proxyuserpwd); Curl_safefree(conn->allocptr.uagent); Curl_safefree(conn->allocptr.userpwd); Curl_safefree(conn->allocptr.accept_encoding); Curl_safefree(conn->allocptr.rangeline); Curl_safefree(conn->allocptr.ref); Curl_safefree(conn->allocptr.host); Curl_safefree(conn->allocptr.cookiehost); Curl_safefree(conn->ip_addr_str); /* possible left-overs from the async name resolvers */ #if defined(USE_ARES) Curl_safefree(conn->async.hostname); Curl_safefree(conn->async.os_specific); #elif defined(CURLRES_THREADED) Curl_destroy_thread_data(&conn->async); #endif Curl_free_ssl_config(&conn->ssl_config); free(conn); /* free all the connection oriented data */ return CURLE_OK; } /* * This function should return TRUE if the socket is to be assumed to * be dead. Most commonly this happens when the server has closed the * connection due to inactivity. */ static bool SocketIsDead(curl_socket_t sock) { int sval; bool ret_val = TRUE; sval = Curl_select(sock, CURL_SOCKET_BAD, 0); if(sval == 0) /* timeout */ ret_val = FALSE; return ret_val; } /* * Given one filled in connection struct (named needle), this function should * detect if there already is one that have all the significant details * exactly the same and thus should be used instead. */ static bool ConnectionExists(struct SessionHandle *data, struct connectdata *needle, struct connectdata **usethis) { long i; struct connectdata *check; for(i=0; i< data->state.numconnects; i++) { bool match = FALSE; /* * Note that if we use a HTTP proxy, we check connections to that * proxy and not to the actual remote server. */ check = data->state.connects[i]; if(!check) /* NULL pointer means not filled-in entry */ continue; if((needle->protocol&PROT_SSL) != (check->protocol&PROT_SSL)) /* don't do mixed SSL and non-SSL connections */ continue; if(!needle->bits.httpproxy || needle->protocol&PROT_SSL) { /* The requested connection does not use a HTTP proxy or it uses SSL. */ if(!(needle->protocol&PROT_SSL) && check->bits.httpproxy) /* we don't do SSL but the cached connection has a proxy, then don't match this */ continue; if(strequal(needle->protostr, check->protostr) && strequal(needle->host.name, check->host.name) && (needle->remote_port == check->remote_port) ) { if(needle->protocol & PROT_SSL) { /* This is SSL, verify that we're using the same ssl options as well */ if(!Curl_ssl_config_matches(&needle->ssl_config, &check->ssl_config)) { continue; } } if((needle->protocol & PROT_FTP) || ((needle->protocol & PROT_HTTP) && (needle->data->state.authhost.want==CURLAUTH_NTLM))) { /* This is FTP or HTTP+NTLM, verify that we're using the same name and password as well */ if(!strequal(needle->user, check->user) || !strequal(needle->passwd, check->passwd)) { /* one of them was different */ continue; } } match = TRUE; } } else { /* The requested needle connection is using a proxy, is the checked one using the same? */ if(check->bits.httpproxy && strequal(needle->proxy.name, check->proxy.name) && needle->port == check->port) { /* This is the same proxy connection, use it! */ match = TRUE; } } if(match) { bool dead = SocketIsDead(check->sock[FIRSTSOCKET]); if(dead) { /* */ infof(data, "Connection %d seems to be dead!\n", i); Curl_disconnect(check); /* disconnect resources */ data->state.connects[i]=NULL; /* nothing here */ /* There's no need to continue searching, because we only store one connection for each unique set of identifiers */ return FALSE; } *usethis = check; return TRUE; /* yes, we found one to use! */ } } return FALSE; /* no matching connecting exists */ } /* * This function frees/closes a connection in the connection cache. This * should take the previously set policy into account when deciding which * of the connections to kill. */ static long ConnectionKillOne(struct SessionHandle *data) { long i; struct connectdata *conn; long highscore=-1; long connindex=-1; long score; struct timeval now; now = Curl_tvnow(); for(i=0; i< data->state.numconnects; i++) { conn = data->state.connects[i]; if(!conn) continue; /* * By using the set policy, we score each connection. */ switch(data->set.closepolicy) { case CURLCLOSEPOLICY_LEAST_RECENTLY_USED: default: /* * Set higher score for the age passed since the connection * was used. */ score = Curl_tvdiff(now, conn->now); break; case CURLCLOSEPOLICY_OLDEST: /* * Set higher score for the age passed since the connection * was created. */ score = Curl_tvdiff(now, conn->created); break; } if(score > highscore) { highscore = score; connindex = i; } } if(connindex >= 0) { /* the winner gets the honour of being disconnected */ (void) Curl_disconnect(data->state.connects[connindex]); /* clean the array entry */ data->state.connects[connindex] = NULL; } return connindex; /* return the available index or -1 */ } /* * The given input connection struct pointer is to be stored. If the "cache" * is already full, we must clean out the most suitable using the previously * set policy. * * The given connection should be unique. That must've been checked prior to * this call. */ static long ConnectionStore(struct SessionHandle *data, struct connectdata *conn) { long i; for(i=0; i< data->state.numconnects; i++) { if(!data->state.connects[i]) break; } if(i == data->state.numconnects) { /* there was no room available, kill one */ i = ConnectionKillOne(data); infof(data, "Connection (#%d) was killed to make room\n", i); } if(-1 != i) { /* only do this if a true index was returned, if -1 was returned there is no room in the cache for an unknown reason and we cannot store this there. */ data->state.connects[i] = conn; /* fill in this */ conn->connectindex = i; /* make the child know where the pointer to this particular data is stored */ } return i; } /* * This function logs in to a SOCKS5 proxy and sends the specifies the final * desitination server. */ static int handleSock5Proxy(const char *proxy_name, const char *proxy_password, struct connectdata *conn) { /* According to the RFC1928, section "6. Replies". This is what a SOCK5 replies: +----+-----+-------+------+----------+----------+ |VER | REP | RSV | ATYP | BND.ADDR | BND.PORT | +----+-----+-------+------+----------+----------+ | 1 | 1 | X'00' | 1 | Variable | 2 | +----+-----+-------+------+----------+----------+ Where: o VER protocol version: X'05' o REP Reply field: o X'00' succeeded */ unsigned char socksreq[600]; /* room for large user/pw (255 max each) */ ssize_t actualread; ssize_t written; int result; CURLcode code; curl_socket_t sock = conn->sock[FIRSTSOCKET]; Curl_nonblock(sock, FALSE); socksreq[0] = 5; /* version */ socksreq[1] = (char)(proxy_name ? 2 : 1); /* number of methods (below) */ socksreq[2] = 0; /* no authentication */ socksreq[3] = 2; /* username/password */ code = Curl_write(conn, sock, (char *)socksreq, (2 + (int)socksreq[1]), &written); if ((code != CURLE_OK) || (written != (2 + (int)socksreq[1]))) { failf(conn->data, "Unable to send initial SOCKS5 request."); return 1; } result=Curl_read(conn, sock, (char *)socksreq, 2, &actualread); if ((result != CURLE_OK) || (actualread != 2)) { failf(conn->data, "Unable to receive initial SOCKS5 response."); return 1; } if (socksreq[0] != 5) { failf(conn->data, "Received invalid version in initial SOCKS5 response."); return 1; } if (socksreq[1] == 0) { /* Nothing to do, no authentication needed */ ; } else if (socksreq[1] == 2) { /* Needs user name and password */ int userlen, pwlen, len; userlen = (int)strlen(proxy_name); pwlen = proxy_password?(int)strlen(proxy_password):0; /* username/password request looks like * +----+------+----------+------+----------+ * |VER | ULEN | UNAME | PLEN | PASSWD | * +----+------+----------+------+----------+ * | 1 | 1 | 1 to 255 | 1 | 1 to 255 | * +----+------+----------+------+----------+ */ len = 0; socksreq[len++] = 1; /* username/pw subnegotiation version */ socksreq[len++] = (char) userlen; memcpy(socksreq + len, proxy_name, (int) userlen); len += userlen; socksreq[len++] = (char) pwlen; memcpy(socksreq + len, proxy_password, (int) pwlen); len += pwlen; code = Curl_write(conn, sock, (char *)socksreq, len, &written); if ((code != CURLE_OK) || (len != written)) { failf(conn->data, "Failed to send SOCKS5 sub-negotiation request."); return 1; } result=Curl_read(conn, sock, (char *)socksreq, 2, &actualread); if ((result != CURLE_OK) || (actualread != 2)) { failf(conn->data, "Unable to receive SOCKS5 sub-negotiation response."); return 1; } /* ignore the first (VER) byte */ if (socksreq[1] != 0) { /* status */ failf(conn->data, "User was rejected by the SOCKS5 server (%d %d).", socksreq[0], socksreq[1]); return 1; } /* Everything is good so far, user was authenticated! */ } else { /* error */ if (socksreq[1] == 1) { failf(conn->data, "SOCKS5 GSSAPI per-message authentication is not supported."); return 1; } else if (socksreq[1] == 255) { if (!proxy_name || !*proxy_name) { failf(conn->data, "No authentication method was acceptable. (It is quite likely" " that the SOCKS5 server wanted a username/password, since none" " was supplied to the server on this connection.)"); } else { failf(conn->data, "No authentication method was acceptable."); } return 1; } else { failf(conn->data, "Undocumented SOCKS5 mode attempted to be used by server."); return 1; } } /* Authentication is complete, now specify destination to the proxy */ socksreq[0] = 5; /* version (SOCKS5) */ socksreq[1] = 1; /* connect */ socksreq[2] = 0; /* must be zero */ socksreq[3] = 1; /* IPv4 = 1 */ { struct Curl_dns_entry *dns; Curl_addrinfo *hp=NULL; int rc = Curl_resolv(conn, conn->host.name, (int)conn->remote_port, &dns); if(rc == CURLRESOLV_ERROR) return 1; if(rc == CURLRESOLV_PENDING) /* this requires that we're in "wait for resolve" state */ rc = Curl_wait_for_resolv(conn, &dns); /* * We cannot use 'hostent' as a struct that Curl_resolv() returns. It * returns a Curl_addrinfo pointer that may not always look the same. */ if(dns) hp=dns->addr; if (hp) { char buf[64]; unsigned short ip[4]; Curl_printable_address(hp, buf, sizeof(buf)); if(4 == sscanf( buf, "%hu.%hu.%hu.%hu", &ip[0], &ip[1], &ip[2], &ip[3])) { socksreq[4] = (unsigned char)ip[0]; socksreq[5] = (unsigned char)ip[1]; socksreq[6] = (unsigned char)ip[2]; socksreq[7] = (unsigned char)ip[3]; } else hp = NULL; /* fail! */ Curl_resolv_unlock(conn->data, dns); /* not used anymore from now on */ } if(!hp) { failf(conn->data, "Failed to resolve \"%s\" for SOCKS5 connect.", conn->host.name); return 1; } } *((unsigned short*)&socksreq[8]) = htons(conn->remote_port); { const int packetsize = 10; code = Curl_write(conn, sock, (char *)socksreq, packetsize, &written); if ((code != CURLE_OK) || (written != packetsize)) { failf(conn->data, "Failed to send SOCKS5 connect request."); return 1; } result = Curl_read(conn, sock, (char *)socksreq, packetsize, &actualread); if ((result != CURLE_OK) || (actualread != packetsize)) { failf(conn->data, "Failed to receive SOCKS5 connect request ack."); return 1; } if (socksreq[0] != 5) { /* version */ failf(conn->data, "SOCKS5 reply has wrong version, version should be 5."); return 1; } if (socksreq[1] != 0) { /* Anything besides 0 is an error */ failf(conn->data, "Can't complete SOCKS5 connection to %d.%d.%d.%d:%d. (%d)", (unsigned char)socksreq[4], (unsigned char)socksreq[5], (unsigned char)socksreq[6], (unsigned char)socksreq[7], (unsigned int)ntohs(*(unsigned short*)(&socksreq[8])), socksreq[1]); return 1; } } Curl_nonblock(sock, TRUE); return 0; /* Proxy was successful! */ } static CURLcode ConnectPlease(struct connectdata *conn, struct Curl_dns_entry *hostaddr, bool *connected) { CURLcode result; Curl_addrinfo *addr; struct SessionHandle *data = conn->data; char *hostname = data->change.proxy?conn->proxy.name:conn->host.name; infof(data, "About to connect() to %s port %d\n", hostname, conn->port); /************************************************************* * Connect to server/proxy *************************************************************/ result= Curl_connecthost(conn, hostaddr, &conn->sock[FIRSTSOCKET], &addr, connected); if(CURLE_OK == result) { /* All is cool, then we store the current information */ conn->dns_entry = hostaddr; conn->ip_addr = addr; Curl_store_ip_addr(conn); if (conn->data->set.proxytype == CURLPROXY_SOCKS5) { return handleSock5Proxy(conn->proxyuser, conn->proxypasswd, conn) ? CURLE_COULDNT_CONNECT : CURLE_OK; } else if (conn->data->set.proxytype == CURLPROXY_HTTP) { /* do nothing here. handled later. */ } else { failf(conn->data, "unknown proxytype option given"); return CURLE_COULDNT_CONNECT; } } return result; } /* * verboseconnect() displays verbose information after a connect */ static void verboseconnect(struct connectdata *conn) { infof(conn->data, "Connected to %s (%s) port %d\n", conn->bits.httpproxy ? conn->proxy.dispname : conn->host.dispname, conn->ip_addr_str, conn->port); } CURLcode Curl_protocol_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp) { CURLcode res = CURLE_OK; if(conn->curl_proto_fdset) res = conn->curl_proto_fdset(conn, read_fd_set, write_fd_set, max_fdp); return res; } CURLcode Curl_doing_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp) { CURLcode res = CURLE_OK; if(conn && conn->curl_doing_fdset) res = conn->curl_doing_fdset(conn, read_fd_set, write_fd_set, max_fdp); return res; } /* * We are doing protocol-specific connecting and this is being called over and * over from the multi interface until the connection phase is done on * protocol layer. */ CURLcode Curl_protocol_connecting(struct connectdata *conn, bool *done) { CURLcode result=CURLE_OK; if(conn && conn->curl_connecting) { *done = FALSE; result = conn->curl_connecting(conn, done); } else *done = TRUE; return result; } /* * We are DOING this is being called over and over from the multi interface * until the DOING phase is done on protocol layer. */ CURLcode Curl_protocol_doing(struct connectdata *conn, bool *done) { CURLcode result=CURLE_OK; if(conn && conn->curl_doing) { *done = FALSE; result = conn->curl_doing(conn, done); } else *done = TRUE; return result; } /* * We have discovered that the TCP connection has been successful, we can now * proceed with some action. * */ CURLcode Curl_protocol_connect(struct connectdata *conn, bool *protocol_done) { struct SessionHandle *data = conn->data; CURLcode result=CURLE_OK; *protocol_done = FALSE; if(conn->bits.tcpconnect && conn->bits.protoconnstart) { /* We already are connected, get back. This may happen when the connect worked fine in the first call, like when we connect to a local server or proxy. Note that we don't know if the protocol is actually done. Unless this protocol doesn't have any protocol-connect callback, as then we know we're done. */ if(!conn->curl_connecting) *protocol_done = TRUE; return CURLE_OK; } if(!conn->bits.tcpconnect) { Curl_pgrsTime(data, TIMER_CONNECT); /* connect done */ if(data->set.verbose) verboseconnect(conn); } if(!conn->bits.protoconnstart) { if(conn->curl_connect) { /* is there a protocol-specific connect() procedure? */ /* Set start time here for timeout purposes in the connect procedure, it is later set again for the progress meter purpose */ conn->now = Curl_tvnow(); /* Call the protocol-specific connect function */ result = conn->curl_connect(conn, protocol_done); } else *protocol_done = TRUE; /* it has started, possibly even completed but that knowledge isn't stored in this bit! */ conn->bits.protoconnstart = TRUE; } return result; /* pass back status */ } /* * Helpers for IDNA convertions. */ #ifdef USE_LIBIDN static bool is_ASCII_name (const char *hostname) { const unsigned char *ch = (const unsigned char*)hostname; while (*ch) { if (*ch++ & 0x80) return FALSE; } return TRUE; } /* * Check if characters in hostname is allowed in Top Level Domain. */ static bool tld_check_name (struct SessionHandle *data, const char *ace_hostname) { size_t err_pos; char *uc_name = NULL; int rc; /* Convert (and downcase) ACE-name back into locale's character set */ rc = idna_to_unicode_lzlz(ace_hostname, &uc_name, 0); if (rc != IDNA_SUCCESS) return (FALSE); rc = tld_check_lz(uc_name, &err_pos, NULL); if (rc == TLD_INVALID) infof(data, "WARNING: %s; pos %u = `%c'/0x%02X\n", #ifdef HAVE_TLD_STRERROR tld_strerror(rc), #else "", #endif err_pos, uc_name[err_pos], uc_name[err_pos] & 255); else if (rc != TLD_SUCCESS) infof(data, "WARNING: TLD check for %s failed; %s\n", uc_name, #ifdef HAVE_TLD_STRERROR tld_strerror(rc) #else "" #endif ); if (uc_name) idn_free(uc_name); return (rc == TLD_SUCCESS); } #endif static void fix_hostname(struct connectdata *conn, struct hostname *host) { /* set the name we use to display the host name */ host->dispname = host->name; #ifdef USE_LIBIDN /************************************************************* * Check name for non-ASCII and convert hostname to ACE form. *************************************************************/ if (!is_ASCII_name(host->name) && stringprep_check_version(LIBIDN_REQUIRED_VERSION)) { char *ace_hostname = NULL; struct SessionHandle *data = conn->data; int rc = idna_to_ascii_lz(host->name, &ace_hostname, 0); infof (data, "Input domain encoded as `%s'\n", stringprep_locale_charset ()); if (rc != IDNA_SUCCESS) infof(data, "Failed to convert %s to ACE; %s\n", host->name, Curl_idn_strerror(conn,rc)); else { tld_check_name(data, ace_hostname); host->encalloc = ace_hostname; /* change the name pointer to point to the encoded hostname */ host->name = host->encalloc; } } #else (void)conn; /* never used */ #endif } /** * CreateConnection() sets up a new connectdata struct, or re-uses an already * existing one, and resolves host name. * * if this function returns CURLE_OK and *async is set to TRUE, the resolve * response will be coming asynchronously. If *async is FALSE, the name is * already resolved. * * @param data The sessionhandle pointer * @param in_connect is set to the next connection data pointer * @param addr is set to the new dns entry for this connection * @param async is set TRUE/FALSE depending on the nature of this lookup * @return CURLcode * @see SetupConnection() */ static CURLcode CreateConnection(struct SessionHandle *data, struct connectdata **in_connect, struct Curl_dns_entry **addr, bool *async) { char *tmp; char *at; CURLcode result=CURLE_OK; struct connectdata *conn; struct connectdata *conn_temp = NULL; size_t urllen; struct Curl_dns_entry *hostaddr; #if defined(HAVE_ALARM) && !defined(USE_ARES) unsigned int prev_alarm=0; #endif char endbracket; char user[MAX_CURL_USER_LENGTH]; char passwd[MAX_CURL_PASSWORD_LENGTH]; int rc; bool reuse; #ifndef USE_ARES #ifdef SIGALRM #ifdef HAVE_SIGACTION struct sigaction keep_sigact; /* store the old struct here */ bool keep_copysig=FALSE; /* did copy it? */ #else #ifdef HAVE_SIGNAL void *keep_sigact; /* store the old handler here */ #endif /* HAVE_SIGNAL */ #endif /* HAVE_SIGACTION */ #endif /* SIGALRM */ #endif /* USE_ARES */ *addr = NULL; /* nothing yet */ *async = FALSE; /************************************************************* * Check input data *************************************************************/ if(!data->change.url) return CURLE_URL_MALFORMAT; /* First, split up the current URL in parts so that we can use the parts for checking against the already present connections. In order to not have to modify everything at once, we allocate a temporary connection data struct and fill in for comparison purposes. */ conn = (struct connectdata *)calloc(sizeof(struct connectdata), 1); if(!conn) { *in_connect = NULL; /* clear the pointer */ return CURLE_OUT_OF_MEMORY; } /* We must set the return variable as soon as possible, so that our parent can cleanup any possible allocs we may have done before any failure */ *in_connect = conn; /* and we setup a few fields in case we end up actually using this struct */ conn->data = data; /* remember our daddy */ conn->sock[FIRSTSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */ conn->sock[SECONDARYSOCKET] = CURL_SOCKET_BAD; /* no file descriptor */ conn->connectindex = -1; /* no index */ conn->bits.httpproxy = (data->change.proxy && *data->change.proxy && (data->set.proxytype == CURLPROXY_HTTP))? TRUE:FALSE; /* http proxy or not */ /* Default protocol-independent behavior doesn't support persistant connections, so we set this to force-close. Protocols that support this need to set this to FALSE in their "curl_do" functions. */ conn->bits.close = TRUE; /* maxdownload must be -1 on init, as 0 is a valid value! */ conn->maxdownload = -1; /* might have been used previously! */ /* Store creation time to help future close decision making */ conn->created = Curl_tvnow(); conn->bits.use_range = data->set.set_range?TRUE:FALSE; /* range status */ conn->range = data->set.set_range; /* clone the range setting */ conn->resume_from = data->set.set_resume_from; /* inherite resume_from */ conn->bits.user_passwd = data->set.userpwd?1:0; conn->bits.proxy_user_passwd = data->set.proxyuserpwd?1:0; conn->bits.no_body = data->set.opt_no_body; conn->bits.tunnel_proxy = data->set.tunnel_thru_httpproxy; conn->bits.ftp_use_epsv = data->set.ftp_use_epsv; conn->bits.ftp_use_eprt = data->set.ftp_use_eprt; conn->bits.ftp_use_lprt = data->set.ftp_use_lprt; /* This initing continues below, see the comment "Continue connectdata * initialization here" */ /*********************************************************** * We need to allocate memory to store the path in. We get the size of the * full URL to be sure, and we need to make it at least 256 bytes since * other parts of the code will rely on this fact ***********************************************************/ #define LEAST_PATH_ALLOC 256 urllen=strlen(data->change.url); if(urllen < LEAST_PATH_ALLOC) urllen=LEAST_PATH_ALLOC; conn->pathbuffer=(char *)malloc(urllen); if(NULL == conn->pathbuffer) return CURLE_OUT_OF_MEMORY; /* really bad error */ conn->path = conn->pathbuffer; conn->host.rawalloc=(char *)malloc(urllen); if(NULL == conn->host.rawalloc) return CURLE_OUT_OF_MEMORY; conn->host.name = conn->host.rawalloc; conn->host.name[0] = 0; /************************************************************* * Parse the URL. * * We need to parse the url even when using the proxy, because we will need * the hostname and port in case we are trying to SSL connect through the * proxy -- and we don't know if we will need to use SSL until we parse the * url ... ************************************************************/ if((2 == sscanf(data->change.url, "%15[^:]:%[^\n]", conn->protostr, conn->path)) && strequal(conn->protostr, "file")) { if(conn->path[0] == '/' && conn->path[1] == '/') { /* Allow omitted hostname (e.g. file:/). This is not strictly * speaking a valid file: URL by RFC 1738, but treating file:/ as * file://localhost/ is similar to how other schemes treat missing * hostnames. See RFC 1808. */ /* This cannot be done with strcpy() in a portable manner, since the memory areas overlap! */ memmove(conn->path, conn->path + 2, strlen(conn->path + 2)+1); } /* * we deal with file:/// differently since it supports no * hostname other than "localhost" and "127.0.0.1", which is unique among * the URL protocols specified in RFC 1738 */ if(conn->path[0] != '/') { /* the URL included a host name, we ignore host names in file:// URLs as the standards don't define what to do with them */ char *ptr=strchr(conn->path, '/'); if(ptr) { /* there was a slash present RFC1738 (section 3.1, page 5) says: The rest of the locator consists of data specific to the scheme, and is known as the "url-path". It supplies the details of how the specified resource can be accessed. Note that the "/" between the host (or port) and the url-path is NOT part of the url-path. As most agents use file://localhost/foo to get '/foo' although the slash preceeding foo is a separator and not a slash for the path, a URL as file://localhost//foo must be valid as well, to refer to the same file with an absolute path. */ if(ptr[1] && ('/' == ptr[1])) /* if there was two slashes, we skip the first one as that is then used truly as a separator */ ptr++; /* This cannot be made with strcpy, as the memory chunks overlap! */ memmove(conn->path, ptr, strlen(ptr)+1); } } strcpy(conn->protostr, "file"); /* store protocol string lowercase */ } else { /* Set default path */ strcpy(conn->path, "/"); if (2 > sscanf(data->change.url, "%15[^\n:]://%[^\n/]%[^\n]", conn->protostr, conn->host.name, conn->path)) { /* * The URL was badly formatted, let's try the browser-style _without_ * protocol specified like 'http://'. */ if((1 > sscanf(data->change.url, "%[^\n/]%[^\n]", conn->host.name, conn->path)) ) { /* * We couldn't even get this format. */ failf(data, " malformed"); return CURLE_URL_MALFORMAT; } /* * Since there was no protocol part specified, we guess what protocol it * is based on the first letters of the server name. */ /* Note: if you add a new protocol, please update the list in * lib/version.c too! */ if(checkprefix("GOPHER.", conn->host.name)) strcpy(conn->protostr, "gopher"); #ifdef USE_SSL else if(checkprefix("FTPS", conn->host.name)) strcpy(conn->protostr, "ftps"); #endif /* USE_SSL */ else if(checkprefix("FTP.", conn->host.name)) strcpy(conn->protostr, "ftp"); else if(checkprefix("TELNET.", conn->host.name)) strcpy(conn->protostr, "telnet"); else if (checkprefix("DICT.", conn->host.name)) strcpy(conn->protostr, "DICT"); else if (checkprefix("LDAP.", conn->host.name)) strcpy(conn->protostr, "LDAP"); else { strcpy(conn->protostr, "http"); } conn->protocol |= PROT_MISSING; /* not given in URL */ } } /* We search for '?' in the host name (but only on the right side of a * @-letter to allow ?-letters in username and password) to handle things * like http://example.com?param= (notice the missing '/'). */ at = strchr(conn->host.name, '@'); if(at) tmp = strchr(at+1, '?'); else tmp = strchr(conn->host.name, '?'); if(tmp) { /* The right part of the ?-letter needs to be moved to prefix the current path buffer! */ size_t len = strlen(tmp); /* move the existing path plus the zero byte */ memmove(conn->path+len+1, conn->path, strlen(conn->path)+1); conn->path[0]='/'; /* prepend the missing slash */ memcpy(conn->path+1, tmp, len); /* now copy the prefix part */ *tmp=0; /* now cut off the hostname at the ? */ } /* If the URL is malformatted (missing a '/' after hostname before path) we * insert a slash here. The only letter except '/' we accept to start a path * is '?'. */ if(conn->path[0] == '?') { /* We need this function to deal with overlapping memory areas. We know that the memory area 'path' points to is 'urllen' bytes big and that is bigger than the path. Use +1 to move the zero byte too. */ memmove(&conn->path[1], conn->path, strlen(conn->path)+1); conn->path[0] = '/'; } /* * So if the URL was A://B/C, * conn->protostr is A * conn->host.name is B * conn->path is /C */ /************************************************************* * Take care of proxy authentication stuff *************************************************************/ if(conn->bits.proxy_user_passwd) { char proxyuser[MAX_CURL_USER_LENGTH]=""; char proxypasswd[MAX_CURL_PASSWORD_LENGTH]=""; sscanf(data->set.proxyuserpwd, "%" MAX_CURL_USER_LENGTH_TXT "[^:]:" "%" MAX_CURL_PASSWORD_LENGTH_TXT "[^\n]", proxyuser, proxypasswd); conn->proxyuser = strdup(proxyuser); if(!conn->proxyuser) return CURLE_OUT_OF_MEMORY; conn->proxypasswd = strdup(proxypasswd); if(!conn->proxypasswd) return CURLE_OUT_OF_MEMORY; } #ifndef CURL_DISABLE_HTTP /************************************************************* * Detect what (if any) proxy to use *************************************************************/ if(!data->change.proxy) { /* If proxy was not specified, we check for default proxy environment * variables, to enable i.e Lynx compliance: * * http_proxy=http://some.server.dom:port/ * https_proxy=http://some.server.dom:port/ * ftp_proxy=http://some.server.dom:port/ * gopher_proxy=http://some.server.dom:port/ * no_proxy=domain1.dom,host.domain2.dom * (a comma-separated list of hosts which should * not be proxied, or an asterisk to override * all proxy variables) * all_proxy=http://some.server.dom:port/ * (seems to exist for the CERN www lib. Probably * the first to check for.) * * For compatibility, the all-uppercase versions of these variables are * checked if the lowercase versions don't exist. */ char *no_proxy=NULL; char *no_proxy_tok_buf; char *proxy=NULL; char proxy_env[128]; no_proxy=curl_getenv("no_proxy"); if(!no_proxy) no_proxy=curl_getenv("NO_PROXY"); if(!no_proxy || !strequal("*", no_proxy)) { /* NO_PROXY wasn't specified or it wasn't just an asterisk */ char *nope; nope=no_proxy?strtok_r(no_proxy, ", ", &no_proxy_tok_buf):NULL; while(nope) { size_t namelen; char *endptr = strchr(conn->host.name, ':'); if(endptr) namelen=endptr-conn->host.name; else namelen=strlen(conn->host.name); if(strlen(nope) <= namelen) { char *checkn= conn->host.name + namelen - strlen(nope); if(checkprefix(nope, checkn)) { /* no proxy for this host! */ break; } } nope=strtok_r(NULL, ", ", &no_proxy_tok_buf); } if(!nope) { /* It was not listed as without proxy */ char *protop = conn->protostr; char *envp = proxy_env; char *prox; /* Now, build _proxy and check for such a one to use */ while(*protop) *envp++ = tolower((int)*protop++); /* append _proxy */ strcpy(envp, "_proxy"); /* read the protocol proxy: */ prox=curl_getenv(proxy_env); /* * We don't try the uppercase version of HTTP_PROXY because of * security reasons: * * When curl is used in a webserver application * environment (cgi or php), this environment variable can * be controlled by the web server user by setting the * http header 'Proxy:' to some value. * * This can cause 'internal' http/ftp requests to be * arbitrarily redirected by any external attacker. */ if(!prox && !strequal("http_proxy", proxy_env)) { /* There was no lowercase variable, try the uppercase version: */ for(envp = proxy_env; *envp; envp++) *envp = toupper((int)*envp); prox=curl_getenv(proxy_env); } if(prox && *prox) { /* don't count "" strings */ proxy = prox; /* use this */ } else { proxy = curl_getenv("all_proxy"); /* default proxy to use */ if(!proxy) proxy=curl_getenv("ALL_PROXY"); } if(proxy && *proxy) { /* we have a proxy here to set */ char *ptr; char proxyuser[MAX_CURL_USER_LENGTH]; char proxypasswd[MAX_CURL_PASSWORD_LENGTH]; char *fineptr; /* skip the possible protocol piece */ ptr=strstr(proxy, "://"); if(ptr) ptr += 3; else ptr = proxy; fineptr = ptr; /* check for an @-letter */ ptr = strchr(ptr, '@'); if(ptr && (2 == sscanf(fineptr, "%" MAX_CURL_USER_LENGTH_TXT"[^:]:" "%" MAX_CURL_PASSWORD_LENGTH_TXT "[^@]", proxyuser, proxypasswd))) { CURLcode res = CURLE_OK; /* found user and password, rip them out */ Curl_safefree(conn->proxyuser); conn->proxyuser = strdup(proxyuser); if(!conn->proxyuser) res = CURLE_OUT_OF_MEMORY; else { Curl_safefree(conn->proxypasswd); conn->proxypasswd = strdup(proxypasswd); if(!conn->proxypasswd) res = CURLE_OUT_OF_MEMORY; } if(CURLE_OK == res) { conn->bits.proxy_user_passwd = TRUE; /* enable it */ ptr = strdup(ptr+1); /* the right side of the @-letter */ if(ptr) { free(proxy); /* free the former proxy string */ proxy = ptr; /* now use this instead */ } else res = CURLE_OUT_OF_MEMORY; } if(res) { free(proxy); /* free the allocated proxy string */ return res; } } data->change.proxy = proxy; data->change.proxy_alloc=TRUE; /* this needs to be freed later */ conn->bits.httpproxy = TRUE; } } /* if (!nope) - it wasn't specified non-proxy */ } /* NO_PROXY wasn't specified or '*' */ if(no_proxy) free(no_proxy); } /* if not using proxy */ #endif /* CURL_DISABLE_HTTP */ /************************************************************* * No protocol part in URL was used, add it! *************************************************************/ if(conn->protocol&PROT_MISSING) { /* We're guessing prefixes here and if we're told to use a proxy or if we're gonna follow a Location: later or... then we need the protocol part added so that we have a valid URL. */ char *reurl; reurl = aprintf("%s://%s", conn->protostr, data->change.url); if(!reurl) return CURLE_OUT_OF_MEMORY; data->change.url = reurl; data->change.url_alloc = TRUE; /* free this later */ conn->protocol &= ~PROT_MISSING; /* switch that one off again */ } #ifndef CURL_DISABLE_HTTP /************************************************************ * RESUME on a HTTP page is a tricky business. First, let's just check that * 'range' isn't used, then set the range parameter and leave the resume as * it is to inform about this situation for later use. We will then * "attempt" to resume, and if we're talking to a HTTP/1.1 (or later) * server, we will get the document resumed. If we talk to a HTTP/1.0 * server, we just fail since we can't rewind the file writing from within * this function. ***********************************************************/ if(conn->resume_from) { if(!conn->bits.use_range) { /* if it already was in use, we just skip this */ conn->range = aprintf("%" FORMAT_OFF_T "-", conn->resume_from); if(!conn->range) return CURLE_OUT_OF_MEMORY; conn->bits.rangestringalloc = TRUE; /* mark as allocated */ conn->bits.use_range = 1; /* switch on range usage */ } } #endif /************************************************************* * Setup internals depending on protocol *************************************************************/ if (strequal(conn->protostr, "HTTP")) { #ifndef CURL_DISABLE_HTTP conn->port = PORT_HTTP; conn->remote_port = PORT_HTTP; conn->protocol |= PROT_HTTP; conn->curl_do = Curl_http; conn->curl_do_more = NULL; conn->curl_done = Curl_http_done; conn->curl_connect = Curl_http_connect; #else failf(data, LIBCURL_NAME " was built with HTTP disabled, http: not supported!"); return CURLE_UNSUPPORTED_PROTOCOL; #endif } else if (strequal(conn->protostr, "HTTPS")) { #if defined(USE_SSL) && !defined(CURL_DISABLE_HTTP) conn->port = PORT_HTTPS; conn->remote_port = PORT_HTTPS; conn->protocol |= PROT_HTTP|PROT_HTTPS|PROT_SSL; conn->curl_do = Curl_http; conn->curl_do_more = NULL; conn->curl_done = Curl_http_done; conn->curl_connect = Curl_http_connect; #else /* USE_SS */ failf(data, LIBCURL_NAME " was built with SSL disabled, https: not supported!"); return CURLE_UNSUPPORTED_PROTOCOL; #endif /* !USE_SSL */ } else if (strequal(conn->protostr, "GOPHER")) { #ifndef CURL_DISABLE_GOPHER conn->port = PORT_GOPHER; conn->remote_port = PORT_GOPHER; /* Skip // in path if present */ if (isdigit((int)conn->path[1])) { conn->path = strchr(&conn->path[1], '/'); if (conn->path == NULL) conn->path = conn->pathbuffer; } conn->protocol |= PROT_GOPHER; conn->curl_do = Curl_http; conn->curl_do_more = NULL; conn->curl_done = Curl_http_done; #else failf(data, LIBCURL_NAME " was built with GOPHER disabled, gopher: not supported!"); #endif } else if(strequal(conn->protostr, "FTP") || strequal(conn->protostr, "FTPS")) { #ifndef CURL_DISABLE_FTP char *type; int port = PORT_FTP; if(strequal(conn->protostr, "FTPS")) { #ifdef USE_SSL conn->protocol |= PROT_FTPS|PROT_SSL; conn->ssl[SECONDARYSOCKET].use = TRUE; /* send data securely */ port = PORT_FTPS; #else failf(data, LIBCURL_NAME " was built with SSL disabled, ftps: not supported!"); return CURLE_UNSUPPORTED_PROTOCOL; #endif /* !USE_SSL */ } conn->port = port; conn->remote_port = port; conn->protocol |= PROT_FTP; if(data->change.proxy && *data->change.proxy && !data->set.tunnel_thru_httpproxy) { /* Unless we have asked to tunnel ftp operations through the proxy, we switch and use HTTP operations only */ if(conn->protocol & PROT_FTPS) { /* FTPS is a hacked protocol and does not work through your ordinary http proxy! */ failf(data, "ftps does not work through http proxy!"); return CURLE_UNSUPPORTED_PROTOCOL; } #ifndef CURL_DISABLE_HTTP conn->curl_do = Curl_http; conn->curl_done = Curl_http_done; #else failf(data, "FTP over http proxy requires HTTP support built-in!"); return CURLE_UNSUPPORTED_PROTOCOL; #endif } else { conn->curl_do = Curl_ftp; conn->curl_do_more = Curl_ftp_nextconnect; conn->curl_done = Curl_ftp_done; conn->curl_connect = Curl_ftp_connect; conn->curl_connecting = Curl_ftp_multi_statemach; conn->curl_doing = Curl_ftp_doing; conn->curl_proto_fdset = Curl_ftp_fdset; conn->curl_doing_fdset = Curl_ftp_fdset; conn->curl_disconnect = Curl_ftp_disconnect; } conn->path++; /* don't include the initial slash */ /* FTP URLs support an extension like ";type=" that * we'll try to get now! */ type=strstr(conn->path, ";type="); if(!type) { type=strstr(conn->host.rawalloc, ";type="); } if(type) { char command; *type=0; /* it was in the middle of the hostname */ command = toupper((int)type[6]); switch(command) { case 'A': /* ASCII mode */ data->set.ftp_ascii = 1; break; case 'D': /* directory mode */ data->set.ftp_list_only = 1; break; case 'I': /* binary mode */ default: /* switch off ASCII */ data->set.ftp_ascii = 0; break; } } #else /* CURL_DISABLE_FTP */ failf(data, LIBCURL_NAME " was built with FTP disabled, ftp/ftps: not supported!"); return CURLE_UNSUPPORTED_PROTOCOL; #endif } else if(strequal(conn->protostr, "TELNET")) { #ifndef CURL_DISABLE_TELNET /* telnet testing factory */ conn->protocol |= PROT_TELNET; conn->port = PORT_TELNET; conn->remote_port = PORT_TELNET; conn->curl_do = Curl_telnet; conn->curl_done = Curl_telnet_done; #else failf(data, LIBCURL_NAME " was built with TELNET disabled!"); #endif } else if (strequal(conn->protostr, "DICT")) { #ifndef CURL_DISABLE_DICT conn->protocol |= PROT_DICT; conn->port = PORT_DICT; conn->remote_port = PORT_DICT; conn->curl_do = Curl_dict; conn->curl_done = NULL; /* no DICT-specific done */ #else failf(data, LIBCURL_NAME " was built with DICT disabled!"); #endif } else if (strequal(conn->protostr, "LDAP")) { #ifndef CURL_DISABLE_LDAP conn->protocol |= PROT_LDAP; conn->port = PORT_LDAP; conn->remote_port = PORT_LDAP; conn->curl_do = Curl_ldap; conn->curl_done = NULL; /* no LDAP-specific done */ #else failf(data, LIBCURL_NAME " was built with LDAP disabled!"); #endif } else if (strequal(conn->protostr, "FILE")) { #ifndef CURL_DISABLE_FILE conn->protocol |= PROT_FILE; conn->curl_do = Curl_file; conn->curl_done = Curl_file_done; /* anyway, this is supposed to be the connect function so we better at least check that the file is present here! */ result = Curl_file_connect(conn); /* Setup a "faked" transfer that'll do nothing */ if(CURLE_OK == result) { conn->bits.tcpconnect = TRUE; /* we are "connected */ result = Curl_Transfer(conn, -1, -1, FALSE, NULL, /* no download */ -1, NULL); /* no upload */ } return result; #else failf(data, LIBCURL_NAME " was built with FILE disabled!"); #endif } else { /* We fell through all checks and thus we don't support the specified protocol */ failf(data, "Unsupported protocol: %s", conn->protostr); return CURLE_UNSUPPORTED_PROTOCOL; } if(data->change.proxy && *data->change.proxy) { /* If this is supposed to use a proxy, we need to figure out the proxy host name name, so that we can re-use an existing connection that may exist registered to the same proxy host. */ char *prox_portno; char *endofprot; /* We need to make a duplicate of the proxy so that we can modify the string safely. */ char *proxydup=strdup(data->change.proxy); /* We use 'proxyptr' to point to the proxy name from now on... */ char *proxyptr=proxydup; if(NULL == proxydup) { failf(data, "memory shortage"); return CURLE_OUT_OF_MEMORY; } /* Daniel Dec 10, 1998: We do the proxy host string parsing here. We want the host name and the port name. Accept a protocol:// prefix, even though it should just be ignored. */ /* 1. skip the protocol part if present */ endofprot=strstr(proxyptr, "://"); if(endofprot) { proxyptr = endofprot+3; } /* allow user to specify proxy.server.com:1080 if desired */ prox_portno = strchr (proxyptr, ':'); if (prox_portno) { *prox_portno = 0x0; /* cut off number from host name */ prox_portno ++; /* now set the local port number */ conn->port = atoi(prox_portno); } else if(data->set.proxyport) { /* None given in the proxy string, then get the default one if it is given */ conn->port = data->set.proxyport; } /* now, clone the cleaned proxy host name */ conn->proxy.rawalloc = strdup(proxyptr); conn->proxy.name = conn->proxy.rawalloc; free(proxydup); /* free the duplicate pointer and not the modified */ if(!conn->proxy.rawalloc) return CURLE_OUT_OF_MEMORY; } /************************************************************* * If the protcol is using SSL and HTTP proxy is used, we set * the tunnel_proxy bit. *************************************************************/ if((conn->protocol&PROT_SSL) && conn->bits.httpproxy) conn->bits.tunnel_proxy = TRUE; /************************************************************* * Take care of user and password authentication stuff *************************************************************/ /* * Inputs: data->set.userpwd (CURLOPT_USERPWD) * data->set.fpasswd (CURLOPT_PASSWDFUNCTION) * data->set.use_netrc (CURLOPT_NETRC) * conn->host.name * netrc file * hard-coded defaults * * Outputs: (almost :- all currently undefined) * conn->bits.user_passwd - non-zero if non-default passwords exist * conn->user - non-zero length if defined * conn->passwd - ditto * conn->host.name - remove user name and password */ /* At this point, we're hoping all the other special cases have * been taken care of, so conn->host.name is at most * [user[:password]]@]hostname * * We need somewhere to put the embedded details, so do that first. */ user[0] =0; /* to make everything well-defined */ passwd[0]=0; if (conn->protocol & (PROT_FTP|PROT_HTTP)) { /* This is a FTP or HTTP URL, we will now try to extract the possible * user+password pair in a string like: * ftp://user:password@ftp.my.site:8021/README */ char *ptr=strchr(conn->host.name, '@'); char *userpass = conn->host.name; if(ptr != NULL) { /* there's a user+password given here, to the left of the @ */ conn->host.name = ++ptr; /* So the hostname is sane. Only bother interpreting the * results if we could care. It could still be wasted * work because it might be overtaken by the programmatically * set user/passwd, but doing that first adds more cases here :-( */ if (data->set.use_netrc != CURL_NETRC_REQUIRED) { /* We could use the one in the URL */ conn->bits.user_passwd = 1; /* enable user+password */ if(*userpass != ':') { /* the name is given, get user+password */ sscanf(userpass, "%127[^:@]:%127[^@]", user, passwd); } else /* no name given, get the password only */ sscanf(userpass, ":%127[^@]", passwd); if(user[0]) { char *newname=curl_unescape(user, 0); if(!newname) return CURLE_OUT_OF_MEMORY; if(strlen(newname) < sizeof(user)) strcpy(user, newname); /* if the new name is longer than accepted, then just use the unconverted name, it'll be wrong but what the heck */ free(newname); } if (passwd[0]) { /* we have a password found in the URL, decode it! */ char *newpasswd=curl_unescape(passwd, 0); if(!newpasswd) return CURLE_OUT_OF_MEMORY; if(strlen(newpasswd) < sizeof(passwd)) strcpy(passwd, newpasswd); free(newpasswd); } } } } /************************************************************* * Figure out the remote port number * * No matter if we use a proxy or not, we have to figure out the remote * port number of various reasons. * * To be able to detect port number flawlessly, we must not confuse them * IPv6-specified addresses in the [0::1] style. (RFC2732) * * The conn->host.name is currently [user:passwd@]host[:port] where host * could be a hostname, IPv4 address or IPv6 address. *************************************************************/ if((1 == sscanf(conn->host.name, "[%*39[0-9a-fA-F:.]%c", &endbracket)) && (']' == endbracket)) { /* this is a RFC2732-style specified IP-address */ conn->bits.ipv6_ip = TRUE; conn->host.name++; /* pass the starting bracket */ tmp = strchr(conn->host.name, ']'); *tmp = 0; /* zero terminate */ tmp++; /* pass the ending bracket */ if(':' != *tmp) tmp = NULL; /* no port number available */ } else tmp = strrchr(conn->host.name, ':'); if(data->set.use_port && data->state.allow_port) { /* if set, we use this and ignore the port possibly given in the URL */ conn->remote_port = (unsigned short)data->set.use_port; if(tmp) *tmp = '\0'; /* cut off the name there anyway - if there was a port number - since the port number is to be ignored! */ if(conn->bits.httpproxy) { /* we need to create new URL with the new port number */ char *url; url = aprintf("http://%s:%d%s", conn->host.name, conn->remote_port, conn->path); if(!url) return CURLE_OUT_OF_MEMORY; if(data->change.url_alloc) free(data->change.url); data->change.url = url; data->change.url_alloc = TRUE; } } else if (tmp) { /* no CURLOPT_PORT given, extract the one from the URL */ char *rest; unsigned long port; port=strtoul(tmp+1, &rest, 10); /* Port number must be decimal */ if (rest != (tmp+1) && *rest == '\0') { /* The colon really did have only digits after it, * so it is either a port number or a mistake */ if (port > 0xffff) { /* Single unix standard says port numbers are * 16 bits long */ failf(data, "Port number too large: %lu", port); return CURLE_URL_MALFORMAT; } *tmp = '\0'; /* cut off the name there */ conn->remote_port = (unsigned short)port; } } /* Programmatically set password: * - always applies, if available * - takes precedence over the values we just set above * so scribble it over the top. * User-supplied passwords are assumed not to need unescaping. * * user_password is set in "inherite initial knowledge' above, * so it doesn't have to be set in this block */ if (data->set.userpwd != NULL) { /* the name is given, get user+password */ sscanf(data->set.userpwd, "%" MAX_CURL_USER_LENGTH_TXT "[^:]:" "%" MAX_CURL_PASSWORD_LENGTH_TXT "[^\n]", user, passwd); } conn->bits.netrc = FALSE; if (data->set.use_netrc != CURL_NETRC_IGNORED) { if(Curl_parsenetrc(conn->host.name, user, passwd, data->set.netrc_file)) { infof(data, "Couldn't find host %s in the " DOT_CHAR "netrc file, using defaults\n", conn->host.name); } else { /* set bits.netrc TRUE to remember that we got the name from a .netrc file, so that it is safe to use even if we followed a Location: to a different host or similar. */ conn->bits.netrc = TRUE; conn->bits.user_passwd = 1; /* enable user+password */ } } /* If our protocol needs a password and we have none, use the defaults */ if ( (conn->protocol & PROT_FTP) && !conn->bits.user_passwd) { conn->user = strdup(CURL_DEFAULT_USER); conn->passwd = strdup(CURL_DEFAULT_PASSWORD); /* This is the default password, so DON'T set conn->bits.user_passwd */ } else { /* store user + password, zero-length if not set */ conn->user = strdup(user); conn->passwd = strdup(passwd); } if(!conn->user || !conn->passwd) return CURLE_OUT_OF_MEMORY; /************************************************************* * Check the current list of connections to see if we can * re-use an already existing one or if we have to create a * new one. *************************************************************/ /* get a cloned copy of the SSL config situation stored in the connection struct */ if(!Curl_clone_ssl_config(&data->set.ssl, &conn->ssl_config)) return CURLE_OUT_OF_MEMORY; /* reuse_fresh is TRUE if we are told to use a new connection by force, but we only acknowledge this option if this is not a re-used connection already (which happens due to follow-location or during a HTTP authentication phase). */ if(data->set.reuse_fresh && !data->state.this_is_a_follow) reuse = FALSE; else reuse = ConnectionExists(data, conn, &conn_temp); if(reuse) { /* * We already have a connection for this, we got the former connection * in the conn_temp variable and thus we need to cleanup the one we * just allocated before we can move along and use the previously * existing one. */ struct connectdata *old_conn = conn; if(old_conn->proxy.rawalloc) free(old_conn->proxy.rawalloc); /* free the SSL config struct from this connection struct as this was allocated in vain and is targeted for destruction */ Curl_free_ssl_config(&conn->ssl_config); conn = conn_temp; /* use this connection from now on */ /* get the user+password information from the old_conn struct since it may * be new for this request even when we re-use an existing connection */ conn->bits.user_passwd = old_conn->bits.user_passwd; if (conn->bits.user_passwd) { /* use the new user namd and password though */ Curl_safefree(conn->user); Curl_safefree(conn->passwd); conn->user = old_conn->user; conn->passwd = old_conn->passwd; old_conn->user = NULL; old_conn->passwd = NULL; } conn->bits.proxy_user_passwd = old_conn->bits.proxy_user_passwd; if (conn->bits.proxy_user_passwd) { /* use the new proxy user name and proxy password though */ Curl_safefree(conn->proxyuser); Curl_safefree(conn->proxypasswd); conn->proxyuser = old_conn->proxyuser; conn->proxypasswd = old_conn->proxypasswd; old_conn->proxyuser = NULL; old_conn->proxypasswd = NULL; } /* host can change, when doing keepalive with a proxy ! */ if (conn->bits.httpproxy) { free(conn->host.rawalloc); conn->host=old_conn->host; } /* get the newly set value, not the old one */ conn->bits.no_body = old_conn->bits.no_body; if (!conn->bits.httpproxy) free(old_conn->host.rawalloc); /* free the newly allocated name buffer */ free(conn->pathbuffer); /* free the newly allocated path pointer */ conn->pathbuffer = old_conn->pathbuffer; /* use the old one */ conn->path = old_conn->path; /* re-use init */ conn->bits.reuse = TRUE; /* yes, we're re-using here */ conn->bits.chunk = FALSE; /* always assume not chunked unless told otherwise */ conn->maxdownload = -1; /* might have been used previously! */ Curl_safefree(old_conn->user); Curl_safefree(old_conn->passwd); Curl_safefree(old_conn->proxyuser); Curl_safefree(old_conn->proxypasswd); if(old_conn->bits.rangestringalloc) free(old_conn->range); free(old_conn); /* we don't need this anymore */ /* * If we're doing a resumed transfer, we need to setup our stuff * properly. */ conn->resume_from = data->set.set_resume_from; if (conn->resume_from) { if (conn->bits.rangestringalloc == TRUE) free(conn->range); conn->range = aprintf("%" FORMAT_OFF_T "-", conn->resume_from); if(!conn->range) return CURLE_OUT_OF_MEMORY; /* tell ourselves to fetch this range */ conn->bits.use_range = TRUE; /* enable range download */ conn->bits.rangestringalloc = TRUE; /* mark range string allocated */ } else if (data->set.set_range) { /* There is a range, but is not a resume, useful for random ftp access */ conn->range = strdup(data->set.set_range); if(!conn->range) return CURLE_OUT_OF_MEMORY; conn->bits.rangestringalloc = TRUE; /* mark range string allocated */ conn->bits.use_range = TRUE; /* enable range download */ } else conn->bits.use_range = FALSE; /* disable range download */ *in_connect = conn; /* return this instead! */ infof(data, "Re-using existing connection! (#%ld) with host %s\n", conn->connectindex, conn->bits.httpproxy?conn->proxy.dispname:conn->host.dispname); } else { /* * This is a brand new connection, so let's store it in the connection * cache of ours! */ ConnectionStore(data, conn); } /* Continue connectdata initialization here. * * Inherit the proper values from the urldata struct AFTER we have arranged * the persistant conncetion stuff */ conn->fread = data->set.fread; conn->fread_in = data->set.in; conn->bits.upload_chunky = ((conn->protocol&PROT_HTTP) && data->set.upload && (data->set.infilesize == -1) && (data->set.httpversion != CURL_HTTP_VERSION_1_0))? /* HTTP, upload, unknown file size and not HTTP 1.0 */ TRUE: /* else, no chunky upload */ FALSE; #ifndef USE_ARES /************************************************************* * Set timeout if that is being used, and we're not using an asynchronous * name resolve. *************************************************************/ if((data->set.timeout || data->set.connecttimeout) && !data->set.no_signal) { /************************************************************* * Set signal handler to catch SIGALRM * Store the old value to be able to set it back later! *************************************************************/ #ifdef SIGALRM #ifdef HAVE_SIGACTION struct sigaction sigact; sigaction(SIGALRM, NULL, &sigact); keep_sigact = sigact; keep_copysig = TRUE; /* yes, we have a copy */ sigact.sa_handler = alarmfunc; #ifdef SA_RESTART /* HPUX doesn't have SA_RESTART but defaults to that behaviour! */ sigact.sa_flags &= ~SA_RESTART; #endif /* now set the new struct */ sigaction(SIGALRM, &sigact, NULL); #else /* HAVE_SIGACTION */ /* no sigaction(), revert to the much lamer signal() */ #ifdef HAVE_SIGNAL keep_sigact = signal(SIGALRM, alarmfunc); #endif #endif /* HAVE_SIGACTION */ /* We set the timeout on the name resolving phase first, separately from * the download/upload part to allow a maximum time on everything. This is * a signal-based timeout, why it won't work and shouldn't be used in * multi-threaded environments. */ #ifdef HAVE_ALARM /* alarm() makes a signal get sent when the timeout fires off, and that will abort system calls */ prev_alarm = alarm((unsigned int) (data->set.connecttimeout? data->set.connecttimeout: data->set.timeout)); /* We can expect the conn->created time to be "now", as that was just recently set in the beginning of this function and nothing slow has been done since then until now. */ #endif #endif /* SIGALRM */ } #endif /* USE_ARES */ /************************************************************* * Resolve the name of the server or proxy *************************************************************/ if(conn->bits.reuse) { /* re-used connection, no resolving is necessary */ hostaddr = NULL; /* we'll need to clear conn->dns_entry later in Curl_disconnect() */ if (conn->bits.httpproxy) fix_hostname(conn, &conn->host); } else { /* this is a fresh connect */ /* set a pointer to the hostname we display */ fix_hostname(conn, &conn->host); if(!data->change.proxy || !*data->change.proxy) { /* If not connecting via a proxy, extract the port from the URL, if it is * there, thus overriding any defaults that might have been set above. */ conn->port = conn->remote_port; /* it is the same port */ /* Resolve target host right on */ rc = Curl_resolv(conn, conn->host.name, (int)conn->port, &hostaddr); if(rc == CURLRESOLV_PENDING) *async = TRUE; else if(!hostaddr) { failf(data, "Couldn't resolve host '%s'", conn->host.dispname); result = CURLE_COULDNT_RESOLVE_HOST; /* don't return yet, we need to clean up the timeout first */ } } else { /* This is a proxy that hasn't been resolved yet. */ /* IDN-fix the proxy name */ fix_hostname(conn, &conn->proxy); /* resolve proxy */ rc = Curl_resolv(conn, conn->proxy.name, (int)conn->port, &hostaddr); if(rc == CURLRESOLV_PENDING) *async = TRUE; else if(!hostaddr) { failf(data, "Couldn't resolve proxy '%s'", conn->proxy.dispname); result = CURLE_COULDNT_RESOLVE_PROXY; /* don't return yet, we need to clean up the timeout first */ } } } *addr = hostaddr; #if defined(HAVE_ALARM) && defined(SIGALRM) && !defined(USE_ARES) if((data->set.timeout || data->set.connecttimeout) && !data->set.no_signal) { #ifdef HAVE_SIGACTION if(keep_copysig) { /* we got a struct as it looked before, now put that one back nice and clean */ sigaction(SIGALRM, &keep_sigact, NULL); /* put it back */ } #else #ifdef HAVE_SIGNAL /* restore the previous SIGALRM handler */ signal(SIGALRM, keep_sigact); #endif #endif /* HAVE_SIGACTION */ /* switch back the alarm() to either zero or to what it was before minus the time we spent until now! */ if(prev_alarm) { /* there was an alarm() set before us, now put it back */ unsigned long elapsed_ms = Curl_tvdiff(Curl_tvnow(), conn->created); unsigned long alarm_set; /* the alarm period is counted in even number of seconds */ alarm_set = prev_alarm - elapsed_ms/1000; if(!alarm_set || ((alarm_set >= 0x80000000) && (prev_alarm < 0x80000000)) ) { /* if the alarm time-left reached zero or turned "negative" (counted with unsigned values), we should fire off a SIGALRM here, but we won't, and zero would be to switch it off so we never set it to less than 1! */ alarm(1); result = CURLE_OPERATION_TIMEOUTED; failf(data, "Previous alarm fired off!"); } else alarm((unsigned int)alarm_set); } else alarm(0); /* just shut it off */ } #endif return result; } /* SetupConnection() should be called after the name resolve initiated in * CreateConnection() is all done. */ static CURLcode SetupConnection(struct connectdata *conn, struct Curl_dns_entry *hostaddr, bool *protocol_done) { struct SessionHandle *data = conn->data; CURLcode result=CURLE_OK; Curl_pgrsTime(data, TIMER_NAMELOOKUP); if(conn->protocol & PROT_FILE) { /* There's nothing in this function to setup if we're only doing a file:// transfer */ *protocol_done = TRUE; return result; } *protocol_done = FALSE; /* default to not done */ /************************************************************* * Send user-agent to HTTP proxies even if the target protocol * isn't HTTP. *************************************************************/ if((conn->protocol&PROT_HTTP) || (data->change.proxy && *data->change.proxy)) { if(data->set.useragent) { Curl_safefree(conn->allocptr.uagent); conn->allocptr.uagent = aprintf("User-Agent: %s\015\012", data->set.useragent); if(!conn->allocptr.uagent) return CURLE_OUT_OF_MEMORY; } } conn->bytecount = 0; conn->headerbytecount = 0; if(CURL_SOCKET_BAD == conn->sock[FIRSTSOCKET]) { bool connected = FALSE; /* Connect only if not already connected! */ result = ConnectPlease(conn, hostaddr, &connected); if(connected) { result = Curl_protocol_connect(conn, protocol_done); if(CURLE_OK == result) conn->bits.tcpconnect = TRUE; } else conn->bits.tcpconnect = FALSE; if(CURLE_OK != result) return result; } else { Curl_pgrsTime(data, TIMER_CONNECT); /* we're connected already */ conn->bits.tcpconnect = TRUE; *protocol_done = TRUE; if(data->set.verbose) verboseconnect(conn); } conn->now = Curl_tvnow(); /* time this *after* the connect is done, we set this here perhaps a second time */ #ifdef __EMX__ /* 20000330 mgs * the check is quite a hack... * we're calling _fsetmode to fix the problem with fwrite converting newline * characters (you get mangled text files, and corrupted binary files when * you download to stdout and redirect it to a file). */ if ((data->set.out)->_handle == NULL) { _fsetmode(stdout, "b"); } #endif return CURLE_OK; } CURLcode Curl_connect(struct SessionHandle *data, struct connectdata **in_connect, bool *asyncp, bool *protocol_done) { CURLcode code; struct Curl_dns_entry *dns; *asyncp = FALSE; /* assume synchronous resolves by default */ /* call the stuff that needs to be called */ code = CreateConnection(data, in_connect, &dns, asyncp); if(CURLE_OK == code) { /* no error */ if(dns || !*asyncp) /* If an address is available it means that we already have the name resolved, OR it isn't async. If so => continue connecting from here */ code = SetupConnection(*in_connect, dns, protocol_done); /* else response will be received and treated async wise */ } if(CURLE_OK != code) { /* We're not allowed to return failure with memory left allocated in the connectdata struct, free those here */ if(*in_connect) { Curl_disconnect(*in_connect); /* close the connection */ *in_connect = NULL; /* return a NULL */ } } return code; } /* Call this function after Curl_connect() has returned async=TRUE and then a successful name resolve has been received. Note: this function disconnects and frees the conn data in case of resolve failure */ CURLcode Curl_async_resolved(struct connectdata *conn, bool *protocol_done) { #if defined(USE_ARES) || defined(USE_THREADING_GETHOSTBYNAME) || \ defined(USE_THREADING_GETADDRINFO) CURLcode code = SetupConnection(conn, conn->async.dns, protocol_done); if(code) /* We're not allowed to return failure with memory left allocated in the connectdata struct, free those here */ Curl_disconnect(conn); /* close the connection */ return code; #else (void)conn; (void)protocol_done; return CURLE_OK; #endif } CURLcode Curl_done(struct connectdata **connp, CURLcode status) /* an error if this is called after an error was detected */ { CURLcode result; struct connectdata *conn = *connp; struct SessionHandle *data=conn->data; /* cleanups done even if the connection is re-used */ if(conn->bits.rangestringalloc) { free(conn->range); conn->bits.rangestringalloc = FALSE; } if(conn->dns_entry) { Curl_resolv_unlock(data, conn->dns_entry); /* done with this */ conn->dns_entry = NULL; } /* Cleanup possible redirect junk */ if(conn->newurl) { free(conn->newurl); conn->newurl = NULL; } /* this calls the protocol-specific function pointer previously set */ if(conn->curl_done) result = conn->curl_done(conn, status); else result = CURLE_OK; Curl_pgrsDone(conn); /* done with the operation */ /* if data->set.reuse_forbid is TRUE, it means the libcurl client has forced us to close this no matter what we think. if conn->bits.close is TRUE, it means that the connection should be closed in spite of all our efforts to be nice, due to protocol restrictions in our or the server's end */ if(data->set.reuse_forbid || conn->bits.close) { CURLcode res2; res2 = Curl_disconnect(conn); /* close the connection */ *connp = NULL; /* to make the caller of this function better detect that this was actually killed here */ /* If we had an error already, make sure we return that one. But if we got a new error, return that. */ if(!result && res2) result = res2; } else infof(data, "Connection #%ld to host %s left intact\n", conn->connectindex, conn->bits.httpproxy?conn->proxy.dispname:conn->host.dispname); return result; } CURLcode Curl_do(struct connectdata **connp, bool *done) { CURLcode result=CURLE_OK; struct connectdata *conn = *connp; struct SessionHandle *data=conn->data; conn->bits.do_more = FALSE; /* by default there's no curl_do_more() to use */ if(conn->curl_do) { /* generic protocol-specific function pointer set in curl_connect() */ result = conn->curl_do(conn, done); /* This was formerly done in transfer.c, but we better do it here */ if((CURLE_SEND_ERROR == result) && conn->bits.reuse) { /* This was a re-use of a connection and we got a write error in the * DO-phase. Then we DISCONNECT this connection and have another attempt * to CONNECT and then DO again! The retry cannot possibly find another * connection to re-use, since we only keep one possible connection for * each. */ infof(data, "Re-used connection seems dead, get a new one\n"); conn->bits.close = TRUE; /* enforce close of this connection */ result = Curl_done(&conn, result); /* we are so done with this */ /* conn may no longer be a good pointer */ if(CURLE_OK == result) { bool async; bool protocol_done = TRUE; /* Now, redo the connect and get a new connection */ result = Curl_connect(data, connp, &async, &protocol_done); if(CURLE_OK == result) { /* We have connected or sent away a name resolve query fine */ conn = *connp; /* setup conn to again point to something nice */ if(async) { /* Now, if async is TRUE here, we need to wait for the name to resolve */ result = Curl_wait_for_resolv(conn, NULL); if(result) return result; /* Resolved, continue with the connection */ result = Curl_async_resolved(conn, &protocol_done); if(result) return result; } /* ... finally back to actually retry the DO phase */ result = conn->curl_do(conn, done); } } } } return result; } CURLcode Curl_do_more(struct connectdata *conn) { CURLcode result=CURLE_OK; if(conn->curl_do_more) result = conn->curl_do_more(conn); return result; } criticalmass-1.0.0.orig/curl/lib/url.h0000644000175000017500000000462710265631023017074 0ustar danieldaniel#ifndef __URL_H #define __URL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: url.h,v 1.22 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ /* * Prototypes for library-wide functions provided by url.c */ CURLcode Curl_open(struct SessionHandle **curl); CURLcode Curl_setopt(struct SessionHandle *data, CURLoption option, ...); CURLcode Curl_close(struct SessionHandle *data); /* opposite of curl_open() */ CURLcode Curl_connect(struct SessionHandle *, struct connectdata **, bool *async, bool *protocol_connect); CURLcode Curl_async_resolved(struct connectdata *conn, bool *protocol_connect); CURLcode Curl_do(struct connectdata **, bool *done); CURLcode Curl_do_more(struct connectdata *); CURLcode Curl_done(struct connectdata **, CURLcode); CURLcode Curl_disconnect(struct connectdata *); CURLcode Curl_protocol_connect(struct connectdata *conn, bool *done); CURLcode Curl_protocol_connecting(struct connectdata *conn, bool *done); CURLcode Curl_protocol_doing(struct connectdata *conn, bool *done); void Curl_safefree(void *ptr); CURLcode Curl_protocol_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp); CURLcode Curl_doing_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp); #endif criticalmass-1.0.0.orig/curl/lib/amigaos.c0000644000175000017500000000273710265631023017705 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: amigaos.c,v 1.3 2004/10/06 07:50:18 bagder Exp $ ***************************************************************************/ #include "amigaos.h" #include /* for stderr */ struct Library *SocketBase = NULL; void amiga_cleanup() { if(SocketBase) CloseLibrary(SocketBase); SocketBase = NULL; } BOOL amiga_init() { if(!SocketBase) SocketBase = OpenLibrary("bsdsocket.library", 4); if(!SocketBase) { fprintf(stderr, "No TCP/IP Stack running!\n\a"); return FALSE; } atexit(amiga_cleanup); return TRUE; } criticalmass-1.0.0.orig/curl/lib/amigaos.h0000644000175000017500000000320510265631023017701 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: amigaos.h,v 1.4 2004/10/06 07:50:18 bagder Exp $ ***************************************************************************/ #ifndef LIBCURL_AMIGAOS_H #define LIBCURL_AMIGAOS_H #ifndef __ixemul__ #include #include #include #include #include #include "config-amigaos.h" #define select(args...) WaitSelect( args, NULL) #define inet_ntoa(x) Inet_NtoA( x ## .s_addr) #define ioctl(a,b,c,d) IoctlSocket( (LONG)a, (ULONG)b, (char*)c) #define _AMIGASF 1 extern void amiga_cleanup(); extern BOOL amiga_init(); #else /* __ixemul__ */ #warning compiling with ixemul... #endif /* __ixemul__ */ #endif /* LIBCURL_AMIGAOS_H */ criticalmass-1.0.0.orig/curl/lib/parsedate.c0000644000175000017500000002507410265631023020234 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: parsedate.c,v 1.16 2005/04/26 13:08:49 bagder Exp $ ***************************************************************************/ /* A brief summary of the date string formats this parser groks: RFC 2616 3.3.1 Sun, 06 Nov 1994 08:49:37 GMT ; RFC 822, updated by RFC 1123 Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036 Sun Nov 6 08:49:37 1994 ; ANSI C's asctime() format we support dates without week day name: 06 Nov 1994 08:49:37 GMT 06-Nov-94 08:49:37 GMT Nov 6 08:49:37 1994 without the time zone: 06 Nov 1994 08:49:37 06-Nov-94 08:49:37 weird order: 1994 Nov 6 08:49:37 (GNU date fails) GMT 08:49:37 06-Nov-94 Sunday 94 6 Nov 08:49:37 (GNU date fails) time left out: 1994 Nov 6 06-Nov-94 Sun Nov 6 94 unusual separators: 1994.Nov.6 Sun/Nov/6/94/GMT commonly used time zone names: Sun, 06 Nov 1994 08:49:37 CET 06 Nov 1994 08:49:37 EST time zones specified using RFC822 style: Sun, 12 Sep 2004 15:05:58 -0700 Sat, 11 Sep 2004 21:32:11 +0200 compact numerical date strings: 20040912 15:05:58 -0700 20040911 +0200 */ #include "setup.h" #include #include #include #ifdef HAVE_STDLIB_H #include /* for strtol() */ #endif #include static time_t Curl_parsedate(const char *date); const char * const Curl_wkday[] = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"}; static const char * const weekday[] = { "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday" }; const char * const Curl_month[]= { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; struct tzinfo { const char *name; int offset; /* +/- in minutes */ }; /* Here's a bunch of frequently used time zone names. These were supported by the old getdate parser. */ static const struct tzinfo tz[]= { {"GMT", 0}, /* Greenwich Mean */ {"UTC", 0}, /* Universal (Coordinated) */ {"WET", 0}, /* Western European */ {"BST", 0}, /* British Summer */ {"WAT", 60}, /* West Africa */ {"AST", 240}, /* Atlantic Standard */ {"ADT", 240}, /* Atlantic Daylight */ {"EST", 300}, /* Eastern Standard */ {"EDT", 300}, /* Eastern Daylight */ {"CST", 360}, /* Central Standard */ {"CDT", 360}, /* Central Daylight */ {"MST", 420}, /* Mountain Standard */ {"MDT", 420}, /* Mountain Daylight */ {"PST", 480}, /* Pacific Standard */ {"PDT", 480}, /* Pacific Daylight */ {"YST", 540}, /* Yukon Standard */ {"YDT", 540}, /* Yukon Daylight */ {"HST", 600}, /* Hawaii Standard */ {"HDT", 600}, /* Hawaii Daylight */ {"CAT", 600}, /* Central Alaska */ {"AHST", 600}, /* Alaska-Hawaii Standard */ {"NT", 660}, /* Nome */ {"IDLW", 720}, /* International Date Line West */ {"CET", -60}, /* Central European */ {"MET", -60}, /* Middle European */ {"MEWT", -60}, /* Middle European Winter */ {"MEST", -120}, /* Middle European Summer */ {"CEST", -120}, /* Central European Summer */ {"MESZ", -60}, /* Middle European Summer */ {"FWT", -60}, /* French Winter */ {"FST", -60}, /* French Summer */ {"EET", -120}, /* Eastern Europe, USSR Zone 1 */ {"WAST", -420}, /* West Australian Standard */ {"WADT", -420}, /* West Australian Daylight */ {"CCT", -480}, /* China Coast, USSR Zone 7 */ {"JST", -540}, /* Japan Standard, USSR Zone 8 */ {"EAST", -600}, /* Eastern Australian Standard */ {"EADT", -600}, /* Eastern Australian Daylight */ {"GST", -600}, /* Guam Standard, USSR Zone 9 */ {"NZT", -720}, /* New Zealand */ {"NZST", -720}, /* New Zealand Standard */ {"NZDT", -720}, /* New Zealand Daylight */ {"IDLE", -720}, /* International Date Line East */ }; /* returns: -1 no day 0 monday - 6 sunday */ static int checkday(char *check, size_t len) { int i; const char * const *what; bool found= FALSE; if(len > 3) what = &weekday[0]; else what = &Curl_wkday[0]; for(i=0; i<7; i++) { if(curl_strequal(check, what[0])) { found=TRUE; break; } what++; } return found?i:-1; } static int checkmonth(char *check) { int i; const char * const *what; bool found= FALSE; what = &Curl_month[0]; for(i=0; i<12; i++) { if(curl_strequal(check, what[0])) { found=TRUE; break; } what++; } return found?i:-1; /* return the offset or -1, no real offset is -1 */ } /* return the time zone offset between GMT and the input one, in number of seconds or -1 if the timezone wasn't found/legal */ static int checktz(char *check) { unsigned int i; const struct tzinfo *what; bool found= FALSE; what = tz; for(i=0; i< sizeof(tz)/sizeof(tz[0]); i++) { if(curl_strequal(check, what->name)) { found=TRUE; break; } what++; } return found?what->offset*60:-1; } static void skip(const char **date) { /* skip everything that aren't letters or digits */ while(**date && !isalnum((int)**date)) (*date)++; } enum assume { DATE_MDAY, DATE_YEAR, DATE_TIME }; static time_t Curl_parsedate(const char *date) { time_t t = 0; int wdaynum=-1; /* day of the week number, 0-6 (mon-sun) */ int monnum=-1; /* month of the year number, 0-11 */ int mdaynum=-1; /* day of month, 1 - 31 */ int hournum=-1; int minnum=-1; int secnum=-1; int yearnum=-1; int tzoff=-1; struct tm tm; enum assume dignext = DATE_MDAY; const char *indate = date; /* save the original pointer */ int part = 0; /* max 6 parts */ while(*date && (part < 6)) { bool found=FALSE; skip(&date); if(isalpha((int)*date)) { /* a name coming up */ char buf[32]=""; size_t len; sscanf(date, "%31[A-Za-z]", buf); len = strlen(buf); if(wdaynum == -1) { wdaynum = checkday(buf, len); if(wdaynum != -1) found = TRUE; } if(!found && (monnum == -1)) { monnum = checkmonth(buf); if(monnum != -1) found = TRUE; } if(!found && (tzoff == -1)) { /* this just must be a time zone string */ tzoff = checktz(buf); if(tzoff != -1) found = TRUE; } if(!found) return -1; /* bad string */ date += len; } else if(isdigit((int)*date)) { /* a digit */ int val; char *end; if((secnum == -1) && (3 == sscanf(date, "%02d:%02d:%02d", &hournum, &minnum, &secnum))) { /* time stamp! */ date += 8; found = TRUE; } else { val = (int)strtol(date, &end, 10); if((tzoff == -1) && ((end - date) == 4) && (val < 1300) && (indate< date) && ((date[-1] == '+' || date[-1] == '-'))) { /* four digits and a value less than 1300 and it is preceeded with a plus or minus. This is a time zone indication. */ found = TRUE; tzoff = (val/100 * 60 + val%100)*60; /* the + and - prefix indicates the local time compared to GMT, this we need ther reversed math to get what we want */ tzoff = date[-1]=='+'?-tzoff:tzoff; } if(((end - date) == 8) && (yearnum == -1) && (monnum == -1) && (mdaynum == -1)) { /* 8 digits, no year, month or day yet. This is YYYYMMDD */ found = TRUE; yearnum = val/10000; monnum = (val%10000)/100-1; /* month is 0 - 11 */ mdaynum = val%100; } if(!found && (dignext == DATE_MDAY) && (mdaynum == -1)) { if((val > 0) && (val<32)) { mdaynum = val; found = TRUE; } dignext = DATE_YEAR; } if(!found && (dignext == DATE_YEAR) && (yearnum == -1)) { yearnum = val; found = TRUE; if(yearnum < 1900) { if (yearnum > 70) yearnum += 1900; else yearnum += 2000; } if(mdaynum == -1) dignext = DATE_MDAY; } if(!found) return -1; date = end; } } part++; } if(-1 == secnum) secnum = minnum = hournum = 0; /* no time, make it zero */ if((-1 == mdaynum) || (-1 == monnum) || (-1 == yearnum)) /* lacks vital info, fail */ return -1; #if SIZEOF_TIME_T < 5 /* 32 bit time_t can only hold dates to the beginning of 2038 */ if(yearnum > 2037) return 0x7fffffff; #endif tm.tm_sec = secnum; tm.tm_min = minnum; tm.tm_hour = hournum; tm.tm_mday = mdaynum; tm.tm_mon = monnum; tm.tm_year = yearnum - 1900; tm.tm_wday = 0; tm.tm_yday = 0; tm.tm_isdst = 0; /* mktime() returns a time_t. time_t is often 32 bits, even on many architectures that feature 64 bit 'long'. Some systems have 64 bit time_t and deal with years beyond 2038. However, even some of the systems with 64 bit time_t returns -1 for dates beyond 03:14:07 UTC, January 19, 2038. (Such as AIX 5100-06) */ t = mktime(&tm); /* time zone adjust */ if(-1 != t) { struct tm *gmt; long delta; time_t t2; #ifdef HAVE_GMTIME_R /* thread-safe version */ struct tm keeptime2; gmt = (struct tm *)gmtime_r(&t, &keeptime2); #else gmt = gmtime(&t); /* use gmtime_r() if available */ #endif if(!gmt) return -1; /* illegal date/time */ t2 = mktime(gmt); /* Add the time zone diff (between the given timezone and GMT) and the diff between the local time zone and GMT. */ delta = (long)((tzoff!=-1?tzoff:0) + (t - t2)); if((delta>0) && (t + delta < t)) return -1; /* time_t overflow */ t += delta; } return t; } time_t curl_getdate(const char *p, const time_t *now) { (void)now; return Curl_parsedate(p); } criticalmass-1.0.0.orig/curl/lib/parsedate.h0000644000175000017500000000230410265631023020230 0ustar danieldaniel#ifndef __PARSEDATE_H #define __PARSEDATEL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: parsedate.h,v 1.4 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ extern const char * const Curl_wkday[7]; extern const char * const Curl_month[12]; #endif criticalmass-1.0.0.orig/curl/lib/config.dj0000644000175000017500000000614110265631023017676 0ustar danieldaniel#ifndef _CURL_CONFIG_DJGPP_H #define _CURL_CONFIG_DJGPP_H #define OS "MSDOS/djgpp" #define PACKAGE "curl" #define CURL_CA_BUNDLE "/dev/env/CURL_CA_BUNDLE" #if (DJGPP_MINOR >= 4) /* #define HAVE_DLOPEN 1 maybe not (DXE3) */ #endif #define HAVE_ASSERT_T 1 #define HAVE_ARPA_INET_H 1 #define HAVE_BASENAME 1 #define HAVE_CLOSESOCKET 1 #define HAVE_FCNTL_H 1 #define HAVE_FIONBIO 1 #define HAVE_GETHOSTBYADDR 1 #define HAVE_GETHOSTNAME 1 #define HAVE_GETPASS 1 #define HAVE_GETSERVBYNAME 1 #define HAVE_GETTIMEOFDAY 1 #define HAVE_INET_ADDR 1 #define HAVE_INET_NTOA 1 #define HAVE_IO_H 1 #define HAVE_IOCTLSOCKET 1 #define HAVE_INET_PTON 1 #define HAVE_INET_NTOP 1 #define HAVE_LOCALE_H 1 #define HAVE_LONGLONG 1 #define HAVE_MALLOC_H 1 #define HAVE_MEMORY_H 1 #define HAVE_NETDB_H 1 #define HAVE_NETINET_IN_H 1 #define HAVE_NETINET_TCP_H 1 #define HAVE_NET_IF_H 1 #define HAVE_PERROR 1 #define HAVE_SELECT 1 #define HAVE_SETJMP_H 1 #define HAVE_SETLOCALE 1 #define HAVE_SETVBUF 1 #define HAVE_SIGNAL 1 #define HAVE_SIGACTION 1 #define HAVE_SIGSETJMP 1 #define HAVE_SOCKET 1 #define HAVE_SPNEGO 1 #define HAVE_STRCASECMP 1 #define HAVE_STRDUP 1 #define HAVE_STRFTIME 1 #define HAVE_STRICMP 1 #define HAVE_STRSTR 1 #define HAVE_STRTOLL 1 #define HAVE_SYS_IOCTL_H 1 #define HAVE_SYS_SOCKET_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_TERMIOS_H 1 #define HAVE_TIME_H 1 #define HAVE_UNAME 1 #define HAVE_UNISTD_H 1 #define HAVE_VPRINTF 1 #if (DJGPP_MINOR >= 4) #define HAVE_STRLCAT 1 #endif #define RETSIGTYPE void #define SIZEOF_LONG_DOUBLE 16 #define SIZEOF_CURL_OFF_T 4 /* no huge file support */ #define STDC_HEADERS 1 #define TIME_WITH_SYS_TIME 1 #define BSD /* #define MALLOCDEBUG */ #ifdef USE_ZLIB /* on cmd-line */ #define HAVE_ZLIB_H 1 #define HAVE_LIBZ 1 #endif #ifdef USE_SSLEAY /* on cmd-line */ #define HAVE_OPENSSL_X509_H 1 #define HAVE_OPENSSL_SSL_H 1 #define HAVE_OPENSSL_RSA_H 1 #define HAVE_OPENSSL_PEM_H 1 #define HAVE_OPENSSL_ERR_H 1 #define HAVE_OPENSSL_CRYPTO_H 1 #define HAVE_OPENSSL_ENGINE_H 1 #define HAVE_LIBSSL 1 #define HAVE_LIBCRYPTO 1 #define OPENSSL_NO_KRB5 1 #define USE_OPENSSL 1 #endif /* to disable LDAP */ #define CURL_DISABLE_LDAP 1 /* Because djgpp <= 2.03 doesn't have snprintf() etc. */ #if (DJGPP_MINOR < 4) #define _MPRINTF_REPLACE #endif #define in_addr_t u_long #define socklen_t int #if __GNUC__ < 4 /* gcc 4.x built-in ? */ #define ssize_t int #endif #include #include #include /* Watt-32 API */ #undef word #endif /* _CURL_CONFIG_DJGPP_H */ criticalmass-1.0.0.orig/curl/lib/mprintf.c0000644000175000017500000007312010265631023017736 0ustar danieldaniel/**************************************************************************** * * $Id: mprintf.c,v 1.51 2005/04/26 13:08:49 bagder Exp $ * ************************************************************************* * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. * * Purpose: * A merge of Bjorn Reese's format() function and Daniel's dsprintf() * 1.0. A full blooded printf() clone with full support for $ * everywhere (parameters, widths and precisions) including variabled * sized parameters (like doubles, long longs, long doubles and even * void * in 64-bit architectures). * * Current restrictions: * - Max 128 parameters * - No 'long double' support. * * If you ever want truly portable and good *printf() clones, the project that * took on from here is named 'Trio' and you find more details on the trio web * page at http://daniel.haxx.se/trio/ */ #include "setup.h" #include #include #include #include #include #include #include #ifndef SIZEOF_LONG_DOUBLE #define SIZEOF_LONG_DOUBLE 0 #endif #ifndef SIZEOF_SIZE_T /* default to 4 bytes for size_t unless defined in the config.h */ #define SIZEOF_SIZE_T 4 #endif #ifdef DPRINTF_DEBUG #define HAVE_LONGLONG #define LONG_LONG long long #define ENABLE_64BIT #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" #define BUFFSIZE 256 /* buffer for long-to-str and float-to-str calcs */ #define MAX_PARAMETERS 128 /* lame static limit */ #undef TRUE #undef FALSE #undef BOOL #ifdef __cplusplus # define TRUE true # define FALSE false # define BOOL bool #else # define TRUE ((char)(1 == 1)) # define FALSE ((char)(0 == 1)) # define BOOL char #endif /* Lower-case digits. */ static const char lower_digits[] = "0123456789abcdefghijklmnopqrstuvwxyz"; /* Upper-case digits. */ static const char upper_digits[] = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; #define OUTCHAR(x) \ do{ \ if(stream((unsigned char)(x), (FILE *)data) != -1) \ done++; \ else \ return done; /* return immediately on failure */ \ } while(0) /* Data type to read from the arglist */ typedef enum { FORMAT_UNKNOWN = 0, FORMAT_STRING, FORMAT_PTR, FORMAT_INT, FORMAT_INTPTR, FORMAT_LONG, FORMAT_LONGLONG, FORMAT_DOUBLE, FORMAT_LONGDOUBLE, FORMAT_WIDTH /* For internal use */ } FormatType; /* convertion and display flags */ enum { FLAGS_NEW = 0, FLAGS_SPACE = 1<<0, FLAGS_SHOWSIGN = 1<<1, FLAGS_LEFT = 1<<2, FLAGS_ALT = 1<<3, FLAGS_SHORT = 1<<4, FLAGS_LONG = 1<<5, FLAGS_LONGLONG = 1<<6, FLAGS_LONGDOUBLE = 1<<7, FLAGS_PAD_NIL = 1<<8, FLAGS_UNSIGNED = 1<<9, FLAGS_OCTAL = 1<<10, FLAGS_HEX = 1<<11, FLAGS_UPPER = 1<<12, FLAGS_WIDTH = 1<<13, /* '*' or '*$' used */ FLAGS_WIDTHPARAM = 1<<14, /* width PARAMETER was specified */ FLAGS_PREC = 1<<15, /* precision was specified */ FLAGS_PRECPARAM = 1<<16, /* precision PARAMETER was specified */ FLAGS_CHAR = 1<<17, /* %c story */ FLAGS_FLOATE = 1<<18, /* %e or %E */ FLAGS_FLOATG = 1<<19 /* %g or %G */ }; typedef struct { FormatType type; int flags; long width; /* width OR width parameter number */ long precision; /* precision OR precision parameter number */ union { char *str; void *ptr; long num; #ifdef ENABLE_64BIT LONG_LONG lnum; #endif double dnum; } data; } va_stack_t; struct nsprintf { char *buffer; size_t length; size_t max; }; struct asprintf { char *buffer; /* allocated buffer */ size_t len; /* length of string */ size_t alloc; /* length of alloc */ bool fail; /* TRUE if an alloc has failed and thus the output is not the complete data */ }; int curl_msprintf(char *buffer, const char *format, ...); static long dprintf_DollarString(char *input, char **end) { int number=0; while(isdigit((int)*input)) { number *= 10; number += *input-'0'; input++; } if(number && ('$'==*input++)) { *end = input; return number; } return 0; } static BOOL dprintf_IsQualifierNoDollar(char c) { switch (c) { case '-': case '+': case ' ': case '#': case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case 'h': case 'l': case 'L': case 'z': case 'q': case '*': case 'O': return TRUE; default: return FALSE; } } #ifdef DPRINTF_DEBUG2 int dprintf_Pass1Report(va_stack_t *vto, int max) { int i; char buffer[128]; int bit; int flags; for(i=0; i max_param) max_param = this_param; /* * The parameter with number 'i' should be used. Next, we need * to get SIZE and TYPE of the parameter. Add the information * to our array. */ width = 0; precision = 0; /* Handle the flags */ while (dprintf_IsQualifierNoDollar(*fmt)) { switch (*fmt++) { case ' ': flags |= FLAGS_SPACE; break; case '+': flags |= FLAGS_SHOWSIGN; break; case '-': flags |= FLAGS_LEFT; flags &= ~FLAGS_PAD_NIL; break; case '#': flags |= FLAGS_ALT; break; case '.': flags |= FLAGS_PREC; if ('*' == *fmt) { /* The precision is picked from a specified parameter */ flags |= FLAGS_PRECPARAM; fmt++; param_num++; i = dprintf_DollarString(fmt, &fmt); if (i) precision = i; else precision = param_num; if (precision > max_param) max_param = precision; } else { flags |= FLAGS_PREC; precision = strtol(fmt, &fmt, 10); } break; case 'h': flags |= FLAGS_SHORT; break; case 'l': if (flags & FLAGS_LONG) flags |= FLAGS_LONGLONG; else flags |= FLAGS_LONG; break; case 'L': flags |= FLAGS_LONGDOUBLE; break; case 'q': flags |= FLAGS_LONGLONG; break; case 'z': /* the code below generates a warning if -Wunreachable-code is used */ #if SIZEOF_SIZE_T>4 flags |= FLAGS_LONGLONG; #else flags |= FLAGS_LONG; #endif break; case 'O': #if SIZEOF_CURL_OFF_T > 4 flags |= FLAGS_LONGLONG; #else flags |= FLAGS_LONG; #endif break; case '0': if (!(flags & FLAGS_LEFT)) flags |= FLAGS_PAD_NIL; /* FALLTHROUGH */ case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': flags |= FLAGS_WIDTH; width = strtol(fmt-1, &fmt, 10); break; case '*': /* Special case */ flags |= FLAGS_WIDTHPARAM; param_num++; i = dprintf_DollarString(fmt, &fmt); if(i) width = i; else width = param_num; if(width > max_param) max_param=width; break; default: break; } } /* switch */ /* Handle the specifier */ i = this_param - 1; switch (*fmt) { case 'S': flags |= FLAGS_ALT; /* FALLTHROUGH */ case 's': vto[i].type = FORMAT_STRING; break; case 'n': vto[i].type = FORMAT_INTPTR; break; case 'p': vto[i].type = FORMAT_PTR; break; case 'd': case 'i': vto[i].type = FORMAT_INT; break; case 'u': vto[i].type = FORMAT_INT; flags |= FLAGS_UNSIGNED; break; case 'o': vto[i].type = FORMAT_INT; flags |= FLAGS_OCTAL; break; case 'x': vto[i].type = FORMAT_INT; flags |= FLAGS_HEX; break; case 'X': vto[i].type = FORMAT_INT; flags |= FLAGS_HEX|FLAGS_UPPER; break; case 'c': vto[i].type = FORMAT_INT; flags |= FLAGS_CHAR; break; case 'f': vto[i].type = FORMAT_DOUBLE; break; case 'e': vto[i].type = FORMAT_DOUBLE; flags |= FLAGS_FLOATE; break; case 'E': vto[i].type = FORMAT_DOUBLE; flags |= FLAGS_FLOATE|FLAGS_UPPER; break; case 'g': vto[i].type = FORMAT_DOUBLE; flags |= FLAGS_FLOATG; break; case 'G': vto[i].type = FORMAT_DOUBLE; flags |= FLAGS_FLOATG|FLAGS_UPPER; break; default: vto[i].type = FORMAT_UNKNOWN; break; } /* switch */ vto[i].flags = flags; vto[i].width = width; vto[i].precision = precision; if (flags & FLAGS_WIDTHPARAM) { /* we have the width specified from a parameter, so we make that parameter's info setup properly */ vto[i].width = width - 1; i = width - 1; vto[i].type = FORMAT_WIDTH; vto[i].flags = FLAGS_NEW; vto[i].precision = vto[i].width = 0; /* can't use width or precision of width! */ } if (flags & FLAGS_PRECPARAM) { /* we have the precision specified from a parameter, so we make that parameter's info setup properly */ vto[i].precision = precision - 1; i = precision - 1; vto[i].type = FORMAT_WIDTH; vto[i].flags = FLAGS_NEW; vto[i].precision = vto[i].width = 0; /* can't use width or precision of width! */ } *endpos++ = fmt + 1; /* end of this sequence */ } } #ifdef DPRINTF_DEBUG2 dprintf_Pass1Report(vto, max_param); #endif /* Read the arg list parameters into our data list */ for (i=0; i$ sequence */ param=dprintf_DollarString(f, &f); if(!param) param = param_num; else --param; param_num++; /* increase this always to allow "%2$s %1$s %s" and then the third %s will pick the 3rd argument */ p = &vto[param]; /* pick up the specified width */ if(p->flags & FLAGS_WIDTHPARAM) width = vto[p->width].data.num; else width = p->width; /* pick up the specified precision */ if(p->flags & FLAGS_PRECPARAM) prec = vto[p->precision].data.num; else if(p->flags & FLAGS_PREC) prec = p->precision; else prec = -1; alt = (p->flags & FLAGS_ALT)?TRUE:FALSE; switch (p->type) { case FORMAT_INT: num = p->data.num; if(p->flags & FLAGS_CHAR) { /* Character. */ if (!(p->flags & FLAGS_LEFT)) while (--width > 0) OUTCHAR(' '); OUTCHAR((char) num); if (p->flags & FLAGS_LEFT) while (--width > 0) OUTCHAR(' '); break; } if(p->flags & FLAGS_UNSIGNED) { /* Decimal unsigned integer. */ base = 10; goto unsigned_number; } if(p->flags & FLAGS_OCTAL) { /* Octal unsigned integer. */ base = 8; goto unsigned_number; } if(p->flags & FLAGS_HEX) { /* Hexadecimal unsigned integer. */ digits = (p->flags & FLAGS_UPPER)? upper_digits : lower_digits; base = 16; goto unsigned_number; } /* Decimal integer. */ base = 10; #ifdef ENABLE_64BIT if(p->flags & FLAGS_LONGLONG) { /* long long */ is_neg = p->data.lnum < 0; num = is_neg ? (- p->data.lnum) : p->data.lnum; } else #endif { signed_num = (long) num; is_neg = signed_num < 0; num = is_neg ? (- signed_num) : signed_num; } goto number; unsigned_number: /* Unsigned number of base BASE. */ is_neg = 0; number: /* Number of base BASE. */ { char *workend = &work[sizeof(work) - 1]; char *w; /* Supply a default precision if none was given. */ if (prec == -1) prec = 1; /* Put the number in WORK. */ w = workend; while (num > 0) { *w-- = digits[num % base]; num /= base; } width -= (long)(workend - w); prec -= (long)(workend - w); if (alt && base == 8 && prec <= 0) { *w-- = '0'; --width; } if (prec > 0) { width -= prec; while (prec-- > 0) *w-- = '0'; } if (alt && base == 16) width -= 2; if (is_neg || (p->flags & FLAGS_SHOWSIGN) || (p->flags & FLAGS_SPACE)) --width; if (!(p->flags & FLAGS_LEFT) && !(p->flags & FLAGS_PAD_NIL)) while (width-- > 0) OUTCHAR(' '); if (is_neg) OUTCHAR('-'); else if (p->flags & FLAGS_SHOWSIGN) OUTCHAR('+'); else if (p->flags & FLAGS_SPACE) OUTCHAR(' '); if (alt && base == 16) { OUTCHAR('0'); if(p->flags & FLAGS_UPPER) OUTCHAR('X'); else OUTCHAR('x'); } if (!(p->flags & FLAGS_LEFT) && (p->flags & FLAGS_PAD_NIL)) while (width-- > 0) OUTCHAR('0'); /* Write the number. */ while (++w <= workend) { OUTCHAR(*w); } if (p->flags & FLAGS_LEFT) while (width-- > 0) OUTCHAR(' '); } break; case FORMAT_STRING: /* String. */ { static const char null[] = "(nil)"; const char *str; size_t len; str = (char *) p->data.str; if ( str == NULL) { /* Write null[] if there's space. */ if (prec == -1 || prec >= (long) sizeof(null) - 1) { str = null; len = sizeof(null) - 1; /* Disable quotes around (nil) */ p->flags &= (~FLAGS_ALT); } else { str = ""; len = 0; } } else len = strlen(str); if (prec != -1 && (size_t) prec < len) len = prec; width -= (long)len; if (p->flags & FLAGS_ALT) OUTCHAR('"'); if (!(p->flags&FLAGS_LEFT)) while (width-- > 0) OUTCHAR(' '); while (len-- > 0) OUTCHAR(*str++); if (p->flags&FLAGS_LEFT) while (width-- > 0) OUTCHAR(' '); if (p->flags & FLAGS_ALT) OUTCHAR('"'); } break; case FORMAT_PTR: /* Generic pointer. */ { void *ptr; ptr = (void *) p->data.ptr; if (ptr != NULL) { /* If the pointer is not NULL, write it as a %#x spec. */ base = 16; digits = (p->flags & FLAGS_UPPER)? upper_digits : lower_digits; alt = 1; num = (size_t) ptr; is_neg = 0; goto number; } else { /* Write "(nil)" for a nil pointer. */ static const char strnil[] = "(nil)"; const char *point; width -= sizeof(strnil) - 1; if (p->flags & FLAGS_LEFT) while (width-- > 0) OUTCHAR(' '); for (point = strnil; *point != '\0'; ++point) OUTCHAR(*point); if (! (p->flags & FLAGS_LEFT)) while (width-- > 0) OUTCHAR(' '); } } break; case FORMAT_DOUBLE: { char formatbuf[32]="%"; char *fptr; size_t left = sizeof(formatbuf)-strlen(formatbuf); int len; width = -1; if (p->flags & FLAGS_WIDTH) width = p->width; else if (p->flags & FLAGS_WIDTHPARAM) width = vto[p->width].data.num; prec = -1; if (p->flags & FLAGS_PREC) prec = p->precision; else if (p->flags & FLAGS_PRECPARAM) prec = vto[p->precision].data.num; if (p->flags & FLAGS_LEFT) strcat(formatbuf, "-"); if (p->flags & FLAGS_SHOWSIGN) strcat(formatbuf, "+"); if (p->flags & FLAGS_SPACE) strcat(formatbuf, " "); if (p->flags & FLAGS_ALT) strcat(formatbuf, "#"); fptr=&formatbuf[strlen(formatbuf)]; if(width >= 0) { /* RECURSIVE USAGE */ len = curl_msnprintf(fptr, left, "%ld", width); fptr += len; left -= len; } if(prec >= 0) { /* RECURSIVE USAGE */ len = curl_msnprintf(fptr, left, ".%ld", prec); fptr += len; left -= len; } if (p->flags & FLAGS_LONG) *fptr++ = 'l'; if (p->flags & FLAGS_FLOATE) *fptr++ = p->flags&FLAGS_UPPER ? 'E':'e'; else if (p->flags & FLAGS_FLOATG) *fptr++ = p->flags & FLAGS_UPPER ? 'G' : 'g'; else *fptr++ = 'f'; *fptr = 0; /* and a final zero termination */ /* NOTE NOTE NOTE!! Not all sprintf() implementations returns number of output characters */ (sprintf)(work, formatbuf, p->data.dnum); for(fptr=work; *fptr; fptr++) OUTCHAR(*fptr); } break; case FORMAT_INTPTR: /* Answer the count of characters written. */ #ifdef ENABLE_64BIT if (p->flags & FLAGS_LONGLONG) *(LONG_LONG *) p->data.ptr = (LONG_LONG)done; else #endif if (p->flags & FLAGS_LONG) *(long *) p->data.ptr = (long)done; else if (!(p->flags & FLAGS_SHORT)) *(int *) p->data.ptr = (int)done; else *(short *) p->data.ptr = (short)done; break; default: break; } f = *end++; /* goto end of %-code */ } return done; } /* fputc() look-alike */ static int addbyter(int output, FILE *data) { struct nsprintf *infop=(struct nsprintf *)data; unsigned char outc = (unsigned char)output; if(infop->length < infop->max) { /* only do this if we haven't reached max length yet */ infop->buffer[0] = outc; /* store */ infop->buffer++; /* increase pointer */ infop->length++; /* we are now one byte larger */ return outc; /* fputc() returns like this on success */ } return -1; } int curl_mvsnprintf(char *buffer, size_t maxlength, const char *format, va_list ap_save) { int retcode; struct nsprintf info; info.buffer = buffer; info.length = 0; info.max = maxlength; retcode = dprintf_formatf(&info, addbyter, format, ap_save); if(info.max) { /* we terminate this with a zero byte */ if(info.max == info.length) /* we're at maximum, scrap the last letter */ info.buffer[-1] = 0; else info.buffer[0] = 0; } return retcode; } int curl_msnprintf(char *buffer, size_t maxlength, const char *format, ...) { int retcode; va_list ap_save; /* argument pointer */ va_start(ap_save, format); retcode = curl_mvsnprintf(buffer, maxlength, format, ap_save); va_end(ap_save); return retcode; } /* fputc() look-alike */ static int alloc_addbyter(int output, FILE *data) { struct asprintf *infop=(struct asprintf *)data; unsigned char outc = (unsigned char)output; if(!infop->buffer) { infop->buffer=(char *)malloc(32); if(!infop->buffer) { infop->fail = TRUE; return -1; /* fail */ } infop->alloc = 32; infop->len =0; } else if(infop->len+1 >= infop->alloc) { char *newptr; newptr = (char *)realloc(infop->buffer, infop->alloc*2); if(!newptr) { infop->fail = TRUE; return -1; } infop->buffer = newptr; infop->alloc *= 2; } infop->buffer[ infop->len ] = outc; infop->len++; return outc; /* fputc() returns like this on success */ } char *curl_maprintf(const char *format, ...) { va_list ap_save; /* argument pointer */ int retcode; struct asprintf info; info.buffer = NULL; info.len = 0; info.alloc = 0; info.fail = FALSE; va_start(ap_save, format); retcode = dprintf_formatf(&info, alloc_addbyter, format, ap_save); va_end(ap_save); if((-1 == retcode) || info.fail) { if(info.alloc) free(info.buffer); return NULL; } if(info.alloc) { info.buffer[info.len] = 0; /* we terminate this with a zero byte */ return info.buffer; } else return strdup(""); } char *curl_mvaprintf(const char *format, va_list ap_save) { int retcode; struct asprintf info; info.buffer = NULL; info.len = 0; info.alloc = 0; info.fail = FALSE; retcode = dprintf_formatf(&info, alloc_addbyter, format, ap_save); if((-1 == retcode) || info.fail) { if(info.alloc) free(info.buffer); return NULL; } if(info.alloc) { info.buffer[info.len] = 0; /* we terminate this with a zero byte */ return info.buffer; } else return strdup(""); } static int storebuffer(int output, FILE *data) { char **buffer = (char **)data; unsigned char outc = (unsigned char)output; **buffer = outc; (*buffer)++; return outc; /* act like fputc() ! */ } int curl_msprintf(char *buffer, const char *format, ...) { va_list ap_save; /* argument pointer */ int retcode; va_start(ap_save, format); retcode = dprintf_formatf(&buffer, storebuffer, format, ap_save); va_end(ap_save); *buffer=0; /* we terminate this with a zero byte */ return retcode; } int curl_mprintf(const char *format, ...) { int retcode; va_list ap_save; /* argument pointer */ va_start(ap_save, format); retcode = dprintf_formatf(stdout, fputc, format, ap_save); va_end(ap_save); return retcode; } int curl_mfprintf(FILE *whereto, const char *format, ...) { int retcode; va_list ap_save; /* argument pointer */ va_start(ap_save, format); retcode = dprintf_formatf(whereto, fputc, format, ap_save); va_end(ap_save); return retcode; } int curl_mvsprintf(char *buffer, const char *format, va_list ap_save) { int retcode; retcode = dprintf_formatf(&buffer, storebuffer, format, ap_save); *buffer=0; /* we terminate this with a zero byte */ return retcode; } int curl_mvprintf(const char *format, va_list ap_save) { return dprintf_formatf(stdout, fputc, format, ap_save); } int curl_mvfprintf(FILE *whereto, const char *format, va_list ap_save) { return dprintf_formatf(whereto, fputc, format, ap_save); } #ifdef DPRINTF_DEBUG int main() { char buffer[129]; char *ptr; #ifdef ENABLE_64BIT long long one=99; long long two=100; long long test = 0x1000000000LL; curl_mprintf("%lld %lld %lld\n", one, two, test); #endif curl_mprintf("%3d %5d\n", 10, 1998); ptr=curl_maprintf("test this then baby %s%s%s%s%s%s %d %d %d loser baby get a hit in yer face now!", "", "pretty long string pretty long string pretty long string pretty long string pretty long string", "/", "/", "/", "pretty long string", 1998, 1999, 2001); puts(ptr); memset(ptr, 55, strlen(ptr)+1); free(ptr); #if 1 curl_mprintf(buffer, "%s %s %d", "daniel", "stenberg", 19988); puts(buffer); curl_mfprintf(stderr, "%s %#08x\n", "dummy", 65); printf("%s %#08x\n", "dummy", 65); { double tryout = 3.14156592; curl_mprintf(buffer, "%.2g %G %f %e %E", tryout, tryout, tryout, tryout, tryout); puts(buffer); printf("%.2g %G %f %e %E\n", tryout, tryout, tryout, tryout, tryout); } #endif return 0; } #endif criticalmass-1.0.0.orig/curl/lib/sendf.c0000644000175000017500000002633510265631023017364 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: sendf.c,v 1.98 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include /* required for send() & recv() prototypes */ #endif #ifdef HAVE_UNISTD_H #include #endif #include #include "urldata.h" #include "sendf.h" #include "connect.h" /* for the Curl_ourerrno() proto */ #include "sslgen.h" #define _MPRINTF_REPLACE /* use the internal *printf() functions */ #include #ifdef HAVE_KRB4 #include "krb4.h" #else #define Curl_sec_write(a,b,c,d) -1 #define Curl_sec_read(a,b,c,d) -1 #endif #include #include "memory.h" #include "strerror.h" /* The last #include file should be: */ #include "memdebug.h" /* returns last node in linked list */ static struct curl_slist *slist_get_last(struct curl_slist *list) { struct curl_slist *item; /* if caller passed us a NULL, return now */ if (!list) return NULL; /* loop through to find the last item */ item = list; while (item->next) { item = item->next; } return item; } /* * curl_slist_append() appends a string to the linked list. It always retunrs * the address of the first record, so that you can sure this function as an * initialization function as well as an append function. If you find this * bothersome, then simply create a separate _init function and call it * appropriately from within the proram. */ struct curl_slist *curl_slist_append(struct curl_slist *list, const char *data) { struct curl_slist *last; struct curl_slist *new_item; new_item = (struct curl_slist *) malloc(sizeof(struct curl_slist)); if (new_item) { char *dup = strdup(data); if(dup) { new_item->next = NULL; new_item->data = dup; } else { free(new_item); return NULL; } } else return NULL; if (list) { last = slist_get_last(list); last->next = new_item; return list; } /* if this is the first item, then new_item *is* the list */ return new_item; } /* be nice and clean up resources */ void curl_slist_free_all(struct curl_slist *list) { struct curl_slist *next; struct curl_slist *item; if (!list) return; item = list; do { next = item->next; if (item->data) { free(item->data); } free(item); item = next; } while (next); } /* Curl_infof() is for info message along the way */ void Curl_infof(struct SessionHandle *data, const char *fmt, ...) { if(data && data->set.verbose) { va_list ap; char print_buffer[1024 + 1]; va_start(ap, fmt); vsnprintf(print_buffer, 1024, fmt, ap); va_end(ap); Curl_debug(data, CURLINFO_TEXT, print_buffer, strlen(print_buffer), NULL); } } /* Curl_failf() is for messages stating why we failed. * The message SHALL NOT include any LF or CR. */ void Curl_failf(struct SessionHandle *data, const char *fmt, ...) { va_list ap; size_t len; va_start(ap, fmt); vsnprintf(data->state.buffer, BUFSIZE, fmt, ap); if(data->set.errorbuffer && !data->state.errorbuf) { snprintf(data->set.errorbuffer, CURL_ERROR_SIZE, "%s", data->state.buffer); data->state.errorbuf = TRUE; /* wrote error string */ } if(data->set.verbose) { len = strlen(data->state.buffer); if(len < BUFSIZE - 1) { data->state.buffer[len] = '\n'; data->state.buffer[++len] = '\0'; } Curl_debug(data, CURLINFO_TEXT, data->state.buffer, len, NULL); } va_end(ap); } /* Curl_sendf() sends formated data to the server */ CURLcode Curl_sendf(curl_socket_t sockfd, struct connectdata *conn, const char *fmt, ...) { struct SessionHandle *data = conn->data; ssize_t bytes_written; size_t write_len; CURLcode res; char *s; char *sptr; va_list ap; va_start(ap, fmt); s = vaprintf(fmt, ap); /* returns an allocated string */ va_end(ap); if(!s) return CURLE_OUT_OF_MEMORY; /* failure */ bytes_written=0; write_len = strlen(s); sptr = s; while (1) { /* Write the buffer to the socket */ res = Curl_write(conn, sockfd, sptr, write_len, &bytes_written); if(CURLE_OK != res) break; if(data->set.verbose) Curl_debug(data, CURLINFO_DATA_OUT, sptr, bytes_written, conn); if((size_t)bytes_written != write_len) { /* if not all was written at once, we must advance the pointer, decrease the size left and try again! */ write_len -= bytes_written; sptr += bytes_written; } else break; } free(s); /* free the output string */ return res; } /* * Curl_write() is an internal write function that sends plain (binary) data * to the server. Works with plain sockets, SSL or kerberos. */ CURLcode Curl_write(struct connectdata *conn, curl_socket_t sockfd, void *mem, size_t len, ssize_t *written) { ssize_t bytes_written; CURLcode retcode; int num = (sockfd == conn->sock[SECONDARYSOCKET]); if (conn->ssl[num].use) /* only TRUE if SSL enabled */ bytes_written = Curl_ssl_send(conn, num, mem, len); else { if(conn->sec_complete) /* only TRUE if krb4 enabled */ bytes_written = Curl_sec_write(conn, sockfd, mem, len); else bytes_written = (ssize_t)swrite(sockfd, mem, len); if(-1 == bytes_written) { int err = Curl_ourerrno(); if( #ifdef WSAEWOULDBLOCK /* This is how Windows does it */ (WSAEWOULDBLOCK == err) #else /* As pointed out by Christophe Demory on March 11 2003, errno may be EWOULDBLOCK or on some systems EAGAIN when it returned due to its inability to send off data without blocking. We therefor treat both error codes the same here */ (EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err) #endif ) /* this is just a case of EWOULDBLOCK */ bytes_written=0; else failf(conn->data, "Send failure: %s", Curl_strerror(conn, err)); } } *written = bytes_written; retcode = (-1 != bytes_written)?CURLE_OK:CURLE_SEND_ERROR; return retcode; } /* client_write() sends data to the write callback(s) The bit pattern defines to what "streams" to write to. Body and/or header. The defines are in sendf.h of course. */ CURLcode Curl_client_write(struct SessionHandle *data, int type, char *ptr, size_t len) { size_t wrote; if(0 == len) len = strlen(ptr); if(type & CLIENTWRITE_BODY) { wrote = data->set.fwrite(ptr, 1, len, data->set.out); if(wrote != len) { failf (data, "Failed writing body"); return CURLE_WRITE_ERROR; } } if((type & CLIENTWRITE_HEADER) && (data->set.fwrite_header || data->set.writeheader) ) { /* * Write headers to the same callback or to the especially setup * header callback function (added after version 7.7.1). */ curl_write_callback writeit= data->set.fwrite_header?data->set.fwrite_header:data->set.fwrite; wrote = writeit(ptr, 1, len, data->set.writeheader); if(wrote != len) { failf (data, "Failed writing header"); return CURLE_WRITE_ERROR; } } return CURLE_OK; } /* * Internal read-from-socket function. This is meant to deal with plain * sockets, SSL sockets and kerberos sockets. * * If the read would block (EWOULDBLOCK) we return -1. Otherwise we return * a regular CURLcode value. */ int Curl_read(struct connectdata *conn, /* connection data */ curl_socket_t sockfd, /* read from this socket */ char *buf, /* store read data here */ size_t buffersize, /* max amount to read */ ssize_t *n) /* amount bytes read */ { ssize_t nread; /* Set 'num' to 0 or 1, depending on which socket that has been sent here. If it is the second socket, we set num to 1. Otherwise to 0. This lets us use the correct ssl handle. */ int num = (sockfd == conn->sock[SECONDARYSOCKET]); *n=0; /* reset amount to zero */ if(conn->ssl[num].use) { nread = Curl_ssl_recv(conn, num, buf, buffersize); if(nread == -1) return -1; /* -1 from Curl_ssl_recv() means EWOULDBLOCK */ } else { *n=0; /* reset amount to zero */ if(conn->sec_complete) nread = Curl_sec_read(conn, sockfd, buf, buffersize); else nread = sread(sockfd, buf, buffersize); if(-1 == nread) { int err = Curl_ourerrno(); #ifdef WIN32 if(WSAEWOULDBLOCK == err) #else if((EWOULDBLOCK == err) || (EAGAIN == err) || (EINTR == err)) #endif return -1; } } *n = nread; return CURLE_OK; } /* return 0 on success */ static int showit(struct SessionHandle *data, curl_infotype type, char *ptr, size_t size) { static const char * const s_infotype[CURLINFO_END] = { "* ", "< ", "> ", "{ ", "} ", "{ ", "} " }; if(data->set.fdebug) return (*data->set.fdebug)(data, type, ptr, size, data->set.debugdata); switch(type) { case CURLINFO_TEXT: case CURLINFO_HEADER_OUT: case CURLINFO_HEADER_IN: fwrite(s_infotype[type], 2, 1, data->set.err); fwrite(ptr, size, 1, data->set.err); break; default: /* nada */ break; } return 0; } int Curl_debug(struct SessionHandle *data, curl_infotype type, char *ptr, size_t size, struct connectdata *conn) { int rc; if(data->set.printhost && conn && conn->host.dispname) { char buffer[160]; const char *t=NULL; const char *w="Data"; switch (type) { case CURLINFO_HEADER_IN: w = "Header"; case CURLINFO_DATA_IN: t = "from"; break; case CURLINFO_HEADER_OUT: w = "Header"; case CURLINFO_DATA_OUT: t = "to"; break; default: break; } if(t) { snprintf(buffer, sizeof(buffer), "[%s %s %s%s]", w, t, conn->xfertype==NORMAL?"": (conn->xfertype==SOURCE3RD?"source ":"target "), conn->host.dispname); rc = showit(data, CURLINFO_TEXT, buffer, strlen(buffer)); if(rc) return rc; } } rc = showit(data, type, ptr, size); return rc; } criticalmass-1.0.0.orig/curl/lib/sendf.h0000644000175000017500000000513210265631023017361 0ustar danieldaniel#ifndef __SENDF_H #define __SENDF_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: sendf.h,v 1.30 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ CURLcode Curl_sendf(curl_socket_t sockfd, struct connectdata *, const char *fmt, ...); void Curl_infof(struct SessionHandle *, const char *fmt, ...); void Curl_failf(struct SessionHandle *, const char *fmt, ...); #if defined(CURL_DISABLE_VERBOSE_STRINGS) #if defined(__GNUC__) /* This style of variable argument macros is a gcc extension */ #define infof(x...) /*ignore*/ #else /* C99 compilers could use this if we could detect them */ /*#define infof(...) */ /* Cast the args to void to make them a noop, side effects notwithstanding */ #define infof (void) #endif #else #define infof Curl_infof #endif #define failf Curl_failf #define CLIENTWRITE_BODY 1 #define CLIENTWRITE_HEADER 2 #define CLIENTWRITE_BOTH (CLIENTWRITE_BODY|CLIENTWRITE_HEADER) CURLcode Curl_client_write(struct SessionHandle *data, int type, char *ptr, size_t len); /* internal read-function, does plain socket, SSL and krb4 */ int Curl_read(struct connectdata *conn, curl_socket_t sockfd, char *buf, size_t buffersize, ssize_t *n); /* internal write-function, does plain socket, SSL and krb4 */ CURLcode Curl_write(struct connectdata *conn, curl_socket_t sockfd, void *mem, size_t len, ssize_t *written); /* the function used to output verbose information */ int Curl_debug(struct SessionHandle *handle, curl_infotype type, char *data, size_t size, struct connectdata *conn); #endif criticalmass-1.0.0.orig/curl/lib/timeval.c0000644000175000017500000000650610265631023017724 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: timeval.c,v 1.24 2004/12/17 18:32:41 giva Exp $ ***************************************************************************/ #include "timeval.h" #ifndef HAVE_GETTIMEOFDAY #ifdef WIN32 #include #include static int gettimeofday(struct timeval *tp, void *nothing) { #ifdef WITHOUT_MM_LIB SYSTEMTIME st; time_t tt; struct tm tmtm; /* mktime converts local to UTC */ GetLocalTime (&st); tmtm.tm_sec = st.wSecond; tmtm.tm_min = st.wMinute; tmtm.tm_hour = st.wHour; tmtm.tm_mday = st.wDay; tmtm.tm_mon = st.wMonth - 1; tmtm.tm_year = st.wYear - 1900; tmtm.tm_isdst = -1; tt = mktime (&tmtm); tp->tv_sec = tt; tp->tv_usec = st.wMilliseconds * 1000; #else /** ** The earlier time calculations using GetLocalTime ** had a time resolution of 10ms.The timeGetTime, part ** of multimedia apis offer a better time resolution ** of 1ms.Need to link against winmm.lib for this **/ unsigned long Ticks = 0; unsigned long Sec =0; unsigned long Usec = 0; Ticks = timeGetTime(); Sec = Ticks/1000; Usec = (Ticks - (Sec*1000))*1000; tp->tv_sec = Sec; tp->tv_usec = Usec; #endif /* WITHOUT_MM_LIB */ (void)nothing; return 0; } #else /* WIN32 */ /* non-win32 version of Curl_gettimeofday() */ static int gettimeofday(struct timeval *tp, void *nothing) { (void)nothing; /* we don't support specific time-zones */ tp->tv_sec = (long)time(NULL); tp->tv_usec = 0; return 0; } #endif /* WIN32 */ #endif /* HAVE_GETTIMEOFDAY */ /* Return the current time in a timeval struct */ struct timeval curlx_tvnow(void) { struct timeval now; (void)gettimeofday(&now, NULL); return now; } /* * Make sure that the first argument is the more recent time, as otherwise * we'll get a weird negative time-diff back... * * Returns: the time difference in number of milliseconds. */ long curlx_tvdiff(struct timeval newer, struct timeval older) { return (newer.tv_sec-older.tv_sec)*1000+ (newer.tv_usec-older.tv_usec)/1000; } /* * Same as curlx_tvdiff but with full usec resolution. * * Returns: the time difference in seconds with subsecond resolution. */ double curlx_tvdiff_secs(struct timeval newer, struct timeval older) { return (double)(newer.tv_sec-older.tv_sec)+ (double)(newer.tv_usec-older.tv_usec)/1000000.0; } /* return the number of seconds in the given input timeval struct */ long Curl_tvlong(struct timeval t1) { return t1.tv_sec; } criticalmass-1.0.0.orig/curl/lib/timeval.h0000644000175000017500000000454310265631023017730 0ustar danieldaniel#ifndef __TIMEVAL_H #define __TIMEVAL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: timeval.h,v 1.20 2004/12/17 17:49:10 giva Exp $ ***************************************************************************/ /* * CAUTION: this header is designed to work when included by the app-side * as well as the library. Do not mix with library internals! */ #include "setup.h" #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #include #endif #ifndef HAVE_GETTIMEOFDAY #if !defined(_WINSOCKAPI_) && !defined(__MINGW32__) && !defined(_AMIGASF) && \ !defined(__LCC__) && !defined(__WATCOMC__) struct timeval { long tv_sec; long tv_usec; }; #endif #endif struct timeval curlx_tvnow(void); /* * Make sure that the first argument (t1) is the more recent time and t2 is * the older time, as otherwise you get a weird negative time-diff back... * * Returns: the time difference in number of milliseconds. */ long curlx_tvdiff(struct timeval t1, struct timeval t2); /* * Same as curlx_tvdiff but with full usec resolution. * * Returns: the time difference in seconds with subsecond resolution. */ double curlx_tvdiff_secs(struct timeval t1, struct timeval t2); long Curl_tvlong(struct timeval t1); /* These two defines below exist to provide the older API for library internals only. */ #define Curl_tvnow() curlx_tvnow() #define Curl_tvdiff(x,y) curlx_tvdiff(x,y) #define Curl_tvdiff_secs(x,y) curlx_tvdiff_secs(x,y) #endif criticalmass-1.0.0.orig/curl/lib/setup.h0000644000175000017500000001676410265631023017437 0ustar danieldaniel#ifndef __SETUP_H #define __SETUP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: setup.h,v 1.90 2005/05/07 13:57:07 bagder Exp $ ***************************************************************************/ #ifdef HTTP_ONLY #define CURL_DISABLE_FTP #define CURL_DISABLE_LDAP #define CURL_DISABLE_TELNET #define CURL_DISABLE_DICT #define CURL_DISABLE_FILE #define CURL_DISABLE_GOPHER #endif /* HTTP_ONLY */ #if !defined(WIN32) && defined(__WIN32__) /* This should be a good Borland fix. */ #define WIN32 #endif #if !defined(WIN32) && defined(_WIN32) /* This works for VS2005 on x64 */ #define WIN32 #endif #ifdef HAVE_CONFIG_H #include "config.h" /* the configure script results */ #else #ifdef _WIN32_WCE #include "config-win32ce.h" #else #ifdef WIN32 /* hand-modified win32 config.h! */ #include "config-win32.h" #endif /* WIN32 */ #endif /* WIN32_WCE */ #endif /* HAVE_CONFIG_H */ #ifdef macintosh /* hand-modified MacOS config.h! */ #include "config-mac.h" #endif #ifdef AMIGA /* hand-modified AmigaOS config.h! */ #include "amigaos.h" #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #if !defined(__cplusplus) && !defined(__BEOS__) && !defined(typedef_bool) typedef unsigned char bool; #define typedef_bool #endif #ifdef HAVE_LONGLONG #define LONG_LONG long long #define ENABLE_64BIT #else #ifdef _MSC_VER #define LONG_LONG __int64 #define ENABLE_64BIT #endif /* _MSC_VER */ #endif /* HAVE_LONGLONG */ #ifndef SIZEOF_CURL_OFF_T /* If we don't know the size here, we assume a conservative size: 4. When building libcurl, the actual size of this variable should be define in the config*.h file. */ #define SIZEOF_CURL_OFF_T 4 #endif /* We set up our internal prefered (CURL_)FORMAT_OFF_T here */ #if SIZEOF_CURL_OFF_T > 4 #define FORMAT_OFF_T "lld" #else #define FORMAT_OFF_T "ld" #endif /* SIZEOF_CURL_OFF_T */ #ifndef _REENTRANT /* Solaris needs _REENTRANT set for a few function prototypes and things to appear in the #include files. We need to #define it before all #include files. Unixware needs it to build proper reentrant code. Others may also need it. */ #define _REENTRANT #endif #include #ifdef HAVE_ASSERT_H #include #endif #include #ifdef __TANDEM /* for nsr-tandem-nsk systems */ #include #endif #ifndef STDC_HEADERS /* no standard C headers! */ #include #endif #if defined(CURLDEBUG) && defined(HAVE_ASSERT_H) #define curlassert(x) assert(x) #else /* does nothing without CURLDEBUG defined */ #define curlassert(x) #endif #ifdef MSG_NOSIGNAL /* If we have the MSG_NOSIGNAL define, we make sure to use that in the forth argument to send() and recv() */ #define SEND_4TH_ARG MSG_NOSIGNAL #define HAVE_MSG_NOSIGNAL 1 /* we have MSG_NOSIGNAL */ #else #define SEND_4TH_ARG 0 #endif /* MSG_NOSIGNAL */ /* To make large file support transparent even on Windows */ #if defined(WIN32) && (SIZEOF_CURL_OFF_T > 4) #include /* must come first before we redefine stat() */ #include #define lseek(x,y,z) _lseeki64(x, y, z) #define struct_stat struct _stati64 #define stat(file,st) _stati64(file,st) #define fstat(fd,st) _fstati64(fd,st) #else #define struct_stat struct stat #endif /* Win32 with large file support */ /* Below we define four functions. They should 1. close a socket 2. read from a socket 3. write to a socket 4. set the SIGALRM signal timeout 5. set dir/file naming defines */ #ifdef WIN32 #ifndef WIN32_LEAN_AND_MEAN #define WIN32_LEAN_AND_MEAN /* Prevent including in */ #endif /* WIN32_LEAN_AND_MEAN */ #ifdef HAVE_WINSOCK2_H #include /* required by telnet.c */ #endif #if defined(ENABLE_IPV6) || defined(USE_SSLEAY) #include #endif #if !defined(__GNUC__) || defined(__MINGW32__) #define sclose(x) closesocket(x) /* Since Windows doesn't have/use the POSIX prototype for send() and recv(), we typecast the third argument in the macros to avoid compiler warnings. */ #define sread(x,y,z) recv(x,y,(int)(z), SEND_4TH_ARG) #define swrite(x,y,z) (size_t)send(x,y, (int)(z), SEND_4TH_ARG) #undef HAVE_ALARM #else /* gcc-for-win is still good :) */ #define sclose(x) close(x) #define sread(x,y,z) recv(x,y,z, SEND_4TH_ARG) #define swrite(x,y,z) send(x,y,z, SEND_4TH_ARG) #define HAVE_ALARM #endif /* !GNU or mingw */ #define DIR_CHAR "\\" #define DOT_CHAR "_" #else /* WIN32 */ #ifdef DJGPP #define sclose(x) close_s(x) #define sread(x,y,z) read_s(x,y,z) #define swrite(x,y,z) write_s(x,y,z) #define select(n,r,w,x,t) select_s(n,r,w,x,t) #define IOCTL_3_ARGS #include #ifdef word #undef word #endif #else /* DJGPP */ #ifdef __BEOS__ #define sclose(x) closesocket(x) #define sread(x,y,z) (ssize_t)recv(x,y,z, SEND_4TH_ARG) #define swrite(x,y,z) (ssize_t)send(x,y,z, SEND_4TH_ARG) #else /* __BEOS__ */ #define sclose(x) close(x) #define sread(x,y,z) recv(x,y,z, SEND_4TH_ARG) #define swrite(x,y,z) send(x,y,z, SEND_4TH_ARG) #endif /* __BEOS__ */ #define HAVE_ALARM #endif /* DJGPP */ #ifdef _AMIGASF #undef HAVE_ALARM #undef sclose #define sclose(x) CloseSocket(x) #endif #define DIR_CHAR "/" #define DOT_CHAR "." #ifdef DJGPP #undef DOT_CHAR #define DOT_CHAR "_" #endif #ifndef fileno /* sunos 4 have this as a macro! */ int fileno( FILE *stream); #endif #endif /* WIN32 */ /* now typedef our socket type */ #ifdef WIN32 typedef SOCKET curl_socket_t; #define CURL_SOCKET_BAD INVALID_SOCKET #else typedef int curl_socket_t; #define CURL_SOCKET_BAD -1 #endif #if defined(ENABLE_IPV6) && defined(USE_ARES) #error "ares does not yet support IPv6. Disable IPv6 or ares and rebuild" #endif #if defined(WIN32) && !defined(__CYGWIN__) && !defined(USE_ARES) && \ !defined(__LCC__) /* lcc-win32 doesn't have _beginthreadex() */ #ifdef ENABLE_IPV6 #define USE_THREADING_GETADDRINFO #else #define USE_THREADING_GETHOSTBYNAME /* Cygwin uses alarm() function */ #endif #endif #ifdef mpeix #define IOCTL_3_ARGS #endif #ifdef NETWARE #undef HAVE_ALARM #endif #if defined(HAVE_LIBIDN) && defined(HAVE_TLD_H) /* The lib was present and the tld.h header (which is missing in libidn 0.3.X but we only work with libidn 0.4.1 or later) */ #define USE_LIBIDN #endif #ifndef SIZEOF_TIME_T /* assume default size of time_t to be 32 bit */ #define SIZEOF_TIME_T 4 #endif #define LIBIDN_REQUIRED_VERSION "0.4.1" #ifdef __UCLIBC__ #define HAVE_INET_NTOA_R_2_ARGS 1 #endif #if defined(USE_GNUTLS) || defined(USE_SSLEAY) #define USE_SSL /* Either OpenSSL || GnuTLS */ #endif #if defined(USE_SSLEAY) || defined(USE_WINDOWS_SSPI) #define USE_NTLM #endif #ifdef CURLDEBUG #define DEBUGF(x) x #else #define DEBUGF(x) #endif #endif /* __CONFIG_H */ criticalmass-1.0.0.orig/curl/lib/makefile.amiga0000755000175000017500000000154310265631023020673 0ustar danieldaniel# # $VER: LibcURL Makefile for AmigaOS ... # # change the follow to where you have the AmiTCP SDK v4.3 includes: ATCPSDKI= /GG/netinclude CC = gcc CFLAGS = -I$(ATCPSDKI) -m68020-60 -noixemul -I. -I../include -W -Wall OBJS = amigaos.c base64.c connect.c content_encoding.c cookie.c dict.c easy.c \ escape.c file.c formdata.c ftp.c getenv.c getinfo.c hash.c hostip.c \ hostip4.c hostsyn.c http.c http_chunks.c http_digest.c \ http_negotiate.c http_ntlm.c if2ip.c inet_ntop.c inet_pton.c krb4.c \ ldap.c llist.c md5.c memdebug.c mprintf.c multi.c netrc.c parsedate.c \ progress.c security.c select.c sendf.c share.c speedcheck.c ssluse.c \ strequal.c strtok.c telnet.c timeval.c transfer.c url.c version.c \ sslgen.c gtls.c all: $(OBJS:.c=.o) ar cru libcurl.a $(OBJS:.c=.o) ranlib libcurl.a install: $(INSTALL) -c ./libcurl.a /lib/libcurl.a criticalmass-1.0.0.orig/curl/lib/telnet.c0000644000175000017500000010603110265631023017550 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: telnet.c,v 1.73 2005/03/15 07:48:45 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_TELNET /* -- WIN32 approved -- */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #if defined(WIN32) #include #include #else #ifdef HAVE_SYS_SOCKET_H #include #endif #include #include #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #endif #include "urldata.h" #include #include "transfer.h" #include "sendf.h" #include "telnet.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #define TELOPTS #define TELCMDS #include "arpa_telnet.h" #include "memory.h" #include "select.h" /* The last #include file should be: */ #include "memdebug.h" #define SUBBUFSIZE 512 #define CURL_SB_CLEAR(x) x->subpointer = x->subbuffer; #define CURL_SB_TERM(x) { x->subend = x->subpointer; CURL_SB_CLEAR(x); } #define CURL_SB_ACCUM(x,c) \ if (x->subpointer < (x->subbuffer+sizeof x->subbuffer)) { \ *x->subpointer++ = (c); \ } #define CURL_SB_GET(x) ((*x->subpointer++)&0xff) #define CURL_SB_PEEK(x) ((*x->subpointer)&0xff) #define CURL_SB_EOF(x) (x->subpointer >= x->subend) #define CURL_SB_LEN(x) (x->subend - x->subpointer) #ifdef WIN32 typedef FARPROC WSOCK2_FUNC; static CURLcode check_wsock2 ( struct SessionHandle *data ); #endif static void telrcv(struct connectdata *, unsigned char *inbuf, /* Data received from socket */ ssize_t count); /* Number of bytes received */ static void printoption(struct SessionHandle *data, const char *direction, int cmd, int option); static void negotiate(struct connectdata *); static void send_negotiation(struct connectdata *, int cmd, int option); static void set_local_option(struct connectdata *, int cmd, int option); static void set_remote_option(struct connectdata *, int cmd, int option); static void printsub(struct SessionHandle *data, int direction, unsigned char *pointer, size_t length); static void suboption(struct connectdata *); /* For negotiation compliant to RFC 1143 */ #define CURL_NO 0 #define CURL_YES 1 #define CURL_WANTYES 2 #define CURL_WANTNO 3 #define CURL_EMPTY 0 #define CURL_OPPOSITE 1 /* * Telnet receiver states for fsm */ typedef enum { CURL_TS_DATA = 0, CURL_TS_IAC, CURL_TS_WILL, CURL_TS_WONT, CURL_TS_DO, CURL_TS_DONT, CURL_TS_CR, CURL_TS_SB, /* sub-option collection */ CURL_TS_SE /* looking for sub-option end */ } TelnetReceive; struct TELNET { int please_negotiate; int already_negotiated; int us[256]; int usq[256]; int us_preferred[256]; int him[256]; int himq[256]; int him_preferred[256]; char subopt_ttype[32]; /* Set with suboption TTYPE */ char subopt_xdisploc[128]; /* Set with suboption XDISPLOC */ struct curl_slist *telnet_vars; /* Environment variables */ /* suboptions */ char subbuffer[SUBBUFSIZE]; char *subpointer, *subend; /* buffer for sub-options */ TelnetReceive telrcv_state; }; #ifdef WIN32 static CURLcode check_wsock2 ( struct SessionHandle *data ) { int err; WORD wVersionRequested; WSADATA wsaData; curlassert(data); /* telnet requires at least WinSock 2.0 so ask for it. */ wVersionRequested = MAKEWORD(2, 0); err = WSAStartup(wVersionRequested, &wsaData); /* We must've called this once already, so this call */ /* should always succeed. But, just in case... */ if (err != 0) { failf(data,"WSAStartup failed (%d)",err); return CURLE_FAILED_INIT; } /* We have to have a WSACleanup call for every successful */ /* WSAStartup call. */ WSACleanup(); /* Check that our version is supported */ if (LOBYTE(wsaData.wVersion) != LOBYTE(wVersionRequested) || HIBYTE(wsaData.wVersion) != HIBYTE(wVersionRequested)) { /* Our version isn't supported */ failf(data,"insufficient winsock version to support " "telnet"); return CURLE_FAILED_INIT; } /* Our version is supported */ return CURLE_OK; } #endif static CURLcode init_telnet(struct connectdata *conn) { struct TELNET *tn; tn = (struct TELNET *)calloc(1, sizeof(struct TELNET)); if(!tn) return CURLE_OUT_OF_MEMORY; conn->proto.telnet = (void *)tn; /* make us known */ tn->telrcv_state = CURL_TS_DATA; /* Init suboptions */ CURL_SB_CLEAR(tn); /* Set the options we want by default */ tn->us_preferred[CURL_TELOPT_BINARY] = CURL_YES; tn->us_preferred[CURL_TELOPT_SGA] = CURL_YES; tn->him_preferred[CURL_TELOPT_BINARY] = CURL_YES; tn->him_preferred[CURL_TELOPT_SGA] = CURL_YES; return CURLE_OK; } static void negotiate(struct connectdata *conn) { int i; struct TELNET *tn = (struct TELNET *)conn->proto.telnet; for(i = 0;i < CURL_NTELOPTS;i++) { if(tn->us_preferred[i] == CURL_YES) set_local_option(conn, i, CURL_YES); if(tn->him_preferred[i] == CURL_YES) set_remote_option(conn, i, CURL_YES); } } static void printoption(struct SessionHandle *data, const char *direction, int cmd, int option) { const char *fmt; const char *opt; if (data->set.verbose) { if (cmd == CURL_IAC) { if (CURL_TELCMD_OK(option)) infof(data, "%s IAC %s\n", direction, CURL_TELCMD(option)); else infof(data, "%s IAC %d\n", direction, option); } else { fmt = (cmd == CURL_WILL) ? "WILL" : (cmd == CURL_WONT) ? "WONT" : (cmd == CURL_DO) ? "DO" : (cmd == CURL_DONT) ? "DONT" : 0; if (fmt) { if (CURL_TELOPT_OK(option)) opt = CURL_TELOPT(option); else if (option == CURL_TELOPT_EXOPL) opt = "EXOPL"; else opt = NULL; if(opt) infof(data, "%s %s %s\n", direction, fmt, opt); else infof(data, "%s %s %d\n", direction, fmt, option); } else infof(data, "%s %d %d\n", direction, cmd, option); } } } static void send_negotiation(struct connectdata *conn, int cmd, int option) { unsigned char buf[3]; buf[0] = CURL_IAC; buf[1] = cmd; buf[2] = option; (void)swrite(conn->sock[FIRSTSOCKET], (char *)buf, 3); printoption(conn->data, "SENT", cmd, option); } static void set_remote_option(struct connectdata *conn, int option, int newstate) { struct TELNET *tn = (struct TELNET *)conn->proto.telnet; if(newstate == CURL_YES) { switch(tn->him[option]) { case CURL_NO: tn->him[option] = CURL_WANTYES; send_negotiation(conn, CURL_DO, option); break; case CURL_YES: /* Already enabled */ break; case CURL_WANTNO: switch(tn->himq[option]) { case CURL_EMPTY: /* Already negotiating for CURL_YES, queue the request */ tn->himq[option] = CURL_OPPOSITE; break; case CURL_OPPOSITE: /* Error: already queued an enable request */ break; } break; case CURL_WANTYES: switch(tn->himq[option]) { case CURL_EMPTY: /* Error: already negotiating for enable */ break; case CURL_OPPOSITE: tn->himq[option] = CURL_EMPTY; break; } break; } } else /* NO */ { switch(tn->him[option]) { case CURL_NO: /* Already disabled */ break; case CURL_YES: tn->him[option] = CURL_WANTNO; send_negotiation(conn, CURL_DONT, option); break; case CURL_WANTNO: switch(tn->himq[option]) { case CURL_EMPTY: /* Already negotiating for NO */ break; case CURL_OPPOSITE: tn->himq[option] = CURL_EMPTY; break; } break; case CURL_WANTYES: switch(tn->himq[option]) { case CURL_EMPTY: tn->himq[option] = CURL_OPPOSITE; break; case CURL_OPPOSITE: break; } break; } } } static void rec_will(struct connectdata *conn, int option) { struct TELNET *tn = (struct TELNET *)conn->proto.telnet; switch(tn->him[option]) { case CURL_NO: if(tn->him_preferred[option] == CURL_YES) { tn->him[option] = CURL_YES; send_negotiation(conn, CURL_DO, option); } else { send_negotiation(conn, CURL_DONT, option); } break; case CURL_YES: /* Already enabled */ break; case CURL_WANTNO: switch(tn->himq[option]) { case CURL_EMPTY: /* Error: DONT answered by WILL */ tn->him[option] = CURL_NO; break; case CURL_OPPOSITE: /* Error: DONT answered by WILL */ tn->him[option] = CURL_YES; tn->himq[option] = CURL_EMPTY; break; } break; case CURL_WANTYES: switch(tn->himq[option]) { case CURL_EMPTY: tn->him[option] = CURL_YES; break; case CURL_OPPOSITE: tn->him[option] = CURL_WANTNO; tn->himq[option] = CURL_EMPTY; send_negotiation(conn, CURL_DONT, option); break; } break; } } static void rec_wont(struct connectdata *conn, int option) { struct TELNET *tn = (struct TELNET *)conn->proto.telnet; switch(tn->him[option]) { case CURL_NO: /* Already disabled */ break; case CURL_YES: tn->him[option] = CURL_NO; send_negotiation(conn, CURL_DONT, option); break; case CURL_WANTNO: switch(tn->himq[option]) { case CURL_EMPTY: tn->him[option] = CURL_NO; break; case CURL_OPPOSITE: tn->him[option] = CURL_WANTYES; tn->himq[option] = CURL_EMPTY; send_negotiation(conn, CURL_DO, option); break; } break; case CURL_WANTYES: switch(tn->himq[option]) { case CURL_EMPTY: tn->him[option] = CURL_NO; break; case CURL_OPPOSITE: tn->him[option] = CURL_NO; tn->himq[option] = CURL_EMPTY; break; } break; } } static void set_local_option(struct connectdata *conn, int option, int newstate) { struct TELNET *tn = (struct TELNET *)conn->proto.telnet; if(newstate == CURL_YES) { switch(tn->us[option]) { case CURL_NO: tn->us[option] = CURL_WANTYES; send_negotiation(conn, CURL_WILL, option); break; case CURL_YES: /* Already enabled */ break; case CURL_WANTNO: switch(tn->usq[option]) { case CURL_EMPTY: /* Already negotiating for CURL_YES, queue the request */ tn->usq[option] = CURL_OPPOSITE; break; case CURL_OPPOSITE: /* Error: already queued an enable request */ break; } break; case CURL_WANTYES: switch(tn->usq[option]) { case CURL_EMPTY: /* Error: already negotiating for enable */ break; case CURL_OPPOSITE: tn->usq[option] = CURL_EMPTY; break; } break; } } else /* NO */ { switch(tn->us[option]) { case CURL_NO: /* Already disabled */ break; case CURL_YES: tn->us[option] = CURL_WANTNO; send_negotiation(conn, CURL_WONT, option); break; case CURL_WANTNO: switch(tn->usq[option]) { case CURL_EMPTY: /* Already negotiating for NO */ break; case CURL_OPPOSITE: tn->usq[option] = CURL_EMPTY; break; } break; case CURL_WANTYES: switch(tn->usq[option]) { case CURL_EMPTY: tn->usq[option] = CURL_OPPOSITE; break; case CURL_OPPOSITE: break; } break; } } } static void rec_do(struct connectdata *conn, int option) { struct TELNET *tn = (struct TELNET *)conn->proto.telnet; switch(tn->us[option]) { case CURL_NO: if(tn->us_preferred[option] == CURL_YES) { tn->us[option] = CURL_YES; send_negotiation(conn, CURL_WILL, option); } else { send_negotiation(conn, CURL_WONT, option); } break; case CURL_YES: /* Already enabled */ break; case CURL_WANTNO: switch(tn->usq[option]) { case CURL_EMPTY: /* Error: DONT answered by WILL */ tn->us[option] = CURL_NO; break; case CURL_OPPOSITE: /* Error: DONT answered by WILL */ tn->us[option] = CURL_YES; tn->usq[option] = CURL_EMPTY; break; } break; case CURL_WANTYES: switch(tn->usq[option]) { case CURL_EMPTY: tn->us[option] = CURL_YES; break; case CURL_OPPOSITE: tn->us[option] = CURL_WANTNO; tn->himq[option] = CURL_EMPTY; send_negotiation(conn, CURL_WONT, option); break; } break; } } static void rec_dont(struct connectdata *conn, int option) { struct TELNET *tn = (struct TELNET *)conn->proto.telnet; switch(tn->us[option]) { case CURL_NO: /* Already disabled */ break; case CURL_YES: tn->us[option] = CURL_NO; send_negotiation(conn, CURL_WONT, option); break; case CURL_WANTNO: switch(tn->usq[option]) { case CURL_EMPTY: tn->us[option] = CURL_NO; break; case CURL_OPPOSITE: tn->us[option] = CURL_WANTYES; tn->usq[option] = CURL_EMPTY; send_negotiation(conn, CURL_WILL, option); break; } break; case CURL_WANTYES: switch(tn->usq[option]) { case CURL_EMPTY: tn->us[option] = CURL_NO; break; case CURL_OPPOSITE: tn->us[option] = CURL_NO; tn->usq[option] = CURL_EMPTY; break; } break; } } static void printsub(struct SessionHandle *data, int direction, /* '<' or '>' */ unsigned char *pointer, /* where suboption data is */ size_t length) /* length of suboption data */ { unsigned int i = 0; if (data->set.verbose) { if (direction) { infof(data, "%s IAC SB ", (direction == '<')? "RCVD":"SENT"); if (length >= 3) { int j; i = pointer[length-2]; j = pointer[length-1]; if (i != CURL_IAC || j != CURL_SE) { infof(data, "(terminated by "); if (CURL_TELOPT_OK(i)) infof(data, "%s ", CURL_TELOPT(i)); else if (CURL_TELCMD_OK(i)) infof(data, "%s ", CURL_TELCMD(i)); else infof(data, "%d ", i); if (CURL_TELOPT_OK(j)) infof(data, "%s", CURL_TELOPT(j)); else if (CURL_TELCMD_OK(j)) infof(data, "%s", CURL_TELCMD(j)); else infof(data, "%d", j); infof(data, ", not IAC SE!) "); } } length -= 2; } if (length < 1) { infof(data, "(Empty suboption?)"); return; } if (CURL_TELOPT_OK(pointer[0])) { switch(pointer[0]) { case CURL_TELOPT_TTYPE: case CURL_TELOPT_XDISPLOC: case CURL_TELOPT_NEW_ENVIRON: infof(data, "%s", CURL_TELOPT(pointer[0])); break; default: infof(data, "%s (unsupported)", CURL_TELOPT(pointer[0])); break; } } else infof(data, "%d (unknown)", pointer[i]); switch(pointer[1]) { case CURL_TELQUAL_IS: infof(data, " IS"); break; case CURL_TELQUAL_SEND: infof(data, " SEND"); break; case CURL_TELQUAL_INFO: infof(data, " INFO/REPLY"); break; case CURL_TELQUAL_NAME: infof(data, " NAME"); break; } switch(pointer[0]) { case CURL_TELOPT_TTYPE: case CURL_TELOPT_XDISPLOC: pointer[length] = 0; infof(data, " \"%s\"", &pointer[2]); break; case CURL_TELOPT_NEW_ENVIRON: if(pointer[1] == CURL_TELQUAL_IS) { infof(data, " "); for(i = 3;i < length;i++) { switch(pointer[i]) { case CURL_NEW_ENV_VAR: infof(data, ", "); break; case CURL_NEW_ENV_VALUE: infof(data, " = "); break; default: infof(data, "%c", pointer[i]); break; } } } break; default: for (i = 2; i < length; i++) infof(data, " %.2x", pointer[i]); break; } if (direction) { infof(data, "\n"); } } } static CURLcode check_telnet_options(struct connectdata *conn) { struct curl_slist *head; char option_keyword[128]; char option_arg[256]; char *buf; struct SessionHandle *data = conn->data; struct TELNET *tn = (struct TELNET *)conn->proto.telnet; /* Add the user name as an environment variable if it was given on the command line */ if(conn->bits.user_passwd) { snprintf(option_arg, sizeof(option_arg), "USER,%s", conn->user); tn->telnet_vars = curl_slist_append(tn->telnet_vars, option_arg); tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES; } for(head = data->set.telnet_options; head; head=head->next) { if(sscanf(head->data, "%127[^= ]%*[ =]%255s", option_keyword, option_arg) == 2) { /* Terminal type */ if(curl_strequal(option_keyword, "TTYPE")) { strncpy(tn->subopt_ttype, option_arg, 31); tn->subopt_ttype[31] = 0; /* String termination */ tn->us_preferred[CURL_TELOPT_TTYPE] = CURL_YES; continue; } /* Display variable */ if(curl_strequal(option_keyword, "XDISPLOC")) { strncpy(tn->subopt_xdisploc, option_arg, 127); tn->subopt_xdisploc[127] = 0; /* String termination */ tn->us_preferred[CURL_TELOPT_XDISPLOC] = CURL_YES; continue; } /* Environment variable */ if(curl_strequal(option_keyword, "NEW_ENV")) { buf = strdup(option_arg); if(!buf) return CURLE_OUT_OF_MEMORY; tn->telnet_vars = curl_slist_append(tn->telnet_vars, buf); tn->us_preferred[CURL_TELOPT_NEW_ENVIRON] = CURL_YES; continue; } failf(data, "Unknown telnet option %s", head->data); return CURLE_UNKNOWN_TELNET_OPTION; } else { failf(data, "Syntax error in telnet option: %s", head->data); return CURLE_TELNET_OPTION_SYNTAX; } } return CURLE_OK; } /* * suboption() * * Look at the sub-option buffer, and try to be helpful to the other * side. */ static void suboption(struct connectdata *conn) { struct curl_slist *v; unsigned char temp[2048]; size_t len; size_t tmplen; char varname[128]; char varval[128]; struct SessionHandle *data = conn->data; struct TELNET *tn = (struct TELNET *)conn->proto.telnet; printsub(data, '<', (unsigned char *)tn->subbuffer, CURL_SB_LEN(tn)+2); switch (CURL_SB_GET(tn)) { case CURL_TELOPT_TTYPE: len = strlen(tn->subopt_ttype) + 4 + 2; snprintf((char *)temp, sizeof(temp), "%c%c%c%c%s%c%c", CURL_IAC, CURL_SB, CURL_TELOPT_TTYPE, CURL_TELQUAL_IS, tn->subopt_ttype, CURL_IAC, CURL_SE); (void)swrite(conn->sock[FIRSTSOCKET], (char *)temp, len); printsub(data, '>', &temp[2], len-2); break; case CURL_TELOPT_XDISPLOC: len = strlen(tn->subopt_xdisploc) + 4 + 2; snprintf((char *)temp, sizeof(temp), "%c%c%c%c%s%c%c", CURL_IAC, CURL_SB, CURL_TELOPT_XDISPLOC, CURL_TELQUAL_IS, tn->subopt_xdisploc, CURL_IAC, CURL_SE); (void)swrite(conn->sock[FIRSTSOCKET], (char *)temp, len); printsub(data, '>', &temp[2], len-2); break; case CURL_TELOPT_NEW_ENVIRON: snprintf((char *)temp, sizeof(temp), "%c%c%c%c", CURL_IAC, CURL_SB, CURL_TELOPT_NEW_ENVIRON, CURL_TELQUAL_IS); len = 4; for(v = tn->telnet_vars;v;v = v->next) { tmplen = (strlen(v->data) + 1); /* Add the variable only if it fits */ if(len + tmplen < (int)sizeof(temp)-6) { sscanf(v->data, "%127[^,],%127s", varname, varval); snprintf((char *)&temp[len], sizeof(temp) - len, "%c%s%c%s", CURL_NEW_ENV_VAR, varname, CURL_NEW_ENV_VALUE, varval); len += tmplen; } } snprintf((char *)&temp[len], sizeof(temp) - len, "%c%c", CURL_IAC, CURL_SE); len += 2; (void)swrite(conn->sock[FIRSTSOCKET], (char *)temp, len); printsub(data, '>', &temp[2], len-2); break; } return; } static void telrcv(struct connectdata *conn, unsigned char *inbuf, /* Data received from socket */ ssize_t count) /* Number of bytes received */ { unsigned char c; int in = 0; struct SessionHandle *data = conn->data; struct TELNET *tn = (struct TELNET *)conn->proto.telnet; while(count--) { c = inbuf[in++]; switch (tn->telrcv_state) { case CURL_TS_CR: tn->telrcv_state = CURL_TS_DATA; if (c == '\0') { break; /* Ignore \0 after CR */ } Curl_client_write(data, CLIENTWRITE_BODY, (char *)&c, 1); continue; case CURL_TS_DATA: if (c == CURL_IAC) { tn->telrcv_state = CURL_TS_IAC; break; } else if(c == '\r') { tn->telrcv_state = CURL_TS_CR; } Curl_client_write(data, CLIENTWRITE_BODY, (char *)&c, 1); continue; case CURL_TS_IAC: process_iac: switch (c) { case CURL_WILL: tn->telrcv_state = CURL_TS_WILL; continue; case CURL_WONT: tn->telrcv_state = CURL_TS_WONT; continue; case CURL_DO: tn->telrcv_state = CURL_TS_DO; continue; case CURL_DONT: tn->telrcv_state = CURL_TS_DONT; continue; case CURL_SB: CURL_SB_CLEAR(tn); tn->telrcv_state = CURL_TS_SB; continue; case CURL_IAC: Curl_client_write(data, CLIENTWRITE_BODY, (char *)&c, 1); break; case CURL_DM: case CURL_NOP: case CURL_GA: default: printoption(data, "RCVD", CURL_IAC, c); break; } tn->telrcv_state = CURL_TS_DATA; continue; case CURL_TS_WILL: printoption(data, "RCVD", CURL_WILL, c); tn->please_negotiate = 1; rec_will(conn, c); tn->telrcv_state = CURL_TS_DATA; continue; case CURL_TS_WONT: printoption(data, "RCVD", CURL_WONT, c); tn->please_negotiate = 1; rec_wont(conn, c); tn->telrcv_state = CURL_TS_DATA; continue; case CURL_TS_DO: printoption(data, "RCVD", CURL_DO, c); tn->please_negotiate = 1; rec_do(conn, c); tn->telrcv_state = CURL_TS_DATA; continue; case CURL_TS_DONT: printoption(data, "RCVD", CURL_DONT, c); tn->please_negotiate = 1; rec_dont(conn, c); tn->telrcv_state = CURL_TS_DATA; continue; case CURL_TS_SB: if (c == CURL_IAC) { tn->telrcv_state = CURL_TS_SE; } else { CURL_SB_ACCUM(tn,c); } continue; case CURL_TS_SE: if (c != CURL_SE) { if (c != CURL_IAC) { /* * This is an error. We only expect to get * "IAC IAC" or "IAC SE". Several things may * have happend. An IAC was not doubled, the * IAC SE was left off, or another option got * inserted into the suboption are all possibilities. * If we assume that the IAC was not doubled, * and really the IAC SE was left off, we could * get into an infinate loop here. So, instead, * we terminate the suboption, and process the * partial suboption if we can. */ CURL_SB_ACCUM(tn, (unsigned char)CURL_IAC); CURL_SB_ACCUM(tn, c); tn->subpointer -= 2; CURL_SB_TERM(tn); printoption(data, "In SUBOPTION processing, RCVD", CURL_IAC, c); suboption(conn); /* handle sub-option */ tn->telrcv_state = CURL_TS_IAC; goto process_iac; } CURL_SB_ACCUM(tn,c); tn->telrcv_state = CURL_TS_SB; } else { CURL_SB_ACCUM(tn, (unsigned char)CURL_IAC); CURL_SB_ACCUM(tn, (unsigned char)CURL_SE); tn->subpointer -= 2; CURL_SB_TERM(tn); suboption(conn); /* handle sub-option */ tn->telrcv_state = CURL_TS_DATA; } break; } } } CURLcode Curl_telnet_done(struct connectdata *conn, CURLcode status) { struct TELNET *tn = (struct TELNET *)conn->proto.telnet; (void)status; /* unused */ curl_slist_free_all(tn->telnet_vars); free(conn->proto.telnet); conn->proto.telnet = NULL; return CURLE_OK; } CURLcode Curl_telnet(struct connectdata *conn, bool *done) { CURLcode code; struct SessionHandle *data = conn->data; curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; #ifdef WIN32 HMODULE wsock2; WSOCK2_FUNC close_event_func; WSOCK2_FUNC create_event_func; WSOCK2_FUNC event_select_func; WSOCK2_FUNC enum_netevents_func; WSAEVENT event_handle; WSANETWORKEVENTS events; HANDLE stdin_handle; HANDLE objs[2]; DWORD obj_count; DWORD wait_timeout; DWORD waitret; DWORD readfile_read; #else int interval_ms; struct pollfd pfd[2]; #endif ssize_t nread; bool keepon = TRUE; char *buf = data->state.buffer; struct TELNET *tn; *done = TRUE; /* uncontionally */ code = init_telnet(conn); if(code) return code; tn = (struct TELNET *)conn->proto.telnet; code = check_telnet_options(conn); if(code) return code; #ifdef WIN32 /* ** This functionality only works with WinSock >= 2.0. So, ** make sure have it. */ code = check_wsock2(data); if (code) return code; /* OK, so we have WinSock 2.0. We need to dynamically */ /* load ws2_32.dll and get the function pointers we need. */ wsock2 = LoadLibrary("WS2_32.DLL"); if (wsock2 == NULL) { failf(data,"failed to load WS2_32.DLL (%d)",GetLastError()); return CURLE_FAILED_INIT; } /* Grab a pointer to WSACreateEvent */ create_event_func = GetProcAddress(wsock2,"WSACreateEvent"); if (create_event_func == NULL) { failf(data,"failed to find WSACreateEvent function (%d)", GetLastError()); FreeLibrary(wsock2); return CURLE_FAILED_INIT; } /* And WSACloseEvent */ close_event_func = GetProcAddress(wsock2,"WSACloseEvent"); if (create_event_func == NULL) { failf(data,"failed to find WSACloseEvent function (%d)", GetLastError()); FreeLibrary(wsock2); return CURLE_FAILED_INIT; } /* And WSAEventSelect */ event_select_func = GetProcAddress(wsock2,"WSAEventSelect"); if (event_select_func == NULL) { failf(data,"failed to find WSAEventSelect function (%d)", GetLastError()); FreeLibrary(wsock2); return CURLE_FAILED_INIT; } /* And WSAEnumNetworkEvents */ enum_netevents_func = GetProcAddress(wsock2,"WSAEnumNetworkEvents"); if (enum_netevents_func == NULL) { failf(data,"failed to find WSAEnumNetworkEvents function (%d)", GetLastError()); FreeLibrary(wsock2); return CURLE_FAILED_INIT; } /* We want to wait for both stdin and the socket. Since ** the select() function in winsock only works on sockets ** we have to use the WaitForMultipleObjects() call. */ /* First, create a sockets event object */ event_handle = (WSAEVENT)create_event_func(); if (event_handle == WSA_INVALID_EVENT) { failf(data,"WSACreateEvent failed (%d)",WSAGetLastError()); FreeLibrary(wsock2); return CURLE_FAILED_INIT; } /* The get the Windows file handle for stdin */ stdin_handle = GetStdHandle(STD_INPUT_HANDLE); /* Create the list of objects to wait for */ objs[0] = event_handle; objs[1] = stdin_handle; /* Tell winsock what events we want to listen to */ if(event_select_func(sockfd, event_handle, FD_READ|FD_CLOSE) == SOCKET_ERROR) { close_event_func(event_handle); FreeLibrary(wsock2); return 0; } /* If stdin_handle is a pipe, use PeekNamedPipe() method to check it, else use the old WaitForMultipleObjects() way */ if(GetFileType(stdin_handle) == FILE_TYPE_PIPE) { /* Don't wait for stdin_handle, just wait for event_handle */ obj_count = 1; /* Check stdin_handle per 100 milliseconds */ wait_timeout = 100; } else { obj_count = 2; wait_timeout = INFINITE; } /* Keep on listening and act on events */ while(keepon) { waitret = WaitForMultipleObjects(obj_count, objs, FALSE, wait_timeout); switch(waitret) { case WAIT_TIMEOUT: { unsigned char outbuf[2]; int out_count = 0; ssize_t bytes_written; char *buffer = buf; while(1) { if(!PeekNamedPipe(stdin_handle, NULL, 0, NULL, &readfile_read, NULL)) { keepon = FALSE; break; } nread = readfile_read; if(!nread) break; if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer), &readfile_read, NULL)) { keepon = FALSE; break; } nread = readfile_read; while(nread--) { outbuf[0] = *buffer++; out_count = 1; if(outbuf[0] == CURL_IAC) outbuf[out_count++] = CURL_IAC; Curl_write(conn, conn->sock[FIRSTSOCKET], outbuf, out_count, &bytes_written); } } } break; case WAIT_OBJECT_0 + 1: { unsigned char outbuf[2]; int out_count = 0; ssize_t bytes_written; char *buffer = buf; if(!ReadFile(stdin_handle, buf, sizeof(data->state.buffer), &readfile_read, NULL)) { keepon = FALSE; break; } nread = readfile_read; while(nread--) { outbuf[0] = *buffer++; out_count = 1; if(outbuf[0] == CURL_IAC) outbuf[out_count++] = CURL_IAC; Curl_write(conn, conn->sock[FIRSTSOCKET], outbuf, out_count, &bytes_written); } } break; case WAIT_OBJECT_0: if(enum_netevents_func(sockfd, event_handle, &events) != SOCKET_ERROR) { if(events.lNetworkEvents & FD_READ) { /* This reallu OUGHT to check its return code. */ (void)Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread); telrcv(conn, (unsigned char *)buf, nread); fflush(stdout); /* Negotiate if the peer has started negotiating, otherwise don't. We don't want to speak telnet with non-telnet servers, like POP or SMTP. */ if(tn->please_negotiate && !tn->already_negotiated) { negotiate(conn); tn->already_negotiated = 1; } } if(events.lNetworkEvents & FD_CLOSE) { keepon = FALSE; } } break; } } /* We called WSACreateEvent, so call WSACloseEvent */ if (close_event_func(event_handle) == FALSE) { infof(data,"WSACloseEvent failed (%d)",WSAGetLastError()); } /* "Forget" pointers into the library we're about to free */ create_event_func = NULL; close_event_func = NULL; event_select_func = NULL; enum_netevents_func = NULL; /* We called LoadLibrary, so call FreeLibrary */ if (!FreeLibrary(wsock2)) infof(data,"FreeLibrary(wsock2) failed (%d)",GetLastError()); #else pfd[0].fd = sockfd; pfd[0].events = POLLIN; pfd[1].fd = 0; pfd[1].events = POLLIN; interval_ms = 1 * 1000; while (keepon) { switch (Curl_poll(pfd, 2, interval_ms)) { case -1: /* error, stop reading */ keepon = FALSE; continue; case 0: /* timeout */ break; default: /* read! */ if(pfd[1].revents & POLLIN) { /* read from stdin */ unsigned char outbuf[2]; int out_count = 0; ssize_t bytes_written; char *buffer = buf; nread = read(0, buf, 255); while(nread--) { outbuf[0] = *buffer++; out_count = 1; if(outbuf[0] == CURL_IAC) outbuf[out_count++] = CURL_IAC; Curl_write(conn, conn->sock[FIRSTSOCKET], outbuf, out_count, &bytes_written); } } if(pfd[0].revents & POLLIN) { /* This OUGHT to check the return code... */ (void)Curl_read(conn, sockfd, buf, BUFSIZE - 1, &nread); /* if we receive 0 or less here, the server closed the connection and we bail out from this! */ if (nread <= 0) { keepon = FALSE; break; } telrcv(conn, (unsigned char *)buf, nread); /* Negotiate if the peer has started negotiating, otherwise don't. We don't want to speak telnet with non-telnet servers, like POP or SMTP. */ if(tn->please_negotiate && !tn->already_negotiated) { negotiate(conn); tn->already_negotiated = 1; } } } if(data->set.timeout) { struct timeval now; /* current time */ now = Curl_tvnow(); if(Curl_tvdiff(now, conn->created)/1000 >= data->set.timeout) { failf(data, "Time-out"); code = CURLE_OPERATION_TIMEOUTED; keepon = FALSE; } } } #endif /* mark this as "no further transfer wanted" */ Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL); return code; } #endif criticalmass-1.0.0.orig/curl/lib/telnet.h0000644000175000017500000000240610265631023017556 0ustar danieldaniel#ifndef __TELNET_H #define __TELNET_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: telnet.h,v 1.13 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ #ifndef CURL_DISABLE_TELNET CURLcode Curl_telnet(struct connectdata *conn, bool *done); CURLcode Curl_telnet_done(struct connectdata *conn, CURLcode); #endif #endif criticalmass-1.0.0.orig/curl/lib/share.c0000644000175000017500000001304710265631023017363 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: share.c,v 1.22 2004/12/05 23:59:32 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #include #include "urldata.h" #include "share.h" #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" CURLSH * curl_share_init(void) { struct Curl_share *share = (struct Curl_share *)malloc(sizeof(struct Curl_share)); if (share) { memset (share, 0, sizeof(struct Curl_share)); share->specifier |= (1<dirty) /* don't allow setting options while one or more handles are already using this share */ return CURLSHE_IN_USE; va_start(param, option); switch(option) { case CURLSHOPT_SHARE: /* this is a type this share will share */ type = va_arg(param, int); share->specifier |= (1<hostcache) { share->hostcache = Curl_mk_dnscache(); if(!share->hostcache) return CURLSHE_NOMEM; } break; #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) case CURL_LOCK_DATA_COOKIE: if (!share->cookies) { share->cookies = Curl_cookie_init(NULL, NULL, NULL, TRUE ); if(!share->cookies) return CURLSHE_NOMEM; } break; #endif /* CURL_DISABLE_HTTP */ case CURL_LOCK_DATA_SSL_SESSION: /* not supported (yet) */ case CURL_LOCK_DATA_CONNECT: /* not supported (yet) */ default: return CURLSHE_BAD_OPTION; } break; case CURLSHOPT_UNSHARE: /* this is a type this share will no longer share */ type = va_arg(param, int); share->specifier &= ~(1<hostcache) { Curl_hash_destroy(share->hostcache); share->hostcache = NULL; } break; #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) case CURL_LOCK_DATA_COOKIE: if (share->cookies) { Curl_cookie_cleanup(share->cookies); share->cookies = NULL; } break; #endif /* CURL_DISABLE_HTTP */ case CURL_LOCK_DATA_SSL_SESSION: break; case CURL_LOCK_DATA_CONNECT: break; default: return CURLSHE_BAD_OPTION; } break; case CURLSHOPT_LOCKFUNC: lockfunc = va_arg(param, curl_lock_function); share->lockfunc = lockfunc; break; case CURLSHOPT_UNLOCKFUNC: unlockfunc = va_arg(param, curl_unlock_function); share->unlockfunc = unlockfunc; break; case CURLSHOPT_USERDATA: ptr = va_arg(param, void *); share->clientdata = ptr; break; default: return CURLSHE_BAD_OPTION; } return CURLSHE_OK; } CURLSHcode curl_share_cleanup(CURLSH *sh) { struct Curl_share *share = (struct Curl_share *)sh; if (share == NULL) return CURLSHE_INVALID; if(share->lockfunc) share->lockfunc(NULL, CURL_LOCK_DATA_SHARE, CURL_LOCK_ACCESS_SINGLE, share->clientdata); if (share->dirty) { if(share->unlockfunc) share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata); return CURLSHE_IN_USE; } if(share->hostcache) Curl_hash_destroy(share->hostcache); #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) if(share->cookies) Curl_cookie_cleanup(share->cookies); #endif /* CURL_DISABLE_HTTP */ if(share->unlockfunc) share->unlockfunc(NULL, CURL_LOCK_DATA_SHARE, share->clientdata); free(share); return CURLSHE_OK; } CURLSHcode Curl_share_lock(struct SessionHandle *data, curl_lock_data type, curl_lock_access accesstype) { struct Curl_share *share = data->share; if (share == NULL) return CURLSHE_INVALID; if(share->specifier & (1<lockfunc) /* only call this if set! */ share->lockfunc(data, type, accesstype, share->clientdata); } /* else if we don't share this, pretend successful lock */ return CURLSHE_OK; } CURLSHcode Curl_share_unlock(struct SessionHandle *data, curl_lock_data type) { struct Curl_share *share = data->share; if (share == NULL) return CURLSHE_INVALID; if(share->specifier & (1<unlockfunc) /* only call this if set! */ share->unlockfunc (data, type, share->clientdata); } return CURLSHE_OK; } criticalmass-1.0.0.orig/curl/lib/share.h0000644000175000017500000000324010265631023017362 0ustar danieldaniel#ifndef __CURL_SHARE_H #define __CURL_SHARE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: share.h,v 1.10 2005/01/25 00:06:29 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include "cookie.h" /* this struct is libcurl-private, don't export details */ struct Curl_share { unsigned int specifier; volatile unsigned int dirty; curl_lock_function lockfunc; curl_unlock_function unlockfunc; void *clientdata; struct curl_hash *hostcache; struct CookieInfo *cookies; }; CURLSHcode Curl_share_lock (struct SessionHandle *, curl_lock_data, curl_lock_access); CURLSHcode Curl_share_unlock (struct SessionHandle *, curl_lock_data); #endif /* __CURL_SHARE_H */ criticalmass-1.0.0.orig/curl/lib/memdebug.c0000644000175000017500000001672610265631023020055 0ustar danieldaniel#ifdef CURLDEBUG /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: memdebug.c,v 1.47 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #ifdef HAVE_SYS_SOCKET_H #include #endif #define _MPRINTF_REPLACE #include #include "urldata.h" #include #include #include #ifdef HAVE_UNISTD_H #include #endif #define MEMDEBUG_NODEFINES /* don't redefine the standard functions */ #include "memory.h" #include "memdebug.h" struct memdebug { size_t size; double mem[1]; /* I'm hoping this is the thing with the strictest alignment * requirements. That also means we waste some space :-( */ }; /* * Note that these debug functions are very simple and they are meant to * remain so. For advanced analysis, record a log file and write perl scripts * to analyze them! * * Don't use these with multithreaded test programs! */ #define logfile curl_debuglogfile FILE *curl_debuglogfile; static bool memlimit; /* enable memory limit */ static long memsize; /* set number of mallocs allowed */ /* this sets the log file name */ void curl_memdebug(const char *logname) { if(logname) logfile = fopen(logname, "w"); else logfile = stderr; } /* This function sets the number of malloc() calls that should return successfully! */ void curl_memlimit(long limit) { memlimit = TRUE; memsize = limit; } /* returns TRUE if this isn't allowed! */ static bool countcheck(const char *func, int line, const char *source) { /* if source is NULL, then the call is made internally and this check should not be made */ if(memlimit && source) { if(!memsize) { if(logfile && source) fprintf(logfile, "LIMIT %s:%d %s reached memlimit\n", source, line, func); if(source) fprintf(stderr, "LIMIT %s:%d %s reached memlimit\n", source, line, func); errno = ENOMEM; return TRUE; /* RETURN ERROR! */ } else memsize--; /* countdown */ /* log the countdown */ if(logfile && source) fprintf(logfile, "LIMIT %s:%d %ld ALLOCS left\n", source, line, memsize); } return FALSE; /* allow this */ } void *curl_domalloc(size_t wantedsize, int line, const char *source) { struct memdebug *mem; size_t size; if(countcheck("malloc", line, source)) return NULL; /* alloc at least 64 bytes */ size = sizeof(struct memdebug)+wantedsize; mem=(struct memdebug *)(Curl_cmalloc)(size); if(mem) { /* fill memory with junk */ memset(mem->mem, 0xA5, wantedsize); mem->size = wantedsize; } if(logfile && source) fprintf(logfile, "MEM %s:%d malloc(%zd) = %p\n", source, line, wantedsize, mem ? mem->mem : 0); return (mem ? mem->mem : NULL); } void *curl_docalloc(size_t wanted_elements, size_t wanted_size, int line, const char *source) { struct memdebug *mem; size_t size, user_size; if(countcheck("calloc", line, source)) return NULL; /* alloc at least 64 bytes */ user_size = wanted_size * wanted_elements; size = sizeof(struct memdebug) + user_size; mem = (struct memdebug *)(Curl_cmalloc)(size); if(mem) { /* fill memory with zeroes */ memset(mem->mem, 0, user_size); mem->size = user_size; } if(logfile && source) fprintf(logfile, "MEM %s:%d calloc(%u,%u) = %p\n", source, line, wanted_elements, wanted_size, mem ? mem->mem : 0); return (mem ? mem->mem : NULL); } char *curl_dostrdup(const char *str, int line, const char *source) { char *mem; size_t len; curlassert(str != NULL); if(countcheck("strdup", line, source)) return NULL; len=strlen(str)+1; mem=curl_domalloc(len, 0, NULL); /* NULL prevents logging */ if (mem) memcpy(mem, str, len); if(logfile) fprintf(logfile, "MEM %s:%d strdup(%p) (%zd) = %p\n", source, line, str, len, mem); return mem; } /* We provide a realloc() that accepts a NULL as pointer, which then performs a malloc(). In order to work with ares. */ void *curl_dorealloc(void *ptr, size_t wantedsize, int line, const char *source) { struct memdebug *mem=NULL; size_t size = sizeof(struct memdebug)+wantedsize; if(countcheck("realloc", line, source)) return NULL; if(ptr) mem = (struct memdebug *)((char *)ptr - offsetof(struct memdebug, mem)); mem=(struct memdebug *)(Curl_crealloc)(mem, size); if(logfile) fprintf(logfile, "MEM %s:%d realloc(0x%x, %zd) = %p\n", source, line, ptr, wantedsize, mem?mem->mem:NULL); if(mem) { mem->size = wantedsize; return mem->mem; } return NULL; } void curl_dofree(void *ptr, int line, const char *source) { struct memdebug *mem; curlassert(ptr != NULL); mem = (struct memdebug *)((char *)ptr - offsetof(struct memdebug, mem)); /* destroy */ memset(mem->mem, 0x13, mem->size); /* free for real */ (Curl_cfree)(mem); if(logfile) fprintf(logfile, "MEM %s:%d free(%p)\n", source, line, ptr); } int curl_socket(int domain, int type, int protocol, int line, const char *source) { int sockfd=(socket)(domain, type, protocol); if(logfile && (sockfd!=-1)) fprintf(logfile, "FD %s:%d socket() = %d\n", source, line, sockfd); return sockfd; } int curl_accept(int s, void *saddr, void *saddrlen, int line, const char *source) { struct sockaddr *addr = (struct sockaddr *)saddr; socklen_t *addrlen = (socklen_t *)saddrlen; int sockfd=(accept)(s, addr, addrlen); if(logfile) fprintf(logfile, "FD %s:%d accept() = %d\n", source, line, sockfd); return sockfd; } /* this is our own defined way to close sockets on *ALL* platforms */ int curl_sclose(int sockfd, int line, const char *source) { int res=sclose(sockfd); if(logfile) fprintf(logfile, "FD %s:%d sclose(%d)\n", source, line, sockfd); return res; } FILE *curl_fopen(const char *file, const char *mode, int line, const char *source) { FILE *res=(fopen)(file, mode); if(logfile) fprintf(logfile, "FILE %s:%d fopen(\"%s\",\"%s\") = %p\n", source, line, file, mode, res); return res; } int curl_fclose(FILE *file, int line, const char *source) { int res; curlassert(file != NULL); res=(fclose)(file); if(logfile) fprintf(logfile, "FILE %s:%d fclose(%p)\n", source, line, file); return res; } #else #ifdef VMS int VOID_VAR_MEMDEBUG; #else /* we provide a fake do-nothing function here to avoid compiler warnings */ void curl_memdebug(void) {} #endif /* VMS */ #endif /* CURLDEBUG */ criticalmass-1.0.0.orig/curl/lib/memdebug.h0000644000175000017500000000776510265631023020065 0ustar danieldaniel#ifdef CURLDEBUG #ifndef _CURL_MEDEBUG_H #define _CURL_MEDEBUG_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: memdebug.h,v 1.29 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ /* * CAUTION: this header is designed to work when included by the app-side * as well as the library. Do not mix with library internals! */ #include "setup.h" #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #include #ifdef HAVE_MEMORY_H #include #endif #define logfile curl_debuglogfile extern FILE *logfile; /* memory functions */ CURL_EXTERN void *curl_domalloc(size_t size, int line, const char *source); CURL_EXTERN void *curl_docalloc(size_t elements, size_t size, int line, const char *source); CURL_EXTERN void *curl_dorealloc(void *ptr, size_t size, int line, const char *source); CURL_EXTERN void curl_dofree(void *ptr, int line, const char *source); CURL_EXTERN char *curl_dostrdup(const char *str, int line, const char *source); CURL_EXTERN void curl_memdebug(const char *logname); CURL_EXTERN void curl_memlimit(long limit); /* file descriptor manipulators */ CURL_EXTERN int curl_socket(int domain, int type, int protocol, int line , const char *); CURL_EXTERN int curl_sclose(int sockfd, int, const char *source); CURL_EXTERN int curl_accept(int s, void *addr, void *addrlen, int line, const char *source); /* FILE functions */ CURL_EXTERN FILE *curl_fopen(const char *file, const char *mode, int line, const char *source); CURL_EXTERN int curl_fclose(FILE *file, int line, const char *source); #ifndef MEMDEBUG_NODEFINES /* Set this symbol on the command-line, recompile all lib-sources */ #undef strdup #define strdup(ptr) curl_dostrdup(ptr, __LINE__, __FILE__) #define malloc(size) curl_domalloc(size, __LINE__, __FILE__) #define calloc(nbelem,size) curl_docalloc(nbelem, size, __LINE__, __FILE__) #define realloc(ptr,size) curl_dorealloc(ptr, size, __LINE__, __FILE__) #define free(ptr) curl_dofree(ptr, __LINE__, __FILE__) #define socket(domain,type,protocol)\ curl_socket(domain,type,protocol,__LINE__,__FILE__) #undef accept /* for those with accept as a macro */ #define accept(sock,addr,len)\ curl_accept(sock,addr,len,__LINE__,__FILE__) #define getaddrinfo(host,serv,hint,res) \ curl_dogetaddrinfo(host,serv,hint,res,__LINE__,__FILE__) #define getnameinfo(sa,salen,host,hostlen,serv,servlen,flags) \ curl_dogetnameinfo(sa,salen,host,hostlen,serv,servlen,flags, __LINE__, \ __FILE__) #define freeaddrinfo(data) \ curl_dofreeaddrinfo(data,__LINE__,__FILE__) /* sclose is probably already defined, redefine it! */ #undef sclose #define sclose(sockfd) curl_sclose(sockfd,__LINE__,__FILE__) /* ares-adjusted define: */ #undef closesocket #define closesocket(sockfd) curl_sclose(sockfd,__LINE__,__FILE__) #undef fopen #define fopen(file,mode) curl_fopen(file,mode,__LINE__,__FILE__) #define fclose(file) curl_fclose(file,__LINE__,__FILE__) #endif /* MEMDEBUG_NODEFINES */ #endif /* _CURL_MEDEBUG_H */ #endif /* CURLDEBUG */ criticalmass-1.0.0.orig/curl/lib/ca-bundle.h0000644000175000017500000000004010265631023020105 0ustar danieldaniel/* ca bundle path set in here*/ criticalmass-1.0.0.orig/curl/lib/llist.c0000644000175000017500000000565410265631023017415 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: llist.c,v 1.16 2005/01/25 00:06:29 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include "llist.h" #include "memory.h" /* this must be the last include file */ #include "memdebug.h" void Curl_llist_init(struct curl_llist *l, curl_llist_dtor dtor) { l->size = 0; l->dtor = dtor; l->head = NULL; l->tail = NULL; } struct curl_llist * Curl_llist_alloc(curl_llist_dtor dtor) { struct curl_llist *list; list = (struct curl_llist *)malloc(sizeof(struct curl_llist)); if(NULL == list) return NULL; Curl_llist_init(list, dtor); return list; } /* * Curl_llist_insert_next() returns 1 on success and 0 on failure. */ int Curl_llist_insert_next(struct curl_llist *list, struct curl_llist_element *e, const void *p) { struct curl_llist_element *ne = (struct curl_llist_element *) malloc(sizeof(struct curl_llist_element)); if(!ne) return 0; ne->ptr = (void *) p; if (list->size == 0) { list->head = ne; list->head->prev = NULL; list->head->next = NULL; list->tail = ne; } else { ne->next = e->next; ne->prev = e; if (e->next) { e->next->prev = ne; } else { list->tail = ne; } e->next = ne; } ++list->size; return 1; } int Curl_llist_remove(struct curl_llist *list, struct curl_llist_element *e, void *user) { if (e == NULL || list->size == 0) return 1; if (e == list->head) { list->head = e->next; if (list->head == NULL) list->tail = NULL; else e->next->prev = NULL; } else { e->prev->next = e->next; if (!e->next) list->tail = e->prev; else e->next->prev = e->prev; } list->dtor(user, e->ptr); free(e); --list->size; return 1; } void Curl_llist_destroy(struct curl_llist *list, void *user) { if(list) { while (list->size > 0) Curl_llist_remove(list, list->tail, user); free(list); } } criticalmass-1.0.0.orig/curl/lib/llist.h0000644000175000017500000000412610265631023017413 0ustar danieldaniel#ifndef __LLIST_H #define __LLIST_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: llist.h,v 1.8 2005/01/25 00:06:29 bagder Exp $ ***************************************************************************/ #include "setup.h" #include typedef void (*curl_llist_dtor)(void *, void *); struct curl_llist_element { void *ptr; struct curl_llist_element *prev; struct curl_llist_element *next; }; struct curl_llist { struct curl_llist_element *head; struct curl_llist_element *tail; curl_llist_dtor dtor; size_t size; }; void Curl_llist_init(struct curl_llist *, curl_llist_dtor); struct curl_llist *Curl_llist_alloc(curl_llist_dtor); int Curl_llist_insert_next(struct curl_llist *, struct curl_llist_element *, const void *); int Curl_llist_insert_prev(struct curl_llist *, struct curl_llist_element *, const void *); int Curl_llist_remove(struct curl_llist *, struct curl_llist_element *, void *); int Curl_llist_remove_next(struct curl_llist *, struct curl_llist_element *, void *); size_t Curl_llist_count(struct curl_llist *); void Curl_llist_destroy(struct curl_llist *, void *); #endif criticalmass-1.0.0.orig/curl/lib/connect.c0000644000175000017500000005475710265631023017727 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: connect.c,v 1.135 2005/05/14 21:15:36 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef WIN32 /* headers for non-win32 */ #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include /* may need it */ #endif #ifdef HAVE_NETINET_TCP_H #include /* for TCP_NODELAY */ #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototype, without it, this crashes on macos 68K */ #endif #if (defined(HAVE_FIONBIO) && defined(__NOVELL_LIBC__)) #include #endif #if (defined(NETWARE) && defined(__NOVELL_LIBC__)) #undef in_addr_t #define in_addr_t unsigned long #endif #ifdef VMS #include #include #endif #endif #include #include #include #ifndef TRUE #define TRUE 1 #define FALSE 0 #endif #ifdef WIN32 #include #define EINPROGRESS WSAEINPROGRESS #define EWOULDBLOCK WSAEWOULDBLOCK #define EISCONN WSAEISCONN #define ENOTSOCK WSAENOTSOCK #define ECONNREFUSED WSAECONNREFUSED #endif #include "urldata.h" #include "sendf.h" #include "if2ip.h" #include "strerror.h" #include "connect.h" #include "memory.h" #include "select.h" #include "url.h" /* for Curl_safefree() */ /* The last #include file should be: */ #include "memdebug.h" static bool verifyconnect(curl_socket_t sockfd, int *error); static curl_socket_t singleipconnect(struct connectdata *conn, Curl_addrinfo *ai, /* start connecting to this */ long timeout_ms, bool *connected); /* * Curl_ourerrno() returns the errno (or equivalent) on this platform to * hide platform specific for the function that calls this. */ int Curl_ourerrno(void) { #ifdef WIN32 return (int)GetLastError(); #else return errno; #endif } /* * Curl_nonblock() set the given socket to either blocking or non-blocking * mode based on the 'nonblock' boolean argument. This function is highly * portable. */ int Curl_nonblock(curl_socket_t sockfd, /* operate on this */ int nonblock /* TRUE or FALSE */) { #undef SETBLOCK #define SETBLOCK 0 #ifdef HAVE_O_NONBLOCK /* most recent unix versions */ int flags; flags = fcntl(sockfd, F_GETFL, 0); if (TRUE == nonblock) return fcntl(sockfd, F_SETFL, flags | O_NONBLOCK); else return fcntl(sockfd, F_SETFL, flags & (~O_NONBLOCK)); #undef SETBLOCK #define SETBLOCK 1 #endif #if defined(HAVE_FIONBIO) && (SETBLOCK == 0) /* older unix versions */ int flags; flags = nonblock; return ioctl(sockfd, FIONBIO, &flags); #undef SETBLOCK #define SETBLOCK 2 #endif #if defined(HAVE_IOCTLSOCKET) && (SETBLOCK == 0) /* Windows? */ unsigned long flags; flags = nonblock; return ioctlsocket(sockfd, FIONBIO, &flags); #undef SETBLOCK #define SETBLOCK 3 #endif #if defined(HAVE_IOCTLSOCKET_CASE) && (SETBLOCK == 0) /* presumably for Amiga */ return IoctlSocket(sockfd, FIONBIO, (long)nonblock); #undef SETBLOCK #define SETBLOCK 4 #endif #if defined(HAVE_SO_NONBLOCK) && (SETBLOCK == 0) /* BeOS */ long b = nonblock ? 1 : 0; return setsockopt(sockfd, SOL_SOCKET, SO_NONBLOCK, &b, sizeof(b)); #undef SETBLOCK #define SETBLOCK 5 #endif #ifdef HAVE_DISABLED_NONBLOCKING return 0; /* returns success */ #undef SETBLOCK #define SETBLOCK 6 #endif #if (SETBLOCK == 0) #error "no non-blocking method was found/used/set" #endif } /* * waitconnect() waits for a TCP connect on the given socket for the specified * number if milliseconds. It returns: * 0 fine connect * -1 select() error * 1 select() timeout * 2 select() returned with an error condition fd_set */ #define WAITCONN_CONNECTED 0 #define WAITCONN_SELECT_ERROR -1 #define WAITCONN_TIMEOUT 1 #define WAITCONN_FDSET_ERROR 2 static int waitconnect(curl_socket_t sockfd, /* socket */ long timeout_msec) { int rc; #ifdef mpeix /* Call this function once now, and ignore the results. We do this to "clear" the error state on the socket so that we can later read it reliably. This is reported necessary on the MPE/iX operating system. */ verifyconnect(sockfd, NULL); #endif /* now select() until we get connect or timeout */ rc = Curl_select(CURL_SOCKET_BAD, sockfd, (int)timeout_msec); if(-1 == rc) /* error, no connect here, try next */ return WAITCONN_SELECT_ERROR; else if(0 == rc) /* timeout, no connect today */ return WAITCONN_TIMEOUT; if(rc & CSELECT_ERR) /* error condition caught */ return WAITCONN_FDSET_ERROR; /* we have a connect! */ return WAITCONN_CONNECTED; } static CURLcode bindlocal(struct connectdata *conn, curl_socket_t sockfd) { #ifdef HAVE_INET_NTOA bool bindworked = FALSE; struct SessionHandle *data = conn->data; /************************************************************* * Select device to bind socket to *************************************************************/ if (strlen(data->set.device)<255) { struct Curl_dns_entry *h=NULL; size_t size; char myhost[256] = ""; in_addr_t in; int rc; bool was_iface = FALSE; /* First check if the given name is an IP address */ in=inet_addr(data->set.device); if((in == CURL_INADDR_NONE) && Curl_if2ip(data->set.device, myhost, sizeof(myhost))) { /* * We now have the numerical IPv4-style x.y.z.w in the 'myhost' buffer */ rc = Curl_resolv(conn, myhost, 0, &h); if(rc == CURLRESOLV_PENDING) (void)Curl_wait_for_resolv(conn, &h); if(h) was_iface = TRUE; } if(!was_iface) { /* * This was not an interface, resolve the name as a host name * or IP number */ rc = Curl_resolv(conn, data->set.device, 0, &h); if(rc == CURLRESOLV_PENDING) (void)Curl_wait_for_resolv(conn, &h); if(h) /* we know data->set.device is shorter than the myhost array */ strcpy(myhost, data->set.device); } if(! *myhost) { /* need to fix this h=Curl_gethost(data, getmyhost(*myhost,sizeof(myhost)), hostent_buf, sizeof(hostent_buf)); */ failf(data, "Couldn't bind to '%s'", data->set.device); return CURLE_HTTP_PORT_FAILED; } infof(data, "We bind local end to %s\n", myhost); #ifdef SO_BINDTODEVICE /* I am not sure any other OSs than Linux that provide this feature, and * at the least I cannot test. --Ben * * This feature allows one to tightly bind the local socket to a * particular interface. This will force even requests to other local * interfaces to go out the external interface. * */ if (was_iface) { /* Only bind to the interface when specified as interface, not just as a * hostname or ip address. */ if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, data->set.device, strlen(data->set.device)+1) != 0) { /* printf("Failed to BINDTODEVICE, socket: %d device: %s error: %s\n", sockfd, data->set.device, Curl_strerror(Curl_ourerrno())); */ infof(data, "SO_BINDTODEVICE %s failed\n", data->set.device); /* This is typically "errno 1, error: Operation not permitted" if you're not running as root or another suitable privileged user */ } } #endif in=inet_addr(myhost); if (CURL_INADDR_NONE != in) { if ( h ) { Curl_addrinfo *addr = h->addr; Curl_resolv_unlock(data, h); /* we don't need it anymore after this function has returned */ if( bind(sockfd, addr->ai_addr, (socklen_t)addr->ai_addrlen) >= 0) { /* we succeeded to bind */ #ifdef ENABLE_IPV6 struct sockaddr_in6 add; #else struct sockaddr_in add; #endif bindworked = TRUE; size = sizeof(add); if(getsockname(sockfd, (struct sockaddr *) &add, (socklen_t *)&size)<0) { failf(data, "getsockname() failed"); return CURLE_HTTP_PORT_FAILED; } } if(!bindworked) { data->state.os_errno = Curl_ourerrno(); failf(data, "bind failure: %s", Curl_strerror(conn, data->state.os_errno)); return CURLE_HTTP_PORT_FAILED; } } /* end of if h */ else { failf(data,"could't find my own IP address (%s)", myhost); return CURLE_HTTP_PORT_FAILED; } } /* end of inet_addr */ else { failf(data, "could't find my own IP address (%s)", myhost); return CURLE_HTTP_PORT_FAILED; } return CURLE_OK; } /* end of device selection support */ #else (void)conn; (void)sockfd; #endif /* end of HAVE_INET_NTOA */ return CURLE_HTTP_PORT_FAILED; } /* * verifyconnect() returns TRUE if the connect really has happened. */ static bool verifyconnect(curl_socket_t sockfd, int *error) { bool rc = TRUE; #ifdef SO_ERROR int err = 0; socklen_t errSize = sizeof(err); #ifdef WIN32 /* * In October 2003 we effectively nullified this function on Windows due to * problems with it using all CPU in multi-threaded cases. * * In May 2004, we bring it back to offer more info back on connect failures. * Gisle Vanem could reproduce the former problems with this function, but * could avoid them by adding this SleepEx() call below: * * "I don't have Rational Quantify, but the hint from his post was * ntdll::NtRemoveIoCompletion(). So I'd assume the SleepEx (or maybe * just Sleep(0) would be enough?) would release whatever * mutex/critical-section the ntdll call is waiting on. * * Someone got to verify this on Win-NT 4.0, 2000." */ #ifdef _WIN32_WCE Sleep(0); #else SleepEx(0, FALSE); #endif #endif if( -1 == getsockopt(sockfd, SOL_SOCKET, SO_ERROR, (void *)&err, &errSize)) err = Curl_ourerrno(); #ifdef _WIN32_WCE /* Always returns this error, bug in CE? */ if(WSAENOPROTOOPT==err) err=0; #endif if ((0 == err) || (EISCONN == err)) /* we are connected, awesome! */ rc = TRUE; else /* This wasn't a successful connect */ rc = FALSE; if (error) *error = err; #else (void)sockfd; if (error) *error = Curl_ourerrno(); #endif return rc; } CURLcode Curl_store_ip_addr(struct connectdata *conn) { char addrbuf[256]; Curl_printable_address(conn->ip_addr, addrbuf, sizeof(addrbuf)); /* save the string */ Curl_safefree(conn->ip_addr_str); conn->ip_addr_str = strdup(addrbuf); if(!conn->ip_addr_str) return CURLE_OUT_OF_MEMORY; /* FAIL */ #ifdef PF_INET6 if(conn->ip_addr->ai_family == PF_INET6) conn->bits.ipv6 = TRUE; #endif return CURLE_OK; } /* Used within the multi interface. Try next IP address, return TRUE if no more address exists */ static bool trynextip(struct connectdata *conn, int sockindex, bool *connected) { curl_socket_t sockfd; Curl_addrinfo *ai; if(sockindex != FIRSTSOCKET) return TRUE; /* no next */ /* try the next address */ ai = conn->ip_addr->ai_next; while (ai) { sockfd = singleipconnect(conn, ai, 0L, connected); if(sockfd != CURL_SOCKET_BAD) { /* store the new socket descriptor */ conn->sock[sockindex] = sockfd; conn->ip_addr = ai; Curl_store_ip_addr(conn); return FALSE; } ai = ai->ai_next; } return TRUE; } /* * Curl_is_connected() is used from the multi interface to check if the * firstsocket has connected. */ CURLcode Curl_is_connected(struct connectdata *conn, int sockindex, bool *connected) { int rc; struct SessionHandle *data = conn->data; CURLcode code = CURLE_OK; curl_socket_t sockfd = conn->sock[sockindex]; long allow = DEFAULT_CONNECT_TIMEOUT; long has_passed; curlassert(sockindex >= FIRSTSOCKET && sockindex <= SECONDARYSOCKET); *connected = FALSE; /* a very negative world view is best */ /* Evaluate in milliseconds how much time that has passed */ has_passed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle); /* subtract the most strict timeout of the ones */ if(data->set.timeout && data->set.connecttimeout) { if (data->set.timeout < data->set.connecttimeout) allow = data->set.timeout*1000; else allow = data->set.connecttimeout*1000; } else if(data->set.timeout) { allow = data->set.timeout*1000; } else if(data->set.connecttimeout) { allow = data->set.connecttimeout*1000; } if(has_passed > allow ) { /* time-out, bail out, go home */ failf(data, "Connection time-out after %ld ms", has_passed); return CURLE_OPERATION_TIMEOUTED; } if(conn->bits.tcpconnect) { /* we are connected already! */ *connected = TRUE; return CURLE_OK; } /* check for connect without timeout as we want to return immediately */ rc = waitconnect(sockfd, 0); if(WAITCONN_CONNECTED == rc) { int error; if (verifyconnect(sockfd, &error)) { /* we are connected, awesome! */ *connected = TRUE; return CURLE_OK; } /* nope, not connected for real */ data->state.os_errno = error; infof(data, "Connection failed\n"); if(trynextip(conn, sockindex, connected)) { code = CURLE_COULDNT_CONNECT; } } else if(WAITCONN_TIMEOUT != rc) { int error = 0; /* nope, not connected */ if (WAITCONN_FDSET_ERROR == rc) { verifyconnect(sockfd, &error); data->state.os_errno = error; infof(data, "%s\n",Curl_strerror(conn,error)); } else infof(data, "Connection failed\n"); if(trynextip(conn, sockindex, connected)) { error = Curl_ourerrno(); data->state.os_errno = error; failf(data, "Failed connect to %s:%d; %s", conn->host.name, conn->port, Curl_strerror(conn,error)); code = CURLE_COULDNT_CONNECT; } } /* * If the connection failed here, we should attempt to connect to the "next * address" for the given host. */ return code; } static void tcpnodelay(struct connectdata *conn, curl_socket_t sockfd) { #ifdef TCP_NODELAY struct SessionHandle *data= conn->data; socklen_t onoff = (socklen_t) data->set.tcp_nodelay; if(setsockopt(sockfd, IPPROTO_TCP, TCP_NODELAY, (void *)&onoff, sizeof(onoff)) < 0) infof(data, "Could not set TCP_NODELAY: %s\n", Curl_strerror(conn, Curl_ourerrno())); else infof(data,"TCP_NODELAY set\n"); #else (void)conn; (void)sockfd; #endif } #ifdef SO_NOSIGPIPE /* The preferred method on Mac OS X (10.2 and later) to prevent SIGPIPEs when sending data to a dead peer (instead of relying on the 4th argument to send being MSG_NOSIGNAL). Possibly also existing and in use on other BSD systems? */ static void nosigpipe(struct connectdata *conn, curl_socket_t sockfd) { struct SessionHandle *data= conn->data; int onoff = 1; if(setsockopt(sockfd, SOL_SOCKET, SO_NOSIGPIPE, (void *)&onoff, sizeof(onoff)) < 0) infof(data, "Could not set SO_NOSIGPIPE: %s\n", Curl_strerror(conn, Curl_ourerrno())); } #endif /* singleipconnect() connects to the given IP only, and it may return without having connected if used from the multi interface. */ static curl_socket_t singleipconnect(struct connectdata *conn, Curl_addrinfo *ai, long timeout_ms, bool *connected) { char addr_buf[128]; int rc; int error; bool conected; struct SessionHandle *data = conn->data; curl_socket_t sockfd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); if (sockfd == CURL_SOCKET_BAD) return CURL_SOCKET_BAD; *connected = FALSE; /* default is not connected */ Curl_printable_address(ai, addr_buf, sizeof(addr_buf)); infof(data, " Trying %s... ", addr_buf); if(data->set.tcp_nodelay) tcpnodelay(conn, sockfd); #ifdef SO_NOSIGPIPE nosigpipe(conn, sockfd); #endif if(conn->data->set.device) { /* user selected to bind the outgoing socket to a specified "device" before doing connect */ CURLcode res = bindlocal(conn, sockfd); if(res) { sclose(sockfd); /* close socket and bail out */ return CURL_SOCKET_BAD; } } /* set socket non-blocking */ Curl_nonblock(sockfd, TRUE); rc = connect(sockfd, ai->ai_addr, (socklen_t)ai->ai_addrlen); if(-1 == rc) { error = Curl_ourerrno(); switch (error) { case EINPROGRESS: case EWOULDBLOCK: #if defined(EAGAIN) && EAGAIN != EWOULDBLOCK /* On some platforms EAGAIN and EWOULDBLOCK are the * same value, and on others they are different, hence * the odd #if */ case EAGAIN: #endif rc = waitconnect(sockfd, timeout_ms); break; default: /* unknown error, fallthrough and try another address! */ failf(data, "Failed to connect to %s: %s", addr_buf, Curl_strerror(conn,error)); data->state.os_errno = error; break; } } /* The 'WAITCONN_TIMEOUT == rc' comes from the waitconnect(), and not from connect(). We can be sure of this since connect() cannot return 1. */ if((WAITCONN_TIMEOUT == rc) && (data->state.used_interface == Curl_if_multi)) { /* Timeout when running the multi interface */ return sockfd; } conected = verifyconnect(sockfd, &error); if(!rc && conected) { /* we are connected, awesome! */ *connected = TRUE; /* this is a true connect */ infof(data, "connected\n"); return sockfd; } else if(WAITCONN_TIMEOUT == rc) infof(data, "Timeout\n"); else { data->state.os_errno = error; infof(data, "%s\n", Curl_strerror(conn, error)); } /* connect failed or timed out */ sclose(sockfd); return CURL_SOCKET_BAD; } /* * TCP connect to the given host with timeout, proxy or remote doesn't matter. * There might be more than one IP address to try out. Fill in the passed * pointer with the connected socket. */ CURLcode Curl_connecthost(struct connectdata *conn, /* context */ struct Curl_dns_entry *remotehost, /* use this one */ curl_socket_t *sockconn, /* the connected socket */ Curl_addrinfo **addr, /* the one we used */ bool *connected) /* really connected? */ { struct SessionHandle *data = conn->data; curl_socket_t sockfd = CURL_SOCKET_BAD; int aliasindex; int num_addr; Curl_addrinfo *ai; Curl_addrinfo *curr_addr; struct timeval after; struct timeval before = Curl_tvnow(); /************************************************************* * Figure out what maximum time we have left *************************************************************/ long timeout_ms= DEFAULT_CONNECT_TIMEOUT; long timeout_per_addr; *connected = FALSE; /* default to not connected */ if(data->set.timeout || data->set.connecttimeout) { long has_passed; /* Evaluate in milliseconds how much time that has passed */ has_passed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle); #ifndef min #define min(a, b) ((a) < (b) ? (a) : (b)) #endif /* get the most strict timeout of the ones converted to milliseconds */ if(data->set.timeout && data->set.connecttimeout) { if (data->set.timeout < data->set.connecttimeout) timeout_ms = data->set.timeout*1000; else timeout_ms = data->set.connecttimeout*1000; } else if(data->set.timeout) timeout_ms = data->set.timeout*1000; else timeout_ms = data->set.connecttimeout*1000; /* subtract the passed time */ timeout_ms -= has_passed; if(timeout_ms < 0) { /* a precaution, no need to continue if time already is up */ failf(data, "Connection time-out"); return CURLE_OPERATION_TIMEOUTED; } } /* Max time for each address */ num_addr = Curl_num_addresses(remotehost->addr); timeout_per_addr = timeout_ms / num_addr; ai = remotehost->addr; /* Below is the loop that attempts to connect to all IP-addresses we * know for the given host. One by one until one IP succeeds. */ if(data->state.used_interface == Curl_if_multi) /* don't hang when doing multi */ timeout_per_addr = 0; /* * Connecting with a Curl_addrinfo chain */ for (curr_addr = ai, aliasindex=0; curr_addr; curr_addr = curr_addr->ai_next, aliasindex++) { /* start connecting to the IP curr_addr points to */ sockfd = singleipconnect(conn, curr_addr, timeout_per_addr, connected); if(sockfd != CURL_SOCKET_BAD) break; /* get a new timeout for next attempt */ after = Curl_tvnow(); timeout_ms -= Curl_tvdiff(after, before); if(timeout_ms < 0) { failf(data, "connect() timed out!"); return CURLE_OPERATION_TIMEOUTED; } before = after; } /* end of connect-to-each-address loop */ if (sockfd == CURL_SOCKET_BAD) { /* no good connect was made */ *sockconn = CURL_SOCKET_BAD; failf(data, "couldn't connect to host"); return CURLE_COULDNT_CONNECT; } /* leave the socket in non-blocking mode */ /* store the address we use */ if(addr) *addr = curr_addr; /* allow NULL-pointers to get passed in */ if(sockconn) *sockconn = sockfd; /* the socket descriptor we've connected */ data->info.numconnects++; /* to track the number of connections made */ return CURLE_OK; } criticalmass-1.0.0.orig/curl/lib/connect.h0000644000175000017500000000357610265631023017725 0ustar danieldaniel#ifndef __CONNECT_H #define __CONNECT_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: connect.h,v 1.20 2005/01/29 13:07:17 bagder Exp $ ***************************************************************************/ int Curl_nonblock(curl_socket_t sockfd, /* operate on this */ int nonblock /* TRUE or FALSE */); CURLcode Curl_is_connected(struct connectdata *conn, int sockindex, bool *connected); CURLcode Curl_connecthost(struct connectdata *conn, struct Curl_dns_entry *host, /* connect to this */ curl_socket_t *sockconn, /* not set if error */ Curl_addrinfo **addr, /* the one we used */ bool *connected /* truly connected? */ ); int Curl_ourerrno(void); CURLcode Curl_store_ip_addr(struct connectdata *conn); #define DEFAULT_CONNECT_TIMEOUT 300000 /* milliseconds == five minutes */ #endif criticalmass-1.0.0.orig/curl/lib/config-mac.h0000644000175000017500000000232110265631023020262 0ustar danieldaniel#define OS "mac" #define HAVE_NETINET_IN_H 1 #define HAVE_SYS_SOCKET_H 1 #define HAVE_SYS_SELECT_H 1 #define HAVE_NETDB_H 1 #define HAVE_ARPA_INET_H 1 #define HAVE_UNISTD_H 1 #define HAVE_NET_IF_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_GETTIMEOFDAY 1 #define HAVE_FCNTL_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_ALLOCA_H 1 #define HAVE_TIME_H 1 #define HAVE_STDLIB_H 1 #define HAVE_UTIME_H 1 #define TIME_WITH_SYS_TIME 1 #define HAVE_STRDUP 1 #define HAVE_UTIME 1 #define HAVE_INET_NTOA 1 #define HAVE_SETVBUF 1 #define HAVE_STRFTIME 1 #define HAVE_INET_ADDR 1 #define HAVE_MEMCPY 1 #define HAVE_SELECT 1 #define HAVE_SOCKET 1 //#define HAVE_STRICMP 1 #define HAVE_SIGACTION 1 #ifdef MACOS_SSL_SUPPORT # define USE_SSLEAY 1 # define USE_OPENSSL 1 #endif #define CURL_DISABLE_LDAP 1 #define HAVE_RAND_STATUS 1 #define HAVE_RAND_EGD 1 #define HAVE_FIONBIO 1 #include #include criticalmass-1.0.0.orig/curl/lib/Makefile.riscos0000644000175000017500000000721710265631023021060 0ustar danieldaniel# Makefile for project libcurl # Generated on Sun,13 Jan 2002.16:57:00 by EasyGCC (0.1.3 [beta 2] (3 Jan 2002)) # Contact: easygcc@melotech.co.uk # Project objects: objs = o.base64 o.connect o.cookie o.dict \ o.dllinit o.easy o.escape o.file \ o.formdata o.ftp o.getenv \ o.getinfo o.getpass o.hostip \ o.hostip4 o.hostsyn o.http \ o.http_chunks o.inet_ntop o.inet_pton o.if2ip o.krb4 o.ldap \ o.memdebug o.mprintf o.netrc o.parsedate o.progress \ o.security o.select o.sendf o.speedcheck o.ssluse \ o.strequal o.strtok o.telnet o.timeval \ o.transfer o.url o.version o.strtoofft o.sslgen o.gtls # Compile options: linkopts = -o libcurl compileropts = -mpoke-function-name -IUtilLib: -mthrowback # Project target: libcurl: $(objs) makealf $(linkopts) $(objs) # Static dependancies: o.base64: c.base64 gcc $(compileropts) -c -o base64.o c.base64 o.connect: c.connect gcc $(compileropts) -c -o connect.o c.connect o.cookie: c.cookie gcc $(compileropts) -c -o cookie.o c.cookie o.dict: c.dict gcc $(compileropts) -c -o dict.o c.dict o.dllinit: c.dllinit gcc $(compileropts) -c -o dllinit.o c.dllinit o.easy: c.easy gcc $(compileropts) -c -o easy.o c.easy o.escape: c.escape gcc $(compileropts) -c -o escape.o c.escape o.file: c.file gcc $(compileropts) -c -o file.o c.file o.formdata: c.formdata gcc $(compileropts) -c -o formdata.o c.formdata o.ftp: c.ftp gcc $(compileropts) -c -o ftp.o c.ftp o.getenv: c.getenv gcc $(compileropts) -c -o getenv.o c.getenv o.getinfo: c.getinfo gcc $(compileropts) -c -o getinfo.o c.getinfo o.getpass: c.getpass gcc $(compileropts) -c -o getpass.o c.getpass o.hostip: c.hostip gcc $(compileropts) -c -o hostip.o c.hostip o.hostip4: c.hostip4 gcc $(compileropts) -c -o hostip4.o c.hostip4 o.hostsyn: c.hostsyn gcc $(compileropts) -c -o hostsyn.o c.hostsyn o.http: c.http gcc $(compileropts) -c -o http.o c.http o.http_chunks: c.http_chunks gcc $(compileropts) -c -o http_chunks.o c.http_chunks o.if2ip: c.if2ip gcc $(compileropts) -c -o if2ip.o c.if2ip o.inet_ntop: c.inet_ntop gcc $(compileropts) -c -o inet_ntop.o c.inet_ntop o.inet_pton: c.inet_pton gcc $(compileropts) -c -o inet_pton.o c.inet_pton o.krb4: c.krb4 gcc $(compileropts) -c -o krb4.o c.krb4 o.ldap: c.ldap gcc $(compileropts) -IOpenLDAP: -c -o ldap.o c.ldap o.memdebug: c.memdebug gcc $(compileropts) -c -o memdebug.o c.memdebug o.mprintf: c.mprintf gcc $(compileropts) -c -o mprintf.o c.mprintf o.netrc: c.netrc gcc $(compileropts) -c -o netrc.o c.netrc o.parsedate: c.parsedate gcc $(compileropts) -c -o parsedate.o c.parsedate o.progress: c.progress gcc $(compileropts) -c -o progress.o c.progress o.security: c.security gcc $(compileropts) -c -o security.o c.security o.select: c.select gcc $(compileropts) -c -o select.o c.select o.sendf: c.sendf gcc $(compileropts) -c -o sendf.o c.sendf o.speedcheck: c.speedcheck gcc $(compileropts) -c -o speedcheck.o c.speedcheck o.gtls: c.gtls gcc $(compileropts) -c -o gtls.o c.gtls o.sslgen: c.sslgen gcc $(compileropts) -c -o sslgen.o c.sslgen o.ssluse: c.ssluse gcc $(compileropts) -c -o ssluse.o c.ssluse o.strequal: c.strequal gcc $(compileropts) -c -o strequal.o c.strequal o.strtok: c.strtok gcc $(compileropts) -c -o strtok.o c.strtok o.strtoofft: c.strtoofft gcc $(compileropts) -c -o strtoofft.o c.strtoofft o.telnet: c.telnet gcc $(compileropts) -c -o telnet.o c.telnet o.timeval: c.timeval gcc $(compileropts) -c -o timeval.o c.timeval o.transfer: c.transfer gcc $(compileropts) -c -o transfer.o c.transfer o.url: c.url gcc $(compileropts) -c -o url.o c.url o.version: c.version gcc $(compileropts) -c -o version.o c.version criticalmass-1.0.0.orig/curl/lib/progress.c0000644000175000017500000003502210265631023020122 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: progress.c,v 1.77 2004/11/26 14:33:14 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(__EMX__) #include #endif #include #include "urldata.h" #include "sendf.h" #include "progress.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* Provide a string that is 2 + 1 + 2 + 1 + 2 = 8 letters long (plus the zero byte) */ static void time2str(char *r, long t) { long h; if(!t) { strcpy(r, "--:--:--"); return; } h = (t/3600); if(h <= 99) { long m = (t-(h*3600))/60; long s = (t-(h*3600)-(m*60)); snprintf(r, 9, "%2ld:%02ld:%02ld",h,m,s); } else { /* this equals to more than 99 hours, switch to a more suitable output format to fit within the limits. */ if(h/24 <= 999) snprintf(r, 9, "%3ldd %02ldh", h/24, h-(h/24)*24); else snprintf(r, 9, "%7ldd", h/24); } } /* The point of this function would be to return a string of the input data, but never longer than 5 columns (+ one zero byte). Add suffix k, M, G when suitable... */ static char *max5data(curl_off_t bytes, char *max5) { #define ONE_KILOBYTE 1024 #define ONE_MEGABYTE (1024* ONE_KILOBYTE) #define ONE_GIGABYTE (1024* ONE_MEGABYTE) #define ONE_TERRABYTE ((curl_off_t)1024* ONE_GIGABYTE) #define ONE_PETABYTE ((curl_off_t)1024* ONE_TERRABYTE) if(bytes < 100000) { snprintf(max5, 6, "%5" FORMAT_OFF_T, bytes); } else if(bytes < (10000*ONE_KILOBYTE)) { snprintf(max5, 6, "%4" FORMAT_OFF_T "k", (curl_off_t)(bytes/ONE_KILOBYTE)); } else if(bytes < (100*ONE_MEGABYTE)) { /* 'XX.XM' is good as long as we're less than 100 megs */ snprintf(max5, 6, "%2d.%0dM", (int)(bytes/ONE_MEGABYTE), (int)(bytes%ONE_MEGABYTE)/(ONE_MEGABYTE/10) ); } #if SIZEOF_CURL_OFF_T > 4 else if(bytes < ( (curl_off_t)10000*ONE_MEGABYTE)) /* 'XXXXM' is good until we're at 10000MB or above */ snprintf(max5, 6, "%4" FORMAT_OFF_T "M", (curl_off_t)(bytes/ONE_MEGABYTE)); else if(bytes < (curl_off_t)100*ONE_GIGABYTE) /* 10000 MB - 100 GB, we show it as XX.XG */ snprintf(max5, 6, "%2d.%0dG", (int)(bytes/ONE_GIGABYTE), (int)(bytes%ONE_GIGABYTE)/(ONE_GIGABYTE/10) ); else if(bytes < (curl_off_t)10000 * ONE_GIGABYTE) /* up to 10000GB, display without decimal: XXXXG */ snprintf(max5, 6, "%4dG", (int)(bytes/ONE_GIGABYTE)); else if(bytes < (curl_off_t)10000 * ONE_TERRABYTE) /* up to 10000TB, display without decimal: XXXXT */ snprintf(max5, 6, "%4dT", (int)(bytes/ONE_TERRABYTE)); else { /* up to 10000PB, display without decimal: XXXXP */ snprintf(max5, 6, "%4dP", (int)(bytes/ONE_PETABYTE)); /* 16384 petabytes (16 exabytes) is maximum a 64 bit number can hold, but this type is signed so 8192PB will be max.*/ } #else else snprintf(max5, 6, "%4" FORMAT_OFF_T "M", (curl_off_t)(bytes/ONE_MEGABYTE)); #endif return max5; } /* New proposed interface, 9th of February 2000: pgrsStartNow() - sets start time pgrsSetDownloadSize(x) - known expected download size pgrsSetUploadSize(x) - known expected upload size pgrsSetDownloadCounter() - amount of data currently downloaded pgrsSetUploadCounter() - amount of data currently uploaded pgrsUpdate() - show progress pgrsDone() - transfer complete */ void Curl_pgrsDone(struct connectdata *conn) { struct SessionHandle *data = conn->data; data->progress.lastshow=0; Curl_pgrsUpdate(conn); /* the final (forced) update */ data->progress.speeder_c = 0; /* reset the progress meter display */ } /* reset all times except redirect */ void Curl_pgrsResetTimes(struct SessionHandle *data) { data->progress.t_nslookup = 0.0; data->progress.t_connect = 0.0; data->progress.t_pretransfer = 0.0; data->progress.t_starttransfer = 0.0; } void Curl_pgrsTime(struct SessionHandle *data, timerid timer) { switch(timer) { default: case TIMER_NONE: /* mistake filter */ break; case TIMER_STARTSINGLE: /* This is set at the start of a single fetch */ data->progress.t_startsingle = Curl_tvnow(); break; case TIMER_NAMELOOKUP: data->progress.t_nslookup = Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_CONNECT: data->progress.t_connect = Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_PRETRANSFER: data->progress.t_pretransfer = Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_STARTTRANSFER: data->progress.t_starttransfer = Curl_tvdiff_secs(Curl_tvnow(), data->progress.t_startsingle); break; case TIMER_POSTRANSFER: /* this is the normal end-of-transfer thing */ break; case TIMER_REDIRECT: data->progress.t_redirect = Curl_tvdiff_secs(Curl_tvnow(), data->progress.start); break; } } void Curl_pgrsStartNow(struct SessionHandle *data) { data->progress.speeder_c = 0; /* reset the progress meter display */ data->progress.start = Curl_tvnow(); } void Curl_pgrsSetDownloadCounter(struct SessionHandle *data, curl_off_t size) { data->progress.downloaded = size; } void Curl_pgrsSetUploadCounter(struct SessionHandle *data, curl_off_t size) { data->progress.uploaded = size; } void Curl_pgrsSetDownloadSize(struct SessionHandle *data, curl_off_t size) { data->progress.size_dl = size; if(size > 0) data->progress.flags |= PGRS_DL_SIZE_KNOWN; else data->progress.flags &= ~PGRS_DL_SIZE_KNOWN; } void Curl_pgrsSetUploadSize(struct SessionHandle *data, curl_off_t size) { data->progress.size_ul = size; if(size > 0) data->progress.flags |= PGRS_UL_SIZE_KNOWN; else data->progress.flags &= ~PGRS_UL_SIZE_KNOWN; } int Curl_pgrsUpdate(struct connectdata *conn) { struct timeval now; int result; char max5[6][10]; int dlpercen=0; int ulpercen=0; int total_percen=0; curl_off_t total_transfer; curl_off_t total_expected_transfer; long timespent; struct SessionHandle *data = conn->data; int nowindex = data->progress.speeder_c% CURR_TIME; int checkindex; int countindex; /* amount of seconds stored in the speeder array */ char time_left[10]; char time_total[10]; char time_spent[10]; long ulestimate=0; long dlestimate=0; long total_estimate; if(data->progress.flags & PGRS_HIDE) ; /* We do enter this function even if we don't wanna see anything, since this is were lots of the calculations are being made that will be used even when not displayed! */ else if(!(data->progress.flags & PGRS_HEADERS_OUT)) { if (!data->progress.callback) { if(conn->resume_from) fprintf(data->set.err, "** Resuming transfer from byte position %" FORMAT_OFF_T "\n", conn->resume_from); fprintf(data->set.err, " %% Total %% Received %% Xferd Average Speed Time Time Time Current\n" " Dload Upload Total Spent Left Speed\n"); } data->progress.flags |= PGRS_HEADERS_OUT; /* headers are shown */ } now = Curl_tvnow(); /* what time is it */ /* The time spent so far (from the start) */ data->progress.timespent = Curl_tvdiff_secs(now, data->progress.start); timespent = (long)data->progress.timespent; /* The average download speed this far */ data->progress.dlspeed = (curl_off_t) ((double)data->progress.downloaded/ (data->progress.timespent>0?data->progress.timespent:1)); /* The average upload speed this far */ data->progress.ulspeed = (curl_off_t) ((double)data->progress.uploaded/ (data->progress.timespent>0?data->progress.timespent:1)); if(data->progress.lastshow == Curl_tvlong(now)) return 0; /* never update this more than once a second if the end isn't reached */ data->progress.lastshow = now.tv_sec; /* Let's do the "current speed" thing, which should use the fastest of the dl/ul speeds. Store the fasted speed at entry 'nowindex'. */ data->progress.speeder[ nowindex ] = data->progress.downloaded>data->progress.uploaded? data->progress.downloaded:data->progress.uploaded; /* remember the exact time for this moment */ data->progress.speeder_time [ nowindex ] = now; /* advance our speeder_c counter, which is increased every time we get here and we expect it to never wrap as 2^32 is a lot of seconds! */ data->progress.speeder_c++; /* figure out how many index entries of data we have stored in our speeder array. With N_ENTRIES filled in, we have about N_ENTRIES-1 seconds of transfer. Imagine, after one second we have filled in two entries, after two seconds we've filled in three entries etc. */ countindex = ((data->progress.speeder_c>=CURR_TIME)? CURR_TIME:data->progress.speeder_c) - 1; /* first of all, we don't do this if there's no counted seconds yet */ if(countindex) { long span_ms; /* Get the index position to compare with the 'nowindex' position. Get the oldest entry possible. While we have less than CURR_TIME entries, the first entry will remain the oldest. */ checkindex = (data->progress.speeder_c>=CURR_TIME)? data->progress.speeder_c%CURR_TIME:0; /* Figure out the exact time for the time span */ span_ms = Curl_tvdiff(now, data->progress.speeder_time[checkindex]); if(0 == span_ms) span_ms=1; /* at least one millisecond MUST have passed */ /* Calculate the average speed the last 'span_ms' milliseconds */ { curl_off_t amount = data->progress.speeder[nowindex]- data->progress.speeder[checkindex]; if(amount > 4294967 /* 0xffffffff/1000 */) /* the 'amount' value is bigger than would fit in 32 bits if multiplied with 1000, so we use the double math for this */ data->progress.current_speed = (curl_off_t) ((double)amount/((double)span_ms/1000.0)); else /* the 'amount' value is small enough to fit within 32 bits even when multiplied with 1000 */ data->progress.current_speed = amount*1000/span_ms; } } else /* the first second we use the main average */ data->progress.current_speed = (data->progress.ulspeed>data->progress.dlspeed)? data->progress.ulspeed:data->progress.dlspeed; if(data->progress.flags & PGRS_HIDE) return 0; else if(data->set.fprogress) { /* There's a callback set, so we call that instead of writing anything ourselves. This really is the way to go. */ result= data->set.fprogress(data->set.progress_client, (double)data->progress.size_dl, (double)data->progress.downloaded, (double)data->progress.size_ul, (double)data->progress.uploaded); if(result) failf(data, "Callback aborted"); return result; } /* Figure out the estimated time of arrival for the upload */ if((data->progress.flags & PGRS_UL_SIZE_KNOWN) && (data->progress.ulspeed>0) && (data->progress.size_ul > 100) ) { ulestimate = (long)(data->progress.size_ul / data->progress.ulspeed); ulpercen = (int)(100*(data->progress.uploaded/100) / (data->progress.size_ul/100) ); } /* ... and the download */ if((data->progress.flags & PGRS_DL_SIZE_KNOWN) && (data->progress.dlspeed>0) && (data->progress.size_dl>100)) { dlestimate = (long)(data->progress.size_dl / data->progress.dlspeed); dlpercen = (int)(100*(data->progress.downloaded/100) / (data->progress.size_dl/100)); } /* Now figure out which of them that is slower and use for the for total estimate! */ total_estimate = ulestimate>dlestimate?ulestimate:dlestimate; /* create the three time strings */ time2str(time_left, total_estimate > 0?(total_estimate - timespent):0); time2str(time_total, total_estimate); time2str(time_spent, timespent); /* Get the total amount of data expected to get transfered */ total_expected_transfer = (data->progress.flags & PGRS_UL_SIZE_KNOWN? data->progress.size_ul:data->progress.uploaded)+ (data->progress.flags & PGRS_DL_SIZE_KNOWN? data->progress.size_dl:data->progress.downloaded); /* We have transfered this much so far */ total_transfer = data->progress.downloaded + data->progress.uploaded; /* Get the percentage of data transfered so far */ if(total_expected_transfer > 100) total_percen=(int)(100*(total_transfer/100) / (total_expected_transfer/100) ); fprintf(data->set.err, "\r%3d %s %3d %s %3d %s %s %s %s %s %s %s", total_percen, /* 3 letters */ /* total % */ max5data(total_expected_transfer, max5[2]), /* total size */ dlpercen, /* 3 letters */ /* rcvd % */ max5data(data->progress.downloaded, max5[0]), /* rcvd size */ ulpercen, /* 3 letters */ /* xfer % */ max5data(data->progress.uploaded, max5[1]), /* xfer size */ max5data(data->progress.dlspeed, max5[3]), /* avrg dl speed */ max5data(data->progress.ulspeed, max5[4]), /* avrg ul speed */ time_total, /* 8 letters */ /* total time */ time_spent, /* 8 letters */ /* time spent */ time_left, /* 8 letters */ /* time left */ max5data(data->progress.current_speed, max5[5]) /* current speed */ ); /* we flush the output stream to make it appear as soon as possible */ fflush(data->set.err); return 0; } criticalmass-1.0.0.orig/curl/lib/progress.h0000644000175000017500000000463510265631023020135 0ustar danieldaniel#ifndef __PROGRESS_H #define __PROGRESS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: progress.h,v 1.21 2004/11/15 11:27:03 bagder Exp $ ***************************************************************************/ #include "timeval.h" typedef enum { TIMER_NONE, TIMER_NAMELOOKUP, TIMER_CONNECT, TIMER_PRETRANSFER, TIMER_STARTTRANSFER, TIMER_POSTRANSFER, TIMER_STARTSINGLE, TIMER_REDIRECT, TIMER_LAST /* must be last */ } timerid; void Curl_pgrsDone(struct connectdata *); void Curl_pgrsStartNow(struct SessionHandle *data); void Curl_pgrsSetDownloadSize(struct SessionHandle *data, curl_off_t size); void Curl_pgrsSetUploadSize(struct SessionHandle *data, curl_off_t size); void Curl_pgrsSetDownloadCounter(struct SessionHandle *data, curl_off_t size); void Curl_pgrsSetUploadCounter(struct SessionHandle *data, curl_off_t size); int Curl_pgrsUpdate(struct connectdata *); void Curl_pgrsResetTimes(struct SessionHandle *data); void Curl_pgrsTime(struct SessionHandle *data, timerid timer); /* Don't show progress for sizes smaller than: */ #define LEAST_SIZE_PROGRESS BUFSIZE #define PROGRESS_DOWNLOAD (1<<0) #define PROGRESS_UPLOAD (1<<1) #define PROGRESS_DOWN_AND_UP (PROGRESS_UPLOAD | PROGRESS_DOWNLOAD) #define PGRS_SHOW_DL (1<<0) #define PGRS_SHOW_UL (1<<1) #define PGRS_DONE_DL (1<<2) #define PGRS_DONE_UL (1<<3) #define PGRS_HIDE (1<<4) #define PGRS_UL_SIZE_KNOWN (1<<5) #define PGRS_DL_SIZE_KNOWN (1<<6) #define PGRS_HEADERS_OUT (1<<7) /* set when the headers have been written */ #endif /* __PROGRESS_H */ criticalmass-1.0.0.orig/curl/lib/config-win32.h0000644000175000017500000001523510265631023020474 0ustar danieldaniel/* config.h. Generated automatically by configure. */ /* config.h.in. Generated automatically from configure.in by autoheader. */ #ifndef __CONFIG_WIN32_H #define __CONFIG_WIN32_H /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE /* #undef _ALL_SOURCE */ #endif /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define if you don't have vprintf but do have _doprnt. */ /* #undef HAVE_DOPRNT */ /* Define if you have the vprintf function. */ #define HAVE_VPRINTF 1 /* Define as the return type of signal handlers (int or void). */ /*#define RETSIGTYPE void */ /* Define to `unsigned' if doesn't define. */ /* #undef size_t */ /* Define this to 'int' if ssize_t is not an available typedefed type */ #define ssize_t int /* Define this to 'int' if socklen_t is not an available typedefed type */ #if !defined(ENABLE_IPV6) && ((_MSC_VER < 1300) || !defined(USE_SSLEAY)) #define socklen_t int #endif /* The size of a `curl_off_t', as computed by sizeof. */ #ifdef SIZEOF_CURL_OFF_T #undef SIZEOF_CURL_OFF_T #endif /* Borland lacks _lseeki64(), so we don't support >2GB files */ #ifdef __BORLANDC__ #define SIZEOF_CURL_OFF_T 4 #else #define SIZEOF_CURL_OFF_T 8 #endif /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both and . */ /* #define TIME_WITH_SYS_TIME 1 */ /* Define cpu-machine-OS */ #define OS "i386-pc-win32" /* The number of bytes in a long double. */ #define SIZEOF_LONG_DOUBLE 16 /* The number of bytes in a long long. */ /* #define SIZEOF_LONG_LONG 8 */ /* Define if you have the gethostbyaddr function. */ #define HAVE_GETHOSTBYADDR 1 /* Define if you have the gethostname function. */ #define HAVE_GETHOSTNAME 1 /* Define if you have the getpass function. */ /*#define HAVE_GETPASS 1*/ /* Define if you have the getservbyname function. */ #define HAVE_GETSERVBYNAME 1 /* Define if you have the gettimeofday function. */ /* #define HAVE_GETTIMEOFDAY 1 */ /* Define if you have the inet_addr function. */ #define HAVE_INET_ADDR 1 /* Define if you have the inet_ntoa function. */ #define HAVE_INET_NTOA 1 /* Define if you have the perror function. */ #define HAVE_PERROR 1 /* Define if you have the select function. */ #define HAVE_SELECT 1 /* Define if you have the socket function. */ #define HAVE_SOCKET 1 /* Define if you have the strcasecmp function. */ /*#define HAVE_STRCASECMP 1*/ /* Define if you have the stricmp function. */ #define HAVE_STRICMP 1 /* Define if you have the strdup function. */ #define HAVE_STRDUP 1 /* Define if you have the strftime function. */ #define HAVE_STRFTIME 1 /* Define if you have the strstr function. */ #define HAVE_STRSTR 1 /* Define if you have the strtoll function. */ #if defined(__MINGW32__) || defined(__WATCOMC__) #define HAVE_STRTOLL 1 #endif /* Define if you have the tcgetattr function. */ /*#define HAVE_TCGETATTR 1*/ /* Define if you have the tcsetattr function. */ /*#define HAVE_TCSETATTR 1*/ /* Define if you have the uname function. */ /*#define HAVE_UNAME 1*/ /* Define if you have utime() */ #ifndef __BORLANDC__ #define HAVE_UTIME 1 #endif /* Define if you have the header file. */ /*#define HAVE_ALLOCA_H 1*/ /* Define if you have the malloc.h file. */ #define HAVE_MALLOC_H 1 /* Define if you have the header file. */ /* #define HAVE_ARPA_INET_H 1 */ /* Define if you have the header file. */ #define HAVE_ASSERT_H 1 /* Define if you have the header file. */ /* #undef HAVE_CRYPTO_H */ /* Define if you have the header file. */ /*#define HAVE_DLFCN_H 1*/ /* Define if you have the header file. */ /* #undef HAVE_ERR_H */ /* Define if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the header file. */ /* #undef HAVE_GETOPT_H */ /* Define if you have the header file. */ /* #define HAVE_NETDB_H 1 */ /* Define if you have the header file. */ /*#define HAVE_NETINET_IN_H 1*/ /* Define if you have the header file. */ /*#define HAVE_SGTTY_H 1*/ /* Define if you have the header file. */ /* #undef HAVE_SSL_H */ /* Define if you have the header file. */ /*#define HAVE_SYS_PARAM_H 1*/ /* Define if you have the header file. */ /* #define HAVE_SYS_SELECT_H 1 */ /* Define if you have the header file. */ /*#define HAVE_SYS_SOCKET_H 1*/ /* Define if you have the header file. */ /* #define HAVE_SYS_SOCKIO_H 1 */ /* Define if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define if you have the header file */ #ifndef __BORLANDC__ #define HAVE_SYS_UTIME_H 1 #endif /* Define if you have the header file. */ #define HAVE_SYS_TYPES_H 1 /* Define if you have the header file. */ /* #define HAVE_TERMIO_H 1 */ /* Define if you have the header file. */ /* #define HAVE_TERMIOS_H 1 */ /* Name of package */ #define PACKAGE "curl" /* Define if you have the header file. */ #define HAVE_IO_H 1 /* Define if you have the header file. */ #define HAVE_TIME_H 1 /* Define if you have the header file. */ #define HAVE_WINSOCK_H 1 /* Define if you have the header file. */ #define HAVE_WINSOCK2_H 1 /* Define if you have the header file. */ #define HAVE_WS2TCPIP_H 1 /* Define if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define if you have the closesocket function. */ #define HAVE_CLOSESOCKET 1 /* Define if you have the setvbuf function. */ #define HAVE_SETVBUF 1 /* Define if you have the RAND_screen function when using SSL */ #define HAVE_RAND_SCREEN 1 /* Define if you have the `RAND_status' function. */ #define HAVE_RAND_STATUS 1 /* Define this to if in_addr_t is not an available typedefed type */ #define in_addr_t unsigned long /* use ioctlsocket() for non-blocking sockets */ #define HAVE_IOCTLSOCKET /* lber dynamic library file */ /* #undef DL_LBER_FILE */ /* Defines set for VS2005 to _not_ deprecate a few functions we use. */ #define _CRT_SECURE_NO_DEPRECATE #define _CRT_NONSTDC_NO_DEPRECATE /* ldap dynamic library file */ #define DL_LDAP_FILE "wldap32.dll" /************************************************* * This section is for compiler specific defines.* *************************************************/ /* Borland and MS don't have this */ #if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 #else #endif #endif criticalmass-1.0.0.orig/curl/lib/strtoofft.c0000644000175000017500000000720110265631023020306 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: strtoofft.c,v 1.7 2004/10/10 03:28:51 bagder Exp $ ***************************************************************************/ #include "setup.h" #include "strtoofft.h" #ifdef NEED_CURL_STRTOLL #include #include #include static int get_char(char c, int base); /** * Emulated version of the strtoll function. This extracts a long long * value from the given input string and returns it. */ curl_off_t curlx_strtoll(const char *nptr, char **endptr, int base) { char *end; int is_negative = 0; int overflow; int i; curl_off_t value = 0; curl_off_t newval; /* Skip leading whitespace. */ end = (char *)nptr; while (isspace((int)end[0])) { end++; } /* Handle the sign, if any. */ if (end[0] == '-') { is_negative = 1; end++; } else if (end[0] == '+') { end++; } else if (end[0] == '\0') { /* We had nothing but perhaps some whitespace -- there was no number. */ if (endptr) { *endptr = end; } return 0; } /* Handle special beginnings, if present and allowed. */ if (end[0] == '0' && end[1] == 'x') { if (base == 16 || base == 0) { end += 2; base = 16; } } else if (end[0] == '0') { if (base == 8 || base == 0) { end++; base = 8; } } /* Matching strtol, if the base is 0 and it doesn't look like * the number is octal or hex, we assume it's base 10. */ if (base == 0) { base = 10; } /* Loop handling digits. */ value = 0; overflow = 0; for (i = get_char(end[0], base); i != -1; end++, i = get_char(end[0], base)) { newval = base * value + i; if (newval < value) { /* We've overflowed. */ overflow = 1; break; } else value = newval; } if (!overflow) { if (is_negative) { /* Fix the sign. */ value *= -1; } } else { if (is_negative) value = CURL_LLONG_MIN; else value = CURL_LLONG_MAX; errno = ERANGE; } if (endptr) *endptr = end; return value; } /** * Returns the value of c in the given base, or -1 if c cannot * be interpreted properly in that base (i.e., is out of range, * is a null, etc.). * * @param c the character to interpret according to base * @param base the base in which to interpret c * * @return the value of c in base, or -1 if c isn't in range */ static int get_char(char c, int base) { int value = -1; if (c <= '9' && c >= '0') { value = c - '0'; } else if (c <= 'Z' && c >= 'A') { value = c - 'A' + 10; } else if (c <= 'z' && c >= 'a') { value = c - 'a' + 10; } if (value >= base) { value = -1; } return value; } #endif /* Only present if we need strtoll, but don't have it. */ criticalmass-1.0.0.orig/curl/lib/strtoofft.h0000644000175000017500000000531610265631023020320 0ustar danieldaniel#ifndef _CURL_STRTOOFFT_H #define _CURL_STRTOOFFT_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: strtoofft.h,v 1.14 2004/12/17 18:33:09 giva Exp $ ***************************************************************************/ /* * CAUTION: this header is designed to work when included by the app-side * as well as the library. Do not mix with library internals! */ #include "setup.h" #include #include /* for the curl_off_t type */ /* Determine what type of file offset conversion handling we wish to use. For * systems with a 32-bit curl_off_t type, we should use strtol. For systems * with a 64-bit curl_off_t type, we should use strtoll if it exists, and if * not, should try to emulate its functionality. At any rate, we define * 'strtoofft' such that it can be used to work with curl_off_t's regardless. */ #if (SIZEOF_CURL_OFF_T > 4) && (SIZEOF_LONG < 8) #if HAVE_STRTOLL #define curlx_strtoofft strtoll #else /* HAVE_STRTOLL */ /* For MSVC7 we can use _strtoi64() which seems to be a strtoll() clone */ #if defined(_MSC_VER) && (_MSC_VER >= 1300) #define curlx_strtoofft _strtoi64 #else /* MSVC7 or later */ curl_off_t curlx_strtoll(const char *nptr, char **endptr, int base); #define curlx_strtoofft curlx_strtoll #define NEED_CURL_STRTOLL #endif /* MSVC7 or later */ #endif /* HAVE_STRTOLL */ #else /* (SIZEOF_CURL_OFF_T > 4) && (SIZEOF_LONG < 8) */ /* simply use strtol() to get numbers, either 32 or 64 bit */ #define curlx_strtoofft strtol #endif #if defined(_MSC_VER) || defined(__WATCOMC__) #define CURL_LLONG_MIN 0x8000000000000000i64 #define CURL_LLONG_MAX 0x7FFFFFFFFFFFFFFFi64 #elif defined(HAVE_LL) #define CURL_LLONG_MIN 0x8000000000000000LL #define CURL_LLONG_MAX 0x7FFFFFFFFFFFFFFFLL #else #define CURL_LLONG_MIN 0x8000000000000000L #define CURL_LLONG_MAX 0x7FFFFFFFFFFFFFFFL #endif #endif criticalmass-1.0.0.orig/curl/lib/getinfo.c0000644000175000017500000001261210265631023017711 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: getinfo.c,v 1.45 2005/04/22 20:48:07 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include "urldata.h" #include "getinfo.h" #include #include #include #include #include "memory.h" #include "sslgen.h" /* Make this the last #include */ #include "memdebug.h" /* * This is supposed to be called in the beginning of a perform() session * and should reset all session-info variables */ CURLcode Curl_initinfo(struct SessionHandle *data) { struct Progress *pro = &data->progress; struct PureInfo *info =&data->info; pro->t_nslookup = 0; pro->t_connect = 0; pro->t_pretransfer = 0; pro->t_starttransfer = 0; pro->timespent = 0; pro->t_redirect = 0; info->httpcode = 0; info->httpversion=0; info->filetime=-1; /* -1 is an illegal time and thus means unknown */ if (info->contenttype) free(info->contenttype); info->contenttype = NULL; info->header_size = 0; info->request_size = 0; info->numconnects = 0; return CURLE_OK; } CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...) { va_list arg; long *param_longp=NULL; double *param_doublep=NULL; char **param_charp=NULL; struct curl_slist **param_slistp=NULL; va_start(arg, info); switch(info&CURLINFO_TYPEMASK) { default: return CURLE_BAD_FUNCTION_ARGUMENT; case CURLINFO_STRING: param_charp = va_arg(arg, char **); if(NULL == param_charp) return CURLE_BAD_FUNCTION_ARGUMENT; break; case CURLINFO_LONG: param_longp = va_arg(arg, long *); if(NULL == param_longp) return CURLE_BAD_FUNCTION_ARGUMENT; break; case CURLINFO_DOUBLE: param_doublep = va_arg(arg, double *); if(NULL == param_doublep) return CURLE_BAD_FUNCTION_ARGUMENT; break; case CURLINFO_SLIST: param_slistp = va_arg(arg, struct curl_slist **); if(NULL == param_slistp) return CURLE_BAD_FUNCTION_ARGUMENT; break; } switch(info) { case CURLINFO_EFFECTIVE_URL: *param_charp = data->change.url?data->change.url:(char *)""; break; case CURLINFO_RESPONSE_CODE: *param_longp = data->info.httpcode; break; case CURLINFO_HTTP_CONNECTCODE: *param_longp = data->info.httpproxycode; break; case CURLINFO_FILETIME: *param_longp = data->info.filetime; break; case CURLINFO_HEADER_SIZE: *param_longp = data->info.header_size; break; case CURLINFO_REQUEST_SIZE: *param_longp = data->info.request_size; break; case CURLINFO_TOTAL_TIME: *param_doublep = data->progress.timespent; break; case CURLINFO_NAMELOOKUP_TIME: *param_doublep = data->progress.t_nslookup; break; case CURLINFO_CONNECT_TIME: *param_doublep = data->progress.t_connect; break; case CURLINFO_PRETRANSFER_TIME: *param_doublep = data->progress.t_pretransfer; break; case CURLINFO_STARTTRANSFER_TIME: *param_doublep = data->progress.t_starttransfer; break; case CURLINFO_SIZE_UPLOAD: *param_doublep = (double)data->progress.uploaded; break; case CURLINFO_SIZE_DOWNLOAD: *param_doublep = (double)data->progress.downloaded; break; case CURLINFO_SPEED_DOWNLOAD: *param_doublep = (double)data->progress.dlspeed; break; case CURLINFO_SPEED_UPLOAD: *param_doublep = (double)data->progress.ulspeed; break; case CURLINFO_SSL_VERIFYRESULT: *param_longp = data->set.ssl.certverifyresult; break; case CURLINFO_CONTENT_LENGTH_DOWNLOAD: *param_doublep = (double)data->progress.size_dl; break; case CURLINFO_CONTENT_LENGTH_UPLOAD: *param_doublep = (double)data->progress.size_ul; break; case CURLINFO_REDIRECT_TIME: *param_doublep = data->progress.t_redirect; break; case CURLINFO_REDIRECT_COUNT: *param_longp = data->set.followlocation; break; case CURLINFO_CONTENT_TYPE: *param_charp = data->info.contenttype; break; case CURLINFO_PRIVATE: *param_charp = data->set.private_data; break; case CURLINFO_HTTPAUTH_AVAIL: *param_longp = data->info.httpauthavail; break; case CURLINFO_PROXYAUTH_AVAIL: *param_longp = data->info.proxyauthavail; break; case CURLINFO_OS_ERRNO: *param_longp = data->state.os_errno; break; case CURLINFO_NUM_CONNECTS: *param_longp = data->info.numconnects; break; case CURLINFO_SSL_ENGINES: *param_slistp = Curl_ssl_engines_list(data); break; default: return CURLE_BAD_FUNCTION_ARGUMENT; } return CURLE_OK; } criticalmass-1.0.0.orig/curl/lib/getinfo.h0000644000175000017500000000236410265631023017721 0ustar danieldaniel#ifndef __GETINFO_H #define __GETINFO_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: getinfo.h,v 1.6 2004/01/07 09:19:35 bagder Exp $ ***************************************************************************/ CURLcode Curl_getinfo(struct SessionHandle *data, CURLINFO info, ...); CURLcode Curl_initinfo(struct SessionHandle *data); #endif criticalmass-1.0.0.orig/curl/lib/dict.c0000644000175000017500000001401210265631023017175 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: dict.c,v 1.39 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_DICT /* -- WIN32 approved -- */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #include #else #ifdef HAVE_SYS_SOCKET_H #include #endif #include #include #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #endif #include "urldata.h" #include #include "transfer.h" #include "sendf.h" #include "progress.h" #include "strequal.h" #include "dict.h" #define _MPRINTF_REPLACE /* use our functions only */ #include CURLcode Curl_dict(struct connectdata *conn, bool *done) { char *word; char *ppath; char *database = NULL; char *strategy = NULL; char *nthdef = NULL; /* This is not part of the protocol, but required by RFC 2229 */ CURLcode result=CURLE_OK; struct SessionHandle *data=conn->data; curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; char *path = conn->path; curl_off_t *bytecount = &conn->bytecount; *done = TRUE; /* unconditionally */ if(conn->bits.user_passwd) { /* AUTH is missing */ } if (strnequal(path, DICT_MATCH, sizeof(DICT_MATCH)-1) || strnequal(path, DICT_MATCH2, sizeof(DICT_MATCH2)-1) || strnequal(path, DICT_MATCH3, sizeof(DICT_MATCH3)-1)) { word = strchr(path, ':'); if (word) { word++; database = strchr(word, ':'); if (database) { *database++ = (char)0; strategy = strchr(database, ':'); if (strategy) { *strategy++ = (char)0; nthdef = strchr(strategy, ':'); if (nthdef) { *nthdef++ = (char)0; } } } } if ((word == NULL) || (*word == (char)0)) { failf(data, "lookup word is missing"); } if ((database == NULL) || (*database == (char)0)) { database = (char *)"!"; } if ((strategy == NULL) || (*strategy == (char)0)) { strategy = (char *)"."; } result = Curl_sendf(sockfd, conn, "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n" "MATCH " "%s " /* database */ "%s " /* strategy */ "%s\r\n" /* word */ "QUIT\r\n", database, strategy, word ); if(result) failf(data, "Failed sending DICT request"); else result = Curl_Transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL); /* no upload */ if(result) return result; } else if (strnequal(path, DICT_DEFINE, sizeof(DICT_DEFINE)-1) || strnequal(path, DICT_DEFINE2, sizeof(DICT_DEFINE2)-1) || strnequal(path, DICT_DEFINE3, sizeof(DICT_DEFINE3)-1)) { word = strchr(path, ':'); if (word) { word++; database = strchr(word, ':'); if (database) { *database++ = (char)0; nthdef = strchr(database, ':'); if (nthdef) { *nthdef++ = (char)0; } } } if ((word == NULL) || (*word == (char)0)) { failf(data, "lookup word is missing"); } if ((database == NULL) || (*database == (char)0)) { database = (char *)"!"; } result = Curl_sendf(sockfd, conn, "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n" "DEFINE " "%s " /* database */ "%s\r\n" /* word */ "QUIT\r\n", database, word); if(result) failf(data, "Failed sending DICT request"); else result = Curl_Transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL); /* no upload */ if(result) return result; } else { ppath = strchr(path, '/'); if (ppath) { int i; ppath++; for (i = 0; ppath[i]; i++) { if (ppath[i] == ':') ppath[i] = ' '; } result = Curl_sendf(sockfd, conn, "CLIENT " LIBCURL_NAME " " LIBCURL_VERSION "\r\n" "%s\r\n" "QUIT\r\n", ppath); if(result) failf(data, "Failed sending DICT request"); else result = Curl_Transfer(conn, FIRSTSOCKET, -1, FALSE, bytecount, -1, NULL); if(result) return result; } } return CURLE_OK; } #endif /*CURL_DISABLE_DICT*/ criticalmass-1.0.0.orig/curl/lib/dict.h0000644000175000017500000000236010265631023017205 0ustar danieldaniel#ifndef __DICT_H #define __DICT_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: dict.h,v 1.12 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ #ifndef CURL_DISABLE_DICT CURLcode Curl_dict(struct connectdata *conn, bool *done); CURLcode Curl_dict_done(struct connectdata *conn); #endif #endif criticalmass-1.0.0.orig/curl/lib/easy.c0000644000175000017500000004364210265631023017226 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: easy.c,v 1.72 2005/04/07 15:27:13 bagder Exp $ ***************************************************************************/ #include "setup.h" /* -- WIN32 approved -- */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #include "strequal.h" #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #include #else #ifdef HAVE_SYS_SOCKET_H #include #endif #include #include #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #endif /* WIN32 ... */ #include "urldata.h" #include #include "transfer.h" #include "sslgen.h" #include "url.h" #include "getinfo.h" #include "hostip.h" #include "share.h" #include "memory.h" #include "progress.h" #include "easyif.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) /* win32_cleanup() is for win32 socket cleanup functionality, the opposite of win32_init() */ static void win32_cleanup(void) { WSACleanup(); } /* win32_init() performs win32 socket initialization to properly setup the stack to allow networking */ static CURLcode win32_init(void) { WORD wVersionRequested; WSADATA wsaData; int err; #ifdef ENABLE_IPV6 wVersionRequested = MAKEWORD(2, 0); #else wVersionRequested = MAKEWORD(1, 1); #endif err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) /* Tell the user that we couldn't find a useable */ /* winsock.dll. */ return CURLE_FAILED_INIT; /* Confirm that the Windows Sockets DLL supports what we need.*/ /* Note that if the DLL supports versions greater */ /* than wVersionRequested, it will still return */ /* wVersionRequested in wVersion. wHighVersion contains the */ /* highest supported version. */ if ( LOBYTE( wsaData.wVersion ) != LOBYTE(wVersionRequested) || HIBYTE( wsaData.wVersion ) != HIBYTE(wVersionRequested) ) { /* Tell the user that we couldn't find a useable */ /* winsock.dll. */ WSACleanup(); return CURLE_FAILED_INIT; } /* The Windows Sockets DLL is acceptable. Proceed. */ return CURLE_OK; } #else /* These functions exist merely to prevent compiler warnings */ static CURLcode win32_init(void) { return CURLE_OK; } static void win32_cleanup(void) { } #endif #ifdef USE_LIBIDN /* * Initialise use of IDNA library. * It falls back to ASCII if $CHARSET isn't defined. This doesn't work for * idna_to_ascii_lz(). */ static void idna_init (void) { #ifdef WIN32 char buf[60]; UINT cp = GetACP(); if (!getenv("CHARSET") && cp > 0) { snprintf(buf, sizeof(buf), "CHARSET=cp%u", cp); putenv(buf); } #else /* to do? */ #endif } #endif /* USE_LIBIDN */ /* true globals -- for curl_global_init() and curl_global_cleanup() */ static unsigned int initialized; static long init_flags; /* * If a memory-using function (like curl_getenv) is used before * curl_global_init() is called, we need to have these pointers set already. */ #ifdef _WIN32_WCE #define strdup _strdup #endif curl_malloc_callback Curl_cmalloc = (curl_malloc_callback)malloc; curl_free_callback Curl_cfree = (curl_free_callback)free; curl_realloc_callback Curl_crealloc = (curl_realloc_callback)realloc; curl_strdup_callback Curl_cstrdup = (curl_strdup_callback)strdup; curl_calloc_callback Curl_ccalloc = (curl_calloc_callback)calloc; /** * curl_global_init() globally initializes cURL given a bitwise set of the * different features of what to initialize. */ CURLcode curl_global_init(long flags) { if (initialized) return CURLE_OK; /* Setup the default memory functions here (again) */ Curl_cmalloc = (curl_malloc_callback)malloc; Curl_cfree = (curl_free_callback)free; Curl_crealloc = (curl_realloc_callback)realloc; Curl_cstrdup = (curl_strdup_callback)strdup; Curl_ccalloc = (curl_calloc_callback)calloc; if (flags & CURL_GLOBAL_SSL) if (!Curl_ssl_init()) return CURLE_FAILED_INIT; if (flags & CURL_GLOBAL_WIN32) if (win32_init() != CURLE_OK) return CURLE_FAILED_INIT; #ifdef _AMIGASF if(!amiga_init()) return CURLE_FAILED_INIT; #endif #ifdef USE_LIBIDN idna_init(); #endif initialized = 1; init_flags = flags; return CURLE_OK; } /* * curl_global_init_mem() globally initializes cURL and also registers the * user provided callback routines. */ CURLcode curl_global_init_mem(long flags, curl_malloc_callback m, curl_free_callback f, curl_realloc_callback r, curl_strdup_callback s, curl_calloc_callback c) { CURLcode code = CURLE_OK; /* Invalid input, return immediately */ if (!m || !f || !r || !s || !c) return CURLE_FAILED_INIT; /* Already initialized, don't do it again */ if ( initialized ) return CURLE_OK; /* Call the actual init function first */ code = curl_global_init(flags); if (code == CURLE_OK) { Curl_cmalloc = m; Curl_cfree = f; Curl_cstrdup = s; Curl_crealloc = r; Curl_ccalloc = c; } return code; } /** * curl_global_cleanup() globally cleanups cURL, uses the value of * "init_flags" to determine what needs to be cleaned up and what doesn't. */ void curl_global_cleanup(void) { if (!initialized) return; Curl_global_host_cache_dtor(); if (init_flags & CURL_GLOBAL_SSL) Curl_ssl_cleanup(); if (init_flags & CURL_GLOBAL_WIN32) win32_cleanup(); #ifdef _AMIGASF amiga_cleanup(); #endif initialized = 0; init_flags = 0; } /* * curl_easy_init() is the external interface to alloc, setup and init an * easy handle that is returned. If anything goes wrong, NULL is returned. */ CURL *curl_easy_init(void) { CURLcode res; struct SessionHandle *data; /* Make sure we inited the global SSL stuff */ if (!initialized) { res = curl_global_init(CURL_GLOBAL_DEFAULT); if(res) /* something in the global init failed, return nothing */ return NULL; } /* We use curl_open() with undefined URL so far */ res = Curl_open(&data); if(res != CURLE_OK) return NULL; return data; } /* * curl_easy_setopt() is the external interface for setting options on an * easy handle. */ typedef int (*func_T)(void); CURLcode curl_easy_setopt(CURL *curl, CURLoption tag, ...) { va_list arg; func_T param_func = (func_T)0; long param_long = 0; void *param_obj = NULL; curl_off_t param_offset = 0; struct SessionHandle *data = curl; CURLcode ret=CURLE_FAILED_INIT; if(!curl) return CURLE_BAD_FUNCTION_ARGUMENT; va_start(arg, tag); /* PORTING NOTE: Object pointers can't necessarily be casted to function pointers and therefore we need to know what type it is and read the correct type at once. This should also correct problems with different sizes of the types. */ if(tag < CURLOPTTYPE_OBJECTPOINT) { /* This is a LONG type */ param_long = va_arg(arg, long); ret = Curl_setopt(data, tag, param_long); } else if(tag < CURLOPTTYPE_FUNCTIONPOINT) { /* This is a object pointer type */ param_obj = va_arg(arg, void *); ret = Curl_setopt(data, tag, param_obj); } else if(tag < CURLOPTTYPE_OFF_T) { /* This is a function pointer type */ param_func = va_arg(arg, func_T ); ret = Curl_setopt(data, tag, param_func); } else { /* This is a curl_off_t type */ param_offset = va_arg(arg, curl_off_t); ret = Curl_setopt(data, tag, param_offset); } va_end(arg); return ret; } #ifdef CURL_MULTIEASY /*************************************************************************** * This function is still only for testing purposes. It makes a great way * to run the full test suite on the multi interface instead of the easy one. *************************************************************************** * * The *new* curl_easy_perform() is the external interface that performs a * transfer previously setup. * * Wrapper-function that: creates a multi handle, adds the easy handle to it, * runs curl_multi_perform() until the transfer is done, then detaches the * easy handle, destroys the multi handle and returns the easy handle's return * code. This will make everything internally use and assume multi interface. */ CURLcode curl_easy_perform(CURL *easy) { CURLM *multi; CURLMcode mcode; CURLcode code = CURLE_OK; int still_running; struct timeval timeout; int rc; CURLMsg *msg; fd_set fdread; fd_set fdwrite; fd_set fdexcep; int maxfd; if(!easy) return CURLE_BAD_FUNCTION_ARGUMENT; multi = curl_multi_init(); if(!multi) return CURLE_OUT_OF_MEMORY; mcode = curl_multi_add_handle(multi, easy); if(mcode) { curl_multi_cleanup(multi); return CURLE_FAILED_INIT; } /* we start some action by calling perform right away */ do { while(CURLM_CALL_MULTI_PERFORM == curl_multi_perform(multi, &still_running)); if(!still_running) break; FD_ZERO(&fdread); FD_ZERO(&fdwrite); FD_ZERO(&fdexcep); /* timeout once per second */ timeout.tv_sec = 1; timeout.tv_usec = 0; /* get file descriptors from the transfers */ curl_multi_fdset(multi, &fdread, &fdwrite, &fdexcep, &maxfd); rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout); if(rc == -1) /* select error */ break; /* timeout or data to send/receive => loop! */ } while(still_running); msg = curl_multi_info_read(multi, &rc); if(msg) code = msg->data.result; mcode = curl_multi_remove_handle(multi, easy); /* what to do if it fails? */ mcode = curl_multi_cleanup(multi); /* what to do if it fails? */ return code; } #else /* * curl_easy_perform() is the external interface that performs a transfer * previously setup. */ CURLcode curl_easy_perform(CURL *curl) { struct SessionHandle *data = (struct SessionHandle *)curl; if(!data) return CURLE_BAD_FUNCTION_ARGUMENT; if ( ! (data->share && data->share->hostcache) ) { if (Curl_global_host_cache_use(data) && data->hostcache != Curl_global_host_cache_get()) { if (data->hostcache) Curl_hash_destroy(data->hostcache); data->hostcache = Curl_global_host_cache_get(); } if (!data->hostcache) { data->hostcache = Curl_mk_dnscache(); if(!data->hostcache) /* While we possibly could survive and do good without a host cache, the fact that creating it failed indicates that things are truly screwed up and we should bail out! */ return CURLE_OUT_OF_MEMORY; } } return Curl_perform(data); } #endif /* * curl_easy_cleanup() is the external interface to cleaning/freeing the given * easy handle. */ void curl_easy_cleanup(CURL *curl) { struct SessionHandle *data = (struct SessionHandle *)curl; if(!data) return; Curl_close(data); } /* * Store a pointed to the multi handle within the easy handle's data struct. */ void Curl_easy_addmulti(struct SessionHandle *data, void *multi) { data->multi = multi; } /* * curl_easy_getinfo() is an external interface that allows an app to retrieve * information from a performed transfer and similar. */ CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ...) { va_list arg; void *paramp; struct SessionHandle *data = (struct SessionHandle *)curl; va_start(arg, info); paramp = va_arg(arg, void *); return Curl_getinfo(data, info, paramp); } /* * curl_easy_duphandle() is an external interface to allow duplication of a * given input easy handle. The returned handle will be a new working handle * with all options set exactly as the input source handle. */ CURL *curl_easy_duphandle(CURL *incurl) { bool fail = TRUE; struct SessionHandle *data=(struct SessionHandle *)incurl; struct SessionHandle *outcurl = (struct SessionHandle *) calloc(sizeof(struct SessionHandle), 1); if(NULL == outcurl) return NULL; /* failure */ do { /* * We setup a few buffers we need. We should probably make them * get setup on-demand in the code, as that would probably decrease * the likeliness of us forgetting to init a buffer here in the future. */ outcurl->state.headerbuff=(char*)malloc(HEADERSIZE); if(!outcurl->state.headerbuff) { break; } outcurl->state.headersize=HEADERSIZE; /* copy all userdefined values */ outcurl->set = data->set; outcurl->state.numconnects = data->state.numconnects; outcurl->state.connects = (struct connectdata **) malloc(sizeof(struct connectdata *) * outcurl->state.numconnects); if(!outcurl->state.connects) { break; } memset(outcurl->state.connects, 0, sizeof(struct connectdata *)*outcurl->state.numconnects); outcurl->progress.flags = data->progress.flags; outcurl->progress.callback = data->progress.callback; #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) if(data->cookies) { /* If cookies are enabled in the parent handle, we enable them in the clone as well! */ outcurl->cookies = Curl_cookie_init(data, data->cookies->filename, outcurl->cookies, data->set.cookiesession); if(!outcurl->cookies) { break; } } #endif /* CURL_DISABLE_HTTP */ /* duplicate all values in 'change' */ if(data->change.url) { outcurl->change.url = strdup(data->change.url); if(!outcurl->change.url) break; outcurl->change.url_alloc = TRUE; } if(data->change.proxy) { outcurl->change.proxy = strdup(data->change.proxy); if(!outcurl->change.proxy) break; outcurl->change.proxy_alloc = TRUE; } if(data->change.referer) { outcurl->change.referer = strdup(data->change.referer); if(!outcurl->change.referer) break; outcurl->change.referer_alloc = TRUE; } #ifdef USE_ARES /* If we use ares, we setup a new ares channel for the new handle */ if(ARES_SUCCESS != ares_init(&outcurl->state.areschannel)) break; #endif fail = FALSE; /* we reach this point and thus we are OK */ } while(0); if(fail) { if(outcurl) { if(outcurl->state.connects) free(outcurl->state.connects); if(outcurl->state.headerbuff) free(outcurl->state.headerbuff); if(outcurl->change.proxy) free(outcurl->change.proxy); if(outcurl->change.url) free(outcurl->change.url); if(outcurl->change.referer) free(outcurl->change.referer); free(outcurl); /* free the memory again */ outcurl = NULL; } } return outcurl; } /* * curl_easy_reset() is an external interface that allows an app to re- * initialize a session handle to the default values. */ void curl_easy_reset(CURL *curl) { struct SessionHandle *data = (struct SessionHandle *)curl; /* zero out UserDefined data: */ memset(&data->set, 0, sizeof(struct UserDefined)); /* zero out Progress data: */ memset(&data->progress, 0, sizeof(struct Progress)); /* The remainder of these calls have been taken from Curl_open() */ data->set.out = stdout; /* default output to stdout */ data->set.in = stdin; /* default input from stdin */ data->set.err = stderr; /* default stderr to stderr */ /* use fwrite as default function to store output */ data->set.fwrite = (curl_write_callback)fwrite; /* use fread as default function to read input */ data->set.fread = (curl_read_callback)fread; data->set.infilesize = -1; /* we don't know any size */ data->set.postfieldsize = -1; data->state.current_speed = -1; /* init to negative == impossible */ data->set.httpreq = HTTPREQ_GET; /* Default HTTP request */ data->set.ftp_use_epsv = TRUE; /* FTP defaults to EPSV operations */ data->set.ftp_use_eprt = TRUE; /* FTP defaults to EPRT operations */ data->set.dns_cache_timeout = 60; /* Timeout every 60 seconds by default */ /* make libcurl quiet by default: */ data->set.hide_progress = TRUE; /* CURLOPT_NOPROGRESS changes these */ data->progress.flags |= PGRS_HIDE; /* Set the default size of the SSL session ID cache */ data->set.ssl.numsessions = 5; data->set.proxyport = 1080; data->set.proxytype = CURLPROXY_HTTP; /* defaults to HTTP proxy */ data->set.httpauth = CURLAUTH_BASIC; /* defaults to basic */ data->set.proxyauth = CURLAUTH_BASIC; /* defaults to basic */ /* * libcurl 7.10 introduced SSL verification *by default*! This needs to be * switched off unless wanted. */ data->set.ssl.verifypeer = TRUE; data->set.ssl.verifyhost = 2; #ifdef CURL_CA_BUNDLE /* This is our prefered CA cert bundle since install time */ data->set.ssl.CAfile = (char *)CURL_CA_BUNDLE; #endif } criticalmass-1.0.0.orig/curl/lib/multiif.h0000644000175000017500000000236110265631023017734 0ustar danieldaniel#ifndef __MULTIIF_H #define __MULTIIF_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: multiif.h,v 1.3 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ /* * Prototypes for library-wide functions provided by multi.c */ void Curl_multi_rmeasy(void *multi, CURL *data); #endif /* __MULTIIF_H */ criticalmass-1.0.0.orig/curl/lib/getenv.c0000644000175000017500000000366310265631023017554 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: getenv.c,v 1.26 2004/11/02 10:12:23 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #ifdef WIN32 #include #endif #ifdef VMS #include #endif #include #include "memory.h" #include "memdebug.h" static char *GetEnv(const char *variable) { #ifdef _WIN32_WCE return NULL; #else #ifdef WIN32 /* This shit requires windows.h (HUGE) to be included */ char env[MAX_PATH]; /* MAX_PATH is from windef.h */ char *temp = getenv(variable); env[0] = '\0'; if (temp != NULL) ExpandEnvironmentStrings(temp, env, sizeof(env)); #else #ifdef VMS char *env = getenv(variable); if (env && strcmp("HOME",variable) == 0) { env = decc$translate_vms(env); } #else /* no length control */ char *env = getenv(variable); #endif #endif return (env && env[0])?strdup(env):NULL; #endif } char *curl_getenv(const char *v) { return GetEnv(v); } criticalmass-1.0.0.orig/curl/lib/file.c0000644000175000017500000002501710265631023017200 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: file.c,v 1.71 2005/02/11 00:03:49 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_FILE /* -- WIN32 approved -- */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #include #include #else #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #endif #include "urldata.h" #include #include "progress.h" #include "sendf.h" #include "escape.h" #include "file.h" #include "speedcheck.h" #include "getinfo.h" #include "transfer.h" #include "url.h" #include "memory.h" #include "parsedate.h" /* for the week day and month names */ #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" /* * Curl_file_connect() gets called from Curl_protocol_connect() to allow us to * do protocol-specific actions at connect-time. We emulate a * connect-then-transfer protocol and "connect" to the file here */ CURLcode Curl_file_connect(struct connectdata *conn) { char *real_path = curl_unescape(conn->path, 0); struct FILEPROTO *file; int fd; #if defined(WIN32) || defined(MSDOS) || defined(__EMX__) int i; char *actual_path; #endif if(!real_path) return CURLE_OUT_OF_MEMORY; file = (struct FILEPROTO *)calloc(sizeof(struct FILEPROTO), 1); if(!file) { free(real_path); return CURLE_OUT_OF_MEMORY; } conn->proto.file = file; #if defined(WIN32) || defined(MSDOS) || defined(__EMX__) /* If the first character is a slash, and there's something that looks like a drive at the beginning of the path, skip the slash. If we remove the initial slash in all cases, paths without drive letters end up relative to the current directory which isn't how browsers work. Some browsers accept | instead of : as the drive letter separator, so we do too. On other platforms, we need the slash to indicate an absolute pathname. On Windows, absolute paths start with a drive letter. */ actual_path = real_path; if ((actual_path[0] == '/') && actual_path[1] && (actual_path[2] == ':' || actual_path[2] == '|')) { actual_path[2] = ':'; actual_path++; } /* change path separators from '/' to '\\' for DOS, Windows and OS/2 */ for (i=0; actual_path[i] != '\0'; ++i) if (actual_path[i] == '/') actual_path[i] = '\\'; fd = open(actual_path, O_RDONLY | O_BINARY); /* no CR/LF translation! */ file->path = actual_path; #else fd = open(real_path, O_RDONLY); file->path = real_path; #endif file->freepath = real_path; /* free this when done */ if(!conn->data->set.upload && (fd == -1)) { failf(conn->data, "Couldn't open file %s", conn->path); Curl_file_done(conn, CURLE_FILE_COULDNT_READ_FILE); return CURLE_FILE_COULDNT_READ_FILE; } file->fd = fd; return CURLE_OK; } CURLcode Curl_file_done(struct connectdata *conn, CURLcode status) { struct FILEPROTO *file = conn->proto.file; (void)status; /* not used */ Curl_safefree(file->freepath); if(file->fd != -1) close(file->fd); return CURLE_OK; } #if defined(WIN32) || defined(MSDOS) || defined(__EMX__) #define DIRSEP '\\' #else #define DIRSEP '/' #endif static CURLcode file_upload(struct connectdata *conn) { struct FILEPROTO *file = conn->proto.file; char *dir = strchr(file->path, DIRSEP); FILE *fp; CURLcode res=CURLE_OK; struct SessionHandle *data = conn->data; char *buf = data->state.buffer; size_t nread; size_t nwrite; curl_off_t bytecount = 0; struct timeval now = Curl_tvnow(); /* * Since FILE: doesn't do the full init, we need to provide some extra * assignments here. */ conn->fread = data->set.fread; conn->fread_in = data->set.in; conn->upload_fromhere = buf; if(!dir) return CURLE_FILE_COULDNT_READ_FILE; /* fix: better error code */ if(!dir[1]) return CURLE_FILE_COULDNT_READ_FILE; /* fix: better error code */ fp = fopen(file->path, "wb"); if(!fp) { failf(data, "Can't open %s for writing", file->path); return CURLE_WRITE_ERROR; } if(-1 != data->set.infilesize) /* known size of data to "upload" */ Curl_pgrsSetUploadSize(data, data->set.infilesize); while (res == CURLE_OK) { int readcount; res = Curl_fillreadbuffer(conn, BUFSIZE, &readcount); if(res) break; nread = (size_t)readcount; if (nread <= 0) break; /* write the data to the target */ nwrite = fwrite(buf, 1, nread, fp); if(nwrite != nread) { res = CURLE_SEND_ERROR; break; } bytecount += nread; Curl_pgrsSetUploadCounter(data, bytecount); if(Curl_pgrsUpdate(conn)) res = CURLE_ABORTED_BY_CALLBACK; else res = Curl_speedcheck(data, now); } if(!res && Curl_pgrsUpdate(conn)) res = CURLE_ABORTED_BY_CALLBACK; fclose(fp); return res; } /* * Curl_file() is the protocol-specific function for the do-phase, separated * from the connect-phase above. Other protocols merely setup the transfer in * the do-phase, to have it done in the main transfer loop but since some * platforms we support don't allow select()ing etc on file handles (as * opposed to sockets) we instead perform the whole do-operation in this * function. */ CURLcode Curl_file(struct connectdata *conn, bool *done) { /* This implementation ignores the host name in conformance with RFC 1738. Only local files (reachable via the standard file system) are supported. This means that files on remotely mounted directories (via NFS, Samba, NT sharing) can be accessed through a file:// URL */ CURLcode res = CURLE_OK; struct_stat statbuf; /* struct_stat instead of struct stat just to allow the Windows version to have a different struct without having to redefine the simple word 'stat' */ curl_off_t expected_size=0; bool fstated=FALSE; ssize_t nread; struct SessionHandle *data = conn->data; char *buf = data->state.buffer; curl_off_t bytecount = 0; int fd; struct timeval now = Curl_tvnow(); *done = TRUE; /* unconditionally */ Curl_readwrite_init(conn); Curl_initinfo(data); Curl_pgrsStartNow(data); if(data->set.upload) return file_upload(conn); /* get the fd from the connection phase */ fd = conn->proto.file->fd; /* VMS: This only works reliable for STREAMLF files */ if( -1 != fstat(fd, &statbuf)) { /* we could stat it, then read out the size */ expected_size = statbuf.st_size; fstated = TRUE; } /* If we have selected NOBODY and HEADER, it means that we only want file information. Which for FILE can't be much more than the file size and date. */ if(conn->bits.no_body && data->set.include_header && fstated) { CURLcode result; snprintf(buf, sizeof(data->state.buffer), "Content-Length: %" FORMAT_OFF_T "\r\n", expected_size); result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0); if(result) return result; result = Curl_client_write(data, CLIENTWRITE_BOTH, (char *)"Accept-ranges: bytes\r\n", 0); if(result) return result; if(fstated) { struct tm *tm; time_t clock = (time_t)statbuf.st_mtime; #ifdef HAVE_GMTIME_R struct tm buffer; tm = (struct tm *)gmtime_r(&clock, &buffer); #else tm = gmtime(&clock); #endif /* format: "Tue, 15 Nov 1994 12:45:26 GMT" */ snprintf(buf, BUFSIZE-1, "Last-Modified: %s, %02d %s %4d %02d:%02d:%02d GMT\r\n", Curl_wkday[tm->tm_wday?tm->tm_wday-1:6], tm->tm_mday, Curl_month[tm->tm_mon], tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec); result = Curl_client_write(data, CLIENTWRITE_BOTH, buf, 0); } return result; } if (conn->resume_from <= expected_size) expected_size -= conn->resume_from; else { failf(data, "failed to resume file:// transfer"); return CURLE_BAD_DOWNLOAD_RESUME; } if (fstated && (expected_size == 0)) return CURLE_OK; /* The following is a shortcut implementation of file reading this is both more efficient than the former call to download() and it avoids problems with select() and recv() on file descriptors in Winsock */ if(fstated) Curl_pgrsSetDownloadSize(data, expected_size); if(conn->resume_from) lseek(fd, conn->resume_from, SEEK_SET); Curl_pgrsTime(data, TIMER_STARTTRANSFER); while (res == CURLE_OK) { nread = read(fd, buf, BUFSIZE-1); if ( nread > 0) buf[nread] = 0; if (nread <= 0) break; bytecount += nread; res = Curl_client_write(data, CLIENTWRITE_BODY, buf, nread); if(res) return res; Curl_pgrsSetDownloadCounter(data, bytecount); if(Curl_pgrsUpdate(conn)) res = CURLE_ABORTED_BY_CALLBACK; else res = Curl_speedcheck(data, now); } if(Curl_pgrsUpdate(conn)) res = CURLE_ABORTED_BY_CALLBACK; return res; } #endif criticalmass-1.0.0.orig/curl/lib/file.h0000644000175000017500000000244410265631023017204 0ustar danieldaniel#ifndef __FILE_H #define __FILE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: file.h,v 1.13 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ #ifndef CURL_DISABLE_FILE CURLcode Curl_file(struct connectdata *, bool *done); CURLcode Curl_file_done(struct connectdata *, CURLcode); CURLcode Curl_file_connect(struct connectdata *); #endif #endif criticalmass-1.0.0.orig/curl/lib/cookie.c0000644000175000017500000006341710265631023017540 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: cookie.c,v 1.69 2005/04/26 13:08:49 bagder Exp $ ***************************************************************************/ /*** RECEIVING COOKIE INFORMATION ============================ struct CookieInfo *cookie_init(char *file); Inits a cookie struct to store data in a local file. This is always called before any cookies are set. int cookies_set(struct CookieInfo *cookie, char *cookie_line); The 'cookie_line' parameter is a full "Set-cookie:" line as received from a server. The function need to replace previously stored lines that this new line superceeds. It may remove lines that are expired. It should return an indication of success/error. SENDING COOKIE INFORMATION ========================== struct Cookies *cookie_getlist(struct CookieInfo *cookie, char *host, char *path, bool secure); For a given host and path, return a linked list of cookies that the client should send to the server if used now. The secure boolean informs the cookie if a secure connection is achieved or not. It shall only return cookies that haven't expired. Example set of cookies: Set-cookie: PRODUCTINFO=webxpress; domain=.fidelity.com; path=/; secure Set-cookie: PERSONALIZE=none;expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/ftgw; secure Set-cookie: FidHist=none;expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure Set-cookie: FidOrder=none;expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure Set-cookie: DisPend=none;expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure Set-cookie: FidDis=none;expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure Set-cookie: Session_Key@6791a9e0-901a-11d0-a1c8-9b012c88aa77=none;expires=Monday, 13-Jun-1988 03:04:55 GMT; domain=.fidelity.com; path=/; secure ****/ #include "setup.h" #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_COOKIES) #include #include #include "urldata.h" #include "cookie.h" #include "strequal.h" #include "strtok.h" #include "sendf.h" #include "memory.h" /* The last #include file should be: */ #ifdef CURLDEBUG #include "memdebug.h" #endif #define my_isspace(x) ((x == ' ') || (x == '\t')) static void freecookie(struct Cookie *co) { if(co->expirestr) free(co->expirestr); if(co->domain) free(co->domain); if(co->path) free(co->path); if(co->name) free(co->name); if(co->value) free(co->value); if(co->maxage) free(co->maxage); if(co->version) free(co->version); free(co); } static bool tailmatch(const char *little, const char *bigone) { size_t littlelen = strlen(little); size_t biglen = strlen(bigone); if(littlelen > biglen) return FALSE; return (bool)strequal(little, bigone+biglen-littlelen); } /**************************************************************************** * * Curl_cookie_add() * * Add a single cookie line to the cookie keeping object. * ***************************************************************************/ struct Cookie * Curl_cookie_add(struct SessionHandle *data, /* The 'data' pointer here may be NULL at times, and thus must only be used very carefully for things that can deal with data being NULL. Such as infof() and similar */ struct CookieInfo *c, bool httpheader, /* TRUE if HTTP header-style line */ char *lineptr, /* first character of the line */ char *domain, /* default domain */ char *path) /* full path used when this cookie is set, used to get default path for the cookie unless set */ { struct Cookie *clist; char *what; char name[MAX_NAME]; char *ptr; char *semiptr; struct Cookie *co; struct Cookie *lastc=NULL; time_t now = time(NULL); bool replace_old = FALSE; bool badcookie = FALSE; /* cookies are good by default. mmmmm yummy */ /* First, alloc and init a new struct for it */ co = (struct Cookie *)calloc(sizeof(struct Cookie), 1); if(!co) return NULL; /* bail out if we're this low on memory */ if(httpheader) { /* This line was read off a HTTP-header */ char *sep; what = malloc(MAX_COOKIE_LINE); if(!what) { free(co); return NULL; } semiptr=strchr(lineptr, ';'); /* first, find a semicolon */ while(*lineptr && my_isspace(*lineptr)) lineptr++; ptr = lineptr; do { /* we have a = pair or a 'secure' word here */ sep = strchr(ptr, '='); if(sep && (!semiptr || (semiptr>sep)) ) { /* * There is a = sign and if there was a semicolon too, which make sure * that the semicolon comes _after_ the equal sign. */ name[0]=what[0]=0; /* init the buffers */ if(1 <= sscanf(ptr, "%" MAX_NAME_TXT "[^;=]=%" MAX_COOKIE_LINE_TXT "[^;\r\n]", name, what)) { /* this is a = pair */ char *whatptr; /* Strip off trailing whitespace from the 'what' */ size_t len=strlen(what); while(len && my_isspace(what[len-1])) { what[len-1]=0; len--; } /* Skip leading whitespace from the 'what' */ whatptr=what; while(my_isspace(*whatptr)) { whatptr++; } if(strequal("path", name)) { co->path=strdup(whatptr); if(!co->path) { badcookie = TRUE; /* out of memory bad */ break; } } else if(strequal("domain", name)) { /* note that this name may or may not have a preceeding dot, but we don't care about that, we treat the names the same anyway */ const char *domptr=whatptr; int dotcount=1; /* Count the dots, we need to make sure that there are enough of them. */ if('.' == whatptr[0]) /* don't count the initial dot, assume it */ domptr++; do { domptr = strchr(domptr, '.'); if(domptr) { domptr++; dotcount++; } } while(domptr); /* The original Netscape cookie spec defined that this domain name MUST have three dots (or two if one of the seven holy TLDs), but it seems that these kinds of cookies are in use "out there" so we cannot be that strict. I've therefore lowered the check to not allow less than two dots. */ if(dotcount < 2) { /* Received and skipped a cookie with a domain using too few dots. */ badcookie=TRUE; /* mark this as a bad cookie */ infof(data, "skipped cookie with illegal dotcount domain: %s\n", whatptr); } else { /* Now, we make sure that our host is within the given domain, or the given domain is not valid and thus cannot be set. */ if('.' == whatptr[0]) whatptr++; /* ignore preceeding dot */ if(!domain || tailmatch(whatptr, domain)) { const char *tailptr=whatptr; if(tailptr[0] == '.') tailptr++; co->domain=strdup(tailptr); /* don't prefix w/dots internally */ if(!co->domain) { badcookie = TRUE; break; } co->tailmatch=TRUE; /* we always do that if the domain name was given */ } else { /* we did not get a tailmatch and then the attempted set domain is not a domain to which the current host belongs. Mark as bad. */ badcookie=TRUE; infof(data, "skipped cookie with bad tailmatch domain: %s\n", whatptr); } } } else if(strequal("version", name)) { co->version=strdup(whatptr); if(!co->version) { badcookie = TRUE; break; } } else if(strequal("max-age", name)) { /* Defined in RFC2109: Optional. The Max-Age attribute defines the lifetime of the cookie, in seconds. The delta-seconds value is a decimal non- negative integer. After delta-seconds seconds elapse, the client should discard the cookie. A value of zero means the cookie should be discarded immediately. */ co->maxage = strdup(whatptr); if(!co->maxage) { badcookie = TRUE; break; } co->expires = atoi((*co->maxage=='\"')?&co->maxage[1]:&co->maxage[0]) + (long)now; } else if(strequal("expires", name)) { co->expirestr=strdup(whatptr); if(!co->expirestr) { badcookie = TRUE; break; } co->expires = (long)curl_getdate(what, &now); } else if(!co->name) { co->name = strdup(name); co->value = strdup(whatptr); if(!co->name || !co->value) { badcookie = TRUE; break; } } /* else this is the second (or more) name we don't know about! */ } else { /* this is an "illegal" = pair */ } } else { if(sscanf(ptr, "%" MAX_COOKIE_LINE_TXT "[^;\r\n]", what)) { if(strequal("secure", what)) co->secure = TRUE; /* else, unsupported keyword without assign! */ } } if(!semiptr || !*semiptr) { /* we already know there are no more cookies */ semiptr = NULL; continue; } ptr=semiptr+1; while(ptr && *ptr && my_isspace(*ptr)) ptr++; semiptr=strchr(ptr, ';'); /* now, find the next semicolon */ if(!semiptr && *ptr) /* There are no more semicolons, but there's a final name=value pair coming up */ semiptr=strchr(ptr, '\0'); } while(semiptr); if(!badcookie && !co->domain) { if(domain) { /* no domain was given in the header line, set the default */ co->domain=strdup(domain); if(!co->domain) badcookie = TRUE; } } if(!badcookie && !co->path && path) { /* no path was given in the header line, set the default */ char *endslash = strrchr(path, '/'); if(endslash) { size_t pathlen = endslash-path+1; /* include the ending slash */ co->path=malloc(pathlen+1); /* one extra for the zero byte */ if(co->path) { memcpy(co->path, path, pathlen); co->path[pathlen]=0; /* zero terminate */ } else badcookie = TRUE; } } free(what); if(badcookie || !co->name) { /* we didn't get a cookie name or a bad one, this is an illegal line, bail out */ freecookie(co); return NULL; } } else { /* This line is NOT a HTTP header style line, we do offer support for reading the odd netscape cookies-file format here */ char *firstptr; char *tok_buf; int fields; if(lineptr[0]=='#') { /* don't even try the comments */ free(co); return NULL; } /* strip off the possible end-of-line characters */ ptr=strchr(lineptr, '\r'); if(ptr) *ptr=0; /* clear it */ ptr=strchr(lineptr, '\n'); if(ptr) *ptr=0; /* clear it */ firstptr=strtok_r(lineptr, "\t", &tok_buf); /* tokenize it on the TAB */ /* Here's a quick check to eliminate normal HTTP-headers from this */ if(!firstptr || strchr(firstptr, ':')) { free(co); return NULL; } /* Now loop through the fields and init the struct we already have allocated */ for(ptr=firstptr, fields=0; ptr && !badcookie; ptr=strtok_r(NULL, "\t", &tok_buf), fields++) { switch(fields) { case 0: if(ptr[0]=='.') /* skip preceeding dots */ ptr++; co->domain = strdup(ptr); if(!co->domain) badcookie = TRUE; break; case 1: /* This field got its explanation on the 23rd of May 2001 by Andrs Garca: flag: A TRUE/FALSE value indicating if all machines within a given domain can access the variable. This value is set automatically by the browser, depending on the value you set for the domain. As far as I can see, it is set to true when the cookie says .domain.com and to false when the domain is complete www.domain.com */ co->tailmatch=(bool)strequal(ptr, "TRUE"); /* store information */ break; case 2: /* It turns out, that sometimes the file format allows the path field to remain not filled in, we try to detect this and work around it! Andrs Garca made us aware of this... */ if (strcmp("TRUE", ptr) && strcmp("FALSE", ptr)) { /* only if the path doesn't look like a boolean option! */ co->path = strdup(ptr); if(!co->path) badcookie = TRUE; break; } /* this doesn't look like a path, make one up! */ co->path = strdup("/"); if(!co->path) badcookie = TRUE; fields++; /* add a field and fall down to secure */ /* FALLTHROUGH */ case 3: co->secure = (bool)strequal(ptr, "TRUE"); break; case 4: co->expires = atoi(ptr); break; case 5: co->name = strdup(ptr); if(!co->name) badcookie = TRUE; break; case 6: co->value = strdup(ptr); if(!co->value) badcookie = TRUE; break; } } if(6 == fields) { /* we got a cookie with blank contents, fix it */ co->value = strdup(""); if(!co->value) badcookie = TRUE; else fields++; } if(!badcookie && (7 != fields)) /* we did not find the sufficient number of fields */ badcookie = TRUE; if(badcookie) { freecookie(co); return NULL; } } if(!c->running && /* read from a file */ c->newsession && /* clean session cookies */ !co->expires) { /* this is a session cookie since it doesn't expire! */ freecookie(co); return NULL; } co->livecookie = c->running; /* now, we have parsed the incoming line, we must now check if this superceeds an already existing cookie, which it may if the previous have the same domain and path as this */ clist = c->cookies; replace_old = FALSE; while(clist) { if(strequal(clist->name, co->name)) { /* the names are identical */ if(clist->domain && co->domain) { if(strequal(clist->domain, co->domain)) /* The domains are identical */ replace_old=TRUE; } else if(!clist->domain && !co->domain) replace_old = TRUE; if(replace_old) { /* the domains were identical */ if(clist->path && co->path) { if(strequal(clist->path, co->path)) { replace_old = TRUE; } else replace_old = FALSE; } else if(!clist->path && !co->path) replace_old = TRUE; else replace_old = FALSE; } if(replace_old && !co->livecookie && clist->livecookie) { /* Both cookies matched fine, except that the already present cookie is "live", which means it was set from a header, while the new one isn't "live" and thus only read from a file. We let live cookies stay alive */ /* Free the newcomer and get out of here! */ freecookie(co); return NULL; } if(replace_old) { co->next = clist->next; /* get the next-pointer first */ /* then free all the old pointers */ if(clist->name) free(clist->name); if(clist->value) free(clist->value); if(clist->domain) free(clist->domain); if(clist->path) free(clist->path); if(clist->expirestr) free(clist->expirestr); if(clist->version) free(clist->version); if(clist->maxage) free(clist->maxage); *clist = *co; /* then store all the new data */ free(co); /* free the newly alloced memory */ co = clist; /* point to the previous struct instead */ /* We have replaced a cookie, now skip the rest of the list but make sure the 'lastc' pointer is properly set */ do { lastc = clist; clist = clist->next; } while(clist); break; } } lastc = clist; clist = clist->next; } if(c->running) /* Only show this when NOT reading the cookies from a file */ infof(data, "%s cookie %s=\"%s\" for domain %s, path %s, expire %d\n", replace_old?"Replaced":"Added", co->name, co->value, co->domain, co->path, co->expires); if(!replace_old) { /* then make the last item point on this new one */ if(lastc) lastc->next = co; else c->cookies = co; } c->numcookies++; /* one more cookie in the jar */ return co; } /***************************************************************************** * * Curl_cookie_init() * * Inits a cookie struct to read data from a local file. This is always * called before any cookies are set. File may be NULL. * * If 'newsession' is TRUE, discard all "session cookies" on read from file. * ****************************************************************************/ struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, char *file, struct CookieInfo *inc, bool newsession) { struct CookieInfo *c; FILE *fp; bool fromfile=TRUE; if(NULL == inc) { /* we didn't get a struct, create one */ c = (struct CookieInfo *)calloc(1, sizeof(struct CookieInfo)); if(!c) return NULL; /* failed to get memory */ c->filename = strdup(file?file:"none"); /* copy the name just in case */ } else { /* we got an already existing one, use that */ c = inc; } c->running = FALSE; /* this is not running, this is init */ if(file && strequal(file, "-")) { fp = stdin; fromfile=FALSE; } else if(file && !*file) { /* points to a "" string */ fp = NULL; } else fp = file?fopen(file, "r"):NULL; c->newsession = newsession; /* new session? */ if(fp) { char *lineptr; bool headerline; char *line = (char *)malloc(MAX_COOKIE_LINE); if(line) { while(fgets(line, MAX_COOKIE_LINE, fp)) { if(checkprefix("Set-Cookie:", line)) { /* This is a cookie line, get it! */ lineptr=&line[11]; headerline=TRUE; } else { lineptr=line; headerline=FALSE; } while(*lineptr && my_isspace(*lineptr)) lineptr++; Curl_cookie_add(data, c, headerline, lineptr, NULL, NULL); } free(line); /* free the line buffer */ } if(fromfile) fclose(fp); } c->running = TRUE; /* now, we're running */ return c; } /***************************************************************************** * * Curl_cookie_getlist() * * For a given host and path, return a linked list of cookies that the * client should send to the server if used now. The secure boolean informs * the cookie if a secure connection is achieved or not. * * It shall only return cookies that haven't expired. * ****************************************************************************/ struct Cookie *Curl_cookie_getlist(struct CookieInfo *c, char *host, char *path, bool secure) { struct Cookie *newco; struct Cookie *co; time_t now = time(NULL); struct Cookie *mainco=NULL; if(!c || !c->cookies) return NULL; /* no cookie struct or no cookies in the struct */ co = c->cookies; while(co) { /* only process this cookie if it is not expired or had no expire date AND that if the cookie requires we're secure we must only continue if we are! */ if( (co->expires<=0 || (co->expires> now)) && (co->secure?secure:TRUE) ) { /* now check if the domain is correct */ if(!co->domain || (co->tailmatch && tailmatch(co->domain, host)) || (!co->tailmatch && strequal(host, co->domain)) ) { /* the right part of the host matches the domain stuff in the cookie data */ /* now check the left part of the path with the cookies path requirement */ if(!co->path || checkprefix(co->path, path) ) { /* and now, we know this is a match and we should create an entry for the return-linked-list */ newco = (struct Cookie *)malloc(sizeof(struct Cookie)); if(newco) { /* first, copy the whole source cookie: */ memcpy(newco, co, sizeof(struct Cookie)); /* then modify our next */ newco->next = mainco; /* point the main to us */ mainco = newco; } else { /* failure, clear up the allocated chain and return NULL */ while(mainco) { co = mainco->next; free(mainco); mainco = co; } return NULL; } } } } co = co->next; } return mainco; /* return the new list */ } /***************************************************************************** * * Curl_cookie_freelist() * * Free a list of cookies previously returned by Curl_cookie_getlist(); * ****************************************************************************/ void Curl_cookie_freelist(struct Cookie *co) { struct Cookie *next; if(co) { while(co) { next = co->next; free(co); /* we only free the struct since the "members" are all just copied! */ co = next; } } } /***************************************************************************** * * Curl_cookie_cleanup() * * Free a "cookie object" previous created with cookie_init(). * ****************************************************************************/ void Curl_cookie_cleanup(struct CookieInfo *c) { struct Cookie *co; struct Cookie *next; if(c) { if(c->filename) free(c->filename); co = c->cookies; while(co) { next = co->next; freecookie(co); co = next; } free(c); /* free the base struct as well */ } } /* * Curl_cookie_output() * * Writes all internally known cookies to the specified file. Specify * "-" as file name to write to stdout. * * The function returns non-zero on write failure. */ int Curl_cookie_output(struct CookieInfo *c, char *dumphere) { struct Cookie *co; FILE *out; bool use_stdout=FALSE; if((NULL == c) || (0 == c->numcookies)) /* If there are no known cookies, we don't write or even create any destination file */ return 0; if(strequal("-", dumphere)) { /* use stdout */ out = stdout; use_stdout=TRUE; } else { out = fopen(dumphere, "w"); if(!out) return 1; /* failure */ } if(c) { fputs("# Netscape HTTP Cookie File\n" "# http://www.netscape.com/newsref/std/cookie_spec.html\n" "# This file was generated by libcurl! Edit at your own risk.\n\n", out); co = c->cookies; while(co) { fprintf(out, "%s%s\t" /* domain */ "%s\t" /* tailmatch */ "%s\t" /* path */ "%s\t" /* secure */ "%u\t" /* expires */ "%s\t" /* name */ "%s\n", /* value */ /* Make sure all domains are prefixed with a dot if they allow tailmatching. This is Mozilla-style. */ (co->tailmatch && co->domain && co->domain[0] != '.')? ".":"", co->domain?co->domain:"unknown", co->tailmatch?"TRUE":"FALSE", co->path?co->path:"/", co->secure?"TRUE":"FALSE", (unsigned int)co->expires, co->name, co->value?co->value:""); co=co->next; } } if(!use_stdout) fclose(out); return 0; } #endif /* CURL_DISABLE_HTTP || CURL_DISABLE_COOKIES */ criticalmass-1.0.0.orig/curl/lib/cookie.h0000644000175000017500000000656210265631023017543 0ustar danieldaniel#ifndef __COOKIE_H #define __COOKIE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: cookie.h,v 1.17 2004/10/06 07:50:18 bagder Exp $ ***************************************************************************/ #include #ifdef WIN32 #include #else #include #endif #include struct Cookie { struct Cookie *next; /* next in the chain */ char *name; /* = value */ char *value; /* name = */ char *path; /* path = */ char *domain; /* domain = */ long expires; /* expires = */ char *expirestr; /* the plain text version */ bool tailmatch; /* weather we do tail-matchning of the domain name */ /* RFC 2109 keywords. Version=1 means 2109-compliant cookie sending */ char *version; /* Version = */ char *maxage; /* Max-Age = */ bool secure; /* whether the 'secure' keyword was used */ bool livecookie; /* updated from a server, not a stored file */ }; struct CookieInfo { /* linked list of cookies we know of */ struct Cookie *cookies; char *filename; /* file we read from/write to */ bool running; /* state info, for cookie adding information */ long numcookies; /* number of cookies in the "jar" */ bool newsession; /* new session, discard session cookies on load */ }; /* This is the maximum line length we accept for a cookie line. RFC 2109 section 6.3 says: "at least 4096 bytes per cookie (as measured by the size of the characters that comprise the cookie non-terminal in the syntax description of the Set-Cookie header)" */ #define MAX_COOKIE_LINE 5000 #define MAX_COOKIE_LINE_TXT "4999" /* This is the maximum length of a cookie name we deal with: */ #define MAX_NAME 1024 #define MAX_NAME_TXT "1023" struct SessionHandle; /* * Add a cookie to the internal list of cookies. The domain and path arguments * are only used if the header boolean is TRUE. */ struct Cookie *Curl_cookie_add(struct SessionHandle *data, struct CookieInfo *, bool header, char *line, char *domain, char *path); struct CookieInfo *Curl_cookie_init(struct SessionHandle *data, char *, struct CookieInfo *, bool); struct Cookie *Curl_cookie_getlist(struct CookieInfo *, char *, char *, bool); void Curl_cookie_freelist(struct Cookie *); void Curl_cookie_cleanup(struct CookieInfo *); int Curl_cookie_output(struct CookieInfo *, char *); #endif criticalmass-1.0.0.orig/curl/lib/hash.c0000644000175000017500000001416310265631023017204 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hash.c,v 1.26 2005/01/25 00:06:29 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include "hash.h" #include "llist.h" #include "memory.h" /* this must be the last include file */ #include "memdebug.h" static unsigned long hash_str(const char *key, size_t key_length) { char *end = (char *) key + key_length; unsigned long h = 5381; while (key < end) { h += h << 5; h ^= (unsigned long) *key++; } return h; } static void hash_element_dtor(void *user, void *element) { struct curl_hash *h = (struct curl_hash *) user; struct curl_hash_element *e = (struct curl_hash_element *) element; if (e->key) free(e->key); h->dtor(e->ptr); free(e); } /* return 1 on error, 0 is fine */ int Curl_hash_init(struct curl_hash *h, int slots, curl_hash_dtor dtor) { int i; h->dtor = dtor; h->size = 0; h->slots = slots; h->table = (struct curl_llist **) malloc(slots * sizeof(struct curl_llist *)); if(h->table) { for (i = 0; i < slots; ++i) { h->table[i] = Curl_llist_alloc((curl_llist_dtor) hash_element_dtor); if(!h->table[i]) { while(i--) Curl_llist_destroy(h->table[i], NULL); free(h->table); return 1; /* failure */ } } return 0; /* fine */ } else return 1; /* failure */ } struct curl_hash * Curl_hash_alloc(int slots, curl_hash_dtor dtor) { struct curl_hash *h; h = (struct curl_hash *) malloc(sizeof(struct curl_hash)); if (h) { if(Curl_hash_init(h, slots, dtor)) { /* failure */ free(h); h = NULL; } } return h; } static int hash_key_compare(char *key1, size_t key1_len, char *key2, size_t key2_len) { if (key1_len == key2_len && *key1 == *key2 && memcmp(key1, key2, key1_len) == 0) { return 1; } return 0; } static struct curl_hash_element * mk_hash_element(char *key, size_t key_len, const void *p) { struct curl_hash_element *he = (struct curl_hash_element *) malloc(sizeof(struct curl_hash_element)); if(he) { char *dup = strdup(key); if(dup) { he->key = dup; he->key_len = key_len; he->ptr = (void *) p; } else { /* failed to duplicate the key, free memory and fail */ free(he); he = NULL; } } return he; } #define find_slot(__h, __k, __k_len) (hash_str(__k, __k_len) % (__h)->slots) #define FETCH_LIST(x,y,z) x->table[find_slot(x, y, z)] /* Return the data in the hash. If there already was a match in the hash, that data is returned. */ void * Curl_hash_add(struct curl_hash *h, char *key, size_t key_len, void *p) { struct curl_hash_element *he; struct curl_llist_element *le; struct curl_llist *l = FETCH_LIST(h, key, key_len); for (le = l->head; le; le = le->next) { he = (struct curl_hash_element *) le->ptr; if (hash_key_compare(he->key, he->key_len, key, key_len)) { h->dtor(p); /* remove the NEW entry */ return he->ptr; /* return the EXISTING entry */ } } he = mk_hash_element(key, key_len, p); if (he) { if(Curl_llist_insert_next(l, l->tail, he)) { ++h->size; return p; /* return the new entry */ } /* * Couldn't insert it, destroy the 'he' element and the key again. We * don't call hash_element_dtor() since that would also call the * "destructor" for the actual data 'p'. When we fail, we shall not touch * that data. */ free(he->key); free(he); } return NULL; /* failure */ } void * Curl_hash_pick(struct curl_hash *h, char *key, size_t key_len) { struct curl_llist_element *le; struct curl_hash_element *he; struct curl_llist *l = FETCH_LIST(h, key, key_len); for (le = l->head; le; le = le->next) { he = le->ptr; if (hash_key_compare(he->key, he->key_len, key, key_len)) { return he->ptr; } } return NULL; } #if defined(CURLDEBUG) && defined(AGGRESIVE_TEST) void Curl_hash_apply(curl_hash *h, void *user, void (*cb)(void *user, void *ptr)) { struct curl_llist_element *le; int i; for (i = 0; i < h->slots; ++i) { for (le = (h->table[i])->head; le; le = le->next) { curl_hash_element *el = le->ptr; cb(user, el->ptr); } } } #endif void Curl_hash_clean(struct curl_hash *h) { int i; for (i = 0; i < h->slots; ++i) { Curl_llist_destroy(h->table[i], (void *) h); } free(h->table); } void Curl_hash_clean_with_criterium(struct curl_hash *h, void *user, int (*comp)(void *, void *)) { struct curl_llist_element *le; struct curl_llist_element *lnext; struct curl_llist *list; int i; for (i = 0; i < h->slots; ++i) { list = h->table[i]; le = list->head; /* get first list entry */ while(le) { struct curl_hash_element *he = le->ptr; lnext = le->next; /* ask the callback function if we shall remove this entry or not */ if (comp(user, he->ptr)) { Curl_llist_remove(list, le, (void *) h); --h->size; /* one less entry in the hash now */ } le = lnext; } } } void Curl_hash_destroy(struct curl_hash *h) { if (!h) return; Curl_hash_clean(h); free(h); } criticalmass-1.0.0.orig/curl/lib/hash.h0000644000175000017500000000406010265631023017204 0ustar danieldaniel#ifndef __HASH_H #define __HASH_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hash.h,v 1.17 2005/01/25 00:06:29 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include "llist.h" typedef void (*curl_hash_dtor)(void *); struct curl_hash { struct curl_llist **table; curl_hash_dtor dtor; int slots; size_t size; }; struct curl_hash_element { void *ptr; char *key; size_t key_len; }; int Curl_hash_init(struct curl_hash *, int, curl_hash_dtor); struct curl_hash *Curl_hash_alloc(int, curl_hash_dtor); void *Curl_hash_add(struct curl_hash *, char *, size_t, void *); int Curl_hash_delete(struct curl_hash *h, char *key, size_t key_len); void *Curl_hash_pick(struct curl_hash *, char *, size_t); void Curl_hash_apply(struct curl_hash *h, void *user, void (*cb)(void *user, void *ptr)); int Curl_hash_count(struct curl_hash *h); void Curl_hash_clean(struct curl_hash *h); void Curl_hash_clean_with_criterium(struct curl_hash *h, void *user, int (*comp)(void *, void *)); void Curl_hash_destroy(struct curl_hash *h); #endif criticalmass-1.0.0.orig/curl/lib/Makefile.am0000644000175000017500000000052510276563764020170 0ustar danieldanielnoinst_LIBRARIES = libcurl.a libcurlincludedir = $(includedir)/SDL INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/lib -I$(top_srcdir)/lib # Makefile.inc provides the CSOURCES and HHEADERS defines include Makefile.inc libcurl_a_SOURCES = $(CSOURCES) $(HHEADERS) WIN32SOURCES = $(CSOURCES) WIN32HEADERS = $(HHEADERS) config-win32.h criticalmass-1.0.0.orig/curl/lib/Makefile.in0000644000175000017500000003755410302221113020156 0ustar danieldaniel# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # ./lib/Makefile.inc SOURCES = $(libcurl_a_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.inc $(srcdir)/config.h.in subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = config.h $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = LIBRARIES = $(noinst_LIBRARIES) ARFLAGS = cru libcurl_a_AR = $(AR) $(ARFLAGS) libcurl_a_LIBADD = am__objects_1 = file.$(OBJEXT) timeval.$(OBJEXT) base64.$(OBJEXT) \ hostip.$(OBJEXT) progress.$(OBJEXT) formdata.$(OBJEXT) \ cookie.$(OBJEXT) http.$(OBJEXT) sendf.$(OBJEXT) ftp.$(OBJEXT) \ url.$(OBJEXT) dict.$(OBJEXT) if2ip.$(OBJEXT) \ speedcheck.$(OBJEXT) ldap.$(OBJEXT) ssluse.$(OBJEXT) \ version.$(OBJEXT) getenv.$(OBJEXT) escape.$(OBJEXT) \ mprintf.$(OBJEXT) telnet.$(OBJEXT) netrc.$(OBJEXT) \ getinfo.$(OBJEXT) transfer.$(OBJEXT) strequal.$(OBJEXT) \ easy.$(OBJEXT) security.$(OBJEXT) krb4.$(OBJEXT) \ memdebug.$(OBJEXT) http_chunks.$(OBJEXT) strtok.$(OBJEXT) \ connect.$(OBJEXT) llist.$(OBJEXT) hash.$(OBJEXT) \ multi.$(OBJEXT) content_encoding.$(OBJEXT) share.$(OBJEXT) \ http_digest.$(OBJEXT) md5.$(OBJEXT) http_negotiate.$(OBJEXT) \ http_ntlm.$(OBJEXT) inet_pton.$(OBJEXT) strtoofft.$(OBJEXT) \ strerror.$(OBJEXT) hostares.$(OBJEXT) hostasyn.$(OBJEXT) \ hostip4.$(OBJEXT) hostip6.$(OBJEXT) hostsyn.$(OBJEXT) \ hostthre.$(OBJEXT) inet_ntop.$(OBJEXT) parsedate.$(OBJEXT) \ select.$(OBJEXT) gtls.$(OBJEXT) sslgen.$(OBJEXT) am__objects_2 = am_libcurl_a_OBJECTS = $(am__objects_1) $(am__objects_2) libcurl_a_OBJECTS = $(am_libcurl_a_OBJECTS) DEFAULT_INCLUDES = -I. -I$(srcdir) -I. -I$(top_builddir)/src depcomp = am__depfiles_maybe = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libcurl_a_SOURCES) DIST_SOURCES = $(libcurl_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CABUNDLE_FALSE = @CABUNDLE_FALSE@ CABUNDLE_TRUE = @CABUNDLE_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@ CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@ CURL_CA_BUNDLE = @CURL_CA_BUNDLE@ CURL_DISABLE_COOKIES = @CURL_DISABLE_COOKIES@ CURL_DISABLE_CRYPTO_AUTH = @CURL_DISABLE_CRYPTO_AUTH@ CURL_DISABLE_DICT = @CURL_DISABLE_DICT@ CURL_DISABLE_FILE = @CURL_DISABLE_FILE@ CURL_DISABLE_FTP = @CURL_DISABLE_FTP@ CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@ CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@ CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@ CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@ CURL_DISABLE_VERBOSE_STRINGS = @CURL_DISABLE_VERBOSE_STRINGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_ARES = @HAVE_ARES@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@ HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@ IDN_ENABLED = @IDN_ENABLED@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPV6_ENABLED = @IPV6_ENABLED@ KRB4_ENABLED = @KRB4_ENABLED@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MANOPT = @MANOPT@ MIMPURE_FALSE = @MIMPURE_FALSE@ MIMPURE_TRUE = @MIMPURE_TRUE@ NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@ NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@ NROFF = @NROFF@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKGADD_NAME = @PKGADD_NAME@ PKGADD_PKG = @PKGADD_PKG@ PKGADD_VENDOR = @PKGADD_VENDOR@ PKGCONFIG = @PKGCONFIG@ RANDOM_FILE = @RANDOM_FILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_GNUTLS = @USE_GNUTLS@ USE_MANUAL_FALSE = @USE_MANUAL_FALSE@ USE_MANUAL_TRUE = @USE_MANUAL_TRUE@ USE_SSLEAY = @USE_SSLEAY@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ ac_ct_AR = @ac_ct_AR@ ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ noinst_LIBRARIES = libcurl.a libcurlincludedir = $(includedir)/SDL INCLUDES = -I$(top_srcdir)/include -I$(top_builddir)/lib -I$(top_srcdir)/lib CSOURCES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c ssluse.c version.c getenv.c escape.c mprintf.c telnet.c \ netrc.c getinfo.c transfer.c strequal.c easy.c security.c krb4.c \ memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c multi.c \ content_encoding.c share.c http_digest.c md5.c http_negotiate.c \ http_ntlm.c inet_pton.c strtoofft.c strerror.c hostares.c hostasyn.c \ hostip4.c hostip6.c hostsyn.c hostthre.c inet_ntop.c parsedate.c \ select.c gtls.c sslgen.c HHEADERS = arpa_telnet.h netrc.h file.h timeval.h base64.h hostip.h \ progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h \ if2ip.h speedcheck.h urldata.h ldap.h ssluse.h escape.h telnet.h \ getinfo.h strequal.h krb4.h memdebug.h inet_ntoa_r.h \ http_chunks.h strtok.h connect.h llist.h hash.h content_encoding.h \ share.h md5.h http_digest.h http_negotiate.h http_ntlm.h ca-bundle.h \ inet_pton.h strtoofft.h strerror.h inet_ntop.h curlx.h memory.h \ setup.h transfer.h select.h easyif.h multiif.h parsedate.h sslgen.h \ gtls.h # Makefile.inc provides the CSOURCES and HHEADERS defines libcurl_a_SOURCES = $(CSOURCES) $(HHEADERS) WIN32SOURCES = $(CSOURCES) WIN32HEADERS = $(HHEADERS) config-win32.h all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps lib/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign --ignore-deps lib/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status lib/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libcurl.a: $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES) -rm -f libcurl.a $(libcurl_a_AR) libcurl.a $(libcurl_a_OBJECTS) $(libcurl_a_LIBADD) $(RANLIB) libcurl.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(COMPILE) -c $< .c.obj: $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: $(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) config.h installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-hdr \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-info-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: criticalmass-1.0.0.orig/curl/lib/netrc.c0000644000175000017500000001447110265631023017376 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: netrc.c,v 1.35 2005/05/02 14:33:07 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_PWD_H #include #endif #ifdef VMS #include #endif #include #include "netrc.h" #include "strequal.h" #include "strtok.h" #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" /* Debug this single source file with: 'make netrc' then run './netrc'! Oh, make sure you have a .netrc file too ;-) */ /* Get user and password from .netrc when given a machine name */ enum { NOTHING, HOSTFOUND, /* the 'machine' keyword was found */ HOSTCOMPLETE, /* the machine name following the keyword was found too */ HOSTVALID, /* this is "our" machine! */ HOSTEND /* LAST enum */ }; /* make sure we have room for at least this size: */ #define LOGINSIZE 64 #define PASSWORDSIZE 64 /* returns -1 on failure, 0 if the host is found, 1 is the host isn't found */ int Curl_parsenetrc(char *host, char *login, char *password, char *netrcfile) { FILE *file; int retcode=1; int specific_login = (login[0] != 0); char *home = NULL; bool home_alloc = FALSE; bool netrc_alloc = FALSE; int state=NOTHING; char state_login=0; /* Found a login keyword */ char state_password=0; /* Found a password keyword */ int state_our_login=FALSE; /* With specific_login, found *our* login name */ #define NETRC DOT_CHAR "netrc" #ifdef CURLDEBUG { /* This is a hack to allow testing. * If compiled with --enable-debug and CURL_DEBUG_NETRC is defined, * then it's the path to a substitute .netrc for testing purposes *only* */ char *override = curl_getenv("CURL_DEBUG_NETRC"); if (override) { fprintf(stderr, "NETRC: overridden " NETRC " file: %s\n", override); netrcfile = override; netrc_alloc = TRUE; } } #endif /* CURLDEBUG */ if(!netrcfile) { home = curl_getenv("HOME"); /* portable environment reader */ if(home) { home_alloc = TRUE; #if defined(HAVE_GETPWUID) && defined(HAVE_GETEUID) } else { struct passwd *pw; pw= getpwuid(geteuid()); if (pw) { #ifdef VMS home = decc$translate_vms(pw->pw_dir); #else home = pw->pw_dir; #endif } #endif } if(!home) return -1; netrcfile = curl_maprintf("%s%s%s", home, DIR_CHAR, NETRC); if(!netrcfile) { if(home_alloc) free(home); return -1; } netrc_alloc = TRUE; } file = fopen(netrcfile, "r"); if(file) { char *tok; char *tok_buf; bool done=FALSE; char netrcbuffer[256]; while(!done && fgets(netrcbuffer, sizeof(netrcbuffer), file)) { tok=strtok_r(netrcbuffer, " \t\n", &tok_buf); while(!done && tok) { if (login[0] && password[0]) { done=TRUE; break; } switch(state) { case NOTHING: if(strequal("machine", tok)) { /* the next tok is the machine name, this is in itself the delimiter that starts the stuff entered for this machine, after this we need to search for 'login' and 'password'. */ state=HOSTFOUND; } break; case HOSTFOUND: if(strequal(host, tok)) { /* and yes, this is our host! */ state=HOSTVALID; #ifdef _NETRC_DEBUG fprintf(stderr, "HOST: %s\n", tok); #endif retcode=0; /* we did find our host */ } else /* not our host */ state=NOTHING; break; case HOSTVALID: /* we are now parsing sub-keywords concerning "our" host */ if(state_login) { if (specific_login) { state_our_login = strequal(login, tok); } else { strncpy(login, tok, LOGINSIZE-1); #ifdef _NETRC_DEBUG fprintf(stderr, "LOGIN: %s\n", login); #endif } state_login=0; } else if(state_password) { if (state_our_login || !specific_login) { strncpy(password, tok, PASSWORDSIZE-1); #ifdef _NETRC_DEBUG fprintf(stderr, "PASSWORD: %s\n", password); #endif } state_password=0; } else if(strequal("login", tok)) state_login=1; else if(strequal("password", tok)) state_password=1; else if(strequal("machine", tok)) { /* ok, there's machine here go => */ state = HOSTFOUND; state_our_login = FALSE; } break; } /* switch (state) */ tok = strtok_r(NULL, " \t\n", &tok_buf); } /* while (tok) */ } /* while fgets() */ fclose(file); } if(home_alloc) free(home); if(netrc_alloc) free(netrcfile); return retcode; } #ifdef _NETRC_DEBUG int main(int argc, char **argv) { char login[64]=""; char password[64]=""; if(argc<2) return -1; if(0 == ParseNetrc(argv[1], login, password)) { printf("HOST: %s LOGIN: %s PASSWORD: %s\n", argv[1], login, password); } } #endif criticalmass-1.0.0.orig/curl/lib/netrc.h0000644000175000017500000000272210265631023017377 0ustar danieldaniel#ifndef __NETRC_H #define __NETRC_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: netrc.h,v 1.11 2004/01/07 09:19:35 bagder Exp $ ***************************************************************************/ int Curl_parsenetrc(char *host, char *login, char *password, char *filename); /* Assume: password[0]=0, host[0] != 0. * If login[0] = 0, search for login and password within a machine section * in the netrc. * If login[0] != 0, search for password within machine and login. */ #endif criticalmass-1.0.0.orig/curl/lib/gtls.c0000644000175000017500000003517610265631023017241 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: gtls.c,v 1.7 2005/04/22 20:56:26 bagder Exp $ ***************************************************************************/ /* * Source file for all GnuTLS-specific code for the TLS/SSL layer. No code * but sslgen.c should ever call or use these functions. * * Note: don't use the GnuTLS' *_t variable type names in this source code, * since they were not present in 1.0.X. */ #include "setup.h" #ifdef USE_GNUTLS #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #include "urldata.h" #include "sendf.h" #include "gtls.h" #include "sslgen.h" #include "parsedate.h" #include "connect.h" /* for the connect timeout */ #include "select.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /* Enable GnuTLS debugging by defining GTLSDEBUG */ /*#define GTLSDEBUG */ #ifdef GTLSDEBUG static void tls_log_func(int level, const char *str) { fprintf(stderr, "|<%d>| %s", level, str); } #endif /* Global GnuTLS init, called from Curl_ssl_init() */ int Curl_gtls_init(void) { gnutls_global_init(); #ifdef GTLSDEBUG gnutls_global_set_log_function(tls_log_func); gnutls_global_set_log_level(2); #endif return 1; } int Curl_gtls_cleanup(void) { gnutls_global_deinit(); return 1; } static void showtime(struct SessionHandle *data, const char *text, time_t stamp) { struct tm *tm; #ifdef HAVE_GMTIME_R struct tm buffer; tm = (struct tm *)gmtime_r(&stamp, &buffer); #else tm = gmtime(&stamp); #endif snprintf(data->state.buffer, BUFSIZE, "\t %s: %s, %02d %s %4d %02d:%02d:%02d GMT\n", text, Curl_wkday[tm->tm_wday?tm->tm_wday-1:6], tm->tm_mday, Curl_month[tm->tm_mon], tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec); infof(data, "%s", data->state.buffer); } /* * This function is called after the TCP connect has completed. Setup the TLS * layer and do all necessary magic. */ CURLcode Curl_gtls_connect(struct connectdata *conn, int sockindex) { const int cert_type_priority[] = { GNUTLS_CRT_X509, 0 }; struct SessionHandle *data = conn->data; gnutls_session session; int rc; unsigned int cert_list_size; const gnutls_datum *chainp; unsigned int verify_status; gnutls_x509_crt x509_cert; char certbuf[256]; /* big enough? */ size_t size; unsigned int algo; unsigned int bits; time_t clock; const char *ptr; void *ssl_sessionid; size_t ssl_idsize; /* GnuTLS only supports TLSv1 (and SSLv3?) */ if(data->set.ssl.version == CURL_SSLVERSION_SSLv2) { failf(data, "GnuTLS does not support SSLv2"); return CURLE_SSL_CONNECT_ERROR; } /* allocate a cred struct */ rc = gnutls_certificate_allocate_credentials(&conn->ssl[sockindex].cred); if(rc < 0) { failf(data, "gnutls_cert_all_cred() failed: %s", gnutls_strerror(rc)); return CURLE_SSL_CONNECT_ERROR; } if(data->set.ssl.CAfile) { /* set the trusted CA cert bundle file */ rc = gnutls_certificate_set_x509_trust_file(conn->ssl[sockindex].cred, data->set.ssl.CAfile, GNUTLS_X509_FMT_PEM); if(rc < 0) { infof(data, "error reading ca cert file %s (%s)\n", data->set.ssl.CAfile, gnutls_strerror(rc)); } } /* Initialize TLS session as a client */ rc = gnutls_init(&conn->ssl[sockindex].session, GNUTLS_CLIENT); if(rc) { failf(data, "gnutls_init() failed: %d", rc); return CURLE_SSL_CONNECT_ERROR; } /* convenient assign */ session = conn->ssl[sockindex].session; /* Use default priorities */ rc = gnutls_set_default_priority(session); if(rc < 0) return CURLE_SSL_CONNECT_ERROR; /* Sets the priority on the certificate types supported by gnutls. Priority is higher for types specified before others. After specifying the types you want, you must append a 0. */ rc = gnutls_certificate_type_set_priority(session, cert_type_priority); if(rc < 0) return CURLE_SSL_CONNECT_ERROR; /* put the anonymous credentials to the current session */ rc = gnutls_credentials_set(session, GNUTLS_CRD_CERTIFICATE, conn->ssl[sockindex].cred); /* set the connection handle (file descriptor for the socket) */ gnutls_transport_set_ptr(session, (gnutls_transport_ptr)conn->sock[sockindex]); /* This might be a reconnect, so we check for a session ID in the cache to speed up things */ if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, &ssl_idsize)) { /* we got a session id, use it! */ gnutls_session_set_data(session, ssl_sessionid, ssl_idsize); /* Informational message */ infof (data, "SSL re-using session ID\n"); } do { rc = gnutls_handshake(session); if((rc == GNUTLS_E_AGAIN) || (rc == GNUTLS_E_INTERRUPTED)) { long timeout_ms; long has_passed; if(data->set.timeout || data->set.connecttimeout) { /* get the most strict timeout of the ones converted to milliseconds */ if(data->set.timeout && (data->set.timeout>data->set.connecttimeout)) timeout_ms = data->set.timeout*1000; else timeout_ms = data->set.connecttimeout*1000; } else timeout_ms = DEFAULT_CONNECT_TIMEOUT; /* Evaluate in milliseconds how much time that has passed */ has_passed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle); /* subtract the passed time */ timeout_ms -= has_passed; if(timeout_ms < 0) { /* a precaution, no need to continue if time already is up */ failf(data, "SSL connection timeout"); return CURLE_OPERATION_TIMEOUTED; } rc = Curl_select(conn->sock[sockindex], conn->sock[sockindex], (int)timeout_ms); if(rc > 0) /* reabable or writable, go loop*/ continue; else if(0 == rc) { /* timeout */ failf(data, "SSL connection timeout"); return CURLE_OPERATION_TIMEDOUT; } else { /* anything that gets here is fatally bad */ failf(data, "select on SSL socket, errno: %d", Curl_ourerrno()); return CURLE_SSL_CONNECT_ERROR; } } else break; } while(1); if (rc < 0) { failf(data, "gnutls_handshake() failed: %d", rc); /* gnutls_perror(ret); */ return CURLE_SSL_CONNECT_ERROR; } /* This function will return the peer's raw certificate (chain) as sent by the peer. These certificates are in raw format (DER encoded for X.509). In case of a X.509 then a certificate list may be present. The first certificate in the list is the peer's certificate, following the issuer's certificate, then the issuer's issuer etc. */ chainp = gnutls_certificate_get_peers(session, &cert_list_size); if(!chainp) { if(data->set.ssl.verifyhost) { failf(data, "failed to get server cert"); return CURLE_SSL_PEER_CERTIFICATE; } infof(data, "\t common name: WARNING couldn't obtain\n"); } /* This function will try to verify the peer's certificate and return its status (trusted, invalid etc.). The value of status should be one or more of the gnutls_certificate_status_t enumerated elements bitwise or'd. To avoid denial of service attacks some default upper limits regarding the certificate key size and chain size are set. To override them use gnutls_certificate_set_verify_limits(). */ rc = gnutls_certificate_verify_peers2(session, &verify_status); if (rc < 0) { failf(data, "server cert verify failed: %d", rc); return CURLE_SSL_CONNECT_ERROR; } /* verify_status is a bitmask of gnutls_certificate_status bits */ if(verify_status & GNUTLS_CERT_INVALID) { if (data->set.ssl.verifypeer) { failf(data, "server certificate verification failed. CAfile: %s", data->set.ssl.CAfile?data->set.ssl.CAfile:"none"); return CURLE_SSL_CACERT; } else infof(data, "\t server certificate verification FAILED\n"); } else infof(data, "\t server certificate verification OK\n"); /* initialize an X.509 certificate structure. */ gnutls_x509_crt_init(&x509_cert); /* convert the given DER or PEM encoded Certificate to the native gnutls_x509_crt_t format */ gnutls_x509_crt_import(x509_cert, chainp, GNUTLS_X509_FMT_DER); size=sizeof(certbuf); rc = gnutls_x509_crt_get_dn_by_oid(x509_cert, GNUTLS_OID_X520_COMMON_NAME, 0, /* the first and only one */ FALSE, certbuf, &size); if(rc) { infof(data, "error fetching CN from cert:%s\n", gnutls_strerror(rc)); } /* This function will check if the given certificate's subject matches the given hostname. This is a basic implementation of the matching described in RFC2818 (HTTPS), which takes into account wildcards, and the subject alternative name PKIX extension. Returns non zero on success, and zero on failure. */ rc = gnutls_x509_crt_check_hostname(x509_cert, conn->host.name); if(!rc) { if (data->set.ssl.verifyhost > 1) { failf(data, "SSL: certificate subject name (%s) does not match " "target host name '%s'", certbuf, conn->host.dispname); gnutls_x509_crt_deinit(x509_cert); return CURLE_SSL_PEER_CERTIFICATE; } else infof(data, "\t common name: %s (does not match '%s')\n", certbuf, conn->host.dispname); } else infof(data, "\t common name: %s (matched)\n", certbuf); /* Show: - ciphers used - subject - start date - expire date - common name - issuer */ /* public key algorithm's parameters */ algo = gnutls_x509_crt_get_pk_algorithm(x509_cert, &bits); infof(data, "\t certificate public key: %s\n", gnutls_pk_algorithm_get_name(algo)); /* version of the X.509 certificate. */ infof(data, "\t certificate version: #%d\n", gnutls_x509_crt_get_version(x509_cert)); size = sizeof(certbuf); gnutls_x509_crt_get_dn(x509_cert, certbuf, &size); infof(data, "\t subject: %s\n", certbuf); clock = gnutls_x509_crt_get_activation_time(x509_cert); showtime(data, "start date", clock); clock = gnutls_x509_crt_get_expiration_time(x509_cert); showtime(data, "expire date", clock); size = sizeof(certbuf); gnutls_x509_crt_get_issuer_dn(x509_cert, certbuf, &size); infof(data, "\t issuer: %s\n", certbuf); gnutls_x509_crt_deinit(x509_cert); /* compression algorithm (if any) */ ptr = gnutls_compression_get_name(gnutls_compression_get(session)); /* the *_get_name() says "NULL" if GNUTLS_COMP_NULL is returned */ infof(data, "\t compression: %s\n", ptr); /* the name of the cipher used. ie 3DES. */ ptr = gnutls_cipher_get_name(gnutls_cipher_get(session)); infof(data, "\t cipher: %s\n", ptr); /* the MAC algorithms name. ie SHA1 */ ptr = gnutls_mac_get_name(gnutls_mac_get(session)); infof(data, "\t MAC: %s\n", ptr); if(!ssl_sessionid) { /* this session was not previously in the cache, add it now */ /* get the session ID data size */ gnutls_session_get_data(session, NULL, &ssl_idsize); ssl_sessionid = malloc(ssl_idsize); /* get a buffer for it */ if(ssl_sessionid) { /* extract session ID to the allocated buffer */ gnutls_session_get_data(session, ssl_sessionid, &ssl_idsize); /* store this session id */ return Curl_ssl_addsessionid(conn, ssl_sessionid, ssl_idsize); } } return CURLE_OK; } /* return number of sent (non-SSL) bytes */ int Curl_gtls_send(struct connectdata *conn, int sockindex, void *mem, size_t len) { int rc; rc = gnutls_record_send(conn->ssl[sockindex].session, mem, len); return rc; } void Curl_gtls_close_all(struct SessionHandle *data) { /* FIX: make the OpenSSL code more generic and use parts of it here */ (void)data; } static void close_one(struct connectdata *conn, int index) { if(conn->ssl[index].session) { gnutls_bye(conn->ssl[index].session, GNUTLS_SHUT_RDWR); gnutls_deinit(conn->ssl[index].session); } gnutls_certificate_free_credentials(conn->ssl[index].cred); } void Curl_gtls_close(struct connectdata *conn) { if(conn->ssl[0].use) close_one(conn, 0); if(conn->ssl[1].use) close_one(conn, 1); } /* * If the read would block we return -1 and set 'wouldblock' to TRUE. * Otherwise we return the amount of data read. Other errors should return -1 * and set 'wouldblock' to FALSE. */ ssize_t Curl_gtls_recv(struct connectdata *conn, /* connection data */ int num, /* socketindex */ char *buf, /* store read data here */ size_t buffersize, /* max amount to read */ bool *wouldblock) { ssize_t ret; ret = gnutls_record_recv(conn->ssl[num].session, buf, buffersize); if((ret == GNUTLS_E_AGAIN) || (ret == GNUTLS_E_INTERRUPTED)) { *wouldblock = TRUE; return -1; } *wouldblock = FALSE; if (!ret) { failf(conn->data, "Peer closed the TLS connection"); return -1; } if (ret < 0) { failf(conn->data, "GnuTLS recv error (%d): %s", (int)ret, gnutls_strerror(ret)); return -1; } return ret; } void Curl_gtls_session_free(void *ptr) { free(ptr); } size_t Curl_gtls_version(char *buffer, size_t size) { return snprintf(buffer, size, " GnuTLS/%s", gnutls_check_version(NULL)); } #endif /* USE_GNUTLS */ criticalmass-1.0.0.orig/curl/lib/gtls.h0000644000175000017500000000401410265631023017231 0ustar danieldaniel#ifndef __GTLS_H #define __GTLS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: gtls.h,v 1.1 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ int Curl_gtls_init(void); int Curl_gtls_cleanup(void); CURLcode Curl_gtls_connect(struct connectdata *conn, int sockindex); /* tell GnuTLS to close down all open information regarding connections (and thus session ID caching etc) */ void Curl_gtls_close_all(struct SessionHandle *data); void Curl_gtls_close(struct connectdata *conn); /* close a SSL connection */ /* return number of sent (non-SSL) bytes */ int Curl_gtls_send(struct connectdata *conn, int sockindex, void *mem, size_t len); ssize_t Curl_gtls_recv(struct connectdata *conn, /* connection data */ int num, /* socketindex */ char *buf, /* store read data here */ size_t buffersize, /* max amount to read */ bool *wouldblock); void Curl_gtls_session_free(void *ptr); size_t Curl_gtls_version(char *buffer, size_t size); #endif criticalmass-1.0.0.orig/curl/lib/arpa_telnet.h0000644000175000017500000000744110265631023020565 0ustar danieldaniel#ifndef __ARPA_TELNET_H #define __ARPA_TELNET_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: arpa_telnet.h,v 1.12 2004/12/20 18:23:43 danf Exp $ ***************************************************************************/ #ifndef CURL_DISABLE_TELNET /* * Telnet option defines. Add more here if in need. */ #define CURL_TELOPT_BINARY 0 /* binary 8bit data */ #define CURL_TELOPT_SGA 3 /* Supress Go Ahead */ #define CURL_TELOPT_EXOPL 255 /* EXtended OPtions List */ #define CURL_TELOPT_TTYPE 24 /* Terminal TYPE */ #define CURL_TELOPT_XDISPLOC 35 /* X DISPlay LOCation */ #define CURL_TELOPT_NEW_ENVIRON 39 /* NEW ENVIRONment variables */ #define CURL_NEW_ENV_VAR 0 #define CURL_NEW_ENV_VALUE 1 /* * The telnet options represented as strings */ static const char * const telnetoptions[]= { "BINARY", "ECHO", "RCP", "SUPPRESS GO AHEAD", "NAME", "STATUS", "TIMING MARK", "RCTE", "NAOL", "NAOP", "NAOCRD", "NAOHTS", "NAOHTD", "NAOFFD", "NAOVTS", "NAOVTD", "NAOLFD", "EXTEND ASCII", "LOGOUT", "BYTE MACRO", "DE TERMINAL", "SUPDUP", "SUPDUP OUTPUT", "SEND LOCATION", "TERM TYPE", "END OF RECORD", "TACACS UID", "OUTPUT MARKING", "TTYLOC", "3270 REGIME", "X3 PAD", "NAWS", "TERM SPEED", "LFLOW", "LINEMODE", "XDISPLOC", "OLD-ENVIRON", "AUTHENTICATION", "ENCRYPT", "NEW-ENVIRON" }; #define CURL_TELOPT_MAXIMUM CURL_TELOPT_NEW_ENVIRON #define CURL_TELOPT_OK(x) ((x) <= CURL_TELOPT_MAXIMUM) #define CURL_TELOPT(x) telnetoptions[x] #define CURL_NTELOPTS 40 /* * First some defines */ #define CURL_xEOF 236 /* End Of File */ #define CURL_SE 240 /* Sub negotiation End */ #define CURL_NOP 241 /* No OPeration */ #define CURL_DM 242 /* Data Mark */ #define CURL_GA 249 /* Go Ahead, reverse the line */ #define CURL_SB 250 /* SuBnegotiation */ #define CURL_WILL 251 /* Our side WILL use this option */ #define CURL_WONT 252 /* Our side WON'T use this option */ #define CURL_DO 253 /* DO use this option! */ #define CURL_DONT 254 /* DON'T use this option! */ #define CURL_IAC 255 /* Interpret As Command */ /* * Then those numbers represented as strings: */ static const char * const telnetcmds[]= { "EOF", "SUSP", "ABORT", "EOR", "SE", "NOP", "DMARK", "BRK", "IP", "AO", "AYT", "EC", "EL", "GA", "SB", "WILL", "WONT", "DO", "DONT", "IAC" }; #define CURL_TELCMD_MINIMUM CURL_xEOF /* the first one */ #define CURL_TELCMD_MAXIMUM CURL_IAC /* surprise, 255 is the last one! ;-) */ #define CURL_TELQUAL_IS 0 #define CURL_TELQUAL_SEND 1 #define CURL_TELQUAL_INFO 2 #define CURL_TELQUAL_NAME 3 #define CURL_TELCMD_OK(x) ( ((unsigned int)(x) >= CURL_TELCMD_MINIMUM) && \ ((unsigned int)(x) <= CURL_TELCMD_MAXIMUM) ) #define CURL_TELCMD(x) telnetcmds[(x)-CURL_TELCMD_MINIMUM] #endif #endif criticalmass-1.0.0.orig/curl/lib/http.c0000644000175000017500000021351310265631023017240 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http.c,v 1.272 2005/05/11 09:52:59 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_HTTP /* -- WIN32 approved -- */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #include #else #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #include #ifdef HAVE_TIME_H #ifdef TIME_WITH_SYS_TIME #include #endif #endif #ifdef HAVE_UNISTD_H #include #endif #include #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_NET_IF_H #include #endif #include #include #ifdef HAVE_SYS_PARAM_H #include #endif #endif #include "urldata.h" #include #include "transfer.h" #include "sendf.h" #include "formdata.h" #include "progress.h" #include "base64.h" #include "cookie.h" #include "strequal.h" #include "sslgen.h" #include "http_digest.h" #include "http_ntlm.h" #include "http_negotiate.h" #include "url.h" #include "share.h" #include "hostip.h" #include "http.h" #include "memory.h" #include "select.h" #include "parsedate.h" /* for the week day and month names */ #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" /* * checkheaders() checks the linked list of custom HTTP headers for a * particular header (prefix). * * Returns a pointer to the first matching header or NULL if none matched. */ static char *checkheaders(struct SessionHandle *data, const char *thisheader) { struct curl_slist *head; size_t thislen = strlen(thisheader); for(head = data->set.headers; head; head=head->next) { if(strnequal(head->data, thisheader, thislen)) return head->data; } return NULL; } /* * Curl_output_basic() sets up an Authorization: header (or the proxy version) * for HTTP Basic authentication. * * Returns CURLcode. */ static CURLcode Curl_output_basic(struct connectdata *conn, bool proxy) { char *authorization; struct SessionHandle *data=conn->data; char **userp; char *user; char *pwd; if(proxy) { userp = &conn->allocptr.proxyuserpwd; user = conn->proxyuser; pwd = conn->proxypasswd; } else { userp = &conn->allocptr.userpwd; user = conn->user; pwd = conn->passwd; } snprintf(data->state.buffer, sizeof(data->state.buffer), "%s:%s", user, pwd); if(Curl_base64_encode(data->state.buffer, strlen(data->state.buffer), &authorization) > 0) { if(*userp) free(*userp); *userp = aprintf( "%sAuthorization: Basic %s\015\012", proxy?"Proxy-":"", authorization); free(authorization); } else return CURLE_OUT_OF_MEMORY; return CURLE_OK; } /* pickoneauth() selects the most favourable authentication method from the * ones available and the ones we want. * * return TRUE if one was picked */ static bool pickoneauth(struct auth *pick) { bool picked; /* only deal with authentication we want */ long avail = pick->avail & pick->want; picked = TRUE; /* The order of these checks is highly relevant, as this will be the order of preference in case of the existance of multiple accepted types. */ if(avail & CURLAUTH_GSSNEGOTIATE) pick->picked = CURLAUTH_GSSNEGOTIATE; else if(avail & CURLAUTH_DIGEST) pick->picked = CURLAUTH_DIGEST; else if(avail & CURLAUTH_NTLM) pick->picked = CURLAUTH_NTLM; else if(avail & CURLAUTH_BASIC) pick->picked = CURLAUTH_BASIC; else { pick->picked = CURLAUTH_PICKNONE; /* we select to use nothing */ picked = FALSE; } pick->avail = CURLAUTH_NONE; /* clear it here */ return picked; } /* * perhapsrewind() * * If we are doing POST or PUT { * If we have more data to send { * If we are doing NTLM { * Keep sending since we must not disconnect * } * else { * If there is more than just a little data left to send, close * the current connection by force. * } * } * If we have sent any data { * If we don't have track of all the data { * call app to tell it to rewind * } * else { * rewind internally so that the operation can restart fine * } * } * } */ static CURLcode perhapsrewind(struct connectdata *conn) { struct HTTP *http = conn->proto.http; struct SessionHandle *data = conn->data; curl_off_t bytessent; curl_off_t expectsend = -1; /* default is unknown */ if(!http) /* If this is still NULL, we have not reach very far and we can safely skip this rewinding stuff */ return CURLE_OK; bytessent = http->writebytecount; if(conn->bits.authneg) /* This is a state where we are known to be negotiating and we don't send any data then. */ expectsend = 0; else { /* figure out how much data we are expected to send */ switch(data->set.httpreq) { case HTTPREQ_POST: if(data->set.postfieldsize != -1) expectsend = data->set.postfieldsize; break; case HTTPREQ_PUT: if(data->set.infilesize != -1) expectsend = data->set.infilesize; break; case HTTPREQ_POST_FORM: expectsend = http->postsize; break; default: break; } } conn->bits.rewindaftersend = FALSE; /* default */ if((expectsend == -1) || (expectsend > bytessent)) { /* There is still data left to send */ if((data->state.authproxy.picked == CURLAUTH_NTLM) || (data->state.authhost.picked == CURLAUTH_NTLM)) { if(((expectsend - bytessent) < 2000) || (conn->ntlm.state != NTLMSTATE_NONE)) { /* The NTLM-negotiation has started *OR* there is just a little (<2K) data left to send, keep on sending. */ /* rewind data when completely done sending! */ if(!conn->bits.authneg) conn->bits.rewindaftersend = TRUE; return CURLE_OK; } if(conn->bits.close) /* this is already marked to get closed */ return CURLE_OK; infof(data, "NTLM send, close instead of sending %ld bytes\n", expectsend - bytessent); } /* This is not NTLM or NTLM with many bytes left to send: close */ conn->bits.close = TRUE; conn->size = 0; /* don't download any more than 0 bytes */ } if(bytessent) return Curl_readrewind(conn); return CURLE_OK; } /* * Curl_http_auth_act() gets called when a all HTTP headers have been received * and it checks what authentication methods that are available and decides * which one (if any) to use. It will set 'newurl' if an auth metod was * picked. */ CURLcode Curl_http_auth_act(struct connectdata *conn) { struct SessionHandle *data = conn->data; bool pickhost = FALSE; bool pickproxy = FALSE; CURLcode code = CURLE_OK; if(100 == conn->keep.httpcode) /* this is a transient response code, ignore */ return CURLE_OK; if(data->state.authproblem) return data->set.http_fail_on_error?CURLE_HTTP_RETURNED_ERROR:CURLE_OK; if(conn->bits.user_passwd && ((conn->keep.httpcode == 401) || (conn->bits.authneg && conn->keep.httpcode < 300))) { pickhost = pickoneauth(&data->state.authhost); if(!pickhost) data->state.authproblem = TRUE; } if(conn->bits.proxy_user_passwd && ((conn->keep.httpcode == 407) || (conn->bits.authneg && conn->keep.httpcode < 300))) { pickproxy = pickoneauth(&data->state.authproxy); if(!pickproxy) data->state.authproblem = TRUE; } if(pickhost || pickproxy) { conn->newurl = strdup(data->change.url); /* clone URL */ if((data->set.httpreq != HTTPREQ_GET) && (data->set.httpreq != HTTPREQ_HEAD) && !conn->bits.rewindaftersend) { code = perhapsrewind(conn); if(code) return code; } } else if((conn->keep.httpcode < 300) && (!data->state.authhost.done) && conn->bits.authneg) { /* no (known) authentication available, authentication is not "done" yet and no authentication seems to be required and we didn't try HEAD or GET */ if((data->set.httpreq != HTTPREQ_GET) && (data->set.httpreq != HTTPREQ_HEAD)) { conn->newurl = strdup(data->change.url); /* clone URL */ data->state.authhost.done = TRUE; } } if (Curl_http_should_fail(conn)) { failf (data, "The requested URL returned error: %d", conn->keep.httpcode); code = CURLE_HTTP_RETURNED_ERROR; } return code; } /** * Curl_http_output_auth() setups the authentication headers for the * host/proxy and the correct authentication * method. conn->data->state.authdone is set to TRUE when authentication is * done. * * @param conn all information about the current connection * @param request pointer to the request keyword * @param path pointer to the requested path * @param proxytunnel boolean if this is the request setting up a "proxy * tunnel" * * @returns CURLcode */ static CURLcode Curl_http_output_auth(struct connectdata *conn, char *request, char *path, bool proxytunnel) /* TRUE if this is the request setting up the proxy tunnel */ { CURLcode result = CURLE_OK; struct SessionHandle *data = conn->data; char *auth=NULL; struct auth *authhost; struct auth *authproxy; curlassert(data); authhost = &data->state.authhost; authproxy = &data->state.authproxy; if((conn->bits.httpproxy && conn->bits.proxy_user_passwd) || conn->bits.user_passwd) /* continue please */ ; else { authhost->done = TRUE; authproxy->done = TRUE; return CURLE_OK; /* no authentication with no user or password */ } if(authhost->want && !authhost->picked) /* The app has selected one or more methods, but none has been picked so far by a server round-trip. Then we set the picked one to the want one, and if this is one single bit it'll be used instantly. */ authhost->picked = authhost->want; if(authproxy->want && !authproxy->picked) /* The app has selected one or more methods, but none has been picked so far by a proxy round-trip. Then we set the picked one to the want one, and if this is one single bit it'll be used instantly. */ authproxy->picked = authproxy->want; /* Send proxy authentication header if needed */ if (conn->bits.httpproxy && (conn->bits.tunnel_proxy == proxytunnel)) { #ifdef USE_NTLM if(authproxy->picked == CURLAUTH_NTLM) { auth=(char *)"NTLM"; result = Curl_output_ntlm(conn, TRUE); if(result) return result; } else #endif if(authproxy->picked == CURLAUTH_BASIC) { /* Basic */ if(conn->bits.proxy_user_passwd && !checkheaders(data, "Proxy-authorization:")) { auth=(char *)"Basic"; result = Curl_output_basic(conn, TRUE); if(result) return result; } /* NOTE: Curl_output_basic() should set 'done' TRUE, as the other auth functions work that way */ authproxy->done = TRUE; } #ifndef CURL_DISABLE_CRYPTO_AUTH else if(authproxy->picked == CURLAUTH_DIGEST) { auth=(char *)"Digest"; result = Curl_output_digest(conn, TRUE, /* proxy */ (unsigned char *)request, (unsigned char *)path); if(result) return result; } #endif if(auth) { infof(data, "Proxy auth using %s with user '%s'\n", auth, conn->proxyuser?conn->proxyuser:""); authproxy->multi = !authproxy->done; } else authproxy->multi = FALSE; } else /* we have no proxy so let's pretend we're done authenticating with it */ authproxy->done = TRUE; /* To prevent the user+password to get sent to other than the original host due to a location-follow, we do some weirdo checks here */ if(!data->state.this_is_a_follow || conn->bits.netrc || !data->state.first_host || curl_strequal(data->state.first_host, conn->host.name) || data->set.http_disable_hostname_check_before_authentication) { /* Send web authentication header if needed */ { auth = NULL; #ifdef HAVE_GSSAPI if((authhost->picked == CURLAUTH_GSSNEGOTIATE) && data->state.negotiate.context && !GSS_ERROR(data->state.negotiate.status)) { auth=(char *)"GSS-Negotiate"; result = Curl_output_negotiate(conn); if (result) return result; authhost->done = TRUE; } else #endif #ifdef USE_NTLM if(authhost->picked == CURLAUTH_NTLM) { auth=(char *)"NTLM"; result = Curl_output_ntlm(conn, FALSE); if(result) return result; } else #endif { #ifndef CURL_DISABLE_CRYPTO_AUTH if(authhost->picked == CURLAUTH_DIGEST) { auth=(char *)"Digest"; result = Curl_output_digest(conn, FALSE, /* not a proxy */ (unsigned char *)request, (unsigned char *)path); if(result) return result; } else #endif if(authhost->picked == CURLAUTH_BASIC) { if(conn->bits.user_passwd && !checkheaders(data, "Authorization:")) { auth=(char *)"Basic"; result = Curl_output_basic(conn, FALSE); if(result) return result; } /* basic is always ready */ authhost->done = TRUE; } } if(auth) { infof(data, "Server auth using %s with user '%s'\n", auth, conn->user); authhost->multi = !authhost->done; } else authhost->multi = FALSE; } } else authhost->done = TRUE; return result; } /* * Curl_http_input_auth() deals with Proxy-Authenticate: and WWW-Authenticate: * headers. They are dealt with both in the transfer.c main loop and in the * proxy CONNECT loop. */ CURLcode Curl_http_input_auth(struct connectdata *conn, int httpcode, char *header) /* the first non-space */ { /* * This resource requires authentication */ struct SessionHandle *data = conn->data; long *availp; char *start; struct auth *authp; if (httpcode == 407) { start = header+strlen("Proxy-authenticate:"); availp = &data->info.proxyauthavail; authp = &data->state.authproxy; } else { start = header+strlen("WWW-Authenticate:"); availp = &data->info.httpauthavail; authp = &data->state.authhost; } /* pass all white spaces */ while(*start && isspace((int)*start)) start++; /* * Here we check if we want the specific single authentiction (using ==) and * if we do, we initiate usage of it. * * If the provided authentication is wanted as one out of several accepted * types (using &), we OR this authenticaion type to the authavail * variable. */ #ifdef HAVE_GSSAPI if (checkprefix("GSS-Negotiate", start) || checkprefix("Negotiate", start)) { *availp |= CURLAUTH_GSSNEGOTIATE; authp->avail |= CURLAUTH_GSSNEGOTIATE; if(authp->picked == CURLAUTH_GSSNEGOTIATE) { /* if exactly this is wanted, go */ int neg = Curl_input_negotiate(conn, start); if (neg == 0) { conn->newurl = strdup(data->change.url); data->state.authproblem = (conn->newurl == NULL); } else { infof(data, "Authentication problem. Ignoring this.\n"); data->state.authproblem = TRUE; } } } else #endif #ifdef USE_NTLM /* NTLM support requires the SSL crypto libs */ if(checkprefix("NTLM", start)) { *availp |= CURLAUTH_NTLM; authp->avail |= CURLAUTH_NTLM; if(authp->picked == CURLAUTH_NTLM) { /* NTLM authentication is picked and activated */ CURLntlm ntlm = Curl_input_ntlm(conn, (bool)(httpcode == 407), start); if(CURLNTLM_BAD != ntlm) data->state.authproblem = FALSE; else { infof(data, "Authentication problem. Ignoring this.\n"); data->state.authproblem = TRUE; } } } else #endif #ifndef CURL_DISABLE_CRYPTO_AUTH if(checkprefix("Digest", start)) { CURLdigest dig; *availp |= CURLAUTH_DIGEST; authp->avail |= CURLAUTH_DIGEST; /* We call this function on input Digest headers even if Digest * authentication isn't activated yet, as we need to store the * incoming data from this header in case we are gonna use Digest. */ dig = Curl_input_digest(conn, (bool)(httpcode == 407), start); if(CURLDIGEST_FINE != dig) { infof(data, "Authentication problem. Ignoring this.\n"); data->state.authproblem = TRUE; } } else #endif if(checkprefix("Basic", start)) { *availp |= CURLAUTH_BASIC; authp->avail |= CURLAUTH_BASIC; if(authp->picked == CURLAUTH_BASIC) { /* We asked for Basic authentication but got a 40X back anyway, which basicly means our name+password isn't valid. */ authp->avail = CURLAUTH_NONE; infof(data, "Authentication problem. Ignoring this.\n"); data->state.authproblem = TRUE; } } return CURLE_OK; } /** * Curl_http_should_fail() determines whether an HTTP response has gotten us * into an error state or not. * * @param conn all information about the current connection * * @retval 0 communications should continue * * @retval 1 communications should not continue */ int Curl_http_should_fail(struct connectdata *conn) { struct SessionHandle *data; struct Curl_transfer_keeper *k; curlassert(conn); data = conn->data; curlassert(data); /* ** For readability */ k = &conn->keep; /* ** If we haven't been asked to fail on error, ** don't fail. */ if (!data->set.http_fail_on_error) return 0; /* ** Any code < 400 is never terminal. */ if (k->httpcode < 400) return 0; if (conn->resume_from && (data->set.httpreq==HTTPREQ_GET) && (k->httpcode == 416)) { /* "Requested Range Not Satisfiable", just proceed and pretend this is no error */ return 0; } /* ** Any code >= 400 that's not 401 or 407 is always ** a terminal error */ if ((k->httpcode != 401) && (k->httpcode != 407)) return 1; /* ** All we have left to deal with is 401 and 407 */ curlassert((k->httpcode == 401) || (k->httpcode == 407)); /* ** Examine the current authentication state to see if this ** is an error. The idea is for this function to get ** called after processing all the headers in a response ** message. So, if we've been to asked to authenticate a ** particular stage, and we've done it, we're OK. But, if ** we're already completely authenticated, it's not OK to ** get another 401 or 407. ** ** It is possible for authentication to go stale such that ** the client needs to reauthenticate. Once that info is ** available, use it here. */ #if 0 /* set to 1 when debugging this functionality */ infof(data,"%s: authstage = %d\n",__FUNCTION__,data->state.authstage); infof(data,"%s: authwant = 0x%08x\n",__FUNCTION__,data->state.authwant); infof(data,"%s: authavail = 0x%08x\n",__FUNCTION__,data->state.authavail); infof(data,"%s: httpcode = %d\n",__FUNCTION__,k->httpcode); infof(data,"%s: authdone = %d\n",__FUNCTION__,data->state.authdone); infof(data,"%s: newurl = %s\n",__FUNCTION__,conn->newurl ? conn->newurl : "(null)"); infof(data,"%s: authproblem = %d\n",__FUNCTION__,data->state.authproblem); #endif /* ** Either we're not authenticating, or we're supposed to ** be authenticating something else. This is an error. */ if((k->httpcode == 401) && !conn->bits.user_passwd) return TRUE; if((k->httpcode == 407) && !conn->bits.proxy_user_passwd) return TRUE; return data->state.authproblem; } /* * readmoredata() is a "fread() emulation" to provide POST and/or request * data. It is used when a huge POST is to be made and the entire chunk wasn't * sent in the first send(). This function will then be called from the * transfer.c loop when more data is to be sent to the peer. * * Returns the amount of bytes it filled the buffer with. */ static size_t readmoredata(char *buffer, size_t size, size_t nitems, void *userp) { struct connectdata *conn = (struct connectdata *)userp; struct HTTP *http = conn->proto.http; size_t fullsize = size * nitems; if(0 == http->postsize) /* nothing to return */ return 0; /* make sure that a HTTP request is never sent away chunked! */ conn->bits.forbidchunk= (http->sending == HTTPSEND_REQUEST)?TRUE:FALSE; if(http->postsize <= (curl_off_t)fullsize) { memcpy(buffer, http->postdata, (size_t)http->postsize); fullsize = (size_t)http->postsize; if(http->backup.postsize) { /* move backup data into focus and continue on that */ http->postdata = http->backup.postdata; http->postsize = http->backup.postsize; conn->fread = http->backup.fread; conn->fread_in = http->backup.fread_in; http->sending++; /* move one step up */ http->backup.postsize=0; } else http->postsize = 0; return fullsize; } memcpy(buffer, http->postdata, fullsize); http->postdata += fullsize; http->postsize -= fullsize; return fullsize; } /* ------------------------------------------------------------------------- */ /* * The add_buffer series of functions are used to build one large memory chunk * from repeated function invokes. Used so that the entire HTTP request can * be sent in one go. */ struct send_buffer { char *buffer; size_t size_max; size_t size_used; }; typedef struct send_buffer send_buffer; static CURLcode add_custom_headers(struct connectdata *conn, send_buffer *req_buffer); static CURLcode add_buffer(send_buffer *in, const void *inptr, size_t size); /* * add_buffer_init() sets up and returns a fine buffer struct */ static send_buffer *add_buffer_init(void) { send_buffer *blonk; blonk=(send_buffer *)malloc(sizeof(send_buffer)); if(blonk) { memset(blonk, 0, sizeof(send_buffer)); return blonk; } return NULL; /* failed, go home */ } /* * add_buffer_send() sends a buffer and frees all associated memory. * * Returns CURLcode */ static CURLcode add_buffer_send(send_buffer *in, struct connectdata *conn, long *bytes_written) /* add the number of sent bytes to this counter */ { ssize_t amount; CURLcode res; char *ptr; size_t size; struct HTTP *http = conn->proto.http; size_t sendsize; curl_socket_t sockfd = conn->sock[FIRSTSOCKET]; /* The looping below is required since we use non-blocking sockets, but due to the circumstances we will just loop and try again and again etc */ ptr = in->buffer; size = in->size_used; if(conn->protocol & PROT_HTTPS) { /* We never send more than CURL_MAX_WRITE_SIZE bytes in one single chunk when we speak HTTPS, as if only a fraction of it is sent now, this data needs to fit into the normal read-callback buffer later on and that buffer is using this size. */ sendsize= (size > CURL_MAX_WRITE_SIZE)?CURL_MAX_WRITE_SIZE:size; /* OpenSSL is very picky and we must send the SAME buffer pointer to the library when we attempt to re-send this buffer. Sending the same data is not enough, we must use the exact same address. For this reason, we must copy the data to the uploadbuffer first, since that is the buffer we will be using if this send is retried later. */ memcpy(conn->data->state.uploadbuffer, ptr, sendsize); ptr = conn->data->state.uploadbuffer; } else sendsize = size; res = Curl_write(conn, sockfd, ptr, sendsize, &amount); if(CURLE_OK == res) { if(conn->data->set.verbose) /* this data _may_ contain binary stuff */ Curl_debug(conn->data, CURLINFO_HEADER_OUT, ptr, amount, conn); *bytes_written += amount; if(http) { if((size_t)amount != size) { /* The whole request could not be sent in one system call. We must queue it up and send it later when we get the chance. We must not loop here and wait until it might work again. */ size -= amount; ptr = in->buffer + amount; /* backup the currently set pointers */ http->backup.fread = conn->fread; http->backup.fread_in = conn->fread_in; http->backup.postdata = http->postdata; http->backup.postsize = http->postsize; /* set the new pointers for the request-sending */ conn->fread = (curl_read_callback)readmoredata; conn->fread_in = (void *)conn; http->postdata = ptr; http->postsize = (curl_off_t)size; http->send_buffer = in; http->sending = HTTPSEND_REQUEST; return CURLE_OK; } http->sending = HTTPSEND_BODY; /* the full buffer was sent, clean up and return */ } else { if((size_t)amount != size) /* We have no continue-send mechanism now, fail. This can only happen when this function is used from the CONNECT sending function. We currently (stupidly) assume that the whole request is always sent away in the first single chunk. This needs FIXing. */ return CURLE_SEND_ERROR; } } if(in->buffer) free(in->buffer); free(in); return res; } /* * add_bufferf() add the formatted input to the buffer. */ static CURLcode add_bufferf(send_buffer *in, const char *fmt, ...) { char *s; va_list ap; va_start(ap, fmt); s = vaprintf(fmt, ap); /* this allocs a new string to append */ va_end(ap); if(s) { CURLcode result = add_buffer(in, s, strlen(s)); free(s); if(CURLE_OK == result) return CURLE_OK; } /* If we failed, we cleanup the whole buffer and return error */ if(in->buffer) free(in->buffer); free(in); return CURLE_OUT_OF_MEMORY; } /* * add_buffer() appends a memory chunk to the existing buffer */ static CURLcode add_buffer(send_buffer *in, const void *inptr, size_t size) { char *new_rb; size_t new_size; if(!in->buffer || ((in->size_used + size) > (in->size_max - 1))) { new_size = (in->size_used+size)*2; if(in->buffer) /* we have a buffer, enlarge the existing one */ new_rb = (char *)realloc(in->buffer, new_size); else /* create a new buffer */ new_rb = (char *)malloc(new_size); if(!new_rb) return CURLE_OUT_OF_MEMORY; in->buffer = new_rb; in->size_max = new_size; } memcpy(&in->buffer[in->size_used], inptr, size); in->size_used += size; return CURLE_OK; } /* end of the add_buffer functions */ /* ------------------------------------------------------------------------- */ /* * Curl_compareheader() * * Returns TRUE if 'headerline' contains the 'header' with given 'content'. * Pass headers WITH the colon. */ bool Curl_compareheader(char *headerline, /* line to check */ const char *header, /* header keyword _with_ colon */ const char *content) /* content string to find */ { /* RFC2616, section 4.2 says: "Each header field consists of a name followed * by a colon (":") and the field value. Field names are case-insensitive. * The field value MAY be preceded by any amount of LWS, though a single SP * is preferred." */ size_t hlen = strlen(header); size_t clen; size_t len; char *start; char *end; if(!strnequal(headerline, header, hlen)) return FALSE; /* doesn't start with header */ /* pass the header */ start = &headerline[hlen]; /* pass all white spaces */ while(*start && isspace((int)*start)) start++; /* find the end of the header line */ end = strchr(start, '\r'); /* lines end with CRLF */ if(!end) { /* in case there's a non-standard compliant line here */ end = strchr(start, '\n'); if(!end) /* hm, there's no line ending here, use the zero byte! */ end = strchr(start, '\0'); } len = end-start; /* length of the content part of the input line */ clen = strlen(content); /* length of the word to find */ /* find the content string in the rest of the line */ for(;len>=clen;len--, start++) { if(strnequal(start, content, clen)) return TRUE; /* match! */ } return FALSE; /* no match */ } /* * ConnectHTTPProxyTunnel() requires that we're connected to a HTTP * proxy. This function will issue the necessary commands to get a seamless * tunnel through this proxy. After that, the socket can be used just as a * normal socket. * * This badly needs to be rewritten. CONNECT should be sent and dealt with * like any ordinary HTTP request, and not specially crafted like this. This * function only remains here like this for now since the rewrite is a bit too * much work to do at the moment. */ CURLcode Curl_ConnectHTTPProxyTunnel(struct connectdata *conn, int sockindex, char *hostname, int remote_port) { int subversion=0; struct SessionHandle *data=conn->data; struct Curl_transfer_keeper *k = &conn->keep; CURLcode result; int res; size_t nread; /* total size read */ int perline; /* count bytes per line */ bool keepon=TRUE; ssize_t gotbytes; char *ptr; long timeout = data->set.timeout?data->set.timeout:3600; /* in seconds */ char *line_start; char *host_port; curl_socket_t tunnelsocket = conn->sock[sockindex]; send_buffer *req_buffer; #define SELECT_OK 0 #define SELECT_ERROR 1 #define SELECT_TIMEOUT 2 int error = SELECT_OK; infof(data, "Establish HTTP proxy tunnel to %s:%d\n", hostname, remote_port); do { if(conn->newurl) { /* This only happens if we've looped here due to authentication reasons, and we don't really use the newly cloned URL here then. Just free() it. */ free(conn->newurl); conn->newurl = NULL; } /* initialize a dynamic send-buffer */ req_buffer = add_buffer_init(); if(!req_buffer) return CURLE_OUT_OF_MEMORY; host_port = aprintf("%s:%d", hostname, remote_port); if(!host_port) return CURLE_OUT_OF_MEMORY; /* Setup the proxy-authorization header, if any */ result = Curl_http_output_auth(conn, (char *)"CONNECT", host_port, TRUE); if(CURLE_OK == result) { char *host=(char *)""; const char *proxyconn=""; char *ptr; ptr = checkheaders(data, "Host:"); if(!ptr) { host = aprintf("Host: %s\r\n", host_port); if(!host) result = CURLE_OUT_OF_MEMORY; } ptr = checkheaders(data, "Proxy-Connection:"); if(!ptr) proxyconn = "Proxy-Connection: Keep-Alive\r\n"; if(CURLE_OK == result) { /* Send the connect request to the proxy */ /* BLOCKING */ result = add_bufferf(req_buffer, "CONNECT %s:%d HTTP/1.0\r\n" "%s" /* Host: */ "%s" /* Proxy-Authorization */ "%s" /* User-Agent */ "%s", /* Proxy-Connection */ hostname, remote_port, host, conn->allocptr.proxyuserpwd? conn->allocptr.proxyuserpwd:"", data->set.useragent?conn->allocptr.uagent:"", proxyconn); if(CURLE_OK == result) result = add_custom_headers(conn, req_buffer); if(host && *host) free(host); if(CURLE_OK == result) /* CRLF terminate the request */ result = add_bufferf(req_buffer, "\r\n"); if(CURLE_OK == result) /* Now send off the request */ result = add_buffer_send(req_buffer, conn, &data->info.request_size); } if(result) failf(data, "Failed sending CONNECT to proxy"); } free(host_port); if(result) return result; ptr=data->state.buffer; line_start = ptr; nread=0; perline=0; keepon=TRUE; while((nreadnow)/1000; /* spent time */ if(check <=0 ) { failf(data, "Proxy CONNECT aborted due to timeout"); error = SELECT_TIMEOUT; /* already too little time */ break; } /* timeout each second and check the timeout */ switch (Curl_select(tunnelsocket, CURL_SOCKET_BAD, 1000)) { case -1: /* select() error, stop reading */ error = SELECT_ERROR; failf(data, "Proxy CONNECT aborted due to select() error"); break; case 0: /* timeout */ break; default: res = Curl_read(conn, tunnelsocket, ptr, BUFSIZE-nread, &gotbytes); if(res< 0) /* EWOULDBLOCK */ continue; /* go loop yourself */ else if(res) keepon = FALSE; else if(gotbytes <= 0) { keepon = FALSE; error = SELECT_ERROR; failf(data, "Proxy CONNECT aborted"); } else { /* * We got a whole chunk of data, which can be anything from one byte * to a set of lines and possibly just a piece of the last line. */ int i; nread += gotbytes; for(i = 0; i < gotbytes; ptr++, i++) { perline++; /* amount of bytes in this line so far */ if(*ptr=='\n') { char letter; int writetype; /* output debug if that is requested */ if(data->set.verbose) Curl_debug(data, CURLINFO_HEADER_IN, line_start, perline, conn); /* send the header to the callback */ writetype = CLIENTWRITE_HEADER; if(data->set.include_header) writetype |= CLIENTWRITE_BODY; result = Curl_client_write(data, writetype, line_start, perline); if(result) return result; /* Newlines are CRLF, so the CR is ignored as the line isn't really terminated until the LF comes. Treat a following CR as end-of-headers as well.*/ if(('\r' == line_start[0]) || ('\n' == line_start[0])) { /* end of response-headers from the proxy */ keepon=FALSE; break; /* breaks out of for-loop, not switch() */ } /* keep a backup of the position we are about to blank */ letter = line_start[perline]; line_start[perline]=0; /* zero terminate the buffer */ if((checkprefix("WWW-Authenticate:", line_start) && (401 == k->httpcode)) || (checkprefix("Proxy-authenticate:", line_start) && (407 == k->httpcode))) { result = Curl_http_input_auth(conn, k->httpcode, line_start); if(result) return result; } else if(2 == sscanf(line_start, "HTTP/1.%d %d", &subversion, &k->httpcode)) { /* store the HTTP code from the proxy */ data->info.httpproxycode = k->httpcode; } /* put back the letter we blanked out before */ line_start[perline]= letter; perline=0; /* line starts over here */ line_start = ptr+1; /* this skips the zero byte we wrote */ } } } break; } /* switch */ } /* while there's buffer left and loop is requested */ if(error) return CURLE_RECV_ERROR; if(data->info.httpproxycode != 200) /* Deal with the possibly already received authenticate headers. 'newurl' is set to a new URL if we must loop. */ Curl_http_auth_act(conn); } while(conn->newurl); if(200 != k->httpcode) { failf(data, "Received HTTP code %d from proxy after CONNECT", k->httpcode); return CURLE_RECV_ERROR; } /* If a proxy-authorization header was used for the proxy, then we should make sure that it isn't accidentally used for the document request after we've connected. So let's free and clear it here. */ Curl_safefree(conn->allocptr.proxyuserpwd); conn->allocptr.proxyuserpwd = NULL; data->state.authproxy.done = TRUE; infof (data, "Proxy replied OK to CONNECT request\n"); return CURLE_OK; } /* * Curl_http_connect() performs HTTP stuff to do at connect-time, called from * the generic Curl_connect(). */ CURLcode Curl_http_connect(struct connectdata *conn, bool *done) { struct SessionHandle *data; CURLcode result; data=conn->data; /* If we are not using a proxy and we want a secure connection, perform SSL * initialization & connection now. If using a proxy with https, then we * must tell the proxy to CONNECT to the host we want to talk to. Only * after the connect has occured, can we start talking SSL */ if(conn->bits.tunnel_proxy) { /* either SSL over proxy, or explicitly asked for */ result = Curl_ConnectHTTPProxyTunnel(conn, FIRSTSOCKET, conn->host.name, conn->remote_port); if(CURLE_OK != result) return result; } if(conn->protocol & PROT_HTTPS) { /* perform SSL initialization for this socket */ result = Curl_ssl_connect(conn, FIRSTSOCKET); if(result) return result; } if(!data->state.this_is_a_follow) { /* this is not a followed location, get the original host name */ if (data->state.first_host) /* Free to avoid leaking memory on multiple requests*/ free(data->state.first_host); data->state.first_host = strdup(conn->host.name); } *done = TRUE; return CURLE_OK; } /* * Curl_http_done() gets called from Curl_done() after a single HTTP request * has been performed. */ CURLcode Curl_http_done(struct connectdata *conn, CURLcode status) { struct SessionHandle *data; struct HTTP *http; data=conn->data; http=conn->proto.http; /* set the proper values (possibly modified on POST) */ conn->fread = data->set.fread; /* restore */ conn->fread_in = data->set.in; /* restore */ if (http == NULL) return CURLE_OK; if(http->send_buffer) { send_buffer *buff = http->send_buffer; free(buff->buffer); free(buff); http->send_buffer = NULL; /* clear the pointer */ } if(HTTPREQ_POST_FORM == data->set.httpreq) { conn->bytecount = http->readbytecount + http->writebytecount; Curl_formclean(http->sendit); /* Now free that whole lot */ if(http->form.fp) { /* a file being uploaded was left opened, close it! */ fclose(http->form.fp); http->form.fp = NULL; } } else if(HTTPREQ_PUT == data->set.httpreq) conn->bytecount = http->readbytecount + http->writebytecount; if (status != CURLE_OK) return (status); if(!conn->bits.retry && ((http->readbytecount + conn->headerbytecount - conn->deductheadercount)) <= 0) { /* If this connection isn't simply closed to be retried, AND nothing was read from the HTTP server (that counts), this can't be right so we return an error here */ failf(data, "Empty reply from server"); return CURLE_GOT_NOTHING; } return CURLE_OK; } /* check and possibly add an Expect: header */ static CURLcode expect100(struct SessionHandle *data, send_buffer *req_buffer) { CURLcode result = CURLE_OK; if((data->set.httpversion != CURL_HTTP_VERSION_1_0) && !checkheaders(data, "Expect:")) { /* if not doing HTTP 1.0 or disabled explicitly, we add a Expect: 100-continue to the headers which actually speeds up post operations (as there is one packet coming back from the web server) */ result = add_bufferf(req_buffer, "Expect: 100-continue\r\n"); if(result == CURLE_OK) data->set.expect100header = TRUE; } return result; } static CURLcode add_custom_headers(struct connectdata *conn, send_buffer *req_buffer) { CURLcode result = CURLE_OK; char *ptr; struct curl_slist *headers=conn->data->set.headers; while(headers) { ptr = strchr(headers->data, ':'); if(ptr) { /* we require a colon for this to be a true header */ ptr++; /* pass the colon */ while(*ptr && isspace((int)*ptr)) ptr++; if(*ptr) { /* only send this if the contents was non-blank */ if(conn->allocptr.host && /* a Host: header was sent already, don't pass on any custom Host: header as that will produce *two* in the same request! */ curl_strnequal("Host:", headers->data, 5)) ; else { result = add_bufferf(req_buffer, "%s\r\n", headers->data); if(result) return result; } } } headers = headers->next; } return result; } /* * Curl_http() gets called from the generic Curl_do() function when a HTTP * request is to be performed. This creates and sends a properly constructed * HTTP request. */ CURLcode Curl_http(struct connectdata *conn, bool *done) { struct SessionHandle *data=conn->data; char *buf = data->state.buffer; /* this is a short cut to the buffer */ CURLcode result=CURLE_OK; struct HTTP *http; char *ppath = conn->path; char *host = conn->host.name; const char *te = ""; /* tranfer-encoding */ char *ptr; char *request; Curl_HttpReq httpreq = data->set.httpreq; char *addcookies = NULL; /* Always consider the DO phase done after this function call, even if there may be parts of the request that is not yet sent, since we can deal with the rest of the request in the PERFORM phase. */ *done = TRUE; if(!conn->proto.http) { /* Only allocate this struct if we don't already have it! */ http = (struct HTTP *)malloc(sizeof(struct HTTP)); if(!http) return CURLE_OUT_OF_MEMORY; memset(http, 0, sizeof(struct HTTP)); conn->proto.http = http; } else http = conn->proto.http; /* We default to persistant connections */ conn->bits.close = FALSE; if ( (conn->protocol&(PROT_HTTP|PROT_FTP)) && data->set.upload) { httpreq = HTTPREQ_PUT; } /* Now set the 'request' pointer to the proper request string */ if(data->set.customrequest) request = data->set.customrequest; else { if(conn->bits.no_body) request = (char *)"HEAD"; else { curlassert((httpreq > HTTPREQ_NONE) && (httpreq < HTTPREQ_LAST)); switch(httpreq) { case HTTPREQ_POST: case HTTPREQ_POST_FORM: request = (char *)"POST"; break; case HTTPREQ_PUT: request = (char *)"PUT"; break; default: /* this should never happen */ case HTTPREQ_GET: request = (char *)"GET"; break; case HTTPREQ_HEAD: request = (char *)"HEAD"; break; } } } /* The User-Agent string might have been allocated in url.c already, because it might have been used in the proxy connect, but if we have got a header with the user-agent string specified, we erase the previously made string here. */ if(checkheaders(data, "User-Agent:") && conn->allocptr.uagent) { free(conn->allocptr.uagent); conn->allocptr.uagent=NULL; } /* setup the authentication headers */ result = Curl_http_output_auth(conn, request, ppath, FALSE); if(result) return result; if((data->state.authhost.multi || data->state.authproxy.multi) && (httpreq != HTTPREQ_GET) && (httpreq != HTTPREQ_HEAD)) { /* Auth is required and we are not authenticated yet. Make a PUT or POST with content-length zero as a "probe". */ conn->bits.authneg = TRUE; } else conn->bits.authneg = FALSE; Curl_safefree(conn->allocptr.ref); if(data->change.referer && !checkheaders(data, "Referer:")) conn->allocptr.ref = aprintf("Referer: %s\015\012", data->change.referer); else conn->allocptr.ref = NULL; if(data->set.cookie && !checkheaders(data, "Cookie:")) addcookies = data->set.cookie; if(!checkheaders(data, "Accept-Encoding:") && data->set.encoding) { Curl_safefree(conn->allocptr.accept_encoding); conn->allocptr.accept_encoding = aprintf("Accept-Encoding: %s\015\012", data->set.encoding); if(!conn->allocptr.accept_encoding) return CURLE_OUT_OF_MEMORY; } if(!conn->bits.upload_chunky && (httpreq != HTTPREQ_GET)) { /* not a chunky transfer yet, but data is to be sent */ ptr = checkheaders(data, "Transfer-Encoding:"); if(ptr) { /* Some kind of TE is requested, check if 'chunked' is chosen */ conn->bits.upload_chunky = Curl_compareheader(ptr, "Transfer-Encoding:", "chunked"); te = ""; } } else if(conn->bits.upload_chunky) { /* RFC2616 section 4.4: Messages MUST NOT include both a Content-Length header field and a non-identity transfer-coding. If the message does include a non- identity transfer-coding, the Content-Length MUST be ignored. */ if(!checkheaders(data, "Transfer-Encoding:")) { te = "Transfer-Encoding: chunked\r\n"; } else { te = ""; conn->bits.upload_chunky = FALSE; /* transfer-encoding was disabled, so don't chunkify this! */ } } Curl_safefree(conn->allocptr.host); ptr = checkheaders(data, "Host:"); if(ptr && (!data->state.this_is_a_follow || curl_strequal(data->state.first_host, conn->host.name))) { #if !defined(CURL_DISABLE_COOKIES) /* If we have a given custom Host: header, we extract the host name in order to possibly use it for cookie reasons later on. We only allow the custom Host: header if this is NOT a redirect, as setting Host: in the redirected request is being out on thin ice. Except if the host name is the same as the first one! */ char *start = ptr+strlen("Host:"); while(*start && isspace((int)*start )) start++; ptr = start; /* start host-scanning here */ /* scan through the string to find the end (space or colon) */ while(*ptr && !isspace((int)*ptr) && !(':'==*ptr)) ptr++; if(ptr != start) { size_t len=ptr-start; Curl_safefree(conn->allocptr.cookiehost); conn->allocptr.cookiehost = malloc(len+1); if(!conn->allocptr.cookiehost) return CURLE_OUT_OF_MEMORY; memcpy(conn->allocptr.cookiehost, start, len); conn->allocptr.cookiehost[len]=0; } #endif conn->allocptr.host = NULL; } else { /* When building Host: headers, we must put the host name within [brackets] if the host name is a plain IPv6-address. RFC2732-style. */ if(((conn->protocol&PROT_HTTPS) && (conn->remote_port == PORT_HTTPS)) || (!(conn->protocol&PROT_HTTPS) && (conn->remote_port == PORT_HTTP)) ) /* If (HTTPS on port 443) OR (non-HTTPS on port 80) then don't include the port number in the host string */ conn->allocptr.host = aprintf("Host: %s%s%s\r\n", conn->bits.ipv6_ip?"[":"", host, conn->bits.ipv6_ip?"]":""); else conn->allocptr.host = aprintf("Host: %s%s%s:%d\r\n", conn->bits.ipv6_ip?"[":"", host, conn->bits.ipv6_ip?"]":"", conn->remote_port); if(!conn->allocptr.host) /* without Host: we can't make a nice request */ return CURLE_OUT_OF_MEMORY; } if (conn->bits.httpproxy && !conn->bits.tunnel_proxy) { /* Using a proxy but does not tunnel through it */ /* The path sent to the proxy is in fact the entire URL. But if the remote host is a IDN-name, we must make sure that the request we produce only uses the encoded host name! */ if(conn->host.dispname != conn->host.name) { char *url = data->change.url; char *ptr = strstr(url, conn->host.dispname); if(ptr) { /* This is where the display name starts in the URL, now replace this part with the encoded name. TODO: This method of replacing the host name is rather crude as I believe there's a slight risk that the user has entered a user name or password that contain the host name string. */ size_t currlen = strlen(conn->host.dispname); size_t newlen = strlen(conn->host.name); size_t urllen = strlen(url); char *newurl; newurl = malloc(urllen + newlen - currlen + 1); if(newurl) { /* copy the part before the host name */ memcpy(newurl, url, ptr - url); /* append the new host name instead of the old */ memcpy(newurl + (ptr - url), conn->host.name, newlen); /* append the piece after the host name */ memcpy(newurl + newlen + (ptr - url), ptr + currlen, /* copy the trailing zero byte too */ urllen - (ptr-url) - currlen + 1); if(data->change.url_alloc) free(data->change.url); data->change.url = newurl; data->change.url_alloc = TRUE; } else return CURLE_OUT_OF_MEMORY; } } ppath = data->change.url; } if(HTTPREQ_POST_FORM == httpreq) { /* we must build the whole darned post sequence first, so that we have a size of the whole shebang before we start to send it */ result = Curl_getFormData(&http->sendit, data->set.httppost, &http->postsize); if(CURLE_OK != result) { /* Curl_getFormData() doesn't use failf() */ failf(data, "failed creating formpost data"); return result; } } http->p_pragma = (!checkheaders(data, "Pragma:") && (conn->bits.httpproxy && !conn->bits.tunnel_proxy) )? "Pragma: no-cache\r\n":NULL; if(!checkheaders(data, "Accept:")) http->p_accept = "Accept: */*\r\n"; if(( (HTTPREQ_POST == httpreq) || (HTTPREQ_POST_FORM == httpreq) || (HTTPREQ_PUT == httpreq) ) && conn->resume_from) { /********************************************************************** * Resuming upload in HTTP means that we PUT or POST and that we have * got a resume_from value set. The resume value has already created * a Range: header that will be passed along. We need to "fast forward" * the file the given number of bytes and decrease the assume upload * file size before we continue this venture in the dark lands of HTTP. *********************************************************************/ if(conn->resume_from < 0 ) { /* * This is meant to get the size of the present remote-file by itself. * We don't support this now. Bail out! */ conn->resume_from = 0; } if(conn->resume_from) { /* do we still game? */ curl_off_t passed=0; /* Now, let's read off the proper amount of bytes from the input. If we knew it was a proper file we could've just fseek()ed but we only have a stream here */ do { size_t readthisamountnow = (size_t)(conn->resume_from - passed); size_t actuallyread; if(readthisamountnow > BUFSIZE) readthisamountnow = BUFSIZE; actuallyread = data->set.fread(data->state.buffer, 1, (size_t)readthisamountnow, data->set.in); passed += actuallyread; if(actuallyread != readthisamountnow) { failf(data, "Could only read %" FORMAT_OFF_T " bytes from the input", passed); return CURLE_READ_ERROR; } } while(passed != conn->resume_from); /* loop until done */ /* now, decrease the size of the read */ if(data->set.infilesize>0) { data->set.infilesize -= conn->resume_from; if(data->set.infilesize <= 0) { failf(data, "File already completely uploaded"); return CURLE_PARTIAL_FILE; } } /* we've passed, proceed as normal */ } } if(conn->bits.use_range) { /* * A range is selected. We use different headers whether we're downloading * or uploading and we always let customized headers override our internal * ones if any such are specified. */ if((httpreq == HTTPREQ_GET) && !checkheaders(data, "Range:")) { /* if a line like this was already allocated, free the previous one */ if(conn->allocptr.rangeline) free(conn->allocptr.rangeline); conn->allocptr.rangeline = aprintf("Range: bytes=%s\r\n", conn->range); } else if((httpreq != HTTPREQ_GET) && !checkheaders(data, "Content-Range:")) { if(conn->resume_from) { /* This is because "resume" was selected */ curl_off_t total_expected_size= conn->resume_from + data->set.infilesize; conn->allocptr.rangeline = aprintf("Content-Range: bytes %s%" FORMAT_OFF_T "/%" FORMAT_OFF_T "\r\n", conn->range, total_expected_size-1, total_expected_size); } else { /* Range was selected and then we just pass the incoming range and append total size */ conn->allocptr.rangeline = aprintf("Content-Range: bytes %s/%" FORMAT_OFF_T "\r\n", conn->range, data->set.infilesize); } } } { /* Use 1.1 unless the use specificly asked for 1.0 */ const char *httpstring= data->set.httpversion==CURL_HTTP_VERSION_1_0?"1.0":"1.1"; send_buffer *req_buffer; curl_off_t postsize; /* off_t type to be able to hold a large file size */ /* initialize a dynamic send-buffer */ req_buffer = add_buffer_init(); if(!req_buffer) return CURLE_OUT_OF_MEMORY; /* add the main request stuff */ result = add_bufferf(req_buffer, "%s " /* GET/HEAD/POST/PUT */ "%s HTTP/%s\r\n" /* path + HTTP version */ "%s" /* proxyuserpwd */ "%s" /* userpwd */ "%s" /* range */ "%s" /* user agent */ "%s" /* host */ "%s" /* pragma */ "%s" /* accept */ "%s" /* accept-encoding */ "%s" /* referer */ "%s" /* Proxy-Connection */ "%s",/* transfer-encoding */ request, ppath, httpstring, conn->allocptr.proxyuserpwd? conn->allocptr.proxyuserpwd:"", conn->allocptr.userpwd?conn->allocptr.userpwd:"", (conn->bits.use_range && conn->allocptr.rangeline)? conn->allocptr.rangeline:"", (data->set.useragent && *data->set.useragent && conn->allocptr.uagent)? conn->allocptr.uagent:"", (conn->allocptr.host?conn->allocptr.host:""), /* Host: host */ http->p_pragma?http->p_pragma:"", http->p_accept?http->p_accept:"", (data->set.encoding && *data->set.encoding && conn->allocptr.accept_encoding)? conn->allocptr.accept_encoding:"", (data->change.referer && conn->allocptr.ref)?conn->allocptr.ref:"" /* Referer: */, (conn->bits.httpproxy && !conn->bits.tunnel_proxy)? "Proxy-Connection: Keep-Alive\r\n":"", te ); if(result) return result; #if !defined(CURL_DISABLE_COOKIES) if(data->cookies || addcookies) { struct Cookie *co=NULL; /* no cookies from start */ int count=0; if(data->cookies) { Curl_share_lock(data, CURL_LOCK_DATA_COOKIE, CURL_LOCK_ACCESS_SINGLE); co = Curl_cookie_getlist(data->cookies, conn->allocptr.cookiehost? conn->allocptr.cookiehost:host, conn->path, (bool)(conn->protocol&PROT_HTTPS?TRUE:FALSE)); Curl_share_unlock(data, CURL_LOCK_DATA_COOKIE); } if(co) { struct Cookie *store=co; /* now loop through all cookies that matched */ while(co) { if(co->value) { if(0 == count) { result = add_bufferf(req_buffer, "Cookie: "); if(result) break; } result = add_bufferf(req_buffer, "%s%s=%s", count?"; ":"", co->name, co->value); if(result) break; count++; } co = co->next; /* next cookie please */ } Curl_cookie_freelist(store); /* free the cookie list */ } if(addcookies && (CURLE_OK == result)) { if(!count) result = add_bufferf(req_buffer, "Cookie: "); if(CURLE_OK == result) { result = add_bufferf(req_buffer, "%s%s", count?"; ":"", addcookies); count++; } } if(count && (CURLE_OK == result)) result = add_buffer(req_buffer, "\r\n", 2); if(result) return result; } #endif if(data->set.timecondition) { struct tm *tm; /* Phil Karn (Fri, 13 Apr 2001) pointed out that the If-Modified-Since * header family should have their times set in GMT as RFC2616 defines: * "All HTTP date/time stamps MUST be represented in Greenwich Mean Time * (GMT), without exception. For the purposes of HTTP, GMT is exactly * equal to UTC (Coordinated Universal Time)." (see page 20 of RFC2616). */ #ifdef HAVE_GMTIME_R /* thread-safe version */ struct tm keeptime; tm = (struct tm *)gmtime_r(&data->set.timevalue, &keeptime); #else tm = gmtime(&data->set.timevalue); #endif /* format: "Tue, 15 Nov 1994 12:45:26 GMT" */ snprintf(buf, BUFSIZE-1, "%s, %02d %s %4d %02d:%02d:%02d GMT", Curl_wkday[tm->tm_wday?tm->tm_wday-1:6], tm->tm_mday, Curl_month[tm->tm_mon], tm->tm_year + 1900, tm->tm_hour, tm->tm_min, tm->tm_sec); switch(data->set.timecondition) { case CURL_TIMECOND_IFMODSINCE: default: result = add_bufferf(req_buffer, "If-Modified-Since: %s\r\n", buf); break; case CURL_TIMECOND_IFUNMODSINCE: result = add_bufferf(req_buffer, "If-Unmodified-Since: %s\r\n", buf); break; case CURL_TIMECOND_LASTMOD: result = add_bufferf(req_buffer, "Last-Modified: %s\r\n", buf); break; } if(result) return result; } result = add_custom_headers(conn, req_buffer); if(result) return result; http->postdata = NULL; /* nothing to post at this point */ Curl_pgrsSetUploadSize(data, 0); /* upload size is 0 atm */ /* If 'authdone' is FALSE, we must not set the write socket index to the Curl_transfer() call below, as we're not ready to actually upload any data yet. */ switch(httpreq) { case HTTPREQ_POST_FORM: if(!http->sendit || conn->bits.authneg) { /* nothing to post! */ result = add_bufferf(req_buffer, "Content-Length: 0\r\n\r\n"); if(result) return result; result = add_buffer_send(req_buffer, conn, &data->info.request_size); if(result) failf(data, "Failed sending POST request"); else /* setup variables for the upcoming transfer */ result = Curl_Transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount, -1, NULL); break; } if(Curl_FormInit(&http->form, http->sendit)) { failf(data, "Internal HTTP POST error!"); return CURLE_HTTP_POST_ERROR; } /* set the read function to read from the generated form data */ conn->fread = (curl_read_callback)Curl_FormReader; conn->fread_in = &http->form; http->sending = HTTPSEND_BODY; if(!conn->bits.upload_chunky) { /* only add Content-Length if not uploading chunked */ result = add_bufferf(req_buffer, "Content-Length: %" FORMAT_OFF_T "\r\n", http->postsize); if(result) return result; } result = expect100(data, req_buffer); if(result) return result; if(!checkheaders(data, "Content-Type:")) { /* Get Content-Type: line from Curl_formpostheader. The Content-Type header line also contains the MIME boundary string etc why disabling this header is likely to not make things work, but we support disabling it anyway. */ char *contentType; size_t linelength=0; contentType = Curl_formpostheader((void *)&http->form, &linelength); if(!contentType) { failf(data, "Could not get Content-Type header line!"); return CURLE_HTTP_POST_ERROR; } result = add_buffer(req_buffer, contentType, linelength); if(result) return result; } /* make the request end in a true CRLF */ result = add_buffer(req_buffer, "\r\n", 2); if(result) return result; /* set upload size to the progress meter */ Curl_pgrsSetUploadSize(data, http->postsize); /* fire away the whole request to the server */ result = add_buffer_send(req_buffer, conn, &data->info.request_size); if(result) failf(data, "Failed sending POST request"); else /* setup variables for the upcoming transfer */ result = Curl_Transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount, FIRSTSOCKET, &http->writebytecount); if(result) { Curl_formclean(http->sendit); /* free that whole lot */ return result; } break; case HTTPREQ_PUT: /* Let's PUT the data to the server! */ if(conn->bits.authneg) postsize = 0; else postsize = data->set.infilesize; if((postsize != -1) && !conn->bits.upload_chunky) { /* only add Content-Length if not uploading chunked */ result = add_bufferf(req_buffer, "Content-Length: %" FORMAT_OFF_T "\r\n", postsize ); if(result) return result; } result = expect100(data, req_buffer); if(result) return result; result = add_buffer(req_buffer, "\r\n", 2); /* end of headers */ if(result) return result; /* set the upload size to the progress meter */ Curl_pgrsSetUploadSize(data, postsize); /* this sends the buffer and frees all the buffer resources */ result = add_buffer_send(req_buffer, conn, &data->info.request_size); if(result) failf(data, "Failed sending PUT request"); else /* prepare for transfer */ result = Curl_Transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount, postsize?FIRSTSOCKET:-1, postsize?&http->writebytecount:NULL); if(result) return result; break; case HTTPREQ_POST: /* this is the simple POST, using x-www-form-urlencoded style */ if(conn->bits.authneg) postsize = 0; else /* figure out the size of the postfields */ postsize = (data->set.postfieldsize != -1)? data->set.postfieldsize: (data->set.postfields?(curl_off_t)strlen(data->set.postfields):0); if(!conn->bits.upload_chunky) { /* We only set Content-Length and allow a custom Content-Length if we don't upload data chunked, as RFC2616 forbids us to set both kinds of headers (Transfer-Encoding: chunked and Content-Length) */ if(!checkheaders(data, "Content-Length:")) { /* we allow replacing this header, although it isn't very wise to actually set your own */ result = add_bufferf(req_buffer, "Content-Length: %" FORMAT_OFF_T"\r\n", postsize); if(result) return result; } } if(!checkheaders(data, "Content-Type:")) { result = add_bufferf(req_buffer, "Content-Type: application/x-www-form-urlencoded\r\n"); if(result) return result; } if(data->set.postfields) { if((data->state.authhost.done || data->state.authproxy.done ) && (postsize < MAX_INITIAL_POST_SIZE)) { /* If we're not done with the authentication phase, we don't expect to actually send off any data yet. Hence, we delay the sending of the body until we receive that friendly 100-continue response */ /* The post data is less than MAX_INITIAL_PORT_SIZE, then append it to the header. This limit is no magic limit but only set to prevent really huge POSTs to get the data duplicated with malloc() and family. */ result = add_buffer(req_buffer, "\r\n", 2); /* end of headers! */ if(result) return result; if(!conn->bits.upload_chunky) { /* We're not sending it 'chunked', append it to the request already now to reduce the number if send() calls */ result = add_buffer(req_buffer, data->set.postfields, (size_t)postsize); } else { /* Append the POST data chunky-style */ result = add_bufferf(req_buffer, "%x\r\n", (int)postsize); if(CURLE_OK == result) result = add_buffer(req_buffer, data->set.postfields, (size_t)postsize); if(CURLE_OK == result) result = add_buffer(req_buffer, "\r\n0\r\n\r\n", 7); /* end of a chunked transfer stream */ } if(result) return result; } else { /* A huge POST coming up, do data separate from the request */ http->postsize = postsize; http->postdata = data->set.postfields; http->sending = HTTPSEND_BODY; conn->fread = (curl_read_callback)readmoredata; conn->fread_in = (void *)conn; /* set the upload size to the progress meter */ Curl_pgrsSetUploadSize(data, http->postsize); result = expect100(data, req_buffer); if(result) return result; add_buffer(req_buffer, "\r\n", 2); /* end of headers! */ } } else { result = expect100(data, req_buffer); if(result) return result; add_buffer(req_buffer, "\r\n", 2); /* end of headers! */ if(data->set.postfieldsize) { /* set the upload size to the progress meter */ Curl_pgrsSetUploadSize(data, postsize?postsize:-1); /* set the pointer to mark that we will send the post body using the read callback */ http->postdata = (char *)&http->postdata; } } /* issue the request */ result = add_buffer_send(req_buffer, conn, &data->info.request_size); if(result) failf(data, "Failed sending HTTP POST request"); else result = Curl_Transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount, http->postdata?FIRSTSOCKET:-1, http->postdata?&http->writebytecount:NULL); break; default: add_buffer(req_buffer, "\r\n", 2); /* issue the request */ result = add_buffer_send(req_buffer, conn, &data->info.request_size); if(result) failf(data, "Failed sending HTTP request"); else /* HTTP GET/HEAD download: */ result = Curl_Transfer(conn, FIRSTSOCKET, -1, TRUE, &http->readbytecount, http->postdata?FIRSTSOCKET:-1, http->postdata?&http->writebytecount:NULL); } if(result) return result; } return CURLE_OK; } #endif criticalmass-1.0.0.orig/curl/lib/http.h0000644000175000017500000000647110265631023017250 0ustar danieldaniel#ifndef __HTTP_H #define __HTTP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http.h,v 1.27 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ #ifndef CURL_DISABLE_HTTP bool Curl_compareheader(char *headerline, /* line to check */ const char *header, /* header keyword _with_ colon */ const char *content); /* content string to find */ /* ftp can use this as well */ CURLcode Curl_ConnectHTTPProxyTunnel(struct connectdata *conn, int tunnelsocket, char *hostname, int remote_port); /* protocol-specific functions set up to be called by the main engine */ CURLcode Curl_http(struct connectdata *conn, bool *done); CURLcode Curl_http_done(struct connectdata *, CURLcode); CURLcode Curl_http_connect(struct connectdata *conn, bool *done); /* The following functions are defined in http_chunks.c */ void Curl_httpchunk_init(struct connectdata *conn); CHUNKcode Curl_httpchunk_read(struct connectdata *conn, char *datap, ssize_t length, ssize_t *wrote); /* These functions are in http.c */ void Curl_http_auth_stage(struct SessionHandle *data, int stage); CURLcode Curl_http_input_auth(struct connectdata *conn, int httpcode, char *header); CURLcode Curl_http_auth_act(struct connectdata *conn); int Curl_http_should_fail(struct connectdata *conn); /* If only the PICKNONE bit is set, there has been a round-trip and we selected to use no auth at all. Ie, we actively select no auth, as opposed to not having one selected. The other CURLAUTH_* defines are present in the public curl/curl.h header. */ #define CURLAUTH_PICKNONE (1<<30) /* don't use auth */ /* MAX_INITIAL_POST_SIZE indicates the number of bytes that will make the POST data get included in the initial data chunk sent to the server. If the data is larger than this, it will automatically get split up in multiple system calls. This value used to be fairly big (100K), but we must take into account that if the server rejects the POST due for authentication reasons, this data will always be uncondtionally sent and thus it may not be larger than can always be afforded to send twice. It must not be greater than 64K to work on VMS. */ #ifndef MAX_INITIAL_POST_SIZE #define MAX_INITIAL_POST_SIZE 1024 #endif #endif #endif criticalmass-1.0.0.orig/curl/lib/hostip.c0000644000175000017500000003437410265631023017575 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostip.c,v 1.167 2005/04/19 23:19:23 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototypes */ #endif #ifdef HAVE_UNISTD_H #include /* for the close() proto */ #endif #ifdef VMS #include #include #include #endif #endif #ifdef HAVE_SETJMP_H #include #endif #ifdef WIN32 #include #endif #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "hash.h" #include "share.h" #include "strerror.h" #include "url.h" #include "inet_ntop.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /* * hostip.c explained * ================== * * The main COMPILE-TIME DEFINES to keep in mind when reading the host*.c * source file are these: * * CURLRES_IPV6 - this host has getaddrinfo() and family, and thus we use * that. The host may not be able to resolve IPv6, but we don't really have to * take that into account. Hosts that aren't IPv6-enabled have CURLRES_IPV4 * defined. * * CURLRES_ARES - is defined if libcurl is built to use c-ares for * asynchronous name resolves. It cannot have ENABLE_IPV6 defined at the same * time, as c-ares has no ipv6 support. This can be Windows or *nix. * * CURLRES_THREADED - is defined if libcurl is built to run under (native) * Windows, and then the name resolve will be done in a new thread, and the * supported API will be the same as for ares-builds. * * If any of the two previous are defined, CURLRES_ASYNCH is defined too. If * libcurl is not built to use an asynchronous resolver, CURLRES_SYNCH is * defined. * * The host*.c sources files are split up like this: * * hostip.c - method-independent resolver functions and utility functions * hostasyn.c - functions for asynchronous name resolves * hostsyn.c - functions for synchronous name resolves * hostares.c - functions for ares-using name resolves * hostthre.c - functions for threaded name resolves * hostip4.c - ipv4-specific functions * hostip6.c - ipv6-specific functions * * The hostip.h is the united header file for all this. It defines the * CURLRES_* defines based on the config*.h and setup.h defines. */ /* These two symbols are for the global DNS cache */ static struct curl_hash hostname_cache; static int host_cache_initialized; static void freednsentry(void *freethis); /* * Curl_global_host_cache_init() initializes and sets up a global DNS cache. * Global DNS cache is general badness. Do not use. This will be removed in * a future version. Use the share interface instead! */ void Curl_global_host_cache_init(void) { if (!host_cache_initialized) { Curl_hash_init(&hostname_cache, 7, freednsentry); host_cache_initialized = 1; } } /* * Return a pointer to the global cache */ struct curl_hash *Curl_global_host_cache_get(void) { return &hostname_cache; } /* * Destroy and cleanup the global DNS cache */ void Curl_global_host_cache_dtor(void) { if (host_cache_initialized) { Curl_hash_clean(&hostname_cache); host_cache_initialized = 0; } } /* * Return # of adresses in a Curl_addrinfo struct */ int Curl_num_addresses(const Curl_addrinfo *addr) { int i; for (i = 0; addr; addr = addr->ai_next, i++) ; /* empty loop */ return i; } /* * Curl_printable_address() returns a printable version of the 1st address * given in the 'ip' argument. The result will be stored in the buf that is * bufsize bytes big. * * If the conversion fails, it returns NULL. */ const char *Curl_printable_address(const Curl_addrinfo *ip, char *buf, size_t bufsize) { const void *ip4 = &((const struct sockaddr_in*)ip->ai_addr)->sin_addr; int af = ip->ai_family; #ifdef CURLRES_IPV6 const void *ip6 = &((const struct sockaddr_in6*)ip->ai_addr)->sin6_addr; #else const void *ip6 = NULL; #endif return Curl_inet_ntop(af, af == AF_INET ? ip4 : ip6, buf, bufsize); } /* * Return a hostcache id string for the providing host + port, to be used by * the DNS caching. */ static char * create_hostcache_id(char *server, int port) { /* create and return the new allocated entry */ return aprintf("%s:%d", server, port); } struct hostcache_prune_data { int cache_timeout; time_t now; }; /* * This function is set as a callback to be called for every entry in the DNS * cache when we want to prune old unused entries. * * Returning non-zero means remove the entry, return 0 to keep it in the * cache. */ static int hostcache_timestamp_remove(void *datap, void *hc) { struct hostcache_prune_data *data = (struct hostcache_prune_data *) datap; struct Curl_dns_entry *c = (struct Curl_dns_entry *) hc; if ((data->now - c->timestamp < data->cache_timeout) || c->inuse) { /* please don't remove */ return 0; } /* fine, remove */ return 1; } /* * Prune the DNS cache. This assumes that a lock has already been taken. */ static void hostcache_prune(struct curl_hash *hostcache, int cache_timeout, time_t now) { struct hostcache_prune_data user; user.cache_timeout = cache_timeout; user.now = now; Curl_hash_clean_with_criterium(hostcache, (void *) &user, hostcache_timestamp_remove); } /* * Library-wide function for pruning the DNS cache. This function takes and * returns the appropriate locks. */ void Curl_hostcache_prune(struct SessionHandle *data) { time_t now; if((data->set.dns_cache_timeout == -1) || !data->hostcache) /* cache forever means never prune, and NULL hostcache means we can't do it */ return; if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); time(&now); /* Remove outdated and unused entries from the hostcache */ hostcache_prune(data->hostcache, data->set.dns_cache_timeout, now); if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); } #ifdef HAVE_SIGSETJMP /* Beware this is a global and unique instance. This is used to store the return address that we can jump back to from inside a signal handler. This is not thread-safe stuff. */ sigjmp_buf curl_jmpenv; #endif /* * Curl_cache_addr() stores a 'Curl_addrinfo' struct in the DNS cache. * * When calling Curl_resolv() has resulted in a response with a returned * address, we call this function to store the information in the dns * cache etc * * Returns the Curl_dns_entry entry pointer or NULL if the storage failed. */ struct Curl_dns_entry * Curl_cache_addr(struct SessionHandle *data, Curl_addrinfo *addr, char *hostname, int port) { char *entry_id; size_t entry_len; struct Curl_dns_entry *dns; struct Curl_dns_entry *dns2; time_t now; /* Create an entry id, based upon the hostname and port */ entry_id = create_hostcache_id(hostname, port); /* If we can't create the entry id, fail */ if (!entry_id) return NULL; entry_len = strlen(entry_id); /* Create a new cache entry */ dns = (struct Curl_dns_entry *) malloc(sizeof(struct Curl_dns_entry)); if (!dns) { free(entry_id); return NULL; } dns->inuse = 0; /* init to not used */ dns->addr = addr; /* this is the address(es) */ /* Store the resolved data in our DNS cache. This function may return a pointer to an existing struct already present in the hash, and it may return the same argument we pass in. Make no assumptions. */ dns2 = Curl_hash_add(data->hostcache, entry_id, entry_len+1, (void *)dns); if(!dns2) { /* Major badness, run away. */ free(dns); free(entry_id); return NULL; } time(&now); dns = dns2; dns->timestamp = now; /* used now */ dns->inuse++; /* mark entry as in-use */ /* free the allocated entry_id again */ free(entry_id); return dns; } /* * Curl_resolv() is the main name resolve function within libcurl. It resolves * a name and returns a pointer to the entry in the 'entry' argument (if one * is provided). This function might return immediately if we're using asynch * resolves. See the return codes. * * The cache entry we return will get its 'inuse' counter increased when this * function is used. You MUST call Curl_resolv_unlock() later (when you're * done using this struct) to decrease the counter again. * * Return codes: * * CURLRESOLV_ERROR (-1) = error, no pointer * CURLRESOLV_RESOLVED (0) = OK, pointer provided * CURLRESOLV_PENDING (1) = waiting for response, no pointer */ int Curl_resolv(struct connectdata *conn, char *hostname, int port, struct Curl_dns_entry **entry) { char *entry_id = NULL; struct Curl_dns_entry *dns = NULL; size_t entry_len; int wait; struct SessionHandle *data = conn->data; CURLcode result; int rc; *entry = NULL; #ifdef HAVE_SIGSETJMP /* this allows us to time-out from the name resolver, as the timeout will generate a signal and we will siglongjmp() from that here */ if(!data->set.no_signal && sigsetjmp(curl_jmpenv, 1)) { /* this is coming from a siglongjmp() */ failf(data, "name lookup timed out"); return CURLRESOLV_ERROR; } #endif /* Create an entry id, based upon the hostname and port */ entry_id = create_hostcache_id(hostname, port); /* If we can't create the entry id, fail */ if (!entry_id) return CURLRESOLV_ERROR; entry_len = strlen(entry_id); if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); /* See if its already in our dns cache */ dns = Curl_hash_pick(data->hostcache, entry_id, entry_len+1); if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); /* free the allocated entry_id again */ free(entry_id); rc = CURLRESOLV_ERROR; /* default to failure */ if (!dns) { /* The entry was not in the cache. Resolve it to IP address */ Curl_addrinfo *addr; /* Check what IP specifics the app has requested and if we can provide it. * If not, bail out. */ if(!Curl_ipvalid(data)) return CURLRESOLV_ERROR; /* If Curl_getaddrinfo() returns NULL, 'wait' might be set to a non-zero value indicating that we need to wait for the response to the resolve call */ addr = Curl_getaddrinfo(conn, hostname, port, &wait); if (!addr) { if(wait) { /* the response to our resolve call will come asynchronously at a later time, good or bad */ /* First, check that we haven't received the info by now */ result = Curl_is_resolved(conn, &dns); if(result) /* error detected */ return CURLRESOLV_ERROR; if(dns) rc = CURLRESOLV_RESOLVED; /* pointer provided */ else rc = CURLRESOLV_PENDING; /* no info yet */ } } else { if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); /* we got a response, store it in the cache */ dns = Curl_cache_addr(data, addr, hostname, port); if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); if(!dns) /* returned failure, bail out nicely */ Curl_freeaddrinfo(addr); else rc = CURLRESOLV_RESOLVED; } } else { if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); dns->inuse++; /* we use it! */ if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); rc = CURLRESOLV_RESOLVED; } *entry = dns; return rc; } /* * Curl_resolv_unlock() unlocks the given cached DNS entry. When this has been * made, the struct may be destroyed due to pruning. It is important that only * one unlock is made for each Curl_resolv() call. */ void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns) { curlassert(dns && (dns->inuse>0)); if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); dns->inuse--; if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); } /* * File-internal: free a cache dns entry. */ static void freednsentry(void *freethis) { struct Curl_dns_entry *p = (struct Curl_dns_entry *) freethis; Curl_freeaddrinfo(p->addr); free(p); } /* * Curl_mk_dnscache() creates a new DNS cache and returns the handle for it. */ struct curl_hash *Curl_mk_dnscache(void) { return Curl_hash_alloc(7, freednsentry); } #ifdef CURLRES_ADDRINFO_COPY /* align on even 64bit boundaries */ #define MEMALIGN(x) ((x)+(8-(((unsigned long)(x))&0x7))) /* * Curl_addrinfo_copy() performs a "deep" copy of a hostent into a buffer and * returns a pointer to the malloc()ed copy. You need to call free() on the * returned buffer when you're done with it. */ Curl_addrinfo *Curl_addrinfo_copy(void *org, int port) { struct hostent *orig = org; return Curl_he2ai(orig, port); } #endif /* CURLRES_ADDRINFO_COPY */ criticalmass-1.0.0.orig/curl/lib/hostip.h0000644000175000017500000002027610265631023017576 0ustar danieldaniel#ifndef __HOSTIP_H #define __HOSTIP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostip.h,v 1.43 2005/04/04 21:23:04 bagder Exp $ ***************************************************************************/ #include "setup.h" #include "hash.h" /* * Setup comfortable CURLRES_* defines to use in the host*.c sources. */ #ifdef USE_ARES #define CURLRES_ASYNCH #define CURLRES_ARES #endif #ifdef USE_THREADING_GETHOSTBYNAME #define CURLRES_ASYNCH #define CURLRES_THREADED #endif #ifdef USE_THREADING_GETADDRINFO #define CURLRES_ASYNCH #define CURLRES_THREADED #endif #ifdef ENABLE_IPV6 #define CURLRES_IPV6 #else #define CURLRES_IPV4 #endif #ifdef CURLRES_IPV4 #if !defined(HAVE_GETHOSTBYNAME_R) || defined(CURLRES_ASYNCH) /* If built for ipv4 and missing gethostbyname_r(), or if using async name resolve, we need the Curl_addrinfo_copy() function (which itself needs the Curl_hostent_relocate() function)) */ #define CURLRES_ADDRINFO_COPY #endif #endif /* IPv4-only */ #ifndef CURLRES_ASYNCH #define CURLRES_SYNCH #endif #ifndef USE_LIBIDN #define CURLRES_IDN #endif /* Allocate enough memory to hold the full name information structs and * everything. OSF1 is known to require at least 8872 bytes. The buffer * required for storing all possible aliases and IP numbers is according to * Stevens' Unix Network Programming 2nd edition, p. 304: 8192 bytes! */ #define CURL_HOSTENT_SIZE 9000 #define CURL_TIMEOUT_RESOLVE 300 /* when using asynch methods, we allow this many seconds for a name resolve */ #ifdef CURLRES_ARES #define CURL_ASYNC_SUCCESS ARES_SUCCESS #else #define CURL_ASYNC_SUCCESS CURLE_OK #endif /* * Curl_addrinfo MUST be used for all name resolved info. */ #ifdef CURLRES_IPV6 typedef struct addrinfo Curl_addrinfo; #else /* OK, so some ipv4-only include tree probably have the addrinfo struct, but to work even on those that don't, we provide our own look-alike! */ struct Curl_addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct Curl_addrinfo *ai_next; }; typedef struct Curl_addrinfo Curl_addrinfo; #endif struct addrinfo; struct hostent; struct SessionHandle; struct connectdata; void Curl_global_host_cache_init(void); void Curl_global_host_cache_dtor(void); struct curl_hash *Curl_global_host_cache_get(void); #define Curl_global_host_cache_use(__p) ((__p)->set.global_dns_cache) struct Curl_dns_entry { Curl_addrinfo *addr; time_t timestamp; long inuse; /* use-counter, make very sure you decrease this when you're done using the address you received */ }; /* * Curl_resolv() returns an entry with the info for the specified host * and port. * * The returned data *MUST* be "unlocked" with Curl_resolv_unlock() after * use, or we'll leak memory! */ /* return codes */ #define CURLRESOLV_ERROR -1 #define CURLRESOLV_RESOLVED 0 #define CURLRESOLV_PENDING 1 int Curl_resolv(struct connectdata *conn, char *hostname, int port, struct Curl_dns_entry **dnsentry); /* * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've * been set and returns TRUE if they are OK. */ bool Curl_ipvalid(struct SessionHandle *data); /* * Curl_getaddrinfo() is the generic low-level name resolve API within this * source file. There are several versions of this function - for different * name resolve layers (selected at build-time). They all take this same set * of arguments */ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn, char *hostname, int port, int *waitp); CURLcode Curl_is_resolved(struct connectdata *conn, struct Curl_dns_entry **dns); CURLcode Curl_wait_for_resolv(struct connectdata *conn, struct Curl_dns_entry **dnsentry); /* Curl_resolv_fdset() is a generic function that exists in multiple versions depending on what name resolve technology we've built to use. The function is called from the curl_multi_fdset() function */ CURLcode Curl_resolv_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp); /* unlock a previously resolved dns entry */ void Curl_resolv_unlock(struct SessionHandle *data, struct Curl_dns_entry *dns); /* for debugging purposes only: */ void Curl_scan_cache_used(void *user, void *ptr); /* free name info */ void Curl_freeaddrinfo(Curl_addrinfo *freeaddr); /* make a new dns cache and return the handle */ struct curl_hash *Curl_mk_dnscache(void); /* prune old entries from the DNS cache */ void Curl_hostcache_prune(struct SessionHandle *data); /* Return # of adresses in a Curl_addrinfo struct */ int Curl_num_addresses (const Curl_addrinfo *addr); #ifdef CURLDEBUG void curl_dofreeaddrinfo(struct addrinfo *freethis, int line, const char *source); int curl_dogetaddrinfo(char *hostname, char *service, struct addrinfo *hints, struct addrinfo **result, int line, const char *source); int curl_dogetnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags, int line, const char *source); #endif /* This is the callback function that is used when we build with asynch resolve, ipv4 */ CURLcode Curl_addrinfo4_callback(void *arg, int status, struct hostent *hostent); /* This is the callback function that is used when we build with asynch resolve, ipv6 */ CURLcode Curl_addrinfo6_callback(void *arg, int status, struct addrinfo *ai); /* [ipv4 only] Creates a Curl_addrinfo struct from a numerical-only IP address */ Curl_addrinfo *Curl_ip2addr(in_addr_t num, char *hostname, int port); /* [ipv4 only] Curl_he2ai() converts a struct hostent to a Curl_addrinfo chain and returns it */ Curl_addrinfo *Curl_he2ai(struct hostent *, int port); /* relocate a hostent struct */ void Curl_hostent_relocate(struct hostent *h, long offset); /* Clone a Curl_addrinfo struct, works protocol independently */ Curl_addrinfo *Curl_addrinfo_copy(void *orig, int port); /* * Curl_printable_address() returns a printable version of the 1st address * given in the 'ip' argument. The result will be stored in the buf that is * bufsize bytes big. */ const char *Curl_printable_address(const Curl_addrinfo *ip, char *buf, size_t bufsize); /* * Curl_cache_addr() stores a 'Curl_addrinfo' struct in the DNS cache. * * Returns the Curl_dns_entry entry pointer or NULL if the storage failed. */ struct Curl_dns_entry * Curl_cache_addr(struct SessionHandle *data, Curl_addrinfo *addr, char *hostname, int port); /* * Curl_destroy_thread_data() cleans up async resolver data. * Complementary of ares_destroy. */ struct Curl_async; /* forward-declaration */ void Curl_destroy_thread_data(struct Curl_async *async); #ifndef INADDR_NONE #define CURL_INADDR_NONE (in_addr_t) ~0 #else #define CURL_INADDR_NONE INADDR_NONE #endif #endif criticalmass-1.0.0.orig/curl/lib/security.c0000644000175000017500000002663010265631023020132 0ustar danieldaniel/* This source code was modified by Martin Hedenfalk for * use in Curl. His latest changes were done 2000-09-18. * * It has since been patched and modified a lot by Daniel Stenberg * to make it better applied to curl conditions, and to make * it not use globals, pollute name space and more. This source code awaits a * rewrite to work around the paragraph 2 in the BSD licenses as explained * below. * * Copyright (c) 1998, 1999 Kungliga Tekniska Hgskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "setup.h" #ifndef CURL_DISABLE_FTP #ifdef HAVE_KRB4 #define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */ #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include "urldata.h" #include "krb4.h" #include "base64.h" #include "sendf.h" #include "ftp.h" #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" #define min(a, b) ((a) < (b) ? (a) : (b)) static const struct { enum protection_level level; const char *name; } level_names[] = { { prot_clear, "clear" }, { prot_safe, "safe" }, { prot_confidential, "confidential" }, { prot_private, "private" } }; static enum protection_level name_to_level(const char *name) { int i; for(i = 0; i < (int)sizeof(level_names)/(int)sizeof(level_names[0]); i++) if(curl_strnequal(level_names[i].name, name, strlen(name))) return level_names[i].level; return (enum protection_level)-1; } static const struct Curl_sec_client_mech * const mechs[] = { #ifdef KRB5 /* not supported */ #endif #ifdef HAVE_KRB4 &Curl_krb4_client_mech, #endif NULL }; int Curl_sec_getc(struct connectdata *conn, FILE *F) { if(conn->sec_complete && conn->data_prot) { char c; if(Curl_sec_read(conn, fileno(F), &c, 1) <= 0) return EOF; return c; } else return getc(F); } static int block_read(int fd, void *buf, size_t len) { unsigned char *p = buf; int b; while(len) { b = read(fd, p, len); if (b == 0) return 0; else if (b < 0) return -1; len -= b; p += b; } return p - (unsigned char*)buf; } static int block_write(int fd, void *buf, size_t len) { unsigned char *p = buf; int b; while(len) { b = write(fd, p, len); if(b < 0) return -1; len -= b; p += b; } return p - (unsigned char*)buf; } static int sec_get_data(struct connectdata *conn, int fd, struct krb4buffer *buf) { int len; int b; b = block_read(fd, &len, sizeof(len)); if (b == 0) return 0; else if (b < 0) return -1; len = ntohl(len); buf->data = realloc(buf->data, len); b = block_read(fd, buf->data, len); if (b == 0) return 0; else if (b < 0) return -1; buf->size = (conn->mech->decode)(conn->app_data, buf->data, len, conn->data_prot, conn); buf->index = 0; return 0; } static size_t buffer_read(struct krb4buffer *buf, void *data, size_t len) { len = min(len, buf->size - buf->index); memcpy(data, (char*)buf->data + buf->index, len); buf->index += len; return len; } static size_t buffer_write(struct krb4buffer *buf, void *data, size_t len) { if(buf->index + len > buf->size) { void *tmp; if(buf->data == NULL) tmp = malloc(1024); else tmp = realloc(buf->data, buf->index + len); if(tmp == NULL) return -1; buf->data = tmp; buf->size = buf->index + len; } memcpy((char*)buf->data + buf->index, data, len); buf->index += len; return len; } int Curl_sec_read(struct connectdata *conn, int fd, void *buffer, int length) { size_t len; int rx = 0; if(conn->sec_complete == 0 || conn->data_prot == 0) return read(fd, buffer, length); if(conn->in_buffer.eof_flag){ conn->in_buffer.eof_flag = 0; return 0; } len = buffer_read(&conn->in_buffer, buffer, length); length -= len; rx += len; buffer = (char*)buffer + len; while(length) { if(sec_get_data(conn, fd, &conn->in_buffer) < 0) return -1; if(conn->in_buffer.size == 0) { if(rx) conn->in_buffer.eof_flag = 1; return rx; } len = buffer_read(&conn->in_buffer, buffer, length); length -= len; rx += len; buffer = (char*)buffer + len; } return rx; } static int sec_send(struct connectdata *conn, int fd, char *from, int length) { int bytes; void *buf; bytes = (conn->mech->encode)(conn->app_data, from, length, conn->data_prot, &buf, conn); bytes = htonl(bytes); block_write(fd, &bytes, sizeof(bytes)); block_write(fd, buf, ntohl(bytes)); free(buf); return length; } int Curl_sec_fflush_fd(struct connectdata *conn, int fd) { if(conn->data_prot != prot_clear) { if(conn->out_buffer.index > 0){ Curl_sec_write(conn, fd, conn->out_buffer.data, conn->out_buffer.index); conn->out_buffer.index = 0; } sec_send(conn, fd, NULL, 0); } return 0; } int Curl_sec_write(struct connectdata *conn, int fd, char *buffer, int length) { int len = conn->buffer_size; int tx = 0; if(conn->data_prot == prot_clear) return write(fd, buffer, length); len -= (conn->mech->overhead)(conn->app_data, conn->data_prot, len); while(length){ if(length < len) len = length; sec_send(conn, fd, buffer, len); length -= len; buffer += len; tx += len; } return tx; } int Curl_sec_putc(struct connectdata *conn, int c, FILE *F) { char ch = c; if(conn->data_prot == prot_clear) return putc(c, F); buffer_write(&conn->out_buffer, &ch, 1); if(c == '\n' || conn->out_buffer.index >= 1024 /* XXX */) { Curl_sec_write(conn, fileno(F), conn->out_buffer.data, conn->out_buffer.index); conn->out_buffer.index = 0; } return c; } int Curl_sec_read_msg(struct connectdata *conn, char *s, int level) { int len; unsigned char *buf; int code; len = Curl_base64_decode(s + 4, &buf); /* XXX */ if(len > 0) len = (conn->mech->decode)(conn->app_data, buf, len, level, conn); else return -1; if(len < 0) { free(buf); return -1; } buf[len] = '\0'; if(buf[3] == '-') code = 0; else sscanf((char *)buf, "%d", &code); if(buf[len-1] == '\n') buf[len-1] = '\0'; strcpy(s, (char *)buf); free(buf); return code; } enum protection_level Curl_set_command_prot(struct connectdata *conn, enum protection_level level) { enum protection_level old = conn->command_prot; conn->command_prot = level; return old; } static int sec_prot_internal(struct connectdata *conn, int level) { char *p; unsigned int s = 1048576; ssize_t nread; if(!conn->sec_complete){ infof(conn->data, "No security data exchange has taken place.\n"); return -1; } if(level){ int code; if(Curl_ftpsendf(conn, "PBSZ %u", s)) return -1; if(Curl_GetFTPResponse(&nread, conn, &code)) return -1; if(code/100 != '2'){ failf(conn->data, "Failed to set protection buffer size."); return -1; } conn->buffer_size = s; p = strstr(conn->data->state.buffer, "PBSZ="); if(p) sscanf(p, "PBSZ=%u", &s); if(s < conn->buffer_size) conn->buffer_size = s; } if(Curl_ftpsendf(conn, "PROT %c", level["CSEP"])) return -1; if(Curl_GetFTPResponse(&nread, conn, NULL)) return -1; if(conn->data->state.buffer[0] != '2'){ failf(conn->data, "Failed to set protection level."); return -1; } conn->data_prot = (enum protection_level)level; return 0; } void Curl_sec_set_protection_level(struct connectdata *conn) { if(conn->sec_complete && conn->data_prot != conn->request_data_prot) sec_prot_internal(conn, conn->request_data_prot); } int Curl_sec_request_prot(struct connectdata *conn, const char *level) { int l = name_to_level(level); if(l == -1) return -1; conn->request_data_prot = (enum protection_level)l; return 0; } int Curl_sec_login(struct connectdata *conn) { int ret; const struct Curl_sec_client_mech * const *m; ssize_t nread; struct SessionHandle *data=conn->data; int ftpcode; for(m = mechs; *m && (*m)->name; m++) { void *tmp; tmp = realloc(conn->app_data, (*m)->size); if (tmp == NULL) { failf (data, "realloc %u failed", (*m)->size); return -1; } conn->app_data = tmp; if((*m)->init && (*(*m)->init)(conn->app_data) != 0) { infof(data, "Skipping %s...\n", (*m)->name); continue; } infof(data, "Trying %s...\n", (*m)->name); if(Curl_ftpsendf(conn, "AUTH %s", (*m)->name)) return -1; if(Curl_GetFTPResponse(&nread, conn, &ftpcode)) return -1; if(conn->data->state.buffer[0] != '3'){ switch(ftpcode) { case 504: infof(data, "%s is not supported by the server.\n", (*m)->name); break; case 534: infof(data, "%s rejected as security mechanism.\n", (*m)->name); break; default: if(conn->data->state.buffer[0] == '5') { infof(data, "The server doesn't support the FTP " "security extensions.\n"); return -1; } break; } continue; } ret = (*(*m)->auth)(conn->app_data, conn); if(ret == AUTH_CONTINUE) continue; else if(ret != AUTH_OK){ /* mechanism is supposed to output error string */ return -1; } conn->mech = *m; conn->sec_complete = 1; conn->command_prot = prot_safe; break; } return *m == NULL; } void Curl_sec_end(struct connectdata *conn) { if (conn->mech != NULL) { if(conn->mech->end) (conn->mech->end)(conn->app_data); memset(conn->app_data, 0, conn->mech->size); free(conn->app_data); conn->app_data = NULL; } conn->sec_complete = 0; conn->data_prot = (enum protection_level)0; conn->mech=NULL; } #endif /* HAVE_KRB4 */ #endif /* CURL_DISABLE_FTP */ criticalmass-1.0.0.orig/curl/lib/README.curlx0000644000175000017500000000405210265631023020125 0ustar danieldaniel$Id: README.curlx,v 1.2 2004/04/30 08:51:19 bagder Exp $ _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| Source Code Functions Apps Might Use ==================================== The libcurl source code offers a few functions by source only. They are not part of the official libcurl API, but the source files might be useful for others so apps can optionally compile/build with these sources to gain additional functions. We provide them through a single header file for easy access for apps: "curlx.h" curlx_strtoofft() A macro that converts a string containing a number to a curl_off_t number. This might use the curlx_strtoll() function which is provided as source code in strtoofft.c. Note that the function is only provided if no strtoll() (or equivalent) function exist on your platform. If curl_off_t is only a 32 bit number on your platform, this macro uses strtol(). curlx_tvnow() returns a struct timeval for the current time. curlx_tvdiff() returns the difference between two timeval structs, in number of milliseconds. curlx_tvdiff_secs() returns the same as curlx_tvdiff but with full usec resolution (as a double) FUTURE ====== Several functions will be removed from the public curl_ name space in a future libcurl release. They will then only become available as curlx_ functions instead. To make the transition easier, we already today provide these functions with the curlx_ prefix to allow sources to get built properly with the new function names. The functions this concerns are: curlx_getenv curlx_strequal curlx_strnequal curlx_mvsnprintf curlx_msnprintf curlx_maprintf curlx_mvaprintf curlx_msprintf curlx_mprintf curlx_mfprintf curlx_mvsprintf curlx_mvprintf curlx_mvfprintf criticalmass-1.0.0.orig/curl/lib/msvcproj.foot0000644000175000017500000000022110265631023020637 0ustar danieldaniel # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project criticalmass-1.0.0.orig/curl/lib/msvcproj.head0000644000175000017500000000720410265631023020601 0ustar danieldaniel# Microsoft Developer Studio Project File - Name="curllib" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=curllib - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "curllib.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "curllib.mak" CFG="curllib - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "curllib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "curllib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "curllib - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /D "_WINDLL" /FR /FD /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /map /debug /machine:I386 /out:"Release/libcurl.dll" !ELSEIF "$(CFG)" == "curllib - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /FR /FD /GZ /c # SUBTRACT CPP /WX /YX # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /incremental:no /map /debug /machine:I386 /out:"Debug/libcurl.dll" /pdbtype:sept # SUBTRACT LINK32 /nodefaultlib !ENDIF # Begin Target # Name "curllib - Win32 Release" # Name "curllib - Win32 Debug" criticalmass-1.0.0.orig/curl/lib/http_chunks.c0000644000175000017500000002004110265631023020603 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_chunks.c,v 1.27 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_HTTP /* -- WIN32 approved -- */ #include #include #include #include #include #include "urldata.h" /* it includes http_chunks.h */ #include "sendf.h" /* for the client write stuff */ #include "content_encoding.h" #include "http.h" #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" /* * Chunk format (simplified): * * [ chunk extension ] CRLF * CRLF * * Highlights from RFC2616 section 3.6 say: The chunked encoding modifies the body of a message in order to transfer it as a series of chunks, each with its own size indicator, followed by an OPTIONAL trailer containing entity-header fields. This allows dynamically produced content to be transferred along with the information necessary for the recipient to verify that it has received the full message. Chunked-Body = *chunk last-chunk trailer CRLF chunk = chunk-size [ chunk-extension ] CRLF chunk-data CRLF chunk-size = 1*HEX last-chunk = 1*("0") [ chunk-extension ] CRLF chunk-extension= *( ";" chunk-ext-name [ "=" chunk-ext-val ] ) chunk-ext-name = token chunk-ext-val = token | quoted-string chunk-data = chunk-size(OCTET) trailer = *(entity-header CRLF) The chunk-size field is a string of hex digits indicating the size of the chunk. The chunked encoding is ended by any chunk whose size is zero, followed by the trailer, which is terminated by an empty line. */ void Curl_httpchunk_init(struct connectdata *conn) { struct Curl_chunker *chunk = &conn->proto.http->chunk; chunk->hexindex=0; /* start at 0 */ chunk->dataleft=0; /* no data left yet! */ chunk->state = CHUNK_HEX; /* we get hex first! */ } /* * chunk_read() returns a OK for normal operations, or a positive return code * for errors. STOP means this sequence of chunks is complete. The 'wrote' * argument is set to tell the caller how many bytes we actually passed to the * client (for byte-counting and whatever). * * The states and the state-machine is further explained in the header file. */ CHUNKcode Curl_httpchunk_read(struct connectdata *conn, char *datap, ssize_t datalen, ssize_t *wrotep) { CURLcode result=CURLE_OK; struct Curl_chunker *ch = &conn->proto.http->chunk; struct Curl_transfer_keeper *k = &conn->keep; size_t piece; size_t length = (size_t)datalen; size_t *wrote = (size_t *)wrotep; *wrote = 0; /* nothing's written yet */ while(length) { switch(ch->state) { case CHUNK_HEX: if(isxdigit((int)*datap)) { if(ch->hexindex < MAXNUM_SIZE) { ch->hexbuffer[ch->hexindex] = *datap; datap++; length--; ch->hexindex++; } else { return CHUNKE_TOO_LONG_HEX; /* longer hex than we support */ } } else { if(0 == ch->hexindex) { /* This is illegal data, we received junk where we expected a hexadecimal digit. */ return CHUNKE_ILLEGAL_HEX; } /* length and datap are unmodified */ ch->hexbuffer[ch->hexindex]=0; ch->datasize=strtoul(ch->hexbuffer, NULL, 16); ch->state = CHUNK_POSTHEX; } break; case CHUNK_POSTHEX: /* In this state, we're waiting for CRLF to arrive. We support this to allow so called chunk-extensions to show up here before the CRLF comes. */ if(*datap == '\r') ch->state = CHUNK_CR; length--; datap++; break; case CHUNK_CR: /* waiting for the LF */ if(*datap == '\n') { /* we're now expecting data to come, unless size was zero! */ if(0 == ch->datasize) { ch->state = CHUNK_STOP; /* stop reading! */ if(1 == length) { /* This was the final byte, return right now */ return CHUNKE_STOP; } } else ch->state = CHUNK_DATA; } else /* previously we got a fake CR, go back to CR waiting! */ ch->state = CHUNK_CR; datap++; length--; break; case CHUNK_DATA: /* we get pure and fine data We expect another 'datasize' of data. We have 'length' right now, it can be more or less than 'datasize'. Get the smallest piece. */ piece = (ch->datasize >= length)?length:ch->datasize; /* Write the data portion available */ #ifdef HAVE_LIBZ switch (conn->keep.content_encoding) { case IDENTITY: #endif if(!k->ignorebody) result = Curl_client_write(conn->data, CLIENTWRITE_BODY, datap, piece); #ifdef HAVE_LIBZ break; case DEFLATE: /* update conn->keep.str to point to the chunk data. */ conn->keep.str = datap; result = Curl_unencode_deflate_write(conn->data, &conn->keep, (ssize_t)piece); break; case GZIP: /* update conn->keep.str to point to the chunk data. */ conn->keep.str = datap; result = Curl_unencode_gzip_write(conn->data, &conn->keep, (ssize_t)piece); break; case COMPRESS: default: failf (conn->data, "Unrecognized content encoding type. " "libcurl understands `identity', `deflate' and `gzip' " "content encodings."); return CHUNKE_BAD_ENCODING; } #endif if(result) return CHUNKE_WRITE_ERROR; *wrote += piece; ch->datasize -= piece; /* decrease amount left to expect */ datap += piece; /* move read pointer forward */ length -= piece; /* decrease space left in this round */ if(0 == ch->datasize) /* end of data this round, we now expect a trailing CRLF */ ch->state = CHUNK_POSTCR; break; case CHUNK_POSTCR: if(*datap == '\r') { ch->state = CHUNK_POSTLF; datap++; length--; } else return CHUNKE_BAD_CHUNK; break; case CHUNK_POSTLF: if(*datap == '\n') { /* * The last one before we go back to hex state and start all * over. */ Curl_httpchunk_init(conn); datap++; length--; } else return CHUNKE_BAD_CHUNK; break; case CHUNK_STOP: /* If we arrive here, there is data left in the end of the buffer even if there's no more chunks to read */ ch->dataleft = length; return CHUNKE_STOP; /* return stop */ default: return CHUNKE_STATE_ERROR; } } return CHUNKE_OK; } #endif /* CURL_DISABLE_HTTP */ criticalmass-1.0.0.orig/curl/lib/http_chunks.h0000644000175000017500000000571110265631023020617 0ustar danieldaniel#ifndef __HTTP_CHUNKS_H #define __HTTP_CHUNKS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_chunks.h,v 1.13 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ /* * The longest possible hexadecimal number we support in a chunked transfer. * Weird enough, RFC2616 doesn't set a maximum size! Since we use strtoul() * to convert it, we "only" support 2^32 bytes chunk data. */ #define MAXNUM_SIZE 16 typedef enum { CHUNK_FIRST, /* never use */ /* In this we await and buffer all hexadecimal digits until we get one that isn't a hexadecimal digit. When done, we go POSTHEX */ CHUNK_HEX, /* We have received the hexadecimal digit and we eat all characters until we get a CRLF pair. When we see a CR we go to the CR state. */ CHUNK_POSTHEX, /* A single CR has been found and we should get a LF right away in this state or we go back to POSTHEX. When LF is received, we go to DATA. If the size given was zero, we set state to STOP and return. */ CHUNK_CR, /* We eat the amount of data specified. When done, we move on to the POST_CR state. */ CHUNK_DATA, /* POSTCR should get a CR and nothing else, then move to POSTLF */ CHUNK_POSTCR, /* POSTLF should get a LF and nothing else, then move back to HEX as the CRLF combination marks the end of a chunk */ CHUNK_POSTLF, /* This is mainly used to really mark that we're out of the game. NOTE: that there's a 'dataleft' field in the struct that will tell how many bytes that were not passed to the client in the end of the last buffer! */ CHUNK_STOP, CHUNK_LAST /* never use */ } ChunkyState; typedef enum { CHUNKE_STOP = -1, CHUNKE_OK = 0, CHUNKE_TOO_LONG_HEX = 1, CHUNKE_ILLEGAL_HEX, CHUNKE_BAD_CHUNK, CHUNKE_WRITE_ERROR, CHUNKE_STATE_ERROR, CHUNKE_BAD_ENCODING, CHUNKE_LAST } CHUNKcode; struct Curl_chunker { char hexbuffer[ MAXNUM_SIZE + 1]; int hexindex; ChunkyState state; size_t datasize; size_t dataleft; /* untouched data amount at the end of the last buffer */ }; #endif criticalmass-1.0.0.orig/curl/lib/ldap.c0000644000175000017500000004074610265631023017207 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: ldap.c,v 1.49 2005/03/11 05:28:07 danf Exp $ ***************************************************************************/ #include "setup.h" #ifndef CURL_DISABLE_LDAP /* -- WIN32 approved -- */ #include #include #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_STAT_H #include #endif #include #if defined(WIN32) # include # include # include #endif #ifdef HAVE_UNISTD_H # include #endif #ifdef HAVE_DLFCN_H # include #endif #include "urldata.h" #include #include "sendf.h" #include "escape.h" #include "transfer.h" #include "strequal.h" #include "strtok.h" #include "ldap.h" #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #include "memdebug.h" /* WLdap32.dll functions are *not* stdcall. Must call these via __cdecl * pointers in case libcurl was compiled as fastcall (cl -Gr). Watcom * uses fastcall by default. */ #if !defined(WIN32) && !defined(__cdecl) #define __cdecl #endif #ifndef LDAP_SIZELIMIT_EXCEEDED #define LDAP_SIZELIMIT_EXCEEDED 4 #endif #define DLOPEN_MODE RTLD_LAZY /*! assume all dlopen() implementations have this */ #if defined(RTLD_LAZY_GLOBAL) /* It turns out some systems use this: */ # undef DLOPEN_MODE # define DLOPEN_MODE RTLD_LAZY_GLOBAL #elif defined(RTLD_GLOBAL) # undef DLOPEN_MODE # define DLOPEN_MODE (RTLD_LAZY | RTLD_GLOBAL) #endif #define DYNA_GET_FUNCTION(type, fnc) do { \ (fnc) = (type)DynaGetFunction(#fnc); \ if ((fnc) == NULL) \ return CURLE_FUNCTION_NOT_FOUND; \ } while (0) /*! CygWin etc. configure could set these, but we don't want it. * Must use WLdap32.dll code. */ #if defined(WIN32) #undef HAVE_DLOPEN #undef HAVE_LIBDL #endif typedef void * (*dynafunc)(void *input); /*********************************************************************** */ #if defined(HAVE_DLOPEN) || defined(HAVE_LIBDL) || defined(WIN32) static void *libldap = NULL; #if defined(DL_LBER_FILE) static void *liblber = NULL; #endif #endif static int DynaOpen(const char **mod_name) { #if defined(HAVE_DLOPEN) || defined(HAVE_LIBDL) if (libldap == NULL) { /* * libldap.so can normally resolve its dependency on liblber.so * automatically, but in broken installation it does not so * handle it here by opening liblber.so as global. */ #ifdef DL_LBER_FILE *mod_name = DL_LBER_FILE; liblber = dlopen(*mod_name, DLOPEN_MODE); if (!liblber) return 0; #endif /* Assume loading libldap.so will fail if loading of liblber.so failed */ *mod_name = DL_LDAP_FILE; libldap = dlopen(*mod_name, RTLD_LAZY); } return (libldap != NULL); #elif defined(WIN32) *mod_name = DL_LDAP_FILE; if (!libldap) libldap = (void*)LoadLibrary(*mod_name); return (libldap != NULL); #else (void) mod_name; return (0); #endif } static void DynaClose(void) { #if defined(HAVE_DLOPEN) || defined(HAVE_LIBDL) if (libldap) { dlclose(libldap); libldap=NULL; } #ifdef DL_LBER_FILE if (liblber) { dlclose(liblber); liblber=NULL; } #endif #elif defined(WIN32) if (libldap) { FreeLibrary ((HMODULE)libldap); libldap = NULL; } #endif } static dynafunc DynaGetFunction(const char *name) { dynafunc func = (dynafunc)NULL; #if defined(HAVE_DLOPEN) || defined(HAVE_LIBDL) if (libldap) { /* This typecast magic below was brought by Joe Halpin. In ISO C, you * cannot typecast a data pointer to a function pointer, but that's * exactly what we need to do here to avoid compiler warnings on picky * compilers! */ *(void**) (&func) = dlsym(libldap, name); } #elif defined(WIN32) if (libldap) { func = (dynafunc)GetProcAddress((HINSTANCE)libldap, name); } #else (void) name; #endif return func; } /*********************************************************************** */ typedef struct ldap_url_desc { struct ldap_url_desc *lud_next; char *lud_scheme; char *lud_host; int lud_port; char *lud_dn; char **lud_attrs; int lud_scope; char *lud_filter; char **lud_exts; int lud_crit_exts; } LDAPURLDesc; #ifdef WIN32 static int _ldap_url_parse (const struct connectdata *conn, LDAPURLDesc **ludp); static void _ldap_free_urldesc (LDAPURLDesc *ludp); static void (*ldap_free_urldesc)(LDAPURLDesc *) = _ldap_free_urldesc; #endif #ifdef DEBUG_LDAP #define LDAP_TRACE(x) do { \ _ldap_trace ("%u: ", __LINE__); \ _ldap_trace x; \ } while (0) static void _ldap_trace (const char *fmt, ...); #else #define LDAP_TRACE(x) ((void)0) #endif CURLcode Curl_ldap(struct connectdata *conn, bool *done) { CURLcode status = CURLE_OK; int rc = 0; #ifndef WIN32 int (*ldap_url_parse)(char *, LDAPURLDesc **); void (*ldap_free_urldesc)(void *); #endif void *(__cdecl *ldap_init)(char *, int); int (__cdecl *ldap_simple_bind_s)(void *, char *, char *); int (__cdecl *ldap_unbind_s)(void *); int (__cdecl *ldap_search_s)(void *, char *, int, char *, char **, int, void **); void *(__cdecl *ldap_first_entry)(void *, void *); void *(__cdecl *ldap_next_entry)(void *, void *); char *(__cdecl *ldap_err2string)(int); char *(__cdecl *ldap_get_dn)(void *, void *); char *(__cdecl *ldap_first_attribute)(void *, void *, void **); char *(__cdecl *ldap_next_attribute)(void *, void *, void *); char **(__cdecl *ldap_get_values)(void *, void *, const char *); void (__cdecl *ldap_value_free)(char **); void (__cdecl *ldap_memfree)(void *); void (__cdecl *ber_free)(void *, int); void *server; LDAPURLDesc *ludp = NULL; const char *mod_name; void *result; void *entryIterator; /*! type should be 'LDAPMessage *' */ int num = 0; struct SessionHandle *data=conn->data; *done = TRUE; /* unconditionally */ infof(data, "LDAP local: %s\n", data->change.url); if (!DynaOpen(&mod_name)) { failf(data, "The %s LDAP library/libraries couldn't be opened", mod_name); return CURLE_LIBRARY_NOT_FOUND; } /* The types are needed because ANSI C distinguishes between * pointer-to-object (data) and pointer-to-function. */ DYNA_GET_FUNCTION(void *(__cdecl *)(char *, int), ldap_init); DYNA_GET_FUNCTION(int (__cdecl *)(void *, char *, char *), ldap_simple_bind_s); DYNA_GET_FUNCTION(int (__cdecl *)(void *), ldap_unbind_s); #ifndef WIN32 DYNA_GET_FUNCTION(int (*)(char *, LDAPURLDesc **), ldap_url_parse); DYNA_GET_FUNCTION(void (*)(void *), ldap_free_urldesc); #endif DYNA_GET_FUNCTION(int (__cdecl *)(void *, char *, int, char *, char **, int, void **), ldap_search_s); DYNA_GET_FUNCTION(void *(__cdecl *)(void *, void *), ldap_first_entry); DYNA_GET_FUNCTION(void *(__cdecl *)(void *, void *), ldap_next_entry); DYNA_GET_FUNCTION(char *(__cdecl *)(int), ldap_err2string); DYNA_GET_FUNCTION(char *(__cdecl *)(void *, void *), ldap_get_dn); DYNA_GET_FUNCTION(char *(__cdecl *)(void *, void *, void **), ldap_first_attribute); DYNA_GET_FUNCTION(char *(__cdecl *)(void *, void *, void *), ldap_next_attribute); DYNA_GET_FUNCTION(char **(__cdecl *)(void *, void *, const char *), ldap_get_values); DYNA_GET_FUNCTION(void (__cdecl *)(char **), ldap_value_free); DYNA_GET_FUNCTION(void (__cdecl *)(void *), ldap_memfree); DYNA_GET_FUNCTION(void (__cdecl *)(void *, int), ber_free); server = (*ldap_init)(conn->host.name, (int)conn->port); if (server == NULL) { failf(data, "LDAP local: Cannot connect to %s:%d", conn->host.name, conn->port); status = CURLE_COULDNT_CONNECT; goto quit; } rc = (*ldap_simple_bind_s)(server, conn->bits.user_passwd ? conn->user : NULL, conn->bits.user_passwd ? conn->passwd : NULL); if (rc != 0) { failf(data, "LDAP local: %s", (*ldap_err2string)(rc)); status = CURLE_LDAP_CANNOT_BIND; goto quit; } #ifdef WIN32 rc = _ldap_url_parse(conn, &ludp); #else rc = (*ldap_url_parse)(data->change.url, &ludp); #endif if (rc != 0) { failf(data, "LDAP local: %s", (*ldap_err2string)(rc)); status = CURLE_LDAP_INVALID_URL; goto quit; } rc = (*ldap_search_s)(server, ludp->lud_dn, ludp->lud_scope, ludp->lud_filter, ludp->lud_attrs, 0, &result); if (rc != 0 && rc != LDAP_SIZELIMIT_EXCEEDED) { failf(data, "LDAP remote: %s", (*ldap_err2string)(rc)); status = CURLE_LDAP_SEARCH_FAILED; goto quit; } for(num = 0, entryIterator = (*ldap_first_entry)(server, result); entryIterator; entryIterator = (*ldap_next_entry)(server, entryIterator), num++) { void *ber = NULL; /*! is really 'BerElement **' */ void *attribute; /*! suspicious that this isn't 'const' */ char *dn = (*ldap_get_dn)(server, entryIterator); int i; Curl_client_write(data, CLIENTWRITE_BODY, (char *)"DN: ", 4); Curl_client_write(data, CLIENTWRITE_BODY, (char *)dn, 0); Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 1); for (attribute = (*ldap_first_attribute)(server, entryIterator, &ber); attribute; attribute = (*ldap_next_attribute)(server, entryIterator, ber)) { char **vals = (*ldap_get_values)(server, entryIterator, attribute); if (vals != NULL) { for (i = 0; (vals[i] != NULL); i++) { Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\t", 1); Curl_client_write(data, CLIENTWRITE_BODY, (char*) attribute, 0); Curl_client_write(data, CLIENTWRITE_BODY, (char *)": ", 2); Curl_client_write(data, CLIENTWRITE_BODY, vals[i], 0); Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 0); } /* Free memory used to store values */ (*ldap_value_free)(vals); } Curl_client_write(data, CLIENTWRITE_BODY, (char *)"\n", 1); (*ldap_memfree)(attribute); } (*ldap_memfree)(dn); if (ber) (*ber_free)(ber, 0); } quit: LDAP_TRACE (("Received %d entries\n", num)); if (rc == LDAP_SIZELIMIT_EXCEEDED) infof(data, "There are more than %d entries\n", num); if (ludp) (*ldap_free_urldesc)(ludp); if (server) (*ldap_unbind_s)(server); DynaClose(); /* no data to transfer */ Curl_Transfer(conn, -1, -1, FALSE, NULL, -1, NULL); conn->bits.close = TRUE; return status; } #ifdef DEBUG_LDAP static void _ldap_trace (const char *fmt, ...) { static int do_trace = -1; va_list args; if (do_trace == -1) { const char *env = getenv("CURL_TRACE"); do_trace = (env && atoi(env) > 0); } if (!do_trace) return; va_start (args, fmt); vfprintf (stderr, fmt, args); va_end (args); } #endif #ifdef WIN32 /* * Return scope-value for a scope-string. */ static int str2scope (const char *p) { if (!stricmp(p, "one")) return LDAP_SCOPE_ONELEVEL; if (!stricmp(p, "onetree")) return LDAP_SCOPE_ONELEVEL; if (!stricmp(p, "base")) return LDAP_SCOPE_BASE; if (!stricmp(p, "sub")) return LDAP_SCOPE_SUBTREE; if (!stricmp( p, "subtree")) return LDAP_SCOPE_SUBTREE; return (-1); } /* * Split 'str' into strings separated by commas. * Note: res[] points into 'str'. */ static char **split_str (char *str) { char **res, *lasts, *s; int i; for (i = 2, s = strchr(str,','); s; i++) s = strchr(++s,','); res = calloc(i, sizeof(char*)); if (!res) return NULL; for (i = 0, s = strtok_r(str, ",", &lasts); s; s = strtok_r(NULL, ",", &lasts), i++) res[i] = s; return res; } /* * Unescape the LDAP-URL components */ static bool unescape_elements (LDAPURLDesc *ludp) { int i; if (ludp->lud_filter) { ludp->lud_filter = curl_unescape(ludp->lud_filter, 0); if (!ludp->lud_filter) return (FALSE); } for (i = 0; ludp->lud_attrs && ludp->lud_attrs[i]; i++) { ludp->lud_attrs[i] = curl_unescape(ludp->lud_attrs[i], 0); if (!ludp->lud_attrs[i]) return (FALSE); } for (i = 0; ludp->lud_exts && ludp->lud_exts[i]; i++) { ludp->lud_exts[i] = curl_unescape(ludp->lud_exts[i], 0); if (!ludp->lud_exts[i]) return (FALSE); } if (ludp->lud_dn) { char *dn = ludp->lud_dn; char *new_dn = curl_unescape(dn, 0); free(dn); ludp->lud_dn = new_dn; if (!new_dn) return (FALSE); } return (TRUE); } /* * Break apart the pieces of an LDAP URL. * Syntax: * ldap://:/???? * * already known from 'conn->host.name'. * already known from 'conn->remote_port'. * extract the rest from 'conn->path+1'. All fields are optional. e.g. * ldap://:/??? yields ludp->lud_dn = "". * * Ref. http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm#2831915 */ static int _ldap_url_parse2 (const struct connectdata *conn, LDAPURLDesc *ludp) { char *p, *q; int i; if (!conn->path || conn->path[0] != '/' || !checkprefix(conn->protostr, conn->data->change.url)) return LDAP_INVALID_SYNTAX; ludp->lud_scope = LDAP_SCOPE_BASE; ludp->lud_port = conn->remote_port; ludp->lud_host = conn->host.name; /* parse DN (Distinguished Name). */ ludp->lud_dn = strdup(conn->path+1); if (!ludp->lud_dn) return LDAP_NO_MEMORY; p = strchr(ludp->lud_dn, '?'); LDAP_TRACE (("DN '%.*s'\n", p ? (size_t)(p-ludp->lud_dn) : strlen(ludp->lud_dn), ludp->lud_dn)); if (!p) goto success; *p++ = '\0'; /* parse attributes. skip "??". */ q = strchr(p, '?'); if (q) *q++ = '\0'; if (*p && *p != '?') { ludp->lud_attrs = split_str(p); if (!ludp->lud_attrs) return LDAP_NO_MEMORY; for (i = 0; ludp->lud_attrs[i]; i++) LDAP_TRACE (("attr[%d] '%s'\n", i, ludp->lud_attrs[i])); } p = q; if (!p) goto success; /* parse scope. skip "??" */ q = strchr(p, '?'); if (q) *q++ = '\0'; if (*p && *p != '?') { ludp->lud_scope = str2scope(p); if (ludp->lud_scope == -1) return LDAP_INVALID_SYNTAX; LDAP_TRACE (("scope %d\n", ludp->lud_scope)); } p = q; if (!p) goto success; /* parse filter */ q = strchr(p, '?'); if (q) *q++ = '\0'; if (!*p) return LDAP_INVALID_SYNTAX; ludp->lud_filter = p; LDAP_TRACE (("filter '%s'\n", ludp->lud_filter)); p = q; if (!p) goto success; /* parse extensions */ ludp->lud_exts = split_str(p); if (!ludp->lud_exts) return LDAP_NO_MEMORY; for (i = 0; ludp->lud_exts[i]; i++) LDAP_TRACE (("exts[%d] '%s'\n", i, ludp->lud_exts[i])); success: if (!unescape_elements(ludp)) return LDAP_NO_MEMORY; return LDAP_SUCCESS; } static int _ldap_url_parse (const struct connectdata *conn, LDAPURLDesc **ludpp) { LDAPURLDesc *ludp = calloc(sizeof(*ludp), 1); int rc; *ludpp = NULL; if (!ludp) return LDAP_NO_MEMORY; rc = _ldap_url_parse2 (conn, ludp); if (rc != LDAP_SUCCESS) { _ldap_free_urldesc(ludp); ludp = NULL; } *ludpp = ludp; return (rc); } static void _ldap_free_urldesc (LDAPURLDesc *ludp) { int i; if (!ludp) return; if (ludp->lud_dn) free(ludp->lud_dn); if (ludp->lud_filter) free(ludp->lud_filter); if (ludp->lud_attrs) { for (i = 0; ludp->lud_attrs[i]; i++) free(ludp->lud_attrs[i]); free(ludp->lud_attrs); } if (ludp->lud_exts) { for (i = 0; ludp->lud_exts[i]; i++) free(ludp->lud_exts[i]); free(ludp->lud_exts); } free (ludp); } #endif /* WIN32 */ #endif /* CURL_DISABLE_LDAP */ criticalmass-1.0.0.orig/curl/lib/ldap.h0000644000175000017500000000231410265631023017201 0ustar danieldaniel#ifndef __LDAP_H #define __LDAP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: ldap.h,v 1.13 2005/02/09 13:06:40 bagder Exp $ ***************************************************************************/ #ifndef CURL_DISABLE_LDAP CURLcode Curl_ldap(struct connectdata *conn, bool *done); #endif #endif /* __LDAP_H */ criticalmass-1.0.0.orig/curl/lib/krb4.c0000644000175000017500000002706510265631023017130 0ustar danieldaniel/* This source code was modified by Martin Hedenfalk for * use in Curl. His latest changes were done 2000-09-18. * * It has since been patched away like a madman by Daniel Stenberg * to make it better applied to curl conditions, and to make * it not use globals, pollute name space and more. This source code awaits a * rewrite to work around the paragraph 2 in the BSD licenses as explained * below. * * Copyright (c) 1995, 1996, 1997, 1998, 1999 Kungliga Tekniska Hgskolan * (Royal Institute of Technology, Stockholm, Sweden). * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * 3. Neither the name of the Institute nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. */ #include "setup.h" #ifndef CURL_DISABLE_FTP #ifdef HAVE_KRB4 #include #ifdef HAVE_NETDB_H #include #endif #include #include #include #ifdef HAVE_UNISTD_H #include /* for getpid() */ #endif #include "urldata.h" #include "base64.h" #include "ftp.h" #include "sendf.h" #include "krb4.h" #include "memory.h" #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif /* The last #include file should be: */ #include "memdebug.h" #define LOCAL_ADDR (&conn->local_addr) #define REMOTE_ADDR conn->ip_addr->ai_addr #define myctladdr LOCAL_ADDR #define hisctladdr REMOTE_ADDR struct krb4_data { des_cblock key; des_key_schedule schedule; char name[ANAME_SZ]; char instance[INST_SZ]; char realm[REALM_SZ]; }; #ifndef HAVE_STRLCPY /* if it ever goes non-static, make it Curl_ prefixed! */ static size_t strlcpy (char *dst, const char *src, size_t dst_sz) { size_t n; char *p; for (p = dst, n = 0; n + 1 < dst_sz && *src != '\0'; ++p, ++src, ++n) *p = *src; *p = '\0'; if (*src == '\0') return n; else return n + strlen (src); } #else size_t strlcpy (char *dst, const char *src, size_t dst_sz); #endif static int krb4_check_prot(void *app_data, int level) { app_data = NULL; /* prevent compiler warning */ if(level == prot_confidential) return -1; return 0; } static int krb4_decode(void *app_data, void *buf, int len, int level, struct connectdata *conn) { MSG_DAT m; int e; struct krb4_data *d = app_data; if(level == prot_safe) e = krb_rd_safe(buf, len, &d->key, (struct sockaddr_in *)REMOTE_ADDR, (struct sockaddr_in *)LOCAL_ADDR, &m); else e = krb_rd_priv(buf, len, d->schedule, &d->key, (struct sockaddr_in *)REMOTE_ADDR, (struct sockaddr_in *)LOCAL_ADDR, &m); if(e) { struct SessionHandle *data = conn->data; infof(data, "krb4_decode: %s\n", krb_get_err_text(e)); return -1; } memmove(buf, m.app_data, m.app_length); return m.app_length; } static int krb4_overhead(void *app_data, int level, int len) { /* no arguments are used, just init them to prevent compiler warnings */ app_data = NULL; level = 0; len = 0; return 31; } static int krb4_encode(void *app_data, void *from, int length, int level, void **to, struct connectdata *conn) { struct krb4_data *d = app_data; *to = malloc(length + 31); if(level == prot_safe) return krb_mk_safe(from, *to, length, &d->key, (struct sockaddr_in *)LOCAL_ADDR, (struct sockaddr_in *)REMOTE_ADDR); else if(level == prot_private) return krb_mk_priv(from, *to, length, d->schedule, &d->key, (struct sockaddr_in *)LOCAL_ADDR, (struct sockaddr_in *)REMOTE_ADDR); else return -1; } static int mk_auth(struct krb4_data *d, KTEXT adat, const char *service, char *host, int checksum) { int ret; CREDENTIALS cred; char sname[SNAME_SZ], inst[INST_SZ], realm[REALM_SZ]; strlcpy(sname, service, sizeof(sname)); strlcpy(inst, krb_get_phost(host), sizeof(inst)); strlcpy(realm, krb_realmofhost(host), sizeof(realm)); ret = krb_mk_req(adat, sname, inst, realm, checksum); if(ret) return ret; strlcpy(sname, service, sizeof(sname)); strlcpy(inst, krb_get_phost(host), sizeof(inst)); strlcpy(realm, krb_realmofhost(host), sizeof(realm)); ret = krb_get_cred(sname, inst, realm, &cred); memmove(&d->key, &cred.session, sizeof(des_cblock)); des_key_sched(&d->key, d->schedule); memset(&cred, 0, sizeof(cred)); return ret; } #ifdef HAVE_KRB_GET_OUR_IP_FOR_REALM int krb_get_our_ip_for_realm(char *, struct in_addr *); #endif static int krb4_auth(void *app_data, struct connectdata *conn) { int ret; char *p; unsigned char *ptr; size_t len; KTEXT_ST adat; MSG_DAT msg_data; int checksum; u_int32_t cs; struct krb4_data *d = app_data; char *host = conn->host.name; ssize_t nread; int l = sizeof(conn->local_addr); struct SessionHandle *data = conn->data; CURLcode result; if(getsockname(conn->sock[FIRSTSOCKET], (struct sockaddr *)LOCAL_ADDR, &l) < 0) perror("getsockname()"); checksum = getpid(); ret = mk_auth(d, &adat, "ftp", host, checksum); if(ret == KDC_PR_UNKNOWN) ret = mk_auth(d, &adat, "rcmd", host, checksum); if(ret) { infof(data, "%s\n", krb_get_err_text(ret)); return AUTH_CONTINUE; } #ifdef HAVE_KRB_GET_OUR_IP_FOR_REALM if (krb_get_config_bool("nat_in_use")) { struct sockaddr_in *localaddr = (struct sockaddr_in *)LOCAL_ADDR; struct in_addr natAddr; if (krb_get_our_ip_for_realm(krb_realmofhost(host), &natAddr) != KSUCCESS && krb_get_our_ip_for_realm(NULL, &natAddr) != KSUCCESS) infof(data, "Can't get address for realm %s\n", krb_realmofhost(host)); else { if (natAddr.s_addr != localaddr->sin_addr.s_addr) { #ifdef HAVE_INET_NTOA_R char ntoa_buf[64]; char *ip = (char *)inet_ntoa_r(natAddr, ntoa_buf, sizeof(ntoa_buf)); #else char *ip = (char *)inet_ntoa(natAddr); #endif infof(data, "Using NAT IP address (%s) for kerberos 4\n", ip); localaddr->sin_addr = natAddr; } } } #endif if(Curl_base64_encode((char *)adat.dat, adat.length, &p) < 1) { Curl_failf(data, "Out of memory base64-encoding"); return AUTH_CONTINUE; } result = Curl_ftpsendf(conn, "ADAT %s", p); free(p); if(result) return -2; if(Curl_GetFTPResponse(&nread, conn, NULL)) return -1; if(data->state.buffer[0] != '2'){ Curl_failf(data, "Server didn't accept auth data"); return AUTH_ERROR; } p = strstr(data->state.buffer, "ADAT="); if(!p) { Curl_failf(data, "Remote host didn't send adat reply"); return AUTH_ERROR; } p += 5; len = Curl_base64_decode(p, &ptr); if(len > sizeof(adat.dat)-1) { free(ptr); len=0; } if(!len || !ptr) { Curl_failf(data, "Failed to decode base64 from server"); return AUTH_ERROR; } memcpy((char *)adat.dat, ptr, len); free(ptr); adat.length = len; ret = krb_rd_safe(adat.dat, adat.length, &d->key, (struct sockaddr_in *)hisctladdr, (struct sockaddr_in *)myctladdr, &msg_data); if(ret) { Curl_failf(data, "Error reading reply from server: %s", krb_get_err_text(ret)); return AUTH_ERROR; } krb_get_int(msg_data.app_data, &cs, 4, 0); if(cs - checksum != 1) { Curl_failf(data, "Bad checksum returned from server"); return AUTH_ERROR; } return AUTH_OK; } struct Curl_sec_client_mech Curl_krb4_client_mech = { "KERBEROS_V4", sizeof(struct krb4_data), NULL, /* init */ krb4_auth, NULL, /* end */ krb4_check_prot, krb4_overhead, krb4_encode, krb4_decode }; CURLcode Curl_krb_kauth(struct connectdata *conn) { des_cblock key; des_key_schedule schedule; KTEXT_ST tkt, tktcopy; char *name; char *p; char passwd[100]; size_t tmp; ssize_t nread; int save; CURLcode result; unsigned char *ptr; save = Curl_set_command_prot(conn, prot_private); result = Curl_ftpsendf(conn, "SITE KAUTH %s", conn->user); if(result) return result; result = Curl_GetFTPResponse(&nread, conn, NULL); if(result) return result; if(conn->data->state.buffer[0] != '3'){ Curl_set_command_prot(conn, save); return CURLE_FTP_WEIRD_SERVER_REPLY; } p = strstr(conn->data->state.buffer, "T="); if(!p) { Curl_failf(conn->data, "Bad reply from server"); Curl_set_command_prot(conn, save); return CURLE_FTP_WEIRD_SERVER_REPLY; } p += 2; tmp = Curl_base64_decode(p, &ptr); if(tmp >= sizeof(tkt.dat)) { free(ptr); tmp=0; } if(!tmp || !ptr) { Curl_failf(conn->data, "Failed to decode base64 in reply.\n"); Curl_set_command_prot(conn, save); return CURLE_FTP_WEIRD_SERVER_REPLY; } memcpy((char *)tkt.dat, ptr, tmp); free(ptr); tkt.length = tmp; tktcopy.length = tkt.length; p = strstr(conn->data->state.buffer, "P="); if(!p) { Curl_failf(conn->data, "Bad reply from server"); Curl_set_command_prot(conn, save); return CURLE_FTP_WEIRD_SERVER_REPLY; } name = p + 2; for(; *p && *p != ' ' && *p != '\r' && *p != '\n'; p++); *p = 0; des_string_to_key (conn->passwd, &key); des_key_sched(&key, schedule); des_pcbc_encrypt((void *)tkt.dat, (void *)tktcopy.dat, tkt.length, schedule, &key, DES_DECRYPT); if (strcmp ((char*)tktcopy.dat + 8, KRB_TICKET_GRANTING_TICKET) != 0) { afs_string_to_key(passwd, krb_realmofhost(conn->host.name), &key); des_key_sched(&key, schedule); des_pcbc_encrypt((void *)tkt.dat, (void *)tktcopy.dat, tkt.length, schedule, &key, DES_DECRYPT); } memset(key, 0, sizeof(key)); memset(schedule, 0, sizeof(schedule)); memset(passwd, 0, sizeof(passwd)); if(Curl_base64_encode((char *)tktcopy.dat, tktcopy.length, &p) < 1) { failf(conn->data, "Out of memory base64-encoding."); Curl_set_command_prot(conn, save); return CURLE_OUT_OF_MEMORY; } memset (tktcopy.dat, 0, tktcopy.length); result = Curl_ftpsendf(conn, "SITE KAUTH %s %s", name, p); free(p); if(result) return result; result = Curl_GetFTPResponse(&nread, conn, NULL); if(result) return result; Curl_set_command_prot(conn, save); return CURLE_OK; } #endif /* HAVE_KRB4 */ #endif /* CURL_DISABLE_FTP */ criticalmass-1.0.0.orig/curl/lib/krb4.h0000644000175000017500000000532610265631023017131 0ustar danieldaniel#ifndef __KRB4_H #define __KRB4_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: krb4.h,v 1.10 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ struct Curl_sec_client_mech { const char *name; size_t size; int (*init)(void *); int (*auth)(void *, struct connectdata *); void (*end)(void *); int (*check_prot)(void *, int); int (*overhead)(void *, int, int); int (*encode)(void *, void*, int, int, void**, struct connectdata *); int (*decode)(void *, void*, int, int, struct connectdata *); }; #define AUTH_OK 0 #define AUTH_CONTINUE 1 #define AUTH_ERROR 2 extern struct Curl_sec_client_mech Curl_krb4_client_mech; CURLcode Curl_krb_kauth(struct connectdata *conn); int Curl_sec_fflush_fd(struct connectdata *conn, int fd); int Curl_sec_fprintf (struct connectdata *, FILE *, const char *, ...); int Curl_sec_getc (struct connectdata *conn, FILE *); int Curl_sec_putc (struct connectdata *conn, int, FILE *); int Curl_sec_read (struct connectdata *conn, int, void *, int); int Curl_sec_read_msg (struct connectdata *conn, char *, int); int Curl_sec_vfprintf(struct connectdata *, FILE *, const char *, va_list); int Curl_sec_fprintf2(struct connectdata *conn, FILE *f, const char *fmt, ...); int Curl_sec_vfprintf2(struct connectdata *conn, FILE *, const char *, va_list); int Curl_sec_write (struct connectdata *conn, int, char *, int); void Curl_sec_end (struct connectdata *); int Curl_sec_login (struct connectdata *); void Curl_sec_prot (int, char **); int Curl_sec_request_prot (struct connectdata *conn, const char *level); void Curl_sec_set_protection_level(struct connectdata *conn); void Curl_sec_status (void); enum protection_level Curl_set_command_prot(struct connectdata *, enum protection_level); #endif criticalmass-1.0.0.orig/curl/lib/multi.c0000644000175000017500000006223310265631023017414 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: multi.c,v 1.68 2005/03/08 22:21:59 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_UNISTD_H #include #endif #include #include "urldata.h" #include "transfer.h" #include "url.h" #include "connect.h" #include "progress.h" #include "memory.h" #include "easyif.h" #include "multiif.h" #include "sendf.h" /* The last #include file should be: */ #include "memdebug.h" struct Curl_message { /* the 'CURLMsg' is the part that is visible to the external user */ struct CURLMsg extmsg; struct Curl_message *next; }; typedef enum { CURLM_STATE_INIT, /* start in this state */ CURLM_STATE_CONNECT, /* resolve/connect has been sent off */ CURLM_STATE_WAITRESOLVE, /* awaiting the resolve to finalize */ CURLM_STATE_WAITCONNECT, /* awaiting the connect to finalize */ CURLM_STATE_PROTOCONNECT, /* completing the protocol-specific connect phase */ CURLM_STATE_DO, /* start send off the request (part 1) */ CURLM_STATE_DOING, /* sending off the request (part 1) */ CURLM_STATE_DO_MORE, /* send off the request (part 2) */ CURLM_STATE_PERFORM, /* transfer data */ CURLM_STATE_DONE, /* post data transfer operation */ CURLM_STATE_COMPLETED, /* operation complete */ CURLM_STATE_LAST /* not a true state, never use this */ } CURLMstate; struct Curl_one_easy { /* first, two fields for the linked list of these */ struct Curl_one_easy *next; struct Curl_one_easy *prev; struct SessionHandle *easy_handle; /* the easy handle for this unit */ struct connectdata *easy_conn; /* the "unit's" connection */ CURLMstate state; /* the handle's state */ CURLcode result; /* previous result */ struct Curl_message *msg; /* A pointer to one single posted message. Cleanup should be done on this pointer NOT on the linked list in Curl_multi. This message will be deleted when this handle is removed from the multi-handle */ int msg_num; /* number of messages left in 'msg' to return */ }; #define CURL_MULTI_HANDLE 0x000bab1e #define GOOD_MULTI_HANDLE(x) ((x)&&(((struct Curl_multi *)x)->type == CURL_MULTI_HANDLE)) #define GOOD_EASY_HANDLE(x) (x) /* This is the struct known as CURLM on the outside */ struct Curl_multi { /* First a simple identifier to easier detect if a user mix up this multi handle with an easy handle. Set this to CURL_MULTI_HANDLE. */ long type; /* We have a linked list with easy handles */ struct Curl_one_easy easy; /* This is the amount of entries in the linked list above. */ int num_easy; int num_msgs; /* total amount of messages in the easy handles */ /* Hostname cache */ struct curl_hash *hostcache; }; /* always use this function to change state, to make debugging easier */ static void multistate(struct Curl_one_easy *easy, CURLMstate state) { #ifdef CURLDEBUG const char *statename[]={ "INIT", "CONNECT", "WAITRESOLVE", "WAITCONNECT", "PROTOCONNECT", "DO", "DOING", "DO_MORE", "PERFORM", "DONE", "COMPLETED", }; CURLMstate oldstate = easy->state; #endif easy->state = state; #ifdef CURLDEBUG infof(easy->easy_handle, "STATE: %s => %s handle %p: \n", statename[oldstate], statename[easy->state], (char *)easy); #endif } CURLM *curl_multi_init(void) { struct Curl_multi *multi; multi = (void *)malloc(sizeof(struct Curl_multi)); if(multi) { memset(multi, 0, sizeof(struct Curl_multi)); multi->type = CURL_MULTI_HANDLE; } else return NULL; multi->hostcache = Curl_mk_dnscache(); if(!multi->hostcache) { /* failure, free mem and bail out */ free(multi); multi = NULL; } return (CURLM *) multi; } CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle) { struct Curl_multi *multi=(struct Curl_multi *)multi_handle; struct Curl_one_easy *easy; /* First, make some basic checks that the CURLM handle is a good handle */ if(!GOOD_MULTI_HANDLE(multi)) return CURLM_BAD_HANDLE; /* Verify that we got a somewhat good easy handle too */ if(!GOOD_EASY_HANDLE(easy_handle)) return CURLM_BAD_EASY_HANDLE; /* Now, time to add an easy handle to the multi stack */ easy = (struct Curl_one_easy *)malloc(sizeof(struct Curl_one_easy)); if(!easy) return CURLM_OUT_OF_MEMORY; /* clean it all first (just to be sure) */ memset(easy, 0, sizeof(struct Curl_one_easy)); /* set the easy handle */ easy->easy_handle = easy_handle; multistate(easy, CURLM_STATE_INIT); /* for multi interface connections, we share DNS cache automaticly */ easy->easy_handle->hostcache = multi->hostcache; /* We add this new entry first in the list. We make our 'next' point to the previous next and our 'prev' point back to the 'first' struct */ easy->next = multi->easy.next; easy->prev = &multi->easy; /* make 'easy' the first node in the chain */ multi->easy.next = easy; /* if there was a next node, make sure its 'prev' pointer links back to the new node */ if(easy->next) easy->next->prev = easy; Curl_easy_addmulti(easy_handle, multi_handle); /* increase the node-counter */ multi->num_easy++; return CURLM_OK; } CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *curl_handle) { struct Curl_multi *multi=(struct Curl_multi *)multi_handle; struct Curl_one_easy *easy; /* First, make some basic checks that the CURLM handle is a good handle */ if(!GOOD_MULTI_HANDLE(multi)) return CURLM_BAD_HANDLE; /* Verify that we got a somewhat good easy handle too */ if(!GOOD_EASY_HANDLE(curl_handle)) return CURLM_BAD_EASY_HANDLE; /* scan through the list and remove the 'curl_handle' */ easy = multi->easy.next; while(easy) { if(easy->easy_handle == (struct SessionHandle *)curl_handle) break; easy=easy->next; } if(easy) { /* If the 'state' is not INIT or COMPLETED, we might need to do something nice to put the easy_handle in a good known state when this returns. */ /* clear out the usage of the shared DNS cache */ easy->easy_handle->hostcache = NULL; Curl_easy_addmulti(easy->easy_handle, NULL); /* clear the association to this multi handle */ /* make the previous node point to our next */ if(easy->prev) easy->prev->next = easy->next; /* make our next point to our previous node */ if(easy->next) easy->next->prev = easy->prev; /* NOTE NOTE NOTE We do not touch the easy handle here! */ if (easy->msg) free(easy->msg); free(easy); multi->num_easy--; /* one less to care about now */ return CURLM_OK; } else return CURLM_BAD_EASY_HANDLE; /* twasn't found */ } CURLMcode curl_multi_fdset(CURLM *multi_handle, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd) { /* Scan through all the easy handles to get the file descriptors set. Some easy handles may not have connected to the remote host yet, and then we must make sure that is done. */ struct Curl_multi *multi=(struct Curl_multi *)multi_handle; struct Curl_one_easy *easy; int this_max_fd=-1; if(!GOOD_MULTI_HANDLE(multi)) return CURLM_BAD_HANDLE; *max_fd = -1; /* so far none! */ easy=multi->easy.next; while(easy) { switch(easy->state) { default: break; case CURLM_STATE_WAITRESOLVE: /* waiting for a resolve to complete */ Curl_resolv_fdset(easy->easy_conn, read_fd_set, write_fd_set, &this_max_fd); if(this_max_fd > *max_fd) *max_fd = this_max_fd; break; case CURLM_STATE_PROTOCONNECT: Curl_protocol_fdset(easy->easy_conn, read_fd_set, write_fd_set, &this_max_fd); if(this_max_fd > *max_fd) *max_fd = this_max_fd; break; case CURLM_STATE_DOING: Curl_doing_fdset(easy->easy_conn, read_fd_set, write_fd_set, &this_max_fd); if(this_max_fd > *max_fd) *max_fd = this_max_fd; break; case CURLM_STATE_WAITCONNECT: case CURLM_STATE_DO_MORE: { /* when we're waiting for a connect, we wait for the socket to become writable */ struct connectdata *conn = easy->easy_conn; curl_socket_t sockfd; if(CURLM_STATE_WAITCONNECT == easy->state) { sockfd = conn->sock[FIRSTSOCKET]; FD_SET(sockfd, write_fd_set); } else { /* When in DO_MORE state, we could be either waiting for us to connect to a remote site, or we could wait for that site to connect to us. It makes a difference in the way: if we connect to the site we wait for the socket to become writable, if the site connects to us we wait for it to become readable */ sockfd = conn->sock[SECONDARYSOCKET]; FD_SET(sockfd, write_fd_set); } if((int)sockfd > *max_fd) *max_fd = (int)sockfd; } break; case CURLM_STATE_PERFORM: /* This should have a set of file descriptors for us to set. */ /* after the transfer is done, go DONE */ Curl_single_fdset(easy->easy_conn, read_fd_set, write_fd_set, exc_fd_set, &this_max_fd); /* remember the maximum file descriptor */ if(this_max_fd > *max_fd) *max_fd = this_max_fd; break; } easy = easy->next; /* check next handle */ } return CURLM_OK; } CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles) { struct Curl_multi *multi=(struct Curl_multi *)multi_handle; struct Curl_one_easy *easy; bool done; CURLMcode result=CURLM_OK; struct Curl_message *msg = NULL; bool connected; bool async; bool protocol_connect; bool dophase_done; *running_handles = 0; /* bump this once for every living handle */ if(!GOOD_MULTI_HANDLE(multi)) return CURLM_BAD_HANDLE; easy=multi->easy.next; while(easy) { do { if (CURLM_STATE_WAITCONNECT <= easy->state && easy->state <= CURLM_STATE_DO && easy->easy_handle->change.url_changed) { char *gotourl; Curl_posttransfer(easy->easy_handle); easy->result = Curl_done(&easy->easy_conn, CURLE_OK); if(CURLE_OK == easy->result) { gotourl = strdup(easy->easy_handle->change.url); if(gotourl) { easy->easy_handle->change.url_changed = FALSE; easy->result = Curl_follow(easy->easy_handle, gotourl, FALSE); if(CURLE_OK == easy->result) multistate(easy, CURLM_STATE_CONNECT); else free(gotourl); } else { easy->result = CURLE_OUT_OF_MEMORY; multistate(easy, CURLM_STATE_COMPLETED); break; } } } easy->easy_handle->change.url_changed = FALSE; switch(easy->state) { case CURLM_STATE_INIT: /* init this transfer. */ easy->result=Curl_pretransfer(easy->easy_handle); if(CURLE_OK == easy->result) { /* after init, go CONNECT */ multistate(easy, CURLM_STATE_CONNECT); result = CURLM_CALL_MULTI_PERFORM; easy->easy_handle->state.used_interface = Curl_if_multi; } break; case CURLM_STATE_CONNECT: /* Connect. We get a connection identifier filled in. */ Curl_pgrsTime(easy->easy_handle, TIMER_STARTSINGLE); easy->result = Curl_connect(easy->easy_handle, &easy->easy_conn, &async, &protocol_connect); if(CURLE_OK == easy->result) { if(async) /* We're now waiting for an asynchronous name lookup */ multistate(easy, CURLM_STATE_WAITRESOLVE); else { /* after the connect has been sent off, go WAITCONNECT unless the protocol connect is already done and we can go directly to DO! */ result = CURLM_CALL_MULTI_PERFORM; if(protocol_connect) multistate(easy, CURLM_STATE_DO); else multistate(easy, CURLM_STATE_WAITCONNECT); } } break; case CURLM_STATE_WAITRESOLVE: /* awaiting an asynch name resolve to complete */ { struct Curl_dns_entry *dns = NULL; /* check if we have the name resolved by now */ easy->result = Curl_is_resolved(easy->easy_conn, &dns); if(dns) { /* Perform the next step in the connection phase, and then move on to the WAITCONNECT state */ easy->result = Curl_async_resolved(easy->easy_conn, &protocol_connect); if(CURLE_OK != easy->result) /* if Curl_async_resolved() returns failure, the connection struct is already freed and gone */ easy->easy_conn = NULL; /* no more connection */ else { /* FIX: what if protocol_connect is TRUE here?! */ multistate(easy, CURLM_STATE_WAITCONNECT); } } if(CURLE_OK != easy->result) { /* failure detected */ Curl_disconnect(easy->easy_conn); /* disconnect properly */ easy->easy_conn = NULL; /* no more connection */ break; } } break; case CURLM_STATE_WAITCONNECT: /* awaiting a completion of an asynch connect */ easy->result = Curl_is_connected(easy->easy_conn, FIRSTSOCKET, &connected); if(connected) easy->result = Curl_protocol_connect(easy->easy_conn, &protocol_connect); if(CURLE_OK != easy->result) { /* failure detected */ Curl_disconnect(easy->easy_conn); /* close the connection */ easy->easy_conn = NULL; /* no more connection */ break; } if(connected) { if(!protocol_connect) { /* We have a TCP connection, but 'protocol_connect' may be false and then we continue to 'STATE_PROTOCONNECT'. If protocol connect is TRUE, we move on to STATE_DO. */ multistate(easy, CURLM_STATE_PROTOCONNECT); } else { /* after the connect has completed, go DO */ multistate(easy, CURLM_STATE_DO); result = CURLM_CALL_MULTI_PERFORM; } } break; case CURLM_STATE_PROTOCONNECT: /* protocol-specific connect phase */ easy->result = Curl_protocol_connecting(easy->easy_conn, &protocol_connect); if(protocol_connect) { /* after the connect has completed, go DO */ multistate(easy, CURLM_STATE_DO); result = CURLM_CALL_MULTI_PERFORM; } else if(easy->result) { /* failure detected */ Curl_posttransfer(easy->easy_handle); Curl_done(&easy->easy_conn, easy->result); Curl_disconnect(easy->easy_conn); /* close the connection */ easy->easy_conn = NULL; /* no more connection */ } break; case CURLM_STATE_DO: /* Perform the protocol's DO action */ easy->result = Curl_do(&easy->easy_conn, &dophase_done); if(CURLE_OK == easy->result) { if(!dophase_done) { /* DO was not completed in one function call, we must continue DOING... */ multistate(easy, CURLM_STATE_DOING); result = CURLM_OK; } /* after DO, go PERFORM... or DO_MORE */ else if(easy->easy_conn->bits.do_more) { /* we're supposed to do more, but we need to sit down, relax and wait a little while first */ multistate(easy, CURLM_STATE_DO_MORE); result = CURLM_OK; } else { /* we're done with the DO, now PERFORM */ easy->result = Curl_readwrite_init(easy->easy_conn); if(CURLE_OK == easy->result) { multistate(easy, CURLM_STATE_PERFORM); result = CURLM_CALL_MULTI_PERFORM; } } } else { /* failure detected */ Curl_posttransfer(easy->easy_handle); Curl_done(&easy->easy_conn, easy->result); Curl_disconnect(easy->easy_conn); /* close the connection */ easy->easy_conn = NULL; /* no more connection */ } break; case CURLM_STATE_DOING: /* we continue DOING until the DO phase is complete */ easy->result = Curl_protocol_doing(easy->easy_conn, &dophase_done); if(CURLE_OK == easy->result) { if(dophase_done) { /* after DO, go PERFORM... or DO_MORE */ if(easy->easy_conn->bits.do_more) { /* we're supposed to do more, but we need to sit down, relax and wait a little while first */ multistate(easy, CURLM_STATE_DO_MORE); result = CURLM_OK; } else { /* we're done with the DO, now PERFORM */ easy->result = Curl_readwrite_init(easy->easy_conn); if(CURLE_OK == easy->result) { multistate(easy, CURLM_STATE_PERFORM); result = CURLM_CALL_MULTI_PERFORM; } } } /* dophase_done */ } else { /* failure detected */ Curl_posttransfer(easy->easy_handle); Curl_done(&easy->easy_conn, easy->result); Curl_disconnect(easy->easy_conn); /* close the connection */ easy->easy_conn = NULL; /* no more connection */ } break; case CURLM_STATE_DO_MORE: /* Ready to do more? */ easy->result = Curl_is_connected(easy->easy_conn, SECONDARYSOCKET, &connected); if(connected) { /* * When we are connected, DO MORE and then go PERFORM */ easy->result = Curl_do_more(easy->easy_conn); if(CURLE_OK == easy->result) easy->result = Curl_readwrite_init(easy->easy_conn); if(CURLE_OK == easy->result) { multistate(easy, CURLM_STATE_PERFORM); result = CURLM_CALL_MULTI_PERFORM; } } break; case CURLM_STATE_PERFORM: /* read/write data if it is ready to do so */ easy->result = Curl_readwrite(easy->easy_conn, &done); if(easy->result) { /* The transfer phase returned error, we mark the connection to get * closed to prevent being re-used. This is becasue we can't * possibly know if the connection is in a good shape or not now. */ easy->easy_conn->bits.close = TRUE; if(CURL_SOCKET_BAD != easy->easy_conn->sock[SECONDARYSOCKET]) { /* if we failed anywhere, we must clean up the secondary socket if it was used */ sclose(easy->easy_conn->sock[SECONDARYSOCKET]); easy->easy_conn->sock[SECONDARYSOCKET]=-1; } Curl_posttransfer(easy->easy_handle); Curl_done(&easy->easy_conn, easy->result); } else if(TRUE == done) { char *newurl; bool retry = Curl_retry_request(easy->easy_conn, &newurl); /* call this even if the readwrite function returned error */ Curl_posttransfer(easy->easy_handle); /* When we follow redirects, must to go back to the CONNECT state */ if(easy->easy_conn->newurl || retry) { if(!retry) { /* if the URL is a follow-location and not just a retried request then figure out the URL here */ newurl = easy->easy_conn->newurl; easy->easy_conn->newurl = NULL; } easy->result = Curl_done(&easy->easy_conn, CURLE_OK); if(easy->result == CURLE_OK) easy->result = Curl_follow(easy->easy_handle, newurl, retry); if(CURLE_OK == easy->result) { multistate(easy, CURLM_STATE_CONNECT); result = CURLM_CALL_MULTI_PERFORM; } else /* Since we "took it", we are in charge of freeing this on failure */ free(newurl); } else { /* after the transfer is done, go DONE */ multistate(easy, CURLM_STATE_DONE); result = CURLM_CALL_MULTI_PERFORM; } } break; case CURLM_STATE_DONE: /* post-transfer command */ easy->result = Curl_done(&easy->easy_conn, CURLE_OK); /* after we have DONE what we're supposed to do, go COMPLETED, and it doesn't matter what the Curl_done() returned! */ multistate(easy, CURLM_STATE_COMPLETED); break; case CURLM_STATE_COMPLETED: /* this is a completed transfer, it is likely to still be connected */ /* This node should be delinked from the list now and we should post an information message that we are complete. */ break; default: return CURLM_INTERNAL_ERROR; } if(CURLM_STATE_COMPLETED != easy->state) { if(CURLE_OK != easy->result) { /* * If an error was returned, and we aren't in completed state now, * then we go to completed and consider this transfer aborted. */ multistate(easy, CURLM_STATE_COMPLETED); } else /* this one still lives! */ (*running_handles)++; } } while (easy->easy_handle->change.url_changed); if ((CURLM_STATE_COMPLETED == easy->state) && !easy->msg) { /* clear out the usage of the shared DNS cache */ easy->easy_handle->hostcache = NULL; /* now add a node to the Curl_message linked list with this info */ msg = (struct Curl_message *)malloc(sizeof(struct Curl_message)); if(!msg) return CURLM_OUT_OF_MEMORY; msg->extmsg.msg = CURLMSG_DONE; msg->extmsg.easy_handle = easy->easy_handle; msg->extmsg.data.result = easy->result; msg->next=NULL; easy->msg = msg; easy->msg_num = 1; /* there is one unread message here */ multi->num_msgs++; /* increase message counter */ } easy = easy->next; /* operate on next handle */ } return result; } /* This is called when an easy handle is cleanup'ed that is part of a multi handle */ void Curl_multi_rmeasy(void *multi_handle, CURL *easy_handle) { curl_multi_remove_handle(multi_handle, easy_handle); } CURLMcode curl_multi_cleanup(CURLM *multi_handle) { struct Curl_multi *multi=(struct Curl_multi *)multi_handle; struct Curl_one_easy *easy; struct Curl_one_easy *nexteasy; if(GOOD_MULTI_HANDLE(multi)) { multi->type = 0; /* not good anymore */ Curl_hash_destroy(multi->hostcache); /* remove all easy handles */ easy = multi->easy.next; while(easy) { nexteasy=easy->next; /* clear out the usage of the shared DNS cache */ easy->easy_handle->hostcache = NULL; Curl_easy_addmulti(easy->easy_handle, NULL); /* clear the association */ if (easy->msg) free(easy->msg); free(easy); easy = nexteasy; } free(multi); return CURLM_OK; } else return CURLM_BAD_HANDLE; } CURLMsg *curl_multi_info_read(CURLM *multi_handle, int *msgs_in_queue) { struct Curl_multi *multi=(struct Curl_multi *)multi_handle; *msgs_in_queue = 0; /* default to none */ if(GOOD_MULTI_HANDLE(multi)) { struct Curl_one_easy *easy; if(!multi->num_msgs) return NULL; /* no messages left to return */ easy=multi->easy.next; while(easy) { if(easy->msg_num) { easy->msg_num--; break; } easy = easy->next; } if(!easy) return NULL; /* this means internal count confusion really */ multi->num_msgs--; *msgs_in_queue = multi->num_msgs; return &easy->msg->extmsg; } else return NULL; } criticalmass-1.0.0.orig/curl/lib/config.h.in0000644000175000017500000003516310265631023020143 0ustar danieldaniel/* lib/config.h.in. Generated from configure.ac by autoheader. */ /* when building libcurl itself */ #undef BUILDING_LIBCURL /* to disable cookies support */ #undef CURL_DISABLE_COOKIES /* to disable cryptographic authentication */ #undef CURL_DISABLE_CRYPTO_AUTH /* to disable DICT */ #undef CURL_DISABLE_DICT /* to disable FILE */ #undef CURL_DISABLE_FILE /* to disable FTP */ #undef CURL_DISABLE_FTP /* to disable GOPHER */ #undef CURL_DISABLE_GOPHER /* to disable HTTP */ #undef CURL_DISABLE_HTTP /* to disable LDAP */ #undef CURL_DISABLE_LDAP /* to disable TELNET */ #undef CURL_DISABLE_TELNET /* to disable verbose strings */ #undef CURL_DISABLE_VERBOSE_STRINGS /* when not building a shared library */ #undef CURL_STATICLIB /* Set to explicitly specify we don't want to use thread-safe functions */ #undef DISABLED_THREADSAFE /* lber dynamic library file */ #undef DL_LBER_FILE /* ldap dynamic library file */ #undef DL_LDAP_FILE /* your Entropy Gathering Daemon socket pathname */ #undef EGD_SOCKET /* Define if you want to enable IPv6 support */ #undef ENABLE_IPV6 /* Define to 1 if you have the header file. */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the header file. */ #undef HAVE_ARPA_INET_H /* Define to 1 if you have the header file. */ #undef HAVE_ASSERT_H /* Define to 1 if you have the `basename' function. */ #undef HAVE_BASENAME /* Define to 1 if you have the `closesocket' function. */ #undef HAVE_CLOSESOCKET /* Define to 1 if you have the `CRYPTO_cleanup_all_ex_data' function. */ #undef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA /* Define to 1 if you have the header file. */ #undef HAVE_CRYPTO_H /* Define to 1 if you have the header file. */ #undef HAVE_DES_H /* disabled non-blocking sockets */ #undef HAVE_DISABLED_NONBLOCKING /* Define to 1 if you have the header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `dlopen' function. */ #undef HAVE_DLOPEN /* Define to 1 if you have the `ENGINE_load_builtin_engines' function. */ #undef HAVE_ENGINE_LOAD_BUILTIN_ENGINES /* Define to 1 if you have the header file. */ #undef HAVE_ERRNO_H /* Define to 1 if you have the header file. */ #undef HAVE_ERR_H /* Define to 1 if you have the header file. */ #undef HAVE_FCNTL_H /* use FIONBIO for non-blocking sockets */ #undef HAVE_FIONBIO /* Define to 1 if you have the `ftruncate' function. */ #undef HAVE_FTRUNCATE /* Define if getaddrinfo exists and works */ #undef HAVE_GETADDRINFO /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `gethostbyaddr' function. */ #undef HAVE_GETHOSTBYADDR /* If you have gethostbyname */ #undef HAVE_GETHOSTBYNAME /* Define to 1 if you have the `gethostbyname_r' function. */ #undef HAVE_GETHOSTBYNAME_R /* gethostbyname_r() takes 3 args */ #undef HAVE_GETHOSTBYNAME_R_3 /* gethostbyname_r() takes 5 args */ #undef HAVE_GETHOSTBYNAME_R_5 /* gethostbyname_r() takes 6 args */ #undef HAVE_GETHOSTBYNAME_R_6 /* Define to 1 if you have the `getpass_r' function. */ #undef HAVE_GETPASS_R /* Define to 1 if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define to 1 if you have the `getrlimit' function. */ #undef HAVE_GETRLIMIT /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* we have a glibc-style strerror_r() */ #undef HAVE_GLIBC_STRERROR_R /* Define to 1 if you have the `gmtime_r' function. */ #undef HAVE_GMTIME_R /* if you have the gssapi libraries */ #undef HAVE_GSSAPI /* if you have the Heimdal gssapi libraries */ #undef HAVE_GSSHEIMDAL /* if you have the MIT gssapi libraries */ #undef HAVE_GSSMIT /* Define to 1 if you have the `idna_strerror' function. */ #undef HAVE_IDNA_STRERROR /* Define to 1 if you have the `idn_free' function. */ #undef HAVE_IDN_FREE /* Define to 1 if you have the header file. */ #undef HAVE_IDN_FREE_H /* Define to 1 if you have the `inet_addr' function. */ #undef HAVE_INET_ADDR /* Define to 1 if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA /* Define to 1 if you have the `inet_ntoa_r' function. */ #undef HAVE_INET_NTOA_R /* inet_ntoa_r() is declared */ #undef HAVE_INET_NTOA_R_DECL /* Define to 1 if you have the `inet_pton' function. */ #undef HAVE_INET_PTON /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* use ioctlsocket() for non-blocking sockets */ #undef HAVE_IOCTLSOCKET /* use Ioctlsocket() for non-blocking sockets */ #undef HAVE_IOCTLSOCKET_CASE /* Define to 1 if you have the header file. */ #undef HAVE_IO_H /* if you have the Kerberos4 libraries (including -ldes) */ #undef HAVE_KRB4 /* Define to 1 if you have the `krb_get_our_ip_for_realm' function. */ #undef HAVE_KRB_GET_OUR_IP_FOR_REALM /* Define to 1 if you have the header file. */ #undef HAVE_KRB_H /* Define to 1 if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define to 1 if you have the header file. */ #undef HAVE_LIBGEN_H /* Define to 1 if you have the `idn' library (-lidn). */ #undef HAVE_LIBIDN /* Define to 1 if you have the `resolv' library (-lresolv). */ #undef HAVE_LIBRESOLV /* Define to 1 if you have the `resolve' library (-lresolve). */ #undef HAVE_LIBRESOLVE /* Define to 1 if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define to 1 if you have the `ssl' library (-lssl). */ #undef HAVE_LIBSSL /* if zlib is available */ #undef HAVE_LIBZ /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* if your compiler supports LL */ #undef HAVE_LL /* Define to 1 if you have the header file. */ #undef HAVE_LOCALE_H /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* if your compiler supports long long */ #undef HAVE_LONGLONG /* Define to 1 if you have the header file. */ #undef HAVE_MALLOC_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_NETDB_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_IN_H /* Define to 1 if you have the header file. */ #undef HAVE_NETINET_TCP_H /* Define to 1 if you have the header file. */ #undef HAVE_NET_IF_H /* Define if NI_WITHSCOPEID exists and works */ #undef HAVE_NI_WITHSCOPEID /* we have no strerror_r() proto */ #undef HAVE_NO_STRERROR_R_DECL /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_CRYPTO_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_ENGINE_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_ERR_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_PEM_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_PKCS12_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_RSA_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_SSL_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_X509_H /* use O_NONBLOCK for non-blocking sockets */ #undef HAVE_O_NONBLOCK /* Define to 1 if you have the header file. */ #undef HAVE_PEM_H /* Define to 1 if you have the `perror' function. */ #undef HAVE_PERROR /* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE /* Define to 1 if you have the `poll' function. */ #undef HAVE_POLL /* If you have a fine poll */ #undef HAVE_POLL_FINE /* we have a POSIX-style strerror_r() */ #undef HAVE_POSIX_STRERROR_R /* Define to 1 if you have the header file. */ #undef HAVE_PWD_H /* Define to 1 if you have the `RAND_egd' function. */ #undef HAVE_RAND_EGD /* Define to 1 if you have the `RAND_screen' function. */ #undef HAVE_RAND_SCREEN /* Define to 1 if you have the `RAND_status' function. */ #undef HAVE_RAND_STATUS /* Define to 1 if you have the header file. */ #undef HAVE_RSA_H /* Define to 1 if you have the `select' function. */ #undef HAVE_SELECT /* Define to 1 if you have the header file. */ #undef HAVE_SETJMP_H /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `setrlimit' function. */ #undef HAVE_SETRLIMIT /* Define to 1 if you have the header file. */ #undef HAVE_SGTTY_H /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `siginterrupt' function. */ #undef HAVE_SIGINTERRUPT /* Define to 1 if you have the `signal' function. */ #undef HAVE_SIGNAL /* If you have sigsetjmp */ #undef HAVE_SIGSETJMP /* Define to 1 if you have the `socket' function. */ #undef HAVE_SOCKET /* use SO_NONBLOCK for non-blocking sockets */ #undef HAVE_SO_NONBLOCK /* Define this if you have the SPNEGO library fbopenssl */ #undef HAVE_SPNEGO /* Define to 1 if you have the header file. */ #undef HAVE_SSL_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strcmpi' function. */ #undef HAVE_STRCMPI /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the `strerror_r' function. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the `stricmp' function. */ #undef HAVE_STRICMP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strlcat' function. */ #undef HAVE_STRLCAT /* Define to 1 if you have the `strlcpy' function. */ #undef HAVE_STRLCPY /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtok_r' function. */ #undef HAVE_STRTOK_R /* Define to 1 if you have the `strtoll' function. */ #undef HAVE_STRTOLL /* if struct sockaddr_storage is defined */ #undef HAVE_STRUCT_SOCKADDR_STORAGE /* Define to 1 if you have the header file. */ #undef HAVE_SYS_IOCTL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_POLL_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_RESOURCE_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOCKIO_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_UTIME_H /* Define to 1 if you have the header file. */ #undef HAVE_TERMIOS_H /* Define to 1 if you have the header file. */ #undef HAVE_TERMIO_H /* Define to 1 if you have the header file. */ #undef HAVE_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_TLD_H /* Define to 1 if you have the `tld_strerror' function. */ #undef HAVE_TLD_STRERROR /* Define to 1 if you have the `uname' function. */ #undef HAVE_UNAME /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `utime' function. */ #undef HAVE_UTIME /* Define to 1 if you have the header file. */ #undef HAVE_UTIME_H /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK2_H /* Define to 1 if you have the header file. */ #undef HAVE_WINSOCK_H /* Define this symbol if your OS supports changing the contents of argv */ #undef HAVE_WRITABLE_ARGV /* Define to 1 if you have the header file. */ #undef HAVE_X509_H /* if you have the zlib.h header file */ #undef HAVE_ZLIB_H /* If you lack a fine basename() prototype */ #undef NEED_BASENAME_PROTO /* need REENTRANT defined */ #undef NEED_REENTRANT /* cpu-machine-OS */ #undef OS /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the version of this package. */ #undef PACKAGE_VERSION /* a suitable file to read random data from */ #undef RANDOM_FILE /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define to the type of arg 1 for `select'. */ #undef SELECT_TYPE_ARG1 /* Define to the type of args 2, 3 and 4 for `select'. */ #undef SELECT_TYPE_ARG234 /* Define to the type of arg 5 for `select'. */ #undef SELECT_TYPE_ARG5 /* The size of a `curl_off_t', as computed by sizeof. */ #undef SIZEOF_CURL_OFF_T /* The size of a `long', as computed by sizeof. */ #undef SIZEOF_LONG /* The size of a `size_t', as computed by sizeof. */ #undef SIZEOF_SIZE_T /* The size of a `time_t', as computed by sizeof. */ #undef SIZEOF_TIME_T /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Define if you want to enable ares support */ #undef USE_ARES /* if GnuTLS is enabled */ #undef USE_GNUTLS /* If you want to build curl with the built-in manual */ #undef USE_MANUAL /* if OpenSSL is in use */ #undef USE_OPENSSL /* if SSL is enabled */ #undef USE_SSLEAY /* to enable SSPI support */ #undef USE_WINDOWS_SSPI /* Version number of package */ #undef VERSION /* Define to 1 if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* define this if you need it to compile thread-safe code */ #undef _THREAD_SAFE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* type to use in place of in_addr_t if not defined */ #undef in_addr_t /* Define to `unsigned' if does not define. */ #undef size_t /* type to use in place of socklen_t if not defined */ #undef socklen_t /* the signed version of size_t */ #undef ssize_t criticalmass-1.0.0.orig/curl/lib/config-amigaos.h0000644000175000017500000000400210265631023021140 0ustar danieldaniel #ifndef LIBCURL_CONFIG_AMIGAOS_H #define LIBCURL_CONFIG_AMIGAOS_H #define HAVE_ARPA_INET_H 1 #define HAVE_GETHOSTBYADDR 1 #define HAVE_INET_ADDR 1 #define HAVE_INET_NTOA 1 #define HAVE_INTTYPES_H 1 #define HAVE_IOCTLSOCKET_CASE 1 #define HAVE_LIBCRYPTO 1 #define HAVE_LIBSSL 1 #define HAVE_LIBZ 1 #define HAVE_LONGLONG 1 #define HAVE_MALLOC_H 1 #define HAVE_MEMORY_H 1 #define HAVE_NETDB_H 1 #define HAVE_NETINET_IN_H 1 #define HAVE_NET_IF_H 1 #define HAVE_OPENSSL_CRYPTO_H 1 #define HAVE_OPENSSL_ERR_H 1 #define HAVE_OPENSSL_PEM_H 1 #define HAVE_OPENSSL_RSA_H 1 #define HAVE_OPENSSL_SSL_H 1 #define HAVE_OPENSSL_X509_H 1 #define HAVE_PERROR 1 #define HAVE_PWD_H 1 #define HAVE_RAND_EGD 1 #define HAVE_RAND_STATUS 1 #define HAVE_SELECT 1 #define HAVE_SETJMP_H 1 #define HAVE_SGTTY_H 1 #define HAVE_SIGNAL 1 #define HAVE_SOCKET 1 #define HAVE_STRCASECMP 1 #define HAVE_STRDUP 1 #define HAVE_STRFTIME 1 #define HAVE_STRICMP 1 #define HAVE_STRINGS_H 1 #define HAVE_STRING_H 1 #define HAVE_STRSTR 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_SOCKET_H 1 #define HAVE_SYS_SOCKIO_H 1 #define HAVE_SYS_STAT_H 1 #define HAVE_SYS_TIME_H 1 #define HAVE_SYS_TYPES_H 1 #define HAVE_TERMIOS_H 1 #define HAVE_TERMIO_H 1 #define HAVE_TIME_H 1 #define HAVE_UNAME 1 #define HAVE_UNISTD_H 1 #define HAVE_UTIME 1 #define HAVE_UTIME_H 1 #define HAVE_WRITABLE_ARGV 1 #define HAVE_ZLIB_H 1 #define USE_OPENSSL 1 #define USE_SSLEAY 1 #define CURL_DISABLE_LDAP 1 #define OS "AmigaOS" #define PACKAGE "curl" #define PACKAGE_BUGREPORT "curl-bug@haxx.se" #define PACKAGE_NAME "curl" #define PACKAGE_STRING "curl -" #define PACKAGE_TARNAME "curl" #define PACKAGE_VERSION "-" #define CURL_CA_BUNDLE "s:curl-ca-bundle.crt" #define RETSIGTYPE void #define SELECT_TYPE_ARG1 int #define SELECT_TYPE_ARG234 (fd_set *) #define SELECT_TYPE_ARG5 (struct timeval *) #define SIZEOF_CURL_OFF_T 4 #define STDC_HEADERS 1 #define TIME_WITH_SYS_TIME 1 #define in_addr_t int #define socklen_t int #ifndef O_RDONLY # define O_RDONLY 0x0000 #endif #endif /* LIBCURL_CONFIG_AMIGAOS_H */ criticalmass-1.0.0.orig/curl/lib/formdata.c0000644000175000017500000013334710265631023020064 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: formdata.c,v 1.88 2005/05/02 14:33:07 bagder Exp $ ***************************************************************************/ /* Debug the form generator stand-alone by compiling this source file with: gcc -DHAVE_CONFIG_H -I../ -g -D_FORM_DEBUG -o formdata -I../include formdata.c strequal.c run the 'formdata' executable the output should end with: All Tests seem to have worked ... and the following parts should be there: Content-Disposition: form-data; name="simple_COPYCONTENTS" value for simple COPYCONTENTS Content-Disposition: form-data; name="COPYCONTENTS_+_CONTENTTYPE" Content-Type: image/gif value for COPYCONTENTS + CONTENTTYPE Content-Disposition: form-data; name="PRNAME_+_NAMELENGTH_+_COPYNAME_+_CONTENTSLENGTH" vlue for PTRNAME + NAMELENGTH + COPYNAME + CONTENTSLENGTH (or you might see P^@RNAME and v^@lue at the start) Content-Disposition: form-data; name="simple_PTRCONTENTS" value for simple PTRCONTENTS Content-Disposition: form-data; name="PTRCONTENTS_+_CONTENTSLENGTH" vlue for PTRCONTENTS + CONTENTSLENGTH (or you might see v^@lue at the start) Content-Disposition: form-data; name="PTRCONTENTS_+_CONTENTSLENGTH_+_CONTENTTYPE" Content-Type: text/plain vlue for PTRCOTNENTS + CONTENTSLENGTH + CONTENTTYPE (or you might see v^@lue at the start) Content-Disposition: form-data; name="FILE1_+_CONTENTTYPE"; filename="inet_ntoa_r.h" Content-Type: text/html ... Content-Disposition: form-data; name="FILE1_+_FILE2" Content-Type: multipart/mixed, boundary=curlz1s0dkticx49MV1KGcYP5cvfSsz ... Content-Disposition: attachment; filename="inet_ntoa_r.h" Content-Type: text/plain ... Content-Disposition: attachment; filename="Makefile.b32.resp" Content-Type: text/plain ... Content-Disposition: form-data; name="FILE1_+_FILE2_+_FILE3" Content-Type: multipart/mixed, boundary=curlirkYPmPwu6FrJ1vJ1u1BmtIufh1 ... Content-Disposition: attachment; filename="inet_ntoa_r.h" Content-Type: text/plain ... Content-Disposition: attachment; filename="Makefile.b32.resp" Content-Type: text/plain ... Content-Disposition: attachment; filename="inet_ntoa_r.h" Content-Type: text/plain ... Content-Disposition: form-data; name="ARRAY: FILE1_+_FILE2_+_FILE3" Content-Type: multipart/mixed, boundary=curlirkYPmPwu6FrJ1vJ1u1BmtIufh1 ... Content-Disposition: attachment; filename="inet_ntoa_r.h" Content-Type: text/plain ... Content-Disposition: attachment; filename="Makefile.b32.resp" Content-Type: text/plain ... Content-Disposition: attachment; filename="inet_ntoa_r.h" Content-Type: text/plain ... Content-Disposition: form-data; name="FILECONTENT" ... */ #include "setup.h" #include /* Length of the random boundary string. */ #define BOUNDARY_LENGTH 40 #ifndef CURL_DISABLE_HTTP #include #include #include #include #include #ifdef HAVE_SYS_STAT_H #include #endif #if defined(HAVE_LIBGEN_H) && defined(HAVE_BASENAME) #include #endif #include "formdata.h" #include "strequal.h" #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" #if defined(HAVE_BASENAME) && defined(NEED_BASENAME_PROTO) /* This system has a basename() but no prototype for it! */ char *basename(char *path); #endif /* What kind of Content-Type to use on un-specified files with unrecognized extensions. */ #define HTTPPOST_CONTENTTYPE_DEFAULT "application/octet-stream" #define FORM_FILE_SEPARATOR ',' #define FORM_TYPE_SEPARATOR ';' /*************************************************************************** * * AddHttpPost() * * Adds a HttpPost structure to the list, if parent_post is given becomes * a subpost of parent_post instead of a direct list element. * * Returns newly allocated HttpPost on success and NULL if malloc failed. * ***************************************************************************/ static struct curl_httppost * AddHttpPost(char * name, size_t namelength, char * value, size_t contentslength, char * buffer, size_t bufferlength, char *contenttype, long flags, struct curl_slist* contentHeader, char *showfilename, struct curl_httppost *parent_post, struct curl_httppost **httppost, struct curl_httppost **last_post) { struct curl_httppost *post; post = (struct curl_httppost *)calloc(sizeof(struct curl_httppost), 1); if(post) { post->name = name; post->namelength = (long)(name?(namelength?namelength:strlen(name)):0); post->contents = value; post->contentslength = (long)contentslength; post->buffer = buffer; post->bufferlength = (long)bufferlength; post->contenttype = contenttype; post->contentheader = contentHeader; post->showfilename = showfilename; post->flags = flags; } else return NULL; if (parent_post) { /* now, point our 'more' to the original 'more' */ post->more = parent_post->more; /* then move the original 'more' to point to ourselves */ parent_post->more = post; } else { /* make the previous point to this */ if(*last_post) (*last_post)->next = post; else (*httppost) = post; (*last_post) = post; } return post; } /*************************************************************************** * * AddFormInfo() * * Adds a FormInfo structure to the list presented by parent_form_info. * * Returns newly allocated FormInfo on success and NULL if malloc failed/ * parent_form_info is NULL. * ***************************************************************************/ static FormInfo * AddFormInfo(char *value, char *contenttype, FormInfo *parent_form_info) { FormInfo *form_info; form_info = (FormInfo *)malloc(sizeof(FormInfo)); if(form_info) { memset(form_info, 0, sizeof(FormInfo)); if (value) form_info->value = value; if (contenttype) form_info->contenttype = contenttype; form_info->flags = HTTPPOST_FILENAME; } else return NULL; if (parent_form_info) { /* now, point our 'more' to the original 'more' */ form_info->more = parent_form_info->more; /* then move the original 'more' to point to ourselves */ parent_form_info->more = form_info; } else return NULL; return form_info; } /*************************************************************************** * * ContentTypeForFilename() * * Provides content type for filename if one of the known types (else * (either the prevtype or the default is returned). * * Returns some valid contenttype for filename. * ***************************************************************************/ static const char * ContentTypeForFilename (const char *filename, const char *prevtype) { const char *contenttype = NULL; unsigned int i; /* * No type was specified, we scan through a few well-known * extensions and pick the first we match! */ struct ContentType { const char *extension; const char *type; }; static const struct ContentType ctts[]={ {".gif", "image/gif"}, {".jpg", "image/jpeg"}, {".jpeg", "image/jpeg"}, {".txt", "text/plain"}, {".html", "text/html"} }; if(prevtype) /* default to the previously set/used! */ contenttype = prevtype; else /* It seems RFC1867 defines no Content-Type to default to text/plain so we don't actually need to set this: */ contenttype = HTTPPOST_CONTENTTYPE_DEFAULT; for(i=0; i= strlen(ctts[i].extension)) { if(strequal(filename + strlen(filename) - strlen(ctts[i].extension), ctts[i].extension)) { contenttype = ctts[i].type; break; } } } /* we have a contenttype by now */ return contenttype; } /*************************************************************************** * * memdup() * * Copies the 'source' data to a newly allocated buffer buffer (that is * returned). Uses buffer_length if not null, else uses strlen to determine * the length of the buffer to be copied * * Returns the new pointer or NULL on failure. * ***************************************************************************/ static char *memdup(const char *src, size_t buffer_length) { size_t length; bool add = FALSE; char *buffer; if (buffer_length) length = buffer_length; else { length = strlen(src); add = TRUE; } buffer = (char*)malloc(length+add); if (!buffer) return NULL; /* fail */ memcpy(buffer, src, length); /* if length unknown do null termination */ if (add) buffer[length] = '\0'; return buffer; } /*************************************************************************** * * FormAdd() * * Stores a formpost parameter and builds the appropriate linked list. * * Has two principal functionalities: using files and byte arrays as * post parts. Byte arrays are either copied or just the pointer is stored * (as the user requests) while for files only the filename and not the * content is stored. * * While you may have only one byte array for each name, multiple filenames * are allowed (and because of this feature CURLFORM_END is needed after * using CURLFORM_FILE). * * Examples: * * Simple name/value pair with copied contents: * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name", * CURLFORM_COPYCONTENTS, "value", CURLFORM_END); * * name/value pair where only the content pointer is remembered: * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name", * CURLFORM_PTRCONTENTS, ptr, CURLFORM_CONTENTSLENGTH, 10, CURLFORM_END); * (if CURLFORM_CONTENTSLENGTH is missing strlen () is used) * * storing a filename (CONTENTTYPE is optional!): * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name", * CURLFORM_FILE, "filename1", CURLFORM_CONTENTTYPE, "plain/text", * CURLFORM_END); * * storing multiple filenames: * curl_formadd (&post, &last, CURLFORM_COPYNAME, "name", * CURLFORM_FILE, "filename1", CURLFORM_FILE, "filename2", CURLFORM_END); * * Returns: * CURL_FORMADD_OK on success * CURL_FORMADD_MEMORY if the FormInfo allocation fails * CURL_FORMADD_OPTION_TWICE if one option is given twice for one Form * CURL_FORMADD_NULL if a null pointer was given for a char * CURL_FORMADD_MEMORY if the allocation of a FormInfo struct failed * CURL_FORMADD_UNKNOWN_OPTION if an unknown option was used * CURL_FORMADD_INCOMPLETE if the some FormInfo is not complete (or an error) * CURL_FORMADD_MEMORY if a HttpPost struct cannot be allocated * CURL_FORMADD_MEMORY if some allocation for string copying failed. * CURL_FORMADD_ILLEGAL_ARRAY if an illegal option is used in an array * ***************************************************************************/ static CURLFORMcode FormAdd(struct curl_httppost **httppost, struct curl_httppost **last_post, va_list params) { FormInfo *first_form, *current_form, *form = NULL; CURLFORMcode return_value = CURL_FORMADD_OK; const char *prevtype = NULL; struct curl_httppost *post = NULL; CURLformoption option; struct curl_forms *forms = NULL; char *array_value=NULL; /* value read from an array */ /* This is a state variable, that if TRUE means that we're parsing an array that we got passed to us. If FALSE we're parsing the input va_list arguments. */ bool array_state = FALSE; /* * We need to allocate the first struct to fill in. */ first_form = (FormInfo *)calloc(sizeof(struct FormInfo), 1); if(!first_form) return CURL_FORMADD_MEMORY; current_form = first_form; /* * Loop through all the options set. Break if we have an error to report. */ while (return_value == CURL_FORMADD_OK) { /* first see if we have more parts of the array param */ if ( array_state ) { /* get the upcoming option from the given array */ option = forms->option; array_value = (char *)forms->value; forms++; /* advance this to next entry */ if (CURLFORM_END == option) { /* end of array state */ array_state = FALSE; continue; } } else { /* This is not array-state, get next option */ option = va_arg(params, CURLformoption); if (CURLFORM_END == option) break; } switch (option) { case CURLFORM_ARRAY: if(array_state) /* we don't support an array from within an array */ return_value = CURL_FORMADD_ILLEGAL_ARRAY; else { forms = va_arg(params, struct curl_forms *); if (forms) array_state = TRUE; else return_value = CURL_FORMADD_NULL; } break; /* * Set the Name property. */ case CURLFORM_PTRNAME: current_form->flags |= HTTPPOST_PTRNAME; /* fall through */ case CURLFORM_COPYNAME: if (current_form->name) return_value = CURL_FORMADD_OPTION_TWICE; else { char *name = array_state? array_value:va_arg(params, char *); if (name) current_form->name = name; /* store for the moment */ else return_value = CURL_FORMADD_NULL; } break; case CURLFORM_NAMELENGTH: if (current_form->namelength) return_value = CURL_FORMADD_OPTION_TWICE; else current_form->namelength = array_state?(long)array_value:(long)va_arg(params, long); break; /* * Set the contents property. */ case CURLFORM_PTRCONTENTS: current_form->flags |= HTTPPOST_PTRCONTENTS; /* fall through */ case CURLFORM_COPYCONTENTS: if (current_form->value) return_value = CURL_FORMADD_OPTION_TWICE; else { char *value = array_state?array_value:va_arg(params, char *); if (value) current_form->value = value; /* store for the moment */ else return_value = CURL_FORMADD_NULL; } break; case CURLFORM_CONTENTSLENGTH: if (current_form->contentslength) return_value = CURL_FORMADD_OPTION_TWICE; else current_form->contentslength = array_state?(long)array_value:va_arg(params, long); break; /* Get contents from a given file name */ case CURLFORM_FILECONTENT: if (current_form->flags != 0) return_value = CURL_FORMADD_OPTION_TWICE; else { char *filename = array_state? array_value:va_arg(params, char *); if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; else { current_form->flags |= HTTPPOST_READFILE; current_form->value_alloc = TRUE; } } else return_value = CURL_FORMADD_NULL; } break; /* We upload a file */ case CURLFORM_FILE: { char *filename = array_state?array_value: va_arg(params, char *); if (current_form->value) { if (current_form->flags & HTTPPOST_FILENAME) { if (filename) { if (!(current_form = AddFormInfo(strdup(filename), NULL, current_form))) return_value = CURL_FORMADD_MEMORY; } else return_value = CURL_FORMADD_NULL; } else return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; else { current_form->flags |= HTTPPOST_FILENAME; current_form->value_alloc = TRUE; } } else return_value = CURL_FORMADD_NULL; } break; } case CURLFORM_BUFFER: { char *filename = array_state?array_value: va_arg(params, char *); if (current_form->value) { if (current_form->flags & HTTPPOST_BUFFER) { if (filename) { if (!(current_form = AddFormInfo(strdup(filename), NULL, current_form))) return_value = CURL_FORMADD_MEMORY; } else return_value = CURL_FORMADD_NULL; } else return_value = CURL_FORMADD_OPTION_TWICE; } else { if (filename) { current_form->value = strdup(filename); if(!current_form->value) return_value = CURL_FORMADD_MEMORY; } else return_value = CURL_FORMADD_NULL; current_form->flags |= HTTPPOST_BUFFER; } break; } case CURLFORM_BUFFERPTR: current_form->flags |= HTTPPOST_PTRBUFFER; if (current_form->buffer) return_value = CURL_FORMADD_OPTION_TWICE; else { char *buffer = array_state?array_value:va_arg(params, char *); if (buffer) current_form->buffer = buffer; /* store for the moment */ else return_value = CURL_FORMADD_NULL; } break; case CURLFORM_BUFFERLENGTH: if (current_form->bufferlength) return_value = CURL_FORMADD_OPTION_TWICE; else current_form->bufferlength = array_state?(long)array_value:va_arg(params, long); break; case CURLFORM_CONTENTTYPE: { char *contenttype = array_state?array_value:va_arg(params, char *); if (current_form->contenttype) { if (current_form->flags & HTTPPOST_FILENAME) { if (contenttype) { if (!(current_form = AddFormInfo(NULL, strdup(contenttype), current_form))) return_value = CURL_FORMADD_MEMORY; } else return_value = CURL_FORMADD_NULL; } else return_value = CURL_FORMADD_OPTION_TWICE; } else { if (contenttype) { current_form->contenttype = strdup(contenttype); if(!current_form->contenttype) return_value = CURL_FORMADD_MEMORY; else current_form->contenttype_alloc = TRUE; } else return_value = CURL_FORMADD_NULL; } break; } case CURLFORM_CONTENTHEADER: { /* this "cast increases required alignment of target type" but we consider it OK anyway */ struct curl_slist* list = array_state? (struct curl_slist*)array_value: va_arg(params, struct curl_slist*); if( current_form->contentheader ) return_value = CURL_FORMADD_OPTION_TWICE; else current_form->contentheader = list; break; } case CURLFORM_FILENAME: { char *filename = array_state?array_value: va_arg(params, char *); if( current_form->showfilename ) return_value = CURL_FORMADD_OPTION_TWICE; else { current_form->showfilename = strdup(filename); if(!current_form->showfilename) return_value = CURL_FORMADD_MEMORY; else current_form->showfilename_alloc = TRUE; } break; } default: return_value = CURL_FORMADD_UNKNOWN_OPTION; } } if(CURL_FORMADD_OK == return_value) { /* go through the list, check for copleteness and if everything is * alright add the HttpPost item otherwise set return_value accordingly */ post = NULL; for(form = first_form; form != NULL; form = form->more) { if ( ((!form->name || !form->value) && !post) || ( (form->contentslength) && (form->flags & HTTPPOST_FILENAME) ) || ( (form->flags & HTTPPOST_FILENAME) && (form->flags & HTTPPOST_PTRCONTENTS) ) || ( (!form->buffer) && (form->flags & HTTPPOST_BUFFER) && (form->flags & HTTPPOST_PTRBUFFER) ) || ( (form->flags & HTTPPOST_READFILE) && (form->flags & HTTPPOST_PTRCONTENTS) ) ) { return_value = CURL_FORMADD_INCOMPLETE; break; } else { if ( ((form->flags & HTTPPOST_FILENAME) || (form->flags & HTTPPOST_BUFFER)) && !form->contenttype ) { /* our contenttype is missing */ form->contenttype = strdup(ContentTypeForFilename(form->value, prevtype)); if(!form->contenttype) { return_value = CURL_FORMADD_MEMORY; break; } form->contenttype_alloc = TRUE; } if ( !(form->flags & HTTPPOST_PTRNAME) && (form == first_form) ) { /* copy name (without strdup; possibly contains null characters) */ form->name = memdup(form->name, form->namelength); if (!form->name) { return_value = CURL_FORMADD_MEMORY; break; } form->name_alloc = TRUE; } if ( !(form->flags & HTTPPOST_FILENAME) && !(form->flags & HTTPPOST_READFILE) && !(form->flags & HTTPPOST_PTRCONTENTS) && !(form->flags & HTTPPOST_PTRBUFFER) ) { /* copy value (without strdup; possibly contains null characters) */ form->value = memdup(form->value, form->contentslength); if (!form->value) { return_value = CURL_FORMADD_MEMORY; break; } form->value_alloc = TRUE; } post = AddHttpPost(form->name, form->namelength, form->value, form->contentslength, form->buffer, form->bufferlength, form->contenttype, form->flags, form->contentheader, form->showfilename, post, httppost, last_post); if(!post) { return_value = CURL_FORMADD_MEMORY; break; } if (form->contenttype) prevtype = form->contenttype; } } } if(return_value) { /* we return on error, free possibly allocated fields */ if(!form) form = current_form; if(form) { if(form->name_alloc) free(form->name); if(form->value_alloc) free(form->value); if(form->contenttype_alloc) free(form->contenttype); if(form->showfilename_alloc) free(form->showfilename); } } /* always delete the allocated memory before returning */ form = first_form; while (form != NULL) { FormInfo *delete_form; delete_form = form; form = form->more; free (delete_form); } return return_value; } /* * curl_formadd() is a public API to add a section to the multipart formpost. */ CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post, ...) { va_list arg; CURLFORMcode result; va_start(arg, last_post); result = FormAdd(httppost, last_post, arg); va_end(arg); return result; } /* * AddFormData() adds a chunk of data to the FormData linked list. * * size is incremented by the chunk length, unless it is NULL */ static CURLcode AddFormData(struct FormData **formp, enum formtype type, const void *line, size_t length, curl_off_t *size) { struct FormData *newform = (struct FormData *) malloc(sizeof(struct FormData)); if (!newform) return CURLE_OUT_OF_MEMORY; newform->next = NULL; /* we make it easier for plain strings: */ if(!length) length = strlen((char *)line); newform->line = (char *)malloc(length+1); if (!newform->line) { free(newform); return CURLE_OUT_OF_MEMORY; } memcpy(newform->line, line, length); newform->length = length; newform->line[length]=0; /* zero terminate for easier debugging */ newform->type = type; if(*formp) { (*formp)->next = newform; *formp = newform; } else *formp = newform; if (size) { if(type == FORM_DATA) *size += length; else { /* Since this is a file to be uploaded here, add the size of the actual file */ if(!strequal("-", newform->line)) { struct_stat file; if(!stat(newform->line, &file)) { *size += file.st_size; } } } } return CURLE_OK; } /* * AddFormDataf() adds printf()-style formatted data to the formdata chain. */ static CURLcode AddFormDataf(struct FormData **formp, curl_off_t *size, const char *fmt, ...) { char s[4096]; va_list ap; va_start(ap, fmt); vsnprintf(s, sizeof(s), fmt, ap); va_end(ap); return AddFormData(formp, FORM_DATA, s, 0, size); } /* * Curl_formclean() is used from http.c, this cleans a built FormData linked * list */ void Curl_formclean(struct FormData *form) { struct FormData *next; if(!form) return; do { next=form->next; /* the following form line */ free(form->line); /* free the line */ free(form); /* free the struct */ } while((form=next)); /* continue */ } /* * curl_formfree() is an external function to free up a whole form post * chain */ void curl_formfree(struct curl_httppost *form) { struct curl_httppost *next; if(!form) /* no form to free, just get out of this */ return; do { next=form->next; /* the following form line */ /* recurse to sub-contents */ if(form->more) curl_formfree(form->more); if( !(form->flags & HTTPPOST_PTRNAME) && form->name) free(form->name); /* free the name */ if( !(form->flags & HTTPPOST_PTRCONTENTS) && form->contents) free(form->contents); /* free the contents */ if(form->contenttype) free(form->contenttype); /* free the content type */ if(form->showfilename) free(form->showfilename); /* free the faked file name */ free(form); /* free the struct */ } while((form=next)); /* continue */ } #ifndef HAVE_BASENAME /* (Quote from The Open Group Base Specifications Issue 6 IEEE Std 1003.1, 2004 Edition) The basename() function shall take the pathname pointed to by path and return a pointer to the final component of the pathname, deleting any trailing '/' characters. If the string pointed to by path consists entirely of the '/' character, basename() shall return a pointer to the string "/". If the string pointed to by path is exactly "//", it is implementation-defined whether '/' or "//" is returned. If path is a null pointer or points to an empty string, basename() shall return a pointer to the string ".". The basename() function may modify the string pointed to by path, and may return a pointer to static storage that may then be overwritten by a subsequent call to basename(). The basename() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe. */ static char *basename(char *path) { /* Ignore all the details above for now and make a quick and simple implementaion here */ char *s1; char *s2; s1=strrchr(path, '/'); s2=strrchr(path, '\\'); if(s1 && s2) { path = (s1 > s2? s1 : s2)+1; } else if(s1) path = s1 + 1; else if(s2) path = s2 + 1; return path; } #endif static char *strippath(char *fullfile) { char *filename; char *base; filename = strdup(fullfile); /* duplicate since basename() may ruin the buffer it works on */ if(!filename) return NULL; base = strdup(basename(filename)); free(filename); /* free temporary buffer */ return base; /* returns an allocated string! */ } /* * Curl_getFormData() converts a linked list of "meta data" into a complete * (possibly huge) multipart formdata. The input list is in 'post', while the * output resulting linked lists gets stored in '*finalform'. *sizep will get * the total size of the whole POST. */ CURLcode Curl_getFormData(struct FormData **finalform, struct curl_httppost *post, curl_off_t *sizep) { struct FormData *form = NULL; struct FormData *firstform; struct curl_httppost *file; CURLcode result = CURLE_OK; curl_off_t size=0; /* support potentially ENORMOUS formposts */ char *boundary; char *fileboundary=NULL; struct curl_slist* curList; *finalform=NULL; /* default form is empty */ if(!post) return result; /* no input => no output! */ boundary = Curl_FormBoundary(); if(!boundary) return CURLE_OUT_OF_MEMORY; /* Make the first line of the output */ result = AddFormDataf(&form, NULL, "Content-Type: multipart/form-data;" " boundary=%s\r\n", boundary); if (result) { free(boundary); return result; } /* we DO NOT include that line in the total size of the POST, since it'll be part of the header! */ firstform = form; do { if(size) { result = AddFormDataf(&form, &size, "\r\n"); if (result) break; } /* boundary */ result = AddFormDataf(&form, &size, "--%s\r\n", boundary); if (result) break; result = AddFormDataf(&form, &size, "Content-Disposition: form-data; name=\""); if (result) break; result = AddFormData(&form, FORM_DATA, post->name, post->namelength, &size); if (result) break; result = AddFormDataf(&form, &size, "\""); if (result) break; if(post->more) { /* If used, this is a link to more file names, we must then do the magic to include several files with the same field name */ fileboundary = Curl_FormBoundary(); result = AddFormDataf(&form, &size, "\r\nContent-Type: multipart/mixed," " boundary=%s\r\n", fileboundary); if (result) break; } file = post; do { /* If 'showfilename' is set, that is a faked name passed on to us to use to in the formpost. If that is not set, the actually used local file name should be added. */ if(post->more) { /* if multiple-file */ char *filebasename= (!file->showfilename)?strippath(file->contents):NULL; result = AddFormDataf(&form, &size, "\r\n--%s\r\nContent-Disposition: " "attachment; filename=\"%s\"", fileboundary, (file->showfilename?file->showfilename: filebasename)); if (filebasename) free(filebasename); if (result) break; } else if((post->flags & HTTPPOST_FILENAME) || (post->flags & HTTPPOST_BUFFER)) { char *filebasename= (!post->showfilename)?strippath(post->contents):NULL; result = AddFormDataf(&form, &size, "; filename=\"%s\"", (post->showfilename?post->showfilename: filebasename)); if (filebasename) free(filebasename); if (result) break; } if(file->contenttype) { /* we have a specified type */ result = AddFormDataf(&form, &size, "\r\nContent-Type: %s", file->contenttype); if (result) break; } curList = file->contentheader; while( curList ) { /* Process the additional headers specified for this form */ result = AddFormDataf( &form, &size, "\r\n%s", curList->data ); if (result) break; curList = curList->next; } if (result) { Curl_formclean(firstform); free(boundary); return result; } #if 0 /* The header Content-Transfer-Encoding: seems to confuse some receivers * (like the built-in PHP engine). While I can't see any reason why it * should, I can just as well skip this to the benefit of the users who * are using such confused receivers. */ if(file->contenttype && !checkprefix("text/", file->contenttype)) { /* this is not a text content, mention our binary encoding */ size += AddFormData(&form, "\r\nContent-Transfer-Encoding: binary", 0); } #endif result = AddFormDataf(&form, &size, "\r\n\r\n"); if (result) break; if((post->flags & HTTPPOST_FILENAME) || (post->flags & HTTPPOST_READFILE)) { /* we should include the contents from the specified file */ FILE *fileread; fileread = strequal("-", file->contents)? stdin:fopen(file->contents, "rb"); /* binary read for win32 */ /* * VMS: This only allows for stream files on VMS. Stream files are * OK, as are FIXED & VAR files WITHOUT implied CC For implied CC, * every record needs to have a \n appended & 1 added to SIZE */ if(fileread) { if(fileread != stdin) { /* close the file again */ fclose(fileread); /* add the file name only - for later reading from this */ result = AddFormData(&form, FORM_FILE, file->contents, 0, &size); } else { /* When uploading from stdin, we can't know the size of the file, * thus must read the full file as before. We *could* use chunked * transfer-encoding, but that only works for HTTP 1.1 and we * can't be sure we work with such a server. */ size_t nread; char buffer[512]; while((nread = fread(buffer, 1, sizeof(buffer), fileread))) { result = AddFormData(&form, FORM_DATA, buffer, nread, &size); if (result) break; } } if (result) { Curl_formclean(firstform); free(boundary); return result; } } else { Curl_formclean(firstform); free(boundary); *finalform = NULL; return CURLE_READ_ERROR; } } else if (post->flags & HTTPPOST_BUFFER) { /* include contents of buffer */ result = AddFormData(&form, FORM_DATA, post->buffer, post->bufferlength, &size); if (result) break; } else { /* include the contents we got */ result = AddFormData(&form, FORM_DATA, post->contents, post->contentslength, &size); if (result) break; } } while((file = file->more)); /* for each specified file for this field */ if (result) { Curl_formclean(firstform); free(boundary); return result; } if(post->more) { /* this was a multiple-file inclusion, make a termination file boundary: */ result = AddFormDataf(&form, &size, "\r\n--%s--", fileboundary); free(fileboundary); if (result) break; } } while((post=post->next)); /* for each field */ if (result) { Curl_formclean(firstform); free(boundary); return result; } /* end-boundary for everything */ result = AddFormDataf(&form, &size, "\r\n--%s--\r\n", boundary); if (result) { Curl_formclean(firstform); free(boundary); return result; } *sizep = size; free(boundary); *finalform=firstform; return result; } /* * Curl_FormInit() inits the struct 'form' points to with the 'formdata' * and resets the 'sent' counter. */ int Curl_FormInit(struct Form *form, struct FormData *formdata ) { if(!formdata) return 1; /* error */ form->data = formdata; form->sent = 0; form->fp = NULL; return 0; } static size_t readfromfile(struct Form *form, char *buffer, size_t size) { size_t nread; if(!form->fp) { /* this file hasn't yet been opened */ form->fp = fopen(form->data->line, "rb"); /* b is for binary */ if(!form->fp) return -1; /* failure */ } nread = fread(buffer, 1, size, form->fp); if(nread != size) { /* this is the last chunk form the file, move on */ fclose(form->fp); form->fp = NULL; form->data = form->data->next; } return nread; } /* * Curl_FormReader() is the fread() emulation function that will be used to * deliver the formdata to the transfer loop and then sent away to the peer. */ size_t Curl_FormReader(char *buffer, size_t size, size_t nitems, FILE *mydata) { struct Form *form; size_t wantedsize; size_t gotsize = 0; form=(struct Form *)mydata; wantedsize = size * nitems; if(!form->data) return 0; /* nothing, error, empty */ if(form->data->type == FORM_FILE) { gotsize = readfromfile(form, buffer, wantedsize); if(gotsize) /* If positive or -1, return. If zero, continue! */ return gotsize; } do { if( (form->data->length - form->sent ) > wantedsize - gotsize) { memcpy(buffer + gotsize , form->data->line + form->sent, wantedsize - gotsize); form->sent += wantedsize-gotsize; return wantedsize; } memcpy(buffer+gotsize, form->data->line + form->sent, (form->data->length - form->sent) ); gotsize += form->data->length - form->sent; form->sent = 0; form->data = form->data->next; /* advance */ } while(form->data && (form->data->type == FORM_DATA)); /* If we got an empty line and we have more data, we proceed to the next line immediately to avoid returning zero before we've reached the end. This is the bug reported November 22 1999 on curl 6.3. (Daniel) */ return gotsize; } /* * Curl_formpostheader() returns the first line of the formpost, the * request-header part (which is not part of the request-body like the rest of * the post). */ char *Curl_formpostheader(void *formp, size_t *len) { char *header; struct Form *form=(struct Form *)formp; if(!form->data) return 0; /* nothing, ERROR! */ header = form->data->line; *len = form->data->length; form->data = form->data->next; /* advance */ return header; } #ifdef _FORM_DEBUG int FormAddTest(const char * errormsg, struct curl_httppost **httppost, struct curl_httppost **last_post, ...) { int result; va_list arg; va_start(arg, last_post); if ((result = FormAdd(httppost, last_post, arg))) fprintf (stderr, "ERROR doing FormAdd ret: %d action: %s\n", result, errormsg); va_end(arg); return result; } int main() { char name1[] = "simple_COPYCONTENTS"; char name2[] = "COPYCONTENTS_+_CONTENTTYPE"; char name3[] = "PTRNAME_+_NAMELENGTH_+_COPYNAME_+_CONTENTSLENGTH"; char name4[] = "simple_PTRCONTENTS"; char name5[] = "PTRCONTENTS_+_CONTENTSLENGTH"; char name6[] = "PTRCONTENTS_+_CONTENTSLENGTH_+_CONTENTTYPE"; char name7[] = "FILE1_+_CONTENTTYPE"; char name8[] = "FILE1_+_FILE2"; char name9[] = "FILE1_+_FILE2_+_FILE3"; char name10[] = "ARRAY: FILE1_+_FILE2_+_FILE3"; char name11[] = "FILECONTENT"; char value1[] = "value for simple COPYCONTENTS"; char value2[] = "value for COPYCONTENTS + CONTENTTYPE"; char value3[] = "value for PTRNAME + NAMELENGTH + COPYNAME + CONTENTSLENGTH"; char value4[] = "value for simple PTRCONTENTS"; char value5[] = "value for PTRCONTENTS + CONTENTSLENGTH"; char value6[] = "value for PTRCOTNENTS + CONTENTSLENGTH + CONTENTTYPE"; char value7[] = "inet_ntoa_r.h"; char value8[] = "Makefile.b32.resp"; char type2[] = "image/gif"; char type6[] = "text/plain"; char type7[] = "text/html"; int name3length = strlen(name3); int value3length = strlen(value3); int value5length = strlen(value4); int value6length = strlen(value5); int errors = 0; int size; size_t nread; char buffer[4096]; struct curl_httppost *httppost=NULL; struct curl_httppost *last_post=NULL; struct curl_forms forms[4]; struct FormData *form; struct Form formread; if (FormAddTest("simple COPYCONTENTS test", &httppost, &last_post, CURLFORM_COPYNAME, name1, CURLFORM_COPYCONTENTS, value1, CURLFORM_END)) ++errors; if (FormAddTest("COPYCONTENTS + CONTENTTYPE test", &httppost, &last_post, CURLFORM_COPYNAME, name2, CURLFORM_COPYCONTENTS, value2, CURLFORM_CONTENTTYPE, type2, CURLFORM_END)) ++errors; /* make null character at start to check that contentslength works correctly */ name3[1] = '\0'; value3[1] = '\0'; if (FormAddTest("PTRNAME + NAMELENGTH + COPYNAME + CONTENTSLENGTH test", &httppost, &last_post, CURLFORM_PTRNAME, name3, CURLFORM_COPYCONTENTS, value3, CURLFORM_CONTENTSLENGTH, value3length, CURLFORM_NAMELENGTH, name3length, CURLFORM_END)) ++errors; if (FormAddTest("simple PTRCONTENTS test", &httppost, &last_post, CURLFORM_COPYNAME, name4, CURLFORM_PTRCONTENTS, value4, CURLFORM_END)) ++errors; /* make null character at start to check that contentslength works correctly */ value5[1] = '\0'; if (FormAddTest("PTRCONTENTS + CONTENTSLENGTH test", &httppost, &last_post, CURLFORM_COPYNAME, name5, CURLFORM_PTRCONTENTS, value5, CURLFORM_CONTENTSLENGTH, value5length, CURLFORM_END)) ++errors; /* make null character at start to check that contentslength works correctly */ value6[1] = '\0'; if (FormAddTest("PTRCONTENTS + CONTENTSLENGTH + CONTENTTYPE test", &httppost, &last_post, CURLFORM_COPYNAME, name6, CURLFORM_PTRCONTENTS, value6, CURLFORM_CONTENTSLENGTH, value6length, CURLFORM_CONTENTTYPE, type6, CURLFORM_END)) ++errors; if (FormAddTest("FILE + CONTENTTYPE test", &httppost, &last_post, CURLFORM_COPYNAME, name7, CURLFORM_FILE, value7, CURLFORM_CONTENTTYPE, type7, CURLFORM_END)) ++errors; if (FormAddTest("FILE1 + FILE2 test", &httppost, &last_post, CURLFORM_COPYNAME, name8, CURLFORM_FILE, value7, CURLFORM_FILE, value8, CURLFORM_END)) ++errors; if (FormAddTest("FILE1 + FILE2 + FILE3 test", &httppost, &last_post, CURLFORM_COPYNAME, name9, CURLFORM_FILE, value7, CURLFORM_FILE, value8, CURLFORM_FILE, value7, CURLFORM_END)) ++errors; forms[0].option = CURLFORM_FILE; forms[0].value = value7; forms[1].option = CURLFORM_FILE; forms[1].value = value8; forms[2].option = CURLFORM_FILE; forms[2].value = value7; forms[3].option = CURLFORM_END; if (FormAddTest("FILE1 + FILE2 + FILE3 ARRAY test", &httppost, &last_post, CURLFORM_COPYNAME, name10, CURLFORM_ARRAY, forms, CURLFORM_END)) ++errors; if (FormAddTest("FILECONTENT test", &httppost, &last_post, CURLFORM_COPYNAME, name11, CURLFORM_FILECONTENT, value7, CURLFORM_END)) ++errors; form=Curl_getFormData(httppost, &size); Curl_FormInit(&formread, form); do { nread = Curl_FormReader(buffer, 1, sizeof(buffer), (FILE *)&formread); if(-1 == nread) break; fwrite(buffer, nread, 1, stdout); } while(1); fprintf(stdout, "size: %d\n", size); if (errors) fprintf(stdout, "\n==> %d Test(s) failed!\n", errors); else fprintf(stdout, "\nAll Tests seem to have worked (please check output)\n"); return 0; } #endif #else /* CURL_DISABLE_HTTP */ CURLFORMcode curl_formadd(struct curl_httppost **httppost, struct curl_httppost **last_post, ...) { (void)httppost; (void)last_post; return CURL_FORMADD_DISABLED; } void curl_formfree(struct curl_httppost *form) { (void)form; /* does nothing HTTP is disabled */ } #endif /* CURL_DISABLE_HTTP */ /* * Curl_FormBoundary() creates a suitable boundary string and returns an * allocated one. This is also used by SSL-code so it must be present even * if HTTP is disabled! */ char *Curl_FormBoundary(void) { char *retstring; static int randomizer; /* this is just so that two boundaries within the same form won't be identical */ size_t i; static const char table16[]="abcdef0123456789"; retstring = (char *)malloc(BOUNDARY_LENGTH+1); if(!retstring) return NULL; /* failed */ srand((unsigned int)time(NULL)+randomizer++); /* seed */ strcpy(retstring, "----------------------------"); for(i=strlen(retstring); i, et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: formdata.h,v 1.23 2004/06/14 08:51:43 bagder Exp $ ***************************************************************************/ enum formtype { FORM_DATA, /* regular data */ FORM_FILE /* 'line' points to a file name we should read from */ }; /* plain and simple linked list with lines to send */ struct FormData { struct FormData *next; enum formtype type; char *line; size_t length; }; struct Form { struct FormData *data; /* current form line to send */ size_t sent; /* number of bytes of the current line that has already been sent in a previous invoke */ FILE *fp; /* file to read from */ }; /* used by FormAdd for temporary storage */ typedef struct FormInfo { char *name; bool name_alloc; size_t namelength; char *value; bool value_alloc; size_t contentslength; char *contenttype; bool contenttype_alloc; long flags; char *buffer; /* pointer to existing buffer used for file upload */ size_t bufferlength; char *showfilename; /* The file name to show. If not set, the actual file name will be used */ bool showfilename_alloc; struct curl_slist* contentheader; struct FormInfo *more; } FormInfo; int Curl_FormInit(struct Form *form, struct FormData *formdata ); CURLcode Curl_getFormData(struct FormData **, struct curl_httppost *post, curl_off_t *size); /* fread() emulation */ size_t Curl_FormReader(char *buffer, size_t size, size_t nitems, FILE *mydata); /* * Curl_formpostheader() returns the first line of the formpost, the * request-header part (which is not part of the request-body like the rest of * the post). */ char *Curl_formpostheader(void *formp, size_t *len); char *Curl_FormBoundary(void); void Curl_formclean(struct FormData *); #endif criticalmass-1.0.0.orig/curl/lib/speedcheck.c0000644000175000017500000000444310265631023020357 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: speedcheck.c,v 1.20 2004/10/06 07:50:18 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #include "urldata.h" #include "sendf.h" #include "speedcheck.h" void Curl_speedinit(struct SessionHandle *data) { memset(&data->state.keeps_speed, 0, sizeof(struct timeval)); } CURLcode Curl_speedcheck(struct SessionHandle *data, struct timeval now) { if((data->progress.current_speed >= 0) && data->set.low_speed_time && (Curl_tvlong(data->state.keeps_speed) != 0) && (data->progress.current_speed < data->set.low_speed_limit)) { /* We are now below the "low speed limit". If we are below it for "low speed time" seconds we consider that enough reason to abort the download. */ if( (Curl_tvdiff(now, data->state.keeps_speed)/1000) > data->set.low_speed_time) { /* we have been this slow for long enough, now die */ failf(data, "Operation too slow. " "Less than %d bytes/sec transfered the last %d seconds", data->set.low_speed_limit, data->set.low_speed_time); return CURLE_OPERATION_TIMEOUTED; } } else { /* we keep up the required speed all right */ data->state.keeps_speed = now; } return CURLE_OK; } criticalmass-1.0.0.orig/curl/lib/speedcheck.h0000644000175000017500000000250210265631023020356 0ustar danieldaniel#ifndef __SPEEDCHECK_H #define __SPEEDCHECK_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: speedcheck.h,v 1.12 2004/01/07 09:19:35 bagder Exp $ ***************************************************************************/ #include "setup.h" #include "timeval.h" void Curl_speedinit(struct SessionHandle *data); CURLcode Curl_speedcheck(struct SessionHandle *data, struct timeval now); #endif criticalmass-1.0.0.orig/curl/lib/curllib.dsp0000644000175000017500000002461710265631023020266 0ustar danieldaniel# Microsoft Developer Studio Project File - Name="curllib" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102 CFG=curllib - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "curllib.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "curllib.mak" CFG="curllib - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "curllib - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE "curllib - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe MTL=midl.exe RSC=rc.exe !IF "$(CFG)" == "curllib - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /c # ADD CPP /nologo /MT /W3 /GX /Zi /O2 /I "." /I "..\include" /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /D "_WINDLL" /FR /FD /c # SUBTRACT CPP /YX # ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "NDEBUG" # ADD RSC /l 0x409 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386 # ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /map /debug /machine:I386 /out:"Release/libcurl.dll" !ELSEIF "$(CFG)" == "curllib - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Ignore_Export_Lib 0 # PROP Target_Dir "" # ADD BASE CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /YX /FD /GZ /c # ADD CPP /nologo /MTd /W3 /Gm /GX /Zi /Od /I "." /I "..\include" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "CURLLIB_EXPORTS" /FR /FD /GZ /c # SUBTRACT CPP /WX /YX # ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD MTL /nologo /D "_DEBUG" /mktyplib203 /win32 # ADD BASE RSC /l 0x409 /d "_DEBUG" # ADD RSC /l 0x409 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib ws2_32.lib winmm.lib /nologo /dll /incremental:no /map /debug /machine:I386 /out:"Debug/libcurl.dll" /pdbtype:sept # SUBTRACT LINK32 /nodefaultlib !ENDIF # Begin Target # Name "curllib - Win32 Release" # Name "curllib - Win32 Debug" # Begin Group "Source Files" # Begin Source File SOURCE=.\file.c # End Source File # Begin Source File SOURCE=.\timeval.c # End Source File # Begin Source File SOURCE=.\base64.c # End Source File # Begin Source File SOURCE=.\hostip.c # End Source File # Begin Source File SOURCE=.\progress.c # End Source File # Begin Source File SOURCE=.\formdata.c # End Source File # Begin Source File SOURCE=.\cookie.c # End Source File # Begin Source File SOURCE=.\http.c # End Source File # Begin Source File SOURCE=.\sendf.c # End Source File # Begin Source File SOURCE=.\ftp.c # End Source File # Begin Source File SOURCE=.\url.c # End Source File # Begin Source File SOURCE=.\dict.c # End Source File # Begin Source File SOURCE=.\if2ip.c # End Source File # Begin Source File SOURCE=.\speedcheck.c # End Source File # Begin Source File SOURCE=.\ldap.c # End Source File # Begin Source File SOURCE=.\ssluse.c # End Source File # Begin Source File SOURCE=.\version.c # End Source File # Begin Source File SOURCE=.\getenv.c # End Source File # Begin Source File SOURCE=.\escape.c # End Source File # Begin Source File SOURCE=.\mprintf.c # End Source File # Begin Source File SOURCE=.\telnet.c # End Source File # Begin Source File SOURCE=.\netrc.c # End Source File # Begin Source File SOURCE=.\getinfo.c # End Source File # Begin Source File SOURCE=.\transfer.c # End Source File # Begin Source File SOURCE=.\strequal.c # End Source File # Begin Source File SOURCE=.\easy.c # End Source File # Begin Source File SOURCE=.\security.c # End Source File # Begin Source File SOURCE=.\krb4.c # End Source File # Begin Source File SOURCE=.\memdebug.c # End Source File # Begin Source File SOURCE=.\http_chunks.c # End Source File # Begin Source File SOURCE=.\strtok.c # End Source File # Begin Source File SOURCE=.\connect.c # End Source File # Begin Source File SOURCE=.\llist.c # End Source File # Begin Source File SOURCE=.\hash.c # End Source File # Begin Source File SOURCE=.\multi.c # End Source File # Begin Source File SOURCE=.\content_encoding.c # End Source File # Begin Source File SOURCE=.\share.c # End Source File # Begin Source File SOURCE=.\http_digest.c # End Source File # Begin Source File SOURCE=.\md5.c # End Source File # Begin Source File SOURCE=.\http_negotiate.c # End Source File # Begin Source File SOURCE=.\http_ntlm.c # End Source File # Begin Source File SOURCE=.\inet_pton.c # End Source File # Begin Source File SOURCE=.\strtoofft.c # End Source File # Begin Source File SOURCE=.\strerror.c # End Source File # Begin Source File SOURCE=.\hostares.c # End Source File # Begin Source File SOURCE=.\hostasyn.c # End Source File # Begin Source File SOURCE=.\hostip4.c # End Source File # Begin Source File SOURCE=.\hostip6.c # End Source File # Begin Source File SOURCE=.\hostsyn.c # End Source File # Begin Source File SOURCE=.\hostthre.c # End Source File # Begin Source File SOURCE=.\inet_ntop.c # End Source File # Begin Source File SOURCE=.\parsedate.c # End Source File # Begin Source File SOURCE=.\select.c # End Source File # Begin Source File SOURCE=.\gtls.c # End Source File # Begin Source File SOURCE=.\sslgen.c # End Source File # End Group # Begin Group "Header Files" # Begin Source File SOURCE=.\arpa_telnet.h # End Source File # Begin Source File SOURCE=.\netrc.h # End Source File # Begin Source File SOURCE=.\file.h # End Source File # Begin Source File SOURCE=.\timeval.h # End Source File # Begin Source File SOURCE=.\base64.h # End Source File # Begin Source File SOURCE=.\hostip.h # End Source File # Begin Source File SOURCE=.\progress.h # End Source File # Begin Source File SOURCE=.\formdata.h # End Source File # Begin Source File SOURCE=.\cookie.h # End Source File # Begin Source File SOURCE=.\http.h # End Source File # Begin Source File SOURCE=.\sendf.h # End Source File # Begin Source File SOURCE=.\ftp.h # End Source File # Begin Source File SOURCE=.\url.h # End Source File # Begin Source File SOURCE=.\dict.h # End Source File # Begin Source File SOURCE=.\if2ip.h # End Source File # Begin Source File SOURCE=.\speedcheck.h # End Source File # Begin Source File SOURCE=.\urldata.h # End Source File # Begin Source File SOURCE=.\ldap.h # End Source File # Begin Source File SOURCE=.\ssluse.h # End Source File # Begin Source File SOURCE=.\escape.h # End Source File # Begin Source File SOURCE=.\telnet.h # End Source File # Begin Source File SOURCE=.\getinfo.h # End Source File # Begin Source File SOURCE=.\strequal.h # End Source File # Begin Source File SOURCE=.\krb4.h # End Source File # Begin Source File SOURCE=.\memdebug.h # End Source File # Begin Source File SOURCE=.\inet_ntoa_r.h # End Source File # Begin Source File SOURCE=.\http_chunks.h # End Source File # Begin Source File SOURCE=.\strtok.h # End Source File # Begin Source File SOURCE=.\connect.h # End Source File # Begin Source File SOURCE=.\llist.h # End Source File # Begin Source File SOURCE=.\hash.h # End Source File # Begin Source File SOURCE=.\content_encoding.h # End Source File # Begin Source File SOURCE=.\share.h # End Source File # Begin Source File SOURCE=.\md5.h # End Source File # Begin Source File SOURCE=.\http_digest.h # End Source File # Begin Source File SOURCE=.\http_negotiate.h # End Source File # Begin Source File SOURCE=.\http_ntlm.h # End Source File # Begin Source File SOURCE=.\ca-bundle.h # End Source File # Begin Source File SOURCE=.\inet_pton.h # End Source File # Begin Source File SOURCE=.\strtoofft.h # End Source File # Begin Source File SOURCE=.\strerror.h # End Source File # Begin Source File SOURCE=.\inet_ntop.h # End Source File # Begin Source File SOURCE=.\curlx.h # End Source File # Begin Source File SOURCE=.\memory.h # End Source File # Begin Source File SOURCE=.\setup.h # End Source File # Begin Source File SOURCE=.\transfer.h # End Source File # Begin Source File SOURCE=.\select.h # End Source File # Begin Source File SOURCE=.\easyif.h # End Source File # Begin Source File SOURCE=.\multiif.h # End Source File # Begin Source File SOURCE=.\parsedate.h # End Source File # Begin Source File SOURCE=.\sslgen.h # End Source File # Begin Source File SOURCE=.\gtls.h # End Source File # Begin Source File SOURCE=.\config-win32.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # End Target # End Project criticalmass-1.0.0.orig/curl/lib/curllib.dsw0000644000175000017500000000103310265631023020260 0ustar danieldanielMicrosoft Developer Studio Workspace File, Format Version 6.00 # WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! ############################################################################### Project: "curllib"=".\curllib.dsp" - Package Owner=<4> Package=<5> {{{ }}} Package=<4> {{{ }}} ############################################################################### Global: Package=<5> {{{ }}} Package=<3> {{{ }}} ############################################################################### criticalmass-1.0.0.orig/curl/lib/http_negotiate.c0000644000175000017500000002445210265631023021301 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_negotiate.c,v 1.14 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifdef HAVE_GSSAPI #ifdef HAVE_GSSMIT #define GSS_C_NT_HOSTBASED_SERVICE gss_nt_service_name #endif #ifndef CURL_DISABLE_HTTP /* -- WIN32 approved -- */ #include #include #include #include #include #include #include "urldata.h" #include "sendf.h" #include "strequal.h" #include "base64.h" #include "http_negotiate.h" #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include /* The last #include file should be: */ #include "memdebug.h" static int get_gss_name(struct connectdata *conn, gss_name_t *server) { struct negotiatedata *neg_ctx = &conn->data->state.negotiate; OM_uint32 major_status, minor_status; gss_buffer_desc token = GSS_C_EMPTY_BUFFER; char name[2048]; const char* service; /* GSSAPI implementation by Globus (known as GSI) requires the name to be of form "/" instead of @ (ie. slash instead of at-sign). Also GSI servers are often identified as 'host' not 'khttp'. Change following lines if you want to use GSI */ /* IIS uses the @ form but uses 'http' as the service name */ if (neg_ctx->gss) service = "KHTTP"; else service = "HTTP"; token.length = strlen(service) + 1 + strlen(conn->host.name) + 1; if (token.length + 1 > sizeof(name)) return EMSGSIZE; snprintf(name, sizeof(name), "%s@%s", service, conn->host.name); token.value = (void *) name; major_status = gss_import_name(&minor_status, &token, GSS_C_NT_HOSTBASED_SERVICE, server); return GSS_ERROR(major_status) ? -1 : 0; } static void log_gss_error(struct connectdata *conn, OM_uint32 error_status, char *prefix) { OM_uint32 maj_stat, min_stat; OM_uint32 msg_ctx = 0; gss_buffer_desc status_string; char buf[1024]; size_t len; snprintf(buf, sizeof(buf), "%s", prefix); len = strlen(buf); do { maj_stat = gss_display_status (&min_stat, error_status, GSS_C_MECH_CODE, GSS_C_NO_OID, &msg_ctx, &status_string); if (sizeof(buf) > len + status_string.length + 1) { snprintf(buf + len, sizeof(buf) - len, ": %s", (char*) status_string.value); len += status_string.length; } gss_release_buffer(&min_stat, &status_string); } while (!GSS_ERROR(maj_stat) && msg_ctx != 0); infof(conn->data, buf); } int Curl_input_negotiate(struct connectdata *conn, char *header) { struct negotiatedata *neg_ctx = &conn->data->state.negotiate; OM_uint32 major_status, minor_status, minor_status2; gss_buffer_desc input_token = GSS_C_EMPTY_BUFFER; gss_buffer_desc output_token = GSS_C_EMPTY_BUFFER; int ret; size_t len; bool gss; const char* protocol; while(*header && isspace((int)*header)) header++; if(checkprefix("GSS-Negotiate", header)) { protocol = "GSS-Negotiate"; gss = TRUE; } else if (checkprefix("Negotiate", header)) { protocol = "Negotiate"; gss = FALSE; } else return -1; if (neg_ctx->context) { if (neg_ctx->gss != gss) { return -1; } } else { neg_ctx->protocol = protocol; neg_ctx->gss = gss; } if (neg_ctx->context && neg_ctx->status == GSS_S_COMPLETE) { /* We finished succesfully our part of authentication, but server * rejected it (since we're again here). Exit with an error since we * can't invent anything better */ Curl_cleanup_negotiate(conn->data); return -1; } if (neg_ctx->server_name == NULL && (ret = get_gss_name(conn, &neg_ctx->server_name))) return ret; header += strlen(neg_ctx->protocol); while(*header && isspace((int)*header)) header++; len = strlen(header); if (len > 0) { int rawlen = Curl_base64_decode(header, (unsigned char **)&input_token.value); if (rawlen < 0) return -1; input_token.length = rawlen; #ifdef HAVE_SPNEGO /* Handle SPNEGO */ if (checkprefix("Negotiate", header)) { ASN1_OBJECT * object = NULL; int rc = 1; unsigned char * spnegoToken = NULL; size_t spnegoTokenLength = 0; unsigned char * mechToken = NULL; size_t mechTokenLength = 0; spnegoToken = malloc(input_token.length); if (input_token.value == NULL) return ENOMEM; spnegoTokenLength = input_token.length; object = OBJ_txt2obj ("1.2.840.113554.1.2.2", 1); if (!parseSpnegoTargetToken(spnegoToken, spnegoTokenLength, NULL, NULL, &mechToken, &mechTokenLength, NULL, NULL)) { free(spnegoToken); spnegoToken = NULL; infof(conn->data, "Parse SPNEGO Target Token failed\n"); } else { free(input_token.value); input_token.value = NULL; input_token.value = malloc(mechTokenLength); memcpy(input_token.value, mechToken,mechTokenLength); input_token.length = mechTokenLength; free(mechToken); mechToken = NULL; infof(conn->data, "Parse SPNEGO Target Token succeeded\n"); } } #endif } major_status = gss_init_sec_context(&minor_status, GSS_C_NO_CREDENTIAL, &neg_ctx->context, neg_ctx->server_name, GSS_C_NO_OID, GSS_C_DELEG_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, &input_token, NULL, &output_token, NULL, NULL); if (input_token.length > 0) gss_release_buffer(&minor_status2, &input_token); neg_ctx->status = major_status; if (GSS_ERROR(major_status)) { /* Curl_cleanup_negotiate(conn->data) ??? */ log_gss_error(conn, minor_status, (char *)"gss_init_sec_context() failed: "); return -1; } if (output_token.length == 0) { return -1; } neg_ctx->output_token = output_token; /* conn->bits.close = FALSE; */ return 0; } CURLcode Curl_output_negotiate(struct connectdata *conn) { struct negotiatedata *neg_ctx = &conn->data->state.negotiate; OM_uint32 minor_status; char *encoded = NULL; int len; #ifdef HAVE_SPNEGO /* Handle SPNEGO */ if (checkprefix("Negotiate",neg_ctx->protocol)) { ASN1_OBJECT * object = NULL; int rc = 1; unsigned char * spnegoToken = NULL; size_t spnegoTokenLength = 0; unsigned char * responseToken = NULL; size_t responseTokenLength = 0; responseToken = malloc(neg_ctx->output_token.length); if ( responseToken == NULL) return CURLE_OUT_OF_MEMORY; memcpy(responseToken, neg_ctx->output_token.value, neg_ctx->output_token.length); responseTokenLength = neg_ctx->output_token.length; object=OBJ_txt2obj ("1.2.840.113554.1.2.2", 1); if (!makeSpnegoInitialToken (object, responseToken, responseTokenLength, &spnegoToken, &spnegoTokenLength)) { free(responseToken); responseToken = NULL; infof(conn->data, "Make SPNEGO Initial Token failed\n"); } else { free(neg_ctx->output_token.value); responseToken = NULL; neg_ctx->output_token.value = malloc(spnegoTokenLength); memcpy(neg_ctx->output_token.value, spnegoToken,spnegoTokenLength); neg_ctx->output_token.length = spnegoTokenLength; free(spnegoToken); spnegoToken = NULL; infof(conn->data, "Make SPNEGO Initial Token succeeded\n"); } } #endif len = Curl_base64_encode(neg_ctx->output_token.value, neg_ctx->output_token.length, &encoded); if (len < 0) return CURLE_OUT_OF_MEMORY; conn->allocptr.userpwd = aprintf("Authorization: %s %s\r\n", neg_ctx->protocol, encoded); free(encoded); gss_release_buffer(&minor_status, &neg_ctx->output_token); return (conn->allocptr.userpwd == NULL) ? CURLE_OUT_OF_MEMORY : CURLE_OK; } void Curl_cleanup_negotiate(struct SessionHandle *data) { OM_uint32 minor_status; struct negotiatedata *neg_ctx = &data->state.negotiate; if (neg_ctx->context != GSS_C_NO_CONTEXT) gss_delete_sec_context(&minor_status, &neg_ctx->context, GSS_C_NO_BUFFER); if (neg_ctx->output_token.length != 0) gss_release_buffer(&minor_status, &neg_ctx->output_token); if (neg_ctx->server_name != GSS_C_NO_NAME) gss_release_name(&minor_status, &neg_ctx->server_name); memset(neg_ctx, 0, sizeof(*neg_ctx)); } #endif #endif criticalmass-1.0.0.orig/curl/lib/http_negotiate.h0000644000175000017500000000267710265631023021313 0ustar danieldaniel#ifndef __HTTP_NEGOTIATE_H #define __HTTP_NEGOTIATE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_negotiate.h,v 1.4 2004/01/07 09:19:35 bagder Exp $ ***************************************************************************/ #ifdef HAVE_GSSAPI /* this is for Negotiate header input */ int Curl_input_negotiate(struct connectdata *conn, char *header); /* this is for creating Negotiate header output */ CURLcode Curl_output_negotiate(struct connectdata *conn); void Curl_cleanup_negotiate(struct SessionHandle *data); #endif #endif criticalmass-1.0.0.orig/curl/lib/Makefile.b320000644000175000017500000000432010265631023020134 0ustar danieldaniel############################################################ # $Id: Makefile.b32,v 1.19 2004/11/14 13:48:15 giva Exp $ # # Makefile.b32 - Borland's C++ Compiler 5.X # # 'lib' directory # # 'BCCDIR' has to be set up to point to the base directory # of the compiler, i.e. SET BCCDIR = c:\Borland\BCC55 # where c:\Borland\BCC55 is the compiler is installed # # Written by Jaepil Kim, pit@paradise.net.nz ############################################################ # Edit the path below to point to the base of your Zlib sources. !ifndef ZLIB_PATH ZLIB_PATH = ../../zlib-1.2.1 !endif # Edit the path below to point to the base of your OpenSSL package. !ifndef OPENSSL_PATH OPENSSL_PATH = ../../openssl-0.9.7d !endif # Set libcurl static lib, dll and import lib LIBCURL_LIB = libcurl.lib LIBCURL_DLL = libcurl.dll LIBCURL_IMPLIB = libcurl_imp.lib # Setup environment CXX = bcc32 LD = bcc32 CP = copy RM = del LIB = tlib IMPLIB = implib CXXFLAGS = -q -5 -O2 -w-aus -w-ccc -w-csu -w-par -w-pia -w-rch -w-inl -w-ngu -w-pro -tWM LIBFLAGS = /C /P32 LDFLAGS = -q -lq -laa -tWD INCDIRS = -I.;../include LINKLIB = $(BCCDIR)/lib/cw32mt.lib # If you build with SSL support, set WITH_SSL=1 DEFINES = -DNDEBUG -DWIN32 -D_CONSOLE -D_MBCS -DBUILDING_LIBCURL !ifdef WITH_ZLIB DEFINES = $(DEFINES) -DHAVE_LIBZ -DHAVE_ZLIB_H INCDIRS = $(INCDIRS);$(ZLIB_PATH) LINKLIB = $(LINKLIB) $(ZLIB_PATH)/zlib.lib !endif !ifdef WITH_SSL DEFINES = $(DEFINES) -DUSE_SSLEAY INCDIRS = $(INCDIRS);$(OPENSSL_PATH)/inc32;$(OPENSSL_PATH)/inc32/openssl LINKLIB = $(LINKLIB) $(OPENSSL_PATH)/out32/ssleay32.lib $(OPENSSL_PATH)/out32/libeay32.lib !endif .autodepend # Makefile.inc provides the CSOURCES and HHEADERS defines !include Makefile.inc OBJECTS = $(CSOURCES:.c=.obj) .c.obj: $(CXX) -c $(INCDIRS) $(CXXFLAGS) $(DEFINES) $< all: $(LIBCURL_LIB) $(LIBCURL_DLL) clean: -$(RM) $(LIBCURL_LIB) -$(RM) $(LIBCURL_IMPLIB) -$(RM) libcurl.tds -$(RM) *.obj $(LIBCURL_LIB): $(OBJECTS) @-$(RM) $@ $(LIB) $(LIBFLAGS) $@ @&&! +$(**: = &^ +) ! $(LIBCURL_DLL) $(LIBCURL_IMPLIB): $(OBJECTS) $(LINKLIB) @-$(RM) $(LIBCURL_DLL) @-$(RM) $(LIBCURL_IMPLIB) $(LD) $(LDFLAGS) -e$(LIBCURL_DLL) $** $(IMPLIB) $(LIBCURL_IMPLIB) $(LIBCURL_DLL) criticalmass-1.0.0.orig/curl/lib/Makefile.m320000644000175000017500000000415410265631023020154 0ustar danieldaniel############################################################# # $Id: Makefile.m32,v 1.32 2004/12/19 11:52:31 giva Exp $ # ## Makefile for building libcurl.a with MingW32 (GCC-3.2) and ## optionally OpenSSL (0.9.7) ## ## Use: make -f Makefile.m32 ## ## Comments to: Troy Engel or ## Joern Hartroth ifndef OPENSSL_PATH OPENSSL_PATH = ../../openssl-0.9.7d endif ifndef ZLIB_PATH ZLIB_PATH = ../../zlib-1.2.1 endif CC = gcc AR = ar RM = rm -f RANLIB = ranlib STRIP = strip -g ######################################################## ## Nothing more to do below this line! INCLUDES = -I. -I../include CFLAGS = -g -O2 -DMINGW32 -DBUILDING_LIBCURL -DHAVE_LONGLONG ifdef SSL INCLUDES += -I"$(OPENSSL_PATH)/outinc" -I"$(OPENSSL_PATH)/outinc/openssl" CFLAGS += -DUSE_SSLEAY -DUSE_OPENSSL -DHAVE_OPENSSL_ENGINE_H -DHAVE_OPENSSL_PKCS12_H \ -DHAVE_ENGINE_LOAD_BUILTIN_ENGINES -DOPENSSL_NO_KRB5 \ -DCURL_CA_BUNDLE='getenv("CURL_CA_BUNDLE")' DLL_LIBS = -L$(OPENSSL_PATH)/out -leay32 -lssl32 endif ifdef ZLIB INCLUDES += -I"$(ZLIB_PATH)" CFLAGS += -DHAVE_LIBZ -DHAVE_ZLIB_H DLL_LIBS += -L$(ZLIB_PATH) -lz endif COMPILE = $(CC) $(INCLUDES) $(CFLAGS) # Makefile.inc provides the CSOURCES and HHEADERS defines include Makefile.inc libcurl_a_OBJECTS := $(patsubst %.c,%.o,$(strip $(CSOURCES))) libcurl_a_LIBRARIES = libcurl.a libcurl_a_DEPENDENCIES = $(strip $(CSOURCES) $(HHEADERS)) all: libcurl.a libcurl.dll libcurldll.a libcurl.a: $(libcurl_a_OBJECTS) $(libcurl_a_DEPENDENCIES) $(RM) libcurl.a $(AR) cru libcurl.a $(libcurl_a_OBJECTS) $(RANLIB) libcurl.a $(STRIP) $@ RESOURCE = libcurl.res # remove the last line above to keep debug info libcurl.dll libcurldll.a: $(libcurl_a_OBJECTS) $(RESOURCE) $(RM) $@ $(CC) -s -shared -Wl,--out-implib,libcurldll.a -o libcurl.dll \ $(libcurl_a_OBJECTS) $(RESOURCE) $(DLL_LIBS) -lws2_32 -lwinmm # remove the above '-s' to keep debug info .c.o: $(COMPILE) -c $< libcurl.res: libcurl.rc windres -DCURLDEBUG=0 -O COFF -o $@ -i $^ clean: $(RM) $(libcurl_a_OBJECTS) $(RESOURCE) distrib: clean $(RM) $(libcurl_a_LIBRARIES) criticalmass-1.0.0.orig/curl/lib/Makefile.inc0000644000175000017500000000221710265631023020322 0ustar danieldaniel# ./lib/Makefile.inc CSOURCES = file.c timeval.c base64.c hostip.c progress.c formdata.c \ cookie.c http.c sendf.c ftp.c url.c dict.c if2ip.c speedcheck.c \ ldap.c ssluse.c version.c getenv.c escape.c mprintf.c telnet.c \ netrc.c getinfo.c transfer.c strequal.c easy.c security.c krb4.c \ memdebug.c http_chunks.c strtok.c connect.c llist.c hash.c multi.c \ content_encoding.c share.c http_digest.c md5.c http_negotiate.c \ http_ntlm.c inet_pton.c strtoofft.c strerror.c hostares.c hostasyn.c \ hostip4.c hostip6.c hostsyn.c hostthre.c inet_ntop.c parsedate.c \ select.c gtls.c sslgen.c HHEADERS = arpa_telnet.h netrc.h file.h timeval.h base64.h hostip.h \ progress.h formdata.h cookie.h http.h sendf.h ftp.h url.h dict.h \ if2ip.h speedcheck.h urldata.h ldap.h ssluse.h escape.h telnet.h \ getinfo.h strequal.h krb4.h memdebug.h inet_ntoa_r.h \ http_chunks.h strtok.h connect.h llist.h hash.h content_encoding.h \ share.h md5.h http_digest.h http_negotiate.h http_ntlm.h ca-bundle.h \ inet_pton.h strtoofft.h strerror.h inet_ntop.h curlx.h memory.h \ setup.h transfer.h select.h easyif.h multiif.h parsedate.h sslgen.h \ gtls.h criticalmass-1.0.0.orig/curl/lib/Makefile.vc60000644000175000017500000003710510265631023020253 0ustar danieldaniel############################################################# # # Makefile for building libcurl with MSVC6 # # Usage: see usage message below # Should be invoked from \lib directory # Edit the paths and desired library name # SSL path is only required if you intend compiling # with SSL. # # This make file leaves the result either a .lib or .dll file # in the \lib directory. It should be called from the \lib # directory. # # An option would have been to allow the source directory to # be specified, but I saw no requirement. # # Another option would have been to leave the .lib and .dll # files in the "cfg" directory, but then the make file # in \src would need to be changed. # # $Id: Makefile.vc6,v 1.17 2004/01/13 08:57:01 bagder Exp $ ############################################################## # # Stem for static libs and DLLs # LIB_NAME = libcurl LIB_NAME_DEBUG = libcurld # # Stem for DLL import libs # IMPLIB_NAME = libcurl_imp IMPLIB_NAME_DEBUG = libcurld_imp !IFNDEF OPENSSL_PATH OPENSSL_PATH = ../../openssl-0.9.7e !ENDIF !IFNDEF ZLIB_PATH ZLIB_PATH = ../../zlib-1.2.1 !ENDIF # USE_WINDOWS_SSPI uses windows libraries to allow NTLM authentication # without an openssl installation and offers the ability to authenticate # using the "current logged in user". It does however require that the # Windows SDK be installed. # # If, for some reason the Windows SDK is installed but not installed # in the default location, you can specify WINDOWS_SDK_PATH. # It can be downloaded from: # http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ # USE_WINDOWS_SSPI = 1 !IFDEF WINDOWS_SSPI !IFNDEF WINDOWS_SDK_PATH WINDOWS_SDK_PATH = "C:\Program Files\Microsoft SDK" !ENDIF !ENDIF # Use the high resolution time by default. Comment this out to use low # resolution time and not require winmm.lib USEMM_LIBS = YES ############################################################# ## Nothing more to do below this line! CCNODBG = cl.exe /MD /O2 /DNDEBUG CCDEBUG = cl.exe /MDd /Od /Gm /Zi /D_DEBUG /GZ CFLAGSSSL = /DUSE_SSLEAY /I "$(OPENSSL_PATH)/inc32" /I "$(OPENSSL_PATH)/inc32/openssl" CFLAGSZLIB = /DHAVE_ZLIB_H /DHAVE_ZLIB /DHAVE_LIBZ /I "$(ZLIB_PATH)" CFLAGS = /I. /I../include /nologo /W3 /GX /DWIN32 /YX /FD /c /DBUILDING_LIBCURL CFLAGSLIB = /DCURL_STATICLIB LNKDLL = link.exe /DLL LNKLIB = link.exe /lib LFLAGS = /nologo SSLLIBS = libeay32.lib ssleay32.lib ZLIBLIBSDLL= zdll.lib ZLIBLIBS = zlib.lib !IFDEF USEMM_LIBS WINLIBS = wsock32.lib winmm.lib !ELSE WINLIBS = wsock32.lib CFLAGS = $(CFLAGS) /DWITHOUT_MM_LIB !ENDIF # RSAglue.lib was formerly needed in the SSLLIBS CFGSET = FALSE !IFDEF WINDOWS_SSPI CFLAGS = $(CFLAGS) /DUSE_WINDOWS_SSPI /I$(WINDOWS_SDK_PATH)\include LFLAGS = $(LFLAGS) $(WINDOWS_SDK_PATH)\lib\secur32.lib !ENDIF ###################### # release !IF "$(CFG)" == "release" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-zlib !IF "$(CFG)" == "release-zlib" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-dll !IF "$(CFG)" == "release-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # release-ssl !IF "$(CFG)" == "release-ssl" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LNK = $(LNKLIB) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(CFLAGSSSL) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-ssl-dll !IF "$(CFG)" == "release-ssl-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) /out:$(DIROBJ)\$(TARGET) $(SSLLIBS) $(LFLAGSSSL) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(CFLAGSSSL) CFGSET = TRUE !ENDIF ###################### # release-ssl-zlib !IF "$(CFG)" == "release-ssl-zlib" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-dll-ssl-dll !IF "$(CFG)" == "release-dll-ssl-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(CFLAGSSSL) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # release-zlib-dll !IF "$(CFG)" == "release-zlib-dll" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-ssl-dll-zlib-dll !IF "$(CFG)" == "release-ssl-dll-zlib-dll" TARGET = $(LIB_NAME).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCNODBG) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # release-dll-zlib-dll !IF "$(CFG)" == "release-dll-zlib-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # release-dll-ssl-dll-zlib-dll !IF "$(CFG)" == "release-dll-ssl-dll-zlib-dll" TARGET = $(LIB_NAME).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME).lib CC = $(CCNODBG) $(CFLAGSSSL) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug !IF "$(CFG)" == "debug" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LNK = $(LNKLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl !IF "$(CFG)" == "debug-ssl" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LNK = $(LNKLIB) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(CFLAGSSSL) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-zlib !IF "$(CFG)" == "debug-zlib" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(ZLIBLIBS) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl-dll !IF "$(CFG)" == "debug-ssl-dll" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSSSL = /LIBPATH:$(OPENSSL_PATH)\out32dll LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(CFLAGSSSL) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl-zlib !IF "$(CFG)" == "debug-ssl-zlib" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32" LNK = $(LNKLIB) $(SSLLIBS) $(ZLIBLIBS) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-zlib-dll !IF "$(CFG)" == "debug-zlib-dll" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKLIB) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-ssl-dll-zlib-dll !IF "$(CFG)" == "debug-ssl-dll-zlib-dll" TARGET = $(LIB_NAME_DEBUG).lib DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKLIB) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /out:$(DIROBJ)\$(TARGET) CC = $(CCDEBUG) $(CFLAGSSSL) $(CFLAGSZLIB) $(CFLAGSLIB) CFGSET = TRUE !ENDIF ###################### # debug-dll !IF "$(CFG)" == "debug-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LNK = $(LNKDLL) $(WINLIBS) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug-dll-ssl-dll !IF "$(CFG)" == "debug-dll-ssl-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(LFLAGSSSL) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) $(CFLAGSSSL) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug-dll-zlib-dll !IF "$(CFG)" == "debug-dll-zlib-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LNK = $(LNKDLL) $(WINLIBS) $(ZLIBLIBSDLL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ###################### # debug-dll-ssl-dll-zlib-dll !IF "$(CFG)" == "debug-dll-ssl-dll-zlib-dll" TARGET = $(LIB_NAME_DEBUG).dll DIROBJ = $(CFG) LFLAGSZLIB = "/LIBPATH:$(ZLIB_PATH)" LFLAGSSSL = "/LIBPATH:$(OPENSSL_PATH)\out32dll" LNK = $(LNKDLL) $(WINLIBS) $(SSLLIBS) $(ZLIBLIBSDLL) $(LFLAGSSSL) $(LFLAGSZLIB) /DEBUG /out:$(DIROBJ)\$(TARGET) /IMPLIB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib /PDB:$(DIROBJ)\$(IMPLIB_NAME_DEBUG).pdb CC = $(CCDEBUG) $(CFLAGSSSL) $(CFLAGSZLIB) CFGSET = TRUE RESOURCE = $(DIROBJ)\libcurl.res !ENDIF ####################### # Usage # !IF "$(CFGSET)" == "FALSE" && "$(CFG)" != "" !MESSAGE Usage: nmake /f makefile.vc6 CFG= !MESSAGE where is one of: !MESSAGE release - release static library !MESSAGE release-ssl - release static library with ssl !MESSAGE release-zlib - release static library with zlib !MESSAGE release-ssl-zlib - release static library with ssl and zlib !MESSAGE release-ssl-dll - release static library with dynamic ssl !MESSAGE release-zlib-dll - release static library with dynamic zlib !MESSAGE release-ssl-dll-zlib-dll - release static library with dynamic ssl and dynamic zlib !MESSAGE release-dll - release dynamic library !MESSAGE release-dll-ssl-dll - release dynamic library with dynamic ssl !MESSAGE release-dll-zlib-dll - release dynamic library with dynamic zlib !MESSAGE release-dll-ssl-dll-zlib-dll - release dynamic library with dynamic ssl and dynamic zlib !MESSAGE debug - debug static library !MESSAGE debug-ssl - debug static library with ssl !MESSAGE debug-zlib - debug static library with zlib !MESSAGE debug-ssl-zlib - debug static library with ssl and zlib !MESSAGE debug-ssl-dll - debug static library with dynamic ssl !MESSAGE debug-zlib-dll - debug static library with dynamic zlib !MESSAGE debug-ssl-dll-zlib-dll - debug static library with dynamic ssl and dynamic zlib !MESSAGE debug-dll - debug dynamic library !MESSAGE debug-dll-ssl-dll - debug dynamic library with dynamic ssl !MESSAGE debug-dll-zlib-dll - debug dynamic library with dynamic zlib1 !MESSAGE debug-dll-ssl-dll-zlib-dll - debug dynamic library with dynamic ssl and dynamic zlib !MESSAGE can be left blank in which case all is assumed !ERROR please choose a valid configuration "$(CFG)" !ENDIF ####################### # Only the clean target can be used if a config was not provided. # !IF "$(CFGSET)" == "FALSE" clean: @-erase /s *.dll 2> NUL @-erase /s *.exp 2> NUL @-erase /s *.idb 2> NUL @-erase /s *.lib 2> NUL @-erase /s *.obj 2> NUL @-erase /s *.pch 2> NUL @-erase /s *.pdb 2> NUL @-erase /s *.res 2> NUL !ELSE # A config was provided, so the library can be built. # X_OBJS= \ $(DIROBJ)\base64.obj \ $(DIROBJ)\cookie.obj \ $(DIROBJ)\transfer.obj \ $(DIROBJ)\escape.obj \ $(DIROBJ)\formdata.obj \ $(DIROBJ)\ftp.obj \ $(DIROBJ)\http.obj \ $(DIROBJ)\http_chunks.obj \ $(DIROBJ)\ldap.obj \ $(DIROBJ)\dict.obj \ $(DIROBJ)\telnet.obj \ $(DIROBJ)\parsedate.obj \ $(DIROBJ)\getenv.obj \ $(DIROBJ)\gtls.obj \ $(DIROBJ)\inet_pton.obj \ $(DIROBJ)\hostip.obj \ $(DIROBJ)\hostasyn.obj \ $(DIROBJ)\hostsyn.obj \ $(DIROBJ)\hostares.obj \ $(DIROBJ)\hostthre.obj \ $(DIROBJ)\hostip4.obj \ $(DIROBJ)\hostip6.obj \ $(DIROBJ)\inet_ntop.obj \ $(DIROBJ)\if2ip.obj \ $(DIROBJ)\mprintf.obj \ $(DIROBJ)\netrc.obj \ $(DIROBJ)\progress.obj \ $(DIROBJ)\sendf.obj \ $(DIROBJ)\speedcheck.obj \ $(DIROBJ)\sslgen.obj \ $(DIROBJ)\ssluse.obj \ $(DIROBJ)\timeval.obj \ $(DIROBJ)\url.obj \ $(DIROBJ)\file.obj \ $(DIROBJ)\getinfo.obj \ $(DIROBJ)\version.obj \ $(DIROBJ)\easy.obj \ $(DIROBJ)\strequal.obj \ $(DIROBJ)\strtok.obj \ $(DIROBJ)\strtoofft.obj \ $(DIROBJ)\connect.obj \ $(DIROBJ)\hash.obj \ $(DIROBJ)\llist.obj \ $(DIROBJ)\share.obj \ $(DIROBJ)\multi.obj \ $(DIROBJ)\http_digest.obj \ $(DIROBJ)\http_negotiate.obj \ $(DIROBJ)\http_ntlm.obj \ $(DIROBJ)\md5.obj \ $(DIROBJ)\memdebug.obj \ $(DIROBJ)\strerror.obj \ $(DIROBJ)\select.obj \ $(DIROBJ)\content_encoding.obj \ $(RESOURCE) all : $(TARGET) $(TARGET): $(X_OBJS) $(LNK) $(LFLAGS) $(X_OBJS) -xcopy $(DIROBJ)\$(LIB_NAME).dll . /y -xcopy $(DIROBJ)\$(LIB_NAME).lib . /y -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).dll . /y -xcopy $(DIROBJ)\$(LIB_NAME_DEBUG).lib . /y -xcopy $(DIROBJ)\$(IMPLIB_NAME).lib . /y -xcopy $(DIROBJ)\$(IMPLIB_NAME_DEBUG).lib . /y -xcopy $(DIROBJ)\*.exp . /y -xcopy $(DIROBJ)\*.pdb . /y $(X_OBJS): $(DIROBJ) $(DIROBJ): @if not exist "$(DIROBJ)" mkdir $(DIROBJ) .SUFFIXES: .c .obj .res {.\}.c{$(DIROBJ)\}.obj: $(CC) $(CFLAGS) /Fo"$@" $< debug-dll\libcurl.res \ debug-dll-ssl-dll\libcurl.res \ debug-dll-zlib-dll\libcurl.res \ debug-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc rc /dCURLDEBUG=1 /Fo $@ libcurl.rc release-dll\libcurl.res \ release-dll-ssl-dll\libcurl.res \ release-dll-zlib-dll\libcurl.res \ release-dll-ssl-dll-zlib-dll\libcurl.res: libcurl.rc rc /dCURLDEBUG=0 /Fo $@ libcurl.rc !ENDIF # End of case where a config was provided. criticalmass-1.0.0.orig/curl/lib/select.c0000644000175000017500000001421010265631023017531 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: select.c,v 1.13 2005/04/26 13:08:49 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #ifdef HAVE_SYS_TIME_H #include #endif #ifndef HAVE_SELECT #error "We can't compile without select() support!" #endif #ifdef __BEOS__ /* BeOS has FD_SET defined in socket.h */ #include #endif #include #include "urldata.h" #include "connect.h" #include "select.h" #ifdef WIN32 #define VERIFY_SOCK(x) /* Win-sockets are not in range [0..FD_SETSIZE> */ #else #define VALID_SOCK(s) (((s) >= 0) && ((s) < FD_SETSIZE)) #define VERIFY_SOCK(x) do { \ if(!VALID_SOCK(x)) { \ errno = EINVAL; \ return -1; \ } \ } while(0) #endif /* * This is an internal function used for waiting for read or write * events on single file descriptors. It attempts to replace select() * in order to avoid limits with FD_SETSIZE. * * Return values: * -1 = system call error * 0 = timeout * CSELECT_IN | CSELECT_OUT | CSELECT_ERR */ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms) { #ifdef HAVE_POLL_FINE struct pollfd pfd[2]; int num; int r; int ret; num = 0; if (readfd != CURL_SOCKET_BAD) { pfd[num].fd = readfd; pfd[num].events = POLLIN; num++; } if (writefd != CURL_SOCKET_BAD) { pfd[num].fd = writefd; pfd[num].events = POLLOUT; num++; } do { r = poll(pfd, num, timeout_ms); } while((r == -1) && (errno == EINTR)); if (r < 0) return -1; if (r == 0) return 0; ret = 0; num = 0; if (readfd != CURL_SOCKET_BAD) { if (pfd[num].revents & POLLIN) ret |= CSELECT_IN; if (pfd[num].revents & POLLERR) ret |= CSELECT_ERR; num++; } if (writefd != CURL_SOCKET_BAD) { if (pfd[num].revents & POLLOUT) ret |= CSELECT_OUT; if (pfd[num].revents & POLLERR) ret |= CSELECT_ERR; } return ret; #else struct timeval timeout; fd_set fds_read; fd_set fds_write; fd_set fds_err; curl_socket_t maxfd; int r; int ret; timeout.tv_sec = timeout_ms / 1000; timeout.tv_usec = (timeout_ms % 1000) * 1000; FD_ZERO(&fds_err); maxfd = -1; FD_ZERO(&fds_read); if (readfd != CURL_SOCKET_BAD) { VERIFY_SOCK(readfd); FD_SET(readfd, &fds_read); FD_SET(readfd, &fds_err); maxfd = readfd; } FD_ZERO(&fds_write); if (writefd != CURL_SOCKET_BAD) { VERIFY_SOCK(writefd); FD_SET(writefd, &fds_write); FD_SET(writefd, &fds_err); if (writefd > maxfd) maxfd = writefd; } do { r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, &timeout); } while((r == -1) && (Curl_ourerrno() == EINTR)); if (r < 0) return -1; if (r == 0) return 0; ret = 0; if (readfd != CURL_SOCKET_BAD) { if (FD_ISSET(readfd, &fds_read)) ret |= CSELECT_IN; if (FD_ISSET(readfd, &fds_err)) ret |= CSELECT_ERR; } if (writefd != CURL_SOCKET_BAD) { if (FD_ISSET(writefd, &fds_write)) ret |= CSELECT_OUT; if (FD_ISSET(writefd, &fds_err)) ret |= CSELECT_ERR; } return ret; #endif } /* * This is a wrapper around poll(). If poll() does not exist, then * select() is used instead. An error is returned if select() is * being used and a file descriptor too large for FD_SETSIZE. * * Return values: * -1 = system call error or fd >= FD_SETSIZE * 0 = timeout * 1 = number of structures with non zero revent fields */ int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms) { int r; #ifdef HAVE_POLL_FINE do { r = poll(ufds, nfds, timeout_ms); } while((r == -1) && (errno == EINTR)); #else struct timeval timeout; struct timeval *ptimeout; fd_set fds_read; fd_set fds_write; fd_set fds_err; curl_socket_t maxfd; unsigned int i; FD_ZERO(&fds_read); FD_ZERO(&fds_write); FD_ZERO(&fds_err); maxfd = -1; for (i = 0; i < nfds; i++) { if (ufds[i].fd == CURL_SOCKET_BAD) continue; #ifndef WIN32 /* This is harmless and wrong on Win32 */ if (ufds[i].fd >= FD_SETSIZE) { errno = EINVAL; return -1; } #endif if (ufds[i].fd > maxfd) maxfd = ufds[i].fd; if (ufds[i].events & POLLIN) FD_SET(ufds[i].fd, &fds_read); if (ufds[i].events & POLLOUT) FD_SET(ufds[i].fd, &fds_write); if (ufds[i].events & POLLERR) FD_SET(ufds[i].fd, &fds_err); } if (timeout_ms < 0) { ptimeout = NULL; /* wait forever */ } else { timeout.tv_sec = timeout_ms / 1000; timeout.tv_usec = (timeout_ms % 1000) * 1000; ptimeout = &timeout; } do { r = select((int)maxfd + 1, &fds_read, &fds_write, &fds_err, ptimeout); } while((r == -1) && (Curl_ourerrno() == EINTR)); if (r < 0) return -1; if (r == 0) return 0; r = 0; for (i = 0; i < nfds; i++) { ufds[i].revents = 0; if (ufds[i].fd == CURL_SOCKET_BAD) continue; if (FD_ISSET(ufds[i].fd, &fds_read)) ufds[i].revents |= POLLIN; if (FD_ISSET(ufds[i].fd, &fds_write)) ufds[i].revents |= POLLOUT; if (FD_ISSET(ufds[i].fd, &fds_err)) ufds[i].revents |= POLLERR; if (ufds[i].revents != 0) r++; } #endif return r; } criticalmass-1.0.0.orig/curl/lib/select.h0000644000175000017500000000316310265631023017543 0ustar danieldaniel#ifndef __SELECT_H #define __SELECT_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: select.h,v 1.3 2004/11/19 14:38:02 giva Exp $ ***************************************************************************/ #ifdef HAVE_SYS_POLL_H #include #else #define POLLIN 0x01 #define POLLPRI 0x02 #define POLLOUT 0x04 #define POLLERR 0x08 #define POLLHUP 0x10 #define POLLNVAL 0x20 struct pollfd { curl_socket_t fd; short events; short revents; }; #endif #define CSELECT_IN 0x01 #define CSELECT_OUT 0x02 #define CSELECT_ERR 0x04 int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms); int Curl_poll(struct pollfd ufds[], unsigned int nfds, int timeout_ms); #endif criticalmass-1.0.0.orig/curl/lib/Makefile.netware0000644000175000017500000002663010265631023021223 0ustar danieldaniel################################################################# # ## Makefile for building libcurl.nlm (NetWare version - gnu make) ## Use: make -f Makefile.netware ## ## Comments to: Guenter Knauf # ################################################################# # Edit the path below to point to the base of your Novell NDK. ifndef NDKBASE NDKBASE = c:/novell endif # Edit the path below to point to the base of your Zlib sources. #ZLIB_PATH = ../../zlib-1.2.2 # Edit the path below to point to the base of your OpenSSL package. ifndef OPENSSL_PATH OPENSSL_PATH = ../../openssl-0.9.7g endif ifndef INSTDIR INSTDIR = ../curl-$(LIBCURL_VERSION_STR)-bin-nw endif # Edit the vars below to change NLM target settings. TARGET = libcurl VERSION = $(LIBCURL_VERSION) COPYR = Copyright (C) 1996 - 2005, Daniel Stenberg, DESCR = cURL libcurl $(LIBCURL_VERSION_STR) - http://curl.haxx.se MTSAFE = YES STACK = 64000 SCREEN = none EXPORTS = @libcurl.imp # Edit the var below to point to your lib architecture. ifndef LIBARCH LIBARCH = LIBC endif # must be equal to DEBUG or NDEBUG DB = NDEBUG # DB = DEBUG # DB = CURLDEBUG # Optimization: -O or debugging: -g ifeq ($(DB),NDEBUG) OPT = -O2 OBJDIR = release else OPT = -g OBJDIR = debug endif # Include the version info retrieved from curlver.h -include $(OBJDIR)/version.inc # The following line defines your compiler. ifdef METROWERKS CC = mwccnlm else CC = gcc endif YACC = bison -y CP = cp -afv # RM = rm -f # if you want to mark the target as MTSAFE you will need a tool for # generating the xdc data for the linker; here's a minimal tool: # http://www.gknw.com/development/prgtools/mkxdc.zip MPKXDC = mkxdc # Global flags for all compilers CFLAGS = $(OPT) -D$(DB) -DNETWARE -DHAVE_CONFIG_H -nostdinc ifeq ($(CC),mwccnlm) LD = mwldnlm LDFLAGS = -nostdlib $(PRELUDE) $(OBJL) -o $(TARGET).nlm -commandfile AR = mwldnlm ARFLAGS = -type library -w nocmdline $(OBJS) -o CFLAGS += -msgstyle gcc -gccinc -inline off -opt nointrinsics -proc 586 CFLAGS += -relax_pointers #CFLAGS += -w on ifeq ($(LIBARCH),LIBC) PRELUDE = $(SDK_LIBC)/imports/libcpre.o CFLAGS += -align 4 else PRELUDE = "$(METROWERKS)/Novell Support/libraries/runtime/prelude.obj" # CFLAGS += -include "$(METROWERKS)/Novell Support/headers/nlm_prefix.h" CFLAGS += -align 1 endif else LD = nlmconv LDFLAGS = -T AR = ar ARFLAGS = -cq CFLAGS += -fno-builtin -fpack-struct -fpcc-struct-return -fno-strict-aliasing CFLAGS += -Wall # -pedantic ifeq ($(LIBARCH),LIBC) PRELUDE = $(SDK_LIBC)/imports/libcpre.gcc.o else PRELUDE = $(SDK_CLIB)/imports/clibpre.gcc.o CFLAGS += -include $(NDKBASE)/nlmconv/genlm.h endif endif LDLIBS = NDK_ROOT = $(NDKBASE)/ndk SDK_CLIB = $(NDK_ROOT)/nwsdk SDK_LIBC = $(NDK_ROOT)/libc SDK_LDAP = $(NDK_ROOT)/cldapsdk/netware INCLUDES = -I. -I../include ifdef WITH_ARES INCLUDES += -I../ares LIBCARES = ../ares/libcares.lib endif ifdef ZLIB_PATH INCLUDES += -I$(ZLIB_PATH) IMPORTS = @$(ZLIB_PATH)/nw/zlib.imp MODULES = libz.nlm endif ifdef SSL INCLUDES += -I$(OPENSSL_PATH)/outinc_nw_libc -I$(OPENSSL_PATH)/outinc_nw_libc/openssl LIBSSL = $(OPENSSL_PATH)/out_nw_libc/crypto.lib $(OPENSSL_PATH)/out_nw_libc/ssl.lib endif ifeq ($(LIBARCH),LIBC) INCLUDES += -I$(SDK_LIBC)/include -I$(SDK_LIBC)/include/nks INCLUDES += -I$(SDK_LIBC)/include/winsock # INCLUDES += -I$(SDK_LDAP)/libc/inc CFLAGS += -D_POSIX_SOURCE # CFLAGS += -D__ANSIC__ else INCLUDES += -I$(SDK_CLIB)/include/nlm -I$(SDK_CLIB)/include # INCLUDES += -I$(SDK_CLIB)/include/nlm/obsolete # INCLUDES += -I$(SDK_LDAP)/clib/inc CFLAGS += -DNETDB_USE_INTERNET endif CFLAGS += $(INCLUDES) ifeq ($(MTSAFE),YES) XDCOPT = -n endif ifeq ($(MTSAFE),NO) XDCOPT = -u endif ifdef XDCOPT XDCDATA = $(OBJDIR)/$(TARGET).xdc endif ifeq ($(findstring linux,$(OSTYPE)),linux) DL = ' #-include $(NDKBASE)/nlmconv/ncpfs.inc endif # Makefile.inc provides the CSOURCES and HHEADERS defines include Makefile.inc OBJS := $(patsubst %.c,$(OBJDIR)/%.o,$(strip $(CSOURCES))) $(LIBCARES) $(LIBSSL) OBJL = $(OBJS) $(OBJDIR)/nwlib.o all: lib nlm nlm: prebuild $(TARGET).nlm lib: prebuild $(TARGET).lib prebuild: $(OBJDIR) $(OBJDIR)/version.inc config.h ca-bundle.h $(OBJDIR)/%.o: %.c # @echo Compiling $< $(CC) $(CFLAGS) -c $< -o $@ $(OBJDIR)/version.inc: ../include/curl/curlver.h $(OBJDIR) @echo Creating $@ @awk -f ../packages/NetWare/get_ver.awk $< > $@ dist: all -$(RM) $(OBJDIR)/*.o $(OBJDIR)/$(TARGET).map $(OBJDIR)/$(TARGET).ncv -$(RM) $(OBJDIR)/$(TARGET).def $(OBJDIR)/version.inc $(XDCDATA) install: $(INSTDIR) all @$(CP) $(TARGET).nlm $(INSTDIR) @$(CP) $(TARGET).lib $(INSTDIR) @$(CP) ../CHANGES $(INSTDIR) @$(CP) ../COPYING $(INSTDIR) @$(CP) ../README $(INSTDIR) @$(CP) ../RELEASE-NOTES $(INSTDIR) clean: -$(RM) config.h ca-bundle.h -$(RM) -r $(OBJDIR) $(INSTDIR): @mkdir $(INSTDIR) $(OBJDIR): @mkdir $(OBJDIR) $(TARGET).lib: $(OBJS) @echo Creating $@ @-$(RM) $@ @$(AR) $(ARFLAGS) $@ $^ $(TARGET).nlm: $(OBJDIR)/$(TARGET).def $(OBJL) $(XDCDATA) @echo Linking $@ @-$(RM) $@ @$(LD) $(LDFLAGS) $< $(OBJDIR)/%.xdc: Makefile.netware @echo Creating $@ @$(MPKXDC) $(XDCOPT) $@ $(OBJDIR)/%.def: Makefile.netware @echo $(DL)# DEF file for linking with $(LD)$(DL) > $@ @echo $(DL)# Do not edit this file - it is created by make!$(DL) >> $@ @echo $(DL)# All your changes will be lost!!$(DL) >> $@ @echo $(DL)#$(DL) >> $@ @echo $(DL)copyright "$(COPYR)"$(DL) >> $@ @echo $(DL)description "$(DESCR)"$(DL) >> $@ @echo $(DL)version $(VERSION)$(DL) >> $@ ifdef NLMTYPE @echo $(DL)type $(NLMTYPE)$(DL) >> $@ endif ifdef STACK @echo $(DL)stack $(STACK)$(DL) >> $@ endif ifdef SCREEN @echo $(DL)screenname "$(SCREEN)"$(DL) >> $@ else @echo $(DL)screenname "DEFAULT"$(DL) >> $@ endif ifeq ($(DB),DEBUG) @echo $(DL)debug$(DL) >> $@ endif @echo $(DL)threadname "$(TARGET)"$(DL) >> $@ ifdef XDCDATA @echo $(DL)xdcdata $(XDCDATA)$(DL) >> $@ endif ifeq ($(LIBARCH),CLIB) @echo $(DL)start _Prelude$(DL) >> $@ @echo $(DL)exit _Stop$(DL) >> $@ @echo $(DL)import @$(SDK_CLIB)/imports/clib.imp$(DL) >> $@ @echo $(DL)import @$(SDK_CLIB)/imports/threads.imp$(DL) >> $@ @echo $(DL)import @$(SDK_CLIB)/imports/nlmlib.imp$(DL) >> $@ @echo $(DL)import @$(SDK_CLIB)/imports/socklib.imp$(DL) >> $@ # @echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapsdk.imp$(DL) >> $@ # @echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapssl.imp$(DL) >> $@ # @echo $(DL)import @$(SDK_LDAP)/clib/imports/ldapx.imp$(DL) >> $@ @echo $(DL)module clib$(DL) >> $@ else @echo $(DL)flag_on 64$(DL) >> $@ @echo $(DL)pseudopreemption$(DL) >> $@ @echo $(DL)start _LibCPrelude$(DL) >> $@ @echo $(DL)exit _LibCPostlude$(DL) >> $@ @echo $(DL)check _LibCCheckUnload$(DL) >> $@ @echo $(DL)import @$(SDK_LIBC)/imports/libc.imp$(DL) >> $@ @echo $(DL)import @$(SDK_LIBC)/imports/netware.imp$(DL) >> $@ # @echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapsdk.imp$(DL) >> $@ # @echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapssl.imp$(DL) >> $@ # @echo $(DL)import @$(SDK_LDAP)/libc/imports/lldapx.imp$(DL) >> $@ @echo $(DL)module libc$(DL) >> $@ endif ifdef MODULES @echo $(DL)module $(MODULES)$(DL) >> $@ endif ifdef EXPORTS @echo $(DL)export $(EXPORTS)$(DL) >> $@ endif ifdef IMPORTS @echo $(DL)import $(IMPORTS)$(DL) >> $@ endif ifeq ($(LD),nlmconv) ifdef WITH_ARES @echo $(DL)input $(LIBCARES)$(DL) >> $@ endif ifdef SSL @echo $(DL)input $(LIBSSL)$(DL) >> $@ endif @echo $(DL)input $(OBJL)$(DL) >> $@ @echo $(DL)input $(PRELUDE)$(DL) >> $@ @echo $(DL)output $(TARGET).nlm$(DL) >> $@ endif config.h: Makefile.netware @echo Creating $@ @echo $(DL)/* $@ for NetWare target.$(DL) > $@ @echo $(DL)** Do not edit this file - it is created by make!$(DL) >> $@ @echo $(DL)** All your changes will be lost!!$(DL) >> $@ @echo $(DL)*/$(DL) >> $@ @echo $(DL)#define OS "i586-pc-NetWare"$(DL) >> $@ @echo $(DL)#define VERSION "$(LIBCURL_VERSION_STR)"$(DL) >> $@ @echo $(DL)#define PACKAGE_BUGREPORT "curl-bug@haxx.se"$(DL) >> $@ @echo $(DL)#define HAVE_ARPA_INET_H 1$(DL) >> $@ @echo $(DL)#define HAVE_ASSERT_H 1$(DL) >> $@ @echo $(DL)#define HAVE_DLFCN_H 1$(DL) >> $@ @echo $(DL)#define HAVE_DLOPEN 1$(DL) >> $@ @echo $(DL)#define HAVE_ERR_H 1$(DL) >> $@ @echo $(DL)#define HAVE_FCNTL_H 1$(DL) >> $@ @echo $(DL)#define HAVE_FIONBIO 1$(DL) >> $@ @echo $(DL)#define HAVE_GETHOSTBYADDR 1$(DL) >> $@ @echo $(DL)#define HAVE_GETTIMEOFDAY 1$(DL) >> $@ @echo $(DL)#define HAVE_INET_ADDR 1$(DL) >> $@ @echo $(DL)#define HAVE_INET_NTOA 1$(DL) >> $@ @echo $(DL)#define HAVE_INET_PTON 1$(DL) >> $@ @echo $(DL)#define HAVE_INTTYPES_H 1$(DL) >> $@ @echo $(DL)#define HAVE_LIMITS_H 1$(DL) >> $@ @echo $(DL)#define HAVE_LONGLONG 1$(DL) >> $@ @echo $(DL)#define HAVE_MALLOC_H 1$(DL) >> $@ @echo $(DL)#define HAVE_NETINET_IN_H 1$(DL) >> $@ @echo $(DL)#define HAVE_SELECT 1$(DL) >> $@ @echo $(DL)#define HAVE_SETJMP_H 1$(DL) >> $@ @echo $(DL)#define HAVE_SIGNAL 1$(DL) >> $@ @echo $(DL)#define HAVE_SOCKET 1$(DL) >> $@ @echo $(DL)#define HAVE_STDINT_H 1$(DL) >> $@ @echo $(DL)#define HAVE_STDLIB_H 1$(DL) >> $@ @echo $(DL)#define HAVE_STRCASECMP 1$(DL) >> $@ @echo $(DL)#define HAVE_STRDUP 1$(DL) >> $@ @echo $(DL)#define HAVE_STRFTIME 1$(DL) >> $@ @echo $(DL)#define HAVE_STRING_H 1$(DL) >> $@ @echo $(DL)#define HAVE_STRLCAT 1$(DL) >> $@ @echo $(DL)#define HAVE_STRLCPY 1$(DL) >> $@ @echo $(DL)#define HAVE_STRSTR 1$(DL) >> $@ @echo $(DL)#define HAVE_SYS_PARAM_H 1$(DL) >> $@ @echo $(DL)#define HAVE_SYS_SELECT_H 1$(DL) >> $@ @echo $(DL)#define HAVE_SYS_STAT_H 1$(DL) >> $@ @echo $(DL)#define HAVE_SYS_TIME_H 1$(DL) >> $@ @echo $(DL)#define HAVE_TERMIOS_H 1$(DL) >> $@ @echo $(DL)#define HAVE_TIME_H 1$(DL) >> $@ @echo $(DL)#define HAVE_UNAME 1$(DL) >> $@ @echo $(DL)#define HAVE_UNISTD_H 1$(DL) >> $@ @echo $(DL)#define RETSIGTYPE void$(DL) >> $@ @echo $(DL)#define SIZEOF_CURL_OFF_T 4$(DL) >> $@ @echo $(DL)#define STDC_HEADERS 1$(DL) >> $@ @echo $(DL)#define TIME_WITH_SYS_TIME 1$(DL) >> $@ ifdef DISABLE_LDAP @echo $(DL)#define CURL_DISABLE_LDAP 1$(DL) >> $@ else @echo $(DL)#define DL_LDAP_FILE "lldapsdk.nlm"$(DL) >> $@ endif ifdef ENABLE_IPV6 @echo $(DL)#define ENABLE_IPV6 1$(DL) >> $@ endif ifdef NW_WINSOCK @echo $(DL)#define HAVE_CLOSESOCKET 1$(DL) >> $@ else @echo $(DL)#define HAVE_SYS_TYPES_H 1$(DL) >> $@ @echo $(DL)#define HAVE_SYS_SOCKET_H 1$(DL) >> $@ @echo $(DL)#define HAVE_SYS_SOCKIO_H 1$(DL) >> $@ @echo $(DL)#define HAVE_NETDB_H 1$(DL) >> $@ endif ifdef WITH_ARES @echo $(DL)#define USE_ARES 1$(DL) >> $@ endif ifdef ZLIB_PATH @echo $(DL)#define HAVE_ZLIB_H 1$(DL) >> $@ @echo $(DL)#define HAVE_LIBZ 1$(DL) >> $@ endif ifdef SSL @echo $(DL)#define USE_SSLEAY 1$(DL) >> $@ @echo $(DL)#define USE_OPENSSL 1$(DL) >> $@ @echo $(DL)#define HAVE_OPENSSL_X509_H 1$(DL) >> $@ @echo $(DL)#define HAVE_OPENSSL_SSL_H 1$(DL) >> $@ @echo $(DL)#define HAVE_OPENSSL_RSA_H 1$(DL) >> $@ @echo $(DL)#define HAVE_OPENSSL_PEM_H 1$(DL) >> $@ @echo $(DL)#define HAVE_OPENSSL_ERR_H 1$(DL) >> $@ @echo $(DL)#define HAVE_OPENSSL_CRYPTO_H 1$(DL) >> $@ @echo $(DL)#define HAVE_OPENSSL_ENGINE_H 1$(DL) >> $@ @echo $(DL)#define HAVE_LIBSSL 1$(DL) >> $@ @echo $(DL)#define HAVE_LIBCRYPTO 1$(DL) >> $@ @echo $(DL)#define OPENSSL_NO_KRB5 1$(DL) >> $@ endif ifdef OLD_NOVELLSDK @echo $(DL)#define socklen_t int$(DL) >> $@ endif ca-bundle.h: Makefile.netware @echo Creating $@ @echo $(DL)/* Do not edit this file - it is created by make!$(DL) > $@ @echo $(DL)** All your changes will be lost!!$(DL) >> $@ @echo $(DL)*/$(DL) >> $@ @echo $(DL)#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")$(DL) >> $@ url.c: ca-bundle.h $(LIBCARES): $(MAKE) -C ../ares -f Makefile.netware lib criticalmass-1.0.0.orig/curl/lib/config-riscos.h0000644000175000017500000002357510265631023021042 0ustar danieldaniel/* config.h.in. Generated automatically from configure.in by autoheader. */ /* Name of this package! */ #undef PACKAGE /* Version number of this archive. */ #undef VERSION /* Define if you have the getpass function. */ #undef HAVE_GETPASS /* Define cpu-machine-OS */ #define OS "ARM-RISC OS" /* Define if you have the gethostbyaddr_r() function with 5 arguments */ #undef HAVE_GETHOSTBYADDR_R_5 /* Define if you have the gethostbyaddr_r() function with 7 arguments */ #undef HAVE_GETHOSTBYADDR_R_7 /* Define if you have the gethostbyaddr_r() function with 8 arguments */ #undef HAVE_GETHOSTBYADDR_R_8 /* Define if you have the gethostbyname_r() function with 3 arguments */ #undef HAVE_GETHOSTBYNAME_R_3 /* Define if you have the gethostbyname_r() function with 5 arguments */ #undef HAVE_GETHOSTBYNAME_R_5 /* Define if you have the gethostbyname_r() function with 6 arguments */ #undef HAVE_GETHOSTBYNAME_R_6 /* Define if you have the inet_ntoa_r function declared. */ #undef HAVE_INET_NTOA_R_DECL /* Define if you need the _REENTRANT define for some functions */ #undef NEED_REENTRANT /* Define if you have the Kerberos4 libraries (including -ldes) */ #undef HAVE_KRB4 /* Define if you want to enable IPv6 support */ #undef ENABLE_IPV6 /* Define this to 'int' if ssize_t is not an available typedefed type */ #undef ssize_t /* Define this to 'int' if socklen_t is not an available typedefed type */ #undef socklen_t /* Define this as a suitable file to read random data from */ #undef RANDOM_FILE /* Define this to your Entropy Gathering Daemon socket pathname */ #undef EGD_SOCKET /* Set to explicitly specify we don't want to use thread-safe functions */ #define DISABLED_THREADSAFE /* Define if you want to enable IPv6 support */ #undef ENABLE_IPV6 /* Define if you have the header file. */ #define HAVE_ALLOCA_H /* Define if you have the header file. */ #define HAVE_ARPA_INET_H /* Define if you have the `closesocket' function. */ #undef HAVE_CLOSESOCKET /* Define if you have the header file. */ #undef HAVE_CRYPTO_H /* Define if you have the header file. */ #undef HAVE_DES_H /* Define if you have the header file. */ #undef HAVE_DLFCN_H /* Define if you have the `dlopen' function. */ #undef HAVE_DLOPEN /* Define if you have the header file. */ #undef HAVE_ERR_H /* Define if you have the header file. */ #define HAVE_FCNTL_H /* Define if getaddrinfo exists and works */ #define HAVE_GETADDRINFO /* Define if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define if you have the `gethostbyaddr' function. */ #define HAVE_GETHOSTBYADDR /* Define if you have the `gethostbyaddr_r' function. */ #undef HAVE_GETHOSTBYADDR_R /* Define if you have the `gethostbyname_r' function. */ #undef HAVE_GETHOSTBYNAME_R /* Define if you have the `gethostname' function. */ #define HAVE_GETHOSTNAME /* Define if you have the header file. */ #define HAVE_GETOPT_H /* Define if you have the `getpass_r' function. */ #undef HAVE_GETPASS_R /* Define if you have the `getpwuid' function. */ #undef HAVE_GETPWUID /* Define if you have the `getservbyname' function. */ #undef HAVE_GETSERVBYNAME /* Define if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY /* Define if you have the `inet_addr' function. */ #undef HAVE_INET_ADDR /* Define if you have the `inet_ntoa' function. */ #undef HAVE_INET_NTOA /* Define if you have the `inet_ntoa_r' function. */ #undef HAVE_INET_NTOA_R /* Define if you have the header file. */ #define HAVE_INTTYPES_H /* Define if you have the header file. */ #define HAVE_IO_H /* Define if you have the `krb_get_our_ip_for_realm' function. */ #undef HAVE_KRB_GET_OUR_IP_FOR_REALM /* Define if you have the header file. */ #undef HAVE_KRB_H /* Define if you have the `crypto' library (-lcrypto). */ #undef HAVE_LIBCRYPTO /* Define if you have the `dl' library (-ldl). */ #undef HAVE_LIBDL /* Define if you have the `nsl' library (-lnsl). */ #undef HAVE_LIBNSL /* Define if you have the `resolv' library (-lresolv). */ #undef HAVE_LIBRESOLV /* Define if you have the `resolve' library (-lresolve). */ #undef HAVE_LIBRESOLVE /* Define if you have the `socket' library (-lsocket). */ #undef HAVE_LIBSOCKET /* Define if you have the `ssl' library (-lssl). */ #undef HAVE_LIBSSL /* Define if you have the `ucb' library (-lucb). */ #undef HAVE_LIBUCB /* Define if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define if you have the header file. */ #define HAVE_MALLOC_H /* Define if you have the header file. */ #undef HAVE_MEMORY_H /* Define if you have the header file. */ #define HAVE_NETDB_H /* Define if you have the header file. */ #undef HAVE_NETINET_IF_ETHER_H /* Define if you have the header file. */ #define HAVE_NETINET_IN_H /* Define if you have the header file. */ #define HAVE_NET_IF_H /* Define if you have the header file. */ #undef HAVE_OPENSSL_CRYPTO_H /* Define if you have the header file. */ #undef HAVE_OPENSSL_ERR_H /* Define if you have the header file. */ #undef HAVE_OPENSSL_PEM_H /* Define if you have the header file. */ #undef HAVE_OPENSSL_RSA_H /* Define if you have the header file. */ #undef HAVE_OPENSSL_SSL_H /* Define if you have the header file. */ #undef HAVE_OPENSSL_X509_H /* Define if you have the header file. */ #undef HAVE_PEM_H /* Define if you have the `perror' function. */ #undef HAVE_PERROR /* Define if you have the header file. */ #undef HAVE_PWD_H /* Define if you have the `RAND_egd' function. */ #undef HAVE_RAND_EGD /* Define if you have the `RAND_screen' function. */ #undef HAVE_RAND_SCREEN /* Define if you have the `RAND_status' function. */ #undef HAVE_RAND_STATUS /* Define if you have the header file. */ #undef HAVE_RSA_H /* Define if you have the `select' function. */ #define HAVE_SELECT /* Define if you have the `setvbuf' function. */ #undef HAVE_SETVBUF /* Define if you have the header file. */ #define HAVE_SGTTY_H /* Define if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define if you have the `signal' function. */ #define HAVE_SIGNAL /* Define if you have the `socket' function. */ #define HAVE_SOCKET /* Define if you have the header file. */ #undef HAVE_SSL_H /* Define if you have the header file. */ #undef HAVE_STDINT_H /* Define if you have the header file. */ #define HAVE_STDLIB_H /* Define if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define if you have the `strcmpi' function. */ #undef HAVE_STRCMPI /* Define if you have the `strdup' function. */ #define HAVE_STRDUP /* Define if you have the `strftime' function. */ #define HAVE_STRFTIME /* Define if you have the `stricmp' function. */ #define HAVE_STRICMP /* Define if you have the header file. */ #undef HAVE_STRINGS_H /* Define if you have the header file. */ #define HAVE_STRING_H /* Define if you have the `strlcat' function. */ #undef HAVE_STRLCAT /* Define if you have the `strlcpy' function. */ #undef HAVE_STRLCPY /* Define if you have the `strstr' function. */ #define HAVE_STRSTR /* Define if you have the `strtok_r' function. */ #undef HAVE_STRTOK_R /* Define if you have the `strtoll' function. */ #undef HAVE_STRTOLL /* Define if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define if you have the header file. */ #undef HAVE_SYS_SELECT_H /* Define if you have the header file. */ #define HAVE_SYS_SOCKET_H /* Define if you have the header file. */ #undef HAVE_SYS_SOCKIO_H /* Define if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define if you have the header file. */ #define HAVE_SYS_TIME_H /* Define if you have the header file. */ #define HAVE_SYS_TYPES_H /* Define if you have the `tcgetattr' function. */ #define HAVE_TCGETATTR /* Define if you have the `tcsetattr' function. */ #define HAVE_TCSETATTR /* Define if you have the header file. */ #define HAVE_TERMIOS_H /* Define if you have the header file. */ #undef HAVE_TERMIO_H /* Define if you have the header file. */ #undef HAVE_TIME_H /* Define if you have the `uname' function. */ #define HAVE_UNAME /* Define if you have the header file. */ #define HAVE_UNISTD_H /* Define if you have the header file. */ #undef HAVE_WINSOCK_H /* Define if you have the header file. */ #undef HAVE_X509_H /* Name of package */ #undef PACKAGE /* Define as the return type of signal handlers (`int' or `void'). */ #define RETSIGTYPE void /* The size of a `long double', as computed by sizeof. */ #undef SIZEOF_LONG_DOUBLE /* The size of a `long long', as computed by sizeof. */ #undef SIZEOF_LONG_LONG /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* Version number of package */ #undef VERSION /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `unsigned' if does not define. */ #undef size_t /* type to use in place of socklen_t if not defined */ #undef socklen_t /* Define to `int' if does not define. */ #undef ssize_t /* this is a quick hack. I hope it's correct. */ #define ifr_dstaddr ifr_addr #define IOCTL_3_ARGS #define HAVE_FIONBIO /* to disable LDAP */ #define CURL_DISABLE_LDAP criticalmass-1.0.0.orig/curl/lib/content_encoding.c0000644000175000017500000002701510265631023021601 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: content_encoding.c,v 1.21 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifdef HAVE_LIBZ #include #include #include "urldata.h" #include #include "sendf.h" #include "content_encoding.h" #include "memory.h" #include "memdebug.h" /* Comment this out if zlib is always going to be at least ver. 1.2.0.4 (doing so will reduce code size slightly). */ #define OLD_ZLIB_SUPPORT 1 #define DSIZ 0x10000 /* buffer size for decompressed data */ #define GZIP_MAGIC_0 0x1f #define GZIP_MAGIC_1 0x8b /* gzip flag byte */ #define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */ #define HEAD_CRC 0x02 /* bit 1 set: header CRC present */ #define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */ #define ORIG_NAME 0x08 /* bit 3 set: original file name present */ #define COMMENT 0x10 /* bit 4 set: file comment present */ #define RESERVED 0xE0 /* bits 5..7: reserved */ enum zlibState { ZLIB_UNINIT, /* uninitialized */ ZLIB_INIT, /* initialized */ ZLIB_GZIP_HEADER, /* reading gzip header */ ZLIB_GZIP_INFLATING, /* inflating gzip stream */ ZLIB_INIT_GZIP /* initialized in transparent gzip mode */ }; static CURLcode process_zlib_error(struct SessionHandle *data, z_stream *z) { if (z->msg) failf (data, "Error while processing content unencoding: %s", z->msg); else failf (data, "Error while processing content unencoding: " "Unknown failure within decompression software."); return CURLE_BAD_CONTENT_ENCODING; } static CURLcode exit_zlib(z_stream *z, bool *zlib_init, CURLcode result) { inflateEnd(z); *zlib_init = ZLIB_UNINIT; return result; } static CURLcode inflate_stream(struct SessionHandle *data, struct Curl_transfer_keeper *k) { z_stream *z = &k->z; /* zlib state structure */ int status; /* zlib status */ CURLcode result = CURLE_OK; /* Curl_client_write status */ char *decomp; /* Put the decompressed data here. */ /* Dynamically allocate a buffer for decompression because it's uncommonly large to hold on the stack */ decomp = (char*)malloc(DSIZ); if (decomp == NULL) { return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY); } /* because the buffer size is fixed, iteratively decompress and transfer to the client via client_write. */ for (;;) { /* (re)set buffer for decompressed output for every iteration */ z->next_out = (Bytef *)decomp; z->avail_out = DSIZ; status = inflate(z, Z_SYNC_FLUSH); if (status == Z_OK || status == Z_STREAM_END) { if(DSIZ - z->avail_out) { result = Curl_client_write(data, CLIENTWRITE_BODY, decomp, DSIZ - z->avail_out); /* if !CURLE_OK, clean up, return */ if (result) { free(decomp); return exit_zlib(z, &k->zlib_init, result); } } /* Done? clean up, return */ if (status == Z_STREAM_END) { free(decomp); if (inflateEnd(z) == Z_OK) return exit_zlib(z, &k->zlib_init, result); else return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z)); } /* Done with these bytes, exit */ if (status == Z_OK && z->avail_in == 0) { free(decomp); return result; } } else { /* Error; exit loop, handle below */ free(decomp); return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z)); } } /* Will never get here */ } CURLcode Curl_unencode_deflate_write(struct SessionHandle *data, struct Curl_transfer_keeper *k, ssize_t nread) { z_stream *z = &k->z; /* zlib state structure */ /* Initialize zlib? */ if (k->zlib_init == ZLIB_UNINIT) { z->zalloc = (alloc_func)Z_NULL; z->zfree = (free_func)Z_NULL; z->opaque = 0; z->next_in = NULL; z->avail_in = 0; if (inflateInit(z) != Z_OK) return process_zlib_error(data, z); k->zlib_init = ZLIB_INIT; } /* Set the compressed input when this function is called */ z->next_in = (Bytef *)k->str; z->avail_in = (uInt)nread; /* Now uncompress the data */ return inflate_stream(data, k); } #ifdef OLD_ZLIB_SUPPORT /* Skip over the gzip header */ static enum { GZIP_OK, GZIP_BAD, GZIP_UNDERFLOW } check_gzip_header(unsigned char const *data, ssize_t len, ssize_t *headerlen) { int method, flags; const ssize_t totallen = len; /* The shortest header is 10 bytes */ if (len < 10) return GZIP_UNDERFLOW; if ((data[0] != GZIP_MAGIC_0) || (data[1] != GZIP_MAGIC_1)) return GZIP_BAD; method = data[2]; flags = data[3]; if (method != Z_DEFLATED || (flags & RESERVED) != 0) { /* Can't handle this compression method or unknown flag */ return GZIP_BAD; } /* Skip over time, xflags, OS code and all previous bytes */ len -= 10; data += 10; if (flags & EXTRA_FIELD) { ssize_t extra_len; if (len < 2) return GZIP_UNDERFLOW; extra_len = (data[1] << 8) | data[0]; if (len < (extra_len+2)) return GZIP_UNDERFLOW; len -= (extra_len + 2); data += (extra_len + 2); } if (flags & ORIG_NAME) { /* Skip over NUL-terminated file name */ while (len && *data) { --len; ++data; } if (!len || *data) return GZIP_UNDERFLOW; /* Skip over the NUL */ --len; ++data; } if (flags & COMMENT) { /* Skip over NUL-terminated comment */ while (len && *data) { --len; ++data; } if (!len || *data) return GZIP_UNDERFLOW; /* Skip over the NUL */ --len; ++data; } if (flags & HEAD_CRC) { if (len < 2) return GZIP_UNDERFLOW; len -= 2; data += 2; } *headerlen = totallen - len; return GZIP_OK; } #endif CURLcode Curl_unencode_gzip_write(struct SessionHandle *data, struct Curl_transfer_keeper *k, ssize_t nread) { z_stream *z = &k->z; /* zlib state structure */ /* Initialize zlib? */ if (k->zlib_init == ZLIB_UNINIT) { z->zalloc = (alloc_func)Z_NULL; z->zfree = (free_func)Z_NULL; z->opaque = 0; z->next_in = NULL; z->avail_in = 0; if (strcmp(zlibVersion(), "1.2.0.4") >= 0) { /* zlib ver. >= 1.2.0.4 supports transparent gzip decompressing */ if (inflateInit2(z, MAX_WBITS+32) != Z_OK) { return process_zlib_error(data, z); } k->zlib_init = ZLIB_INIT_GZIP; /* Transparent gzip decompress state */ } else { /* we must parse the gzip header ourselves */ if (inflateInit2(z, -MAX_WBITS) != Z_OK) { return process_zlib_error(data, z); } k->zlib_init = ZLIB_INIT; /* Initial call state */ } } if (k->zlib_init == ZLIB_INIT_GZIP) { /* Let zlib handle the gzip decompression entirely */ z->next_in = (Bytef *)k->str; z->avail_in = (uInt)nread; /* Now uncompress the data */ return inflate_stream(data, k); } #ifndef OLD_ZLIB_SUPPORT /* Support for old zlib versions is compiled away and we are running with an old version, so return an error. */ return exit_zlib(z, &k->zlib_init, CURLE_FUNCTION_NOT_FOUND); #else /* This next mess is to get around the potential case where there isn't * enough data passed in to skip over the gzip header. If that happens, we * malloc a block and copy what we have then wait for the next call. If * there still isn't enough (this is definitely a worst-case scenario), we * make the block bigger, copy the next part in and keep waiting. * * This is only required with zlib versions < 1.2.0.4 as newer versions * can handle the gzip header themselves. */ switch (k->zlib_init) { /* Skip over gzip header? */ case ZLIB_INIT: { /* Initial call state */ ssize_t hlen; switch (check_gzip_header((unsigned char *)k->str, nread, &hlen)) { case GZIP_OK: z->next_in = (Bytef *)k->str + hlen; z->avail_in = (uInt)(nread - hlen); k->zlib_init = ZLIB_GZIP_INFLATING; /* Inflating stream state */ break; case GZIP_UNDERFLOW: /* We need more data so we can find the end of the gzip header. It's * possible that the memory block we malloc here will never be freed if * the transfer abruptly aborts after this point. Since it's unlikely * that circumstances will be right for this code path to be followed in * the first place, and it's even more unlikely for a transfer to fail * immediately afterwards, it should seldom be a problem. */ z->avail_in = (uInt)nread; z->next_in = malloc(z->avail_in); if (z->next_in == NULL) { return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY); } memcpy(z->next_in, k->str, z->avail_in); k->zlib_init = ZLIB_GZIP_HEADER; /* Need more gzip header data state */ /* We don't have any data to inflate yet */ return CURLE_OK; case GZIP_BAD: default: return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z)); } } break; case ZLIB_GZIP_HEADER: { /* Need more gzip header data state */ ssize_t hlen; unsigned char *oldblock = z->next_in; z->avail_in += nread; z->next_in = realloc(z->next_in, z->avail_in); if (z->next_in == NULL) { free(oldblock); return exit_zlib(z, &k->zlib_init, CURLE_OUT_OF_MEMORY); } /* Append the new block of data to the previous one */ memcpy(z->next_in + z->avail_in - nread, k->str, nread); switch (check_gzip_header(z->next_in, z->avail_in, &hlen)) { case GZIP_OK: /* This is the zlib stream data */ free(z->next_in); /* Don't point into the malloced block since we just freed it */ z->next_in = (Bytef *)k->str + hlen + nread - z->avail_in; z->avail_in = (uInt)(z->avail_in - hlen); k->zlib_init = ZLIB_GZIP_INFLATING; /* Inflating stream state */ break; case GZIP_UNDERFLOW: /* We still don't have any data to inflate! */ return CURLE_OK; case GZIP_BAD: default: free(z->next_in); return exit_zlib(z, &k->zlib_init, process_zlib_error(data, z)); } } break; case ZLIB_GZIP_INFLATING: default: /* Inflating stream state */ z->next_in = (Bytef *)k->str; z->avail_in = (uInt)nread; break; } if (z->avail_in == 0) { /* We don't have any data to inflate; wait until next time */ return CURLE_OK; } /* We've parsed the header, now uncompress the data */ return inflate_stream(data, k); #endif } #endif /* HAVE_LIBZ */ criticalmass-1.0.0.orig/curl/lib/content_encoding.h0000644000175000017500000000320010265631023021574 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: content_encoding.h,v 1.8 2004/08/16 13:24:01 bagder Exp $ ***************************************************************************/ #include "setup.h" /* * Comma-separated list all supported Content-Encodings ('identity' is implied) */ #ifdef HAVE_LIBZ #define ALL_CONTENT_ENCODINGS "deflate, gzip" #else #define ALL_CONTENT_ENCODINGS "identity" #endif CURLcode Curl_unencode_deflate_write(struct SessionHandle *data, struct Curl_transfer_keeper *k, ssize_t nread); CURLcode Curl_unencode_gzip_write(struct SessionHandle *data, struct Curl_transfer_keeper *k, ssize_t nread); criticalmass-1.0.0.orig/curl/lib/sslgen.c0000644000175000017500000003234110265631023017552 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: sslgen.c,v 1.5 2005/05/05 06:04:00 bagder Exp $ ***************************************************************************/ /* This file is for "generic" SSL functions that all libcurl internals should use. It is responsible for calling the proper 'ossl' function in ssluse.c (OpenSSL based) or the 'gtsl' function in gtsl.c (GnuTLS based). SSL-functions in libcurl should call functions in this source file, and not to any specific SSL-layer. Curl_ssl_ - prefix for generic ones Curl_ossl_ - prefix for OpenSSL ones Curl_gtls_ - prefix for GnuTLS ones "SSL/TLS Strong Encryption: An Introduction" http://httpd.apache.org/docs-2.0/ssl/ssl_intro.html */ #include "setup.h" #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #include "urldata.h" #define SSLGEN_C #include "sslgen.h" /* generic SSL protos etc */ #include "ssluse.h" /* OpenSSL versions */ #include "gtls.h" /* GnuTLS versions */ #include "sendf.h" #include "strequal.h" #include "url.h" #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /* "global" init done? */ static bool init_ssl=FALSE; static bool safe_strequal(char* str1, char* str2); static bool safe_strequal(char* str1, char* str2) { if(str1 && str2) /* both pointers point to something then compare them */ return strequal(str1, str2); else /* if both pointers are NULL then treat them as equal */ return (!str1 && !str2); } bool Curl_ssl_config_matches(struct ssl_config_data* data, struct ssl_config_data* needle) { if((data->version == needle->version) && (data->verifypeer == needle->verifypeer) && (data->verifyhost == needle->verifyhost) && safe_strequal(data->CApath, needle->CApath) && safe_strequal(data->CAfile, needle->CAfile) && safe_strequal(data->random_file, needle->random_file) && safe_strequal(data->egdsocket, needle->egdsocket) && safe_strequal(data->cipher_list, needle->cipher_list)) return TRUE; return FALSE; } bool Curl_clone_ssl_config(struct ssl_config_data *source, struct ssl_config_data *dest) { dest->verifyhost = source->verifyhost; dest->verifypeer = source->verifypeer; dest->version = source->version; if(source->CAfile) { dest->CAfile = strdup(source->CAfile); if(!dest->CAfile) return FALSE; } if(source->CApath) { dest->CApath = strdup(source->CApath); if(!dest->CApath) return FALSE; } if(source->cipher_list) { dest->cipher_list = strdup(source->cipher_list); if(!dest->cipher_list) return FALSE; } if(source->egdsocket) { dest->egdsocket = strdup(source->egdsocket); if(!dest->egdsocket) return FALSE; } if(source->random_file) { dest->random_file = strdup(source->random_file); if(!dest->random_file) return FALSE; } return TRUE; } void Curl_free_ssl_config(struct ssl_config_data* sslc) { if(sslc->CAfile) free(sslc->CAfile); if(sslc->CApath) free(sslc->CApath); if(sslc->cipher_list) free(sslc->cipher_list); if(sslc->egdsocket) free(sslc->egdsocket); if(sslc->random_file) free(sslc->random_file); } /** * Global SSL init * * @retval 0 error initializing SSL * @retval 1 SSL initialized successfully */ int Curl_ssl_init(void) { /* make sure this is only done once */ if(init_ssl) return 1; init_ssl = TRUE; /* never again */ #ifdef USE_SSLEAY return Curl_ossl_init(); #else #ifdef USE_GNUTLS return Curl_gtls_init(); #else /* no SSL support */ return 1; #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ } /* Global cleanup */ void Curl_ssl_cleanup(void) { if(init_ssl) { /* only cleanup if we did a previous init */ #ifdef USE_SSLEAY Curl_ossl_cleanup(); #else #ifdef USE_GNUTLS Curl_gtls_cleanup(); #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ init_ssl = FALSE; } } CURLcode Curl_ssl_connect(struct connectdata *conn, int sockindex) { #ifdef USE_SSL /* mark this is being ssl enabled from here on. */ conn->ssl[sockindex].use = TRUE; #ifdef USE_SSLEAY return Curl_ossl_connect(conn, sockindex); #else #ifdef USE_GNUTLS return Curl_gtls_connect(conn, sockindex); #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ #else /* without SSL */ (void)conn; (void)sockindex; return CURLE_OK; #endif /* USE_SSL */ } #ifdef USE_SSL /* * Check if there's a session ID for the given connection in the cache, and if * there's one suitable, it is provided. Returns TRUE when no entry matched. */ int Curl_ssl_getsessionid(struct connectdata *conn, void **ssl_sessionid, size_t *idsize) /* set 0 if unknown */ { struct curl_ssl_session *check; struct SessionHandle *data = conn->data; long i; for(i=0; i< data->set.ssl.numsessions; i++) { check = &data->state.session[i]; if(!check->sessionid) /* not session ID means blank entry */ continue; if(curl_strequal(conn->host.name, check->name) && (conn->remote_port == check->remote_port) && Curl_ssl_config_matches(&conn->ssl_config, &check->ssl_config)) { /* yes, we have a session ID! */ data->state.sessionage++; /* increase general age */ check->age = data->state.sessionage; /* set this as used in this age */ *ssl_sessionid = check->sessionid; if(idsize) *idsize = check->idsize; return FALSE; } } *ssl_sessionid = NULL; return TRUE; } /* * Kill a single session ID entry in the cache. */ static int kill_session(struct curl_ssl_session *session) { if(session->sessionid) { /* defensive check */ /* free the ID the SSL-layer specific way */ #ifdef USE_SSLEAY Curl_ossl_session_free(session->sessionid); #else Curl_gtls_session_free(session->sessionid); #endif session->sessionid=NULL; session->age = 0; /* fresh */ Curl_free_ssl_config(&session->ssl_config); Curl_safefree(session->name); session->name = NULL; /* no name */ return 0; /* ok */ } else return 1; } /* * Store session id in the session cache. The ID passed on to this function * must already have been extracted and allocated the proper way for the SSL * layer. Curl_XXXX_session_free() will be called to free/kill the session ID * later on. */ CURLcode Curl_ssl_addsessionid(struct connectdata *conn, void *ssl_sessionid, size_t idsize) { int i; struct SessionHandle *data=conn->data; /* the mother of all structs */ struct curl_ssl_session *store = &data->state.session[0]; long oldest_age=data->state.session[0].age; /* zero if unused */ char *clone_host; clone_host = strdup(conn->host.name); if(!clone_host) return CURLE_OUT_OF_MEMORY; /* bail out */ /* Now we should add the session ID and the host name to the cache, (remove the oldest if necessary) */ /* find an empty slot for us, or find the oldest */ for(i=1; (iset.ssl.numsessions) && data->state.session[i].sessionid; i++) { if(data->state.session[i].age < oldest_age) { oldest_age = data->state.session[i].age; store = &data->state.session[i]; } } if(i == data->set.ssl.numsessions) /* cache is full, we must "kill" the oldest entry! */ kill_session(store); else store = &data->state.session[i]; /* use this slot */ /* now init the session struct wisely */ store->sessionid = ssl_sessionid; store->idsize = idsize; store->age = data->state.sessionage; /* set current age */ store->name = clone_host; /* clone host name */ store->remote_port = conn->remote_port; /* port number */ if (!Curl_clone_ssl_config(&conn->ssl_config, &store->ssl_config)) return CURLE_OUT_OF_MEMORY; return CURLE_OK; } #endif void Curl_ssl_close_all(struct SessionHandle *data) { #ifdef USE_SSL int i; /* kill the session ID cache */ if(data->state.session) { for(i=0; i< data->set.ssl.numsessions; i++) /* the single-killer function handles empty table slots */ kill_session(&data->state.session[i]); /* free the cache data */ free(data->state.session); data->state.session = NULL; } #ifdef USE_SSLEAY Curl_ossl_close_all(data); #else #ifdef USE_GNUTLS Curl_gtls_close_all(data); #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ #else /* USE_SSL */ (void)data; #endif /* USE_SSL */ } void Curl_ssl_close(struct connectdata *conn) { if(conn->ssl[FIRSTSOCKET].use) { #ifdef USE_SSLEAY Curl_ossl_close(conn); #else #ifdef USE_GNUTLS Curl_gtls_close(conn); #else (void)conn; #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ } } /* Selects an (Open)SSL crypto engine */ CURLcode Curl_ssl_set_engine(struct SessionHandle *data, const char *engine) { #ifdef USE_SSLEAY return Curl_ossl_set_engine(data, engine); #else #ifdef USE_GNUTLS /* FIX: add code here */ (void)data; (void)engine; return CURLE_FAILED_INIT; #else /* no SSL layer */ (void)data; (void)engine; return CURLE_FAILED_INIT; #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ } /* Selects an (Open?)SSL crypto engine */ CURLcode Curl_ssl_set_engine_default(struct SessionHandle *data) { #ifdef USE_SSLEAY return Curl_ossl_set_engine_default(data); #else #ifdef USE_GNUTLS /* FIX: add code here */ (void)data; return CURLE_FAILED_INIT; #else /* No SSL layer */ (void)data; return CURLE_FAILED_INIT; #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ } /* Return list of OpenSSL crypto engine names. */ struct curl_slist *Curl_ssl_engines_list(struct SessionHandle *data) { #ifdef USE_SSLEAY return Curl_ossl_engines_list(data); #else #ifdef USE_GNUTLS /* FIX: add code here? */ (void)data; return NULL; #else (void)data; return NULL; #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ } /* return number of sent (non-SSL) bytes */ int Curl_ssl_send(struct connectdata *conn, int sockindex, void *mem, size_t len) { #ifdef USE_SSLEAY return Curl_ossl_send(conn, sockindex, mem, len); #else #ifdef USE_GNUTLS return Curl_gtls_send(conn, sockindex, mem, len); #else (void)conn; (void)sockindex; (void)mem; (void)len; return 0; #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ } /* return number of received (decrypted) bytes */ /* * If the read would block (EWOULDBLOCK) we return -1. Otherwise we return * a regular CURLcode value. */ int Curl_ssl_recv(struct connectdata *conn, /* connection data */ int sockindex, /* socketindex */ char *mem, /* store read data here */ size_t len) /* max amount to read */ { #ifdef USE_SSL ssize_t nread; bool block = FALSE; #ifdef USE_SSLEAY nread = Curl_ossl_recv(conn, sockindex, mem, len, &block); #else #ifdef USE_GNUTLS nread = Curl_gtls_recv(conn, sockindex, mem, len, &block); #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ if(nread == -1) { infof(conn->data, "Curl_xxx_rcvs returned -1, block = %s\n", block?"TRUE":"FALSE"); if(!block) return 0; /* this is a true error, not EWOULDBLOCK */ else return -1; } return (int)nread; #else /* USE_SSL */ (void)conn; (void)sockindex; (void)mem; (void)len; return 0; #endif /* USE_SSL */ } /* * This sets up a session ID cache to the specified size. Make sure this code * is agnostic to what underlying SSL technology we use. */ CURLcode Curl_ssl_initsessions(struct SessionHandle *data, long amount) { #ifdef USE_SSL struct curl_ssl_session *session; if(data->state.session) /* this is just a precaution to prevent multiple inits */ return CURLE_OK; session = (struct curl_ssl_session *) calloc(sizeof(struct curl_ssl_session), amount); if(!session) return CURLE_OUT_OF_MEMORY; /* store the info in the SSL section */ data->set.ssl.numsessions = amount; data->state.session = session; data->state.sessionage = 1; /* this is brand new */ #else /* without SSL, do nothing */ (void)data; (void)amount; #endif return CURLE_OK; } size_t Curl_ssl_version(char *buffer, size_t size) { #ifdef USE_SSLEAY return Curl_ossl_version(buffer, size); #else #ifdef USE_GNUTLS return Curl_gtls_version(buffer, size); #else (void)buffer; (void)size; return 0; /* no SSL support */ #endif /* USE_GNUTLS */ #endif /* USE_SSLEAY */ } criticalmass-1.0.0.orig/curl/lib/sslgen.h0000644000175000017500000000602610265631023017560 0ustar danieldaniel#ifndef __SSLGEN_H #define __SSLGEN_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: sslgen.h,v 1.1 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ bool Curl_ssl_config_matches(struct ssl_config_data* data, struct ssl_config_data* needle); bool Curl_clone_ssl_config(struct ssl_config_data* source, struct ssl_config_data* dest); void Curl_free_ssl_config(struct ssl_config_data* sslc); int Curl_ssl_init(void); void Curl_ssl_cleanup(void); CURLcode Curl_ssl_connect(struct connectdata *conn, int sockindex); void Curl_ssl_close(struct connectdata *conn); /* tell the SSL stuff to close down all open information regarding connections (and thus session ID caching etc) */ void Curl_ssl_close_all(struct SessionHandle *data); CURLcode Curl_ssl_set_engine(struct SessionHandle *data, const char *engine); /* Sets engine as default for all SSL operations */ CURLcode Curl_ssl_set_engine_default(struct SessionHandle *data); int Curl_ssl_send(struct connectdata *conn, int sockindex, void *mem, size_t len); int Curl_ssl_recv(struct connectdata *conn, /* connection data */ int sockindex, /* socketindex */ char *mem, /* store read data here */ size_t len); /* max amount to read */ /* init the SSL session ID cache */ CURLcode Curl_ssl_initsessions(struct SessionHandle *, long); /* extract a session ID */ int Curl_ssl_getsessionid(struct connectdata *conn, void **ssl_sessionid, size_t *idsize) /* set 0 if unknown */; /* add a new session ID */ CURLcode Curl_ssl_addsessionid(struct connectdata *conn, void *ssl_sessionid, size_t idsize); struct curl_slist *Curl_ssl_engines_list(struct SessionHandle *data); size_t Curl_ssl_version(char *buffer, size_t size); #if !defined(USE_SSL) && !defined(SSLGEN_C) /* set up blank macros for none-SSL builds */ #define Curl_ssl_close_all(x) #endif #endif criticalmass-1.0.0.orig/curl/lib/hostares.c0000644000175000017500000002106610265631023020111 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostares.c,v 1.14 2005/04/19 23:19:23 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototypes */ #endif #ifdef HAVE_UNISTD_H #include /* for the close() proto */ #endif #ifdef VMS #include #include #include #endif #endif #ifdef HAVE_SETJMP_H #include #endif #ifdef WIN32 #include #endif #if (defined(NETWARE) && defined(__NOVELL_LIBC__)) #undef in_addr_t #define in_addr_t unsigned long #endif #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "hash.h" #include "share.h" #include "strerror.h" #include "url.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /*********************************************************************** * Only for ares-enabled builds **********************************************************************/ #ifdef CURLRES_ARES /* * Curl_resolv_fdset() is called when someone from the outside world (using * curl_multi_fdset()) wants to get our fd_set setup and we're talking with * ares. The caller must make sure that this function is only called when we * have a working ares channel. * * Returns: CURLE_OK always! */ CURLcode Curl_resolv_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp) { int max = ares_fds(conn->data->state.areschannel, read_fd_set, write_fd_set); *max_fdp = max; return CURLE_OK; } /* * Curl_is_resolved() is called repeatedly to check if a previous name resolve * request has completed. It should also make sure to time-out if the * operation seems to take too long. * * Returns normal CURLcode errors. */ CURLcode Curl_is_resolved(struct connectdata *conn, struct Curl_dns_entry **dns) { fd_set read_fds, write_fds; struct timeval tv={0,0}; struct SessionHandle *data = conn->data; int nfds; FD_ZERO(&read_fds); FD_ZERO(&write_fds); nfds = ares_fds(data->state.areschannel, &read_fds, &write_fds); (void)select(nfds, &read_fds, &write_fds, NULL, (struct timeval *)&tv); /* Call ares_process() unconditonally here, even if we simply timed out above, as otherwise the ares name resolve won't timeout! */ ares_process(data->state.areschannel, &read_fds, &write_fds); *dns = NULL; if(conn->async.done) { /* we're done, kill the ares handle */ if(!conn->async.dns) { failf(data, "Could not resolve host: %s (%s)", conn->host.dispname, ares_strerror(conn->async.status)); return CURLE_COULDNT_RESOLVE_HOST; } *dns = conn->async.dns; } return CURLE_OK; } /* * Curl_wait_for_resolv() waits for a resolve to finish. This function should * be avoided since using this risk getting the multi interface to "hang". * * If 'entry' is non-NULL, make it point to the resolved dns entry * * Returns CURLE_COULDNT_RESOLVE_HOST if the host was not resolved, and * CURLE_OPERATION_TIMEDOUT if a time-out occurred. */ CURLcode Curl_wait_for_resolv(struct connectdata *conn, struct Curl_dns_entry **entry) { CURLcode rc=CURLE_OK; struct SessionHandle *data = conn->data; long timeout = CURL_TIMEOUT_RESOLVE; /* default name resolve timeout */ /* now, see if there's a connect timeout or a regular timeout to use instead of the default one */ if(conn->data->set.connecttimeout) timeout = conn->data->set.connecttimeout; else if(conn->data->set.timeout) timeout = conn->data->set.timeout; /* We convert the number of seconds into number of milliseconds here: */ if(timeout < 2147483) /* maximum amount of seconds that can be multiplied with 1000 and still fit within 31 bits */ timeout *= 1000; else timeout = 0x7fffffff; /* ridiculous amount of time anyway */ /* Wait for the name resolve query to complete. */ while (1) { int nfds=0; fd_set read_fds, write_fds; struct timeval *tvp, tv, store; int count; struct timeval now = Curl_tvnow(); long timediff; store.tv_sec = (int)timeout/1000; store.tv_usec = (timeout%1000)*1000; FD_ZERO(&read_fds); FD_ZERO(&write_fds); nfds = ares_fds(data->state.areschannel, &read_fds, &write_fds); if (nfds == 0) /* no file descriptors means we're done waiting */ break; tvp = ares_timeout(data->state.areschannel, &store, &tv); count = select(nfds, &read_fds, &write_fds, NULL, tvp); if (count < 0 && errno != EINVAL) break; ares_process(data->state.areschannel, &read_fds, &write_fds); timediff = Curl_tvdiff(Curl_tvnow(), now); /* spent time */ timeout -= timediff?timediff:1; /* always deduct at least 1 */ if (timeout < 0) { /* our timeout, so we cancel the ares operation */ ares_cancel(data->state.areschannel); break; } } /* Operation complete, if the lookup was successful we now have the entry in the cache. */ if(entry) *entry = conn->async.dns; if(!conn->async.dns) { /* a name was not resolved */ if((timeout < 0) || (conn->async.status == ARES_ETIMEOUT)) { failf(data, "Resolving host timed out: %s", conn->host.dispname); rc = CURLE_OPERATION_TIMEDOUT; } else if(conn->async.done) { failf(data, "Could not resolve host: %s (%s)", conn->host.dispname, ares_strerror(conn->async.status)); rc = CURLE_COULDNT_RESOLVE_HOST; } else rc = CURLE_OPERATION_TIMEDOUT; /* close the connection, since we can't return failure here without cleaning up this connection properly */ conn->bits.close = TRUE; } return rc; } /* * Curl_getaddrinfo() - when using ares * * Returns name information about the given hostname and port number. If * successful, the 'hostent' is returned and the forth argument will point to * memory we need to free after use. That memory *MUST* be freed with * Curl_freeaddrinfo(), nothing else. */ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn, char *hostname, int port, int *waitp) { char *bufp; struct SessionHandle *data = conn->data; in_addr_t in = inet_addr(hostname); *waitp = FALSE; if (in != CURL_INADDR_NONE) { /* This is a dotted IP address 123.123.123.123-style */ return Curl_ip2addr(in, hostname, port); } bufp = strdup(hostname); if(bufp) { Curl_safefree(conn->async.hostname); conn->async.hostname = bufp; conn->async.port = port; conn->async.done = FALSE; /* not done */ conn->async.status = 0; /* clear */ conn->async.dns = NULL; /* clear */ /* areschannel is already setup in the Curl_open() function */ ares_gethostbyname(data->state.areschannel, hostname, PF_INET, (ares_host_callback)Curl_addrinfo4_callback, conn); *waitp = TRUE; /* please wait for the response */ } return NULL; /* no struct yet */ } #endif /* CURLRES_ARES */ criticalmass-1.0.0.orig/curl/lib/hostasyn.c0000644000175000017500000001161010265631023020123 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostasyn.c,v 1.11 2005/04/19 23:19:23 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototypes */ #endif #ifdef HAVE_UNISTD_H #include /* for the close() proto */ #endif #ifdef VMS #include #include #include #endif #endif #ifdef HAVE_SETJMP_H #include #endif #ifdef WIN32 #include #endif #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "hash.h" #include "share.h" #include "strerror.h" #include "url.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /*********************************************************************** * Only for builds using asynchronous name resolves **********************************************************************/ #ifdef CURLRES_ASYNCH /* * addrinfo_callback() gets called by ares, gethostbyname_thread() or * getaddrinfo_thread() when we got the name resolved (or not!). * * If the status argument is CURL_ASYNC_SUCCESS, we might need to copy the * address field since it might be freed when this function returns. This * operation stores the resolved data in the DNS cache. * * NOTE: for IPv6 operations, Curl_addrinfo_copy() returns the same * pointer it is given as argument! * * The storage operation locks and unlocks the DNS cache. */ static CURLcode addrinfo_callback(void *arg, /* "struct connectdata *" */ int status, void *addr) { struct connectdata *conn = (struct connectdata *)arg; struct Curl_dns_entry *dns = NULL; CURLcode rc = CURLE_OK; conn->async.status = status; if(CURL_ASYNC_SUCCESS == status) { /* * IPv4: Curl_addrinfo_copy() copies the address and returns an allocated * version. * * IPv6: Curl_addrinfo_copy() returns the input pointer! */ Curl_addrinfo *ai = Curl_addrinfo_copy(addr, conn->async.port); if(ai) { struct SessionHandle *data = conn->data; if(data->share) Curl_share_lock(data, CURL_LOCK_DATA_DNS, CURL_LOCK_ACCESS_SINGLE); dns = Curl_cache_addr(data, ai, conn->async.hostname, conn->async.port); if(!dns) { /* failed to store, cleanup and return error */ Curl_freeaddrinfo(ai); rc = CURLE_OUT_OF_MEMORY; } if(data->share) Curl_share_unlock(data, CURL_LOCK_DATA_DNS); } else rc = CURLE_OUT_OF_MEMORY; } conn->async.dns = dns; /* Set async.done TRUE last in this function since it may be used multi- threaded and once this is TRUE the other thread may read fields from the async struct */ conn->async.done = TRUE; /* ipv4: The input hostent struct will be freed by ares when we return from this function */ return rc; } CURLcode Curl_addrinfo4_callback(void *arg, /* "struct connectdata *" */ int status, struct hostent *hostent) { return addrinfo_callback(arg, status, hostent); } #ifdef CURLRES_IPV6 CURLcode Curl_addrinfo6_callback(void *arg, /* "struct connectdata *" */ int status, struct addrinfo *ai) { return addrinfo_callback(arg, status, ai); } #endif #endif /* CURLRES_ASYNC */ criticalmass-1.0.0.orig/curl/lib/ssluse.c0000644000175000017500000014136110265631023017600 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: ssluse.c,v 1.134 2005/04/13 06:52:03 bagder Exp $ ***************************************************************************/ /* * Source file for all OpenSSL-specific code for the TLS/SSL layer. No code * but sslgen.c should ever call or use these functions. */ /* * The original SSLeay-using code for curl was written by Linas Vepstas and * Sampo Kellomaki 1998. */ #include "setup.h" #include #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #include "urldata.h" #include "sendf.h" #include "formdata.h" /* for the boundary function */ #include "url.h" /* for the ssl config check function */ #include "inet_pton.h" #include "ssluse.h" #include "connect.h" /* Curl_ourerrno() proto */ #include "strequal.h" #include "select.h" #include "sslgen.h" #define _MPRINTF_REPLACE /* use the internal *printf() functions */ #include #ifdef USE_SSLEAY #ifdef USE_OPENSSL #include #include #else #include #include #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" #ifndef min #define min(a, b) ((a) < (b) ? (a) : (b)) #endif #if OPENSSL_VERSION_NUMBER >= 0x0090581fL #define HAVE_SSL_GET1_SESSION 1 #else #undef HAVE_SSL_GET1_SESSION #endif #if OPENSSL_VERSION_NUMBER >= 0x00904100L #define HAVE_USERDATA_IN_PWD_CALLBACK 1 #else #undef HAVE_USERDATA_IN_PWD_CALLBACK #endif #if OPENSSL_VERSION_NUMBER >= 0x00907001L /* ENGINE_load_private_key() takes four arguments */ #define HAVE_ENGINE_LOAD_FOUR_ARGS #else /* ENGINE_load_private_key() takes three arguments */ #undef HAVE_ENGINE_LOAD_FOUR_ARGS #endif #if (OPENSSL_VERSION_NUMBER >= 0x00903001L) && defined(HAVE_OPENSSL_PKCS12_H) /* OpenSSL has PKCS 12 support */ #define HAVE_PKCS12_SUPPORT #else /* OpenSSL/SSLEay does not have PKCS12 support */ #undef HAVE_PKCS12_SUPPORT #endif #if OPENSSL_VERSION_NUMBER >= 0x00906001L #define HAVE_ERR_ERROR_STRING_N 1 #endif /* * Number of bytes to read from the random number seed file. This must be * a finite value (because some entropy "files" like /dev/urandom have * an infinite length), but must be large enough to provide enough * entopy to properly seed OpenSSL's PRNG. */ #define RAND_LOAD_LENGTH 1024 #ifndef HAVE_USERDATA_IN_PWD_CALLBACK static char global_passwd[64]; #endif static int passwd_callback(char *buf, int num, int verify #if HAVE_USERDATA_IN_PWD_CALLBACK /* This was introduced in 0.9.4, we can set this using SSL_CTX_set_default_passwd_cb_userdata() */ , void *global_passwd #endif ) { if(verify) fprintf(stderr, "%s\n", buf); else { if(num > (int)strlen((char *)global_passwd)) { strcpy(buf, global_passwd); return (int)strlen(buf); } } return 0; } /* * rand_enough() is a function that returns TRUE if we have seeded the random * engine properly. We use some preprocessor magic to provide a seed_enough() * macro to use, just to prevent a compiler warning on this function if we * pass in an argument that is never used. */ #ifdef HAVE_RAND_STATUS #define seed_enough(x) rand_enough() static bool rand_enough(void) { return RAND_status()?TRUE:FALSE; } #else #define seed_enough(x) rand_enough(x) static bool rand_enough(int nread) { /* this is a very silly decision to make */ return (nread > 500)?TRUE:FALSE; } #endif static int random_the_seed(struct SessionHandle *data) { char *buf = data->state.buffer; /* point to the big buffer */ int nread=0; /* Q: should we add support for a random file name as a libcurl option? A: Yes, it is here */ #ifndef RANDOM_FILE /* if RANDOM_FILE isn't defined, we only perform this if an option tells us to! */ if(data->set.ssl.random_file) #define RANDOM_FILE "" /* doesn't matter won't be used */ #endif { /* let the option override the define */ nread += RAND_load_file((data->set.ssl.random_file? data->set.ssl.random_file:RANDOM_FILE), RAND_LOAD_LENGTH); if(seed_enough(nread)) return nread; } #if defined(HAVE_RAND_EGD) /* only available in OpenSSL 0.9.5 and later */ /* EGD_SOCKET is set at configure time or not at all */ #ifndef EGD_SOCKET /* If we don't have the define set, we only do this if the egd-option is set */ if(data->set.ssl.egdsocket) #define EGD_SOCKET "" /* doesn't matter won't be used */ #endif { /* If there's an option and a define, the option overrides the define */ int ret = RAND_egd(data->set.ssl.egdsocket? data->set.ssl.egdsocket:EGD_SOCKET); if(-1 != ret) { nread += ret; if(seed_enough(nread)) return nread; } } #endif /* If we get here, it means we need to seed the PRNG using a "silly" approach! */ #ifdef HAVE_RAND_SCREEN /* This one gets a random value by reading the currently shown screen */ RAND_screen(); nread = 100; /* just a value */ #else { int len; char *area; /* Changed call to RAND_seed to use the underlying RAND_add implementation * directly. Do this in a loop, with the amount of additional entropy * being dependent upon the algorithm used by Curl_FormBoundary(): N bytes * of a 7-bit ascii set. -- Richard Gorton, March 11 2003. */ do { area = Curl_FormBoundary(); if(!area) return 3; /* out of memory */ len = (int)strlen(area); RAND_add(area, len, (len >> 1)); free(area); /* now remove the random junk */ } while (!RAND_status()); } #endif /* generates a default path for the random seed file */ buf[0]=0; /* blank it first */ RAND_file_name(buf, BUFSIZE); if(buf[0]) { /* we got a file name to try */ nread += RAND_load_file(buf, RAND_LOAD_LENGTH); if(seed_enough(nread)) return nread; } infof(data, "libcurl is now using a weak random seed!\n"); return nread; } #ifndef SSL_FILETYPE_ENGINE #define SSL_FILETYPE_ENGINE 42 #endif #ifndef SSL_FILETYPE_PKCS12 #define SSL_FILETYPE_PKCS12 43 #endif static int do_file_type(const char *type) { if(!type || !type[0]) return SSL_FILETYPE_PEM; if(curl_strequal(type, "PEM")) return SSL_FILETYPE_PEM; if(curl_strequal(type, "DER")) return SSL_FILETYPE_ASN1; if(curl_strequal(type, "ENG")) return SSL_FILETYPE_ENGINE; if(curl_strequal(type, "P12")) return SSL_FILETYPE_PKCS12; return -1; } static int cert_stuff(struct connectdata *conn, SSL_CTX* ctx, char *cert_file, const char *cert_type, char *key_file, const char *key_type) { struct SessionHandle *data = conn->data; int file_type; if(cert_file != NULL) { SSL *ssl; X509 *x509; int cert_done = 0; if(data->set.key_passwd) { #ifndef HAVE_USERDATA_IN_PWD_CALLBACK /* * If password has been given, we store that in the global * area (*shudder*) for a while: */ size_t len = strlen(data->set.key_passwd); if(len < sizeof(global_passwd)) memcpy(global_passwd, data->set.key_passwd, len+1); #else /* * We set the password in the callback userdata */ SSL_CTX_set_default_passwd_cb_userdata(ctx, data->set.key_passwd); #endif /* Set passwd callback: */ SSL_CTX_set_default_passwd_cb(ctx, passwd_callback); } file_type = do_file_type(cert_type); #define SSL_CLIENT_CERT_ERR \ "unable to use client certificate (no key found or wrong pass phrase?)" switch(file_type) { case SSL_FILETYPE_PEM: /* SSL_CTX_use_certificate_chain_file() only works on PEM files */ if(SSL_CTX_use_certificate_chain_file(ctx, cert_file) != 1) { failf(data, SSL_CLIENT_CERT_ERR); return 0; } break; case SSL_FILETYPE_ASN1: /* SSL_CTX_use_certificate_file() works with either PEM or ASN1, but we use the case above for PEM so this can only be performed with ASN1 files. */ if(SSL_CTX_use_certificate_file(ctx, cert_file, file_type) != 1) { failf(data, SSL_CLIENT_CERT_ERR); return 0; } break; case SSL_FILETYPE_ENGINE: failf(data, "file type ENG for certificate not implemented"); return 0; case SSL_FILETYPE_PKCS12: { #ifdef HAVE_PKCS12_SUPPORT FILE *f; PKCS12 *p12; EVP_PKEY *pri; f = fopen(cert_file,"rb"); if (!f) { failf(data, "could not open PKCS12 file '%s'", cert_file); return 0; } p12 = d2i_PKCS12_fp(f, NULL); fclose(f); PKCS12_PBE_add(); if (!PKCS12_parse(p12, data->set.key_passwd, &pri, &x509, NULL)) { failf(data, "could not parse PKCS12 file, check password, OpenSSL error %s", ERR_error_string(ERR_get_error(), NULL) ); return 0; } PKCS12_free(p12); if(SSL_CTX_use_certificate(ctx, x509) != 1) { failf(data, SSL_CLIENT_CERT_ERR); EVP_PKEY_free(pri); X509_free(x509); return 0; } if(SSL_CTX_use_PrivateKey(ctx, pri) != 1) { failf(data, "unable to use private key from PKCS12 file '%s'", cert_file); EVP_PKEY_free(pri); X509_free(x509); return 0; } EVP_PKEY_free(pri); X509_free(x509); cert_done = 1; break; #else failf(data, "file type P12 for certificate not supported"); return 0; #endif } default: failf(data, "not supported file type '%s' for certificate", cert_type); return 0; } file_type = do_file_type(key_type); switch(file_type) { case SSL_FILETYPE_PEM: if(cert_done) break; if(key_file == NULL) /* cert & key can only be in PEM case in the same file */ key_file=cert_file; case SSL_FILETYPE_ASN1: if(SSL_CTX_use_PrivateKey_file(ctx, key_file, file_type) != 1) { failf(data, "unable to set private key file: '%s' type %s\n", key_file, key_type?key_type:"PEM"); return 0; } break; case SSL_FILETYPE_ENGINE: #ifdef HAVE_OPENSSL_ENGINE_H { /* XXXX still needs some work */ EVP_PKEY *priv_key = NULL; if(conn && conn->data && conn->data->state.engine) { #ifdef HAVE_ENGINE_LOAD_FOUR_ARGS UI_METHOD *ui_method = UI_OpenSSL(); #endif if(!key_file || !key_file[0]) { failf(data, "no key set to load from crypto engine\n"); return 0; } /* the typecast below was added to please mingw32 */ priv_key = (EVP_PKEY *) ENGINE_load_private_key(conn->data->state.engine,key_file, #ifdef HAVE_ENGINE_LOAD_FOUR_ARGS ui_method, #endif data->set.key_passwd); if(!priv_key) { failf(data, "failed to load private key from crypto engine\n"); return 0; } if(SSL_CTX_use_PrivateKey(ctx, priv_key) != 1) { failf(data, "unable to set private key\n"); EVP_PKEY_free(priv_key); return 0; } EVP_PKEY_free(priv_key); /* we don't need the handle any more... */ } else { failf(data, "crypto engine not set, can't load private key\n"); return 0; } } break; #else failf(data, "file type ENG for private key not supported\n"); return 0; #endif case SSL_FILETYPE_PKCS12: if(!cert_done) { failf(data, "file type P12 for private key not supported\n"); return 0; } break; default: failf(data, "not supported file type for private key\n"); return 0; } ssl=SSL_new(ctx); if (NULL == ssl) { failf(data,"unable to create an SSL structure\n"); return 0; } x509=SSL_get_certificate(ssl); /* This version was provided by Evan Jordan and is supposed to not leak memory as the previous version: */ if(x509 != NULL) { EVP_PKEY *pktmp = X509_get_pubkey(x509); EVP_PKEY_copy_parameters(pktmp,SSL_get_privatekey(ssl)); EVP_PKEY_free(pktmp); } SSL_free(ssl); /* If we are using DSA, we can copy the parameters from * the private key */ /* Now we know that a key and cert have been set against * the SSL context */ if(!SSL_CTX_check_private_key(ctx)) { failf(data, "Private key does not match the certificate public key"); return(0); } #ifndef HAVE_USERDATA_IN_PWD_CALLBACK /* erase it now */ memset(global_passwd, 0, sizeof(global_passwd)); #endif } return(1); } static int cert_verify_callback(int ok, X509_STORE_CTX *ctx) { X509 *err_cert; char buf[256]; err_cert=X509_STORE_CTX_get_current_cert(ctx); X509_NAME_oneline(X509_get_subject_name(err_cert), buf, sizeof(buf)); return ok; } /* Return error string for last OpenSSL error */ static char *SSL_strerror(unsigned long error, char *buf, size_t size) { #ifdef HAVE_ERR_ERROR_STRING_N /* OpenSSL 0.9.6 and later has a function named ERRO_error_string_n() that takes the size of the buffer as a third argument */ ERR_error_string_n(error, buf, size); #else (void) size; ERR_error_string(error, buf); #endif return (buf); } /* we have the "SSL is seeded" boolean global for the application to prevent multiple time-consuming seedings in vain */ static bool ssl_seeded = FALSE; #endif /* USE_SSLEAY */ #ifdef USE_SSLEAY /** * Global SSL init * * @retval 0 error initializing SSL * @retval 1 SSL initialized successfully */ int Curl_ossl_init(void) { #ifdef HAVE_ENGINE_LOAD_BUILTIN_ENGINES ENGINE_load_builtin_engines(); #endif /* Lets get nice error messages */ SSL_load_error_strings(); /* Setup all the global SSL stuff */ if (!SSLeay_add_ssl_algorithms()) return 0; return 1; } #endif /* USE_SSLEAY */ #ifdef USE_SSLEAY /* Global cleanup */ void Curl_ossl_cleanup(void) { /* Free the SSL error strings */ ERR_free_strings(); /* EVP_cleanup() removes all ciphers and digests from the table. */ EVP_cleanup(); #ifdef HAVE_ENGINE_cleanup ENGINE_cleanup(); #endif #ifdef HAVE_CRYPTO_CLEANUP_ALL_EX_DATA /* this function was not present in 0.9.6b, but was added sometimes later */ CRYPTO_cleanup_all_ex_data(); #endif } #endif /* USE_SSLEAY */ /* Selects an OpenSSL crypto engine */ CURLcode Curl_ossl_set_engine(struct SessionHandle *data, const char *engine) { #if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H) ENGINE *e = ENGINE_by_id(engine); if (!e) { failf(data, "SSL Engine '%s' not found", engine); return (CURLE_SSL_ENGINE_NOTFOUND); } if (data->state.engine) { ENGINE_finish(data->state.engine); ENGINE_free(data->state.engine); } data->state.engine = NULL; if (!ENGINE_init(e)) { char buf[256]; ENGINE_free(e); failf(data, "Failed to initialise SSL Engine '%s':\n%s", engine, SSL_strerror(ERR_get_error(), buf, sizeof(buf))); return (CURLE_SSL_ENGINE_INITFAILED); } data->state.engine = e; return (CURLE_OK); #else (void)engine; failf(data, "SSL Engine not supported"); return (CURLE_SSL_ENGINE_NOTFOUND); #endif } #ifdef USE_SSLEAY /* Sets engine as default for all SSL operations */ CURLcode Curl_ossl_set_engine_default(struct SessionHandle *data) { #ifdef HAVE_OPENSSL_ENGINE_H if (data->state.engine) { if (ENGINE_set_default(data->state.engine, ENGINE_METHOD_ALL) > 0) { infof(data,"set default crypto engine %s\n", data->state.engine); } else { failf(data, "set default crypto engine %s failed", data->state.engine); return CURLE_SSL_ENGINE_SETFAILED; } } #else (void) data; #endif return CURLE_OK; } #endif /* USE_SSLEAY */ /* Return list of OpenSSL crypto engine names. */ struct curl_slist *Curl_ossl_engines_list(struct SessionHandle *data) { struct curl_slist *list = NULL; #if defined(USE_SSLEAY) && defined(HAVE_OPENSSL_ENGINE_H) ENGINE *e; for (e = ENGINE_get_first(); e; e = ENGINE_get_next(e)) list = curl_slist_append(list, ENGINE_get_id(e)); #endif (void) data; return (list); } #ifdef USE_SSLEAY /* * This function is called when an SSL connection is closed. */ void Curl_ossl_close(struct connectdata *conn) { int i; /* ERR_remove_state() frees the error queue associated with thread pid. If pid == 0, the current thread will have its error queue removed. Since error queue data structures are allocated automatically for new threads, they must be freed when threads are terminated in oder to avoid memory leaks. */ ERR_remove_state(0); for(i=0; i<2; i++) { struct ssl_connect_data *connssl = &conn->ssl[i]; if(connssl->handle) { (void)SSL_shutdown(connssl->handle); SSL_set_connect_state(connssl->handle); SSL_free (connssl->handle); connssl->handle = NULL; } if(connssl->ctx) { SSL_CTX_free (connssl->ctx); connssl->ctx = NULL; } connssl->use = FALSE; /* get back to ordinary socket usage */ } } void Curl_ossl_session_free(void *ptr) { /* free the ID */ SSL_SESSION_free(ptr); } /* * This function is called when the 'data' struct is going away. Close * down everything and free all resources! */ int Curl_ossl_close_all(struct SessionHandle *data) { #ifdef HAVE_OPENSSL_ENGINE_H if(data->state.engine) { ENGINE_finish(data->state.engine); ENGINE_free(data->state.engine); data->state.engine = NULL; } #else (void)data; #endif return 0; } static int Curl_ASN1_UTCTIME_output(struct connectdata *conn, const char *prefix, ASN1_UTCTIME *tm) { char *asn1_string; int gmt=FALSE; int i; int year=0,month=0,day=0,hour=0,minute=0,second=0; struct SessionHandle *data = conn->data; if(!data->set.verbose) return 0; i=tm->length; asn1_string=(char *)tm->data; if(i < 10) return 1; if(asn1_string[i-1] == 'Z') gmt=TRUE; for (i=0; i<10; i++) if((asn1_string[i] > '9') || (asn1_string[i] < '0')) return 2; year= (asn1_string[0]-'0')*10+(asn1_string[1]-'0'); if(year < 50) year+=100; month= (asn1_string[2]-'0')*10+(asn1_string[3]-'0'); if((month > 12) || (month < 1)) return 3; day= (asn1_string[4]-'0')*10+(asn1_string[5]-'0'); hour= (asn1_string[6]-'0')*10+(asn1_string[7]-'0'); minute= (asn1_string[8]-'0')*10+(asn1_string[9]-'0'); if((asn1_string[10] >= '0') && (asn1_string[10] <= '9') && (asn1_string[11] >= '0') && (asn1_string[11] <= '9')) second= (asn1_string[10]-'0')*10+(asn1_string[11]-'0'); infof(data, "%s%04d-%02d-%02d %02d:%02d:%02d %s\n", prefix, year+1900, month, day, hour, minute, second, (gmt?"GMT":"")); return 0; } #endif /* ====================================================== */ #ifdef USE_SSLEAY /* * Match a hostname against a wildcard pattern. * E.g. * "foo.host.com" matches "*.host.com". * * We are a bit more liberal than RFC2818 describes in that we * accept multiple "*" in pattern (similar to what some other browsers do). * E.g. * "abc.def.domain.com" should strickly not match "*.domain.com", but we * don't consider "." to be important in CERT checking. */ #define HOST_NOMATCH 0 #define HOST_MATCH 1 static int hostmatch(const char *hostname, const char *pattern) { while (1) { int c = *pattern++; if (c == '\0') return (*hostname ? HOST_NOMATCH : HOST_MATCH); if (c == '*') { c = *pattern; if (c == '\0') /* "*\0" matches anything remaining */ return HOST_MATCH; while (*hostname) { /* The only recursive function in libcurl! */ if (hostmatch(hostname++,pattern) == HOST_MATCH) return HOST_MATCH; } return HOST_NOMATCH; } if (toupper(c) != toupper(*hostname++)) return HOST_NOMATCH; } } static int cert_hostcheck(const char *match_pattern, const char *hostname) { if (!match_pattern || !*match_pattern || !hostname || !*hostname) /* sanity check */ return 0; if(curl_strequal(hostname,match_pattern)) /* trivial case */ return 1; if (hostmatch(hostname,match_pattern) == HOST_MATCH) return 1; return 0; } /* Quote from RFC2818 section 3.1 "Server Identity" If a subjectAltName extension of type dNSName is present, that MUST be used as the identity. Otherwise, the (most specific) Common Name field in the Subject field of the certificate MUST be used. Although the use of the Common Name is existing practice, it is deprecated and Certification Authorities are encouraged to use the dNSName instead. Matching is performed using the matching rules specified by [RFC2459]. If more than one identity of a given type is present in the certificate (e.g., more than one dNSName name, a match in any one of the set is considered acceptable.) Names may contain the wildcard character * which is considered to match any single domain name component or component fragment. E.g., *.a.com matches foo.a.com but not bar.foo.a.com. f*.com matches foo.com but not bar.com. In some cases, the URI is specified as an IP address rather than a hostname. In this case, the iPAddress subjectAltName must be present in the certificate and must exactly match the IP in the URI. */ static CURLcode verifyhost(struct connectdata *conn, X509 *server_cert) { bool matched = FALSE; /* no alternative match yet */ int target = GEN_DNS; /* target type, GEN_DNS or GEN_IPADD */ int addrlen = 0; struct SessionHandle *data = conn->data; STACK_OF(GENERAL_NAME) *altnames; #ifdef ENABLE_IPV6 struct in6_addr addr; #else struct in_addr addr; #endif CURLcode res = CURLE_OK; #ifdef ENABLE_IPV6 if(conn->bits.ipv6_ip && Curl_inet_pton(AF_INET6, conn->host.name, &addr)) { target = GEN_IPADD; addrlen = sizeof(struct in6_addr); } else #endif if(Curl_inet_pton(AF_INET, conn->host.name, &addr)) { target = GEN_IPADD; addrlen = sizeof(struct in_addr); } /* get a "list" of alternative names */ altnames = X509_get_ext_d2i(server_cert, NID_subject_alt_name, NULL, NULL); if(altnames) { int numalts; int i; /* get amount of alternatives, RFC2459 claims there MUST be at least one, but we don't depend on it... */ numalts = sk_GENERAL_NAME_num(altnames); /* loop through all alternatives while none has matched */ for (i=0; (itype == target) { /* get data and length */ const char *altptr = (char *)ASN1_STRING_data(check->d.ia5); int altlen; switch(target) { case GEN_DNS: /* name/pattern comparison */ /* The OpenSSL man page explicitly says: "In general it cannot be assumed that the data returned by ASN1_STRING_data() is null terminated or does not contain embedded nulls." But also that "The actual format of the data will depend on the actual string type itself: for example for and IA5String the data will be ASCII" Gisle researched the OpenSSL sources: "I checked the 0.9.6 and 0.9.8 sources before my patch and it always 0-terminates an IA5String." */ if (cert_hostcheck(altptr, conn->host.name)) matched = TRUE; break; case GEN_IPADD: /* IP address comparison */ /* compare alternative IP address if the data chunk is the same size our server IP address is */ altlen = ASN1_STRING_length(check->d.ia5); if((altlen == addrlen) && !memcmp(altptr, &addr, altlen)) matched = TRUE; break; } } } GENERAL_NAMES_free(altnames); } if(matched) /* an alternative name matched the server hostname */ infof(data, "\t subjectAltName: %s matched\n", conn->host.dispname); else { /* we have to look to the last occurence of a commonName in the distinguished one to get the most significant one. */ int j,i=-1 ; /* The following is done because of a bug in 0.9.6b */ unsigned char *nulstr = (unsigned char *)""; unsigned char *peer_CN = nulstr; X509_NAME *name = X509_get_subject_name(server_cert) ; if (name) while ((j=X509_NAME_get_index_by_NID(name,NID_commonName,i))>=0) i=j; /* we have the name entry and we will now convert this to a string that we can use for comparison. Doing this we support BMPstring, UTF8 etc. */ if (i>=0) { ASN1_STRING *tmp = X509_NAME_ENTRY_get_data(X509_NAME_get_entry(name,i)); /* In OpenSSL 0.9.7d and earlier, ASN1_STRING_to_UTF8 fails if the input is already UTF-8 encoded. We check for this case and copy the raw string manually to avoid the problem. This code can be made conditional in the future when OpenSSL has been fixed. Work-around brought by Alexis S. L. Carvalho. */ if (tmp && ASN1_STRING_type(tmp) == V_ASN1_UTF8STRING) { j = ASN1_STRING_length(tmp); if (j >= 0) { peer_CN = OPENSSL_malloc(j+1); if (peer_CN) { memcpy(peer_CN, ASN1_STRING_data(tmp), j); peer_CN[j] = '\0'; } } } else /* not a UTF8 name */ j = ASN1_STRING_to_UTF8(&peer_CN, tmp); } if (peer_CN == nulstr) peer_CN = NULL; if (!peer_CN) { if(data->set.ssl.verifyhost > 1) { failf(data, "SSL: unable to obtain common name from peer certificate"); return CURLE_SSL_PEER_CERTIFICATE; } else { /* Consider verifyhost == 1 as an "OK" for a missing CN field, but we output a note about the situation */ infof(data, "\t common name: WARNING couldn't obtain\n"); } } else if(!cert_hostcheck((const char *)peer_CN, conn->host.name)) { if(data->set.ssl.verifyhost > 1) { failf(data, "SSL: certificate subject name '%s' does not match " "target host name '%s'", peer_CN, conn->host.dispname); res = CURLE_SSL_PEER_CERTIFICATE; } else infof(data, "\t common name: %s (does not match '%s')\n", peer_CN, conn->host.dispname); } else { infof(data, "\t common name: %s (matched)\n", peer_CN); } if(peer_CN) OPENSSL_free(peer_CN); } return res; } #endif /* The SSL_CTRL_SET_MSG_CALLBACK doesn't exist in ancient OpenSSL versions and thus this cannot be done there. */ #ifdef SSL_CTRL_SET_MSG_CALLBACK static const char *ssl_msg_type(int ssl_ver, int msg) { if (ssl_ver == SSL2_VERSION_MAJOR) { switch (msg) { case SSL2_MT_ERROR: return "Error"; case SSL2_MT_CLIENT_HELLO: return "Client hello"; case SSL2_MT_CLIENT_MASTER_KEY: return "Client key"; case SSL2_MT_CLIENT_FINISHED: return "Client finished"; case SSL2_MT_SERVER_HELLO: return "Server hello"; case SSL2_MT_SERVER_VERIFY: return "Server verify"; case SSL2_MT_SERVER_FINISHED: return "Server finished"; case SSL2_MT_REQUEST_CERTIFICATE: return "Request CERT"; case SSL2_MT_CLIENT_CERTIFICATE: return "Client CERT"; } } else if (ssl_ver == SSL3_VERSION_MAJOR) { switch (msg) { case SSL3_MT_HELLO_REQUEST: return "Hello request"; case SSL3_MT_CLIENT_HELLO: return "Client hello"; case SSL3_MT_SERVER_HELLO: return "Server hello"; case SSL3_MT_CERTIFICATE: return "CERT"; case SSL3_MT_SERVER_KEY_EXCHANGE: return "Server key exchange"; case SSL3_MT_CLIENT_KEY_EXCHANGE: return "Client key exchange"; case SSL3_MT_CERTIFICATE_REQUEST: return "Request CERT"; case SSL3_MT_SERVER_DONE: return "Server finished"; case SSL3_MT_CERTIFICATE_VERIFY: return "CERT verify"; case SSL3_MT_FINISHED: return "Finished"; } } return "Unknown"; } static const char *tls_rt_type(int type) { return ( type == SSL3_RT_CHANGE_CIPHER_SPEC ? "TLS change cipher, " : type == SSL3_RT_ALERT ? "TLS alert, " : type == SSL3_RT_HANDSHAKE ? "TLS handshake, " : type == SSL3_RT_APPLICATION_DATA ? "TLS app data, " : "TLS Unknown, "); } /* * Our callback from the SSL/TLS layers. */ static void ssl_tls_trace(int direction, int ssl_ver, int content_type, const void *buf, size_t len, const SSL *ssl, struct connectdata *conn) { struct SessionHandle *data; const char *msg_name, *tls_rt_name; char ssl_buf[1024]; int ver, msg_type, txt_len; if (!conn || !conn->data || !conn->data->set.fdebug || (direction != 0 && direction != 1)) return; data = conn->data; ssl_ver >>= 8; ver = (ssl_ver == SSL2_VERSION_MAJOR ? '2' : ssl_ver == SSL3_VERSION_MAJOR ? '3' : '?'); /* SSLv2 doesn't seem to have TLS record-type headers, so OpenSSL * always pass-up content-type as 0. But the interesting message-type * is at 'buf[0]'. */ if (ssl_ver == SSL3_VERSION_MAJOR && content_type != 0) tls_rt_name = tls_rt_type(content_type); else tls_rt_name = ""; msg_type = *(char*)buf; msg_name = ssl_msg_type(ssl_ver, msg_type); txt_len = 1 + snprintf(ssl_buf, sizeof(ssl_buf), "SSLv%c, %s%s (%d):\n", ver, tls_rt_name, msg_name, msg_type); Curl_debug(data, CURLINFO_TEXT, ssl_buf, txt_len, NULL); Curl_debug(data, (direction == 1) ? CURLINFO_SSL_DATA_OUT : CURLINFO_SSL_DATA_IN, (char *)buf, len, NULL); (void) ssl; } #endif #ifdef USE_SSLEAY /* ====================================================== */ CURLcode Curl_ossl_connect(struct connectdata *conn, int sockindex) { CURLcode retcode = CURLE_OK; struct SessionHandle *data = conn->data; int err; long lerr; int what; char * str; SSL_METHOD *req_method; void *ssl_sessionid=NULL; ASN1_TIME *certdate; curl_socket_t sockfd = conn->sock[sockindex]; struct ssl_connect_data *connssl = &conn->ssl[sockindex]; if(!ssl_seeded || data->set.ssl.random_file || data->set.ssl.egdsocket) { /* Make funny stuff to get random input */ random_the_seed(data); ssl_seeded = TRUE; } /* check to see if we've been told to use an explicit SSL/TLS version */ switch(data->set.ssl.version) { default: case CURL_SSLVERSION_DEFAULT: /* we try to figure out version */ req_method = SSLv23_client_method(); break; case CURL_SSLVERSION_TLSv1: req_method = TLSv1_client_method(); break; case CURL_SSLVERSION_SSLv2: req_method = SSLv2_client_method(); break; case CURL_SSLVERSION_SSLv3: req_method = SSLv3_client_method(); break; } connssl->ctx = SSL_CTX_new(req_method); if(!connssl->ctx) { failf(data, "SSL: couldn't create a context!"); return CURLE_OUT_OF_MEMORY; } #ifdef SSL_CTRL_SET_MSG_CALLBACK if (data->set.fdebug) { if (!SSL_CTX_callback_ctrl(connssl->ctx, SSL_CTRL_SET_MSG_CALLBACK, ssl_tls_trace)) { failf(data, "SSL: couldn't set callback!"); return CURLE_SSL_CONNECT_ERROR; } if (!SSL_CTX_ctrl(connssl->ctx, SSL_CTRL_SET_MSG_CALLBACK_ARG, 0, conn)) { failf(data, "SSL: couldn't set callback argument!"); return CURLE_SSL_CONNECT_ERROR; } } #endif /* OpenSSL contains code to work-around lots of bugs and flaws in various SSL-implementations. SSL_CTX_set_options() is used to enabled those work-arounds. The man page for this option states that SSL_OP_ALL enables ll the work-arounds and that "It is usually safe to use SSL_OP_ALL to enable the bug workaround options if compatibility with somewhat broken implementations is desired." */ SSL_CTX_set_options(connssl->ctx, SSL_OP_ALL); #if 0 /* * Not sure it's needed to tell SSL_connect() that socket is * non-blocking. It doesn't seem to care, but just return with * SSL_ERROR_WANT_x. */ if (data->state.used_interface == Curl_if_multi) SSL_CTX_ctrl(connssl->ctx, BIO_C_SET_NBIO, 1, NULL); #endif if(data->set.cert) { if(!cert_stuff(conn, connssl->ctx, data->set.cert, data->set.cert_type, data->set.key, data->set.key_type)) { /* failf() is already done in cert_stuff() */ return CURLE_SSL_CERTPROBLEM; } } if(data->set.ssl.cipher_list) { if(!SSL_CTX_set_cipher_list(connssl->ctx, data->set.ssl.cipher_list)) { failf(data, "failed setting cipher list"); return CURLE_SSL_CIPHER; } } if (data->set.ssl.CAfile || data->set.ssl.CApath) { /* tell SSL where to find CA certificates that are used to verify the servers certificate. */ if (!SSL_CTX_load_verify_locations(connssl->ctx, data->set.ssl.CAfile, data->set.ssl.CApath)) { if (data->set.ssl.verifypeer) { /* Fail if we insist on successfully verifying the server. */ failf(data,"error setting certificate verify locations:\n" " CAfile: %s\n CApath: %s\n", data->set.ssl.CAfile ? data->set.ssl.CAfile : "none", data->set.ssl.CApath ? data->set.ssl.CApath : "none"); return CURLE_SSL_CACERT; } else { /* Just continue with a warning if no strict certificate verification is required. */ infof(data, "error setting certificate verify locations," " continuing anyway:\n"); } } else { /* Everything is fine. */ infof(data, "successfully set certificate verify locations:\n"); } infof(data, " CAfile: %s\n" " CApath: %s\n", data->set.ssl.CAfile ? data->set.ssl.CAfile : "none", data->set.ssl.CApath ? data->set.ssl.CApath : "none"); } /* SSL always tries to verify the peer, this only says whether it should * fail to connect if the verification fails, or if it should continue * anyway. In the latter case the result of the verification is checked with * SSL_get_verify_result() below. */ SSL_CTX_set_verify(connssl->ctx, data->set.ssl.verifypeer?SSL_VERIFY_PEER:SSL_VERIFY_NONE, cert_verify_callback); /* give application a chance to interfere with SSL set up. */ if(data->set.ssl.fsslctx) { retcode = (*data->set.ssl.fsslctx)(data, connssl->ctx, data->set.ssl.fsslctxp); if(retcode) { failf(data,"error signaled by ssl ctx callback"); return retcode; } } /* Lets make an SSL structure */ connssl->handle = SSL_new(connssl->ctx); if (!connssl->handle) { failf(data, "SSL: couldn't create a context (handle)!"); return CURLE_OUT_OF_MEMORY; } SSL_set_connect_state(connssl->handle); connssl->server_cert = 0x0; /* Check if there's a cached ID we can/should use here! */ if(!Curl_ssl_getsessionid(conn, &ssl_sessionid, NULL)) { /* we got a session id, use it! */ if (!SSL_set_session(connssl->handle, ssl_sessionid)) { failf(data, "SSL: SSL_set_session failed: %s", ERR_error_string(ERR_get_error(),NULL)); return CURLE_SSL_CONNECT_ERROR; } /* Informational message */ infof (data, "SSL re-using session ID\n"); } /* pass the raw socket into the SSL layers */ if (!SSL_set_fd(connssl->handle, sockfd)) { failf(data, "SSL: SSL_set_fd failed: %s", ERR_error_string(ERR_get_error(),NULL)); return CURLE_SSL_CONNECT_ERROR; } while(1) { int writefd; int readfd; long timeout_ms; long has_passed; /* Find out if any timeout is set. If not, use 300 seconds. Otherwise, figure out the most strict timeout of the two possible one and then how much time that has elapsed to know how much time we allow for the connect call */ if(data->set.timeout || data->set.connecttimeout) { /* get the most strict timeout of the ones converted to milliseconds */ if(data->set.timeout && (data->set.timeout>data->set.connecttimeout)) timeout_ms = data->set.timeout*1000; else timeout_ms = data->set.connecttimeout*1000; } else /* no particular time-out has been set */ timeout_ms= DEFAULT_CONNECT_TIMEOUT; /* Evaluate in milliseconds how much time that has passed */ has_passed = Curl_tvdiff(Curl_tvnow(), data->progress.t_startsingle); /* subtract the passed time */ timeout_ms -= has_passed; if(timeout_ms < 0) { /* a precaution, no need to continue if time already is up */ failf(data, "SSL connection timeout"); return CURLE_OPERATION_TIMEOUTED; } readfd = CURL_SOCKET_BAD; writefd = CURL_SOCKET_BAD; err = SSL_connect(connssl->handle); /* 1 is fine 0 is "not successful but was shut down controlled" <0 is "handshake was not successful, because a fatal error occurred" */ if(1 != err) { int detail = SSL_get_error(connssl->handle, err); if(SSL_ERROR_WANT_READ == detail) readfd = sockfd; else if(SSL_ERROR_WANT_WRITE == detail) writefd = sockfd; else { /* untreated error */ unsigned long errdetail; char error_buffer[120]; /* OpenSSL documents that this must be at least 120 bytes long. */ CURLcode rc; const char *cert_problem = NULL; errdetail = ERR_get_error(); /* Gets the earliest error code from the thread's error queue and removes the entry. */ switch(errdetail) { case 0x1407E086: /* 1407E086: SSL routines: SSL2_SET_CERTIFICATE: certificate verify failed */ /* fall-through */ case 0x14090086: /* 14090086: SSL routines: SSL3_GET_SERVER_CERTIFICATE: certificate verify failed */ cert_problem = "SSL certificate problem, verify that the CA cert is" " OK. Details:\n"; rc = CURLE_SSL_CACERT; break; default: rc = CURLE_SSL_CONNECT_ERROR; break; } /* detail is already set to the SSL error above */ /* If we e.g. use SSLv2 request-method and the server doesn't like us * (RST connection etc.), OpenSSL gives no explanation whatsoever and * the SO_ERROR is also lost. */ if (CURLE_SSL_CONNECT_ERROR == rc && errdetail == 0) { failf(data, "Unknown SSL protocol error in connection to %s:%d ", conn->host.name, conn->port); return rc; } /* Could be a CERT problem */ SSL_strerror(errdetail, error_buffer, sizeof(error_buffer)); failf(data, "%s%s", cert_problem ? cert_problem : "", error_buffer); return rc; } } else /* we have been connected fine, get out of the connect loop */ break; while(1) { what = Curl_select(readfd, writefd, (int)timeout_ms); if(what > 0) /* reabable or writable, go loop in the outer loop */ break; else if(0 == what) { /* timeout */ failf(data, "SSL connection timeout"); return CURLE_OPERATION_TIMEDOUT; } else { /* anything that gets here is fatally bad */ failf(data, "select on SSL socket, errno: %d", Curl_ourerrno()); return CURLE_SSL_CONNECT_ERROR; } } /* while()-loop for the select() */ } /* while()-loop for the SSL_connect() */ /* Informational message */ infof (data, "SSL connection using %s\n", SSL_get_cipher(connssl->handle)); if(!ssl_sessionid) { /* Since this is not a cached session ID, then we want to stach this one in the cache! */ SSL_SESSION *ssl_sessionid; #ifdef HAVE_SSL_GET1_SESSION ssl_sessionid = SSL_get1_session(connssl->handle); /* SSL_get1_session() will increment the reference count and the session will stay in memory until explicitly freed with SSL_SESSION_free(3), regardless of its state. This function was introduced in openssl 0.9.5a. */ #else ssl_sessionid = SSL_get_session(connssl->handle); /* if SSL_get1_session() is unavailable, use SSL_get_session(). This is an inferior option because the session can be flushed at any time by openssl. It is included only so curl compiles under versions of openssl < 0.9.5a. WARNING: How curl behaves if it's session is flushed is untested. */ #endif retcode = Curl_ssl_addsessionid(conn, ssl_sessionid, 0 /* unknown size */); if(retcode) { failf(data, "failed to store ssl session"); return retcode; } } /* Get server's certificate (note: beware of dynamic allocation) - opt */ /* major serious hack alert -- we should check certificates * to authenticate the server; otherwise we risk man-in-the-middle * attack */ connssl->server_cert = SSL_get_peer_certificate(connssl->handle); if(!connssl->server_cert) { failf(data, "SSL: couldn't get peer certificate!"); return CURLE_SSL_PEER_CERTIFICATE; } infof (data, "Server certificate:\n"); str = X509_NAME_oneline(X509_get_subject_name(connssl->server_cert), NULL, 0); if(!str) { failf(data, "SSL: couldn't get X509-subject!"); X509_free(connssl->server_cert); connssl->server_cert = NULL; return CURLE_SSL_CONNECT_ERROR; } infof(data, "\t subject: %s\n", str); CRYPTO_free(str); certdate = X509_get_notBefore(connssl->server_cert); Curl_ASN1_UTCTIME_output(conn, "\t start date: ", certdate); certdate = X509_get_notAfter(connssl->server_cert); Curl_ASN1_UTCTIME_output(conn, "\t expire date: ", certdate); if(data->set.ssl.verifyhost) { retcode = verifyhost(conn, connssl->server_cert); if(retcode) { X509_free(connssl->server_cert); connssl->server_cert = NULL; return retcode; } } str = X509_NAME_oneline(X509_get_issuer_name(connssl->server_cert), NULL, 0); if(!str) { failf(data, "SSL: couldn't get X509-issuer name!"); retcode = CURLE_SSL_CONNECT_ERROR; } else { infof(data, "\t issuer: %s\n", str); CRYPTO_free(str); /* We could do all sorts of certificate verification stuff here before deallocating the certificate. */ lerr = data->set.ssl.certverifyresult= SSL_get_verify_result(connssl->handle); if(data->set.ssl.certverifyresult != X509_V_OK) { if(data->set.ssl.verifypeer) { /* We probably never reach this, because SSL_connect() will fail and we return earlyer if verifypeer is set? */ failf(data, "SSL certificate verify result: %s (%ld)", X509_verify_cert_error_string(lerr), lerr); retcode = CURLE_SSL_PEER_CERTIFICATE; } else infof(data, "SSL certificate verify result: %s (%ld)," " continuing anyway.\n", X509_verify_cert_error_string(err), lerr); } else infof(data, "SSL certificate verify ok.\n"); } X509_free(connssl->server_cert); connssl->server_cert = NULL; return retcode; } /* return number of sent (non-SSL) bytes */ int Curl_ossl_send(struct connectdata *conn, int sockindex, void *mem, size_t len) { /* SSL_write() is said to return 'int' while write() and send() returns 'size_t' */ int err; char error_buffer[120]; /* OpenSSL documents that this must be at least 120 bytes long. */ unsigned long sslerror; int rc = SSL_write(conn->ssl[sockindex].handle, mem, (int)len); if(rc < 0) { err = SSL_get_error(conn->ssl[sockindex].handle, rc); switch(err) { case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: /* The operation did not complete; the same TLS/SSL I/O function should be called again later. This is basicly an EWOULDBLOCK equivalent. */ return 0; case SSL_ERROR_SYSCALL: failf(conn->data, "SSL_write() returned SYSCALL, errno = %d\n", Curl_ourerrno()); return -1; case SSL_ERROR_SSL: /* A failure in the SSL library occurred, usually a protocol error. The OpenSSL error queue contains more information on the error. */ sslerror = ERR_get_error(); failf(conn->data, "SSL_write() error: %s\n", ERR_error_string(sslerror, error_buffer)); return -1; } /* a true error */ failf(conn->data, "SSL_write() return error %d\n", err); return -1; } return rc; /* number of bytes */ } /* * If the read would block we return -1 and set 'wouldblock' to TRUE. * Otherwise we return the amount of data read. Other errors should return -1 * and set 'wouldblock' to FALSE. */ ssize_t Curl_ossl_recv(struct connectdata *conn, /* connection data */ int num, /* socketindex */ char *buf, /* store read data here */ size_t buffersize, /* max amount to read */ bool *wouldblock) { char error_buffer[120]; /* OpenSSL documents that this must be at least 120 bytes long. */ unsigned long sslerror; ssize_t nread = (ssize_t)SSL_read(conn->ssl[num].handle, buf, (int)buffersize); *wouldblock = FALSE; if(nread < 0) { /* failed SSL_read */ int err = SSL_get_error(conn->ssl[num].handle, (int)nread); switch(err) { case SSL_ERROR_NONE: /* this is not an error */ case SSL_ERROR_ZERO_RETURN: /* no more data */ break; case SSL_ERROR_WANT_READ: case SSL_ERROR_WANT_WRITE: /* there's data pending, re-invoke SSL_read() */ *wouldblock = TRUE; return -1; /* basically EWOULDBLOCK */ default: /* openssl/ssl.h says "look at error stack/return value/errno" */ sslerror = ERR_get_error(); failf(conn->data, "SSL read: %s, errno %d", ERR_error_string(sslerror, error_buffer), Curl_ourerrno() ); return -1; } } return nread; } size_t Curl_ossl_version(char *buffer, size_t size) { #if (SSLEAY_VERSION_NUMBER >= 0x905000) { char sub[2]; unsigned long ssleay_value; sub[1]='\0'; ssleay_value=SSLeay(); if(ssleay_value < 0x906000) { ssleay_value=SSLEAY_VERSION_NUMBER; sub[0]='\0'; } else { if(ssleay_value&0xff0) { sub[0]=(char)((ssleay_value>>4)&0xff) + 'a' -1; } else sub[0]='\0'; } return snprintf(buffer, size, " OpenSSL/%lx.%lx.%lx%s", (ssleay_value>>28)&0xf, (ssleay_value>>20)&0xff, (ssleay_value>>12)&0xff, sub); } #else /* SSLEAY_VERSION_NUMBER is less than 0.9.5 */ #if (SSLEAY_VERSION_NUMBER >= 0x900000) return snprintf(buffer, size, " OpenSSL/%lx.%lx.%lx", (SSLEAY_VERSION_NUMBER>>28)&0xff, (SSLEAY_VERSION_NUMBER>>20)&0xff, (SSLEAY_VERSION_NUMBER>>12)&0xf); #else /* (SSLEAY_VERSION_NUMBER >= 0x900000) */ { char sub[2]; sub[1]='\0'; if(SSLEAY_VERSION_NUMBER&0x0f) { sub[0]=(SSLEAY_VERSION_NUMBER&0x0f) + 'a' -1; } else sub[0]='\0'; return snprintf(buffer, size, " SSL/%x.%x.%x%s", (SSLEAY_VERSION_NUMBER>>12)&0xff, (SSLEAY_VERSION_NUMBER>>8)&0xf, (SSLEAY_VERSION_NUMBER>>4)&0xf, sub); } #endif /* (SSLEAY_VERSION_NUMBER >= 0x900000) */ #endif /* SSLEAY_VERSION_NUMBER is less than 0.9.5 */ } #endif /* USE_SSLEAY */ criticalmass-1.0.0.orig/curl/lib/ssluse.h0000644000175000017500000000505310265631023017602 0ustar danieldaniel#ifndef __SSLUSE_H #define __SSLUSE_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: ssluse.h,v 1.23 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ /* * This header should only be needed to get included by sslgen.c and ssluse.c */ #include "urldata.h" CURLcode Curl_ossl_connect(struct connectdata *conn, int sockindex); void Curl_ossl_close(struct connectdata *conn); /* close a SSL connection */ /* tell OpenSSL to close down all open information regarding connections (and thus session ID caching etc) */ int Curl_ossl_close_all(struct SessionHandle *data); /* Sets an OpenSSL engine */ CURLcode Curl_ossl_set_engine(struct SessionHandle *data, const char *engine); /* function provided for the generic SSL-layer, called when a session id should be freed */ void Curl_ossl_session_free(void *ptr); /* Sets engine as default for all SSL operations */ CURLcode Curl_ossl_set_engine_default(struct SessionHandle *data); /* Build list of OpenSSL engines */ struct curl_slist *Curl_ossl_engines_list(struct SessionHandle *data); int Curl_ossl_init(void); void Curl_ossl_cleanup(void); int Curl_ossl_send(struct connectdata *conn, int sockindex, void *mem, size_t len); ssize_t Curl_ossl_recv(struct connectdata *conn, /* connection data */ int num, /* socketindex */ char *buf, /* store read data here */ size_t buffersize, /* max amount to read */ bool *wouldblock); size_t Curl_ossl_version(char *buffer, size_t size); #endif criticalmass-1.0.0.orig/curl/lib/if2ip.c0000644000175000017500000000617110265631023017272 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: if2ip.c,v 1.43 2005/04/08 05:01:40 curlvms Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include "if2ip.h" #if !defined(WIN32) && !defined(__BEOS__) && !defined(__CYGWIN32__) && \ !defined(__riscos__) && !defined(__INTERIX) && !defined(NETWARE) #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_SYS_TIME_H /* This must be before net/if.h for AIX 3.2 to enjoy life */ #include #endif #ifdef HAVE_NET_IF_H #include #endif #ifdef HAVE_SYS_IOCTL_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_SYS_SOCKIO_H #include #endif #ifdef VMS #include #endif #include "inet_ntop.h" #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" #define SYS_ERROR -1 char *Curl_if2ip(const char *interface, char *buf, int buf_size) { int dummy; char *ip=NULL; if(!interface) return NULL; dummy = socket(AF_INET, SOCK_STREAM, 0); if (SYS_ERROR == dummy) { return NULL; } else { struct ifreq req; size_t len = strlen(interface); memset(&req, 0, sizeof(req)); if(len >= sizeof(req.ifr_name)) return NULL; /* this can't be a fine interface name */ memcpy(req.ifr_name, interface, len+1); req.ifr_addr.sa_family = AF_INET; #ifdef IOCTL_3_ARGS if (SYS_ERROR == ioctl(dummy, SIOCGIFADDR, &req)) { #else if (SYS_ERROR == ioctl(dummy, SIOCGIFADDR, &req, sizeof(req))) { #endif sclose(dummy); return NULL; } else { struct in_addr in; struct sockaddr_in *s = (struct sockaddr_in *)&req.ifr_dstaddr; memcpy(&in, &(s->sin_addr.s_addr), sizeof(in)); ip = (char *) Curl_inet_ntop(s->sin_family, &in, buf, buf_size); } sclose(dummy); } return ip; } /* -- end of if2ip() -- */ #else char *Curl_if2ip(const char *interf, char *buf, int buf_size) { (void) interf; (void) buf; (void) buf_size; return NULL; } #endif criticalmass-1.0.0.orig/curl/lib/if2ip.h0000644000175000017500000000436210265631023017277 0ustar danieldaniel#ifndef __IF2IP_H #define __IF2IP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: if2ip.h,v 1.19 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ #include "setup.h" extern char *Curl_if2ip(const char *interf, char *buf, int buf_size); #ifdef __INTERIX /* Nedelcho Stanev's work-around for SFU 3.0 */ struct ifreq { #define IFNAMSIZ 16 #define IFHWADDRLEN 6 union { char ifrn_name[IFNAMSIZ]; /* if name, e.g. "en0" */ } ifr_ifrn; union { struct sockaddr ifru_addr; struct sockaddr ifru_broadaddr; struct sockaddr ifru_netmask; struct sockaddr ifru_hwaddr; short ifru_flags; int ifru_metric; int ifru_mtu; } ifr_ifru; }; /* This define was added by Daniel to avoid an extra #ifdef INTERIX in the C code. */ #define ifr_dstaddr ifr_addr #define ifr_name ifr_ifrn.ifrn_name /* interface name */ #define ifr_addr ifr_ifru.ifru_addr /* address */ #define ifr_broadaddr ifr_ifru.ifru_broadaddr /* broadcast address */ #define ifr_netmask ifr_ifru.ifru_netmask /* interface net mask */ #define ifr_flags ifr_ifru.ifru_flags /* flags */ #define ifr_hwaddr ifr_ifru.ifru_hwaddr /* MAC address */ #define ifr_metric ifr_ifru.ifru_metric /* metric */ #define ifr_mtu ifr_ifru.ifru_mtu /* mtu */ #define SIOCGIFADDR _IOW('s', 102, struct ifreq) /* Get if addr */ #endif /* interix */ #endif criticalmass-1.0.0.orig/curl/lib/easyif.h0000644000175000017500000000237610265631023017551 0ustar danieldaniel#ifndef __EASYIF_H #define __EASYIF_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: easyif.h,v 1.2 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ /* * Prototypes for library-wide functions provided by easy.c */ void Curl_easy_addmulti(struct SessionHandle *data, void *multi); #endif /* __EASYIF_H */ criticalmass-1.0.0.orig/curl/lib/nwlib.c0000644000175000017500000002154310265631023017374 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: nwlib.c,v 1.4 2004/06/10 21:20:15 gknauf Exp $ ***************************************************************************/ #include #include #include #include #include #include #include #include #include "memory.h" #include "memdebug.h" typedef struct { int _errno; void *twentybytes; } libthreaddata_t; typedef struct { int x; int y; int z; void *tenbytes; NXKey_t perthreadkey; /* if -1, no key obtained... */ NXMutex_t *lock; } libdata_t; int gLibId = -1; void *gLibHandle = (void *) NULL; rtag_t gAllocTag = (rtag_t) NULL; NXMutex_t *gLibLock = (NXMutex_t *) NULL; /* internal library function prototypes... */ int DisposeLibraryData ( void * ); void DisposeThreadData ( void * ); int GetOrSetUpData ( int id, libdata_t **data, libthreaddata_t **threaddata ); int _NonAppStart( void *NLMHandle, void *errorScreen, const char *cmdLine, const char *loadDirPath, size_t uninitializedDataLength, void *NLMFileHandle, int (*readRoutineP)( int conn, void *fileHandle, size_t offset, size_t nbytes, size_t *bytesRead, void *buffer ), size_t customDataOffset, size_t customDataSize, int messageCount, const char **messages ) { NX_LOCK_INFO_ALLOC(liblock, "Per-Application Data Lock", 0); #ifndef __GNUC__ #pragma unused(cmdLine) #pragma unused(loadDirPath) #pragma unused(uninitializedDataLength) #pragma unused(NLMFileHandle) #pragma unused(readRoutineP) #pragma unused(customDataOffset) #pragma unused(customDataSize) #pragma unused(messageCount) #pragma unused(messages) #endif /* ** Here we process our command line, post errors (to the error screen), ** perform initializations and anything else we need to do before being able ** to accept calls into us. If we succeed, we return non-zero and the NetWare ** Loader will leave us up, otherwise we fail to load and get dumped. */ gAllocTag = AllocateResourceTag(NLMHandle, " memory allocations", AllocSignature); if (!gAllocTag) { OutputToScreen(errorScreen, "Unable to allocate resource tag for " "library memory allocations.\n"); return -1; } gLibId = register_library(DisposeLibraryData); if (gLibId < -1) { OutputToScreen(errorScreen, "Unable to register library with kernel.\n"); return -1; } gLibHandle = NLMHandle; gLibLock = NXMutexAlloc(0, 0, &liblock); if (!gLibLock) { OutputToScreen(errorScreen, "Unable to allocate library data lock.\n"); return -1; } return 0; } /* ** Here we clean up any resources we allocated. Resource tags is a big part ** of what we created, but NetWare doesn't ask us to free those. */ void _NonAppStop( void ) { (void) unregister_library(gLibId); NXMutexFree(gLibLock); } /* ** This function cannot be the first in the file for if the file is linked ** first, then the check-unload function's offset will be nlmname.nlm+0 ** which is how to tell that there isn't one. When the check function is ** first in the linked objects, it is ambiguous. For this reason, we will ** put it inside this file after the stop function. ** ** Here we check to see if it's alright to ourselves to be unloaded. If not, ** we return a non-zero value. Right now, there isn't any reason not to allow ** it. */ int _NonAppCheckUnload( void ) { return 0; } int GetOrSetUpData(int id, libdata_t **appData, libthreaddata_t **threadData ) { int err; libdata_t *app_data; libthreaddata_t *thread_data; NXKey_t key; NX_LOCK_INFO_ALLOC(liblock, "Application Data Lock", 0); err = 0; thread_data = (libthreaddata_t *) NULL; /* ** Attempt to get our data for the application calling us. This is where we ** store whatever application-specific information we need to carry in support ** of calling applications. */ app_data = (libdata_t *) get_app_data(id); if (!app_data) { /* ** This application hasn't called us before; set up application AND per-thread ** data. Of course, just in case a thread from this same application is calling ** us simultaneously, we better lock our application data-creation mutex. We ** also need to recheck for data after we acquire the lock because WE might be ** that other thread that was too late to create the data and the first thread ** in will have created it. */ NXLock(gLibLock); if (!(app_data = (libdata_t *) get_app_data(id))) { app_data = (libdata_t *) malloc(sizeof(libdata_t)); if (app_data) { memset(app_data, 0, sizeof(libdata_t)); app_data->tenbytes = malloc(10); app_data->lock = NXMutexAlloc(0, 0, &liblock); if (!app_data->tenbytes || !app_data->lock) { if (app_data->lock) NXMutexFree(app_data->lock); free(app_data); app_data = (libdata_t *) NULL; err = ENOMEM; } if (app_data) { /* ** Here we burn in the application data that we were trying to get by calling ** get_app_data(). Next time we call the first function, we'll get this data ** we're just now setting. We also go on here to establish the per-thread data ** for the calling thread, something we'll have to do on each application ** thread the first time it calls us. */ err = set_app_data(gLibId, app_data); if (err) { free(app_data); app_data = (libdata_t *) NULL; err = ENOMEM; } else { /* create key for thread-specific data... */ err = NXKeyCreate(DisposeThreadData, (void *) NULL, &key); if (err) /* (no more keys left?) */ key = -1; app_data->perthreadkey = key; } } } } NXUnlock(gLibLock); } if (app_data) { key = app_data->perthreadkey; if (key != -1 /* couldn't create a key? no thread data */ && !(err = NXKeyGetValue(key, (void **) &thread_data)) && !thread_data) { /* ** Allocate the per-thread data for the calling thread. Regardless of whether ** there was already application data or not, this may be the first call by a ** a new thread. The fact that we allocation 20 bytes on a pointer is not very ** important, this just helps to demonstrate that we can have arbitrarily ** complex per-thread data. */ thread_data = (libthreaddata_t *) malloc(sizeof(libthreaddata_t)); if (thread_data) { thread_data->_errno = 0; thread_data->twentybytes = malloc(20); if (!thread_data->twentybytes) { free(thread_data); thread_data = (libthreaddata_t *) NULL; err = ENOMEM; } if ((err = NXKeySetValue(key, thread_data))) { free(thread_data->twentybytes); free(thread_data); thread_data = (libthreaddata_t *) NULL; } } } } if (appData) *appData = app_data; if (threadData) *threadData = thread_data; return err; } int DisposeLibraryData( void *data) { if (data) { void *tenbytes = ((libdata_t *) data)->tenbytes; if (tenbytes) free(tenbytes); free(data); } return 0; } void DisposeThreadData(void *data) { if (data) { void *twentybytes = ((libthreaddata_t *) data)->twentybytes; if (twentybytes) free(twentybytes); free(data); } } criticalmass-1.0.0.orig/curl/lib/README.ares0000644000175000017500000000501510265631023017722 0ustar danieldaniel$Id: README.ares,v 1.10 2004/04/06 07:59:11 bagder Exp $ _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| How To Build libcurl to Use c-ares For Asynch Name Resolves =========================================================== c-ares: http://daniel.haxx.se/projects/c-ares/ NOTE libcurl 7.11.1 builds with c-ares 1.1.0, but 7.11.2 and later require c-ares 1.2.0 or alter. Once upon the time libcurl built fine with the "original" ares. That is no longer true. You need to use c-ares. c-ares is based on ares but improved. Build c-ares ============ 1. unpack the c-ares archive 2. cd c-ares-dir 3. ./configure 4. make Build libcurl to use c-ares in the curl source tree =================================================== 1. name the c-ares source directory 'ares' in the curl source directory (if you have checked out the curl sources from CVS, you will already have c-ares in a directory named ares). 2. ./configure --enable-ares 3. make Build libcurl to use an installed c-ares ======================================== 1. ./configure --enable-ares=/path/to/ares/install 2. make c-ares and ipv6 =============== If the configure script enables IPv6 support you need to explicitly disable that (--disable-ipv6) since c-ares isn't IPv6 compatible (yet). c-ares on win32 =============== (description brought by Dominick Meglio) First I compiled c-ares. I changed the default C runtime library to be the single-threaded rather than the multi-threaded (this seems to be required to prevent linking errors later on). Then I simply build the areslib project (the other projects adig/ahost seem to fail under MSVC). Next was libcurl. I opened lib/config-win32.h and I added a: #define USE_ARES 1 Next thing I did was I added the path for the ares includes to the include path, and the libares.lib to the libraries. Lastly, I also changed libcurl to be single-threaded rather than multi-threaded, again this was to prevent some duplicate symbol errors. I'm not sure why I needed to change everything to single-threaded, but when I didn't I got redefinition errors for several CRT functions (malloc, stricmp, etc.) I would have modified the MSVC++ project files, but I only have VC.NET and it uses a different format than VC6.0 so I didn't want to go and change everything and remove VC6.0 support from libcurl. criticalmass-1.0.0.orig/curl/lib/config-win32ce.h0000644000175000017500000001504110265631023020777 0ustar danieldaniel/* config.h. Generated automatically by configure. */ /* config.h.in. Generated automatically from configure.in by autoheader. */ #ifndef __CONFIG_WIN32CE_H #define __CONFIG_WIN32CE_H /* Define if on AIX 3. System headers sometimes define this. We just want to avoid a redefinition error message. */ #ifndef _ALL_SOURCE /* #undef _ALL_SOURCE */ #endif /* Define to empty if the keyword does not work. */ /* #undef const */ /* Define if you don't have vprintf but do have _doprnt. */ /* #undef HAVE_DOPRNT */ /* Define if you have the vprintf function. */ #define HAVE_VPRINTF 1 /* Define as the return type of signal handlers (int or void). */ /*#define RETSIGTYPE void */ /* Define to `unsigned' if doesn't define. */ /* #undef size_t */ /* Define this to 'int' if ssize_t is not an available typedefed type */ #define ssize_t int /* Define this to 'int' if socklen_t is not an available typedefed type */ #if !defined(ENABLE_IPV6) && ((_MSC_VER < 1300) || !defined(USE_SSLEAY)) #define socklen_t int #endif /* The size of a `curl_off_t', as computed by sizeof. */ #ifdef SIZEOF_CURL_OFF_T #undef SIZEOF_CURL_OFF_T #endif /* Borland lacks _lseeki64(), so we don't support >2GB files */ #define SIZEOF_CURL_OFF_T 4 /* Define if you have the ANSI C header files. */ #define STDC_HEADERS 1 /* Define if you can safely include both and . */ /* #define TIME_WITH_SYS_TIME 1 */ /* Define cpu-machine-OS */ #define OS "i386-pc-win32ce" /* The number of bytes in a long double. */ #define SIZEOF_LONG_DOUBLE 16 /* The number of bytes in a long long. */ /* #define SIZEOF_LONG_LONG 8 */ /* Define if you have the gethostbyaddr function. */ #define HAVE_GETHOSTBYADDR 1 /* Define if you have the gethostname function. */ #define HAVE_GETHOSTNAME 1 /* Define if you have the getpass function. */ /*#define HAVE_GETPASS 1*/ /* Define if you have the getservbyname function. */ #define HAVE_GETSERVBYNAME 1 /* Define if you have the gettimeofday function. */ /* #define HAVE_GETTIMEOFDAY 1 */ /* Define if you have the inet_addr function. */ #define HAVE_INET_ADDR 1 /* Define if you have the inet_ntoa function. */ #define HAVE_INET_NTOA 1 /* Define if you have the perror function. */ #define HAVE_PERROR 1 /* Define if you have the select function. */ #define HAVE_SELECT 1 /* Define if you have the socket function. */ #define HAVE_SOCKET 1 /* Define if you have the strcasecmp function. */ /*#define HAVE_STRCASECMP 1*/ /* Define if you have the stricmp function. */ //#define HAVE_STRICMP 1 /* Define if you have the strdup function. */ //#define HAVE_STRDUP 1 /* Define if you have the strftime function. */ //#define HAVE_STRFTIME 1 /* Define if you have the strstr function. */ #define HAVE_STRSTR 1 /* Define if you have the strtoll function. */ #ifdef __MINGW32__ #define HAVE_STRTOLL 1 #endif /* Define if you have the tcgetattr function. */ /*#define HAVE_TCGETATTR 1*/ /* Define if you have the tcsetattr function. */ /*#define HAVE_TCSETATTR 1*/ /* Define if you have the uname function. */ /*#define HAVE_UNAME 1*/ /* Define if you have utime() */ #define HAVE_UTIME 1 /* Define if you have the header file. */ /*#define HAVE_ALLOCA_H 1*/ /* Define if you have the malloc.h file. */ #define HAVE_MALLOC_H 1 /* Define if you have the header file. */ /* #define HAVE_ARPA_INET_H 1 */ /* Define if you have the header file. */ //#define HAVE_ASSERT_H 1 /* Define if you have the header file. */ /* #undef HAVE_CRYPTO_H */ /* Define if you have the header file. */ /*#define HAVE_DLFCN_H 1*/ /* Define if you have the header file. */ /* #undef HAVE_ERR_H */ /* Define if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have the header file. */ /* #undef HAVE_GETOPT_H */ /* Define if you have the header file. */ /* #define HAVE_NETDB_H 1 */ /* Define if you have the header file. */ /*#define HAVE_NETINET_IN_H 1*/ /* Define if you have the header file. */ /*#define HAVE_SGTTY_H 1*/ /* Define if you have the header file. */ /* #undef HAVE_SSL_H */ /* Define if you have the header file. */ /*#define HAVE_SYS_PARAM_H 1*/ /* Define if you have the header file. */ /* #define HAVE_SYS_SELECT_H 1 */ /* Define if you have the header file. */ /*#define HAVE_SYS_SOCKET_H 1*/ /* Define if you have the header file. */ /* #define HAVE_SYS_SOCKIO_H 1 */ /* Define if you have the header file. */ #define HAVE_SYS_STAT_H 1 /* Define if you have the header file */ #define HAVE_SYS_UTIME_H 1 /* Define if you have the header file. */ //#define HAVE_SYS_TYPES_H 1 /* Define if you have the header file. */ /* #define HAVE_TERMIO_H 1 */ /* Define if you have the header file. */ /* #define HAVE_TERMIOS_H 1 */ /* Name of package */ #define PACKAGE "curl" /* Define if you have the header file. */ #define HAVE_IO_H 1 /* Define if you have the header file. */ #define HAVE_TIME_H 1 /* Define if you have the header file. */ #define HAVE_WINSOCK_H 1 /* Define if you have the header file. */ //#define HAVE_WINSOCK2_H 1 /* Define if you have the header file. */ //#define HAVE_WS2TCPIP_H 1 /* Define if you have the header file. */ #define HAVE_STDLIB_H 1 /* Define if you have the closesocket function. */ #define HAVE_CLOSESOCKET 1 /* Define if you have the setvbuf function. */ #define HAVE_SETVBUF 1 /* Define if you have the RAND_screen function when using SSL */ #define HAVE_RAND_SCREEN 1 /* Define if you have the `RAND_status' function. */ #define HAVE_RAND_STATUS 1 /* Define this to if in_addr_t is not an available typedefed type */ #define in_addr_t unsigned long /* use ioctlsocket() for non-blocking sockets */ #define HAVE_IOCTLSOCKET /************************************************* * This section is for compiler specific defines.* *************************************************/ /* Borland and MS don't have this */ #if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 #else #endif /* WinCE */ #define CURL_DISABLE_FILE #define CURL_DISABLE_TELNET #define CURL_DISABLE_LDAP #define WITHOUT_MM_LIB #include #include #define ENOSPC 1 #define ENOMEM 2 #define EAGAIN 3 extern int stat(const char *path,struct stat *buffer ); #endif criticalmass-1.0.0.orig/curl/lib/libcurl.plist0000644000175000017500000000143010265631023020617 0ustar danieldaniel CFBundleInfoDictionaryVersion 6.0 CFBundleDevelopmentRegion English CFBundleExecutable curl CFBundleIdentifier com.libcurl.libcurl CFBundleVersion 7.14.0 CFBundleName libcurl CFBundlePackageType FMWK CFBundleSignature ???? CFBundleShortVersionString libcurl 7.14.0 CFBundleGetInfoString libcurl.plist 7.14.0 criticalmass-1.0.0.orig/curl/lib/inet_ntop.c0000644000175000017500000001132310265631023020253 0ustar danieldaniel/* * Original code by Paul Vixie. "curlified" by Gisle Vanem. */ #include "setup.h" #ifndef HAVE_INET_NTOP #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #include #include #define _MPRINTF_REPLACE /* use our functions only */ #include #include "inet_ntop.h" #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) /* this platform has a inet_ntoa_r() function, but no proto declared anywhere so we include our own proto to make compilers happy */ #include "inet_ntoa_r.h" #endif #define IN6ADDRSZ 16 #define INADDRSZ 4 #define INT16SZ 2 #ifdef WIN32 #define EAFNOSUPPORT WSAEAFNOSUPPORT #define SET_ERRNO(e) WSASetLastError(errno = (e)) #else #define SET_ERRNO(e) errno = e #endif /* * Format an IPv4 address, more or less like inet_ntoa(). * * Returns `dst' (as a const) * Note: * - uses no statics * - takes a u_char* not an in_addr as input */ static char *inet_ntop4 (const u_char *src, char *dst, size_t size) { #if defined(HAVE_INET_NTOA_R_2_ARGS) const char *ptr; curlassert(size >= 16); ptr = inet_ntoa_r(*(struct in_addr*)src, dst); return (char *)memmove(dst, ptr, strlen(ptr)+1); #elif defined(HAVE_INET_NTOA_R) return inet_ntoa_r(*(struct in_addr*)src, dst, size); #else const char *addr = inet_ntoa(*(struct in_addr*)src); if (strlen(addr) >= size) { SET_ERRNO(ENOSPC); return (NULL); } return strcpy(dst, addr); #endif } #ifdef ENABLE_IPV6 /* * Convert IPv6 binary address into presentation (printable) format. */ static char *inet_ntop6 (const u_char *src, char *dst, size_t size) { /* * Note that int32_t and int16_t need only be "at least" large enough * to contain a value of the specified size. On some systems, like * Crays, there is no such thing as an integer variable with 16 bits. * Keep this in mind if you think this function should have been coded * to use pointer overlays. All the world's not a VAX. */ char tmp [sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255")]; char *tp; struct { long base; long len; } best, cur; u_long words [IN6ADDRSZ / INT16SZ]; int i; /* Preprocess: * Copy the input (bytewise) array into a wordwise array. * Find the longest run of 0x00's in src[] for :: shorthanding. */ memset(words, 0, sizeof(words)); for (i = 0; i < IN6ADDRSZ; i++) words[i/2] |= (src[i] << ((1 - (i % 2)) << 3)); best.base = -1; cur.base = -1; for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) { if (words[i] == 0) { if (cur.base == -1) cur.base = i, cur.len = 1; else cur.len++; } else if (cur.base != -1) { if (best.base == -1 || cur.len > best.len) best = cur; cur.base = -1; } } if ((cur.base != -1) && (best.base == -1 || cur.len > best.len)) best = cur; if (best.base != -1 && best.len < 2) best.base = -1; /* Format the result. */ tp = tmp; for (i = 0; i < (IN6ADDRSZ / INT16SZ); i++) { /* Are we inside the best run of 0x00's? */ if (best.base != -1 && i >= best.base && i < (best.base + best.len)) { if (i == best.base) *tp++ = ':'; continue; } /* Are we following an initial run of 0x00s or any real hex? */ if (i != 0) *tp++ = ':'; /* Is this address an encapsulated IPv4? */ if (i == 6 && best.base == 0 && (best.len == 6 || (best.len == 5 && words[5] == 0xffff))) { if (!inet_ntop4(src+12, tp, sizeof(tmp) - (tp - tmp))) { SET_ERRNO(ENOSPC); return (NULL); } tp += strlen(tp); break; } tp += snprintf(tp, 5, "%lx", words[i]); } /* Was it a trailing run of 0x00's? */ if (best.base != -1 && (best.base + best.len) == (IN6ADDRSZ / INT16SZ)) *tp++ = ':'; *tp++ = '\0'; /* Check for overflow, copy, and we're done. */ if ((size_t)(tp - tmp) > size) { SET_ERRNO(ENOSPC); return (NULL); } return strcpy (dst, tmp); } #endif /* ENABLE_IPV6 */ /* * Convert a network format address to presentation format. * * Returns pointer to presentation format address (`buf'), * Returns NULL on error (see errno). */ char *Curl_inet_ntop(int af, const void *src, char *buf, size_t size) { switch (af) { case AF_INET: return inet_ntop4((const u_char*)src, buf, size); #ifdef ENABLE_IPV6 case AF_INET6: return inet_ntop6((const u_char*)src, buf, size); #endif default: SET_ERRNO(EAFNOSUPPORT); return NULL; } } #endif /* HAVE_INET_NTOP */ criticalmass-1.0.0.orig/curl/lib/inet_ntop.h0000644000175000017500000000257710265631023020273 0ustar danieldaniel#ifndef __INET_NTOP_H #define __INET_NTOP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: inet_ntop.h,v 1.3 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifdef HAVE_INET_NTOP #define Curl_inet_ntop(af,addr,buf,size) inet_ntop(af,addr,buf,size) #ifdef HAVE_ARPA_INET_H #include #endif #else char *Curl_inet_ntop(int af, const void *addr, char *buf, size_t size); #endif #endif /* __INET_NTOP_H */ criticalmass-1.0.0.orig/curl/lib/libcurl.rc0000644000175000017500000000205610265631023020075 0ustar danieldaniel#include #include "../include/curl/curlver.h" LANGUAGE 0x09,0x01 #define RC_VERSION LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR, LIBCURL_VERSION_PATCH, 0 VS_VERSION_INFO VERSIONINFO FILEVERSION RC_VERSION PRODUCTVERSION RC_VERSION FILEFLAGSMASK 0x3fL #if CURLDEBUG FILEFLAGS 1 #else FILEFLAGS 0 #endif FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "The cURL library, http://curl.haxx.se/\0" VALUE "FileDescription", "libcurl Shared Library\0" VALUE "FileVersion", LIBCURL_VERSION "\0" VALUE "InternalName", "libcurl\0" VALUE "OriginalFilename", "libcurl.dll\0" VALUE "ProductName", "The cURL library\0" VALUE "ProductVersion", LIBCURL_VERSION "\0" VALUE "LegalCopyright", "Copyright 1996-2004 by Daniel Stenberg. http://curl.haxx.se/docs/copyright.html\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END criticalmass-1.0.0.orig/curl/lib/makefile.dj0000644000175000017500000004170010265631023020206 0ustar danieldaniel# # Adapted for djgpp2 / Watt-32 / DOS by # Gisle Vanem # DEPEND_PREREQ = config.h include ../packages/DOS/common.dj # Makefile.inc provides the CSOURCES and HHEADERS defines include Makefile.inc OBJECTS := $(patsubst %.c,$(OBJ_DIR)/%.o,$(strip $(CSOURCES))) CURL_LIB = libcurl.a all: $(OBJ_DIR) config.h $(CURL_LIB) $(CURL_LIB): $(OBJECTS) ar rs $@ $? config.h: config.dj cp $^ $@ clean: - rm -f $(OBJECTS) Makefile.bak realclean vclean: clean - rm -f config.h $(CURL_LIB) # DO NOT DELETE THIS LINE $(OBJ_DIR)/file.o: file.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h progress.h sendf.h escape.h \ file.h speedcheck.h getinfo.h transfer.h url.h memory.h parsedate.h \ ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/timeval.o: timeval.c timeval.h setup.h config.h $(OBJ_DIR)/base64.o: base64.c setup.h config.h ../include/curl/mprintf.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h base64.h memory.h ../include/curl/curl.h \ memdebug.h memory.h $(OBJ_DIR)/hostip.o: hostip.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \ inet_ntop.h ../include/curl/mprintf.h memory.h memdebug.h memory.h $(OBJ_DIR)/progress.o: progress.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ sendf.h progress.h ../include/curl/mprintf.h $(OBJ_DIR)/formdata.o: formdata.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h strequal.h \ memory.h ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/cookie.o: cookie.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h strequal.h strtok.h sendf.h \ memory.h memdebug.h memory.h $(OBJ_DIR)/http.o: http.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h \ base64.h strequal.h sslgen.h http_digest.h http_ntlm.h http_negotiate.h \ url.h share.h http.h memory.h select.h parsedate.h \ ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/sendf.o: sendf.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ sendf.h connect.h sslgen.h ../include/curl/mprintf.h memory.h \ strerror.h memdebug.h memory.h $(OBJ_DIR)/ftp.o: ftp.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ sendf.h if2ip.h progress.h transfer.h escape.h http.h ftp.h strtoofft.h \ strequal.h sslgen.h connect.h strerror.h memory.h inet_ntop.h select.h \ parsedate.h ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/url.o: url.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h netrc.h base64.h sslgen.h \ transfer.h sendf.h progress.h strequal.h strerror.h escape.h strtok.h \ share.h content_encoding.h http_digest.h http_negotiate.h select.h \ multiif.h ftp.h dict.h telnet.h http.h file.h ldap.h url.h connect.h \ inet_ntop.h http_ntlm.h ca-bundle.h ../include/curl/mprintf.h memory.h \ memdebug.h memory.h $(OBJ_DIR)/dict.o: dict.c setup.h config.h urldata.h cookie.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h progress.h \ strequal.h dict.h ../include/curl/mprintf.h $(OBJ_DIR)/if2ip.o: if2ip.c setup.h config.h if2ip.h inet_ntop.h memory.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h memdebug.h memory.h $(OBJ_DIR)/speedcheck.o: speedcheck.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ sendf.h speedcheck.h $(OBJ_DIR)/ldap.o: ldap.c setup.h config.h $(OBJ_DIR)/ssluse.o: ssluse.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h url.h inet_pton.h \ ssluse.h connect.h strequal.h select.h sslgen.h \ ../include/curl/mprintf.h $(OBJ_DIR)/version.o: version.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ sslgen.h ../include/curl/mprintf.h $(OBJ_DIR)/getenv.o: getenv.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h memory.h memdebug.h \ memory.h $(OBJ_DIR)/escape.o: escape.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h memory.h \ ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/mprintf.o: mprintf.c setup.h config.h ../include/curl/mprintf.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h memory.h ../include/curl/curl.h memdebug.h \ memory.h $(OBJ_DIR)/telnet.o: telnet.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h transfer.h sendf.h telnet.h \ ../include/curl/mprintf.h arpa_telnet.h memory.h select.h memdebug.h \ memory.h $(OBJ_DIR)/netrc.o: netrc.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h netrc.h strequal.h \ strtok.h memory.h ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/getinfo.o: getinfo.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ getinfo.h memory.h sslgen.h memdebug.h memory.h $(OBJ_DIR)/transfer.o: transfer.c setup.h config.h strtoofft.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h strequal.h urldata.h \ cookie.h formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ netrc.h content_encoding.h transfer.h sendf.h speedcheck.h progress.h \ http.h url.h getinfo.h sslgen.h http_digest.h http_ntlm.h \ http_negotiate.h share.h memory.h select.h ../include/curl/mprintf.h \ memdebug.h memory.h $(OBJ_DIR)/strequal.o: strequal.c setup.h config.h strequal.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h $(OBJ_DIR)/easy.o: easy.c setup.h config.h strequal.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ transfer.h sslgen.h url.h getinfo.h share.h memory.h progress.h \ easyif.h ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/security.o: security.c setup.h config.h $(OBJ_DIR)/krb4.o: krb4.c setup.h config.h $(OBJ_DIR)/memdebug.o: memdebug.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h \ ../include/curl/mprintf.h urldata.h cookie.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h memory.h memdebug.h memory.h $(OBJ_DIR)/http_chunks.o: http_chunks.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h content_encoding.h http.h \ memory.h ../include/curl/mprintf.h memdebug.h memory.h $(OBJ_DIR)/strtok.o: strtok.c setup.h config.h strtok.h $(OBJ_DIR)/connect.o: connect.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h if2ip.h strerror.h \ connect.h memory.h select.h url.h memdebug.h memory.h $(OBJ_DIR)/llist.o: llist.c setup.h config.h llist.h memory.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h memdebug.h memory.h $(OBJ_DIR)/hash.o: hash.c setup.h config.h hash.h llist.h memory.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h memdebug.h memory.h $(OBJ_DIR)/multi.o: multi.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ transfer.h url.h connect.h progress.h memory.h easyif.h multiif.h \ sendf.h memdebug.h memory.h $(OBJ_DIR)/content_encoding.o: content_encoding.c setup.h config.h urldata.h \ cookie.h ../include/curl/curl.h ../include/curl/curlver.h \ ../include/curl/easy.h ../include/curl/multi.h ../include/curl/curl.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ sendf.h content_encoding.h memory.h memdebug.h memory.h $(OBJ_DIR)/share.o: share.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ share.h memory.h memdebug.h memory.h $(OBJ_DIR)/http_digest.o: http_digest.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h strequal.h base64.h md5.h \ http_digest.h strtok.h url.h memory.h ../include/curl/mprintf.h \ memdebug.h memory.h $(OBJ_DIR)/md5.o: md5.c setup.h config.h md5.h $(OBJ_DIR)/http_negotiate.o: http_negotiate.c setup.h config.h $(OBJ_DIR)/http_ntlm.o: http_ntlm.c setup.h config.h $(OBJ_DIR)/inet_pton.o: inet_pton.c setup.h config.h $(OBJ_DIR)/strtoofft.o: strtoofft.c setup.h config.h strtoofft.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h $(OBJ_DIR)/strerror.o: strerror.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h strerror.h urldata.h \ cookie.h formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ ../include/curl/mprintf.h $(OBJ_DIR)/hostares.o: hostares.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \ ../include/curl/mprintf.h memory.h memdebug.h memory.h $(OBJ_DIR)/hostasyn.o: hostasyn.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \ ../include/curl/mprintf.h memory.h memdebug.h memory.h $(OBJ_DIR)/hostip4.o: hostip4.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \ inet_pton.h ../include/curl/mprintf.h memory.h memdebug.h memory.h $(OBJ_DIR)/hostip6.o: hostip6.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \ inet_pton.h ../include/curl/mprintf.h memory.h memdebug.h memory.h $(OBJ_DIR)/hostsyn.o: hostsyn.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \ ../include/curl/mprintf.h memory.h memdebug.h memory.h $(OBJ_DIR)/hostthre.o: hostthre.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sendf.h share.h strerror.h url.h \ ../include/curl/mprintf.h inet_ntop.h memory.h memdebug.h memory.h $(OBJ_DIR)/inet_ntop.o: inet_ntop.c setup.h config.h $(OBJ_DIR)/parsedate.o: parsedate.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h $(OBJ_DIR)/select.o: select.c setup.h config.h ../include/curl/curl.h \ ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h urldata.h cookie.h \ formdata.h timeval.h e:/djgpp/contrib/zlib/zlib.h \ e:/djgpp/contrib/zlib/zconf.h http_chunks.h hostip.h hash.h llist.h \ connect.h select.h $(OBJ_DIR)/gtls.o: gtls.c setup.h config.h $(OBJ_DIR)/sslgen.o: sslgen.c setup.h config.h urldata.h cookie.h \ ../include/curl/curl.h ../include/curl/curlver.h ../include/curl/easy.h \ ../include/curl/multi.h ../include/curl/curl.h formdata.h timeval.h \ e:/djgpp/contrib/zlib/zlib.h e:/djgpp/contrib/zlib/zconf.h \ http_chunks.h hostip.h hash.h llist.h sslgen.h ssluse.h gtls.h sendf.h \ strequal.h url.h memory.h memdebug.h memory.h criticalmass-1.0.0.orig/curl/lib/inet_pton.c0000644000175000017500000001376210265631023020264 0ustar danieldaniel/* This is from the BIND 4.9.4 release, modified to compile by itself */ /* Copyright (c) 1996 by Internet Software Consortium. * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM DISCLAIMS * ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL INTERNET SOFTWARE * CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, 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 THIS * SOFTWARE. */ #include "setup.h" #ifndef HAVE_INET_PTON #ifdef HAVE_SYS_PARAM_H #include #endif #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #include #include #include "inet_pton.h" #define IN6ADDRSZ 16 #define INADDRSZ 4 #define INT16SZ 2 #ifdef WIN32 #define EAFNOSUPPORT WSAEAFNOSUPPORT #endif /* * WARNING: Don't even consider trying to compile this on a system where * sizeof(int) < 4. sizeof(int) > 4 is fine; all the world's not a VAX. */ static int inet_pton4(const char *src, unsigned char *dst); #ifdef ENABLE_IPV6 static int inet_pton6(const char *src, unsigned char *dst); #endif /* int * inet_pton(af, src, dst) * convert from presentation format (which usually means ASCII printable) * to network format (which is usually some kind of binary format). * return: * 1 if the address was valid for the specified address family * 0 if the address wasn't valid (`dst' is untouched in this case) * -1 if some other error occurred (`dst' is untouched in this case, too) * author: * Paul Vixie, 1996. */ int Curl_inet_pton(int af, const char *src, void *dst) { switch (af) { case AF_INET: return (inet_pton4(src, (unsigned char *)dst)); #ifdef ENABLE_IPV6 #ifndef AF_INET6 #define AF_INET6 (AF_MAX+1) /* just to let this compile */ #endif case AF_INET6: return (inet_pton6(src, (unsigned char *)dst)); #endif default: errno = EAFNOSUPPORT; return (-1); } /* NOTREACHED */ } /* int * inet_pton4(src, dst) * like inet_aton() but without all the hexadecimal and shorthand. * return: * 1 if `src' is a valid dotted quad, else 0. * notice: * does not touch `dst' unless it's returning 1. * author: * Paul Vixie, 1996. */ static int inet_pton4(const char *src, unsigned char *dst) { static const char digits[] = "0123456789"; int saw_digit, octets, ch; unsigned char tmp[INADDRSZ], *tp; saw_digit = 0; octets = 0; tp = tmp; *tp = 0; while ((ch = *src++) != '\0') { const char *pch; if ((pch = strchr(digits, ch)) != NULL) { u_int val = *tp * 10 + (u_int)(pch - digits); if (val > 255) return (0); *tp = val; if (! saw_digit) { if (++octets > 4) return (0); saw_digit = 1; } } else if (ch == '.' && saw_digit) { if (octets == 4) return (0); *++tp = 0; saw_digit = 0; } else return (0); } if (octets < 4) return (0); /* bcopy(tmp, dst, INADDRSZ); */ memcpy(dst, tmp, INADDRSZ); return (1); } #ifdef ENABLE_IPV6 /* int * inet_pton6(src, dst) * convert presentation level address to network order binary form. * return: * 1 if `src' is a valid [RFC1884 2.2] address, else 0. * notice: * (1) does not touch `dst' unless it's returning 1. * (2) :: in a full address is silently ignored. * credit: * inspired by Mark Andrews. * author: * Paul Vixie, 1996. */ static int inet_pton6(const char *src, unsigned char *dst) { static const char xdigits_l[] = "0123456789abcdef", xdigits_u[] = "0123456789ABCDEF"; unsigned char tmp[IN6ADDRSZ], *tp, *endp, *colonp; const char *xdigits, *curtok; int ch, saw_xdigit; u_int val; memset((tp = tmp), 0, IN6ADDRSZ); endp = tp + IN6ADDRSZ; colonp = NULL; /* Leading :: requires some special handling. */ if (*src == ':') if (*++src != ':') return (0); curtok = src; saw_xdigit = 0; val = 0; while ((ch = *src++) != '\0') { const char *pch; if ((pch = strchr((xdigits = xdigits_l), ch)) == NULL) pch = strchr((xdigits = xdigits_u), ch); if (pch != NULL) { val <<= 4; val |= (pch - xdigits); if (val > 0xffff) return (0); saw_xdigit = 1; continue; } if (ch == ':') { curtok = src; if (!saw_xdigit) { if (colonp) return (0); colonp = tp; continue; } if (tp + INT16SZ > endp) return (0); *tp++ = (unsigned char) (val >> 8) & 0xff; *tp++ = (unsigned char) val & 0xff; saw_xdigit = 0; val = 0; continue; } if (ch == '.' && ((tp + INADDRSZ) <= endp) && inet_pton4(curtok, tp) > 0) { tp += INADDRSZ; saw_xdigit = 0; break; /* '\0' was seen by inet_pton4(). */ } return (0); } if (saw_xdigit) { if (tp + INT16SZ > endp) return (0); *tp++ = (unsigned char) (val >> 8) & 0xff; *tp++ = (unsigned char) val & 0xff; } if (colonp != NULL) { /* * Since some memmove()'s erroneously fail to handle * overlapping regions, we'll do the shift by hand. */ const int n = tp - colonp; int i; for (i = 1; i <= n; i++) { endp[- i] = colonp[n - i]; colonp[n - i] = 0; } tp = endp; } if (tp != endp) return (0); /* bcopy(tmp, dst, IN6ADDRSZ); */ memcpy(dst, tmp, IN6ADDRSZ); return (1); } #endif /* ENABLE_IPV6 */ #endif /* HAVE_INET_PTON */ criticalmass-1.0.0.orig/curl/lib/inet_pton.h0000644000175000017500000000252010265631023020257 0ustar danieldaniel#ifndef __INET_PTON_H #define __INET_PTON_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: inet_pton.h,v 1.5 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifdef HAVE_INET_PTON #define Curl_inet_pton(x,y,z) inet_pton(x,y,z) #ifdef HAVE_ARPA_INET_H #include #endif #else int Curl_inet_pton(int, const char *, void *); #endif #endif /* __INET_PTON_H */ criticalmass-1.0.0.orig/curl/lib/README.httpauth0000644000175000017500000000645410265631023020641 0ustar danieldaniel 1. PUT/POST without a known auth to use (possibly no auth required): (When explicitly set to use a multi-pass auth when doing a POST/PUT, libcurl should immediately go the Content-Length: 0 bytes route to avoid the first send all data phase, step 2. If told to use a single-pass auth, goto step 3.) Issue the proper PUT/POST request immediately, with the correct Content-Length and Expect: headers. If a 100 response is received or the wait for one times out, start sending the request-body. If a 401 (or 407 when talking through a proxy) is received, then: If we have "more than just a little" data left to send, close the connection. Exactly what "more than just a little" means will have to be determined. Possibly the current transfer speed should be taken into account as well. NOTE: if the size of the POST data is less than MAX_INITIAL_POST_SIZE (when CURLOPT_POSTFIELDS is used), libcurl will send everything in one single write() (all request-headers and request-body) and thus it will unconditionally send the full post data here. 2. PUT/POST with multi-pass auth but not yet completely negotiated: Send a PUT/POST request, we know that it will be rejected and thus we claim Content-Length zero to avoid having to send the request-body. (This seems to be what IE does.) 3. PUT/POST as the last step in the auth negotiation, that is when we have what we believe is a completed negotiation: Send a full and proper PUT/POST request (again) with the proper Content-Length and a following request-body. NOTE: this may very well be the second (or even third) time the whole or at least parts of the request body is sent to the server. Since the data may be provided to libcurl with a callback, we need a way to tell the app that the upload is to be restarted so that the callback will provide data from the start again. This requires an API method/mechanism that libcurl doesn't have today. See below. Data Rewind It will be troublesome for some apps to deal with a rewind like this in all circumstances. I'm thinking for example when using 'curl' to upload data from stdin. If libcurl ends up having to rewind the reading for a request to succeed, of course a lack of this callback or if it returns failure, will cause the request to fail completely. The new callback is set with CURLOPT_IOCTLFUNCTION (in an attempt to add a more generic function that might be used for other IO-related controls in the future): curlioerr curl_ioctl(CURL *handle, curliocmd cmd, void *clientp); And in the case where the read is to be rewinded, it would be called with a cmd named CURLIOCMD_RESTARTREAD. The callback would then return CURLIOE_OK, if things are fine, or CURLIOE_FAILRESTART if not. Backwards Compatibility The approach used until now, that issues a HEAD on the given URL to trigger the auth negotiation could still be supported and encouraged, but it would be up to the app to first fetch a URL with GET/HEAD to negotiate on, since then a following PUT/POST wouldn't need to negotiate authentication and thus avoid double-sending data. Optionally, we keep the current approach if some option is set (CURLOPT_HEADBEFOREAUTH or similar), since it seems to work fairly well for POST on most servers. criticalmass-1.0.0.orig/curl/lib/README.memoryleak0000644000175000017500000000400010265631023021126 0ustar danieldaniel$Id: README.memoryleak,v 1.3 2003/07/22 10:00:37 bagder Exp $ _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| How To Track Down Suspected Memory Leaks in libcurl =================================================== Single-threaded Please note that this memory leak system is not adjusted to work in more than one thread. If you want/need to use it in a multi-threaded app. Please adjust accordingly. Build Rebuild libcurl with -DCURLDEBUG (usually, rerunning configure with --enable-debug fixes this). 'make clean' first, then 'make' so that all files actually are rebuilt properly. It will also make sense to build libcurl with the debug option (usually -g to the compiler) so that debugging it will be easier if you actually do find a leak in the library. This will create a library that has memory debugging enabled. Modify Your Application Add a line in your application code: curl_memdebug("filename"); This will make the malloc debug system output a full trace of all resource using functions to the given file name. Make sure you rebuild your program and that you link with the same libcurl you built for this purpose as described above. Run Your Application Run your program as usual. Watch the specified memory trace file grow. Make your program exit and use the proper libcurl cleanup functions etc. So that all non-leaks are returned/freed properly. Analyze the Flow Use the tests/memanalyze.pl perl script to analyze the memdump file: tests/memanalyze.pl < memdump This now outputs a report on what resources that were allocated but never freed etc. This report is very fine for posting to the list! If this doesn't produce any output, no leak was detected in libcurl. Then the leak is mostly likely to be in your code. criticalmass-1.0.0.orig/curl/lib/http_ntlm.c0000644000175000017500000005271610265631023020300 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_ntlm.c,v 1.43 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ #include "setup.h" /* NTLM details: http://davenport.sourceforge.net/ntlm.html http://www.innovation.ch/java/ntlm.html */ #ifndef CURL_DISABLE_HTTP #ifdef USE_NTLM /* -- WIN32 approved -- */ #include #include #include #include #include #include "urldata.h" #include "sendf.h" #include "strequal.h" #include "base64.h" #include "http_ntlm.h" #include "url.h" #include "memory.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #ifndef USE_WINDOWS_SSPI #include #include #include #if OPENSSL_VERSION_NUMBER < 0x00907001L #define DES_key_schedule des_key_schedule #define DES_cblock des_cblock #define DES_set_odd_parity des_set_odd_parity #define DES_set_key des_set_key #define DES_ecb_encrypt des_ecb_encrypt /* This is how things were done in the old days */ #define DESKEY(x) x #define DESKEYARG(x) x #else /* Modern version */ #define DESKEYARG(x) *x #define DESKEY(x) &x #endif #else #include #endif /* The last #include file should be: */ #include "memdebug.h" /* Define this to make the type-3 message include the NT response message */ #define USE_NTRESPONSES 1 /* (*) = A "security buffer" is a triplet consisting of two shorts and one long: 1. a 'short' containing the length of the buffer in bytes 2. a 'short' containing the allocated space for the buffer in bytes 3. a 'long' containing the offset to the start of the buffer from the beginning of the NTLM message, in bytes. */ CURLntlm Curl_input_ntlm(struct connectdata *conn, bool proxy, /* if proxy or not */ char *header) /* rest of the www-authenticate: header */ { /* point to the correct struct with this */ struct ntlmdata *ntlm; ntlm = proxy?&conn->proxyntlm:&conn->ntlm; /* skip initial whitespaces */ while(*header && isspace((int)*header)) header++; if(checkprefix("NTLM", header)) { header += strlen("NTLM"); while(*header && isspace((int)*header)) header++; if(*header) { /* We got a type-2 message here: Index Description Content 0 NTLMSSP Signature Null-terminated ASCII "NTLMSSP" (0x4e544c4d53535000) 8 NTLM Message Type long (0x02000000) 12 Target Name security buffer(*) 20 Flags long 24 Challenge 8 bytes (32) Context (optional) 8 bytes (two consecutive longs) (40) Target Information (optional) security buffer(*) 32 (48) start of data block */ size_t size; unsigned char *buffer; size = Curl_base64_decode(header, &buffer); if(!buffer) return CURLNTLM_BAD; ntlm->state = NTLMSTATE_TYPE2; /* we got a type-2 */ #ifdef USE_WINDOWS_SSPI if ((ntlm->type_2 = malloc(size+1)) == NULL) { free(buffer); return CURLE_OUT_OF_MEMORY; } ntlm->n_type_2 = size; memcpy(ntlm->type_2, buffer, size); #else if(size >= 48) /* the nonce of interest is index [24 .. 31], 8 bytes */ memcpy(ntlm->nonce, &buffer[24], 8); /* FIX: add an else here! */ /* at index decimal 20, there's a 32bit NTLM flag field */ free(buffer); #endif } else { if(ntlm->state >= NTLMSTATE_TYPE1) return CURLNTLM_BAD; ntlm->state = NTLMSTATE_TYPE1; /* we should sent away a type-1 */ } } return CURLNTLM_FINE; } #ifndef USE_WINDOWS_SSPI /* * Turns a 56 bit key into the 64 bit, odd parity key and sets the key. The * key schedule ks is also set. */ static void setup_des_key(unsigned char *key_56, DES_key_schedule DESKEYARG(ks)) { DES_cblock key; key[0] = key_56[0]; key[1] = ((key_56[0] << 7) & 0xFF) | (key_56[1] >> 1); key[2] = ((key_56[1] << 6) & 0xFF) | (key_56[2] >> 2); key[3] = ((key_56[2] << 5) & 0xFF) | (key_56[3] >> 3); key[4] = ((key_56[3] << 4) & 0xFF) | (key_56[4] >> 4); key[5] = ((key_56[4] << 3) & 0xFF) | (key_56[5] >> 5); key[6] = ((key_56[5] << 2) & 0xFF) | (key_56[6] >> 6); key[7] = (key_56[6] << 1) & 0xFF; DES_set_odd_parity(&key); DES_set_key(&key, ks); } /* * takes a 21 byte array and treats it as 3 56-bit DES keys. The * 8 byte plaintext is encrypted with each key and the resulting 24 * bytes are stored in the results array. */ static void calc_resp(unsigned char *keys, unsigned char *plaintext, unsigned char *results) { DES_key_schedule ks; setup_des_key(keys, DESKEY(ks)); DES_ecb_encrypt((DES_cblock*) plaintext, (DES_cblock*) results, DESKEY(ks), DES_ENCRYPT); setup_des_key(keys+7, DESKEY(ks)); DES_ecb_encrypt((DES_cblock*) plaintext, (DES_cblock*) (results+8), DESKEY(ks), DES_ENCRYPT); setup_des_key(keys+14, DESKEY(ks)); DES_ecb_encrypt((DES_cblock*) plaintext, (DES_cblock*) (results+16), DESKEY(ks), DES_ENCRYPT); } /* * Set up lanmanager and nt hashed passwords */ static void mkhash(char *password, unsigned char *nonce, /* 8 bytes */ unsigned char *lmresp /* must fit 0x18 bytes */ #ifdef USE_NTRESPONSES , unsigned char *ntresp /* must fit 0x18 bytes */ #endif ) { /* 21 bytes fits 3 7-bytes chunks, as we use 56 bit (7 bytes) as DES input, and we add three different ones, see the calc_resp() function */ unsigned char lmbuffer[21]; #ifdef USE_NTRESPONSES unsigned char ntbuffer[21]; #endif unsigned char *pw; static const unsigned char magic[] = { 0x4B, 0x47, 0x53, 0x21, 0x40, 0x23, 0x24, 0x25 }; unsigned int i; size_t len = strlen(password); /* make it fit at least 14 bytes */ pw = malloc(len<7?14:len*2); if(!pw) return; /* this will lead to a badly generated package */ if (len > 14) len = 14; for (i=0; itype_2) { free(ntlm->type_2); ntlm->type_2 = NULL; } if (ntlm->has_handles) { DeleteSecurityContext(&ntlm->c_handle); FreeCredentialsHandle(&ntlm->handle); ntlm->has_handles = 0; } if (ntlm->p_identity) { if (ntlm->identity.User) free(ntlm->identity.User); if (ntlm->identity.Password) free(ntlm->identity.Password); if (ntlm->identity.Domain) free(ntlm->identity.Domain); ntlm->p_identity = NULL; } } #endif #define SHORTPAIR(x) ((x) & 0xff), ((x) >> 8) #define LONGQUARTET(x) ((x) & 0xff), (((x) >> 8)&0xff), \ (((x) >>16)&0xff), ((x)>>24) /* this is for creating ntlm header output */ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy) { const char *domain=""; /* empty */ const char *host=""; /* empty */ #ifndef USE_WINDOWS_SSPI int domlen=(int)strlen(domain); int hostlen = (int)strlen(host); int hostoff; /* host name offset */ int domoff; /* domain name offset */ #endif size_t size; char *base64=NULL; unsigned char ntlmbuf[256]; /* enough, unless the host/domain is very long */ /* point to the address of the pointer that holds the string to sent to the server, which is for a plain host or for a HTTP proxy */ char **allocuserpwd; /* point to the name and password for this */ char *userp; char *passwdp; /* point to the correct struct with this */ struct ntlmdata *ntlm; struct auth *authp; curlassert(conn); curlassert(conn->data); if(proxy) { allocuserpwd = &conn->allocptr.proxyuserpwd; userp = conn->proxyuser; passwdp = conn->proxypasswd; ntlm = &conn->proxyntlm; authp = &conn->data->state.authproxy; } else { allocuserpwd = &conn->allocptr.userpwd; userp = conn->user; passwdp = conn->passwd; ntlm = &conn->ntlm; authp = &conn->data->state.authhost; } authp->done = FALSE; /* not set means empty */ if(!userp) userp=(char *)""; if(!passwdp) passwdp=(char *)""; switch(ntlm->state) { case NTLMSTATE_TYPE1: default: /* for the weird cases we (re)start here */ #ifdef USE_WINDOWS_SSPI { SecBuffer buf; SecBufferDesc desc; SECURITY_STATUS status; ULONG attrs; const char *user; int domlen; ntlm_sspi_cleanup(ntlm); user = strchr(userp, '\\'); if (!user) user = strchr(userp, '/'); if (user) { domain = userp; domlen = user - userp; user++; } else { user = userp; domain = ""; domlen = 0; } if (user && *user) { /* note: initialize all of this before doing the mallocs so that * it can be cleaned up later without leaking memory. */ ntlm->p_identity = &ntlm->identity; memset(ntlm->p_identity, 0, sizeof(*ntlm->p_identity)); if ((ntlm->identity.User = (unsigned char *)strdup(user)) == NULL) return CURLE_OUT_OF_MEMORY; ntlm->identity.UserLength = strlen(user); if ((ntlm->identity.Password = (unsigned char *)strdup(passwdp)) == NULL) return CURLE_OUT_OF_MEMORY; ntlm->identity.PasswordLength = strlen(passwdp); if ((ntlm->identity.Domain = malloc(domlen+1)) == NULL) return CURLE_OUT_OF_MEMORY; strncpy((char *)ntlm->identity.Domain, domain, domlen); ntlm->identity.Domain[domlen] = '\0'; ntlm->identity.DomainLength = domlen; ntlm->identity.Flags = SEC_WINNT_AUTH_IDENTITY_ANSI; } else { ntlm->p_identity = NULL; } if (AcquireCredentialsHandle( NULL, (char *)"NTLM", SECPKG_CRED_OUTBOUND, NULL, ntlm->p_identity, NULL, NULL, &ntlm->handle, NULL ) != SEC_E_OK) { return CURLE_OUT_OF_MEMORY; } desc.ulVersion = SECBUFFER_VERSION; desc.cBuffers = 1; desc.pBuffers = &buf; buf.cbBuffer = sizeof(ntlmbuf); buf.BufferType = SECBUFFER_TOKEN; buf.pvBuffer = ntlmbuf; status = InitializeSecurityContext(&ntlm->handle, NULL, (char *) host, ISC_REQ_CONFIDENTIALITY | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONNECTION, 0, SECURITY_NETWORK_DREP, NULL, 0, &ntlm->c_handle, &desc, &attrs, NULL ); if (status == SEC_I_COMPLETE_AND_CONTINUE || status == SEC_I_CONTINUE_NEEDED) { CompleteAuthToken(&ntlm->c_handle, &desc); } else if (status != SEC_E_OK) { FreeCredentialsHandle(&ntlm->handle); return CURLE_RECV_ERROR; } ntlm->has_handles = 1; size = buf.cbBuffer; } #else hostoff = 32; domoff = hostoff + hostlen; /* Create and send a type-1 message: Index Description Content 0 NTLMSSP Signature Null-terminated ASCII "NTLMSSP" (0x4e544c4d53535000) 8 NTLM Message Type long (0x01000000) 12 Flags long 16 Supplied Domain security buffer(*) 24 Supplied Workstation security buffer(*) 32 start of data block */ snprintf((char *)ntlmbuf, sizeof(ntlmbuf), "NTLMSSP%c" "\x01%c%c%c" /* 32-bit type = 1 */ "%c%c%c%c" /* 32-bit NTLM flag field */ "%c%c" /* domain length */ "%c%c" /* domain allocated space */ "%c%c" /* domain name offset */ "%c%c" /* 2 zeroes */ "%c%c" /* host length */ "%c%c" /* host allocated space */ "%c%c" /* host name offset */ "%c%c" /* 2 zeroes */ "%s" /* host name */ "%s", /* domain string */ 0, /* trailing zero */ 0,0,0, /* part of type-1 long */ LONGQUARTET( NTLMFLAG_NEGOTIATE_OEM| /* 2 */ NTLMFLAG_NEGOTIATE_NTLM_KEY /* 200 */ /* equals 0x0202 */ ), SHORTPAIR(domlen), SHORTPAIR(domlen), SHORTPAIR(domoff), 0,0, SHORTPAIR(hostlen), SHORTPAIR(hostlen), SHORTPAIR(hostoff), 0,0, host, domain); /* initial packet length */ size = 32 + hostlen + domlen; #endif /* now keeper of the base64 encoded package size */ size = Curl_base64_encode((char *)ntlmbuf, size, &base64); if(size >0 ) { Curl_safefree(*allocuserpwd); *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n", proxy?"Proxy-":"", base64); free(base64); } else return CURLE_OUT_OF_MEMORY; /* FIX TODO */ break; case NTLMSTATE_TYPE2: /* We received the type-2 already, create a type-3 message: Index Description Content 0 NTLMSSP Signature Null-terminated ASCII "NTLMSSP" (0x4e544c4d53535000) 8 NTLM Message Type long (0x03000000) 12 LM/LMv2 Response security buffer(*) 20 NTLM/NTLMv2 Response security buffer(*) 28 Domain Name security buffer(*) 36 User Name security buffer(*) 44 Workstation Name security buffer(*) (52) Session Key (optional) security buffer(*) (60) Flags (optional) long 52 (64) start of data block */ { #ifdef USE_WINDOWS_SSPI SecBuffer type_2, type_3; SecBufferDesc type_2_desc, type_3_desc; SECURITY_STATUS status; ULONG attrs; type_2_desc.ulVersion = type_3_desc.ulVersion = SECBUFFER_VERSION; type_2_desc.cBuffers = type_3_desc.cBuffers = 1; type_2_desc.pBuffers = &type_2; type_3_desc.pBuffers = &type_3; type_2.BufferType = SECBUFFER_TOKEN; type_2.pvBuffer = ntlm->type_2; type_2.cbBuffer = ntlm->n_type_2; type_3.BufferType = SECBUFFER_TOKEN; type_3.pvBuffer = ntlmbuf; type_3.cbBuffer = sizeof(ntlmbuf); status = InitializeSecurityContext(&ntlm->handle, &ntlm->c_handle, (char *) host, ISC_REQ_CONFIDENTIALITY | ISC_REQ_REPLAY_DETECT | ISC_REQ_CONNECTION, 0, SECURITY_NETWORK_DREP, &type_2_desc, 0, &ntlm->c_handle, &type_3_desc, &attrs, NULL); if (status != SEC_E_OK) return CURLE_RECV_ERROR; size = type_3.cbBuffer; ntlm_sspi_cleanup(ntlm); #else int lmrespoff; int ntrespoff; int useroff; unsigned char lmresp[0x18]; /* fixed-size */ #ifdef USE_NTRESPONSES unsigned char ntresp[0x18]; /* fixed-size */ #endif const char *user; int userlen; user = strchr(userp, '\\'); if(!user) user = strchr(userp, '/'); if (user) { domain = userp; domlen = (int)(user - domain); user++; } else user = userp; userlen = (int)strlen(user); mkhash(passwdp, &ntlm->nonce[0], lmresp #ifdef USE_NTRESPONSES , ntresp #endif ); domoff = 64; /* always */ useroff = domoff + domlen; hostoff = useroff + userlen; lmrespoff = hostoff + hostlen; ntrespoff = lmrespoff + 0x18; /* Create the big type-3 message binary blob */ size = snprintf((char *)ntlmbuf, sizeof(ntlmbuf), "NTLMSSP%c" "\x03%c%c%c" /* type-3, 32 bits */ "%c%c%c%c" /* LanManager length + allocated space */ "%c%c" /* LanManager offset */ "%c%c" /* 2 zeroes */ "%c%c" /* NT-response length */ "%c%c" /* NT-response allocated space */ "%c%c" /* NT-response offset */ "%c%c" /* 2 zeroes */ "%c%c" /* domain length */ "%c%c" /* domain allocated space */ "%c%c" /* domain name offset */ "%c%c" /* 2 zeroes */ "%c%c" /* user length */ "%c%c" /* user allocated space */ "%c%c" /* user offset */ "%c%c" /* 2 zeroes */ "%c%c" /* host length */ "%c%c" /* host allocated space */ "%c%c" /* host offset */ "%c%c%c%c%c%c" /* 6 zeroes */ "\xff\xff" /* message length */ "%c%c" /* 2 zeroes */ "\x01\x82" /* flags */ "%c%c" /* 2 zeroes */ /* domain string */ /* user string */ /* host string */ /* LanManager response */ /* NT response */ , 0, /* zero termination */ 0,0,0, /* type-3 long, the 24 upper bits */ SHORTPAIR(0x18), /* LanManager response length, twice */ SHORTPAIR(0x18), SHORTPAIR(lmrespoff), 0x0, 0x0, #ifdef USE_NTRESPONSES SHORTPAIR(0x18), /* NT-response length, twice */ SHORTPAIR(0x18), #else 0x0, 0x0, 0x0, 0x0, #endif SHORTPAIR(ntrespoff), 0x0, 0x0, SHORTPAIR(domlen), SHORTPAIR(domlen), SHORTPAIR(domoff), 0x0, 0x0, SHORTPAIR(userlen), SHORTPAIR(userlen), SHORTPAIR(useroff), 0x0, 0x0, SHORTPAIR(hostlen), SHORTPAIR(hostlen), SHORTPAIR(hostoff), 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0); /* size is now 64 */ size=64; ntlmbuf[62]=ntlmbuf[63]=0; memcpy(&ntlmbuf[size], domain, domlen); size += domlen; memcpy(&ntlmbuf[size], user, userlen); size += userlen; /* we append the binary hashes to the end of the blob */ if(size < ((int)sizeof(ntlmbuf) - 0x18)) { memcpy(&ntlmbuf[size], lmresp, 0x18); size += 0x18; } #ifdef USE_NTRESPONSES if(size < ((int)sizeof(ntlmbuf) - 0x18)) { memcpy(&ntlmbuf[size], ntresp, 0x18); size += 0x18; } #endif ntlmbuf[56] = (unsigned char)(size & 0xff); ntlmbuf[57] = (unsigned char)(size >> 8); #endif /* convert the binary blob into base64 */ size = Curl_base64_encode((char *)ntlmbuf, size, &base64); if(size >0 ) { Curl_safefree(*allocuserpwd); *allocuserpwd = aprintf("%sAuthorization: NTLM %s\r\n", proxy?"Proxy-":"", base64); free(base64); } else return CURLE_OUT_OF_MEMORY; /* FIX TODO */ ntlm->state = NTLMSTATE_TYPE3; /* we sent a type-3 */ authp->done = TRUE; } break; case NTLMSTATE_TYPE3: /* connection is already authenticated, * don't send a header in future requests */ if(*allocuserpwd) { free(*allocuserpwd); *allocuserpwd=NULL; } authp->done = TRUE; break; } return CURLE_OK; } void Curl_ntlm_cleanup(struct connectdata *conn) { #ifdef USE_WINDOWS_SSPI ntlm_sspi_cleanup(&conn->ntlm); ntlm_sspi_cleanup(&conn->proxyntlm); #else (void)conn; #endif } #endif /* USE_NTLM */ #endif /* !CURL_DISABLE_HTTP */ criticalmass-1.0.0.orig/curl/lib/http_ntlm.h0000644000175000017500000001273610265631023020303 0ustar danieldaniel#ifndef __HTTP_NTLM_H #define __HTTP_NTLM_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: http_ntlm.h,v 1.9 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ typedef enum { CURLNTLM_NONE, /* not a ntlm */ CURLNTLM_BAD, /* an ntlm, but one we don't like */ CURLNTLM_FIRST, /* the first 401-reply we got with NTLM */ CURLNTLM_FINE, /* an ntlm we act on */ CURLNTLM_LAST /* last entry in this enum, don't use */ } CURLntlm; /* this is for ntlm header input */ CURLntlm Curl_input_ntlm(struct connectdata *conn, bool proxy, char *header); /* this is for creating ntlm header output */ CURLcode Curl_output_ntlm(struct connectdata *conn, bool proxy); void Curl_ntlm_cleanup(struct connectdata *conn); #if !defined(USE_SSLEAY) && !defined(USE_WINDOWS_SSPI) #define Curl_ntlm_cleanup(x) #endif /* Flag bits definitions based on http://davenport.sourceforge.net/ntlm.html */ #define NTLMFLAG_NEGOTIATE_UNICODE (1<<0) /* Indicates that Unicode strings are supported for use in security buffer data. */ #define NTLMFLAG_NEGOTIATE_OEM (1<<1) /* Indicates that OEM strings are supported for use in security buffer data. */ #define NTLMFLAG_REQUEST_TARGET (1<<2) /* Requests that the server's authentication realm be included in the Type 2 message. */ /* unknown (1<<3) */ #define NTLMFLAG_NEGOTIATE_SIGN (1<<4) /* Specifies that authenticated communication between the client and server should carry a digital signature (message integrity). */ #define NTLMFLAG_NEGOTIATE_SEAL (1<<5) /* Specifies that authenticated communication between the client and server should be encrypted (message confidentiality). */ #define NTLMFLAG_NEGOTIATE_DATAGRAM_STYLE (1<<6) /* unknown purpose */ #define NTLMFLAG_NEGOTIATE_LM_KEY (1<<7) /* Indicates that the LAN Manager session key should be used for signing and sealing authenticated communications. */ #define NTLMFLAG_NEGOTIATE_NETWARE (1<<8) /* unknown purpose */ #define NTLMFLAG_NEGOTIATE_NTLM_KEY (1<<9) /* Indicates that NTLM authentication is being used. */ /* unknown (1<<10) */ /* unknown (1<<11) */ #define NTLMFLAG_NEGOTIATE_DOMAIN_SUPPLIED (1<<12) /* Sent by the client in the Type 1 message to indicate that a desired authentication realm is included in the message. */ #define NTLMFLAG_NEGOTIATE_WORKSTATION_SUPPLIED (1<<13) /* Sent by the client in the Type 1 message to indicate that the client workstation's name is included in the message. */ #define NTLMFLAG_NEGOTIATE_LOCAL_CALL (1<<14) /* Sent by the server to indicate that the server and client are on the same machine. Implies that the client may use a pre-established local security context rather than responding to the challenge. */ #define NTLMFLAG_NEGOTIATE_ALWAYS_SIGN (1<<15) /* Indicates that authenticated communication between the client and server should be signed with a "dummy" signature. */ #define NTLMFLAG_TARGET_TYPE_DOMAIN (1<<16) /* Sent by the server in the Type 2 message to indicate that the target authentication realm is a domain. */ #define NTLMFLAG_TARGET_TYPE_SERVER (1<<17) /* Sent by the server in the Type 2 message to indicate that the target authentication realm is a server. */ #define NTLMFLAG_TARGET_TYPE_SHARE (1<<18) /* Sent by the server in the Type 2 message to indicate that the target authentication realm is a share. Presumably, this is for share-level authentication. Usage is unclear. */ #define NTLMFLAG_NEGOTIATE_NTLM2_KEY (1<<19) /* Indicates that the NTLM2 signing and sealing scheme should be used for protecting authenticated communications. */ #define NTLMFLAG_REQUEST_INIT_RESPONSE (1<<20) /* unknown purpose */ #define NTLMFLAG_REQUEST_ACCEPT_RESPONSE (1<<21) /* unknown purpose */ #define NTLMFLAG_REQUEST_NONNT_SESSION_KEY (1<<22) /* unknown purpose */ #define NTLMFLAG_NEGOTIATE_TARGET_INFO (1<<23) /* Sent by the server in the Type 2 message to indicate that it is including a Target Information block in the message. */ /* unknown (1<24) */ /* unknown (1<25) */ /* unknown (1<26) */ /* unknown (1<27) */ /* unknown (1<28) */ #define NTLMFLAG_NEGOTIATE_128 (1<<29) /* Indicates that 128-bit encryption is supported. */ #define NTLMFLAG_NEGOTIATE_KEY_EXCHANGE (1<<30) /* unknown purpose */ #define NTLMFLAG_NEGOTIATE_56 (1<<31) /* Indicates that 56-bit encryption is supported. */ #endif criticalmass-1.0.0.orig/curl/lib/strequal.c0000644000175000017500000000755610265631023020131 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: strequal.c,v 1.27 2004/10/06 07:50:18 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include "strequal.h" #ifdef HAVE_STRCASECMP /* this is for "-ansi -Wall -pedantic" to stop complaining! */ extern int (strcasecmp)(const char *s1, const char *s2); extern int (strncasecmp)(const char *s1, const char *s2, size_t n); #endif int curl_strequal(const char *first, const char *second) { #if defined(HAVE_STRCASECMP) return !(strcasecmp)(first, second); #elif defined(HAVE_STRCMPI) return !(strcmpi)(first, second); #elif defined(HAVE_STRICMP) return !(stricmp)(first, second); #else while (*first && *second) { if (toupper(*first) != toupper(*second)) { break; } first++; second++; } return toupper(*first) == toupper(*second); #endif } int curl_strnequal(const char *first, const char *second, size_t max) { #if defined(HAVE_STRCASECMP) return !strncasecmp(first, second, max); #elif defined(HAVE_STRCMPI) return !strncmpi(first, second, max); #elif defined(HAVE_STRICMP) return !strnicmp(first, second, max); #else while (*first && *second && max) { if (toupper(*first) != toupper(*second)) { break; } max--; first++; second++; } if(0 == max) return 1; /* they are equal this far */ return toupper(*first) == toupper(*second); #endif } /* * Curl_strcasestr() finds the first occurrence of the substring needle in the * string haystack. The terminating `\0' characters are not compared. The * matching is done CASE INSENSITIVE, which thus is the difference between * this and strstr(). */ char *Curl_strcasestr(const char *haystack, const char *needle) { size_t nlen = strlen(needle); size_t hlen = strlen(haystack); while(hlen-- >= nlen) { if(curl_strnequal(haystack, needle, nlen)) return (char *)haystack; haystack++; } return NULL; } #ifndef HAVE_STRLCAT /* * The strlcat() function appends the NUL-terminated string src to the end * of dst. It will append at most size - strlen(dst) - 1 bytes, NUL-termi- * nating the result. * * The strlcpy() and strlcat() functions return the total length of the * string they tried to create. For strlcpy() that means the length of src. * For strlcat() that means the initial length of dst plus the length of * src. While this may seem somewhat confusing it was done to make trunca- * tion detection simple. * * */ size_t Curl_strlcat(char *dst, const char *src, size_t siz) { char *d = dst; const char *s = src; size_t n = siz; size_t dlen; /* Find the end of dst and adjust bytes left but don't go past end */ while (n-- != 0 && *d != '\0') d++; dlen = d - dst; n = siz - dlen; if (n == 0) return(dlen + strlen(s)); while (*s != '\0') { if (n != 1) { *d++ = *s; n--; } s++; } *d = '\0'; return(dlen + (s - src)); /* count does not include NUL */ } #endif criticalmass-1.0.0.orig/curl/lib/strequal.h0000644000175000017500000000314610265631023020125 0ustar danieldaniel#ifndef __STREQUAL_H #define __STREQUAL_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: strequal.h,v 1.17 2005/04/22 20:48:07 bagder Exp $ ***************************************************************************/ #include #define strequal(a,b) curl_strequal(a,b) #define strnequal(a,b,c) curl_strnequal(a,b,c) /* checkprefix() is a shorter version of the above, used when the first argument is zero-byte terminated */ #define checkprefix(a,b) strnequal(a,b,strlen(a)) /* case insensitive strstr() */ char *Curl_strcasestr(const char *haystack, const char *needle); #ifndef HAVE_STRLCAT #define strlcat(x,y,z) Curl_strlcat(x,y,z) #endif size_t strlcat(char *dst, const char *src, size_t siz); #endif criticalmass-1.0.0.orig/curl/lib/strerror.c0000644000175000017500000004172010265641615020152 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * ***************************************************************************/ #include "setup.h" #include #include #include #include #ifdef USE_LIBIDN #include #endif #include "strerror.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #ifdef HAVE_NO_STRERROR_R_DECL #ifdef HAVE_POSIX_STRERROR_R /* seen on AIX 5100-02 gcc 2.9 */ extern int strerror_r(int errnum, char *strerrbuf, size_t buflen); #else extern char *strerror_r(int errnum, char *buf, size_t buflen); #endif #endif const char * curl_easy_strerror(CURLcode error) { #ifndef CURL_DISABLE_VERBOSE_STRINGS switch (error) { case CURLE_OK: return "no error"; case CURLE_UNSUPPORTED_PROTOCOL: return "unsupported protocol"; case CURLE_FAILED_INIT: return "failed init"; case CURLE_URL_MALFORMAT: return "URL using bad/illegal format or missing URL"; case CURLE_COULDNT_RESOLVE_PROXY: return "couldnt resolve proxy name"; case CURLE_COULDNT_RESOLVE_HOST: return "couldnt resolve host name"; case CURLE_COULDNT_CONNECT: return "couldn't connect to server"; case CURLE_FTP_WEIRD_SERVER_REPLY: return "FTP: weird server reply"; case CURLE_FTP_ACCESS_DENIED: return "FTP: access denied"; case CURLE_FTP_USER_PASSWORD_INCORRECT: return "FTP: user and/or password incorrect"; case CURLE_FTP_WEIRD_PASS_REPLY: return "FTP: unknown PASS reply"; case CURLE_FTP_WEIRD_USER_REPLY: return "FTP: unknown USER reply"; case CURLE_FTP_WEIRD_PASV_REPLY: return "FTP: unknown PASV reply"; case CURLE_FTP_WEIRD_227_FORMAT: return "FTP: unknown 227 response format"; case CURLE_FTP_CANT_GET_HOST: return "FTP: can't figure out the host in the PASV response"; case CURLE_FTP_CANT_RECONNECT: return "FTP: can't connect to server the response code is unknown"; case CURLE_FTP_COULDNT_SET_BINARY: return "FTP: couldn't set binary mode"; case CURLE_PARTIAL_FILE: return "Transferred a partial file"; case CURLE_FTP_COULDNT_RETR_FILE: return "FTP: couldn't retrieve (RETR failed) the specified file"; case CURLE_FTP_WRITE_ERROR: return "FTP: the post-transfer acknowledge response was not OK"; case CURLE_FTP_QUOTE_ERROR: return "FTP: a quote command returned error"; case CURLE_HTTP_RETURNED_ERROR: return "HTTP response code said error"; case CURLE_WRITE_ERROR: return "failed writing received data to disk/application"; case CURLE_FTP_COULDNT_STOR_FILE: return "failed FTP upload (the STOR command)"; case CURLE_READ_ERROR: return "failed to open/read local data from file/application"; case CURLE_OUT_OF_MEMORY: return "out of memory"; case CURLE_OPERATION_TIMEOUTED: return "a timeout was reached"; case CURLE_FTP_COULDNT_SET_ASCII: return "FTP could not set ASCII mode (TYPE A)"; case CURLE_FTP_PORT_FAILED: return "FTP command PORT failed"; case CURLE_FTP_COULDNT_USE_REST: return "FTP command REST failed"; case CURLE_FTP_COULDNT_GET_SIZE: return "FTP command SIZE failed"; case CURLE_HTTP_RANGE_ERROR: return "a range was requested but the server did not deliver it"; case CURLE_HTTP_POST_ERROR: return "internal problem setting up the POST"; case CURLE_SSL_CONNECT_ERROR: return "SSL connect error"; case CURLE_BAD_DOWNLOAD_RESUME: return "couldn't resume download"; case CURLE_FILE_COULDNT_READ_FILE: return "couldn't read a file:// file"; case CURLE_LDAP_CANNOT_BIND: return "LDAP: cannot bind"; case CURLE_LDAP_SEARCH_FAILED: return "LDAP: search failed"; case CURLE_LIBRARY_NOT_FOUND: return "a required shared library was not found"; case CURLE_FUNCTION_NOT_FOUND: return "a required function in the shared library was not found"; case CURLE_ABORTED_BY_CALLBACK: return "the operation was aborted by an application callback"; case CURLE_BAD_FUNCTION_ARGUMENT: return "a libcurl function was given a bad argument"; case CURLE_INTERFACE_FAILED: return "failed binding local connection end"; case CURLE_TOO_MANY_REDIRECTS : return "number of redirects hit maximum amount"; case CURLE_UNKNOWN_TELNET_OPTION: return "User specified an unknown option"; case CURLE_TELNET_OPTION_SYNTAX : return "Malformed telnet option"; case CURLE_SSL_PEER_CERTIFICATE: return "SSL peer certificate was not ok"; case CURLE_GOT_NOTHING: return "server returned nothing (no headers, no data)"; case CURLE_SSL_ENGINE_NOTFOUND: return "SSL crypto engine not found"; case CURLE_SSL_ENGINE_SETFAILED: return "can not set SSL crypto engine as default"; case CURLE_SSL_ENGINE_INITFAILED: return "failed to initialise SSL crypto engine"; case CURLE_SEND_ERROR: return "failed sending data to the peer"; case CURLE_RECV_ERROR: return "failure when receiving data from the peer"; case CURLE_SHARE_IN_USE: return "share is already in use"; case CURLE_SSL_CERTPROBLEM: return "problem with the local SSL certificate"; case CURLE_SSL_CIPHER: return "couldn't use specified SSL cipher"; case CURLE_SSL_CACERT: return "problem with the SSL CA cert (path? access rights?)"; case CURLE_BAD_CONTENT_ENCODING: return "Unrecognized HTTP Content-Encoding"; case CURLE_LDAP_INVALID_URL: return "Invalid LDAP URL"; case CURLE_FILESIZE_EXCEEDED: return "Maximum file size exceeded"; case CURLE_FTP_SSL_FAILED: return "Requested FTP SSL level failed"; case CURLE_SEND_FAIL_REWIND: return "Send failed since rewinding of the data stream failed"; case CURLE_LOGIN_DENIED: return "FTP: login denied";; case CURLE_URL_MALFORMAT_USER: /* not used by current libcurl */ case CURLE_MALFORMAT_USER: /* not used by current libcurl */ case CURLE_BAD_CALLING_ORDER: /* not used by current libcurl */ case CURLE_BAD_PASSWORD_ENTERED:/* not used by current libcurl */ case CURLE_OBSOLETE: /* not used by current libcurl */ case CURL_LAST: break; } /* * By using a switch, gcc -Wall will complain about enum values * which do not appear, helping keep this function up-to-date. * By using gcc -Wall -Werror, you can't forget. * * A table would not have the same benefit. Most compilers will * generate code very similar to a table in any case, so there * is little performance gain from a table. And something is broken * for the user's application, anyways, so does it matter how fast * it _doesn't_ work? * * The line number for the error will be near this comment, which * is why it is here, and not at the start of the switch. */ return "unknown error"; #else if (error == CURLE_OK) return "no error"; else return "error"; #endif } const char * curl_multi_strerror(CURLMcode error) { #ifndef CURL_DISABLE_VERBOSE_STRINGS switch (error) { case CURLM_CALL_MULTI_PERFORM: return "please call curl_multi_perform() soon"; case CURLM_OK: return "no error"; case CURLM_BAD_HANDLE: return "invalid multi handle"; case CURLM_BAD_EASY_HANDLE: return "invalid easy handle"; case CURLM_OUT_OF_MEMORY: return "out of memory"; case CURLM_INTERNAL_ERROR: return "internal error"; case CURLM_LAST: break; } return "unknown error"; #else if (error == CURLM_OK) return "no error"; else return "error"; #endif } const char * curl_share_strerror(CURLSHcode error) { #ifndef CURL_DISABLE_VERBOSE_STRINGS switch (error) { case CURLSHE_OK: return "no error"; case CURLSHE_BAD_OPTION: return "unknown share option"; case CURLSHE_IN_USE: return "share currently in use"; case CURLSHE_INVALID: return "invalid share handle"; case CURLSHE_NOMEM: return "out of memory"; case CURLSHE_LAST: break; } return "CURLSH unknown"; #else if (error == CURLSHE_OK) return "no error"; else return "error"; #endif } #if defined(WIN32) && !defined(__CYGWIN__) /* This function handles most / all (?) Winsock errors cURL is able to produce. */ static const char * get_winsock_error (int err, char *buf, size_t len) { const char *p; #ifndef CURL_DISABLE_VERBOSE_STRINGS switch (err) { case WSAEINTR: p = "Call interrupted."; break; case WSAEBADF: p = "Bad file"; break; case WSAEACCES: p = "Bad access"; break; case WSAEFAULT: p = "Bad argument"; break; case WSAEINVAL: p = "Invalid arguments"; break; case WSAEMFILE: p = "Out of file descriptors"; break; case WSAEWOULDBLOCK: p = "Call would block"; break; case WSAEINPROGRESS: case WSAEALREADY: p = "Blocking call in progress"; break; case WSAENOTSOCK: p = "Descriptor is not a socket."; break; case WSAEDESTADDRREQ: p = "Need destination address"; break; case WSAEMSGSIZE: p = "Bad message size"; break; case WSAEPROTOTYPE: p = "Bad protocol"; break; case WSAENOPROTOOPT: p = "Protocol option is unsupported"; break; case WSAEPROTONOSUPPORT: p = "Protocol is unsupported"; break; case WSAESOCKTNOSUPPORT: p = "Socket is unsupported"; break; case WSAEOPNOTSUPP: p = "Operation not supported"; break; case WSAEAFNOSUPPORT: p = "Address family not supported"; break; case WSAEPFNOSUPPORT: p = "Protocol family not supported"; break; case WSAEADDRINUSE: p = "Address already in use"; break; case WSAEADDRNOTAVAIL: p = "Address not available"; break; case WSAENETDOWN: p = "Network down"; break; case WSAENETUNREACH: p = "Network unreachable"; break; case WSAENETRESET: p = "Network has been reset"; break; case WSAECONNABORTED: p = "Connection was aborted"; break; case WSAECONNRESET: p = "Connection was reset"; break; case WSAENOBUFS: p = "No buffer space"; break; case WSAEISCONN: p = "Socket is already connected"; break; case WSAENOTCONN: p = "Socket is not connected"; break; case WSAESHUTDOWN: p = "Socket has been shut down"; break; case WSAETOOMANYREFS: p = "Too many references"; break; case WSAETIMEDOUT: p = "Timed out"; break; case WSAECONNREFUSED: p = "Connection refused"; break; case WSAELOOP: p = "Loop??"; break; case WSAENAMETOOLONG: p = "Name too long"; break; case WSAEHOSTDOWN: p = "Host down"; break; case WSAEHOSTUNREACH: p = "Host unreachable"; break; case WSAENOTEMPTY: p = "Not empty"; break; case WSAEPROCLIM: p = "Process limit reached"; break; case WSAEUSERS: p = "Too many users"; break; case WSAEDQUOT: p = "Bad quota"; break; case WSAESTALE: p = "Something is stale"; break; case WSAEREMOTE: p = "Remote error"; break; case WSAEDISCON: p = "Disconnected"; break; /* Extended Winsock errors */ case WSASYSNOTREADY: p = "Winsock library is not ready"; break; case WSANOTINITIALISED: p = "Winsock library not initalised"; break; case WSAVERNOTSUPPORTED: p = "Winsock version not supported."; break; /* getXbyY() errors (already handled in herrmsg): * Authoritative Answer: Host not found */ case WSAHOST_NOT_FOUND: p = "Host not found"; break; /* Non-Authoritative: Host not found, or SERVERFAIL */ case WSATRY_AGAIN: p = "Host not found, try again"; break; /* Non recoverable errors, FORMERR, REFUSED, NOTIMP */ case WSANO_RECOVERY: p = "Unrecoverable error in call to nameserver"; break; /* Valid name, no data record of requested type */ case WSANO_DATA: p = "No data record of requested type"; break; default: return NULL; } #else if (err == CURLE_OK) return NULL; else p = "error"; #endif strncpy (buf, p, len); buf [len-1] = '\0'; return buf; } #endif /* WIN32 && !__CYGWIN__ */ /* * Our thread-safe and smart strerror() replacement. * * The 'err' argument passed in to this function MUST be a true errno number * as reported on this system. We do no range checking on the number before * we pass it to the "number-to-message" convertion function and there might * be systems that don't do proper range checking in there themselves. * * We don't do range checking (on systems other than Windows) since there is * no good reliable and portable way to do it. */ const char *Curl_strerror(struct connectdata *conn, int err) { char *buf, *p; size_t max; curlassert(conn); curlassert(err >= 0); buf = conn->syserr_buf; max = sizeof(conn->syserr_buf)-1; *buf = '\0'; #if defined(WIN32) && !defined(__CYGWIN__) #ifdef _WIN32_WCE buf[0]=0; { wchar_t wbuf[256]; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, LANG_NEUTRAL, wbuf, sizeof(wbuf)/sizeof(wchar_t), NULL); wcstombs(buf,wbuf,max); } #else /* 'sys_nerr' is the maximum errno number, it is not widely portable */ if (err >= 0 && err < sys_nerr) strncpy(buf, strerror(err), max); else { if (!get_winsock_error(err, buf, max) && !FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, LANG_NEUTRAL, buf, (DWORD)max, NULL)) snprintf(buf, max, "Unknown error %d (%#x)", err, err); } #endif #else /* not native Windows coming up */ /* These should be atomic and hopefully thread-safe */ #ifdef HAVE_STRERROR_R /* There are two different APIs for strerror_r(). The POSIX and the GLIBC versions. */ #ifdef HAVE_POSIX_STRERROR_R strerror_r(err, buf, max); /* this may set errno to ERANGE if insufficient storage was supplied via 'strerrbuf' and 'buflen' to contain the generated message string, or EINVAL if the value of 'errnum' is not a valid error number.*/ #else { /* HAVE_GLIBC_STRERROR_R */ char buffer[256]; char *msg = strerror_r(err, buffer, sizeof(buffer)); /* this version of strerror_r() only *might* use the buffer we pass to the function, but it always returns the error message as a pointer, so we must copy that string unconditionally */ strncpy(buf, msg, max); } #endif /* end of HAVE_GLIBC_STRERROR_R */ #else /* HAVE_STRERROR_R */ strncpy(buf, strerror(err), max); #endif /* end of HAVE_STRERROR_R */ #endif /* end of ! Windows */ buf[max] = '\0'; /* make sure the string is zero terminated */ /* strip trailing '\r\n' or '\n'. */ if ((p = strrchr(buf,'\n')) != NULL && (p - buf) >= 2) *p = '\0'; if ((p = strrchr(buf,'\r')) != NULL && (p - buf) >= 1) *p = '\0'; return buf; } #ifdef USE_LIBIDN /* * Return error-string for libidn status as returned from idna_to_ascii_lz(). */ const char *Curl_idn_strerror (struct connectdata *conn, int err) { #ifdef HAVE_IDNA_STRERROR (void)conn; return idna_strerror((Idna_rc) err); #else const char *str; char *buf; size_t max; curlassert(conn); buf = conn->syserr_buf; max = sizeof(conn->syserr_buf)-1; #ifndef CURL_DISABLE_VERBOSE_STRINGS switch ((Idna_rc)err) { case IDNA_SUCCESS: str = "No error"; break; case IDNA_STRINGPREP_ERROR: str = "Error in string preparation"; break; case IDNA_PUNYCODE_ERROR: str = "Error in Punycode operation"; break; case IDNA_CONTAINS_NON_LDH: str = "Illegal ASCII characters"; break; case IDNA_CONTAINS_MINUS: str = "Contains minus"; break; case IDNA_INVALID_LENGTH: str = "Invalid output length"; break; case IDNA_NO_ACE_PREFIX: str = "No ACE prefix (\"xn--\")"; break; case IDNA_ROUNDTRIP_VERIFY_ERROR: str = "Roundtrip verify error"; break; case IDNA_CONTAINS_ACE_PREFIX: str = "Already have ACE prefix (\"xn--\")"; break; case IDNA_ICONV_ERROR: str = "Locale conversion failed"; break; case IDNA_MALLOC_ERROR: str = "Allocation failed"; break; case IDNA_DLOPEN_ERROR: str = "dlopen() error"; break; default: snprintf(buf, max, "error %d", (int)err); str = NULL; break; } #else if ((Idna_rc)err == IDNA_SUCCESS) str = "No error"; else str = "error"; #endif if (str) strncpy(buf, str, max); buf[max] = '\0'; return (buf); #endif } #endif /* USE_LIBIDN */ criticalmass-1.0.0.orig/curl/lib/strerror.h0000644000175000017500000000245210265631023020146 0ustar danieldaniel#ifndef __CURL_STRERROR_H #define __CURL_STRERROR_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: strerror.h,v 1.3 2004/10/11 17:26:24 bagder Exp $ ***************************************************************************/ #include "urldata.h" const char *Curl_strerror (struct connectdata *conn, int err); #ifdef USE_LIBIDN const char *Curl_idn_strerror (struct connectdata *conn, int err); #endif #endif criticalmass-1.0.0.orig/curl/lib/version.c0000644000175000017500000001067410265631023017751 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: version.c,v 1.45 2005/04/07 15:27:14 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #include "urldata.h" #include "sslgen.h" #define _MPRINTF_REPLACE /* use the internal *printf() functions */ #include #ifdef USE_ARES #include #endif #ifdef USE_LIBIDN #include #endif char *curl_version(void) { static char version[200]; char *ptr=version; size_t len; size_t left = sizeof(version); strcpy(ptr, LIBCURL_NAME "/" LIBCURL_VERSION ); ptr=strchr(ptr, '\0'); left -= strlen(ptr); len = Curl_ssl_version(ptr, left); left -= len; ptr += len; #ifdef HAVE_LIBZ len = snprintf(ptr, left, " zlib/%s", zlibVersion()); left -= len; ptr += len; #endif #ifdef USE_ARES /* this function is only present in c-ares, not in the original ares */ len = snprintf(ptr, left, " c-ares/%s", ares_version(NULL)); left -= len; ptr += len; #endif #ifdef USE_LIBIDN if(stringprep_check_version(LIBIDN_REQUIRED_VERSION)) { len = snprintf(ptr, left, " libidn/%s", stringprep_check_version(NULL)); left -= len; ptr += len; } #endif return version; } /* data for curl_version_info */ static const char * const protocols[] = { #ifndef CURL_DISABLE_FTP "ftp", #endif #ifndef CURL_DISABLE_GOPHER "gopher", #endif #ifndef CURL_DISABLE_TELNET "telnet", #endif #ifndef CURL_DISABLE_DICT "dict", #endif #ifndef CURL_DISABLE_LDAP "ldap", #endif #ifndef CURL_DISABLE_HTTP "http", #endif #ifndef CURL_DISABLE_FILE "file", #endif #ifdef USE_SSL #ifndef CURL_DISABLE_HTTP "https", #endif #ifndef CURL_DISABLE_FTP "ftps", #endif #endif NULL }; static curl_version_info_data version_info = { CURLVERSION_NOW, LIBCURL_VERSION, LIBCURL_VERSION_NUM, OS, /* as found by configure or set by hand at build-time */ 0 /* features is 0 by default */ #ifdef ENABLE_IPV6 | CURL_VERSION_IPV6 #endif #ifdef HAVE_KRB4 | CURL_VERSION_KERBEROS4 #endif #ifdef USE_SSL | CURL_VERSION_SSL #endif #ifdef USE_NTLM | CURL_VERSION_NTLM #endif #ifdef USE_WINDOWS_SSPI | CURL_VERSION_SSPI #endif #ifdef HAVE_LIBZ | CURL_VERSION_LIBZ #endif #ifdef HAVE_GSSAPI | CURL_VERSION_GSSNEGOTIATE #endif #ifdef CURLDEBUG | CURL_VERSION_DEBUG #endif #ifdef USE_ARES | CURL_VERSION_ASYNCHDNS #endif #ifdef HAVE_SPNEGO | CURL_VERSION_SPNEGO #endif #if defined(ENABLE_64BIT) && (SIZEOF_CURL_OFF_T > 4) | CURL_VERSION_LARGEFILE #endif , NULL, /* ssl_version */ 0, /* ssl_version_num, this is kept at zero */ NULL, /* zlib_version */ protocols, NULL, /* c-ares version */ 0, /* c-ares version numerical */ NULL, /* libidn version */ }; curl_version_info_data *curl_version_info(CURLversion stamp) { #ifdef USE_SSL static char ssl_buffer[80]; Curl_ssl_version(ssl_buffer, sizeof(ssl_buffer)); version_info.ssl_version = ssl_buffer; #endif #ifdef HAVE_LIBZ version_info.libz_version = zlibVersion(); /* libz left NULL if non-existing */ #endif #ifdef USE_ARES { int aresnum; version_info.ares = ares_version(&aresnum); version_info.ares_num = aresnum; } #endif #ifdef USE_LIBIDN /* This returns a version string if we use the given version or later, otherwise it returns NULL */ version_info.libidn = stringprep_check_version(LIBIDN_REQUIRED_VERSION); if(version_info.libidn) version_info.features |= CURL_VERSION_IDN; #endif (void)stamp; /* avoid compiler warnings, we don't use this */ return &version_info; } criticalmass-1.0.0.orig/curl/lib/base64.c0000644000175000017500000001766410265631023017356 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: base64.c,v 1.35 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ /* Base64 encoding/decoding * * Test harnesses down the bottom - compile with -DTEST_ENCODE for * a program that will read in raw data from stdin and write out * a base64-encoded version to stdout, and the length returned by the * encoding function to stderr. Compile with -DTEST_DECODE for a program that * will go the other way. * * This code will break if int is smaller than 32 bits */ #include "setup.h" #include #include #define _MPRINTF_REPLACE /* use our functions only */ #include #include "base64.h" #include "memory.h" /* include memdebug.h last */ #include "memdebug.h" static void decodeQuantum(unsigned char *dest, const char *src) { unsigned int x = 0; int i; for(i = 0; i < 4; i++) { if(src[i] >= 'A' && src[i] <= 'Z') x = (x << 6) + (unsigned int)(src[i] - 'A' + 0); else if(src[i] >= 'a' && src[i] <= 'z') x = (x << 6) + (unsigned int)(src[i] - 'a' + 26); else if(src[i] >= '0' && src[i] <= '9') x = (x << 6) + (unsigned int)(src[i] - '0' + 52); else if(src[i] == '+') x = (x << 6) + 62; else if(src[i] == '/') x = (x << 6) + 63; else if(src[i] == '=') x = (x << 6); } dest[2] = (unsigned char)(x & 255); x >>= 8; dest[1] = (unsigned char)(x & 255); x >>= 8; dest[0] = (unsigned char)(x & 255); } /* * Curl_base64_decode() * * Given a base64 string at src, decode it and return an allocated memory in * the *outptr. Returns the length of the decoded data. */ size_t Curl_base64_decode(const char *src, unsigned char **outptr) { int length = 0; int equalsTerm = 0; int i; int numQuantums; unsigned char lastQuantum[3]; size_t rawlen=0; unsigned char *newstr; *outptr = NULL; while((src[length] != '=') && src[length]) length++; /* A maximum of two = padding characters is allowed */ if(src[length] == '=') { equalsTerm++; if(src[length+equalsTerm] == '=') equalsTerm++; } numQuantums = (length + equalsTerm) / 4; /* Don't allocate a buffer if the decoded length is 0 */ if (numQuantums <= 0) return 0; rawlen = (numQuantums * 3) - equalsTerm; /* The buffer must be large enough to make room for the last quantum (which may be partially thrown out) and the zero terminator. */ newstr = malloc(rawlen+4); if(!newstr) return 0; *outptr = newstr; /* Decode all but the last quantum (which may not decode to a multiple of 3 bytes) */ for(i = 0; i < numQuantums - 1; i++) { decodeQuantum((unsigned char *)newstr, src); newstr += 3; src += 4; } /* This final decode may actually read slightly past the end of the buffer if the input string is missing pad bytes. This will almost always be harmless. */ decodeQuantum(lastQuantum, src); for(i = 0; i < 3 - equalsTerm; i++) newstr[i] = lastQuantum[i]; newstr[i] = 0; /* zero terminate */ return rawlen; } /* ---- Base64 Encoding --- */ static const char table64[]= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /* * Curl_base64_encode() * * Returns the length of the newly created base64 string. The third argument * is a pointer to an allocated area holding the base64 data. If something * went wrong, -1 is returned. * */ size_t Curl_base64_encode(const char *inp, size_t insize, char **outptr) { unsigned char ibuf[3]; unsigned char obuf[4]; int i; int inputparts; char *output; char *base64data; char *indata = (char *)inp; *outptr = NULL; /* set to NULL in case of failure before we reach the end */ if(0 == insize) insize = strlen(indata); base64data = output = (char*)malloc(insize*4/3+4); if(NULL == output) return 0; while(insize > 0) { for (i = inputparts = 0; i < 3; i++) { if(insize > 0) { inputparts++; ibuf[i] = *indata; indata++; insize--; } else ibuf[i] = 0; } obuf [0] = (ibuf [0] & 0xFC) >> 2; obuf [1] = ((ibuf [0] & 0x03) << 4) | ((ibuf [1] & 0xF0) >> 4); obuf [2] = ((ibuf [1] & 0x0F) << 2) | ((ibuf [2] & 0xC0) >> 6); obuf [3] = ibuf [2] & 0x3F; switch(inputparts) { case 1: /* only one byte read */ snprintf(output, 5, "%c%c==", table64[obuf[0]], table64[obuf[1]]); break; case 2: /* two bytes read */ snprintf(output, 5, "%c%c%c=", table64[obuf[0]], table64[obuf[1]], table64[obuf[2]]); break; default: snprintf(output, 5, "%c%c%c%c", table64[obuf[0]], table64[obuf[1]], table64[obuf[2]], table64[obuf[3]] ); break; } output += 4; } *output=0; *outptr = base64data; /* make it return the actual data memory */ return strlen(base64data); /* return the length of the new data */ } /* ---- End of Base64 Encoding ---- */ /************* TEST HARNESS STUFF ****************/ #ifdef TEST_ENCODE /* encoding test harness. Read in standard input and write out the length * returned by Curl_base64_encode, followed by the base64'd data itself */ #include #define TEST_NEED_SUCK void *suck(int *); int main(int argc, char **argv, char **envp) { char *base64; size_t base64Len; unsigned char *data; int dataLen; data = (unsigned char *)suck(&dataLen); base64Len = Curl_base64_encode(data, dataLen, &base64); fprintf(stderr, "%d\n", base64Len); fprintf(stdout, "%s", base64); free(base64); free(data); return 0; } #endif #ifdef TEST_DECODE /* decoding test harness. Read in a base64 string from stdin and write out the * length returned by Curl_base64_decode, followed by the decoded data itself * * gcc -DTEST_DECODE base64.c -o base64 mprintf.o memdebug.o */ #include #define TEST_NEED_SUCK void *suck(int *); int main(int argc, char **argv, char **envp) { char *base64; int base64Len; unsigned char *data; int dataLen; int i, j; base64 = (char *)suck(&base64Len); data = (unsigned char *)malloc(base64Len * 3/4 + 8); dataLen = Curl_base64_decode(base64, data); fprintf(stderr, "%d\n", dataLen); for(i=0; i < dataLen; i+=0x10) { printf("0x%02x: ", i); for(j=0; j < 0x10; j++) if((j+i) < dataLen) printf("%02x ", data[i+j]); else printf(" "); printf(" | "); for(j=0; j < 0x10; j++) if((j+i) < dataLen) printf("%c", isgraph(data[i+j])?data[i+j]:'.'); else break; puts(""); } free(base64); free(data); return 0; } #endif #ifdef TEST_NEED_SUCK /* this function 'sucks' in as much as possible from stdin */ void *suck(int *lenptr) { int cursize = 8192; unsigned char *buf = NULL; int lastread; int len = 0; do { cursize *= 2; buf = (unsigned char *)realloc(buf, cursize); memset(buf + len, 0, cursize - len); lastread = fread(buf + len, 1, cursize - len, stdin); len += lastread; } while(!feof(stdin)); lenptr[0] = len; return (void *)buf; } #endif criticalmass-1.0.0.orig/curl/lib/base64.h0000644000175000017500000000236510265631023017353 0ustar danieldaniel#ifndef __BASE64_H #define __BASE64_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: base64.h,v 1.17 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ size_t Curl_base64_encode(const char *input, size_t size, char **str); size_t Curl_base64_decode(const char *source, unsigned char **outptr); #endif criticalmass-1.0.0.orig/curl/lib/strtok.c0000644000175000017500000000433310265631023017605 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: strtok.c,v 1.13 2004/01/29 13:56:45 bagder Exp $ ***************************************************************************/ #include "setup.h" #ifndef HAVE_STRTOK_R #include #include #include "strtok.h" char * Curl_strtok_r(char *ptr, const char *sep, char **end) { if (!ptr) /* we got NULL input so then we get our last position instead */ ptr = *end; /* pass all letters that are including in the separator string */ while (*ptr && strchr(sep, *ptr)) ++ptr; if (*ptr) { /* so this is where the next piece of string starts */ char *start = ptr; /* set the end pointer to the first byte after the start */ *end = start + 1; /* scan through the string to find where it ends, it ends on a null byte or a character that exists in the separator string */ while (**end && !strchr(sep, **end)) ++*end; if (**end) { /* the end is not a null byte */ **end = '\0'; /* zero terminate it! */ ++*end; /* advance the last pointer to beyond the null byte */ } return start; /* return the position where the string starts */ } /* we ended up on a null byte, there are no more strings to find! */ return NULL; } #endif /* this was only compiled if strtok_r wasn't present */ criticalmass-1.0.0.orig/curl/lib/strtok.h0000644000175000017500000000250110265631023017605 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: strtok.h,v 1.9 2004/01/07 09:19:35 bagder Exp $ ***************************************************************************/ #ifndef _CURL_STRTOK_R_H #define _CURL_STRTOK_R_H #include "setup.h" #include #ifndef HAVE_STRTOK_R char *Curl_strtok_r(char *s, const char *delim, char **last); #define strtok_r Curl_strtok_r #else #include #endif #endif criticalmass-1.0.0.orig/curl/lib/hostthre.c0000644000175000017500000004505510265631023020125 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostthre.c,v 1.23 2005/04/26 13:08:49 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototypes */ #endif #ifdef HAVE_UNISTD_H #include /* for the close() proto */ #endif #ifdef VMS #include #include #include #endif #endif #ifdef HAVE_SETJMP_H #include #endif #ifdef WIN32 #include #include #endif #if (defined(NETWARE) && defined(__NOVELL_LIBC__)) #undef in_addr_t #define in_addr_t unsigned long #endif #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "hash.h" #include "share.h" #include "strerror.h" #include "url.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #include "inet_ntop.h" #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /*********************************************************************** * Only for Windows threaded name resolves builds **********************************************************************/ #ifdef CURLRES_THREADED /* This function is used to init a threaded resolve */ static bool init_resolve_thread(struct connectdata *conn, const char *hostname, int port, const Curl_addrinfo *hints); #ifdef CURLRES_IPV4 #define THREAD_FUNC gethostbyname_thread #define THREAD_NAME "gethostbyname_thread" #else #define THREAD_FUNC getaddrinfo_thread #define THREAD_NAME "getaddrinfo_thread" #endif #if defined(DEBUG_THREADING_GETHOSTBYNAME) || \ defined(DEBUG_THREADING_GETADDRINFO) /* If this is defined, provide tracing */ #define TRACE(args) \ do { trace_it("%u: ", __LINE__); trace_it args; } while (0) static void trace_it (const char *fmt, ...) { static int do_trace = -1; va_list args; if (do_trace == -1) { const char *env = getenv("CURL_TRACE"); do_trace = (env && atoi(env) > 0); } if (!do_trace) return; va_start (args, fmt); vfprintf (stderr, fmt, args); fflush (stderr); va_end (args); } #else #define TRACE(x) #endif #ifdef DEBUG_THREADING_GETADDRINFO static void dump_addrinfo (struct connectdata *conn, const struct addrinfo *ai) { TRACE(("dump_addrinfo:\n")); for ( ; ai; ai = ai->ai_next) { char buf [INET6_ADDRSTRLEN]; trace_it(" fam %2d, CNAME %s, ", ai->ai_family, ai->ai_canonname ? ai->ai_canonname : ""); if (Curl_printable_address(ai, buf, sizeof(buf))) trace_it("%s\n", buf); else trace_it("failed; %s\n", Curl_strerror(conn,WSAGetLastError())); } } #endif struct thread_data { HANDLE thread_hnd; unsigned thread_id; DWORD thread_status; curl_socket_t dummy_sock; /* dummy for Curl_resolv_fdset() */ FILE *stderr_file; HANDLE mutex_waiting; /* marks that we are still waiting for a resolve */ HANDLE event_resolved; /* marks that the thread obtained the information */ #ifdef CURLRES_IPV6 struct addrinfo hints; #endif }; #if defined(CURLRES_IPV4) /* * gethostbyname_thread() resolves a name, calls the Curl_addrinfo4_callback * and then exits. * * For builds without ARES/ENABLE_IPV6, create a resolver thread and wait on * it. */ static unsigned __stdcall gethostbyname_thread (void *arg) { struct connectdata *conn = (struct connectdata*) arg; struct thread_data *td = (struct thread_data*) conn->async.os_specific; struct hostent *he; int rc = 0; /* Duplicate the passed mutex handle. * This allows us to use it even after the container gets destroyed * due to a resolver timeout. */ HANDLE mutex_waiting = NULL; HANDLE curr_proc = GetCurrentProcess(); if (!DuplicateHandle(curr_proc, td->mutex_waiting, curr_proc, &mutex_waiting, 0, FALSE, DUPLICATE_SAME_ACCESS)) { /* failed to duplicate the mutex, no point in continuing */ return -1; } /* Sharing the same _iob[] element with our parent thread should * hopefully make printouts synchronised. I'm not sure it works * with a static runtime lib (MSVC's libc.lib). */ #ifndef _WIN32_WCE *stderr = *td->stderr_file; #endif WSASetLastError (conn->async.status = NO_DATA); /* pending status */ he = gethostbyname (conn->async.hostname); /* is the thread initiator still waiting for us ? */ if (WaitForSingleObject(mutex_waiting, 0) == WAIT_TIMEOUT) { /* yes, it is */ /* Mark that we have obtained the information, and that we are * calling back with it. */ SetEvent(td->event_resolved); if (he) { rc = Curl_addrinfo4_callback(conn, CURL_ASYNC_SUCCESS, he); } else { rc = Curl_addrinfo4_callback(conn, (int)WSAGetLastError(), NULL); } TRACE(("Winsock-error %d, addr %s\n", conn->async.status, he ? inet_ntoa(*(struct in_addr*)he->h_addr) : "unknown")); } /* clean up */ CloseHandle(mutex_waiting); return (rc); /* An implicit _endthreadex() here */ } #elif defined(CURLRES_IPV6) /* * getaddrinfo_thread() resolves a name, calls Curl_addrinfo6_callback and then * exits. * * For builds without ARES, but with ENABLE_IPV6, create a resolver thread * and wait on it. */ static unsigned __stdcall getaddrinfo_thread (void *arg) { struct connectdata *conn = (struct connectdata*) arg; struct thread_data *td = (struct thread_data*) conn->async.os_specific; struct addrinfo *res; char service [NI_MAXSERV]; int rc; /* Duplicate the passed mutex handle. * This allows us to use it even after the container gets destroyed * due to a resolver timeout. */ HANDLE mutex_waiting = NULL; HANDLE curr_proc = GetCurrentProcess(); if (!DuplicateHandle(curr_proc, td->mutex_waiting, curr_proc, &mutex_waiting, 0, FALSE, DUPLICATE_SAME_ACCESS)) { /* failed to duplicate the mutex, no point in continuing */ return -1; } #ifndef _WIN32_WCE *stderr = *td->stderr_file; #endif itoa(conn->async.port, service, 10); WSASetLastError(conn->async.status = NO_DATA); /* pending status */ rc = getaddrinfo(conn->async.hostname, service, &td->hints, &res); /* is the thread initiator still waiting for us ? */ if (WaitForSingleObject(mutex_waiting, 0) == WAIT_TIMEOUT) { /* yes, it is */ /* Mark that we have obtained the information, and that we are * calling back with it. */ SetEvent(td->event_resolved); if (rc == 0) { #ifdef DEBUG_THREADING_GETADDRINFO dump_addrinfo (conn, res); #endif rc = Curl_addrinfo6_callback(conn, CURL_ASYNC_SUCCESS, res); } else { rc = Curl_addrinfo6_callback(conn, (int)WSAGetLastError(), NULL); TRACE(("Winsock-error %d, no address\n", conn->async.status)); } } /* clean up */ CloseHandle(mutex_waiting); return (rc); /* An implicit _endthreadex() here */ } #endif /* * Curl_destroy_thread_data() cleans up async resolver data. * Complementary of ares_destroy. */ void Curl_destroy_thread_data (struct Curl_async *async) { if (async->hostname) free(async->hostname); if (async->os_specific) { struct thread_data *td = (struct thread_data*) async->os_specific; curl_socket_t sock = td->dummy_sock; if (sock != CURL_SOCKET_BAD) sclose(sock); /* destroy the synchronization objects */ if (td->mutex_waiting) CloseHandle(td->mutex_waiting); td->mutex_waiting = NULL; if (td->event_resolved) CloseHandle(td->event_resolved); free(async->os_specific); } async->hostname = NULL; async->os_specific = NULL; } /* * init_resolve_thread() starts a new thread that performs the actual * resolve. This function returns before the resolve is done. * * Returns FALSE in case of failure, otherwise TRUE. */ static bool init_resolve_thread (struct connectdata *conn, const char *hostname, int port, const Curl_addrinfo *hints) { struct thread_data *td = calloc(sizeof(*td), 1); if (!td) { SetLastError(ENOMEM); return FALSE; } Curl_safefree(conn->async.hostname); conn->async.hostname = strdup(hostname); if (!conn->async.hostname) { free(td); SetLastError(ENOMEM); return FALSE; } conn->async.port = port; conn->async.done = FALSE; conn->async.status = 0; conn->async.dns = NULL; conn->async.os_specific = (void*) td; td->dummy_sock = CURL_SOCKET_BAD; /* Create the mutex used to inform the resolver thread that we're * still waiting, and take initial ownership. */ td->mutex_waiting = CreateMutex(NULL, TRUE, NULL); if (td->mutex_waiting == NULL) { Curl_destroy_thread_data(&conn->async); SetLastError(EAGAIN); return FALSE; } /* Create the event that the thread uses to inform us that it's * done resolving. Do not signal it. */ td->event_resolved = CreateEvent(NULL, TRUE, FALSE, NULL); if (td->event_resolved == NULL) { Curl_destroy_thread_data(&conn->async); SetLastError(EAGAIN); return FALSE; } td->stderr_file = stderr; #ifdef _WIN32_WCE td->thread_hnd = (HANDLE) CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE) THREAD_FUNC, conn, 0, &td->thread_id); #else td->thread_hnd = (HANDLE) _beginthreadex(NULL, 0, THREAD_FUNC, conn, 0, &td->thread_id); #endif #ifdef CURLRES_IPV6 curlassert(hints); td->hints = *hints; #else (void) hints; #endif if (!td->thread_hnd) { SetLastError(errno); TRACE(("_beginthreadex() failed; %s\n", Curl_strerror(conn,errno))); Curl_destroy_thread_data(&conn->async); return FALSE; } /* This socket is only to keep Curl_resolv_fdset() and select() happy; * should never become signalled for read/write since it's unbound but * Windows needs atleast 1 socket in select(). */ td->dummy_sock = socket(AF_INET, SOCK_DGRAM, 0); return TRUE; } /* * Curl_wait_for_resolv() waits for a resolve to finish. This function should * be avoided since using this risk getting the multi interface to "hang". * * If 'entry' is non-NULL, make it point to the resolved dns entry * * This is the version for resolves-in-a-thread. */ CURLcode Curl_wait_for_resolv(struct connectdata *conn, struct Curl_dns_entry **entry) { struct thread_data *td = (struct thread_data*) conn->async.os_specific; struct SessionHandle *data = conn->data; long timeout; DWORD status, ticks; CURLcode rc; curlassert (conn && td); /* now, see if there's a connect timeout or a regular timeout to use instead of the default one */ timeout = conn->data->set.connecttimeout ? conn->data->set.connecttimeout : conn->data->set.timeout ? conn->data->set.timeout : CURL_TIMEOUT_RESOLVE; /* default name resolve timeout */ ticks = GetTickCount(); /* wait for the thread to resolve the name */ status = WaitForSingleObject(td->event_resolved, 1000UL*timeout); /* mark that we are now done waiting */ ReleaseMutex(td->mutex_waiting); /* close our handle to the mutex, no point in hanging on to it */ CloseHandle(td->mutex_waiting); td->mutex_waiting = NULL; /* close the event handle, it's useless now */ CloseHandle(td->event_resolved); td->event_resolved = NULL; /* has the resolver thread succeeded in resolving our query ? */ if (status == WAIT_OBJECT_0) { /* wait for the thread to exit, it's in the callback sequence */ if (WaitForSingleObject(td->thread_hnd, 5000) == WAIT_TIMEOUT) { TerminateThread(td->thread_hnd, 0); conn->async.done = TRUE; td->thread_status = (DWORD)-1; TRACE(("%s() thread stuck?!, ", THREAD_NAME)); } else { /* Thread finished before timeout; propagate Winsock error to this * thread. 'conn->async.done = TRUE' is set in * Curl_addrinfo4/6_callback(). */ WSASetLastError(conn->async.status); GetExitCodeThread(td->thread_hnd, &td->thread_status); TRACE(("%s() status %lu, thread retval %lu, ", THREAD_NAME, status, td->thread_status)); } } else { conn->async.done = TRUE; td->thread_status = (DWORD)-1; TRACE(("%s() timeout, ", THREAD_NAME)); } TRACE(("elapsed %lu ms\n", GetTickCount()-ticks)); CloseHandle(td->thread_hnd); if(entry) *entry = conn->async.dns; rc = CURLE_OK; if (!conn->async.dns) { /* a name was not resolved */ if (td->thread_status == CURLE_OUT_OF_MEMORY) { rc = CURLE_OUT_OF_MEMORY; failf(data, "Could not resolve host: %s", curl_easy_strerror(rc)); } else if (td->thread_status == (DWORD)-1 || conn->async.status == NO_DATA) { failf(data, "Resolving host timed out: %s", conn->host.name); rc = CURLE_OPERATION_TIMEDOUT; } else if(conn->async.done) { failf(data, "Could not resolve host: %s; %s", conn->host.name, Curl_strerror(conn,conn->async.status)); rc = CURLE_COULDNT_RESOLVE_HOST; } else rc = CURLE_OPERATION_TIMEDOUT; } Curl_destroy_thread_data(&conn->async); if(!conn->async.dns) conn->bits.close = TRUE; return (rc); } /* * Curl_is_resolved() is called repeatedly to check if a previous name resolve * request has completed. It should also make sure to time-out if the * operation seems to take too long. */ CURLcode Curl_is_resolved(struct connectdata *conn, struct Curl_dns_entry **entry) { *entry = NULL; if (conn->async.done) { /* we're done */ Curl_destroy_thread_data(&conn->async); if (!conn->async.dns) { TRACE(("Curl_is_resolved(): CURLE_COULDNT_RESOLVE_HOST\n")); return CURLE_COULDNT_RESOLVE_HOST; } *entry = conn->async.dns; TRACE(("resolved okay, dns %p\n", *entry)); } return CURLE_OK; } CURLcode Curl_resolv_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp) { const struct thread_data *td = (const struct thread_data *) conn->async.os_specific; if (td && td->dummy_sock != CURL_SOCKET_BAD) { FD_SET(td->dummy_sock,write_fd_set); *max_fdp = (int)td->dummy_sock; } (void) read_fd_set; return CURLE_OK; } #ifdef CURLRES_IPV4 /* * Curl_getaddrinfo() - for Windows threading without ENABLE_IPV6. */ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn, char *hostname, int port, int *waitp) { struct hostent *h = NULL; struct SessionHandle *data = conn->data; in_addr_t in; *waitp = 0; /* don't wait, we act synchronously */ in = inet_addr(hostname); if (in != CURL_INADDR_NONE) /* This is a dotted IP address 123.123.123.123-style */ return Curl_ip2addr(in, hostname, port); /* fire up a new resolver thread! */ if (init_resolve_thread(conn, hostname, port, NULL)) { *waitp = TRUE; /* please wait for the response */ return NULL; } /* fall-back to blocking version */ infof(data, "init_resolve_thread() failed for %s; %s\n", hostname, Curl_strerror(conn,GetLastError())); h = gethostbyname(hostname); if (!h) { infof(data, "gethostbyname(2) failed for %s:%d; %s\n", hostname, port, Curl_strerror(conn,WSAGetLastError())); return NULL; } return Curl_he2ai(h, port); } #endif /* CURLRES_IPV4 */ #ifdef CURLRES_IPV6 /* * Curl_getaddrinfo() - for Windows threading IPv6 enabled */ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn, char *hostname, int port, int *waitp) { struct addrinfo hints, *res; int error; char sbuf[NI_MAXSERV]; curl_socket_t s; int pf; struct SessionHandle *data = conn->data; *waitp = FALSE; /* default to synch response */ /* see if we have an IPv6 stack */ s = socket(PF_INET6, SOCK_DGRAM, 0); if (s == CURL_SOCKET_BAD) { /* Some non-IPv6 stacks have been found to make very slow name resolves * when PF_UNSPEC is used, so thus we switch to a mere PF_INET lookup if * the stack seems to be a non-ipv6 one. */ pf = PF_INET; } else { /* This seems to be an IPv6-capable stack, use PF_UNSPEC for the widest * possible checks. And close the socket again. */ sclose(s); /* * Check if a more limited name resolve has been requested. */ switch(data->set.ip_version) { case CURL_IPRESOLVE_V4: pf = PF_INET; break; case CURL_IPRESOLVE_V6: pf = PF_INET6; break; default: pf = PF_UNSPEC; break; } } memset(&hints, 0, sizeof(hints)); hints.ai_family = pf; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = AI_CANONNAME; itoa(port, sbuf, 10); /* fire up a new resolver thread! */ if (init_resolve_thread(conn, hostname, port, &hints)) { *waitp = TRUE; /* please wait for the response */ return NULL; } /* fall-back to blocking version */ infof(data, "init_resolve_thread() failed for %s; %s\n", hostname, Curl_strerror(conn,GetLastError())); error = getaddrinfo(hostname, sbuf, &hints, &res); if (error) { infof(data, "getaddrinfo() failed for %s:%d; %s\n", hostname, port, Curl_strerror(conn,WSAGetLastError())); return NULL; } return res; } #endif /* CURLRES_IPV6 */ #endif /* CURLRES_THREADED */ criticalmass-1.0.0.orig/curl/lib/README.encoding0000644000175000017500000000546610265631023020570 0ustar danieldaniel Content Encoding Support for libcurl * About content encodings: HTTP/1.1 [RFC 2616] specifies that a client may request that a server encode its response. This is usually used to compress a response using one of a set of commonly available compression techniques. These schemes are `deflate' (the zlib algorithm), `gzip' and `compress' [sec 3.5, RFC 2616]. A client requests that the sever perform an encoding by including an Accept-Encoding header in the request document. The value of the header should be one of the recognized tokens `deflate', ... (there's a way to register new schemes/tokens, see sec 3.5 of the spec). A server MAY honor the client's encoding request. When a response is encoded, the server includes a Content-Encoding header in the response. The value of the Content-Encoding header indicates which scheme was used to encode the data. A client may tell a server that it can understand several different encoding schemes. In this case the server may choose any one of those and use it to encode the response (indicating which one using the Content-Encoding header). It's also possible for a client to attach priorities to different schemes so that the server knows which it prefers. See sec 14.3 of RFC 2616 for more information on the Accept-Encoding header. * Current support for content encoding: Support for the 'deflate' and 'gzip' content encoding are supported by libcurl. Both regular and chunked transfers should work fine. The library zlib is required for this feature. 'deflate' support was added by James Gallagher, and support for the 'gzip' encoding was added by Dan Fandrich. * The libcurl interface: To cause libcurl to request a content encoding use: curl_easy_setopt(curl, CURLOPT_ENCODING, ) where is the intended value of the Accept-Encoding header. Currently, libcurl only understands how to process responses that use the "deflate" or "gzip" Content-Encoding, so the only values for CURLOPT_ENCODING that will work (besides "identity," which does nothing) are "deflate" and "gzip" If a response is encoded using the "compress" or methods, libcurl will return an error indicating that the response could not be decoded. If is NULL no Accept-Encoding header is generated. If is a zero-length string, then an Accept-Encoding header containing all supported encodings will be generated. The CURLOPT_ENCODING must be set to any non-NULL value for content to be automatically decoded. If it is not set and the server still sends encoded content (despite not having been asked), the data is returned in its raw form and the Content-Encoding type is not checked. * The curl interface: Use the --compressed option with curl to cause it to ask servers to compress responses using deflate. James Gallagher Dan Fandrich criticalmass-1.0.0.orig/curl/lib/inet_ntoa_r.h0000644000175000017500000000076310265631023020570 0ustar danieldaniel#ifndef __INET_NTOA_R_H #define __INET_NTOA_R_H #include "setup.h" #ifdef HAVE_INET_NTOA_R_2_ARGS /* * uClibc 0.9.26 (at least) doesn't define this prototype. The buffer * must be at least 16 characters long. */ char *inet_ntoa_r(const struct in_addr in, char buffer[]); #else /* * My solaris 5.6 system running gcc 2.8.1 does *not* have this prototype * in any system include file! Isn't that weird? */ char *inet_ntoa_r(const struct in_addr in, char *buffer, int buflen); #endif #endif criticalmass-1.0.0.orig/curl/lib/hostip4.c0000644000175000017500000003341310265631023017652 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostip4.c,v 1.16 2005/04/19 23:19:23 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototypes */ #endif #ifdef HAVE_UNISTD_H #include /* for the close() proto */ #endif #ifdef VMS #include #include #include #endif #endif #ifdef HAVE_SETJMP_H #include #endif #ifdef WIN32 #include #endif #if (defined(NETWARE) && defined(__NOVELL_LIBC__)) #undef in_addr_t #define in_addr_t unsigned long #endif #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "hash.h" #include "share.h" #include "strerror.h" #include "url.h" #include "inet_pton.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /*********************************************************************** * Only for plain-ipv4 builds **********************************************************************/ #ifdef CURLRES_IPV4 /* plain ipv4 code coming up */ /* * This is a function for freeing name information in a protocol independent * way. */ void Curl_freeaddrinfo(Curl_addrinfo *ai) { Curl_addrinfo *next; /* walk over the list and free all entries */ while(ai) { next = ai->ai_next; free(ai); ai = next; } } /* * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've * been set and returns TRUE if they are OK. */ bool Curl_ipvalid(struct SessionHandle *data) { if(data->set.ip_version == CURL_IPRESOLVE_V6) /* an ipv6 address was requested and we can't get/use one */ return FALSE; return TRUE; /* OK, proceed */ } struct namebuf { struct hostent hostentry; char *h_addr_list[2]; struct in_addr addrentry; char h_name[16]; /* 123.123.123.123 = 15 letters is maximum */ }; /* * Curl_ip2addr() takes a 32bit ipv4 internet address as input parameter * together with a pointer to the string version of the address, and it * returns a Curl_addrinfo chain filled in correctly with information for this * address/host. * * The input parameters ARE NOT checked for validity but they are expected * to have been checked already when this is called. */ Curl_addrinfo *Curl_ip2addr(in_addr_t num, char *hostname, int port) { Curl_addrinfo *ai; struct hostent *h; struct in_addr *addrentry; struct namebuf buffer; struct namebuf *buf = &buffer; h = &buf->hostentry; h->h_addr_list = &buf->h_addr_list[0]; addrentry = &buf->addrentry; addrentry->s_addr = num; h->h_addr_list[0] = (char*)addrentry; h->h_addr_list[1] = NULL; h->h_addrtype = AF_INET; h->h_length = sizeof(*addrentry); h->h_name = &buf->h_name[0]; h->h_aliases = NULL; /* Now store the dotted version of the address */ snprintf((char *)h->h_name, 16, "%s", hostname); ai = Curl_he2ai(h, port); return ai; } #ifdef CURLRES_SYNCH /* the functions below are for synchronous resolves */ /* * Curl_getaddrinfo() - the ipv4 synchronous version. * * The original code to this function was once stolen from the Dancer source * code, written by Bjorn Reese, it has since been patched and modified * considerably. * * gethostbyname_r() is the thread-safe version of the gethostbyname() * function. When we build for plain IPv4, we attempt to use this * function. There are _three_ different gethostbyname_r() versions, and we * detect which one this platform supports in the configure script and set up * the HAVE_GETHOSTBYNAME_R_3, HAVE_GETHOSTBYNAME_R_5 or * HAVE_GETHOSTBYNAME_R_6 defines accordingly. Note that HAVE_GETADDRBYNAME * has the corresponding rules. This is primarily on *nix. Note that some unix * flavours have thread-safe versions of the plain gethostbyname() etc. * */ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn, char *hostname, int port, int *waitp) { Curl_addrinfo *ai = NULL; struct hostent *h = NULL; in_addr_t in; struct SessionHandle *data = conn->data; struct hostent *buf = NULL; (void)port; /* unused in IPv4 code */ *waitp = 0; /* don't wait, we act synchronously */ if(1 == Curl_inet_pton(AF_INET, hostname, &in)) /* This is a dotted IP address 123.123.123.123-style */ return Curl_ip2addr(in, hostname, port); #if defined(HAVE_GETHOSTBYNAME_R) /* * gethostbyname_r() is the preferred resolve function for many platforms. * Since there are three different versions of it, the following code is * somewhat #ifdef-ridden. */ else { int h_errnop; int res=ERANGE; buf = (struct hostent *)calloc(CURL_HOSTENT_SIZE, 1); if(!buf) return NULL; /* major failure */ /* * The clearing of the buffer is a workaround for a gethostbyname_r bug in * qnx nto and it is also _required_ for some of these functions on some * platforms. */ #ifdef HAVE_GETHOSTBYNAME_R_5 /* Solaris, IRIX and more */ (void)res; /* prevent compiler warning */ h = gethostbyname_r(hostname, (struct hostent *)buf, (char *)buf + sizeof(struct hostent), CURL_HOSTENT_SIZE - sizeof(struct hostent), &h_errnop); /* If the buffer is too small, it returns NULL and sets errno to * ERANGE. The errno is thread safe if this is compiled with * -D_REENTRANT as then the 'errno' variable is a macro defined to get * used properly for threads. */ if(h) { ; } else #endif /* HAVE_GETHOSTBYNAME_R_5 */ #ifdef HAVE_GETHOSTBYNAME_R_6 /* Linux */ res=gethostbyname_r(hostname, (struct hostent *)buf, (char *)buf + sizeof(struct hostent), CURL_HOSTENT_SIZE - sizeof(struct hostent), &h, /* DIFFERENCE */ &h_errnop); /* Redhat 8, using glibc 2.2.93 changed the behavior. Now all of a * sudden this function returns EAGAIN if the given buffer size is too * small. Previous versions are known to return ERANGE for the same * problem. * * This wouldn't be such a big problem if older versions wouldn't * sometimes return EAGAIN on a common failure case. Alas, we can't * assume that EAGAIN *or* ERANGE means ERANGE for any given version of * glibc. * * For now, we do that and thus we may call the function repeatedly and * fail for older glibc versions that return EAGAIN, until we run out of * buffer size (step_size grows beyond CURL_HOSTENT_SIZE). * * If anyone has a better fix, please tell us! * * ------------------------------------------------------------------- * * On October 23rd 2003, Dan C dug up more details on the mysteries of * gethostbyname_r() in glibc: * * In glibc 2.2.5 the interface is different (this has also been * discovered in glibc 2.1.1-6 as shipped by Redhat 6). What I can't * explain, is that tests performed on glibc 2.2.4-34 and 2.2.4-32 * (shipped/upgraded by Redhat 7.2) don't show this behavior! * * In this "buggy" version, the return code is -1 on error and 'errno' * is set to the ERANGE or EAGAIN code. Note that 'errno' is not a * thread-safe variable. */ if(!h) /* failure */ #endif/* HAVE_GETHOSTBYNAME_R_6 */ #ifdef HAVE_GETHOSTBYNAME_R_3 /* AIX, Digital Unix/Tru64, HPUX 10, more? */ /* For AIX 4.3 or later, we don't use gethostbyname_r() at all, because of * the plain fact that it does not return unique full buffers on each * call, but instead several of the pointers in the hostent structs will * point to the same actual data! This have the unfortunate down-side that * our caching system breaks down horribly. Luckily for us though, AIX 4.3 * and more recent versions have a "completely thread-safe"[*] libc where * all the data is stored in thread-specific memory areas making calls to * the plain old gethostbyname() work fine even for multi-threaded * programs. * * This AIX 4.3 or later detection is all made in the configure script. * * Troels Walsted Hansen helped us work this out on March 3rd, 2003. * * [*] = much later we've found out that it isn't at all "completely * thread-safe", but at least the gethostbyname() function is. */ if(CURL_HOSTENT_SIZE >= (sizeof(struct hostent)+sizeof(struct hostent_data))) { /* August 22nd, 2000: Albert Chin-A-Young brought an updated version * that should work! September 20: Richard Prescott worked on the buffer * size dilemma. */ res = gethostbyname_r(hostname, (struct hostent *)buf, (struct hostent_data *)((char *)buf + sizeof(struct hostent))); h_errnop= errno; /* we don't deal with this, but set it anyway */ } else res = -1; /* failure, too smallish buffer size */ if(!res) { /* success */ h = buf; /* result expected in h */ /* This is the worst kind of the different gethostbyname_r() interfaces. * Since we don't know how big buffer this particular lookup required, * we can't realloc down the huge alloc without doing closer analysis of * the returned data. Thus, we always use CURL_HOSTENT_SIZE for every * name lookup. Fixing this would require an extra malloc() and then * calling Curl_addrinfo_copy() that subsequent realloc()s down the new * memory area to the actually used amount. */ } else #endif /* HAVE_GETHOSTBYNAME_R_3 */ { infof(data, "gethostbyname_r(2) failed for %s\n", hostname); h = NULL; /* set return code to NULL */ free(buf); } #else /* HAVE_GETHOSTBYNAME_R */ /* * Here is code for platforms that don't have gethostbyname_r() or for * which the gethostbyname() is the preferred() function. */ else { h = gethostbyname(hostname); if (!h) infof(data, "gethostbyname(2) failed for %s\n", hostname); #endif /*HAVE_GETHOSTBYNAME_R */ } if(h) { ai = Curl_he2ai(h, port); if (buf) /* used a *_r() function */ free(buf); } return ai; } #endif /* CURLRES_SYNCH */ /* * Curl_he2ai() translates from a hostent struct to a Curl_addrinfo struct. * The Curl_addrinfo is meant to work like the addrinfo struct does for IPv6 * stacks, but for all hosts and environments. struct Curl_addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; size_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; }; struct hostent { char *h_name; * official name of host * char **h_aliases; * alias list * int h_addrtype; * host address type * int h_length; * length of address * char **h_addr_list; * list of addresses * } #define h_addr h_addr_list[0] * for backward compatibility * */ Curl_addrinfo *Curl_he2ai(struct hostent *he, int port) { Curl_addrinfo *ai; Curl_addrinfo *prevai = NULL; Curl_addrinfo *firstai = NULL; struct sockaddr_in *addr; int i; struct in_addr *curr; if(!he) /* no input == no output! */ return NULL; for(i=0; (curr = (struct in_addr *)he->h_addr_list[i]); i++) { ai = calloc(1, sizeof(Curl_addrinfo) + sizeof(struct sockaddr_in)); if(!ai) break; if(!firstai) /* store the pointer we want to return from this function */ firstai = ai; if(prevai) /* make the previous entry point to this */ prevai->ai_next = ai; ai->ai_family = AF_INET; /* we only support this */ ai->ai_socktype = SOCK_STREAM; /* we only support this */ ai->ai_addrlen = sizeof(struct sockaddr_in); /* make the ai_addr point to the address immediately following this struct and use that area to store the address */ ai->ai_addr = (struct sockaddr *) ((char*)ai + sizeof(Curl_addrinfo)); /* leave the rest of the struct filled with zero */ addr = (struct sockaddr_in *)ai->ai_addr; /* storage area for this info */ memcpy((char *)&(addr->sin_addr), curr, sizeof(struct in_addr)); addr->sin_family = he->h_addrtype; addr->sin_port = htons((unsigned short)port); prevai = ai; } return firstai; } #endif /* CURLRES_IPV4 */ criticalmass-1.0.0.orig/curl/lib/hostip6.c0000644000175000017500000001631410265631023017655 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostip6.c,v 1.14 2005/04/19 23:19:23 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototypes */ #endif #ifdef HAVE_UNISTD_H #include /* for the close() proto */ #endif #ifdef VMS #include #include #include #endif #endif #ifdef HAVE_SETJMP_H #include #endif #ifdef WIN32 #include #endif #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "hash.h" #include "share.h" #include "strerror.h" #include "url.h" #include "inet_pton.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /*********************************************************************** * Only for ipv6-enabled builds **********************************************************************/ #ifdef CURLRES_IPV6 /* * This is a wrapper function for freeing name information in a protocol * independent way. This takes care of using the appropriate underlaying * function. */ void Curl_freeaddrinfo(Curl_addrinfo *p) { freeaddrinfo(p); } #ifdef CURLRES_ASYNCH /* * Curl_addrinfo_copy() is used by the asynch callback to copy a given * address. But this is an ipv6 build and then we don't copy the address, we * just return the same pointer! */ Curl_addrinfo *Curl_addrinfo_copy(void *source, int port) { (void) port; return source; } #endif #ifdef CURLDEBUG /* These are strictly for memory tracing and are using the same style as the * family otherwise present in memdebug.c. I put these ones here since they * require a bunch of structs I didn't wanna include in memdebug.c */ int curl_dogetaddrinfo(char *hostname, char *service, struct addrinfo *hints, struct addrinfo **result, int line, const char *source) { int res=(getaddrinfo)(hostname, service, hints, result); if(0 == res) { /* success */ if(logfile) fprintf(logfile, "ADDR %s:%d getaddrinfo() = %p\n", source, line, (void *)*result); } else { if(logfile) fprintf(logfile, "ADDR %s:%d getaddrinfo() failed\n", source, line); } return res; } int curl_dogetnameinfo(const struct sockaddr *sa, socklen_t salen, char *host, size_t hostlen, char *serv, size_t servlen, int flags, int line, const char *source) { int res=(getnameinfo)(sa, salen, host, hostlen, serv, servlen, flags); if(0 == res) { /* success */ if(logfile) fprintf(logfile, "GETNAME %s:%d getnameinfo()\n", source, line); } else { if(logfile) fprintf(logfile, "GETNAME %s:%d getnameinfo() failed = %d\n", source, line, res); } return res; } void curl_dofreeaddrinfo(struct addrinfo *freethis, int line, const char *source) { (freeaddrinfo)(freethis); if(logfile) fprintf(logfile, "ADDR %s:%d freeaddrinfo(%p)\n", source, line, (void *)freethis); } #endif /* * Curl_ipvalid() checks what CURL_IPRESOLVE_* requirements that might've * been set and returns TRUE if they are OK. */ bool Curl_ipvalid(struct SessionHandle *data) { if(data->set.ip_version == CURL_IPRESOLVE_V6) { /* see if we have an IPv6 stack */ curl_socket_t s = socket(PF_INET6, SOCK_DGRAM, 0); if (s == CURL_SOCKET_BAD) /* an ipv6 address was requested and we can't get/use one */ return FALSE; sclose(s); } return TRUE; } #ifndef USE_THREADING_GETADDRINFO /* * Curl_getaddrinfo() when built ipv6-enabled (non-threading version). * * Returns name information about the given hostname and port number. If * successful, the 'addrinfo' is returned and the forth argument will point to * memory we need to free after use. That memory *MUST* be freed with * Curl_freeaddrinfo(), nothing else. */ Curl_addrinfo *Curl_getaddrinfo(struct connectdata *conn, char *hostname, int port, int *waitp) { struct addrinfo hints, *res; int error; char sbuf[NI_MAXSERV]; char addrbuf[128]; curl_socket_t s; int pf; struct SessionHandle *data = conn->data; int ai_flags; *waitp=0; /* don't wait, we have the response now */ /* see if we have an IPv6 stack */ s = socket(PF_INET6, SOCK_DGRAM, 0); if (s < 0) { /* Some non-IPv6 stacks have been found to make very slow name resolves * when PF_UNSPEC is used, so thus we switch to a mere PF_INET lookup if * the stack seems to be a non-ipv6 one. */ pf = PF_INET; } else { /* This seems to be an IPv6-capable stack, use PF_UNSPEC for the widest * possible checks. And close the socket again. */ sclose(s); /* * Check if a more limited name resolve has been requested. */ switch(data->set.ip_version) { case CURL_IPRESOLVE_V4: pf = PF_INET; break; case CURL_IPRESOLVE_V6: pf = PF_INET6; break; default: pf = PF_UNSPEC; break; } } if((1 == Curl_inet_pton(AF_INET, hostname, addrbuf)) || (1 == Curl_inet_pton(AF_INET6, hostname, addrbuf))) { /* the given address is numerical only, prevent a reverse lookup */ ai_flags = AI_NUMERICHOST; } else ai_flags = AI_CANONNAME; memset(&hints, 0, sizeof(hints)); hints.ai_family = pf; hints.ai_socktype = SOCK_STREAM; hints.ai_flags = ai_flags; snprintf(sbuf, sizeof(sbuf), "%d", port); error = getaddrinfo(hostname, sbuf, &hints, &res); if (error) { infof(data, "getaddrinfo(3) failed for %s:%d\n", hostname, port); return NULL; } return res; } #endif /* USE_THREADING_GETADDRINFO */ #endif /* ipv6 */ criticalmass-1.0.0.orig/curl/lib/memory.h0000644000175000017500000000345710265631023017602 0ustar danieldaniel#ifndef _CURL_MEMORY_H #define _CURL_MEMORY_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: memory.h,v 1.2 2004/10/06 07:50:18 bagder Exp $ ***************************************************************************/ #include /* for the typedefs */ extern curl_malloc_callback Curl_cmalloc; extern curl_free_callback Curl_cfree; extern curl_realloc_callback Curl_crealloc; extern curl_strdup_callback Curl_cstrdup; extern curl_calloc_callback Curl_ccalloc; #ifndef CURLDEBUG /* Only do this define-mania if we're not using the memdebug system, as that has preference on this magic. */ #undef strdup #define strdup(ptr) Curl_cstrdup(ptr) #undef malloc #define malloc(size) Curl_cmalloc(size) #undef calloc #define calloc(nbelem,size) Curl_ccalloc(nbelem, size) #undef realloc #define realloc(ptr,size) Curl_crealloc(ptr, size) #undef free #define free(ptr) Curl_cfree(ptr) #endif #endif /* _CURL_MEMORY_H */ criticalmass-1.0.0.orig/curl/lib/hostsyn.c0000644000175000017500000000735210265631023017772 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: hostsyn.c,v 1.5 2005/04/19 23:19:23 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #if defined(WIN32) && !defined(__GNUC__) || defined(__MINGW32__) #include #else #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SOCKET_H #include #endif #ifdef HAVE_NETINET_IN_H #include #endif #ifdef HAVE_NETDB_H #include #endif #ifdef HAVE_ARPA_INET_H #include #endif #ifdef HAVE_STDLIB_H #include /* required for free() prototypes */ #endif #ifdef HAVE_UNISTD_H #include /* for the close() proto */ #endif #ifdef VMS #include #include #include #endif #endif #ifdef HAVE_SETJMP_H #include #endif #ifdef WIN32 #include #endif #include "urldata.h" #include "sendf.h" #include "hostip.h" #include "hash.h" #include "share.h" #include "strerror.h" #include "url.h" #define _MPRINTF_REPLACE /* use our functions only */ #include #if defined(HAVE_INET_NTOA_R) && !defined(HAVE_INET_NTOA_R_DECL) #include "inet_ntoa_r.h" #endif #include "memory.h" /* The last #include file should be: */ #include "memdebug.h" /*********************************************************************** * Only for builds using synchronous name resolves **********************************************************************/ #ifdef CURLRES_SYNCH /* * Curl_wait_for_resolv() for synch-builds. Curl_resolv() can never return * wait==TRUE, so this function will never be called. If it still gets called, * we return failure at once. * * We provide this function only to allow multi.c to remain unaware if we are * doing asynch resolves or not. */ CURLcode Curl_wait_for_resolv(struct connectdata *conn, struct Curl_dns_entry **entry) { (void)conn; *entry=NULL; return CURLE_COULDNT_RESOLVE_HOST; } /* * This function will never be called when synch-built. If it still gets * called, we return failure at once. * * We provide this function only to allow multi.c to remain unaware if we are * doing asynch resolves or not. */ CURLcode Curl_is_resolved(struct connectdata *conn, struct Curl_dns_entry **dns) { (void)conn; *dns = NULL; return CURLE_COULDNT_RESOLVE_HOST; } /* * We just return OK, this function is never actually used for synch builds. * It is present here to keep #ifdefs out from multi.c */ CURLcode Curl_resolv_fdset(struct connectdata *conn, fd_set *read_fd_set, fd_set *write_fd_set, int *max_fdp) { (void)conn; (void)read_fd_set; (void)write_fd_set; (void)max_fdp; return CURLE_OK; } #endif /* truly sync */ criticalmass-1.0.0.orig/curl/src/0002755000175000017500000000000010355431304016133 5ustar danieldanielcriticalmass-1.0.0.orig/curl/src/Makefile.Watcom0000644000175000017500000000672710265631023021036 0ustar danieldaniel# # Watcom / OpenWatcom / Win32 makefile for cURL. # G. Vanem # # $Id: Makefile.Watcom,v 1.4 2005/01/12 15:32:41 giva Exp $ # # Set to 1 to use static lib. # Set to 0 to use DLL and import lib. # STATIC = 1 CC = wcc386 CFLAGS = -3r -mf -d3 -hc -zff -zgf -zq -zm -s -fr=con -w2 -fpi -oilrtfm & -bt=nt -d+ -dWIN32 -dHAVE_LONGLONG -dHAVE_STRTOLL -dWITHOUT_MM_LIB & -dSIZEOF_CURL_OFF_T=8 -dCURLDEBUG -dENABLE_IPV6 -dHAVE_WINSOCK2_H & -I..\include -I..\lib !ifeq STATIC 0 LIBCURL = ..\lib\libcurl_wc_imp.lib !else CFLAGS += -dCURL_STATICLIB LIBCURL = ..\lib\libcurl_wc.lib !endif OBJ_DIR = Watcom_obj OBJS = $(OBJ_DIR)\getpass.obj $(OBJ_DIR)\homedir.obj $(OBJ_DIR)\hugehelp.obj & $(OBJ_DIR)\main.obj $(OBJ_DIR)\urlglob.obj $(OBJ_DIR)\writeenv.obj & $(OBJ_DIR)\writeout.obj $(OBJ_DIR)\timeval.obj RESOURCE = $(OBJ_DIR)\curl.res all: hugehelp.c $(OBJ_DIR) curl.exe .SYMBOLIC @echo Welcome to cURL hugehelp.c: hugehelp.c.cvs copy hugehelp.c.cvs hugehelp.c $(OBJ_DIR): mkdir $(OBJ_DIR) curl.exe: $(OBJS) $(RESOURCE) wlink name $@ system nt file { $(OBJS) } & option quiet, map, caseexact, eliminate, res=$(RESOURCE) & libpath $(%watcom)\lib386;$(%watcom)\lib386\nt & library $(LIBCURL), clib3r.lib, ws2_32.lib clean: .SYMBOLIC - rm -f $(OBJS) $(RESOURCE) vclean realclean: clean .SYMBOLIC - rm -f curl.exe curl.map - rmdir $(OBJ_DIR) $(RESOURCE): curl.rc wrc -dCURLDEBUG=1 -q -r -zm -I..\include -fo=$@ curl.rc .ERASE $(OBJ_DIR)\timeval.obj: ..\lib\timeval.c $(CC) $[@ $(CFLAGS) -fo=$@ @echo . .ERASE .c{$(OBJ_DIR)}.obj: $(CC) $[@ $(CFLAGS) -fo=$@ @echo . # # Dependencies based on "gcc -MM .." # $(OBJ_DIR)/getpass.obj: getpass.c setup.h config-win32.h ..\lib\setup.h & ..\lib\config-win32.h getpass.h ..\lib\memdebug.h ..\lib\setup.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h $(OBJ_DIR)/homedir.obj: homedir.c setup.h config-win32.h ..\lib\setup.h & ..\lib\config-win32.h homedir.h ..\lib\memdebug.h ..\lib\setup.h & ..\include\curl\curl.h ..\include\curl\curlver.h ..\include\curl\easy.h & ..\include\curl\multi.h ..\include\curl\curl.h $(OBJ_DIR)/hugehelp.obj: hugehelp.c setup.h config-win32.h ..\lib\setup.h & ..\lib\config-win32.h hugehelp.h ../../../zlib-1.2.1/zlib.h & ../../../zlib-1.2.1/zconf.h $(OBJ_DIR)/main.obj: main.c setup.h config-win32.h ..\lib\setup.h & ..\lib\config-win32.h ..\include\curl\curl.h ..\include\curl\curlver.h & ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h & urlglob.h writeout.h getpass.h homedir.h hugehelp.h version.h & ..\include\curl\curlver.h ..\lib\curlx.h ..\include\curl\mprintf.h & ..\lib\strequal.h ..\lib\strtoofft.h ..\lib\setup.h ..\lib\timeval.h & ..\lib\memdebug.h $(OBJ_DIR)/urlglob.obj: urlglob.c setup.h config-win32.h ..\lib\setup.h & ..\lib\config-win32.h ..\include\curl\curl.h ..\include\curl\curlver.h & ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h & ..\include\curl\mprintf.h urlglob.h ..\lib\memdebug.h ..\lib\setup.h $(OBJ_DIR)/writeenv.obj: writeenv.c setup.h config-win32.h ..\lib\setup.h & ..\lib\config-win32.h $(OBJ_DIR)/writeout.obj: writeout.c setup.h config-win32.h ..\lib\setup.h & ..\lib\config-win32.h ..\include\curl\curl.h ..\include\curl\curlver.h & ..\include\curl\easy.h ..\include\curl\multi.h ..\include\curl\curl.h & ..\include\curl\mprintf.h writeout.h criticalmass-1.0.0.orig/curl/src/curl.rc0000644000175000017500000000410410265631023017423 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: curl.rc,v 1.2 2005/04/22 20:49:35 bagder Exp $ ***************************************************************************/ #include #include "version.h" LANGUAGE 0x09,0x01 #define RC_VERSION CURL_VERSION_MAJOR, CURL_VERSION_MINOR, CURL_VERSION_PATCH, 0 VS_VERSION_INFO VERSIONINFO FILEVERSION RC_VERSION PRODUCTVERSION RC_VERSION FILEFLAGSMASK 0x3fL #if CURLDEBUG FILEFLAGS 1 #else FILEFLAGS 0 #endif FILEOS VOS__WINDOWS32 FILETYPE VFT_DLL FILESUBTYPE 0x0L BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "040904b0" BEGIN VALUE "CompanyName", "cURL, http://curl.haxx.se/\0" VALUE "FileDescription", "The cURL executable\0" VALUE "FileVersion", CURL_VERSION "\0" VALUE "InternalName", "curl\0" VALUE "OriginalFilename", "curl.exe\0" VALUE "ProductName", "The cURL executable\0" VALUE "ProductVersion", CURL_VERSION "\0" VALUE "LegalCopyright", "Copyright 1996-2005 by Daniel Stenberg. http://curl.haxx.se/docs/copyright.html\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x409, 1200 END END criticalmass-1.0.0.orig/curl/src/macos/0002755000175000017500000000000010355431304017235 5ustar danieldanielcriticalmass-1.0.0.orig/curl/src/macos/src/0002755000175000017500000000000010355431304020024 5ustar danieldanielcriticalmass-1.0.0.orig/curl/src/macos/src/macos_main.cpp0000644000175000017500000000243210265631023022635 0ustar danieldaniel/* ========================================================================= Copyright (C) 2001 Eric Lavigne Permission is granted to anyone to use this software for any purpose on any computer system, and to redistribute it freely, subject to the following restrictions: - The author is not responsible for the consequences of use of this software, no matter how awful, even if they arise from defects in it. - The origin of this software must not be misrepresented, either by explicit claim or by omission. - You are allowed to distributed modified copies of the software, in source and binary form, provided they are marked plainly as altered versions, and are not misrepresented as being the original software. ========================================================================= */ #include #include #include #include #include #include /* ========================================================================= */ DECLARE_MAIN(curl) REGISTER_MAIN_START REGISTER_MAIN(curl) REGISTER_MAIN_END /* ========================================================================= */ int main() { ::MaxApplZone(); for (int i = 1; i <= 10; i++) ::MoreMasters(); (void) exec_commands(); return 0; } criticalmass-1.0.0.orig/curl/src/macos/src/curl_GUSIConfig.cpp0000644000175000017500000000333210265631023023451 0ustar danieldaniel/**************** BEGIN GUSI CONFIGURATION **************************** * * GUSI Configuration section generated by GUSI Configurator * last modified: Mon Oct 29 15:41:51 2001 * * This section will be overwritten by the next run of Configurator. */ #define GUSI_SOURCE #include #include /* Declarations of Socket Factories */ __BEGIN_DECLS void GUSIwithInetSockets(); void GUSIwithLocalSockets(); void GUSIwithMTInetSockets(); void GUSIwithMTTcpSockets(); void GUSIwithMTUdpSockets(); void GUSIwithOTInetSockets(); void GUSIwithOTTcpSockets(); void GUSIwithOTUdpSockets(); void GUSIwithPPCSockets(); void GUSISetupFactories(); __END_DECLS /* Configure Socket Factories */ void GUSISetupFactories() { #ifdef GUSISetupFactories_BeginHook GUSISetupFactories_BeginHook #endif GUSIwithInetSockets(); #ifdef GUSISetupFactories_EndHook GUSISetupFactories_EndHook #endif } /* Declarations of File Devices */ __BEGIN_DECLS void GUSIwithNullSockets(); void GUSISetupDevices(); __END_DECLS /* Configure File Devices */ void GUSISetupDevices() { #ifdef GUSISetupDevices_BeginHook GUSISetupDevices_BeginHook #endif GUSIwithNullSockets(); #ifdef GUSISetupDevices_EndHook GUSISetupDevices_EndHook #endif } #ifndef __cplusplus #error GUSISetupConfig() needs to be written in C++ #endif GUSIConfiguration::FileSuffix sSuffices[] = { "", '????', '????' }; extern "C" void GUSISetupConfig() { GUSIConfiguration * config = GUSIConfiguration::CreateInstance(GUSIConfiguration::kNoResource); config->ConfigureDefaultTypeCreator('TEXT', 'CWIE'); config->ConfigureSuffices( sizeof(sSuffices)/sizeof(GUSIConfiguration::FileSuffix)-1, sSuffices); } /**************** END GUSI CONFIGURATION *************************/ criticalmass-1.0.0.orig/curl/src/macos/MACINSTALL.TXT0000644000175000017500000000326610265631023021272 0ustar danieldanielMACOS (not MACOS X) =================== This is the first attempt at porting cURL to MacOS. http, ftp, dict and telnet seems to work fine, other protocols and advanced features have not been all tested. This port is heavily based on the GUSI library from Matthias Neeracher. GUSI (Grand Unified Socket Interface) is a POSIX/Pthreads/Sockets library bringing some of the comforts of UNIX 98 to traditional MacOS. The latest GUSI release can be downloaded from sourceforge at I have also write a few functions to help port UNIX applications to MacOS. These functions are part of the GUSI Extra library that can be downloaded at OpenSSL support is still experimental but I hope to deliver a version including SSL soon. cURL for MacOS requires using the CodeWarrior compiler from Metrowerks. First download GUSI, GUSI Extra and cURL. Access paths have been setup so that GUSI, GUSI Extra and cURL directories should have the same parent directory. Follow the instructions in GUSI Extra "readme.txt" mainly the ones related to SIOUX and GUSI patches. If you do not apply these patches curl will not behave correctly. In the 'curl/src/macos' directory, decode "curl.mcp.xml.sit.hqx" (This is a stuffit binhexed file) From the CodeWarrior IDE, import 'curl/src/macos/curl.xml', adjust the access paths if required. Then you should be able to build: - the libcurl libraries for PPC and 68K. - the curl application (also available for PPC and 68K) which is the command line version of cURL. If the file "hugehelp.c" is missing rename "curl/src/hugehelp.c.cvs" to "hugehelp.c" and make sure its file type is 'TEXT' criticalmass-1.0.0.orig/curl/src/macos/curl.mcp.xml.sit.hqx0000644000175000017500000002332610265631023023103 0ustar danieldaniel(This file must be converted with BinHex 4.0) :%'0eFQ`ZE@0`,RKYE#jcDA3!8dP8090*9#%!N!3F@`#3")EF8h4eCQC*G#!SBbN a16Nh,6)`-$%J3@aKC'4TEL"6HA0dC@ec,#"*EQ-Z,#"SG(4`1Lm[Gj!$,Q&XB@4 ND@jcHA-ZBfpY,e0dG@CQ5A3[$3SD!!83!!!F@`#3!h)!!3#3!h)0,`fPT9*PFf9 bGQ9NTD8!TC!%!3!!2!!3Z$+T+EJbU5N!N!d-['F!"*UP!!!E'J#3"!m!Bh9bE#j YBh!ZH'eX!!%`!P4&@&4$9dP&!3$rN!3!N!U!!*!*!CS!N!0K!*!%$`"#`G6)[bB "`A,RBHAV3f@ZJUhAq'5,9!EjE+@0l9R9ECKR4kTRRh2Tr@@VMJ"@0,FaU4R&FMa LBT)4LbVeb+BC%jqHQQI4[fPBGXP3'T4BeHdDm#H-`9$4'EUJEJ186cE)3X(8K-U 1KiJ4+5-HVi0DI[@5XBTQHb300K2--ZQmjPHEfdA)NhXMSJc'A+@kemq4P`'SeCB TD8QEYXMK8Kk4YZRkc1,G%m39"[dp8Zmc'[eKd,jpTVh555HQXd2`S9"KrGB`laE (r+!)8r8DP'9kbYVQeY-aSjVQRA2k-`'2pqTr9EP6Z&H-%4eK4@qp1Z(fDAd1&`A H1IYG&T86QUHmp*%cdr$@G4fJrQ[9'8p)f"FPKmMQH6!kGBGeTA5Im1Pp*(P69-* b8ld+I'KQIH`@CNfcIEGE&Zbb`3f,4IkZ#4Ve"2%R-a#MLYefeG"*FSMj,RD`aaE DHh6$h8hF"r`SK84RjI*$KFfI&J3ZTk"r!J2$Nr#%K(IA803e(bAG645j1231E'$ C5$(Nr9Z2LZbqJPSH&9[h1(,+e"8!I$4XKrIeH6Y"")PlSQG2V4#-hZAbb2jBT25 (IUG-bFQ+0[bbfAlrpIDlpCradaS5G(*4d%[i*ISQ&5*3e$NVT#A+!Y3P%V*@HX9 6AGI"h1N`D@lj56PX8fB95NekUL&lk'15a*Z(38rC`Ii%$Y$E-A"!QfHG(Ed)Uhd $e&Ckrm4jfVikK&j$D[%H)*lGX!FUK'&[Ck*%#lJUT9qiT13X#T4mK2)e"`%-JFe )*)Sa9b+92'@Gb8N6d9E+kJ#VEA(c6+d`%E82FXcNKJYM'a,FD@Jf-Bhe0i+B2b' 4,T!!lq1IYLpFITlMfGiYPc0f$6,+MDV5TI9#X-SpJhU%)Fb8cp2EjaJ6Y-)DC*f e'FGC5B'BdQV'H!@cS`XJID*-@m3!EFmNq*Ve20Pc0%pLrF4I`MH*iE!bAI`TJ6f fIkZ$4)P"bTla%@'ZL"8pmd(L(R3XEa8KPe@FkheL$l%E1UF89BS&afbE`RN#pXJ IUFD+"e#6RG6PSV[,G0B8l,Ipa2UU$4a@eA6jr+8Y,jkA1f9)d0!)UcD8pc1PCaS $4e#PcC8bCKD'Ar-2Yr"-%XLQh@AF!9p6rj`FhAk@,R*F(2h!LB#ca(F'im+pi,L Bf4LJV+icK26r2XR2)q9fr#K3PQ3PU)3V#9KqDVJL&pEb*`f)lAAq9FdpFU[$8N6 H43&)*h$BNrd0,c(!ICCA2Nh-i-b#,A9)Dq6b0QXcb4Cb)HG0c,H"E8"bQ0V82+K (6bpND%LUfp6S(mNAhkhHBJTdab-6GA&I%2cqe4`NjKlSpKDmI6m!h0,h!`LC-2j pCCGeT6#1Y62eS"hVZBAlj!YPi8DS1XV14b!3d)r5Z1C(*KTB'Df3!+cZN!#aJMU am2DQK54epTl55RJcT[d$'Q5Me1@)lDI#N6S,Rb-#2%BpdZePl2&DZb9GH)-0FR` 3N!!5&mlD,Sp)"5ZC2f@E-bpUflPTaUfFJ4mZUlcp#`iNNNl#eBaVI1&m0!dP'F[ lT`UUYVZpKX&HPmBMVf"+'fS0*6pRfA+HccXLd0PXk",eKDrh`@MYIGqm(MRcMcP UCb#C$m'[dhBrb438Hbh4+bDe&0"BSF1P+PPP4@i`%iP22P9ibJHTcBXRN5!leUL LkN%bVNT!r-qGI('DMAp8jc1e[eH9VBp1+DSk0V(-aMaJD(6FHQ+T'%'h8"e3LeY *2ldFPa@Tem)!l+PBLXN#idPfFC0i-V-9Ed2X@hEhCC!!e2J+JDccb1@@XE`Ch+V @!I1YF"Jf&8Kc*-A[5BT"cFJ3I8rP#Vb#NHYS+"%q25(pP2,aD$5KBV4"&PiN--c f!&h'b,[%ZDE0!j&ZY32dZD3h)p'VEr2p@kU8c8kU,K'lh$A8,)`efrhRPmImIpI YXG)SXje6-1Z$'lrlYNl#ECVlA2V[1h9Ej6X"Q-(LA%P65$-Ka92rah%dQmeF#KH (%CE56(aEpX$BKjEHj(6mN!"l3iEi(2#eJXU2$BHK`913!#8U6q3!&-VfilRY05# +CbP+)RJR0D'943,GI+$+0I0+'SNaNUMBZ[q4'kLpb*c)iGMP,'c'hFQc1B6@@J6 fXPPfGrc`"VaZDc5@lD1*@AIr'1UT5C'NI$HV@!e*U##m)62YSNd$`'p*J1[@ZVM 5D'GRTkrhF6"1D9-DV'2YVR*$RV,I`+QmTjICq92DT-f+SL1lD&kp)C8`64h*aY* AaJiFNQBGVU!$p6A1-m-e*1L9Iic!B!lQ,rZIkda"cB%TJ`U*0QP,'JVEhkFUFU& (X5K4`r3eG5!0T0`KfYQ6-I-E-mUbb&1TIGYrd"X"EXL$@U!J)EB+%q8mMd,dFeJ fLGJA5!N*4MXRSYfk8"8Vp9RY*4rXaR0dQ"3d!1R%CAQZRaPE1*MZ&DHdelBBaaA (CTA1k$H!##ZMT'i$kB0JJPc9Y"5Em&M)DRM*#SIahMpP`2T[3F,Sr2JX9E@,U5L 10Sdd1Y(qAG#,G'hX$PibcN@!,X`qX*,'eM#B)#S*k1PLLI*REMpB"UmhHT-j!0& TG)jc$@3BLI"em*jDf-B%qLmRR$,BQ1q)YN!*Q1ZNVH,YL#f$!C3-1#@Lch3a2+D 1S3dIq-1a[1C*E$*P+KPQG`THP&p'TQ$JJ-*$cK9F03c3F-aJGGic8i,3hd[fAQ( X2Zr!KU)Rlj!!cer8P'[-pmXiEG4ETUADfi2e!+XIM"@%f)[i)Ikd3c!4jR!-4ar q1T6*aH(Xp6eP)1"JRKV00!kq!BaZa-p*GA93QrN2e@l5U!bDcH)QqRTh9BT04b$ 5Yml1!p$+q9ILbSc)r+'IfN,jLH0'9S)Z+ji4P'1GBK9MHCmrhF8AVC(Xmm"IHl# QFBJ"3PC,19FjeHrVT3AV%qCIqAh1VJm(G,#b$Gh-aRS@jXNFTGXV8@2Eq&L#U%L bf**dKC),j0c9*P0&V!XPRpA0'`jEQG1PDJ+Zdb`[PpRLe34(EcHI-CPm54(VIbE 2J3S%q'`"i`+,HjI3D&@MmVRC5ffqFSVlc[1eQP`@)$eHGrSTSGA@,fc&Yd%c#-[ c`N5)bZ%5b!`+QA-C%YBp[NpG`fMrU'VklXR-he$9jRbE5pBEJR2GeER[mN'1,[` *5HDBYJFl#DN&kKi#mVHiL2@'H4Lb-%(#jb5!e"`RQeJJPfD*L#l$'($NZ1*53#4 P"Z19[8kVVN86PN0#LLPpq&`6QI1)ZR-h3b"[H'qCf&q%J1$CRiFD6AhC'iAdA!5 &9qaeYeVcr,1k'F2P%TlIY-mjXqRIMK+"1cJjQ1[ad0mTG53!aa[IQhlKS@)N-(a pUJ$DahNB2HZ[!!fJ,p(-ACep@IGH86&XYZf#UZd`6HTD`e66bA,VjkUkQpeq)%J hajLPmXp(SipKb*'k%k1f[e'0!D&Sh80Q"$BH&jiJb+SEbpTbQBkE2Qp,5[hLS@1 1pUZ(*&)`(+D+RH8$Z0,+br4iTZJ2rZVP,UC!FP8[XHa#3+"aHC!!DMcpKpFDeIe D%2`@$YX20DB&iIcJUS-R%eCPc4&MSE2f3qfA9IJK5I@,R4403FVlTR'JKYF'NBr eC`jcaFi8Bl$9bp,K,TCp"cJ33fq@Z6`!DldUA,C8J[(2MaI2,p!`$5YT12Mei`2 kEK")F$6(J8GAiLMFaTiMqpE8KiZGrrk"D3Fi#8(4*fVmGK4GIb9Pb9N,%Qh2V&b G`4BR#1B@ZrmSF@DdRU#!!i64LJXc9abPYpjfa+I*FSZ(&IkqF2,@5XqlSfe(pJ5 @FBNcIm6`B$SBQ19pA0k8'bmMac8kRP[Q#l4qV9P3ibU$dmlE'[@*Dj1JGRJe4[Z 5M#`*0UYGpeTAFQV4)hc"Frq0Qe88T#fG+YrEd%GD5VaN8ee69)@GJLMaCTYZJ$h Y`PmD[A8fB#4GP0TV(G5&@%i-DBILl&5HUC*fk#qhfiL-VdMPEK`@*G5aB'3@1DI `Gmq!%mJhD-m-E@ei1#pf)H!Y)#hdYf5,Kre61KKr6-k+iC&[6#!,*8aC4V,dBda *G-Ea,kcp`EQYmI)q(TSXdpT[&6NmmVela*&ZrNk#!a*Ek1U9e(A-C#MTiFrU*8# GRIPS(IG0NC0@D@C,ef!3$-V,f1MmeU$hMNGflfPjdA1l$m'dhT6mE$5k,&09Rk* 35$B&A8hc`Q,f[MCL'()&ZSp9"F43Y6Gp$d@GQ1*-IFE)fQ`!Gl+4bY!)4&ME!i1 S(e$jM(!B0$aPZUklAZC&R6Q$q(JE0b`QVJ8l2ELL'2i"i$m4hNQq3$S*@r,KlPV @0aB$#$cij*NFIiA[#P'Hmk'D%mJh*T,r&0T!Sj!!I%QRN!"4J!C25i'JdhRAG4# +iPZ,'C)pS[%JqMbf%5Z@HYTRpTjm`P9K-jj6!9j,5+E8[jbd,$Qb,rLerVlm'a" EJ,NAIG%b0S`!KTfSi1,Hlm6&Tl86i@XA-SjmDCVVm2JR[U[ZUaabTc`"ZLc''*T MA06`8"HaVhrb,12m0TYp8$49BH,J(bC-qMij8S3`iIJLm!&DUAX,NDT4j(cCZq` Sjr#YLPbe+8AqUc@cBNPJ0I"'D`jmfZPUpmQhXQ'2G"i,XrX6PZh5*UdATE`QBJT 2*-NNJ'H03hDLq3NLl8V#BcH(SN53!&)l)I#5DJXfUc)pbK*kKMMdhlkIbRYcdU* -kaTcDabVQGjqY*`D1++%&&hPjA0$mc46dA5Pa&+%QbaXIY(9*40iKhGhE(!d(Zj TU%6JfY"(KHR"&-pfT-D8AB"c'iDKcqH'9"0#TcflZJ5YE#(YDU4QTYFS*`lY2+' HUH+"N6hThTfY$V%@bmP3RrZVqj*lIM!qQ&'(*R8#YUX0ViVa-8c1cLi5mSh423Y c"ZTZ&UCCXZeRVUh#+(cU-p`4R%4,2aCl@ZeXXYH'f1j5r6'Fdp6k&d9CITqHK#@ jRIp9LG#d$jCXIJ9ZTRb1X1r#JCA&JjmSEMUfVbL!D[6I$5#JScE6Na9lmKfF0EH V"15k'@bDdk%miP"ThZ@A0I0@V`65l5S9deFHd#$hUXR5GDT"DMik$YJL+GmY#CB f%KC+a"&%)ihiBfR+0I#@&ENYGGfGh1ZaX"RlLlZ$l-9X9H*LaaQqEZ6LZ'rpIM* GCa`prJ+&V"j-rb!(B[h8XVQbRfQhYc,GJ(J65aIbPCVha(mX8UAS2e@%VYZYMF( $UMM#pf[eK66(Dj1)d*GNK+[I"ZK52ijfp01Pj098q,AA1GUbRR,5Z)jBdJMD1LZ Y8$2iKCVB!R2!PiF*N!$Ycb2#1Nh6&f-fSDEc2YH1jp9GM@!XI'*ilG-Qc4qT0fe dIZdlC9qP)X!!&@4T9A$EaNq-AZKQ6%R$$a54DScX[R*,M*!!k)K4LrB9Ma0[+II jcUfa44M*R18DLAMSp36ELf),#2#qPidNRI[QVFj%D95q)Xa`RS6EjCd+5BN6MeV %!,Q1a$r!B1`Bp3FM8IpLD)S+$G#+BR1)d#!hB9'5GRjMXFLAC-06*FkSLrBpG6X ,q$JVU-a-"TBp@F)+T`$8S[Dj!EIek6Ei!CIBUAGZpERj!eKb9(,X'RqjiBH5bbP -M*hrM9L`Xhl"GqM#U-f9*jXA"IQeZ[b#&`DqGehATT!!(S$6dqLGCl@A-NeefUB CPHNb!6cQp-!L[%Qal$RBVE9ZN!#qrF#!'d&V@ceTH8bbU3`DV0!06TamU$%('FZ l0N`a41a+-&6)Jcjl2XS1jHBp[HE"-PTaj6*#rZXdIX8%X8XRqJXc(FN5iG%bELS +b,60YmQf"J65!j!!D%+B#Ik0&-B3B@*GM[jJlJBU$RkG93B`&-#!h+HerJ8PT,@ b4!M[IeX(5fA%bFZLUp@K6(mkd@BTHhBcDkGaJh0`$CA2N!#3!%G1-Ne!SYh%drH F,BQM`')#DqM&#U(*Y-1lG45[6@GDN!#,bMKZRMG8"D$T2Kc192P!mSK@0AC8#3E D5,p-B+X2ZcmCQAIc,2AEdK5!+1N5*`cl9qJ@N!")h+G,fYaRJrRN`dd1NQ"E$VL ki6&AIilJU6[Z6pR5B*U9Rm1S[dr`a6mp3Fd`ArhVJQ!TR9T#ZhI+MpjYcFC*Tpf JP)[hkrKT5D`IVBCl"QA0TS2!TdYN8%E#epb&4PA9Q-hQ50A5SA@GjUa`kE-X-HM +d28*r*JYMjd!ICRc,(ZrmcU5e(4KNd[IAR$U[Tm*rdK"&(P&HE,U5c&(#0[`'-D 5f6@Qdr3dIB[VAlQbBHEiXrVYae)ZjkP@,'U[dE)NKfe95B9"Jk0'I$A8b$VC&CI hj0TB-$9m0"N8$CIaHe"M2@3-GQ$(12rHGfTrFM[EP9BMH3B`fcFE2PM'VNZ+fSm R[kIC&VabE@DX[9ZChF-R3*X*[Gmakl`@[!XBM"Iq3#d4e2`)6dE"fe2&5r'*3)D fB!kY""qf-#Xh!5DUNqDYG(&`URfpc*RAAS-#r+D@!A[j8r[eAi!S-rimJJ'!JGb %*BZ5$!f,GjJjLa5D")q,RL4XR[Ppi(r8RNiP$2e@ALL+bU&lUIljbU5MXf56RSK #8KbRX8C@f&kmYX-V,K+TmASNfml4&HPfSV$Y(&Y&J8ER)M[,N!"VmB&c'$a2h'h c`MAp!+rpRY(4Qe8@Z#el[0+YYH#ZYd3EMkbHRechUKDqX5k8m)cfAKj'mJ*[h6' 6)pLEDAqcBBi5[CE[rpIkcC%LIUe3f4@8TFUBfZ9B6FYY-F)N[fBV'h3@(m&iB,a )d1HkSQUS"C91!eHTUrHa9J[FLDk'K8-H9XmKc$L*'V5H'-5[*p)TC'El!$b2J"k T0Ul!A)(4ZlVY!Te#X5V)+@[J"r1e-BdkRFe`N!#r0DcM"VUBekGkJe,*5cpX0PS T(d3588LNcfA!1-TB8GQ`K0eIIl0N96)Nd!Rb%&4LIRETS'P3+jA+Bi9SY#qCmGI 5Ai,[V-NK#La5439PX&LDc8hTl$aLj359-bqmDJZ)GiaX1k1[k)bMZ2r(U*c[Gej %D)m*@@+eGqbF249V)fRpkp)6e0JrHiB*[K8*9fGR-AU+jTcpi#f0+U0+L@Yc'U2 dc04kb961J1JdC5PLEV30PJSYZXJ#jfdlb$,0UrY"jX[RkUY8JLY)-L`Gj6ieH'6 %C*LCT`)3ZS@[X2!%!-SJKp1jEL2Cml64,qZhPa)'AidDL1Ybp@6`iI80l+RfHpd Y1XF"[0[r!$B*PqDdHB95)l8[1I%*Nr,#e&Y3CCiNFC[8dj9TDKdh)Q6,,fCk(S# pQbBT0TY@PD(I@lDhBV%Pk9GrD%IY,YpIM-V9cE(UBbG2&Xck6c5I1BcMA-YcJFA 0,Q"*[F1C16*jHTMMPV0@6HYDU5V0`dPbD&X+MPSlR&+hbi36I8(5pBhrN!$Nj*a Z#!akZ&EGD+M,95XdGQGpfB`RY9BjCa9"Jp0EhH,EFY$Xp0#fq5DI#KVJBj,10hZ `Bq#LBCm2%H@E,+X9!b92Xb3iDFh4MVPIpfIVl"rkr%Eie%$X)MHS6PM!XTB'1$H kR%(U%"b&pq)aqe3a9TkCmFDMGk2qq%"HEh*XqVLk9-A,*pAd(dpZSG2Q#&qCJP2 X5cRMX'hX$'L5*+0!i`51"Yaj''JmqAJA#qUqe!P,MR-!NDje18N(qV3@5C1&B`D IqHRl9X2i2T6ZJH'e!jK,MY#3!+TSYiGI*AaPcjIbGE,pQ5[0Bk@%Ahrf#aQ$NkU d!GNU@XiVQ!T6'EHGZC4@(Qf-icF'*X1,1elXp1L)jmi`Y"F,'Fll%A@'$Mp1IT% 4pZjYGj%b,8rhMFlIh1-NN!#MD$'mrpeRD+18mX9YJ+9kiQE-B&U''*jE1*6raUl $40TV"8Aj2`cF3YHakZ6%05+TZ8&#e4HlCpJjL2$)l&2RNVNKBEAbL2UqijV4C,4 !9bq*`lQDp-&$iV8-!)S2)(el3Gp5lfekXY%TkcB%-PkqfD`DRD,R`APCTf%SkYi YkMk9pc01i''-FlHj6bF6QU%PJ+-@4DbAp91&Q,4`0mc1'1(,P6j)j1fMGbAf%BG ,M8&e!2R'Uk,%Rcm9JkL53'"eTe@IXaCCY!0!33RNL)DY5CYmjN%VhK,U8GXFG+[ 8jmX*Z2'(9BE)F'c"[r"4(UF4E*Qa[Nk-j&"MM!B6UZ*0YpL'!+9)G*&k,&2l@&& AbpQL&q)IrbB+ED(J8lRM"*Ii6%VUADiNE'dVU'q%[LHeia*6Y%89acHSZLZH(mq I[jRmr6$mVc-RTPb8+)ZMjI@hNG(F0VT&bU@(Hq1!F"2j881[Z$Nm5SC@1$41qHC Z*B%dX0kZFfcHDPjCH`GJrbU5DkEdIaTUI+NaK"PdSmI[LPTLJ9IJ8KA#kV"2Uia KdERdQFN93d"lqUqXj@Mr+*qi6&"UECZ-#,*iEC&C`bZqlMfYpM(epQ)*%&C![LJ hPR8L[G0#*-Pj,5P*C$cF+BTi2&i!bX+hlrFri`8+M'SNkXcMM(Q3!%%A2MlD*28 VCqT[JjMIq0PTUq0qPSAf4a0$XLC)-48j(c*)V1K5Pc(m%SGL+($j+p8S%dQ3!&Z lQ%+#S[eP8p$5$[$Vq)R)6HaCkZT5CT&*Rb,2I'PA"EVrJTPJKBE@Xi$J%rQAiUE $fqc2ald8l1R&r%FZ(Gq*VR(@l'M!MiUBId*-Kd&S!pP"YBNkYP[B[Z%YlT5SmY! 2rJF43CSX-e@Gp1FDa-d'!JQ@al9raL0r$[fkG0#D5VmHClHGEqhD`fmVA[jC+rM (&qL@f"N"(1DT-#2bD)j)N3!`Tr&$Rep"LN@aR!Rl(5lcE1UYTUmcVKrX(f1)40K Y4RQl"CKXF9C08YC(*$aR5a@QalMZGITR05QRZ"+h`52GmMN4pj6iXh*6MZFb8ke arcTIYkJ%@!F4TNFBfCKU#I3SZViZSKC0e*!!"cFIrhEC%XbSMX6jaS5&9#h@!`d [Y&`V)j*NiURXkhF0DP5e2dAG*Z,9N!$*D[l1$KF5SNi[b"J@Z2Di),1E93CDGmd Gb1)8,k@iE`R'kNHkLYb%dGd34Y,C013(''CiPAT2BRL[dYPHEY6ZE'`i0f-mp)a X&[HT"f3K+8rfE`T!,%MI)YZKJqZ#ZDTfGRYe'+5[Ke+2E%ecBS3pPC!!rU*,drD &884$ZmbC%Y-Iea(IUfjblN-*cX2hB`Mr+aG#AhMaaJfKPbd5P[+H$9A'(jGqcQ- 2pAc0'J[b`hF4+N1dYV[8#-aHm&FiqHbK`R8PpZ*be,`-[a"P"q1lcb$Z8I%0RA2 X8bcClk*cpGU1Q5c6VI%#`63X"PYE,*Hi3bF21r2JTij#%Q3J'cij@e+-99)rZqB $DdVZbrG[S8$eBj!!@$Z3!%C,DD1H[Dr+iFXKGGD&**8$2mqBZG+M+&`P%``#e8Y 13020cm&rj9ND(4q*S+D%eYGi'X(IT1lA+fV1,T!!6(fcKe2S6"!X-C-F-TqlSTB BJTb$,U'!bY8!!!:criticalmass-1.0.0.orig/curl/src/urlglob.c0000644000175000017500000003701710265631023017753 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: urlglob.c,v 1.40 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ /* client-local setup.h */ #include "setup.h" #include #include #include #include #include #define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */ #include #include "urlglob.h" #if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) #include "memdebug.h" #endif typedef enum { GLOB_OK, GLOB_ERROR } GlobCode; /* * glob_word() * * Input a full globbed string, set the forth argument to the amount of * strings we get out of this. Return GlobCode. */ static GlobCode glob_word(URLGlob *, /* object anchor */ char *, /* globbed string */ size_t, /* position */ int *); /* returned number of strings */ static GlobCode glob_set(URLGlob *glob, char *pattern, size_t pos, int *amount) { /* processes a set expression with the point behind the opening '{' ','-separated elements are collected until the next closing '}' */ char* buf = glob->glob_buffer; URLPattern *pat; pat = (URLPattern*)&glob->pattern[glob->size / 2]; /* patterns 0,1,2,... correspond to size=1,3,5,... */ pat->type = UPTSet; pat->content.Set.size = 0; pat->content.Set.ptr_s = 0; pat->content.Set.elements = (char**)malloc(0); ++glob->size; while (1) { bool skip; switch (*pattern) { case '\0': /* URL ended while set was still open */ snprintf(glob->errormsg, sizeof(glob->errormsg), "unmatched brace at pos %d\n", (int)pos); return GLOB_ERROR; case '{': case '[': /* no nested expressions at this time */ snprintf(glob->errormsg, sizeof(glob->errormsg), "nested braces not supported at pos %d\n", (int)pos); return GLOB_ERROR; case ',': case '}': /* set element completed */ *buf = '\0'; pat->content.Set.elements = realloc(pat->content.Set.elements, (pat->content.Set.size + 1) * sizeof(char*)); if (!pat->content.Set.elements) { snprintf(glob->errormsg, sizeof(glob->errormsg), "out of memory"); return GLOB_ERROR; } pat->content.Set.elements[pat->content.Set.size] = strdup(glob->glob_buffer); ++pat->content.Set.size; if (*pattern == '}') { /* entire set pattern completed */ int wordamount; /* always check for a literal (may be "") between patterns */ if(GLOB_ERROR == glob_word(glob, ++pattern, ++pos, &wordamount)) wordamount=1; *amount = pat->content.Set.size * wordamount; return GLOB_OK; } buf = glob->glob_buffer; ++pattern; ++pos; break; case ']': /* illegal closing bracket */ snprintf(glob->errormsg, sizeof(glob->errormsg), "illegal pattern at pos %d\n", (int)pos); return GLOB_ERROR; case '\\': /* escaped character, skip '\' */ switch(pattern[1]) { case '[': case ']': case '{': case '}': case ',': skip = TRUE; break; default: skip = FALSE; break; } if(skip) { if (*(buf+1) == '\0') { /* but no escaping of '\0'! */ snprintf(glob->errormsg, sizeof(glob->errormsg), "illegal pattern at pos %d\n", (int)pos); return GLOB_ERROR; } ++pattern; ++pos; } /* intentional fallthrough */ default: *buf++ = *pattern++; /* copy character to set element */ ++pos; } } /* we never reach this point */ } static GlobCode glob_range(URLGlob *glob, char *pattern, size_t pos, int *amount) { /* processes a range expression with the point behind the opening '[' - char range: e.g. "a-z]", "B-Q]" - num range: e.g. "0-9]", "17-2000]" - num range with leading zeros: e.g. "001-999]" expression is checked for well-formedness and collected until the next ']' */ URLPattern *pat; char *c; int wordamount=1; pat = (URLPattern*)&glob->pattern[glob->size / 2]; /* patterns 0,1,2,... correspond to size=1,3,5,... */ ++glob->size; if (isalpha((int)*pattern)) { /* character range detected */ pat->type = UPTCharRange; if (sscanf(pattern, "%c-%c]", &pat->content.CharRange.min_c, &pat->content.CharRange.max_c) != 2 || pat->content.CharRange.min_c >= pat->content.CharRange.max_c || pat->content.CharRange.max_c - pat->content.CharRange.min_c > 'z' - 'a') { /* the pattern is not well-formed */ snprintf(glob->errormsg, sizeof(glob->errormsg), "illegal pattern or range specification after pos %d\n", pos); return GLOB_ERROR; } pat->content.CharRange.ptr_c = pat->content.CharRange.min_c; /* always check for a literal (may be "") between patterns */ if(GLOB_ERROR == glob_word(glob, pattern + 4, pos + 4, &wordamount)) wordamount=1; *amount = (pat->content.CharRange.max_c - pat->content.CharRange.min_c + 1) * wordamount; return GLOB_OK; } if (isdigit((int)*pattern)) { /* numeric range detected */ pat->type = UPTNumRange; pat->content.NumRange.padlength = 0; if (sscanf(pattern, "%d-%d]", &pat->content.NumRange.min_n, &pat->content.NumRange.max_n) != 2 || pat->content.NumRange.min_n >= pat->content.NumRange.max_n) { /* the pattern is not well-formed */ snprintf(glob->errormsg, sizeof(glob->errormsg), "error: illegal pattern or range specification after pos %d\n", pos); return GLOB_ERROR; } if (*pattern == '0') { /* leading zero specified */ c = pattern; while (isdigit((int)*c++)) ++pat->content.NumRange.padlength; /* padding length is set for all instances of this pattern */ } pat->content.NumRange.ptr_n = pat->content.NumRange.min_n; c = (char*)strchr(pattern, ']'); /* continue after next ']' */ if(c) c++; else { snprintf(glob->errormsg, sizeof(glob->errormsg), "missing ']'"); return GLOB_ERROR; /* missing ']' */ } /* always check for a literal (may be "") between patterns */ if(GLOB_ERROR == glob_word(glob, c, pos + (c - pattern), &wordamount)) wordamount = 1; *amount = (pat->content.NumRange.max_n - pat->content.NumRange.min_n + 1) * wordamount; return GLOB_OK; } snprintf(glob->errormsg, sizeof(glob->errormsg), "illegal character in range specification at pos %d\n", pos); return GLOB_ERROR; } static GlobCode glob_word(URLGlob *glob, char *pattern, size_t pos, int *amount) { /* processes a literal string component of a URL special characters '{' and '[' branch to set/range processing functions */ char* buf = glob->glob_buffer; size_t litindex; GlobCode res = GLOB_OK; *amount = 1; /* default is one single string */ while (*pattern != '\0' && *pattern != '{' && *pattern != '[') { if (*pattern == '}' || *pattern == ']') return GLOB_ERROR; /* only allow \ to escape known "special letters" */ if (*pattern == '\\' && (*(pattern+1) == '{' || *(pattern+1) == '[' || *(pattern+1) == '}' || *(pattern+1) == ']') ) { /* escape character, skip '\' */ ++pattern; ++pos; if (*pattern == '\0') /* but no escaping of '\0'! */ return GLOB_ERROR; } *buf++ = *pattern++; /* copy character to literal */ ++pos; } *buf = '\0'; litindex = glob->size / 2; /* literals 0,1,2,... correspond to size=0,2,4,... */ glob->literal[litindex] = strdup(glob->glob_buffer); if(!glob->literal[litindex]) return GLOB_ERROR; ++glob->size; switch (*pattern) { case '\0': break; /* singular URL processed */ case '{': /* process set pattern */ res = glob_set(glob, ++pattern, ++pos, amount); break; case '[': /* process range pattern */ res= glob_range(glob, ++pattern, ++pos, amount); break; } if(GLOB_OK != res) /* free that strdup'ed string again */ free(glob->literal[litindex]); return res; /* something got wrong */ } int glob_url(URLGlob** glob, char* url, int *urlnum, FILE *error) { /* * We can deal with any-size, just make a buffer with the same length * as the specified URL! */ URLGlob *glob_expand; int amount; char *glob_buffer=(char *)malloc(strlen(url)+1); *glob = NULL; if(NULL == glob_buffer) return CURLE_OUT_OF_MEMORY; glob_expand = (URLGlob*)calloc(sizeof(URLGlob), 1); if(NULL == glob_expand) { free(glob_buffer); return CURLE_OUT_OF_MEMORY; } glob_expand->size = 0; glob_expand->urllen = strlen(url); glob_expand->glob_buffer = glob_buffer; glob_expand->beenhere=0; if(GLOB_OK == glob_word(glob_expand, url, 1, &amount)) *urlnum = amount; else { if(error && glob_expand->errormsg[0]) { /* send error description to the error-stream */ fprintf(error, "curl: (%d) [globbing] %s\n", CURLE_URL_MALFORMAT, glob_expand->errormsg); } /* it failed, we cleanup */ free(glob_buffer); free(glob_expand); glob_expand = NULL; *urlnum = 1; return CURLE_URL_MALFORMAT; } *glob = glob_expand; return CURLE_OK; } void glob_cleanup(URLGlob* glob) { size_t i; int elem; for (i = glob->size - 1; i < glob->size; --i) { if (!(i & 1)) { /* even indexes contain literals */ free(glob->literal[i/2]); } else { /* odd indexes contain sets or ranges */ if (glob->pattern[i/2].type == UPTSet) { for (elem = glob->pattern[i/2].content.Set.size - 1; elem >= 0; --elem) { free(glob->pattern[i/2].content.Set.elements[elem]); } free(glob->pattern[i/2].content.Set.elements); } } } free(glob->glob_buffer); free(glob); } char *glob_next_url(URLGlob *glob) { char *buf = glob->glob_buffer; URLPattern *pat; char *lit; size_t i; size_t j; int carry; if (!glob->beenhere) glob->beenhere = 1; else { carry = 1; /* implement a counter over the index ranges of all patterns, starting with the rightmost pattern */ for (i = glob->size / 2 - 1; carry && i < glob->size; --i) { carry = 0; pat = &glob->pattern[i]; switch (pat->type) { case UPTSet: if (++pat->content.Set.ptr_s == pat->content.Set.size) { pat->content.Set.ptr_s = 0; carry = 1; } break; case UPTCharRange: if (++pat->content.CharRange.ptr_c > pat->content.CharRange.max_c) { pat->content.CharRange.ptr_c = pat->content.CharRange.min_c; carry = 1; } break; case UPTNumRange: if (++pat->content.NumRange.ptr_n > pat->content.NumRange.max_n) { pat->content.NumRange.ptr_n = pat->content.NumRange.min_n; carry = 1; } break; default: printf("internal error: invalid pattern type (%d)\n", (int)pat->type); exit (CURLE_FAILED_INIT); } } if (carry) /* first pattern ptr has run into overflow, done! */ return NULL; } for (j = 0; j < glob->size; ++j) { if (!(j&1)) { /* every other term (j even) is a literal */ lit = glob->literal[j/2]; strcpy(buf, lit); buf += strlen(lit); } else { /* the rest (i odd) are patterns */ pat = &glob->pattern[j/2]; switch(pat->type) { case UPTSet: strcpy(buf, pat->content.Set.elements[pat->content.Set.ptr_s]); buf += strlen(pat->content.Set.elements[pat->content.Set.ptr_s]); break; case UPTCharRange: *buf++ = pat->content.CharRange.ptr_c; break; case UPTNumRange: sprintf(buf, "%0*d", pat->content.NumRange.padlength, pat->content.NumRange.ptr_n); buf += strlen(buf); /* make no sprint() return code assumptions */ break; default: printf("internal error: invalid pattern type (%d)\n", (int)pat->type); exit (CURLE_FAILED_INIT); } } } *buf = '\0'; return strdup(glob->glob_buffer); } char *glob_match_url(char *filename, URLGlob *glob) { char *target; size_t allocsize; size_t stringlen=0; char numbuf[18]; char *appendthis = NULL; size_t appendlen = 0; /* We cannot use the glob_buffer for storage here since the filename may * be longer than the URL we use. We allocate a good start size, then * we need to realloc in case of need. */ allocsize=strlen(filename); target = malloc(allocsize); if(NULL == target) return NULL; /* major failure */ while (*filename) { if (*filename == '#' && isdigit((int)filename[1])) { unsigned long i; char *ptr = filename; unsigned long num = strtoul(&filename[1], &filename, 10); i = num-1; if (num && (i <= glob->size / 2)) { URLPattern pat = glob->pattern[i]; switch (pat.type) { case UPTSet: appendthis = pat.content.Set.elements[pat.content.Set.ptr_s]; appendlen = strlen(pat.content.Set.elements[pat.content.Set.ptr_s]); break; case UPTCharRange: numbuf[0]=pat.content.CharRange.ptr_c; numbuf[1]=0; appendthis=numbuf; appendlen=1; break; case UPTNumRange: sprintf(numbuf, "%0*d", pat.content.NumRange.padlength, pat.content.NumRange.ptr_n); appendthis = numbuf; appendlen = strlen(numbuf); break; default: printf("internal error: invalid pattern type (%d)\n", (int)pat.type); free(target); return NULL; } } else { /* #[num] out of range, use the #[num] in the output */ filename = ptr; appendthis=filename++; appendlen=1; } } else { appendthis=filename++; appendlen=1; } if(appendlen + stringlen >= allocsize) { char *newstr; allocsize = (appendlen + stringlen)*2; newstr=realloc(target, allocsize); if(NULL ==newstr) { free(target); return NULL; } target=newstr; } memcpy(&target[stringlen], appendthis, appendlen); stringlen += appendlen; } target[stringlen]= '\0'; return target; } criticalmass-1.0.0.orig/curl/src/urlglob.h0000644000175000017500000000355110265631023017754 0ustar danieldaniel#ifndef __URLGLOB_H #define __URLGLOB_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: urlglob.h,v 1.16 2004/03/23 09:12:52 bagder Exp $ ***************************************************************************/ typedef enum { UPTSet=1, UPTCharRange, UPTNumRange } URLPatternType; typedef struct { URLPatternType type; union { struct { char **elements; short size; short ptr_s; } Set; struct { char min_c, max_c; char ptr_c; } CharRange; struct { int min_n, max_n; short padlength; int ptr_n; } NumRange ; } content; } URLPattern; typedef struct { char* literal[10]; URLPattern pattern[9]; size_t size; size_t urllen; char *glob_buffer; char beenhere; char errormsg[80]; /* error message buffer */ } URLGlob; int glob_url(URLGlob**, char*, int *, FILE *); char* glob_next_url(URLGlob*); char* glob_match_url(char*, URLGlob *); void glob_cleanup(URLGlob* glob); #endif criticalmass-1.0.0.orig/curl/src/setup.h0000644000175000017500000000611110265631023017441 0ustar danieldaniel#ifndef __CLIENT_SETUP_H #define __CLIENT_SETUP_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: setup.h,v 1.36 2005/05/02 14:33:58 bagder Exp $ ***************************************************************************/ #define CURL_NO_OLDIES #if !defined(WIN32) && defined(__WIN32__) /* Borland fix */ #define WIN32 #endif #if !defined(WIN32) && defined(_WIN32) /* This works for VS2005 on x64 */ #define WIN32 #endif #ifdef HAVE_CONFIG_H #include "config.h" /* the configure script results */ #else #ifdef WIN32 /* include the hand-modified win32 adjusted config.h! */ #include "config-win32.h" #endif #ifdef macintosh /* this is not the same as Mac OS X */ #include "config-mac.h" #endif #ifdef __riscos__ #include "config-riscos.h" #endif #ifdef __amigaos__ #include "config-amigaos.h" #endif #endif #if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) /* This is an ugly hack for CURLDEBUG conditions only. We need to include the file here, since it might set the _FILE_OFFSET_BITS define, which must be set BEFORE all normal system headers. */ #include "../lib/setup.h" #endif #include #ifdef __TANDEM #include #endif #ifndef TRUE #define TRUE 1 #endif #ifndef FALSE #define FALSE 0 #endif #if !defined(__cplusplus) && !defined(__BEOS__) && !defined(typedef_bool) typedef char bool; #define typedef_bool #endif #ifndef OS #define OS "unknown" #endif #if !defined(fileno) && !defined(WIN32) /* sunos 4 have this as a macro! */ int fileno( FILE *stream); #endif #ifdef WIN32 #define DIR_CHAR "\\" #define DOT_CHAR "_" #else #ifdef __EMX__ /* 20000318 mgs * OS/2 supports leading dots in filenames if the volume is formatted * with JFS or HPFS. */ #define DIR_CHAR "\\" #define DOT_CHAR "." #else #ifdef DJGPP #include #ifdef word #undef word #endif #define HAVE_LIMITS_H /* we have limits.h */ #define DIR_CHAR "/" #define DOT_CHAR "_" #else #define DIR_CHAR "/" #define DOT_CHAR "." #endif /* !DJGPP */ #endif /* !__EMX__ */ #endif /* !WIN32 */ #ifdef __riscos__ #define USE_ENVIRONMENT #endif #ifdef __BEOS__ #define typedef_bool #endif #ifndef SIZEOF_CURL_OFF_T #define SIZEOF_CURL_OFF_T sizeof(curl_off_t) #endif #endif /* __SETUP_H */ criticalmass-1.0.0.orig/curl/src/makefile.amiga0000755000175000017500000000123710265631023020714 0ustar danieldaniel# # $VER: cURL Makefile for AmigaOS ... # # change the follow to where you have the AmiTCP SDK v4.3 includes: ATCPSDKI= /GG/netinclude CC = gcc CFLAGS = -I$(ATCPSDKI) -m68020-60 -noixemul -I. -I../include -W -Wall LIBS = ../lib/libcurl.a -lsslnix -lcryptonix -lz MANPAGE = ../docs/curl.1 README = ../docs/MANUAL MKHELP = ../src/mkhelp.pl OBJS = getpass.c hugehelp.c main.c urlglob.c writeenv.c writeout.c all: hugehelp.c $(OBJS:.c=.o) $(CC) $(CFLAGS) -s -o cURL $(OBJS:.c=.o) $(LIBS) hugehelp.c: $(README) $(MANPAGE) mkhelp.pl rm -f hugehelp.c /bin/nroff -man $(MANPAGE) | /bin/perl $(MKHELP) -c $(README) > hugehelp.c install: $(INSTALL) -c cURL /c/cURL criticalmass-1.0.0.orig/curl/src/writeenv.c0000644000175000017500000000711210265631023020141 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: writeenv.c,v 1.9 2004/12/15 01:38:25 danf Exp $ ***************************************************************************/ #include "setup.h" #ifdef USE_ENVIRONMENT #include #include "writeenv.h" #ifdef __riscos__ #include #endif static const struct { const char * name; CURLINFO id; enum { writeenv_NONE, writeenv_DOUBLE, writeenv_LONG, writeenv_STRING } type; } variables[14] = { {"curl_url_effective", CURLINFO_EFFECTIVE_URL, writeenv_STRING}, {"curl_http_code", CURLINFO_RESPONSE_CODE, writeenv_LONG}, {"curl_time_total", CURLINFO_TOTAL_TIME, writeenv_DOUBLE}, {"curl_time_namelookup", CURLINFO_NAMELOOKUP_TIME, writeenv_DOUBLE}, {"curl_time_connect", CURLINFO_CONNECT_TIME, writeenv_DOUBLE}, {"curl_time_pretransfer", CURLINFO_PRETRANSFER_TIME, writeenv_DOUBLE}, {"curl_time_starttransfer", CURLINFO_STARTTRANSFER_TIME, writeenv_DOUBLE}, {"curl_size_header", CURLINFO_HEADER_SIZE, writeenv_LONG}, {"curl_size_request", CURLINFO_REQUEST_SIZE, writeenv_LONG}, {"curl_size_download", CURLINFO_SIZE_DOWNLOAD, writeenv_DOUBLE}, {"curl_size_upload", CURLINFO_SIZE_UPLOAD, writeenv_DOUBLE}, {"curl_speed_download", CURLINFO_SPEED_DOWNLOAD, writeenv_DOUBLE}, {"curl_speed_upload", CURLINFO_SPEED_UPLOAD, writeenv_DOUBLE}, {NULL, 0, writeenv_NONE} }; static void internalSetEnv(const char * name, char * value) { /* Add your OS-specific code here. */ #ifdef __riscos__ _kernel_setenv(name, value); #elif defined (CURLDEBUG) extern FILE *curl_debuglogfile; if (curl_debuglogfile) fprintf (curl_debuglogfile, "ENV %s = %s\n", name, value); #endif return; } void ourWriteEnv(CURL *curl) { unsigned int i; char *string, numtext[10]; long longinfo; double doubleinfo; for (i=0; variables[i].name; i++) { switch (variables[i].type) { case writeenv_STRING: if (curl_easy_getinfo(curl, variables[i].id, &string) == CURLE_OK) internalSetEnv(variables[i].name, string); else internalSetEnv(variables[i].name, NULL); break; case writeenv_LONG: if (curl_easy_getinfo(curl, variables[i].id, &longinfo) == CURLE_OK) { sprintf(numtext, "%5ld", longinfo); internalSetEnv(variables[i].name, numtext); } else internalSetEnv(variables[i].name, NULL); break; case writeenv_DOUBLE: if (curl_easy_getinfo(curl, variables[i].id, &doubleinfo) == CURLE_OK) { sprintf(numtext, "%6.2f", doubleinfo); internalSetEnv(variables[i].name, numtext); } else internalSetEnv(variables[i].name, NULL); break; default: break; } } return; } #endif criticalmass-1.0.0.orig/curl/src/writeenv.h0000644000175000017500000000223310265631023020145 0ustar danieldaniel#ifndef __WRITEENV_H #define __WRITEENV_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: writeenv.h,v 1.5 2004/01/07 09:19:36 bagder Exp $ ***************************************************************************/ void ourWriteEnv(CURL *curl); #endif criticalmass-1.0.0.orig/curl/src/writeout.c0000644000175000017500000002042510265631023020162 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: writeout.c,v 1.27 2004/12/21 19:59:35 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #ifdef HAVE_SYS_TYPES_H #include #endif #ifdef HAVE_SYS_SELECT_H #include #endif #include #define _MPRINTF_REPLACE /* we want curl-functions instead of native ones */ #include #include "writeout.h" typedef enum { VAR_NONE, /* must be the first */ VAR_TOTAL_TIME, VAR_NAMELOOKUP_TIME, VAR_CONNECT_TIME, VAR_PRETRANSFER_TIME, VAR_STARTTRANSFER_TIME, VAR_SIZE_DOWNLOAD, VAR_SIZE_UPLOAD, VAR_SPEED_DOWNLOAD, VAR_SPEED_UPLOAD, VAR_HTTP_CODE, VAR_HTTP_CODE_PROXY, VAR_HEADER_SIZE, VAR_REQUEST_SIZE, VAR_EFFECTIVE_URL, VAR_CONTENT_TYPE, VAR_NUM_CONNECTS, VAR_REDIRECT_TIME, VAR_REDIRECT_COUNT, VAR_NUM_OF_VARS /* must be the last */ } replaceid; struct variable { const char *name; replaceid id; }; static const struct variable replacements[]={ {"url_effective", VAR_EFFECTIVE_URL}, {"http_code", VAR_HTTP_CODE}, {"http_connect", VAR_HTTP_CODE_PROXY}, {"time_total", VAR_TOTAL_TIME}, {"time_namelookup", VAR_NAMELOOKUP_TIME}, {"time_connect", VAR_CONNECT_TIME}, {"time_pretransfer", VAR_PRETRANSFER_TIME}, {"time_starttransfer", VAR_STARTTRANSFER_TIME}, {"size_header", VAR_HEADER_SIZE}, {"size_request", VAR_REQUEST_SIZE}, {"size_download", VAR_SIZE_DOWNLOAD}, {"size_upload", VAR_SIZE_UPLOAD}, {"speed_download", VAR_SPEED_DOWNLOAD}, {"speed_upload", VAR_SPEED_UPLOAD}, {"content_type", VAR_CONTENT_TYPE}, {"num_connects", VAR_NUM_CONNECTS}, {"time_redirect", VAR_REDIRECT_TIME}, {"num_redirects", VAR_REDIRECT_COUNT}, {NULL, VAR_NONE} }; void ourWriteOut(CURL *curl, char *writeinfo) { FILE *stream = stdout; char *ptr=writeinfo; char *stringp; long longinfo; double doubleinfo; while(*ptr) { if('%' == *ptr) { if('%' == ptr[1]) { /* an escaped %-letter */ fputc('%', stream); ptr+=2; } else { /* this is meant as a variable to output */ char *end; char keepit; int i; if(('{' == ptr[1]) && (end=strchr(ptr, '}'))) { ptr+=2; /* pass the % and the { */ keepit=*end; *end=0; /* zero terminate */ for(i=0; replacements[i].name; i++) { if(curl_strequal(ptr, replacements[i].name)) { switch(replacements[i].id) { case VAR_EFFECTIVE_URL: if((CURLE_OK == curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &stringp)) && stringp) fputs(stringp, stream); break; case VAR_HTTP_CODE: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &longinfo)) fprintf(stream, "%03ld", longinfo); break; case VAR_HTTP_CODE_PROXY: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &longinfo)) fprintf(stream, "%03ld", longinfo); break; case VAR_HEADER_SIZE: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &longinfo)) fprintf(stream, "%ld", longinfo); break; case VAR_REQUEST_SIZE: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &longinfo)) fprintf(stream, "%ld", longinfo); break; case VAR_NUM_CONNECTS: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &longinfo)) fprintf(stream, "%ld", longinfo); break; case VAR_REDIRECT_COUNT: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &longinfo)) fprintf(stream, "%ld", longinfo); break; case VAR_REDIRECT_TIME: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_TOTAL_TIME: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_NAMELOOKUP_TIME: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_CONNECT_TIME: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_PRETRANSFER_TIME: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_STARTTRANSFER_TIME: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_SIZE_UPLOAD: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &doubleinfo)) fprintf(stream, "%.0f", doubleinfo); break; case VAR_SIZE_DOWNLOAD: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &doubleinfo)) fprintf(stream, "%.0f", doubleinfo); break; case VAR_SPEED_DOWNLOAD: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_SPEED_UPLOAD: if(CURLE_OK == curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &doubleinfo)) fprintf(stream, "%.3f", doubleinfo); break; case VAR_CONTENT_TYPE: if((CURLE_OK == curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &stringp)) && stringp) fputs(stringp, stream); default: break; } break; } } ptr=end+1; /* pass the end */ *end = keepit; } else { /* illegal syntax, then just output the characters that are used */ fputc('%', stream); fputc(ptr[1], stream); ptr+=2; } } } else if('\\' == *ptr) { switch(ptr[1]) { case 'r': fputc('\r', stream); break; case 'n': fputc('\n', stream); break; case 't': fputc('\t', stream); break; default: /* unknown, just output this */ fputc(*ptr, stream); fputc(ptr[1], stream); break; } ptr+=2; } else { fputc(*ptr, stream); ptr++; } } } criticalmass-1.0.0.orig/curl/src/writeout.h0000644000175000017500000000224610265631023020170 0ustar danieldaniel#ifndef __WRITEOUT_H #define __WRITEOUT_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: writeout.h,v 1.6 2004/01/07 09:19:36 bagder Exp $ ***************************************************************************/ void ourWriteOut(CURL *curl, char *out); #endif criticalmass-1.0.0.orig/curl/src/config-mac.h0000644000175000017500000000063410265631023020310 0ustar danieldaniel/* Define to 1 if you want the built-in manual */ #define USE_MANUAL 1 #define HAVE_UNISTD_H 1 #define HAVE_FCNTL_H 1 #define HAVE_UTIME_H 1 #define HAVE_SYS_UTIME_H 1 #define HAVE_SETVBUF 1 #define HAVE_UTIME 1 #define HAVE_FTRUNCATE 1 #define main(x,y) curl_main(x,y) /* we provide our own strdup prototype */ char *strdup(char *s1); criticalmass-1.0.0.orig/curl/src/Makefile.riscos0000644000175000017500000000203310265631023021070 0ustar danieldaniel# Makefile for project cURL # Generated on Sun,13 Jan 2002.17:11:10 by EasyGCC (0.1.3 [beta 2] (3 Jan 2002)) # Contact: easygcc@melotech.co.uk # Project objects: objs = o.hugehelp o.main o.urlglob o.writeout o.writeenv \ # Compile options: linkopts = ../lib/libcurl openldap:libraries/libldap/libldap -o curl compileropts = -mpoke-function-name -IUtilLib: -mthrowback # Project target: curl: $(objs) gcc $(linkopts) $(objs) # Static dependancies: o.hugehelp: c.hugehelp gcc $(compileropts) -c -o hugehelp.o c.hugehelp o.main: c.main gcc $(compileropts) -c -o main.o c.main o.urlglob: c.urlglob gcc $(compileropts) -c -o urlglob.o c.urlglob o.writeout: c.writeout gcc $(compileropts) -c -o writeout.o c.writeout o.writeenv: c.writeenv gcc $(compileropts) -c -o writeenv.o c.writeenv # Dynamic dependancies: o.hugehelp: c.hugehelp o.main: c.main o.main: h.setup o.main: h.urlglob o.main: h.writeout o.main: h.version o.urlglob: c.urlglob o.urlglob: h.setup o.urlglob: h.urlglob o.writeout: c.writeout o.writeout: h.writeout criticalmass-1.0.0.orig/curl/src/config-win32.h0000644000175000017500000000266510265631023020520 0ustar danieldaniel/* src/config-win32.h. manually created to look like a config.h. */ /* Define if you have the stricmp function. */ #define HAVE_STRICMP 1 /* Define to 1 if you want the built-in manual */ #define USE_MANUAL 1 /* Define cpu-machine-OS */ #define OS "i386-pc-win32" /* Define if you have the header file. */ #define HAVE_IO_H 1 /* Define if you have the header file */ #define HAVE_LIMITS_H 1 /* Define if you have the ftruncate function. */ #define HAVE_FTRUNCATE 1 /* Define if you have the strdup function. */ #define HAVE_STRDUP 1 /* Define if you have the header file. */ #define HAVE_FCNTL_H 1 /* Define if you have utime() */ #if !defined(__BORLANDC__) #define HAVE_UTIME 1 /* Define if you have the header file */ #define HAVE_SYS_UTIME_H 1 #endif /* Define if you have the header file */ #define HAVE_LOCALE_H 1 /* Define if you have the setlocale() function. */ #define HAVE_SETLOCALE 1 /* Defines set for VS2005 to _not_ decprecate a few functions we use. */ #define _CRT_SECURE_NO_DEPRECATE #define _CRT_NONSTDC_NO_DEPRECATE /************************************************* * This section is for compiler specific defines.* *************************************************/ /* Borland and MS don't have this */ #if defined(__MINGW32__) || defined(__WATCOMC__) || defined(__LCC__) /* Define if you have the header file. */ #define HAVE_UNISTD_H 1 #else #endif criticalmass-1.0.0.orig/curl/src/Makefile.am0000644000175000017500000000571010265631023020170 0ustar danieldaniel#*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at http://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # # $Id: Makefile.am,v 1.53 2005/03/31 07:02:03 bagder Exp $ ########################################################################### AUTOMAKE_OPTIONS = foreign nostdinc # we use srcdir/src for "private" includes # we use srcdir/include for the static global include files # we use builddir/src for the generated include files to get found # we use srcdir/lib for the header files we "borrow" from the lib INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/include -I$(top_builddir)/src \ -I$(top_srcdir)/lib bin_PROGRAMS = curl include Makefile.inc curl_LDADD = ../lib/libcurl.la curl_DEPENDENCIES = ../lib/libcurl.la BUILT_SOURCES = hugehelp.c CLEANFILES = hugehelp.c NROFF=@NROFF@ @MANOPT@ # figured out by the configure script EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32 Makefile.m32 \ Makefile.riscos config.h.in macos/curl.mcp.xml.sit.hqx \ macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp \ macos/src/macos_main.cpp config-amigaos.h makefile.amiga curl.rc \ Makefile.netware Makefile.inc Makefile.Watcom MANPAGE=$(top_srcdir)/docs/curl.1 README=$(top_srcdir)/docs/MANUAL MKHELP=$(top_srcdir)/src/mkhelp.pl HUGE=hugehelp.c if USE_MANUAL # Here are the stuff to create a built-in manual if HAVE_LIBZ # This generates the hugehelp.c file in both uncompressed and compressed formats $(HUGE): $(README) $(MANPAGE) mkhelp.pl echo '#include "setup.h"' > $(HUGE) echo '#ifndef HAVE_LIBZ' >> $(HUGE) $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE) echo '#else' >> $(HUGE) $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c $(README) >> $(HUGE) echo '#endif /* HAVE_LIBZ */' >> $(HUGE) else # HAVE_LIBZ # This generates the hugehelp.c file uncompressed only $(HUGE): $(README) $(MANPAGE) mkhelp.pl echo '#include "setup.h"' > $(HUGE) $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE) endif else # USE_MANUAL # built-in manual has been disabled, make a blank file $(HUGE): echo "/* built-in manual is disabled, blank function */" > $(HUGE) echo '#include "hugehelp.h"' >> $(HUGE) echo "void hugehelp(void) {}" >>$(HUGE) endif criticalmass-1.0.0.orig/curl/src/Makefile.in0000644000175000017500000004733710302221113020177 0ustar danieldaniel# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # ./src/Makefile.inc SOURCES = $(curl_SOURCES) srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = .. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = curl$(EXEEXT) DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/Makefile.inc $(srcdir)/config.h.in subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/config.h config.h CONFIG_CLEAN_FILES = am__installdirs = "$(DESTDIR)$(bindir)" binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) PROGRAMS = $(bin_PROGRAMS) am__objects_1 = main.$(OBJEXT) hugehelp.$(OBJEXT) urlglob.$(OBJEXT) \ writeout.$(OBJEXT) writeenv.$(OBJEXT) getpass.$(OBJEXT) \ homedir.$(OBJEXT) am__objects_2 = strtoofft.$(OBJEXT) timeval.$(OBJEXT) am__objects_3 = am_curl_OBJECTS = $(am__objects_1) $(am__objects_2) $(am__objects_3) curl_OBJECTS = $(am_curl_OBJECTS) DEFAULT_INCLUDES = depcomp = am__depfiles_maybe = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) --mode=compile --tag=CC $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(LIBTOOL) --mode=link --tag=CC $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(curl_SOURCES) DIST_SOURCES = $(curl_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CABUNDLE_FALSE = @CABUNDLE_FALSE@ CABUNDLE_TRUE = @CABUNDLE_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@ CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@ CURL_CA_BUNDLE = @CURL_CA_BUNDLE@ CURL_DISABLE_COOKIES = @CURL_DISABLE_COOKIES@ CURL_DISABLE_CRYPTO_AUTH = @CURL_DISABLE_CRYPTO_AUTH@ CURL_DISABLE_DICT = @CURL_DISABLE_DICT@ CURL_DISABLE_FILE = @CURL_DISABLE_FILE@ CURL_DISABLE_FTP = @CURL_DISABLE_FTP@ CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@ CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@ CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@ CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@ CURL_DISABLE_VERBOSE_STRINGS = @CURL_DISABLE_VERBOSE_STRINGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_ARES = @HAVE_ARES@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@ HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@ IDN_ENABLED = @IDN_ENABLED@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPV6_ENABLED = @IPV6_ENABLED@ KRB4_ENABLED = @KRB4_ENABLED@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MANOPT = @MANOPT@ MIMPURE_FALSE = @MIMPURE_FALSE@ MIMPURE_TRUE = @MIMPURE_TRUE@ NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@ NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@ NROFF = @NROFF@ @MANOPT@ # figured out by the configure script OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKGADD_NAME = @PKGADD_NAME@ PKGADD_PKG = @PKGADD_PKG@ PKGADD_VENDOR = @PKGADD_VENDOR@ PKGCONFIG = @PKGCONFIG@ RANDOM_FILE = @RANDOM_FILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_GNUTLS = @USE_GNUTLS@ USE_MANUAL_FALSE = @USE_MANUAL_FALSE@ USE_MANUAL_TRUE = @USE_MANUAL_TRUE@ USE_SSLEAY = @USE_SSLEAY@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ ac_ct_AR = @ac_ct_AR@ ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ #*************************************************************************** # _ _ ____ _ # Project ___| | | | _ \| | # / __| | | | |_) | | # | (__| |_| | _ <| |___ # \___|\___/|_| \_\_____| # # Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. # # This software is licensed as described in the file COPYING, which # you should have received as part of this distribution. The terms # are also available at http://curl.haxx.se/docs/copyright.html. # # You may opt to use, copy, modify, merge, publish, distribute and/or sell # copies of the Software, and permit persons to whom the Software is # furnished to do so, under the terms of the COPYING file. # # This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY # KIND, either express or implied. # # $Id: Makefile.am,v 1.53 2005/03/31 07:02:03 bagder Exp $ ########################################################################### AUTOMAKE_OPTIONS = foreign nostdinc # we use srcdir/src for "private" includes # we use srcdir/include for the static global include files # we use builddir/src for the generated include files to get found # we use srcdir/lib for the header files we "borrow" from the lib INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/include -I$(top_builddir)/src \ -I$(top_srcdir)/lib # libcurl has sources that provide functions named curlx_* that aren't part of # the official API, but we re-use the code here to avoid duplication. CURLX_ONES = $(top_srcdir)/lib/strtoofft.c $(top_srcdir)/lib/timeval.c CURL_SOURCES = main.c hugehelp.c urlglob.c writeout.c writeenv.c \ getpass.c homedir.c CURL_HFILES = hugehelp.h setup.h config-win32.h config-mac.h \ config-riscos.h urlglob.h version.h \ writeout.h writeenv.h getpass.h homedir.h curl_SOURCES = $(CURL_SOURCES) $(CURLX_ONES) $(CURL_HFILES) curl_LDADD = ../lib/libcurl.la curl_DEPENDENCIES = ../lib/libcurl.la BUILT_SOURCES = hugehelp.c CLEANFILES = hugehelp.c EXTRA_DIST = mkhelp.pl makefile.dj Makefile.vc6 Makefile.b32 Makefile.m32 \ Makefile.riscos config.h.in macos/curl.mcp.xml.sit.hqx \ macos/MACINSTALL.TXT macos/src/curl_GUSIConfig.cpp \ macos/src/macos_main.cpp config-amigaos.h makefile.amiga curl.rc \ Makefile.netware Makefile.inc Makefile.Watcom MANPAGE = $(top_srcdir)/docs/curl.1 README = $(top_srcdir)/docs/MANUAL MKHELP = $(top_srcdir)/src/mkhelp.pl HUGE = hugehelp.c all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(srcdir)/Makefile.inc $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps src/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign --ignore-deps src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh config.h: stamp-h2 @if test ! -f $@; then \ rm -f stamp-h2; \ $(MAKE) stamp-h2; \ else :; fi stamp-h2: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h2 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_srcdir) && $(AUTOHEADER) rm -f stamp-h2 touch $@ distclean-hdr: -rm -f config.h stamp-h2 install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; for p in $$list; do \ p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ if test -f $$p \ || test -f $$p1 \ ; then \ f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ else :; fi; \ done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ rm -f "$(DESTDIR)$(bindir)/$$f"; \ done clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; for p in $$list; do \ f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ echo " rm -f $$p $$f"; \ rm -f $$p $$f ; \ done curl$(EXEEXT): $(curl_OBJECTS) $(curl_DEPENDENCIES) @rm -f curl$(EXEEXT) $(LINK) $(curl_LDFLAGS) $(curl_OBJECTS) $(curl_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c .c.o: $(COMPILE) -c $< .c.obj: $(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: $(LTCOMPILE) -c -o $@ $< strtoofft.o: $(top_srcdir)/lib/strtoofft.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o strtoofft.o `test -f '$(top_srcdir)/lib/strtoofft.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/strtoofft.c strtoofft.obj: $(top_srcdir)/lib/strtoofft.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o strtoofft.obj `if test -f '$(top_srcdir)/lib/strtoofft.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/strtoofft.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/strtoofft.c'; fi` timeval.o: $(top_srcdir)/lib/timeval.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o timeval.o `test -f '$(top_srcdir)/lib/timeval.c' || echo '$(srcdir)/'`$(top_srcdir)/lib/timeval.c timeval.obj: $(top_srcdir)/lib/timeval.c $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o timeval.obj `if test -f '$(top_srcdir)/lib/timeval.c'; then $(CYGPATH_W) '$(top_srcdir)/lib/timeval.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/lib/timeval.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$tags $$unique; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) tags=; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) ' { files[$$0] = 1; } \ END { for (i in files) print i; }'`; \ test -z "$(CTAGS_ARGS)$$tags$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$tags $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && cd $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) $$here distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(mkdir_p) $(distdir)/macos $(distdir)/macos/src @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(PROGRAMS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags dvi: dvi-am dvi-am: html: html-am info: info-am info-am: install-data-am: install-exec-am: install-binPROGRAMS install-info: install-info-am install-man: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-info-am .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-libtool ctags distclean distclean-compile \ distclean-generic distclean-hdr distclean-libtool \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-exec install-exec-am install-info \ install-info-am install-man install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS \ uninstall-info-am # Here are the stuff to create a built-in manual # This generates the hugehelp.c file in both uncompressed and compressed formats @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@$(HUGE): $(README) $(MANPAGE) mkhelp.pl @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#include "setup.h"' > $(HUGE) @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#ifndef HAVE_LIBZ' >> $(HUGE) @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE) @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#else' >> $(HUGE) @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) -c $(README) >> $(HUGE) @HAVE_LIBZ_TRUE@@USE_MANUAL_TRUE@ echo '#endif /* HAVE_LIBZ */' >> $(HUGE) # This generates the hugehelp.c file uncompressed only @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@$(HUGE): $(README) $(MANPAGE) mkhelp.pl @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ echo '#include "setup.h"' > $(HUGE) @HAVE_LIBZ_FALSE@@USE_MANUAL_TRUE@ $(NROFF) $(MANPAGE) | $(PERL) $(MKHELP) $(README) >> $(HUGE) # built-in manual has been disabled, make a blank file @USE_MANUAL_FALSE@$(HUGE): @USE_MANUAL_FALSE@ echo "/* built-in manual is disabled, blank function */" > $(HUGE) @USE_MANUAL_FALSE@ echo '#include "hugehelp.h"' >> $(HUGE) @USE_MANUAL_FALSE@ echo "void hugehelp(void) {}" >>$(HUGE) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: criticalmass-1.0.0.orig/curl/src/getpass.c0000644000175000017500000001305010265631023017742 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: getpass.c,v 1.14 2005/03/31 07:02:03 bagder Exp $ ***************************************************************************/ /* This file is a reimplementation of the previous one, due to license problems. */ #include "setup.h" #ifndef HAVE_GETPASS_R /* this file is only for systems without getpass_r() */ #include #include #ifdef HAVE_UNISTD_H #include #endif #include "getpass.h" #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_TERMIOS_H #include #else #ifdef HAVE_TERMIO_H #include #endif #endif /* The last #include file should be: */ #if defined(CURLDEBUG) && defined(CURLTOOLDEBUG) #include "memdebug.h" #endif #ifdef VMS /* VMS implementation */ #include descrip #include starlet #include iodef /* #include iosbdef */ char *getpass_r(const char *prompt, char *buffer, size_t buflen) { long sts; short chan; /* MSK, 23-JAN-2004, iosbdef.h wasn't in VAX V7.2 or CC 6.4 */ /* distribution so I created this. May revert back later to */ /* struct _iosb iosb; */ struct _iosb { short int iosb$w_status; /* status */ short int iosb$w_bcnt; /* byte count */ int unused; /* unused */ } iosb; $DESCRIPTOR(ttdesc, "TT"); buffer[0]='\0'; sts = sys$assign(&ttdesc, &chan,0,0); if (sts & 1) { sts = sys$qiow(0, chan, IO$_READPROMPT | IO$M_NOECHO, &iosb, 0, 0, buffer, buflen, 0, 0, prompt, strlen(prompt)); if((sts & 1) && (iosb.iosb$w_status&1)) buffer[iosb.iosb$w_bcnt] = '\0'; sts = sys$dassgn(chan); } return buffer; /* we always return success */ } #define DONE #endif /* VMS */ #ifdef WIN32 /* Windows implementation */ #include char *getpass_r(const char *prompt, char *buffer, size_t buflen) { size_t i; fputs(prompt, stderr); for(i=0; i=1?2:1); } /* if user didn't hit ENTER, terminate buffer */ if (i==buflen) buffer[buflen-1]=0; return buffer; /* we always return success */ } #define DONE #endif /* WIN32 */ #ifndef DONE /* not previously provided */ #ifdef HAVE_TERMIOS_H #define struct_term struct termios #else #ifdef HAVE_TERMIO_H #define struct_term struct termio #else #undef struct_term #endif #endif static bool ttyecho(bool enable, int fd) { #ifdef struct_term static struct_term withecho; static struct_term noecho; #endif if(!enable) { /* dissable echo by extracting the current 'withecho' mode and remove the ECHO bit and set back the struct */ #ifdef HAVE_TERMIOS_H tcgetattr(fd, &withecho); noecho = withecho; noecho.c_lflag &= ~ECHO; tcsetattr(fd, TCSANOW, &noecho); #else /* HAVE_TERMIOS_H */ #ifdef HAVE_TERMIO_H ioctl(fd, TCGETA, &withecho); noecho = withecho; noecho.c_lflag &= ~ECHO; ioctl(fd, TCSETA, &noecho); #else /* HAVE_TERMIO_H */ /* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H, we can't disable echo! */ (void)fd; /* prevent compiler warning on unused variable */ return FALSE; /* not disabled */ #endif #endif return TRUE; /* disabled */ } else { /* re-enable echo, assumes we disabled it before (and set the structs we now use to reset the terminal status) */ #ifdef HAVE_TERMIOS_H tcsetattr(fd, TCSAFLUSH, &withecho); #else /* HAVE_TERMIOS_H */ #ifdef HAVE_TERMIO_H ioctl(fd, TCSETA, &withecho); #else /* neither HAVE_TERMIO_H nor HAVE_TERMIOS_H */ return FALSE; /* not enabled */ #endif #endif return TRUE; /* enabled */ } } char *getpass_r(const char *prompt, /* prompt to display */ char *password, /* buffer to store password in */ size_t buflen) /* size of buffer to store password in */ { ssize_t nread; bool disabled; int fd=open("/dev/tty", O_RDONLY); if(-1 == fd) fd = 1; /* use stdin if the tty couldn't be used */ disabled = ttyecho(FALSE, fd); /* disable terminal echo */ fputs(prompt, stderr); nread=read(fd, password, buflen); if(nread > 0) password[--nread]=0; /* zero terminate where enter is stored */ else password[0]=0; /* got nothing */ if(disabled) { /* if echo actually was disabled, add a newline */ fputs("\n", stderr); ttyecho(TRUE, fd); /* enable echo */ } if(1 != fd) close(fd); return password; /* return pointer to buffer */ } #endif /* DONE */ #endif /* HAVE_GETPASS_R */ criticalmass-1.0.0.orig/curl/src/getpass.h0000644000175000017500000000260310265631023017751 0ustar danieldaniel#ifndef __GETPASS_H #define __GETPASS_H /*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2004, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: getpass.h,v 1.3 2004/12/25 22:08:03 bagder Exp $ ***************************************************************************/ #ifndef HAVE_GETPASS_R /* If there's a system-provided function named like this, we trust it is also found in one of the standard headers. */ /* * Returning NULL will abort the continued operation! */ char* getpass_r(const char *prompt, char* buffer, size_t buflen ); #endif #endif criticalmass-1.0.0.orig/curl/src/main.c0000644000175000017500000040075110265631023017230 0ustar danieldaniel/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. * * This software is licensed as described in the file COPYING, which * you should have received as part of this distribution. The terms * are also available at http://curl.haxx.se/docs/copyright.html. * * You may opt to use, copy, modify, merge, publish, distribute and/or sell * copies of the Software, and permit persons to whom the Software is * furnished to do so, under the terms of the COPYING file. * * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY * KIND, either express or implied. * * $Id: main.c,v 1.324 2005/05/12 07:28:03 bagder Exp $ ***************************************************************************/ #include "setup.h" #include #include #include #include #include #include #include #include #include #include "urlglob.h" #include "writeout.h" #include "getpass.h" #include "homedir.h" #ifdef USE_MANUAL #include "hugehelp.h" #endif #ifdef USE_ENVIRONMENT #include "writeenv.h" #endif #define CURLseparator "--_curl_--" #if defined(WIN32)&&!defined(__CYGWIN32__) #include #endif #ifdef __NOVELL_LIBC__ #include #endif #ifdef TIME_WITH_SYS_TIME /* We can include both fine */ #include #include #else #ifdef HAVE_SYS_TIME_H # include #else # include #endif #endif #include "version.h" #ifdef HAVE_IO_H /* typical win32 habit */ #include #endif #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_FCNTL_H #include #endif #ifdef HAVE_UTIME_H #include #else #ifdef HAVE_SYS_UTIME_H #include #endif #endif /* HAVE_UTIME_H */ #ifdef HAVE_LIMITS_H #include #endif #ifdef HAVE_SYS_POLL_H #include #endif #ifdef HAVE_LOCALE_H #include /* for setlocale() */ #endif #define ENABLE_CURLX_PRINTF /* make the curlx header define all printf() functions to use the curlx_* versions instead */ #include /* header from the libcurl directory */ /* The last #include file should be: */ #ifdef CURLDEBUG #ifndef CURLTOOLDEBUG #define MEMDEBUG_NODEFINES #endif /* This is low-level hard-hacking memory leak tracking and similar. Using the library level code from this client-side is ugly, but we do this anyway for convenience. */ #include "memdebug.h" #endif #define DEFAULT_MAXREDIRS 50L #ifdef __DJGPP__ #include char *msdosify(char *); char *rename_if_dos_device_name(char *); /* we want to glob our own argv[] */ char **__crt0_glob_function (char *arg) { (void)arg; return (char**)0; } #endif /* __DJGPP__ */ #define CURL_PROGRESS_STATS 0 /* default progress display */ #define CURL_PROGRESS_BAR 1 /** * @def MIN * standard MIN macro */ #ifndef MIN #define MIN(X,Y) (((X) < (Y)) ? (X) : (Y)) #endif typedef enum { HTTPREQ_UNSPEC, HTTPREQ_GET, HTTPREQ_HEAD, HTTPREQ_POST, HTTPREQ_SIMPLEPOST, HTTPREQ_CUSTOM, HTTPREQ_LAST } HttpReq; /* Just a set of bits */ #define CONF_DEFAULT 0 #define CONF_AUTO_REFERER (1<<4) /* the automatic referer-system please! */ #define CONF_HEADER (1<<8) /* throw the header out too */ #define CONF_NOPROGRESS (1<<10) /* shut off the progress meter */ #define CONF_NOBODY (1<<11) /* use HEAD to get http document */ #define CONF_FAILONERROR (1<<12) /* no output on http error codes >= 300 */ #define CONF_FTPLISTONLY (1<<16) /* Use NLST when listing ftp dir */ #define CONF_FTPAPPEND (1<<20) /* Append instead of overwrite on upload! */ #define CONF_NETRC (1<<22) /* read user+password from .netrc */ #define CONF_FOLLOWLOCATION (1<<23) /* use Location: Luke! */ #define CONF_GETTEXT (1<<24) /* use ASCII/text for transfer */ #define CONF_MUTE (1<<28) /* force NOPROGRESS */ #define CONF_NETRC_OPT (1<<29) /* read user+password from either * .netrc or URL*/ #define CONF_UNRESTRICTED_AUTH (1<<30) /* Send authentication (user+password) when following * locations, even when hostname changed */ #ifndef HAVE_STRDUP /* Ultrix doesn't have strdup(), so make a quick clone: */ char *strdup(char *str) { int len; char *newstr; len = strlen(str); newstr = (char *) malloc((len+1)*sizeof(char)); if (!newstr) return (char *)NULL; strcpy(newstr,str); return newstr; } #endif #ifdef WIN32 #include #define F_OK 0 #define mkdir(x,y) (mkdir)(x) #endif #ifdef VMS #include "curlmsg_vms.h" #endif /* Support uploading and resuming of >2GB files */ #if defined(WIN32) && (SIZEOF_CURL_OFF_T > 4) #define struct_stat struct _stati64 #define stat(file,st) _stati64(file,st) #else #define struct_stat struct stat #endif #ifdef WIN32 /* * Truncate a file handle at a 64-bit position 'where'. * Borland doesn't even support 64-bit types. */ #ifdef __BORLANDC__ #define _lseeki64(hnd,ofs,whence) lseek(hnd,ofs,whence) #endif static int ftruncate64 (int fd, curl_off_t where) { curl_off_t curr; int rc = 0; if ((curr = _lseeki64(fd, 0, SEEK_CUR)) < 0) return -1; if (_lseeki64(fd, where, SEEK_SET) < 0) return -1; if (write(fd, 0, 0) < 0) rc = -1; _lseeki64(fd, curr, SEEK_SET); return rc; } #define ftruncate(fd,where) ftruncate64(fd,where) #endif /* * This is the main global constructor for the app. Call this before * _any_ libcurl usage. If this fails, *NO* libcurl functions may be * used, or havoc may be the result. */ static CURLcode main_init(void) { return curl_global_init(CURL_GLOBAL_DEFAULT); } /* * This is the main global destructor for the app. Call this after * _all_ libcurl usage is done. */ static void main_free(void) { curl_global_cleanup(); } static int SetHTTPrequest(HttpReq req, HttpReq *store) { if((*store == HTTPREQ_UNSPEC) || (*store == req)) { *store = req; return 0; } fprintf(stderr, "You can only select one HTTP request!\n"); return 1; } static void helpf(const char *fmt, ...) { va_list ap; if(fmt) { va_start(ap, fmt); fputs("curl: ", stderr); /* prefix it */ vfprintf(stderr, fmt, ap); va_end(ap); } fprintf(stderr, "curl: try 'curl --help' " #ifdef USE_MANUAL "or 'curl --manual' " #endif "for more information\n"); } /* * A chain of these nodes contain URL to get and where to put the URL's * contents. */ struct getout { struct getout *next; /* next one */ char *url; /* the URL we deal with */ char *outfile; /* where to store the output */ char *infile; /* file to upload, if GETOUT_UPLOAD is set */ int flags; /* options */ }; #define GETOUT_OUTFILE (1<<0) /* set when outfile is deemed done */ #define GETOUT_URL (1<<1) /* set when URL is deemed done */ #define GETOUT_USEREMOTE (1<<2) /* use remote file name locally */ #define GETOUT_UPLOAD (1<<3) /* if set, -T has been used */ #define GETOUT_NOUPLOAD (1<<4) /* if set, -T "" has been used */ typedef enum { TRACE_BIN, /* tcpdump inspired look */ TRACE_ASCII, /* like *BIN but without the hex output */ TRACE_PLAIN /* -v/--verbose type */ } trace; static void help(void) { int i; static const char * const helptext[]={ "Usage: curl [options...] ", "Options: (H) means HTTP/HTTPS only, (F) means FTP only", " -a/--append Append to target file when uploading (F)", " -A/--user-agent User-Agent to send to server (H)", " --anyauth Tell curl to choose authentication method (H)", " -b/--cookie Cookie string or file to read cookies from (H)", " --basic Enable HTTP Basic Authentication (H)", " -B/--use-ascii Use ASCII/text transfer", " -c/--cookie-jar Write cookies to this file after operation (H)", " -C/--continue-at Resumed transfer offset", " -d/--data HTTP POST data (H)", " --data-ascii HTTP POST ASCII data (H)", " --data-binary HTTP POST binary data (H)", " --negotiate Enable HTTP Negotiate Authentication (H)", " --digest Enable HTTP Digest Authentication (H)", " --disable-eprt Prevent curl from using EPRT or LPRT (F)", " --disable-epsv Prevent curl from using EPSV (F)", " -D/--dump-header Write the headers to this file", " --egd-file EGD socket path for random data (SSL)", " --tcp-nodelay Set the TCP_NODELAY option", #ifdef USE_ENVIRONMENT " --environment Write result codes to environment variables (RISC OS)", #endif " -e/--referer Referer URL (H)", " -E/--cert Client certificate file and password (SSL)", " --cert-type Certificate file type (DER/PEM/ENG) (SSL)", " --key Private key file name (SSL)", " --key-type Private key file type (DER/PEM/ENG) (SSL)", " --pass Pass phrase for the private key (SSL)", " --engine Crypto engine to use (SSL). \"--engine list\" for list", " --cacert CA certificate to verify peer against (SSL)", " --capath CA directory (made using c_rehash) to verify", " peer against (SSL)", " --ciphers SSL ciphers to use (SSL)", " --compressed Request compressed response (using deflate or gzip)", " --connect-timeout Maximum time allowed for connection", " --create-dirs Create necessary local directory hierarchy", " --crlf Convert LF to CRLF in upload", " -f/--fail Fail silently (no output at all) on errors (H)", " --ftp-create-dirs Create the remote dirs if not present (F)", " --ftp-pasv Use PASV instead of PORT (F)", " --ftp-ssl Enable SSL/TLS for the ftp transfer (F)", " -F/--form Specify HTTP multipart POST data (H)", " --form-string Specify HTTP multipart POST data (H)", " -g/--globoff Disable URL sequences and ranges using {} and []", " -G/--get Send the -d data with a HTTP GET (H)", " -h/--help This help text", " -H/--header Custom header to pass to server (H)", " -i/--include Include protocol headers in the output (H/F)", " -I/--head Show document info only", " -j/--junk-session-cookies Ignore session cookies read from file (H)", " --interface Specify network interface to use", " --krb4 Enable krb4 with specified security level (F)", " -k/--insecure Allow curl to connect to SSL sites without certs (H)", " -K/--config Specify which config file to read", " -l/--list-only List only names of an FTP directory (F)", " --limit-rate Limit transfer speed to this rate", " -L/--location Follow Location: hints (H)", " --location-trusted Follow Location: and send authentication even ", " to other hostnames (H)", " -m/--max-time Maximum time allowed for the transfer", " --max-redirs Maximum number of redirects allowed (H)", " --max-filesize Maximum file size to download (H/F)", " -M/--manual Display the full manual", " -n/--netrc Must read .netrc for user name and password", " --netrc-optional Use either .netrc or URL; overrides -n", " --ntlm Enable HTTP NTLM authentication (H)", " -N/--no-buffer Disable buffering of the output stream", " -o/--output Write output to instead of stdout", " -O/--remote-name Write output to a file named as the remote file", " -p/--proxytunnel Operate through a HTTP proxy tunnel (using CONNECT)", " --proxy-anyauth Let curl pick proxy authentication method (H)", " --proxy-basic Enable Basic authentication on the proxy (H)", " --proxy-digest Enable Digest authentication on the proxy (H)", " --proxy-ntlm Enable NTLM authentication on the proxy (H)", " -P/--ftp-port

Use PORT with address instead of PASV (F)", " -q If used as the first parameter disables .curlrc", " -Q/--quote Send command(s) to server before file transfer (F)", " -r/--range Retrieve a byte range from a HTTP/1.1 or FTP server", " --random-file File for reading random data from (SSL)", " -R/--remote-time Set the remote file's time on the local output", " --retry Retry request times if transient problems occur", " --retry-delay When retrying, wait this many seconds between each", " --retry-max-time Retry only within this period", " -s/--silent Silent mode. Don't output anything", " -S/--show-error Show error. With -s, make curl show errors when they occur", " --socks Use SOCKS5 proxy on given host + port", " --stderr Where to redirect stderr. - means stdout", " -t/--telnet-option Set telnet option", " --trace Write a debug trace to the given file", " --trace-ascii Like --trace but without the hex output", " --trace-time Add time stamps to trace/verbose output", " -T/--upload-file Transfer to remote site", " --url Spet URL to work with", " -u/--user Set server user and password", " -U/--proxy-user Set proxy user and password", " -v/--verbose Make the operation more talkative", " -V/--version Show version number and quit", #ifdef __DJGPP__ " --wdebug Turn on Watt-32 debugging under DJGPP", #endif " -w/--write-out [format] What to output after completion", " -x/--proxy Use HTTP proxy on given port", " -X/--request Specify request command to use", " -y/--speed-time Time needed to trig speed-limit abort. Defaults to 30", " -Y/--speed-limit Stop transfer if below speed-limit for 'speed-time' secs", " -z/--time-cond
\n" " (HTTP) Extra header to use when getting a web page. You may\n" , stdout); fputs( " specify any number of extra headers. Note that if you should add\n" " a custom header that has the same name as one of the internal\n" " ones curl would use, your externally set header will be used\n" " instead of the internal one. This allows you to make even trick-\n" " ier stuff than curl would normally do. You should not replace\n" " internally set headers without knowing perfectly well what\n" , stdout); fputs( " you're doing. Replacing an internal header with one without con-\n" " tent on the right side of the colon will prevent that header\n" " from appearing.\n" "\n" " See also the -A/--user-agent and -e/--referer options.\n" "\n" " This option can be used multiple times to add/replace/remove\n" " multiple headers.\n" "\n" " -i/--include\n" " (HTTP) Include the HTTP-header in the output. The HTTP-header\n" , stdout); fputs( " includes things like server-name, date of the document, HTTP-\n" " version and more...\n" "\n" " If this option is used twice, the second will again disable\n" " header include.\n" "\n" " --interface \n" " Perform an operation using a specified interface. You can enter\n" " interface name, IP address or host name. An example could look\n" " like:\n" "\n" " curl --interface eth0:1 http://www.netscape.com/\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " -I/--head\n" " (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature\n" " the command HEAD which this uses to get nothing but the header\n" " of a document. When used on a FTP or FILE file, curl displays\n" " the file size and last modification time only.\n" "\n" " If this option is used twice, the second will again disable\n" , stdout); fputs( " header only.\n" "\n" " -j/--junk-session-cookies\n" " (HTTP) When curl is told to read cookies from a given file, this\n" " option will make it discard all \"session cookies\". This will\n" " basically have the same effect as if a new session is started.\n" " Typical browsers always discard session cookies when they're\n" " closed down. (Added in 7.9.7)\n" "\n" , stdout); fputs( " If this option is used several times, each occurrence will tog-\n" " gle this on/off.\n" "\n" " -k/--insecure\n" " (SSL) This option explicitly allows curl to perform \"insecure\"\n" " SSL connections and transfers. Starting with curl 7.10, all SSL\n" " connections will be attempted to be made secure by using the CA\n" " certificate bundle installed by default. This makes all connec-\n" , stdout); fputs( " tions considered \"insecure\" to fail unless -k/--insecure is\n" " used.\n" "\n" " If this option is used twice, the second time will again disable\n" " it.\n" "\n" " --key \n" " (SSL) Private key file name. Allows you to provide your private\n" " key in this separate file.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --key-type \n" , stdout); fputs( " (SSL) Private key file type. Specify which type your --key pro-\n" " vided private key is. DER, PEM and ENG are supported.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --krb4 \n" " (FTP) Enable kerberos4 authentication and use. The level must be\n" " entered and should be one of 'clear', 'safe', 'confidential' or\n" " 'private'. Should you use a level that is not one of these,\n" , stdout); fputs( " 'private' will instead be used.\n" "\n" " This option requires that the library was built with kerberos4\n" " support. This is not very common. Use -V/--version to see if\n" " your curl supports it.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -K/--config \n" " Specify which config file to read curl arguments from. The con-\n" , stdout); fputs( " fig file is a text file in which command line arguments can be\n" " written which then will be used as if they were written on the\n" " actual command line. Options and their parameters must be speci-\n" " fied on the same config file line. If the parameter is to con-\n" " tain white spaces, the parameter must be inclosed within quotes.\n" " If the first column of a config line is a '#' character, the\n" , stdout); fputs( " rest of the line will be treated as a comment.\n" "\n" " Specify the filename as '-' to make curl read the file from\n" " stdin.\n" "\n" " Note that to be able to specify a URL in the config file, you\n" " need to specify it using the --url option, and not by simply\n" " writing the URL on its own line. So, it could look similar to\n" " this:\n" "\n" " url = \"http://curl.haxx.se/docs/\"\n" "\n" , stdout); fputs( " This option can be used multiple times.\n" "\n" " When curl is invoked, it always (unless -q is used) checks for a\n" " default config file and uses it if found. The default config\n" " file is checked for in the following places in this order:\n" "\n" " 1) curl tries to find the \"home dir\": It first checks for the\n" " CURL_HOME and then the HOME environment variables. Failing that,\n" , stdout); fputs( " it uses getpwuid() on unix-like systems (which returns the home\n" " dir given the current user in your system). On Windows, it then\n" " checks for the APPDATA variable, or as a last resort the '%USER-\n" " PROFILE%0lication Data'.\n" "\n" " 2) On windows, if there is no _curlrc file in the home dir, it\n" " checks for one in the same dir the executable curl is placed. On\n" , stdout); fputs( " unix-like systems, it will simply try to load .curlrc from the\n" " determined home dir.\n" " --limit-rate \n" " Specify the maximum transfer rate you want curl to use. This\n" " feature is useful if you have a limited pipe and you'd like your\n" " transfer not use your entire bandwidth.\n" "\n" " The given speed is measured in bytes/second, unless a suffix is\n" , stdout); fputs( " appended. Appending 'k' or 'K' will count the number as kilo-\n" " bytes, 'm' or M' makes it megabytes while 'g' or 'G' makes it\n" " gigabytes. Examples: 200K, 3m and 1G.\n" "\n" " If you are also using the -Y/--speed-limit option, that option\n" " will take precedence and might cripple the rate-limiting\n" " slightly, to help keeping the speed-limit logic working.\n" "\n" " This option was introduced in curl 7.10.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " -l/--list-only\n" " (FTP) When listing an FTP directory, this switch forces a name-\n" " only view. Especially useful if you want to machine-parse the\n" " contents of an FTP directory since the normal directory view\n" " doesn't use a standard look or format.\n" "\n" " This option causes an FTP NLST command to be sent. Some FTP\n" , stdout); fputs( " servers list only files in their response to NLST; they do not\n" " include subdirectories and symbolic links.\n" "\n" " If this option is used twice, the second will again disable list\n" " only.\n" "\n" " -L/--location\n" " (HTTP/HTTPS) If the server reports that the requested page has a\n" " different location (indicated with the header line Location:)\n" " this flag will let curl attempt to reattempt the get on the new\n" , stdout); fputs( " place. If used together with -i/--include or -I/--head, headers\n" " from all requested pages will be shown. If authentication is\n" " used, curl will only send its credentials to the initial host,\n" " so if a redirect takes curl to a different host, it won't inter-\n" " cept the user+password. See also --location-trusted on how to\n" " change this.\n" "\n" , stdout); fputs( " If this option is used twice, the second will again disable\n" " location following.\n" "\n" " --location-trusted\n" " (HTTP/HTTPS) Like -L/--location, but will allow sending the name\n" " + password to all hosts that the site may redirect to. This may\n" " or may not introduce a security breach if the site redirects you\n" " do a site to which you'll send your authentication info (which\n" , stdout); fputs( " is plaintext in the case of HTTP Basic authentication).\n" "\n" " If this option is used twice, the second will again disable\n" " location following.\n" "\n" " --max-filesize \n" " Specify the maximum size (in bytes) of a file to download. If\n" " the file requested is larger than this value, the transfer will\n" " not start and curl will return with exit code 63.\n" "\n" , stdout); fputs( " NOTE: The file size is not always known prior to download, and\n" " for such files this option has no effect even if the file trans-\n" " fer ends up being larger than this given limit. This concerns\n" " both FTP and HTTP transfers.\n" "\n" " -m/--max-time \n" " Maximum time in seconds that you allow the whole operation to\n" " take. This is useful for preventing your batch jobs from hang-\n" , stdout); fputs( " ing for hours due to slow networks or links going down. This\n" " doesn't work fully in win32 systems. See also the --connect-\n" " timeout option.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -M/--manual\n" " Manual. Display the huge help text.\n" "\n" " -n/--netrc\n" " Makes curl scan the .netrc file in the user's home directory for\n" , stdout); fputs( " login name and password. This is typically used for ftp on unix.\n" " If used with http, curl will enable user authentication. See\n" " netrc(4) or ftp(1) for details on the file format. Curl will not\n" " complain if that file hasn't the right permissions (it should\n" " not be world nor group readable). The environment variable\n" " \"HOME\" is used to find the home directory.\n" "\n" , stdout); fputs( " A quick and very simple example of how to setup a .netrc to\n" " allow curl to ftp to the machine host.domain.com with user name\n" " 'myself' and password\n" "\n" " machine host.domain.com login myself password secret\n" "\n" " If this option is used twice, the second will again disable\n" " netrc usage.\n" "\n" " --netrc-optional\n" " Very similar to --netrc, but this option makes the .netrc usage\n" , stdout); fputs( " optional and not mandatory as the --netrc does.\n" "\n" " --negotiate\n" " (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate\n" " method was designed by Microsoft and is used in their web appli-\n" " cations. It is primarily meant as a support for Kerberos5\n" " authentication but may be also used along with another authenti-\n" " cation methods. For more information see IETF draft draft-\n" , stdout); fputs( " brezak-spnego-http-04.txt. (Added in 7.10.6)\n" "\n" " This option requires that the library was built with GSSAPI sup-\n" " port. This is not very common. Use -V/--version to see if your\n" " version supports GSS-Negotiate.\n" "\n" " If this option is used several times, the following occurrences\n" " make no difference.\n" "\n" " -N/--no-buffer\n" " Disables the buffering of the output stream. In normal work sit-\n" , stdout); fputs( " uations, curl will use a standard buffered output stream that\n" " will have the effect that it will output the data in chunks, not\n" " necessarily exactly when the data arrives. Using this option\n" " will disable that buffering.\n" "\n" " If this option is used twice, the second will again switch on\n" " buffering.\n" "\n" " --ntlm (HTTP) Enables NTLM authentication. The NTLM authentication\n" , stdout); fputs( " method was designed by Microsoft and is used by IIS web servers.\n" " It is a proprietary protocol, reversed engineered by clever peo-\n" " ple and implemented in curl based on their efforts. This kind of\n" " behavior should not be endorsed, you should encourage everyone\n" " who uses NTLM to switch to a public and documented authentica-\n" " tion method instead. Such as Digest. (Added in 7.10.6)\n" "\n" , stdout); fputs( " If you want to enable NTLM for your proxy authentication, then\n" " use --proxy-ntlm.\n" "\n" " This option requires that the library was built with SSL sup-\n" " port. Use -V/--version to see if your curl supports NTLM.\n" "\n" " If this option is used several times, the following occurrences\n" " make no difference.\n" "\n" " -o/--output \n" " Write output to instead of stdout. If you are using {} or\n" , stdout); fputs( " [] to fetch multiple documents, you can use '#' followed by a\n" " number in the specifier. That variable will be replaced\n" " with the current string for the URL being fetched. Like in:\n" "\n" " curl http://{one,two}.site.com -o \"file_#1.txt\"\n" "\n" " or use several variables like:\n" "\n" " curl http://{site,host}.host[1-5].com -o \"#1_#2\"\n" "\n" " You may use this option as many times as you have number of\n" , stdout); fputs( " URLs.\n" "\n" " See also the --create-dirs option to create the local directo-\n" " ries dynamically.\n" "\n" " -O/--remote-name\n" " Write output to a local file named like the remote file we get.\n" " (Only the file part of the remote file is used, the path is cut\n" " off.)\n" "\n" " The remote file name to use for saving is extracted from the\n" " given URL. Nothing else\n" "\n" , stdout); fputs( " You may use this option as many times as you have number of\n" " URLs.\n" "\n" " --pass \n" " (SSL) Pass phrase for the private key\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --proxy-anyauth\n" " Tells curl to pick a suitable authentication method when commu-\n" " nicating with the given proxy. This will cause an extra\n" , stdout); fputs( " request/response round-trip. Added in curl 7.13.2.\n" "\n" " If this option is used twice, the second will again disable the\n" " proxy use-any authentication.\n" "\n" " --proxy-basic\n" " Tells curl to use HTTP Basic authentication when communicating\n" " with the given proxy. Use --basic for enabling HTTP Basic with a\n" " remote host. Basic is the default authentication method curl\n" " uses with proxies.\n" "\n" , stdout); fputs( " If this option is used twice, the second will again disable\n" " proxy HTTP Basic authentication.\n" "\n" " --proxy-digest\n" " Tells curl to use HTTP Digest authentication when communicating\n" " with the given proxy. Use --digest for enabling HTTP Digest with\n" " a remote host.\n" "\n" " If this option is used twice, the second will again disable\n" " proxy HTTP Digest.\n" "\n" " --proxy-ntlm\n" , stdout); fputs( " Tells curl to use HTTP NTLM authentication when communicating\n" " with the given proxy. Use --ntlm for enabling NTLM with a remote\n" " host.\n" "\n" " If this option is used twice, the second will again disable\n" " proxy HTTP NTLM.\n" " -p/--proxytunnel\n" " When an HTTP proxy is used (-x/--proxy), this option will cause\n" " non-HTTP protocols to attempt to tunnel through the proxy\n" , stdout); fputs( " instead of merely using it to do HTTP-like operations. The tun-\n" " nel approach is made with the HTTP proxy CONNECT request and\n" " requires that the proxy allows direct connect to the remote port\n" " number curl wants to tunnel through to.\n" "\n" " If this option is used twice, the second will again disable\n" " proxy tunnel.\n" "\n" " -P/--ftp-port
\n" , stdout); fputs( " (FTP) Reverses the initiator/listener roles when connecting with\n" " ftp. This switch makes Curl use the PORT command instead of\n" " PASV. In practice, PORT tells the server to connect to the\n" " client's specified address and port, while PASV asks the server\n" " for an ip address and port to connect to.
should be\n" " one of:\n" "\n" " interface\n" , stdout); fputs( " i.e \"eth0\" to specify which interface's IP address you\n" " want to use (Unix only)\n" "\n" " IP address\n" " i.e \"192.168.10.1\" to specify exact IP number\n" "\n" " host name\n" " i.e \"my.host.domain\" to specify machine\n" "\n" " - (any single-letter string) to make it pick the machine's\n" " default\n" "\n" " If this option is used several times, the last one will be used. Dis-\n" , stdout); fputs( " able the use of PORT with --ftp-pasv. Disable the attempt to use the\n" " EPRT command instead of PORT by using --disable-eprt. EPRT is really\n" " PORT++.\n" "\n" " -q If used as the first parameter on the command line, the curlrc\n" " config file will not be read and used. See the -K/--config for\n" " details on the default config file search path.\n" "\n" " -Q/--quote \n" , stdout); fputs( " (FTP) Send an arbitrary command to the remote FTP server. Quote\n" " commands are sent BEFORE the transfer is taking place (just\n" " after the initial PWD command to be exact). To make commands\n" " take place after a successful transfer, prefix them with a dash\n" " '-'. To make commands get sent after libcurl has changed working\n" " directory, just before the transfer command(s), prefix the com-\n" , stdout); fputs( " mand with '+'. You may specify any amount of commands. If the\n" " server returns failure for one of the commands, the entire oper-\n" " ation will be aborted. You must send syntactically correct FTP\n" " commands as RFC959 defines.\n" "\n" " This option can be used multiple times.\n" "\n" " --random-file \n" " (HTTPS) Specify the path name to file containing what will be\n" , stdout); fputs( " considered as random data. The data is used to seed the random\n" " engine for SSL connections. See also the --egd-file option.\n" "\n" " -r/--range \n" " (HTTP/FTP) Retrieve a byte range (i.e a partial document) from a\n" " HTTP/1.1 or FTP server. Ranges can be specified in a number of\n" " ways.\n" "\n" " 0-499 specifies the first 500 bytes\n" "\n" " 500-999 specifies the second 500 bytes\n" "\n" , stdout); fputs( " -500 specifies the last 500 bytes\n" "\n" " 9500 specifies the bytes from offset 9500 and forward\n" "\n" " 0-0,-1 specifies the first and last byte only(*)(H)\n" "\n" " 500-700,600-799\n" " specifies 300 bytes from offset 500(H)\n" "\n" " 100-199,500-599\n" " specifies two separate 100 bytes ranges(*)(H)\n" "\n" " (*) = NOTE that this will cause the server to reply with a multipart\n" " response!\n" "\n" , stdout); fputs( " You should also be aware that many HTTP/1.1 servers do not have this\n" " feature enabled, so that when you attempt to get a range, you'll\n" " instead get the whole document.\n" "\n" " FTP range downloads only support the simple syntax 'start-stop'\n" " (optionally with one of the numbers omitted). It depends on the non-RFC\n" " command SIZE.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -R/--remote-time\n" , stdout); fputs( " When used, this will make libcurl attempt to figure out the\n" " timestamp of the remote file, and if that is available make the\n" " local file get that same timestamp.\n" "\n" " If this option is used twice, the second time disables this\n" " again.\n" "\n" " --retry \n" " If a transient error is returned when curl tries to perform a\n" " transfer, it will retry this number of times before giving up.\n" , stdout); fputs( " Setting the number to 0 makes curl do no retries (which is the\n" " default). Transient error means either: a timeout, an FTP 5xx\n" " response code or an HTTP 5xx response code.\n" "\n" " When curl is about to retry a transfer, it will first wait one\n" " second and then for all forthcoming retries it will double the\n" " waiting time until it reaches 10 minutes which then will be the\n" , stdout); fputs( " delay between the rest of the retries. By using --retry-delay\n" " you disable this exponential backoff algorithm. See also\n" " --retry-max-time to limit the total time allowed for retries.\n" " (Option added in 7.12.3)\n" "\n" " If this option is used multiple times, the last occurrence\n" " decide the amount.\n" "\n" " --retry-delay \n" " Make curl sleep this amount of time between each retry when a\n" , stdout); fputs( " transfer has failed with a transient error (it changes the\n" " default backoff time algorithm between retries). This option is\n" " only interesting if --retry is also used. Setting this delay to\n" " zero will make curl use the default backoff time. (Option added\n" " in 7.12.3)\n" "\n" " If this option is used multiple times, the last occurrence\n" " decide the amount.\n" "\n" " --retry-max-time \n" , stdout); fputs( " The retry timer is reset before the first transfer attempt.\n" " Retries will be done as usual (see --retry) as long as the timer\n" " hasn't reached this given limit. Notice that if the timer hasn't\n" " reached the limit, the request will be made and while perform-\n" " ing, it may take longer than this given time period. To limit a\n" " single request's maximum time, use -m/--max-time. Set this\n" , stdout); fputs( " option to zero to not timeout retries. (Option added in 7.12.3)\n" "\n" " If this option is used multiple times, the last occurrence\n" " decide the amount.\n" "\n" " -s/--silent\n" " Silent mode. Don't show progress meter or error messages. Makes\n" " Curl mute.\n" "\n" " If this option is used twice, the second will again disable\n" " mute.\n" "\n" " -S/--show-error\n" , stdout); fputs( " When used with -s it makes curl show error message if it fails.\n" " If this option is used twice, the second will again disable show\n" " error.\n" "\n" " --socks \n" " Use the specified SOCKS5 proxy. If the port number is not speci-\n" " fied, it is assumed at port 1080. (Option added in 7.11.1)\n" "\n" " This option overrides any previous use of -x/--proxy, as they\n" " are mutually exclusive.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " --stderr \n" " Redirect all writes to stderr to the specified file instead. If\n" " the file name is a plain '-', it is instead written to stdout.\n" " This option has no point when you're using a shell with decent\n" " redirecting capabilities.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --tcp-nodelay\n" , stdout); fputs( " Turn on the TCP_NODELAY option. See the curl_easy_setopt(3) man\n" " page for details about this option. (Added in 7.11.2)\n" "\n" " If this option is used several times, each occurrence toggles\n" " this on/off.\n" "\n" " -t/--telnet-option \n" " Pass options to the telnet protocol. Supported options are:\n" "\n" " TTYPE= Sets the terminal type.\n" "\n" " XDISPLOC= Sets the X display location.\n" "\n" , stdout); fputs( " NEW_ENV= Sets an environment variable.\n" "\n" " -T/--upload-file \n" " This transfers the specified local file to the remote URL. If\n" " there is no file part in the specified URL, Curl will append the\n" " local file name. NOTE that you must use a trailing / on the last\n" " directory to really prove to Curl that there is no file name or\n" " curl will think that your last directory name is the remote file\n" , stdout); fputs( " name to use. That will most likely cause the upload operation to\n" " fail. If this is used on a http(s) server, the PUT command will\n" " be used.\n" "\n" " Use the file name \"-\" (a single dash) to use stdin instead of a\n" " given file.\n" "\n" " Before 7.10.8, when this option was used several times, the last\n" " one was used.\n" "\n" " In curl 7.10.8 and later, you can specify one -T for each URL on\n" , stdout); fputs( " the command line. Each -T + URL pair specifies what to upload\n" " and to where. curl also supports \"globbing\" of the -T argument,\n" " meaning that you can upload multiple files to a single URL by\n" " using the same URL globbing style supported in the URL, like\n" " this:\n" "\n" " curl -T \"{file1,file2}\" http://www.uploadtothissite.com\n" "\n" " or even\n" "\n" , stdout); fputs( " curl -T \"img[1-1000].png\" ftp://ftp.picturemania.com/upload/\n" "\n" " --trace \n" " Enables a full trace dump of all incoming and outgoing data,\n" " including descriptive information, to the given output file. Use\n" " \"-\" as filename to have the output sent to stdout.\n" "\n" " If this option is used several times, the last one will be used.\n" " (Added in 7.9.7)\n" "\n" " --trace-ascii \n" , stdout); fputs( " Enables a full trace dump of all incoming and outgoing data,\n" " including descriptive information, to the given output file. Use\n" " \"-\" as filename to have the output sent to stdout.\n" "\n" " This is very similar to --trace, but leaves out the hex part and\n" " only shows the ASCII part of the dump. It makes smaller output\n" " that might be easier to read for untrained humans.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" " (Added in 7.9.7)\n" "\n" " --trace-time\n" " Prepends a time stamp to each trace or verbose line that curl\n" " displays.\n" "\n" " If this option is used several times, each occurrence will tog-\n" " gle it on/off. (Added in 7.14.0 )\n" "\n" " -u/--user \n" " Specify user and password to use for server authentication.\n" , stdout); fputs( " Overrides -n/--netrc and --netrc-optional.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -U/--proxy-user \n" " Specify user and password to use for proxy authentication.\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " --url \n" " Specify a URL to fetch. This option is mostly handy when you\n" " want to specify URL(s) in a config file.\n" "\n" , stdout); fputs( " This option may be used any number of times. To control where\n" " this URL is written, use the -o/--output or the -O/--remote-name\n" " options.\n" "\n" " -v/--verbose\n" " Makes the fetching more verbose/talkative. Mostly usable for\n" " debugging. Lines starting with '>' means \"header data\" sent by\n" " curl, '<' means \"header data\" received by curl that is hidden in\n" , stdout); fputs( " normal cases and lines starting with '*' means additional info\n" " provided by curl.\n" "\n" " Note that if you only want HTTP headers in the output,\n" " -i/--include might be option you're looking for.\n" "\n" " If you think this option still doesn't give you enough details,\n" " consider using --trace or --trace-ascii instead.\n" "\n" " If this option is used twice, the second will again disable ver-\n" " bose.\n" "\n" , stdout); fputs( " -V/--version\n" " Displays information about curl and the libcurl version it uses.\n" " The first line includes the full version of curl, libcurl and\n" " other 3rd party libraries linked with the executable.\n" "\n" " The second line (starts with \"Protocols:\") shows all protocols\n" " that libcurl reports to support.\n" "\n" " The third line (starts with \"Features:\") shows specific features\n" , stdout); fputs( " libcurl reports to offer. Available features include:\n" "\n" " IPv6 You can use IPv6 with this.\n" "\n" " krb4 Krb4 for ftp is supported.\n" "\n" " SSL HTTPS and FTPS are supported.\n" "\n" " libz Automatic decompression of compressed files over HTTP is\n" " supported.\n" "\n" " NTLM NTLM authentication is supported.\n" "\n" " GSS-Negotiate\n" " Negotiate authentication is supported.\n" "\n" , stdout); fputs( " Debug This curl uses a libcurl built with Debug. This enables\n" " more error-tracking and memory debugging etc. For curl-\n" " developers only!\n" "\n" " AsynchDNS\n" " This curl uses asynchronous name resolves.\n" "\n" " SPNEGO SPNEGO Negotiate authentication is supported.\n" "\n" " Largefile\n" " This curl supports transfers of large files, files larger\n" " than 2GB.\n" "\n" , stdout); fputs( " IDN This curl supports IDN - international domain names.\n" "\n" " SSPI SSPI is supported. If you use NTLM and set a blank user\n" " name, curl will authenticate with your current user and\n" " password.\n" "\n" " -w/--write-out \n" " Defines what to display after a completed and successful opera-\n" " tion. The format is a string that may contain plain text mixed\n" , stdout); fputs( " with any number of variables. The string can be specified as\n" " \"string\", to get read from a particular file you specify it\n" " \"@filename\" and to tell curl to read the format from stdin you\n" " write \"@-\".\n" "\n" " The variables present in the output format will be substituted\n" " by the value or text that curl thinks fit, as described below.\n" , stdout); fputs( " All variables are specified like %{variable_name} and to output\n" " a normal % you just write them like %%. You can output a newline\n" " by using \\n, a carriage return with \\r and a tab space with \\t.\n" " NOTE: The %-letter is a special letter in the win32-environment,\n" " where all occurrences of % must be doubled when using this\n" " option.\n" "\n" " Available variables are at this point:\n" "\n" , stdout); fputs( " url_effective The URL that was fetched last. This is mostly\n" " meaningful if you've told curl to follow loca-\n" " tion: headers.\n" "\n" " http_code The numerical code that was found in the last\n" " retrieved HTTP(S) page.\n" "\n" " http_connect The numerical code that was found in the last\n" " response (from a proxy) to a curl CONNECT\n" , stdout); fputs( " request. (Added in 7.12.4)\n" "\n" " time_total The total time, in seconds, that the full opera-\n" " tion lasted. The time will be displayed with mil-\n" " lisecond resolution.\n" "\n" " time_namelookup\n" " The time, in seconds, it took from the start\n" " until the name resolving was completed.\n" "\n" , stdout); fputs( " time_connect The time, in seconds, it took from the start\n" " until the connect to the remote host (or proxy)\n" " was completed.\n" "\n" " time_pretransfer\n" " The time, in seconds, it took from the start\n" " until the file transfer is just about to begin.\n" " This includes all pre-transfer commands and nego-\n" , stdout); fputs( " tiations that are specific to the particular pro-\n" " tocol(s) involved.\n" "\n" " time_redirect The time, in seconds, it took for all redirection\n" " steps include name lookup, connect, pretransfer\n" " and transfer before final transaction was\n" " started. time_redirect shows the complete execu-\n" , stdout); fputs( " tion time for multiple redirections. (Added in\n" " 7.12.3)\n" "\n" " time_starttransfer\n" " The time, in seconds, it took from the start\n" " until the first byte is just about to be trans-\n" " ferred. This includes time_pretransfer and also\n" " the time the server needs to calculate the\n" , stdout); fputs( " result.\n" "\n" " size_download The total amount of bytes that were downloaded.\n" "\n" " size_upload The total amount of bytes that were uploaded.\n" "\n" " size_header The total amount of bytes of the downloaded head-\n" " ers.\n" "\n" " size_request The total amount of bytes that were sent in the\n" " HTTP request.\n" "\n" , stdout); fputs( " speed_download The average download speed that curl measured for\n" " the complete download.\n" "\n" " speed_upload The average upload speed that curl measured for\n" " the complete upload.\n" "\n" " content_type The Content-Type of the requested document, if\n" " there was any. (Added in 7.9.5)\n" "\n" " num_connects Number of new connects made in the recent trans-\n" , stdout); fputs( " fer. (Added in 7.12.3)\n" "\n" " num_redirects Number of redirects that were followed in the\n" " request. (Added in 7.12.3)\n" "\n" " If this option is used several times, the last one will be used.\n" "\n" " -x/--proxy \n" " Use specified HTTP proxy. If the port number is not specified,\n" " it is assumed at port 1080.\n" "\n" " This option overrides existing environment variables that sets\n" , stdout); fputs( " proxy to use. If there's an environment variable setting a\n" " proxy, you can set proxy to \"\" to override it.\n" "\n" " Note that all operations that are performed over a HTTP proxy\n" " will transparently be converted to HTTP. It means that certain\n" " protocol specific operations might not be available. This is not\n" " the case if you can tunnel through the proxy, as done with the\n" " -p/--proxytunnel option.\n" "\n" , stdout); fputs( " If this option is used several times, the last one will be used.\n" "\n" " -X/--request \n" " (HTTP) Specifies a custom request to use when communicating with\n" " the HTTP server. The specified request will be used instead of\n" " the standard GET. Read the HTTP 1.1 specification for details\n" " and explanations.\n" "\n" " (FTP) Specifies a custom FTP command to use instead of LIST when\n" " doing file lists with ftp.\n" , stdout); fputs( "\n" " If this option is used several times, the last one will be used.\n" "\n" " -y/--speed-time here. it might be because you request a directory URL but without the trailing slash. Try the same operation again _with_ the trailing URL, or use the -L/--location option to follow the redirection. 4.6 Can you tell me what error code 142 means? All curl error codes are described at the end of the man page, in the section called "EXIT CODES". Error codes that are larger than the highest documented error code means that curl has exited due to a crash. This is a serious error, and we appreciate a detailed bug report from you that describes how we could go ahead and repeat this! 4.7 How do I keep user names and passwords secret in Curl command lines? This problem has two sides: The first part is to avoid having clear-text passwords in the command line so that they don't appear in 'ps' outputs and similar. That is easily avoided by using the "-K" option to tell curl to read parameters from a file or stdin to which you can pass the secret info. curl itself will also attempt to "hide" the given password by blanking out the option - this doesn't work on all platforms. To keep the passwords in your account secret from the rest of the world is not a task that curl addresses. You could of course encrypt them somehow to at least hide them from being read by human eyes, but that is not what anyone would call security. Also note that regular HTTP (using Basic authentication) and FTP passwords are sent in clear across the network. All it takes for anyone to fetch them is to listen on the network. Eavesdropping is very easy. Use more secure authentication methods (like Digest, Negotiate or even NTLM) or consider the SSL-based alternatives HTTPS and FTPS. 4.8 I found a bug! It is not a bug if the behavior is documented. Read the docs first. Especially check out the KNOWN_BUGS file, it may be a documented bug! If it is a problem with a binary you've downloaded or a package for your particular platform, try contacting the person who built the package/archive you have. If there is a bug, read the BUGS document first. Then report it as described in there. 4.9 Curl can't authenticate to the server that requires NTLM? This is supported in curl 7.10.6 or later. No earlier curl version knows of this magic. NTLM is a Microsoft proprietary protocol. Proprietary formats are evil. You should not use such ones. 4.10 My HTTP request using HEAD, PUT or DELETE doesn't work! Many web servers allow or demand that the administrator configures the server properly for these requests to work on the web server. Some servers seem to support HEAD only on certain kinds of URLs. To fully grasp this, try the documentation for the particular server software you're trying to interact with. This is not anything curl can do anything about. 4.11 Why does my HTTP range requests return the full document? Because the range may not be supported by the server, or the server may choose to ignore it and return the full document anyway. 4.12 Why do I get "certificate verify failed" ? You invoke curl 7.10 or later to communicate on a https:// URL and get an error back looking something similar to this: curl: (35) SSL: error:14090086:SSL routines: SSL3_GET_SERVER_CERTIFICATE:certificate verify failed Then it means that curl couldn't verify that the server's certificate was good. Curl verifies the certificate using the CA cert bundle that comes with the curl installation. To disable the verification (which makes it act like curl did before 7.10), use -k. This does however enable man-in-the-middle attacks. If you get this failure but are having a CA cert bundle installed and used, the server's certificate is not signed by one of the CA's in the bundle. It might for example be self-signed. You then correct this problem by obtaining a valid CA cert for the server. Or again, decrease the security by disabling this check. Details are also in the SSLCERTS file in the release archives, found online here: http://curl.haxx.se/docs/sslcerts.html 5. libcurl Issues 5.1 Is libcurl thread-safe? Yes. We have written the libcurl code specifically adjusted for multi-threaded programs. libcurl will use thread-safe functions instead of non-safe ones if your system has such. If you use a OpenSSL-powered libcurl in a multi-threaded environment, you need to provide one or two locking functions: http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION If you use a GnuTLS-powered libcurl in a multi-threaded environment, you need to provide locking function(s) for libgcrypt (which is used by GnuTLS for the crypto functions). [informative link missing] 5.2 How can I receive all data into a large memory chunk? [ See also the examples/getinmemory.c source ] You are in full control of the callback function that gets called every time there is data received from the remote server. You can make that callback do whatever you want. You do not have to write the received data to a file. One solution to this problem could be to have a pointer to a struct that you pass to the callback function. You set the pointer using the curl_easy_setopt(CURLOPT_FILE) function. Then that pointer will be passed to the callback instead of a FILE * to a file: /* imaginary struct */ struct MemoryStruct { char *memory; size_t size; }; /* imaginary callback function */ size_t WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) { size_t realsize = size * nmemb; struct MemoryStruct *mem = (struct MemoryStruct *)data; mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1); if (mem->memory) { memcpy(&(mem->memory[mem->size]), ptr, realsize); mem->size += realsize; mem->memory[mem->size] = 0; } return realsize; } 5.3 How do I fetch multiple files with libcurl? libcurl has excellent support for transferring multiple files. You should just repeatedly set new URLs with curl_easy_setopt() and then transfer it with curl_easy_perform(). The handle you get from curl_easy_init() is not only reusable, but you're even encouraged to reuse it if you can, as that will enable libcurl to use persistent connections. 5.4 Does libcurl do Winsock initialization on win32 systems? Yes, if told to in the curl_global_init() call. 5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ? Yes, but you cannot open a FILE * and pass the pointer to a DLL and have that DLL use the FILE * (as the DLL and the client application cannot access each others' variable memory areas). If you set CURLOPT_WRITEDATA you must also use CURLOPT_WRITEFUNCTION as well to set a function that writes the file, even if that simply writes the data to the specified FILE *. Similarly, if you use CURLOPT_READDATA you must also specify CURLOPT_READFUNCTION. (Provided by Joel DeYoung and Bob Schader) 5.6 What about Keep-Alive or persistent connections? curl and libcurl have excellent support for persistent connections when transferring several files from the same server. Curl will attempt to reuse connections for all URLs specified on the same command line/config file, and libcurl will reuse connections for all transfers that are made using the same libcurl handle. 5.7 Link errors when building libcurl on Windows! You need to make sure that your project, and all the libraries (both static and dynamic) that it links against, are compiled/linked against the same run time library. This is determined by the /MD, /ML, /MT (and their corresponding /M?d) options to the command line compiler. /MD (linking against MSVCRT dll) seems to be the most commonly used option. (Provided by Andrew Francis) When building an application that uses the static libcurl library, you must add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for dynamic import symbols. If you get linker error like "unknown symbol __imp__curl_easy_init ..." you have linked against the wrong (static) library. If you want to use the libcurl.dll and import lib, you don't need any extra CFLAGS, but use one of the import libraries below. These are the libraries produced by the various lib/Makefile.* files: Target: static lib. import lib for libcurl*.dll. ----------------------------------------------------------- MingW: libcurl.a libcurldll.a MSVC (release): libcurl.lib libcurl_imp.lib MSVC (debug): libcurld.lib libcurld_imp.lib Borland: libcurl.lib libcurl_imp.lib 5.8 libcurl.so.3: open failed: No such file or directory This is an error message you might get when you try to run a program linked with a shared version of libcurl and your run-time linker (ld.so) couldn't find the shared library named libcurl.so.3. You need to make sure that ld.so finds libcurl.so.3. You can do that multiple ways, and it differs somewhat between different operating systems, but they are usually: * Add an option to the linker command line that specify the hard-coded path the run-time linker should check for the lib (usually -R) * Set an environment variable (LD_LIBRARY_PATH for example) where ld.so should check for libs * Adjust the system's config to check for libs in the directory where you've put the dir (like Linux's /etc/ld.so.conf) 'man ld.so' and 'man ld' will tell you more details 5.9 How does libcurl resolve host names? libcurl includes a number of different name resolve functions: - The non-ipv6 resolver that can use one out of four host name resolve calls (depending on what your system supports): A - gethostbyname() B - gethostbyname_r() with 3 arguments C - gethostbyname_r() with 5 arguments D - gethostbyname_r() with 6 arguments - The ipv6-resolver that uses getaddrinfo() - The c-ares based name resolver that uses the c-ares library for resolves. - The Windows threaded resolver. It use: A - gethostbyname() on plain ipv4 windows hosts B - getaddrinfo() on ipv6-enabled windows hosts Also note that libcurl never resolves or reverse-lookups addresses given as pure numbers, such as 127.0.0.1 or ::1. 5.10 How do I prevent libcurl from writing the response to stdout? libcurl provides a default built-in write function that writes received data to stdout. Set a WRITEFUNCTION to receive the data, or possibly set WRITEDATA to a different FILE * handle. 5.11 How do I make libcurl not receive the whole HTTP response? You make the write callback (or progress callback) return an error and libcurl will then abort the transfer. 5.12 Can I make libcurl fake or hide my real IP address? No. libcurl operates on a higher level than so. Besides, faking IP address would imply sending IP packages with a made-up source address, and then you normally get a problem with intercepting the packages sent back as they would then not be routed to you! If you use a proxy to access remote sites, the sites will not see your local IP address but instead the address of the proxy. Also note that on many networks NATs or other IP-munging techniques are used that makes you see and use a different IP address locally than what the remote server will see you coming from. 6. License Issues Curl and libcurl are released under a MIT/X derivate license. The license is very liberal and should not impose a problem for your project. This section is just a brief summary for the cases we get the most questions. (Parts of this section was much enhanced by Bjorn Reese.) 6.1 I have a GPL program, can I use the libcurl library? Yes! Since libcurl may be distributed under the MIT/X derivate license, it can be used together with GPL in any software. 6.2 I have a closed-source program, can I use the libcurl library? Yes! libcurl does not put any restrictions on the program that uses the library. 6.3 I have a BSD licensed program, can I use the libcurl library? Yes! libcurl does not put any restrictions on the program that uses the library. 6.4 I have a program that uses LGPL libraries, can I use libcurl? Yes! The LGPL license doesn't clash with other licenses. 6.5 Can I modify curl/libcurl for my program and keep the changes secret? Yes! The MIT/X derivate license practically allows you to do almost anything with the sources, on the condition that the copyright texts in the sources are left intact. 6.6 Can you please change the curl/libcurl license to XXXX? No. We have carefully picked this license after years of development and discussions and a large amount of people have contributed with source code knowing that this is the license we use. This license puts the restrictions we want on curl/libcurl and it does not spread to other programs or libraries that use it. It should be possible for everyone to use libcurl or curl in their projects, no matter what license they already have in use. 7. PHP/CURL Issues 7.1 What is PHP/CURL? The module for PHP that makes it possible for PHP programs to access curl- functions from within PHP. We often call it PHP/CURL to differentiate from curl the command line tool and libcurl the library. 7.2 Who write PHP/CURL? PHP/CURL is a module that comes with the regular PHP package. It depends and uses libcurl, so you need to have libcurl installed properly first before PHP/CURL can be used. PHP/CURL is written by Sterling Hughes. 7.3 Can I perform multiple requests using the same handle? Yes - at least in PHP version 4.3.8 and later (this has been known to not work in earlier versions, but the exact version when it started to work is unknown to me). After a transfer, you just set new options in the handle and make another transfer. This will make libcurl to re-use the same connection if it can. criticalmass-1.0.0.orig/curl/docs/BUGS0000644000175000017500000000656110265631023016765 0ustar danieldaniel$Id: BUGS,v 1.7 2003/08/18 15:24:46 bagder Exp $ _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| BUGS Curl and libcurl have grown substantially since the beginning. At the time of writing (August 2003), there are about 40000 lines of source code, and by the time you read this it has probably grown even more. Of course there are lots of bugs left. And lots of misfeatures. To help us make curl the stable and solid product we want it to be, we need bug reports and bug fixes. WHERE TO REPORT If you can't fix a bug yourself and submit a fix for it, try to report an as detailed report as possible to a curl mailing list to allow one of us to have a go at a solution. You should also post your bug/problem at curl's bug tracking system over at http://sourceforge.net/bugs/?group_id=976 (but please read the sections below first before doing that) If you feel you need to ask around first, find a suitable mailing list and post there. The lists are available on http://curl.haxx.se/mail/ WHAT TO REPORT When reporting a bug, you should include all information that will help us understand what's wrong, what you expected to happen and how to repeat the bad behavior. You therefore need to tell us: - your operating system's name and version number (uname -a under a unix is fine) - what version of curl you're using (curl -V is fine) - what URL you were working with (if possible), at least which protocol and anything and everything else you think matters. Tell us what you expected to happen, tell use what did happen, tell us how you could make it work another way. Dig around, try out, test. Then include all the tiny bits and pieces in your report. You will benefit from this yourself, as it will enable us to help you quicker and more accurately. Since curl deals with networks, it often helps us if you include a protocol debug dump with your bug report. The output you get by using the -v or --trace options. If curl crashed, causing a core dump (in unix), there is hardly any use to send that huge file to anyone of us. Unless we have an exact same system setup as you, we can't do much with it. Instead we ask you to get a stack trace and send that (much smaller) output to us instead! The address and how to subscribe to the mailing lists are detailed in the MANUAL file. HOW TO GET A STACK TRACE First, you must make sure that you compile all sources with -g and that you don't 'strip' the final executable. Try to avoid optimizing the code as well, remove -O, -O2 etc from the compiler options. Run the program until it cores. Run your debugger on the core file, like ' curl core'. should be replaced with the name of your debugger, in most cases that will be 'gdb', but 'dbx' and others also occur. When the debugger has finished loading the core file and presents you a prompt, enter 'where' (without the quotes) and press return. The list that is presented is the stack trace. If everything worked, it is supposed to contain the chain of functions that were called when curl crashed. Include the stack trace with your detailed bug report. It'll help a lot. criticalmass-1.0.0.orig/curl/docs/TODO0000644000175000017500000002633210265631023016770 0ustar danieldaniel _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| TODO Things to do in project cURL. Please tell us what you think, contribute and send us patches that improve things! Also check the http://curl.haxx.se/dev web section for various technical development notes. All bugs documented in the KNOWN_BUGS document are subject for fixing! LIBCURL * Introduce an interface to libcurl that allows applications to easier get to know what cookies that are received. CURLINFO_COOKIELIST to get a curl_slist with cookies (netscape/mozilla cookie file formatted), and CURLOPT_COOKIELIST to set a list of cookies (using the same format). http://curl.haxx.se/mail/lib-2004-12/0195.html * Introduce another callback interface for upload/download that makes one less copy of data and thus a faster operation. [http://curl.haxx.se/dev/no_copy_callbacks.txt] * More data sharing. curl_share_* functions already exist and work, and they can be extended to share more. For example, enable sharing of the ares channel and the connection cache. * Introduce a new error code indicating authentication problems (for proxy CONNECT error 407 for example). This cannot be an error code, we must not return informational stuff as errors, consider a new info returned by curl_easy_getinfo() #845941 * Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. To support ipv6 interface addresses properly. * Add the following to curl_easy_getinfo(): GET_HTTP_IP, GET_FTP_IP and GET_FTP_DATA_IP. Return a string with the used IP. Suggested by Alan. LIBCURL - multi interface * Add a curl_multi_fdset() alternative. this allows apps to avoid the FD_SETSIZE problem with select(). * Add curl_multi_timeout() to make libcurl's ares-functionality better. * Make sure we don't ever loop because of non-blocking sockets return EWOULDBLOCK or similar. This FTP command sending, the SSL connection etc. * Make transfers treated more carefully. We need a way to tell libcurl we have data to write, as the current system expects us to upload data each time the socket is writable and there is no way to say that we want to upload data soon just not right now, without that aborting the upload. The opposite situation should be possible as well, that we tell libcurl we're ready to accept read data. Today libcurl feeds the data as soon as it is available for reading, no matter what. DOCUMENTATION * More and better FTP * Make the detection of (bad) %0d and %0a codes in FTP url parts earlier in the process to avoid doing a resolve and connect in vain. * Support GSS/Kerberos 5 for ftp file transfer. This will allow user authentication and file encryption. Possible libraries and example clients are available from MIT or Heimdal. Requsted by Markus Moeller. * REST fix for servers not behaving well on >2GB requests. This should fail if the server doesn't set the pointer to the requested index. The tricky (impossible?) part is to figure out if the server did the right thing or not. * Support the most common FTP proxies, Philip Newton provided a list allegedly from ncftp: http://curl.haxx.se/mail/archive-2003-04/0126.html * Make CURLOPT_FTPPORT support an additional port number on the IP/if/name, like "blabla:[port]" or possibly even "blabla:[portfirst]-[portsecond]". * FTP ASCII transfers do not follow RFC959. They don't convert the data accordingly. * Since USERPWD always override the user and password specified in URLs, we might need another way to specify user+password for anonymous ftp logins. * The FTP code should get a way of returning errors that is known to still have the control connection alive and sound. Currently, a returned error from within ftp-functions does not tell if the control connection is still OK to use or not. This causes libcurl to fail to re-use connections slightly too often. HTTP * Pipelining. Sending multiple requests before the previous one(s) are done. This could possibly be implemented using the multi interface to queue requests and the response data. * When doing CONNECT to a HTTP proxy, libcurl always uses HTTP/1.0. This has never been reported as causing trouble to anyone, but should be considered to use the HTTP version the user has chosen. TELNET * Reading input (to send to the remote server) on stdin is a crappy solution for library purposes. We need to invent a good way for the application to be able to provide the data to send. * Move the telnet support's network select() loop go away and merge the code into the main transfer loop. Until this is done, the multi interface won't work for telnet. SSL * Anton Fedorov's "dumpcert" patch: http://curl.haxx.se/mail/lib-2004-03/0088.html * Evaluate/apply Gertjan van Wingerde's SSL patches: http://curl.haxx.se/mail/lib-2004-03/0087.html * "Look at SSL cafile - quick traces look to me like these are done on every request as well, when they should only be necessary once per ssl context (or once per handle)". The major improvement we can rather easily do is to make sure we don't create and kill a new SSL "context" for every request, but instead make one for every connection and re-use that SSL context in the same style connections are re-used. It will make us use slightly more memory but it will libcurl do less creations and deletions of SSL contexts. * Add an interface to libcurl that enables "session IDs" to get exported/imported. Cris Bailiff said: "OpenSSL has functions which can serialise the current SSL state to a buffer of your choice, and recover/reset the state from such a buffer at a later date - this is used by mod_ssl for apache to implement and SSL session ID cache". * OpenSSL supports a callback for customised verification of the peer certificate, but this doesn't seem to be exposed in the libcurl APIs. Could it be? There's so much that could be done if it were! (brought by Chris Clark) * Make curl's SSL layer capable of using other free SSL libraries. Such as Mozilla Security Services (http://www.mozilla.org/projects/security/pki/nss/), MatrixSSL (http://www.matrixssl.org/) or yaSSL (http://yassl.com/). At least the latter two could be alternatives for those looking to reduce the footprint of libcurl built with OpenSSL or GnuTLS. LDAP * Look over the implementation. The looping will have to "go away" from the lib/ldap.c source file and get moved to the main network code so that the multi interface and friends will work for LDAP as well. NEW PROTOCOLS * TFTP - RFC1350 (protocol) and RFC3617 (URI format) Dan Fandrich: I wrote a tftp protocol module as part of the I-Boot bootloader under a BSD-style license with attribution clause http://download.intrinsyc.com/supported/tools/i-boot-lite/i-boot-lite-1.8/src/libs/net/tftp.c * RTSP - RFC2326 (protocol - very HTTP-like, also contains URL description) * SFTP/SCP/SSH (no RFCs for protocol nor URI/URL format). An implementation should most probably use an existing ssh library, such as OpenSSH. * RSYNC (no RFCs for protocol nor URI/URL format). An implementation should most probably use an existing rsync library, such as librsync. CLIENT * "curl --sync http://example.com/feed[1-100].rss" or "curl --sync http://example.net/{index,calendar,history}.html" Downloads a range or set of URLs using the remote name, but only if the remote file is newer than the local file. A Last-Modified HTTP date header should also be used to set the mod date on the downloaded file. (idea from "Brianiac") * Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. Requested by Dane Jensen and others. This is easily scripted though. * Add an option that prevents cURL from overwiting existing local files. When used, and there already is an existing file with the target file name (either -O or -o), a number should be appended (and increased if already existing). So that index.html becomes first index.html.1 and then index.html.2 etc. Jeff Pohlmeyer suggested. * "curl ftp://site.com/*.txt" * The client could be told to use maximum N simultaneous transfers and then just make sure that happens. It should of course not make more than one connection to the same remote host. This would require the client to use the multi interface. * Extending the capabilities of the multipart formposting. How about leaving the ';type=foo' syntax as it is and adding an extra tag (headers) which works like this: curl -F "coolfiles=@fil1.txt;headers=@fil1.hdr" where fil1.hdr contains extra headers like Content-Type: text/plain; charset=KOI8-R" Content-Transfer-Encoding: base64 X-User-Comment: Please don't use browser specific HTML code which should overwrite the program reasonable defaults (plain/text, 8bit...) (Idea brough to us by kromJx) * ability to specify the classic computing suffixes on the range specifications. For example, to download the first 500 Kilobytes of a file, be able to specify the following for the -r option: "-r 0-500K" or for the first 2 Megabytes of a file: "-r 0-2M". (Mark Smith suggested) * --data-encode that URL encodes the data before posting http://curl.haxx.se/mail/archive-2003-11/0091.html (Kevin Roth suggested) * Provide a way to make options bound to a specific URL among several on the command line. Possibly by letting ':' separate options between URLs, similar to this: curl --data foo --url url.com : \ --url url2.com : \ --url url3.com --data foo3 (More details: http://curl.haxx.se/mail/archive-2004-07/0133.html) The example would do a POST-GET-POST combination on a single command line. BUILD * Consider extending 'roffit' to produce decent ASCII output, and use that instead of (g)nroff when building src/hugehelp.c TEST SUITE * Make the test servers able to serve multiple running test suites. Like if two users run 'make test' at once. * If perl wasn't found by the configure script, don't attempt to run the tests but explain something nice why it doesn't. * Extend the test suite to include more protocols. The telnet could just do ftp or http operations (for which we have test servers). * Make the test suite work on more platforms. OpenBSD and Mac OS. Remove fork()s and it should become even more portable. NEXT MAJOR RELEASE * curl_easy_cleanup() returns void, but curl_multi_cleanup() returns a CURLMcode. These should be changed to be the same. * remove obsolete defines from curl/curl.h * make several functions use size_t instead of int in their APIs * remove the following functions from the public API: curl_getenv curl_mprintf (and variations) curl_strequal curl_strnequal They will instead become curlx_ - alternatives. That makes the curl app still capable of building with them from source. * Remove support for CURLOPT_FAILONERROR, it has gotten too kludgy and weird internally. Let the app judge success or not for itself. criticalmass-1.0.0.orig/curl/docs/KNOWN_BUGS0000644000175000017500000001320310265631023017730 0ustar danieldanielThese are problems known to exist at the time of this release. Feel free to join in and help us correct one or more of these! Also be sure to check the changelog of the current development status, as one or more of these problems may have been fixed since this was written! 22. Sending files to a FTP server using curl on VMS, might lead to curl complaining on "unaligned file size" on completion. The problem is related to VMS file structures and the perceived file sizes stat() returns. A possible fix would involve sending a "STRU VMS" command. http://sourceforge.net/support/tracker.php?aid=1156287 21. FTP ASCII transfers do not follow RFC959. They don't convert the data accordingly (not for sending nor for receiving). RFC 959 section 3.1.1.1 clearly describes how this should be done: The sender converts the data from an internal character representation to the standard 8-bit NVT-ASCII representation (see the Telnet specification). The receiver will convert the data from the standard form to his own internal form. 20. valgrind errors occur too often when 'make test' is used. It is because too many third-party libs and tools have problems. When curl is built without --disable-shared, the testing is done with a front-end script which makes the valgrind testing include (ba)sh as well and that often causes valgrind errors. Either we improve the valgrind error scanner a lot to better identify (lib)curl errors only, or we disable valgrind checking by default. 19. FTP 3rd party transfers with the multi interface doesn't work. Test: define CURL_MULTIEASY, rebuild curl, run test case 230 - 232. 18. test case 57 has that should be but when corrected, the test case fails! 16. FTP URLs passed to curl may contain NUL (0x00) in the RFC 1738 , , and components, encoded as "%00". The problem is that curl_unescape does not detect this, but instead returns a shortened C string. From a strict FTP protocol standpoint, NUL is a valid character within RFC 959 , so the way to handle this correctly in curl would be to use a data structure other than a plain C string, one that can handle embedded NUL characters. From a practical standpoint, most FTP servers would not meaningfully support NUL characters within RFC 959 , anyway (e.g., UNIX pathnames may not contain NUL). 15. Test case 241 fails on all systems that support IPv6 but that don't have the host name 'ip6-localhost' in /etc/hosts (or similar) since the test case uses that host name to test the IPv6 name to address resolver. 14. Test case 165 might fail on system which has libidn present, but with an old iconv version (2.1.3 is a known bad version), since it doesn't recognize the charset when named ISO8859-1. Changing the name to ISO-8859-1 makes the test pass, but instead makes it fail on Solaris hosts that use its native iconv. 13. curl version 7.12.2 fails on AIX if compiled with --enable-ares. The workaround is to combine --enable-ares with --disable-shared 12. When connecting to a SOCKS proxy, the (connect) timeout is not properly acknowledged after the actual TCP connect (during the SOCKS "negotiate" phase). Pointed out by Lucas. Fix: need to select() and timeout properly. 11. Using configure --disable-[protocol] may cause 'make test' to fail for tests using the disabled protocol(s). 10. To get HTTP Negotiate authentication to work fine, you need to provide a (fake) user name (this concerns both curl and the lib) because the code wrongly only considers authentication if there's a user name provided. Bug report #1004841. How? http://curl.haxx.se/mail/lib-2004-08/0182.html 9. --limit-rate using -d or -F does not work. This is because the limit logic is provided by the curl app in its read/write callbacks, and when doing -d/-F the callbacks aren't used! Bug report #921395. 8. Doing resumed upload over HTTP does not work with '-C -', because curl doesn't do a HEAD first to get the initial size. This needs to be done manually for HTTP PUT resume to work, and then '-C [index]'. 7. CURLOPT_USERPWD and CURLOPT_PROXYUSERPWD have no way of providing user names that contain a colon. This can't be fixed easily in a backwards compatible way without adding new options (and then, they should most probably allow setting user name and password separately). 6. libcurl ignores empty path parts in FTP URLs, whereas RFC1738 states that such parts should be sent to the server as 'CWD ' (without an argument). The only exception to this rule, is that we knowingly break this if the empty part is first in the path, as then we use the double slashes to indicate that the user wants to reach the root dir (this exception SHALL remain even when this bug is fixed). 5. libcurl doesn't treat the content-length of compressed data properly, as it seems HTTP servers send the *uncompressed* length in that header and libcurl thinks of it as the *compressed* length. Some explanations are here: http://curl.haxx.se/mail/lib-2003-06/0146.html 3. GOPHER transfers seem broken 2. If a HTTP server responds to a HEAD request and includes a body (thus violating the RFC2616), curl won't wait to read the response but just stop reading and return back. If a second request (let's assume a GET) is then immediately made to the same server again, the connection will be re-used fine of course, and the second request will be sent off but when the response is to get read, the previous response-body is what curl will read and havoc is what happens. More details on this is found in this libcurl mailing list thread: http://curl.haxx.se/mail/lib-2002-08/0000.html criticalmass-1.0.0.orig/curl/docs/curl-config.10000644000175000017500000000716510265631023020575 0ustar danieldaniel.\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at http://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" * $Id: curl-config.1,v 1.11 2005/01/25 12:06:12 bagder Exp $ .\" ************************************************************************** .\" .TH curl-config 1 "25 Jan 2004" "Curl 7.13.0" "curl-config manual" .SH NAME curl-config \- Get information about a libcurl installation .SH SYNOPSIS .B curl-config [options] .SH DESCRIPTION .B curl-config displays information about a previous curl and libcurl installation. .SH OPTIONS .IP "--ca" Displays the built-in path to the CA cert bundle this libcurl uses. .IP "--cc" Displays the compiler used to build libcurl. .IP "--cflags" Set of compiler options (CFLAGS) to use when compiling files that use libcurl. Currently that is only thw include path to the curl include files. .IP "--feature" Lists what particular main features the installed libcurl was built with. At the time of writing, this list may include SSL, KRB4 or IPv6. Do not assume any particular order. The keywords will be separated by newlines. There may be none, one or several keywords in the list. .IP "--help" Displays the available options. .IP "--libs" Shows the complete set of libs and other linker options you will need in order to link your application with libcurl. .IP "--prefix" This is the prefix used when libcurl was installed. Libcurl is then installed in $prefix/lib and its header files are installed in $prefix/include and so on. The prefix is set with "configure --prefix". .IP "--protocols" Lists what particular protocols the installed libcurl was built to support. At the time of writing, this list may include HTTP, HTTPS, FTP, FTPS, GOPHER, FILE, TELNET, LDAP, DICT. Do not assume any particular order. The protocols will be listed using uppercase and are separated by newlines. There may be none, one or several protocols in the list. (Added in 7.13.0) .IP "--version" Outputs version information about the installed libcurl. .IP "--vernum" Outputs version information about the installed libcurl, in numerical mode. This outputs the version number, in hexadecimal, with 8 bits for each part; major, minor, patch. So that libcurl 7.7.4 would appear as 070704 and libcurl 12.13.14 would appear as 0c0d0e... Note that the initial zero might be omitted. .SH "EXAMPLES" What linker options do I need when I link with libcurl? $ curl-config --libs What compiler options do I need when I compile using libcurl functions? $ curl-config --cflags How do I know if libcurl was built with SSL support? $ curl-config --feature | grep SSL What's the installed libcurl version? $ curl-config --version How do I build a single file with a one-line command? $ `curl-config --cc --cflags --libs` -o example example.c .SH "SEE ALSO" .BR curl (1) criticalmass-1.0.0.orig/curl/docs/INTERNALS0000644000175000017500000004024210265631023017556 0ustar danieldaniel Updated for curl 7.9.1 on November 2, 2001 _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| INTERNALS The project is split in two. The library and the client. The client part uses the library, but the library is designed to allow other applications to use it. The largest amount of code and complexity is in the library part. CVS === All changes to the sources are committed to the CVS repository as soon as they're somewhat verified to work. Changes shall be commited as independently as possible so that individual changes can be easier spotted and tracked afterwards. Tagging shall be used extensively, and by the time we release new archives we should tag the sources with a name similar to the released version number. Windows vs Unix =============== There are a few differences in how to program curl the unix way compared to the Windows way. The four perhaps most notable details are: 1. Different function names for socket operations. In curl, this is solved with defines and macros, so that the source looks the same at all places except for the header file that defines them. The macros in use are sclose(), sread() and swrite(). 2. Windows requires a couple of init calls for the socket stuff. Those must be made by the application that uses libcurl, in curl that means src/main.c has some code #ifdef'ed to do just that. 3. The file descriptors for network communication and file operations are not easily interchangable as in unix. We avoid this by not trying any funny tricks on file descriptors. 4. When writing data to stdout, Windows makes end-of-lines the DOS way, thus destroying binary data, although you do want that conversion if it is text coming through... (sigh) We set stdout to binary under windows Inside the source code, We make an effort to avoid '#ifdef [Your OS]'. All conditionals that deal with features *should* instead be in the format '#ifdef HAVE_THAT_WEIRD_FUNCTION'. Since Windows can't run configure scripts, we maintain two config-win32.h files (one in lib/ and one in src/) that are supposed to look exactly as a config.h file would have looked like on a Windows machine! Generally speaking: always remember that this will be compiled on dozens of operating systems. Don't walk on the edge. Library ======= There are plenty of entry points to the library, namely each publicly defined function that libcurl offers to applications. All of those functions are rather small and easy-to-follow. All the ones prefixed with 'curl_easy' are put in the lib/easy.c file. curl_global_init_() and curl_global_cleanup() should be called by the application to initialize and clean up global stuff in the library. As of today, it can handle the global SSL initing if SSL is enabled and it can init the socket layer on windows machines. libcurl itself has no "global" scope. All printf()-style functions use the supplied clones in lib/mprintf.c. This makes sure we stay absolutely platform independent. curl_easy_init() allocates an internal struct and makes some initializations. The returned handle does not reveal internals. This is the 'SessionHandle' struct which works as an "anchor" struct for all curl_easy functions. All connections performed will get connect-specific data allocated that should be used for things related to particular connections/requests. curl_easy_setopt() takes three arguments, where the option stuff must be passed in pairs: the parameter-ID and the parameter-value. The list of options is documented in the man page. This function mainly sets things in the 'SessionHandle' struct. curl_easy_perform() does a whole lot of things: It starts off in the lib/easy.c file by calling Curl_perform() and the main work then continues in lib/url.c. The flow continues with a call to Curl_connect() to connect to the remote site. o Curl_connect() ... analyzes the URL, it separates the different components and connects to the remote host. This may involve using a proxy and/or using SSL. The Curl_gethost() function in lib/hostip.c is used for looking up host names. When Curl_connect is done, we are connected to the remote site. Then it is time to tell the server to get a document/file. Curl_do() arranges this. This function makes sure there's an allocated and initiated 'connectdata' struct that is used for this particular connection only (although there may be several requests performed on the same connect). A bunch of things are inited/inherited from the SessionHandle struct. o Curl_do() Curl_do() makes sure the proper protocol-specific function is called. The functions are named after the protocols they handle. Curl_ftp(), Curl_http(), Curl_dict(), etc. They all reside in their respective files (ftp.c, http.c and dict.c). HTTPS is handled by Curl_http() and FTPS by Curl_ftp(). The protocol-specific functions of course deal with protocol-specific negotiations and setup. They have access to the Curl_sendf() (from lib/sendf.c) function to send printf-style formatted data to the remote host and when they're ready to make the actual file transfer they call the Curl_Transfer() function (in lib/transfer.c) to setup the transfer and returns. Starting in 7.9.1, if this DO function fails and the connection is being re-used, libcurl will then close this connection, setup a new connection and re-issue the DO request on that. This is because there is no way to be perfectly sure that we have discovered a dead connection before the DO function and thus we might wrongly be re-using a connection that was closed by the remote peer. o Transfer() Curl_perform() then calls Transfer() in lib/transfer.c that performs the entire file transfer. During transfer, the progress functions in lib/progress.c are called at a frequent interval (or at the user's choice, a specified callback might get called). The speedcheck functions in lib/speedcheck.c are also used to verify that the transfer is as fast as required. o Curl_done() Called after a transfer is done. This function takes care of everything that has to be done after a transfer. This function attempts to leave matters in a state so that Curl_do() should be possible to call again on the same connection (in a persistent connection case). It might also soon be closed with Curl_disconnect(). o Curl_disconnect() When doing normal connections and transfers, no one ever tries to close any connections so this is not normally called when curl_easy_perform() is used. This function is only used when we are certain that no more transfers is going to be made on the connection. It can be also closed by force, or it can be called to make sure that libcurl doesn't keep too many connections alive at the same time (there's a default amount of 5 but that can be changed with the CURLOPT_MAXCONNECTS option). This function cleans up all resources that are associated with a single connection. Curl_perform() is the function that does the main "connect - do - transfer - done" loop. It loops if there's a Location: to follow. When completed, the curl_easy_cleanup() should be called to free up used resources. It runs Curl_disconnect() on all open connectons. A quick roundup on internal function sequences (many of these call protocol-specific function-pointers): curl_connect - connects to a remote site and does initial connect fluff This also checks for an existing connection to the requested site and uses that one if it is possible. curl_do - starts a transfer curl_transfer() - transfers data curl_done - ends a transfer curl_disconnect - disconnects from a remote site. This is called when the disconnect is really requested, which doesn't necessarily have to be exactly after curl_done in case we want to keep the connection open for a while. HTTP(S) HTTP offers a lot and is the protocol in curl that uses the most lines of code. There is a special file (lib/formdata.c) that offers all the multipart post functions. base64-functions for user+password stuff (and more) is in (lib/base64.c) and all functions for parsing and sending cookies are found in (lib/cookie.c). HTTPS uses in almost every means the same procedure as HTTP, with only two exceptions: the connect procedure is different and the function used to read or write from the socket is different, although the latter fact is hidden in the source by the use of curl_read() for reading and curl_write() for writing data to the remote server. http_chunks.c contains functions that understands HTTP 1.1 chunked transfer encoding. An interesting detail with the HTTP(S) request, is the add_buffer() series of functions we use. They append data to one single buffer, and when the building is done the entire request is sent off in one single write. This is done this way to overcome problems with flawed firewalls and lame servers. FTP The Curl_if2ip() function can be used for getting the IP number of a specified network interface, and it resides in lib/if2ip.c. Curl_ftpsendf() is used for sending FTP commands to the remote server. It was made a separate function to prevent us programmers from forgetting that they must be CRLF terminated. They must also be sent in one single write() to make firewalls and similar happy. Kerberos The kerberos support is mainly in lib/krb4.c and lib/security.c. TELNET Telnet is implemented in lib/telnet.c. FILE The file:// protocol is dealt with in lib/file.c. LDAP Everything LDAP is in lib/ldap.c. GENERAL URL encoding and decoding, called escaping and unescaping in the source code, is found in lib/escape.c. While transfering data in Transfer() a few functions might get used. curl_getdate() in lib/getdate.c is for HTTP date comparisons (and more). lib/getenv.c offers curl_getenv() which is for reading environment variables in a neat platform independent way. That's used in the client, but also in lib/url.c when checking the proxy environment variables. Note that contrary to the normal unix getenv(), this returns an allocated buffer that must be free()ed after use. lib/netrc.c holds the .netrc parser lib/timeval.c features replacement functions for systems that don't have gettimeofday() and a few support functions for timeval convertions. A function named curl_version() that returns the full curl version string is found in lib/version.c. If authentication is requested but no password is given, a getpass_r() clone exists in lib/getpass.c. libcurl offers a custom callback that can be used instead of this, but it doesn't change much to us. Persistent Connections ====================== The persistent connection support in libcurl requires some considerations on how to do things inside of the library. o The 'SessionHandle' struct returned in the curl_easy_init() call must never hold connection-oriented data. It is meant to hold the root data as well as all the options etc that the library-user may choose. o The 'SessionHandle' struct holds the "connection cache" (an array of pointers to 'connectdata' structs). There's one connectdata struct allocated for each connection that libcurl knows about. o This also enables the 'curl handle' to be reused on subsequent transfers, something that was illegal before libcurl 7.7. o When we are about to perform a transfer with curl_easy_perform(), we first check for an already existing connection in the cache that we can use, otherwise we create a new one and add to the cache. If the cache is full already when we add a new connection, we close one of the present ones. We select which one to close dependent on the close policy that may have been previously set. o When the transfer operation is complete, we try to leave the connection open. Particular options may tell us not to, and protocols may signal closure on connections and then we don't keep it open of course. o When curl_easy_cleanup() is called, we close all still opened connections. You do realize that the curl handle must be re-used in order for the persistent connections to work. Library Symbols =============== All symbols used internally in libcurl must use a 'Curl_' prefix if they're used in more than a single file. Single-file symbols must be made static. Public ("exported") symbols must use a 'curl_' prefix. (There are exceptions, but they are to be changed to follow this pattern in future versions.) Return Codes and Informationals =============================== I've made things simple. Almost every function in libcurl returns a CURLcode, that must be CURLE_OK if everything is OK or otherwise a suitable error code as the curl/curl.h include file defines. The very spot that detects an error must use the Curl_failf() function to set the human-readable error description. In aiding the user to understand what's happening and to debug curl usage, we must supply a fair amount of informational messages by using the Curl_infof() function. Those messages are only displayed when the user explicitly asks for them. They are best used when revealing information that isn't otherwise obvious. Client ====== main() resides in src/main.c together with most of the client code. src/hugehelp.c is automatically generated by the mkhelp.pl perl script to display the complete "manual" and the src/urlglob.c file holds the functions used for the URL-"globbing" support. Globbing in the sense that the {} and [] expansion stuff is there. The client mostly messes around to setup its 'config' struct properly, then it calls the curl_easy_*() functions of the library and when it gets back control after the curl_easy_perform() it cleans up the library, checks status and exits. When the operation is done, the ourWriteOut() function in src/writeout.c may be called to report about the operation. That function is using the curl_easy_getinfo() function to extract useful information from the curl session. Recent versions may loop and do all this several times if many URLs were specified on the command line or config file. Memory Debugging ================ The file lib/memdebug.c contains debug-versions of a few functions. Functions such as malloc, free, fopen, fclose, etc that somehow deal with resources that might give us problems if we "leak" them. The functions in the memdebug system do nothing fancy, they do their normal function and then log information about what they just did. The logged data can then be analyzed after a complete session, memanalyze.pl is the perl script present only present in CVS (not part of the release archives) that analyzes a log file generated by the memdebug system. It detects if resources are allocated but never freed and other kinds of errors related to resource management. Use -DMALLOCDEBUG when compiling to enable memory debugging, this is also switched on by running configure with --enable-debug. Test Suite ========== Since November 2000, a test suite has evolved. It is placed in its own subdirectory directly off the root in the curl archive tree, and it contains a bunch of scripts and a lot of test case data. The main test script is runtests.pl that will invoke the two servers httpserver.pl and ftpserver.pl before all the test cases are performed. The test suite currently only runs on unix-like platforms. You'll find a complete description of the test case data files in the tests/README file. The test suite automatically detects if curl was built with the memory debugging enabled, and if it was it will detect memory leaks too. Building Releases ================= There's no magic to this. When you consider everything stable enough to be released, run the 'maketgz' script (using 'make distcheck' will give you a pretty good view on the status of the current sources). maketgz prompts for version number of the client and the library before it creates a release archive. maketgz uses 'make dist' for the actual archive building, why you need to fill in the Makefile.am files properly for which files that should be included in the release archives. criticalmass-1.0.0.orig/curl/docs/VERSIONS0000644000175000017500000000576710265631023017504 0ustar danieldaniel _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| Version Numbers and Releases Curl is not only curl. Curl is also libcurl. They're actually individually versioned, but they mostly follow each other rather closely. The version numbering is always built up using the same system: X.Y[.Z][-preN] Where X is main version number Y is release number Z is patch number N is pre-release number One of these numbers will get bumped in each new release. The numbers to the right of a bumped number will be reset to zero. If Z is zero, it may not be included in the version number. The pre release number is only included in pre releases (they're never used in public, official, releases). The main version number will get bumped when *really* big, world colliding changes are made. The release number is bumped when big changes are performed. The patch number is bumped when the changes are mere bugfixes and only minor feature changes. The pre-release is a counter, to identify which pre-release a certain release is. When reaching the end of a pre-release period, the version without the pre-release part will be released as a public release. It means that after release 1.2.3, we can release 2.0 if something really big has been made, 1.3 if not that big changes were made or 1.2.4 if mostly bugs were fixed. Before 1.2.4 is released, we might release a 1.2.4-pre1 release for the brave people to try before the actual release. Bumping, as in increasing the number with 1, is unconditionally only affecting one of the numbers (except the ones to the right of it, that may be set to zero). 1 becomes 2, 3 becomes 4, 9 becomes 10, 88 becomes 89 and 99 becomes 100. So, after 1.2.9 comes 1.2.10. After 3.99.3, 3.100 might come. All original curl source release archives are named according to the libcurl version (not according to the curl client version that, as said before, might differ). As a service to any application that might want to support new libcurl features while still being able to build with older versions, all releases have the libcurl version stored in the curl/curlver.h file using a static numbering scheme that can be used for comparison. The version number is defined as: #define LIBCURL_VERSION_NUM 0xXXYYZZ Where XX, YY and ZZ are the main version, release and patch numbers in hexadecimal. All three numbers are always represented using two digits. 1.2 would appear as "0x010200" while version 9.11.7 appears as "0x090b07". This 6-digit hexadecimal number does not show pre-release number, and it is always a greater number in a more recent release. It makes comparisons with greater than and less than work. This number is also available as three separate defines: LIBCURL_VERSION_MAJOR, LIBCURL_VERSION_MINOR and LIBCURL_VERSION_PATCH. criticalmass-1.0.0.orig/curl/docs/MANUAL0000644000175000017500000007730410265631023017205 0ustar danieldanielLATEST VERSION You always find news about what's going on as well as the latest versions from the curl web pages, located at: http://curl.haxx.se SIMPLE USAGE Get the main page from netscape's web-server: curl http://www.netscape.com/ Get the README file the user's home directory at funet's ftp-server: curl ftp://ftp.funet.fi/README Get a web page from a server using port 8000: curl http://www.weirdserver.com:8000/ Get a list of a directory of an FTP site: curl ftp://cool.haxx.se/ Get a gopher document from funet's gopher server: curl gopher://gopher.funet.fi Get the definition of curl from a dictionary: curl dict://dict.org/m:curl Fetch two documents at once: curl ftp://cool.haxx.se/ http://www.weirdserver.com:8000/ DOWNLOAD TO A FILE Get a web page and store in a local file: curl -o thatpage.html http://www.netscape.com/ Get a web page and store in a local file, make the local file get the name of the remote document (if no file name part is specified in the URL, this will fail): curl -O http://www.netscape.com/index.html Fetch two files and store them with their remote names: curl -O www.haxx.se/index.html -O curl.haxx.se/download.html USING PASSWORDS FTP To ftp files using name+passwd, include them in the URL like: curl ftp://name:passwd@machine.domain:port/full/path/to/file or specify them with the -u flag like curl -u name:passwd ftp://machine.domain:port/full/path/to/file FTPS It is just like for FTP, but you may also want to specify and use SSL-specific options for certificates etc. HTTP The HTTP URL doesn't support user and password in the URL string. Curl does support that anyway to provide a ftp-style interface and thus you can pick a file like: curl http://name:passwd@machine.domain/full/path/to/file or specify user and password separately like in curl -u name:passwd http://machine.domain/full/path/to/file HTTP offers many different methods of authentication and curl supports several: Basic, Digest, NTLM and Negotiate. Without telling which method to use, curl defaults to Basic. You can also ask curl to pick the most secure ones out of the ones that the server accepts for the given URL, by using --anyauth. NOTE! Since HTTP URLs don't support user and password, you can't use that style when using Curl via a proxy. You _must_ use the -u style fetch during such circumstances. HTTPS Probably most commonly used with private certificates, as explained below. GOPHER Curl features no password support for gopher. PROXY Get an ftp file using a proxy named my-proxy that uses port 888: curl -x my-proxy:888 ftp://ftp.leachsite.com/README Get a file from a HTTP server that requires user and password, using the same proxy as above: curl -u user:passwd -x my-proxy:888 http://www.get.this/ Some proxies require special authentication. Specify by using -U as above: curl -U user:passwd -x my-proxy:888 http://www.get.this/ See also the environment variables Curl support that offer further proxy control. RANGES With HTTP 1.1 byte-ranges were introduced. Using this, a client can request to get only one or more subparts of a specified document. Curl supports this with the -r flag. Get the first 100 bytes of a document: curl -r 0-99 http://www.get.this/ Get the last 500 bytes of a document: curl -r -500 http://www.get.this/ Curl also supports simple ranges for FTP files as well. Then you can only specify start and stop position. Get the first 100 bytes of a document using FTP: curl -r 0-99 ftp://www.get.this/README UPLOADING FTP Upload all data on stdin to a specified ftp site: curl -T - ftp://ftp.upload.com/myfile Upload data from a specified file, login with user and password: curl -T uploadfile -u user:passwd ftp://ftp.upload.com/myfile Upload a local file to the remote site, and use the local file name remote too: curl -T uploadfile -u user:passwd ftp://ftp.upload.com/ Upload a local file to get appended to the remote file using ftp: curl -T localfile -a ftp://ftp.upload.com/remotefile Curl also supports ftp upload through a proxy, but only if the proxy is configured to allow that kind of tunneling. If it does, you can run curl in a fashion similar to: curl --proxytunnel -x proxy:port -T localfile ftp.upload.com HTTP Upload all data on stdin to a specified http site: curl -T - http://www.upload.com/myfile Note that the http server must have been configured to accept PUT before this can be done successfully. For other ways to do http data upload, see the POST section below. VERBOSE / DEBUG If curl fails where it isn't supposed to, if the servers don't let you in, if you can't understand the responses: use the -v flag to get verbose fetching. Curl will output lots of info and what it sends and receives in order to let the user see all client-server interaction (but it won't show you the actual data). curl -v ftp://ftp.upload.com/ To get even more details and information on what curl does, try using the --trace or --trace-ascii options with a given file name to log to, like this: curl --trace trace.txt www.haxx.se DETAILED INFORMATION Different protocols provide different ways of getting detailed information about specific files/documents. To get curl to show detailed information about a single file, you should use -I/--head option. It displays all available info on a single file for HTTP and FTP. The HTTP information is a lot more extensive. For HTTP, you can get the header information (the same as -I would show) shown before the data by using -i/--include. Curl understands the -D/--dump-header option when getting files from both FTP and HTTP, and it will then store the headers in the specified file. Store the HTTP headers in a separate file (headers.txt in the example): curl --dump-header headers.txt curl.haxx.se Note that headers stored in a separate file can be very useful at a later time if you want curl to use cookies sent by the server. More about that in the cookies section. POST (HTTP) It's easy to post data using curl. This is done using the -d option. The post data must be urlencoded. Post a simple "name" and "phone" guestbook. curl -d "name=Rafael%20Sagula&phone=3320780" \ http://www.where.com/guest.cgi How to post a form with curl, lesson #1: Dig out all the tags in the form that you want to fill in. (There's a perl program called formfind.pl on the curl site that helps with this). If there's a "normal" post, you use -d to post. -d takes a full "post string", which is in the format =&=&... The 'variable' names are the names set with "name=" in the tags, and the data is the contents you want to fill in for the inputs. The data *must* be properly URL encoded. That means you replace space with + and that you write weird letters with %XX where XX is the hexadecimal representation of the letter's ASCII code. Example: (page located at http://www.formpost.com/getthis/
We want to enter user 'foobar' with password '12345'. To post to this, you enter a curl command line like: curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" (continues) http://www.formpost.com/getthis/post.cgi While -d uses the application/x-www-form-urlencoded mime-type, generally understood by CGI's and similar, curl also supports the more capable multipart/form-data type. This latter type supports things like file upload. -F accepts parameters like -F "name=contents". If you want the contents to be read from a file, use <@filename> as contents. When specifying a file, you can also specify the file content type by appending ';type=' to the file name. You can also post the contents of several files in one field. For example, the field name 'coolfiles' is used to send three files, with different content types using the following syntax: curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" \ http://www.post.com/postit.cgi If the content-type is not specified, curl will try to guess from the file extension (it only knows a few), or use the previously specified type (from an earlier file if several files are specified in a list) or else it will using the default type 'text/plain'. Emulate a fill-in form with -F. Let's say you fill in three fields in a form. One field is a file name which to post, one field is your name and one field is a file description. We want to post the file we have written named "cooltext.txt". To let curl do the posting of this data instead of your favourite browser, you have to read the HTML source of the form page and find the names of the input fields. In our example, the input field names are 'file', 'yourname' and 'filedescription'. curl -F "file=@cooltext.txt" -F "yourname=Daniel" \ -F "filedescription=Cool text file with cool text inside" \ http://www.post.com/postit.cgi To send two files in one post you can do it in two ways: 1. Send multiple files in a single "field" with a single field name: curl -F "pictures=@dog.gif,cat.gif" 2. Send two fields with two field names: curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif" To send a field value literally without interpreting a leading '@' or '<', or an embedded ';type=', use --form-string instead of -F. This is recommended when the value is obtained from a user or some other unpredictable source. Under these circumstances, using -F instead of --form-string would allow a user to trick curl into uploading a file. REFERRER A HTTP request has the option to include information about which address that referred to actual page. Curl allows you to specify the referrer to be used on the command line. It is especially useful to fool or trick stupid servers or CGI scripts that rely on that information being available or contain certain data. curl -e www.coolsite.com http://www.showme.com/ NOTE: The referer field is defined in the HTTP spec to be a full URL. USER AGENT A HTTP request has the option to include information about the browser that generated the request. Curl allows it to be specified on the command line. It is especially useful to fool or trick stupid servers or CGI scripts that only accept certain browsers. Example: curl -A 'Mozilla/3.0 (Win95; I)' http://www.nationsbank.com/ Other common strings: 'Mozilla/3.0 (Win95; I)' Netscape Version 3 for Windows 95 'Mozilla/3.04 (Win95; U)' Netscape Version 3 for Windows 95 'Mozilla/2.02 (OS/2; U)' Netscape Version 2 for OS/2 'Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)' NS for AIX 'Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)' NS for Linux Note that Internet Explorer tries hard to be compatible in every way: 'Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)' MSIE for W95 Mozilla is not the only possible User-Agent name: 'Konqueror/1.0' KDE File Manager desktop client 'Lynx/2.7.1 libwww-FM/2.14' Lynx command line browser COOKIES Cookies are generally used by web servers to keep state information at the client's side. The server sets cookies by sending a response line in the headers that looks like 'Set-Cookie: ' where the data part then typically contains a set of NAME=VALUE pairs (separated by semicolons ';' like "NAME1=VALUE1; NAME2=VALUE2;"). The server can also specify for what path the "cookie" should be used for (by specifying "path=value"), when the cookie should expire ("expire=DATE"), for what domain to use it ("domain=NAME") and if it should be used on secure connections only ("secure"). If you've received a page from a server that contains a header like: Set-Cookie: sessionid=boo123; path="/foo"; it means the server wants that first pair passed on when we get anything in a path beginning with "/foo". Example, get a page that wants my name passed in a cookie: curl -b "name=Daniel" www.sillypage.com Curl also has the ability to use previously received cookies in following sessions. If you get cookies from a server and store them in a file in a manner similar to: curl --dump-header headers www.example.com ... you can then in a second connect to that (or another) site, use the cookies from the 'headers' file like: curl -b headers www.example.com While saving headers to a file is a working way to store cookies, it is however error-prone and not the preferred way to do this. Instead, make curl save the incoming cookies using the well-known netscape cookie format like this: curl -c cookies.txt www.example.com Note that by specifying -b you enable the "cookie awareness" and with -L you can make curl follow a location: (which often is used in combination with cookies). So that if a site sends cookies and a location, you can use a non-existing file to trigger the cookie awareness like: curl -L -b empty.txt www.example.com The file to read cookies from must be formatted using plain HTTP headers OR as netscape's cookie file. Curl will determine what kind it is based on the file contents. In the above command, curl will parse the header and store the cookies received from www.example.com. curl will send to the server the stored cookies which match the request as it follows the location. The file "empty.txt" may be a nonexistent file. Alas, to both read and write cookies from a netscape cookie file, you can set both -b and -c to use the same file: curl -b cookies.txt -c cookies.txt www.example.com PROGRESS METER The progress meter exists to show a user that something actually is happening. The different fields in the output have the following meaning: % Total % Received % Xferd Average Speed Time Curr. Dload Upload Total Current Left Speed 0 151M 0 38608 0 0 9406 0 4:41:43 0:00:04 4:41:39 9287 From left-to-right: % - percentage completed of the whole transfer Total - total size of the whole expected transfer % - percentage completed of the download Received - currently downloaded amount of bytes % - percentage completed of the upload Xferd - currently uploaded amount of bytes Average Speed Dload - the average transfer speed of the download Average Speed Upload - the average transfer speed of the upload Time Total - expected time to complete the operation Time Current - time passed since the invoke Time Left - expected time left to completion Curr.Speed - the average transfer speed the last 5 seconds (the first 5 seconds of a transfer is based on less time of course.) The -# option will display a totally different progress bar that doesn't need much explanation! SPEED LIMIT Curl allows the user to set the transfer speed conditions that must be met to let the transfer keep going. By using the switch -y and -Y you can make curl abort transfers if the transfer speed is below the specified lowest limit for a specified time. To have curl abort the download if the speed is slower than 3000 bytes per second for 1 minute, run: curl -Y 3000 -y 60 www.far-away-site.com This can very well be used in combination with the overall time limit, so that the above operation must be completed in whole within 30 minutes: curl -m 1800 -Y 3000 -y 60 www.far-away-site.com Forcing curl not to transfer data faster than a given rate is also possible, which might be useful if you're using a limited bandwidth connection and you don't want your transfer to use all of it (sometimes referred to as "bandwidth throttle"). Make curl transfer data no faster than 10 kilobytes per second: curl --limit-rate 10K www.far-away-site.com or curl --limit-rate 10240 www.far-away-site.com Or prevent curl from uploading data faster than 1 megabyte per second: curl -T upload --limit-rate 1M ftp://uploadshereplease.com When using the --limit-rate option, the transfer rate is regulated on a per-second basis, which will cause the total transfer speed to become lower than the given number. Sometimes of course substantially lower, if your transfer stalls during periods. CONFIG FILE Curl automatically tries to read the .curlrc file (or _curlrc file on win32 systems) from the user's home dir on startup. The config file could be made up with normal command line switches, but you can also specify the long options without the dashes to make it more readable. You can separate the options and the parameter with spaces, or with = or :. Comments can be used within the file. If the first letter on a line is a '#'-letter the rest of the line is treated as a comment. If you want the parameter to contain spaces, you must inclose the entire parameter within double quotes ("). Within those quotes, you specify a quote as \". NOTE: You must specify options and their arguments on the same line. Example, set default time out and proxy in a config file: # We want a 30 minute timeout: -m 1800 # ... and we use a proxy for all accesses: proxy = proxy.our.domain.com:8080 White spaces ARE significant at the end of lines, but all white spaces leading up to the first characters of each line are ignored. Prevent curl from reading the default file by using -q as the first command line parameter, like: curl -q www.thatsite.com Force curl to get and display a local help page in case it is invoked without URL by making a config file similar to: # default url to get url = "http://help.with.curl.com/curlhelp.html" You can specify another config file to be read by using the -K/--config flag. If you set config file name to "-" it'll read the config from stdin, which can be handy if you want to hide options from being visible in process tables etc: echo "user = user:passwd" | curl -K - http://that.secret.site.com EXTRA HEADERS When using curl in your own very special programs, you may end up needing to pass on your own custom headers when getting a web page. You can do this by using the -H flag. Example, send the header "X-you-and-me: yes" to the server when getting a page: curl -H "X-you-and-me: yes" www.love.com This can also be useful in case you want curl to send a different text in a header than it normally does. The -H header you specify then replaces the header curl would normally send. If you replace an internal header with an empty one, you prevent that header from being sent. To prevent the Host: header from being used: curl -H "Host:" www.server.com FTP and PATH NAMES Do note that when getting files with the ftp:// URL, the given path is relative the directory you enter. To get the file 'README' from your home directory at your ftp site, do: curl ftp://user:passwd@my.site.com/README But if you want the README file from the root directory of that very same site, you need to specify the absolute file name: curl ftp://user:passwd@my.site.com//README (I.e with an extra slash in front of the file name.) FTP and firewalls The FTP protocol requires one of the involved parties to open a second connction as soon as data is about to get transfered. There are two ways to do this. The default way for curl is to issue the PASV command which causes the server to open another port and await another connection performed by the client. This is good if the client is behind a firewall that don't allow incoming connections. curl ftp.download.com If the server for example, is behind a firewall that don't allow connections on other ports than 21 (or if it just doesn't support the PASV command), the other way to do it is to use the PORT command and instruct the server to connect to the client on the given (as parameters to the PORT command) IP number and port. The -P flag to curl supports a few different options. Your machine may have several IP-addresses and/or network interfaces and curl allows you to select which of them to use. Default address can also be used: curl -P - ftp.download.com Download with PORT but use the IP address of our 'le0' interface (this does not work on windows): curl -P le0 ftp.download.com Download with PORT but use 192.168.0.10 as our IP address to use: curl -P 192.168.0.10 ftp.download.com NETWORK INTERFACE Get a web page from a server using a specified port for the interface: curl --interface eth0:1 http://www.netscape.com/ or curl --interface 192.168.1.10 http://www.netscape.com/ HTTPS Secure HTTP requires SSL libraries to be installed and used when curl is built. If that is done, curl is capable of retrieving and posting documents using the HTTPS protocol. Example: curl https://www.secure-site.com Curl is also capable of using your personal certificates to get/post files from sites that require valid certificates. The only drawback is that the certificate needs to be in PEM-format. PEM is a standard and open format to store certificates with, but it is not used by the most commonly used browsers (Netscape and MSIE both use the so called PKCS#12 format). If you want curl to use the certificates you use with your (favourite) browser, you may need to download/compile a converter that can convert your browser's formatted certificates to PEM formatted ones. This kind of converter is included in recent versions of OpenSSL, and for older versions Dr Stephen N. Henson has written a patch for SSLeay that adds this functionality. You can get his patch (that requires an SSLeay installation) from his site at: http://www.drh-consultancy.demon.co.uk/ Example on how to automatically retrieve a document using a certificate with a personal password: curl -E /path/to/cert.pem:password https://secure.site.com/ If you neglect to specify the password on the command line, you will be prompted for the correct password before any data can be received. Many older SSL-servers have problems with SSLv3 or TLS, that newer versions of OpenSSL etc is using, therefore it is sometimes useful to specify what SSL-version curl should use. Use -3, -2 or -1 to specify that exact SSL version to use (for SSLv3, SSLv2 or TLSv1 respectively): curl -2 https://secure.site.com/ Otherwise, curl will first attempt to use v3 and then v2. To use OpenSSL to convert your favourite browser's certificate into a PEM formatted one that curl can use, do something like this (assuming netscape, but IE is likely to work similarly): You start with hitting the 'security' menu button in netscape. Select 'certificates->yours' and then pick a certificate in the list Press the 'export' button enter your PIN code for the certs select a proper place to save it Run the 'openssl' application to convert the certificate. If you cd to the openssl installation, you can do it like: # ./apps/openssl pkcs12 -in [file you saved] -clcerts -out [PEMfile] RESUMING FILE TRANSFERS To continue a file transfer where it was previously aborted, curl supports resume on http(s) downloads as well as ftp uploads and downloads. Continue downloading a document: curl -C - -o file ftp://ftp.server.com/path/file Continue uploading a document(*1): curl -C - -T file ftp://ftp.server.com/path/file Continue downloading a document from a web server(*2): curl -C - -o file http://www.server.com/ (*1) = This requires that the ftp server supports the non-standard command SIZE. If it doesn't, curl will say so. (*2) = This requires that the web server supports at least HTTP/1.1. If it doesn't, curl will say so. TIME CONDITIONS HTTP allows a client to specify a time condition for the document it requests. It is If-Modified-Since or If-Unmodified-Since. Curl allow you to specify them with the -z/--time-cond flag. For example, you can easily make a download that only gets performed if the remote file is newer than a local copy. It would be made like: curl -z local.html http://remote.server.com/remote.html Or you can download a file only if the local file is newer than the remote one. Do this by prepending the date string with a '-', as in: curl -z -local.html http://remote.server.com/remote.html You can specify a "free text" date as condition. Tell curl to only download the file if it was updated since yesterday: curl -z yesterday http://remote.server.com/remote.html Curl will then accept a wide range of date formats. You always make the date check the other way around by prepending it with a dash '-'. DICT For fun try curl dict://dict.org/m:curl curl dict://dict.org/d:heisenbug:jargon curl dict://dict.org/d:daniel:web1913 Aliases for 'm' are 'match' and 'find', and aliases for 'd' are 'define' and 'lookup'. For example, curl dict://dict.org/find:curl Commands that break the URL description of the RFC (but not the DICT protocol) are curl dict://dict.org/show:db curl dict://dict.org/show:strat Authentication is still missing (but this is not required by the RFC) LDAP If you have installed the OpenLDAP library, curl can take advantage of it and offer ldap:// support. LDAP is a complex thing and writing an LDAP query is not an easy task. I do advice you to dig up the syntax description for that elsewhere. Two places that might suit you are: Netscape's "Netscape Directory SDK 3.0 for C Programmer's Guide Chapter 10: Working with LDAP URLs": http://developer.netscape.com/docs/manuals/dirsdk/csdk30/url.htm RFC 2255, "The LDAP URL Format" http://www.rfc-editor.org/rfc/rfc2255.txt To show you an example, this is now I can get all people from my local LDAP server that has a certain sub-domain in their email address: curl -B "ldap://ldap.frontec.se/o=frontec??sub?mail=*sth.frontec.se" If I want the same info in HTML format, I can get it by not using the -B (enforce ASCII) flag. ENVIRONMENT VARIABLES Curl reads and understands the following environment variables: http_proxy, HTTPS_PROXY, FTP_PROXY, GOPHER_PROXY They should be set for protocol-specific proxies. General proxy should be set with ALL_PROXY A comma-separated list of host names that shouldn't go through any proxy is set in (only an asterisk, '*' matches all hosts) NO_PROXY If a tail substring of the domain-path for a host matches one of these strings, transactions with that node will not be proxied. The usage of the -x/--proxy flag overrides the environment variables. NETRC Unix introduced the .netrc concept a long time ago. It is a way for a user to specify name and password for commonly visited ftp sites in a file so that you don't have to type them in each time you visit those sites. You realize this is a big security risk if someone else gets hold of your passwords, so therefore most unix programs won't read this file unless it is only readable by yourself (curl doesn't care though). Curl supports .netrc files if told so (using the -n/--netrc and --netrc-optional options). This is not restricted to only ftp, but curl can use it for all protocols where authentication is used. A very simple .netrc file could look something like: machine curl.haxx.se login iamdaniel password mysecret CUSTOM OUTPUT To better allow script programmers to get to know about the progress of curl, the -w/--write-out option was introduced. Using this, you can specify what information from the previous transfer you want to extract. To display the amount of bytes downloaded together with some text and an ending newline: curl -w 'We downloaded %{size_download} bytes\n' www.download.com KERBEROS4 FTP TRANSFER Curl supports kerberos4 for FTP transfers. You need the kerberos package installed and used at curl build time for it to be used. First, get the krb-ticket the normal way, like with the kauth tool. Then use curl in way similar to: curl --krb4 private ftp://krb4site.com -u username:fakepwd There's no use for a password on the -u switch, but a blank one will make curl ask for one and you already entered the real password to kauth. TELNET The curl telnet support is basic and very easy to use. Curl passes all data passed to it on stdin to the remote server. Connect to a remote telnet server using a command line similar to: curl telnet://remote.server.com And enter the data to pass to the server on stdin. The result will be sent to stdout or to the file you specify with -o. You might want the -N/--no-buffer option to switch off the buffered output for slow connections or similar. Pass options to the telnet protocol negotiation, by using the -t option. To tell the server we use a vt100 terminal, try something like: curl -tTTYPE=vt100 telnet://remote.server.com Other interesting options for it -t include: - XDISPLOC= Sets the X display location. - NEW_ENV= Sets an environment variable. NOTE: the telnet protocol does not specify any way to login with a specified user and password so curl can't do that automatically. To do that, you need to track when the login prompt is received and send the username and password accordingly. PERSISTENT CONNECTIONS Specifying multiple files on a single command line will make curl transfer all of them, one after the other in the specified order. libcurl will attempt to use persistent connections for the transfers so that the second transfer to the same host can use the same connection that was already initiated and was left open in the previous transfer. This greatly decreases connection time for all but the first transfer and it makes a far better use of the network. Note that curl cannot use persistent connections for transfers that are used in subsequence curl invokes. Try to stuff as many URLs as possible on the same command line if they are using the same host, as that'll make the transfers faster. If you use a http proxy for file transfers, practically all transfers will be persistent. MAILING LISTS For your convenience, we have several open mailing lists to discuss curl, its development and things relevant to this. Get all info at http://curl.haxx.se/mail/. Some of the lists available are: curl-users Users of the command line tool. How to use it, what doesn't work, new features, related tools, questions, news, installations, compilations, running, porting etc. curl-library Developers using or developing libcurl. Bugs, extensions, improvements. curl-announce Low-traffic. Only receives announcements of new public versions. At worst, that makes something like one or two mails per month, but usually only one mail every second month. curl-and-php Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP with a curl angle. curl-and-python Python hackers using curl with or without the python binding pycurl. Please direct curl questions, feature requests and trouble reports to one of these mailing lists instead of mailing any individual. criticalmass-1.0.0.orig/curl/docs/THANKS0000644000175000017500000001540010265631023017205 0ustar danieldaniel This project has been alive for many years. Countless people have provided feedback that have improved curl. Here follows a list of people that have contributed (a-z order). If you have contributed but are missing here, please let us know! Alan Pinstein, Albert Chin-A-Young, Albert Choy, Aleksandar Milivojevic, Alex aka WindEagle, Alex Neblett, Alex Suykov, Alexander Kourakos, Alexander Krasnostavsky, Alexander Zhuravlev, Alexis Carvalho, Andi Jahja, Andreas Damm, Andreas Olsson, Andreas Rieke, Andrew Francis, Andrew Fuller, Andrs Garca, Andy Cedilnik, Andy Serpa, Angus Mackay, Antoine Calando, Anton Kalmykov, Arkadiusz Miskiewicz, Augustus Saunders, Avery Fay, Ben Greear, Benjamin Gerard, Bertrand Demiddelaer, Bjorn Reese, Bjrn Stenberg, Bob Schader, Brad Burdick, Brent Beardsley, Brian Akins, Brian R Duffy, Bruce Mitchener, Bryan Henderson, Bryan Henderson , Bryan Kemp, Caolan McNamara, Casey O'Donnell, Chih-Chung Chang, Chris "Bob Bob", Chris Combes, Chris Gaukroger, Chris Maltby, Christian Kurz, Christian Robottom Reis, Christophe Demory, Christophe Legry, Christopher R. Palmer, Clarence Gardner, Clifford Wolf, Cody Jones, Colin Watson, Colm Buckley, Cory Nelson, Craig Davison, Craig Markwardt, Cris Bailiff, Cyrill Osterwalder, Damien Adant, Dan Becker, Dan C, Dan Fandrich, Dan Torop, Dan Zitter, Daniel at touchtunes, Daniel Stenberg, Dave Dribin, Dave Halbakken, Dave Hamilton, Dave May, David Byron, David Cohen, David Eriksson, David Houlder, David Hull, David J Meyer, David James, David Kimdon, David LeBlanc, David Odin, David Phillips, David Shaw, David Tarendash, David Thiel, Detlef Schmier, Diego Casorran, Dimitris Sarris, Dinar, Dirk Eddelbuettel, Dirk Manske, Dolbneff A.V, Domenico Andreoli, Dominick Meglio, Doug Kaufman, Doug Porter, Douglas E. Wegscheid, Douglas R. Horner, Dustin Boswell, Dylan Ellicott, Dylan Salisbury, Early Ehlinger, Edin Kadribasic, Ellis Pritchard, Emiliano Ida, Enrico Scholz, Enrik Berkhan, Eric Lavigne, Eric Melville, Eric Rautman, Eric Thelin, Eric Vergnaud, Eric Young, Erick Nuwendam, Erwan Legrand, Erwin Authried, Evan Jordan, Fabrizio Ammollo, Fedor Karpelevitch, Felix von Leitner, Florian Schoppmann, Forrest Cahoon, Frank Keeney, Frank Ticheler, Fred New, Fred Noz, Frederic Lepied, Gautam Mani, Gaz Iqbal, Georg Horn, Georg Huettenegger, Gerd v. Egidy, Gerhard Herre, Giaslas Georgios, Gilad, Gilbert Ramirez Jr., Gisle Vanem, Giuseppe Attardi, Giuseppe D'Ambrosio, Glen Nakamura, Glen Scott, Greg Hewgill, Greg Onufer, Grigory Entin, Guenole Bescon, Guillaume Arluison, Gustaf Hui, Gwenole Beauchesne, Gtz Babin-Ebell, Gnter Knauf, Hamish Mackenzie, Hanno Kranzhoff, Hans Steegers, Hardeep Singh, Harshal Pradhan, Heikki Korpela, Henrik Storner, Hzhijun, Ian Ford, Ian Gulliver, Ian Wilkes, Ignacio Vazquez-Abrams, Ilguiz Latypov, Ingo Ralf Blum, Ingo Wilken, Jacky Lam, Jacob Meuser, James Bursa, James Clancy, James Cone, James Gallagher, James Griffiths, James MacMillan, Jamie Lokier, Jamie Wilkinson, Jason S. Priebe, Jean-Claude Chauve, Jean-Louis Lemaire, Jean-Marc Ranger, Jean-Philippe Barrette-LaPierre, Jeff Lawson, Jeff Phillips, Jeffrey Pohlmeyer, Jeremy Friesner, Jesper Jensen, Jesse Noller, Jim Drash, Joe Halpin, Joel Chen, Johan Anderson, Johan Nilsson, John Crow, John Janssen, John Lask, John McGowan, Jon Travis, Jon Turner, Jonas Forsman, Jonatan Lander, Jonathan Hseu, Jongki Suwandi, Josh Kapell, Juan F. Codagnone, Juan Ignacio Hervs, Juergen Wilke, Jukka Pihl, Julian Noble, Jun-ichiro itojun Hagino, Jurij Smakov, Jrg Mueller-Tolk, Jrn Hartroth, Kai Sommerfeld, Kai-Uwe Rommel, Kang-Jin Lee, Karol Pietrzak, Keith MacDonald, Keith McGuigan, Ken Hirsch, Ken Rastatter, Kevin Fisk, Kevin Roth, Kimmo Kinnunen, Kjell Ericson, Kjetil Jacobsen, Klevtsov Vadim, Kris Kennaway, Krishnendu Majumdar, Kristian Khntopp, Kyle Sallee, Lachlan O'Dea, Larry Campbell, Larry Fahnoe, Lars Gustafsson, Lars J. Aas, Lars Nilsson, Lars Torben Wilson, Legoff Vincent, Lehel Bernadt, Len Krause, Linas Vepstas, Ling Thio, Linus Nielsen Feltzing, Loic Dachary, Loren Kirkby, Luca Altea, Luca Alteas, Lucas Adamski, Lukasz Czekierda, Luke Call, Luong Dinh Dung, Maciej W. Rozycki, Marc Boucher, Marcelo Juchem , Marcin Konicki, Marco G. Salvagno, Marcus Webster, Mark Butler, Markus Moeller, Markus Oberhumer, Martijn Koster, Martin C. Martin, Martin Hedenfalk, Marty Kuhrt, Maruko, Massimiliano Ziccardi, Mathias Axelsson, Mats Lidell, Matt Veenstra, Matthew Blain, Matthew Clarke, Maurice Barnum, Mekonikum, Mettgut Jamalla, Michael Benedict, Michael Curtis, Michael Mealling, Michal Bonino, Mihai Ionescu, Mike Bytnar, Mike Dobbs, Miklos Nemeth, Mitz Wark, Mohamed Lrhazi, Mohun Biswas, Moonesamy, Nathan O'Sullivan, Naveen Noel, Neil Dunbar, Neil Spring, Nic Roets, Nick Gimbrone, Nick Humfrey, Nico Baggus, Nicolas Berloquin, Nicolas Croiset, Niels van Tongeren, Nikita Schmidt, nk, Nodak Sodak, Oren Tirosh, P R Schaffner, Patrick Bihan-Faou, Patrick Smith, Paul Harrington, Paul Marquis, Paul Moore, Paul Nolan, Pavel Cenek, Pavel Orehov, Pawel A. Gajda, Pedro Neves, Pete Su, Peter Bray, Peter Forret, Peter Pentchev, Peter Sylvester, Peter Todd, Peter Verhas, Peter Wullinger, Phil Karn, Philip Gladstone, Philippe Hameau, Philippe Raoult, Pierre, Puneet Pawaia, Rafael Sagula, Ralph Beckmann, Ralph Mitchell, Ramana Mokkapati, Randy McMurchy, Reinout van Schouwen, Renaud Chaillat, Renaud Duhaut, Rene Bernhardt, Rene Rebe, Ricardo Cadime, Rich Gray, Richard Archer, Richard Atterer, Richard Bramante, Richard Cooper, Richard Gorton, Richard Prescott, Rick Jones, Rick Richardson, Rob Stanzel, Robert D. Young, Robert Olson, Robert Weaver, Robin Kay, Rodney Simmons, Roland Krikava, Roland Zimmermann, Roman Koifman, Ron Zapp, Rosimildo da Silva, Roy Shan, Rune Kleveland, Ryan Nelson, S. Moonesamy, Salvador Dvila, Salvatore Sorrentino, Sampo Kellomaki, Samuel Daz Garca, Samuel Listopad, Sander Gates, Saul good, Sebastien Willemijns, Sergio Ballestrero, Seshubabu Pasam, Shard, Shawn Poulson, Siddhartha Prakash Jain, Simon Dick, Simon Liu, Spiridonoff A.V, Stadler Stephan, Stefan Ulrich, Stephan Bergmann, Stephen Kick, Stephen More, Sterling Hughes, Steve Green, Steve Lhomme, Steve Marx, Steve Oliphant, Steven Bazyl, Steven G. Johnson, Stoned Elipot, Sven Neuhaus, swalkaus at yahoo.com, Sbastien Willemijns, T. Bharath, T. Yamada, Thomas Schwinge, Thomas Tonino, Tim Baker, Tim Bartley, Tim Costello, Tim Sneddon, Toby Peterson, Tom Benoist, Tom Lee, Tom Mattison, Tom Moers, Tom Zerucha, Tomas Pospisek, Tomas Szepe, Tomasz Lacki, Tommy Tam, Ton Voon, Tor Arntsen, Torsten Foertsch, Toshiyuki Maezawa, Traian Nicolescu, Troels Walsted Hansen, Troy Engel, Ulrich Zadow, Vincent Bronner, Vincent Penquerc'h, Vincent Sanders, Vojtech Janota, Vojtech Minarik, Walter J. Mack, Wayne Haigh, Werner Koch, Wesley Laxton, Wez Furlong, Wilfredo Sanchez, Wojciech Zwiefka, Yarram Sunil, Zvi Har'El criticalmass-1.0.0.orig/curl/docs/FEATURES0000644000175000017500000000670410265631023017442 0ustar danieldaniel _ _ ____ _ ___| | | | _ \| | / __| | | | |_) | | | (__| |_| | _ <| |___ \___|\___/|_| \_\_____| FEATURES curl tool - config file support - multiple URLs in a single command line - range "globbing" support: [0-13], {one,two,three} - multiple file upload on a single command line - custom maximum transfer rate - redirectable stderr libcurl supports - full URL syntax with no length limit - custom maximum download time - custom least download speed acceptable - custom output result after completion - guesses protocol from host name unless specified - uses .netrc - progress bar/time specs while downloading - "standard" proxy environment variables support - compiles on win32 (reported builds on 40+ operating systems) - selectable network interface for outgoing traffic - IPv6 support on unix and Windows - persistant connections - socks5 support - supports user name + password in proxy environment variables - operations through proxy "tunnel" (using CONNECT) - supports large files (>2GB and >4GB) both upload/download - replacable memory functions (malloc, free, realloc, etc) - asynchronous name resolving (*6) HTTP - HTTP/1.1 compliant (optionally uses 1.0) - GET - PUT - HEAD - POST - multipart formpost (RFC1867-style) - authentication: Basic, Digest, NTLM(*1), GSS-Negotiate/Negotiate(*3) and SPNEGO (*4) to server and proxy - resume (both GET and PUT) - follow redirects - maximum amount of redirects to follow - custom HTTP request - cookie get/send fully parsed - reads/writes the netscape cookie file format - custom headers (replace/remove internally generated headers) - custom user-agent string - custom referer string - range - proxy authentication - time conditions - via http-proxy - retrieve file modification date - Content-Encoding support for deflate and gzip - "Transfer-Encoding: chunked" support for "uploads" HTTPS (*1) - (all the HTTP features) - using certificates - verify server certificate - via http-proxy - select desired encryption - force usage of a specific SSL version (SSLv2, SSLv3 or TLSv1) FTP - download - authentication - kerberos4 (*5) - active/passive using PORT, EPRT, PASV or EPSV - single file size information (compare to HTTP HEAD) - 'type=' URL support - dir listing - dir listing names-only - upload - upload append - upload via http-proxy as HTTP PUT - download resume - upload resume - custom ftp commands (before and/or after the transfer) - simple "range" support - via http-proxy - all operations can be tunneled through a http-proxy - customizable to retrieve file modification date - third party transfers - no dir depth limit FTPS (*1) - explicit ftps:// support that use SSL on both connections - implicit "AUTH TSL" and "AUTH SSL" usage to "upgrade" plain ftp:// connection to use SSL for both or one of the connections TELNET - connection negotiation - custom telnet options - stdin/stdout I/O LDAP (*2) - full LDAP URL support DICT - extended DICT URL support GOPHER - GET - via http-proxy FILE - URL support - "uploads" - resume FOOTNOTES ========= *1 = requires OpenSSL *2 = requires OpenLDAP *3 = requires a GSSAPI-compliant library, such as Heimdal or similar. *4 = requires FBopenssl *5 = requires a krb4 library, such as the MIT one or similar. *6 = requires c-ares criticalmass-1.0.0.orig/curl/docs/SSLCERTS0000644000175000017500000001026410265631023017462 0ustar danieldaniel Peer SSL Certificate Verification ================================= libcurl performs peer SSL certificate verification by default. This is done by installing a default CA cert bundle on 'make install' (or similar), that CA bundle package is used by default on operations against SSL servers. If you communicate with HTTPS or FTPS servers using certificates that are signed by CAs present in the bundle, you can be sure that the remote server really is the one it claims to be. If the remote server uses a self-signed certificate, if you don't install curl's CA cert bundle, if the server uses a certificate signed by a CA that isn't included in the bundle or if the remote host is an impostor impersonating your favorite site, and you want to transfer files from this server, do one of the following: 1. Tell libcurl to *not* verify the peer. With libcurl you disable with with curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE); With the curl command line tool, you disable this with -k/--insecure. 2. Get a CA certificate that can verify the remote server and use the proper option to point out this CA cert for verification when connecting. For libcurl hackers: curl_easy_setopt(curl, CURLOPT_CAPATH, capath); With the curl command line tool: --cacert [file] 3. Add the CA cert for your server to the existing default CA cert bundle. The default path of the CA bundle installed with the curl package is: /usr/local/share/curl/curl-ca-bundle.crt, which can be changed by running configure with the --with-ca-bundle option pointing out the path of your choice. To do this, you need to get the CA cert for your server in PEM format and then append that to your CA cert bundle. If you use Internet Explorer, this is one way to get extract the CA cert for a particular server: o View the certificate by double-clicking the padlock o Find out where the CA certificate is kept (Certificate> Authority Information Access>URL) o Get a copy of the crt file using curl o Convert it from crt to PEM using the openssl tool: openssl x509 -inform DES -in yourdownloaded.crt \ -out outcert.pem -text o Append the 'outcert.pem' to the CA cert bundle or use it stand-alone as described below. (Thanks to Frankie V for this description) If you use the 'openssl' tool, this is one way to get extract the CA cert for a particular server: o openssl s_client -connect xxxxx.com:443 |tee logfile o type "QUIT", followed by the "ENTER" key o The certificate will have "BEGIN CERTIFICATE" and "END CERTIFICATE" markers. o If you want to see the data in the certificate, you can do: "openssl x509 -inform PEM -in certfile -text -out certdata" where certfile is the cert you extracted from logfile. Look in certdata. o If you want to trust the certificate, you can append it to your cert_bundle or use it stand-alone as described. Just remember that the security is no better than the way you obtained the certificate. (Thanks to Doug Kaufman for this description) 4. If you're using the curl command line tool, you can specify your own CA cert path by setting the environment variable CURL_CA_BUNDLE to the path of your choice. If you're using the curl command line tool on Windows, curl will search for a CA cert file named "curl-ca-bundle.crt" in these directories and in this order: 1. application's directory 2. current working directory 3. Windows System directory (e.g. C:\windows\system32) 4. Windows Directory (e.g. C:\windows) 5. all directories along %PATH% 5. Get a better/different/newer CA cert bundle! One option is to extract the one a recent Mozilla browser uses, by following the instruction found here: http://curl.haxx.se/docs/caextract.html Neglecting to use one of the above methods when dealing with a server using a certificate that isn't signed by one of the certificates in the installed CA cert bundle, will cause SSL to report an error ("certificate verify failed") during the handshake and SSL will then refuse further communication with that server. criticalmass-1.0.0.orig/curl/docs/libcurl/0002755000175000017500000000000010355431304017730 5ustar danieldanielcriticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_getinfo.html0000644000175000017500000002601110265631023024315 0ustar danieldaniel curl_easy_getinfo man page

NAME

curl_easy_getinfo - extract information from a curl handle

SYNOPSIS

#include <curl/curl.h>

CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );

DESCRIPTION

Request internal information from the curl session with this function. The third argument MUST be a pointer to a long, a pointer to a char *, a pointer to a struct curl_slist * or a pointer to a double (as this documentation describes further down). The data pointed-to will be filled in accordingly and can be relied upon only if the function returns CURLE_OK. This function is intended to get used AFTER a performed transfer, all results from this function are undefined until the transfer is completed.

You should not free the memory returned by this function unless it is explictly mentioned below.

AVAILABLE INFORMATION

The following information can be extracted:

CURLINFO_EFFECTIVE_URL

Pass a pointer to a 'char *' to receive the last used effective URL.

CURLINFO_RESPONSE_CODE

Pass a pointer to a long to receive the last received HTTP or FTP code. This option was known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. This will be zero if no server response code has been received. Note that a proxy's CONNECT response should be read with CURLINFO_HTTP_CONNECTCODE and not this.

CURLINFO_HTTP_CONNECTCODE

Pass a pointer to a long to receive the last received proxy response code to a CONNECT request.

CURLINFO_FILETIME

Pass a pointer to a long to receive the remote time of the retrieved document. If you get -1, it can be because of many reasons (unknown, the server hides it or the server doesn't support the command that tells document time etc) and the time of the document is unknown. Note that you must tell the server to collect this information before the transfer is made, by using the CURLOPT_FILETIME option to curl_easy_setopt(3). (Added in 7.5)

CURLINFO_TOTAL_TIME

Pass a pointer to a double to receive the total transaction time in seconds for the previous transfer. This time does not include the connect time, so if you want the complete operation time, you should add the CURLINFO_CONNECT_TIME.

CURLINFO_NAMELOOKUP_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the name resolving was completed.

CURLINFO_CONNECT_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the connect to the remote host (or proxy) was completed.

CURLINFO_PRETRANSFER_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved.

CURLINFO_STARTTRANSFER_TIME

Pass a pointer to a double to receive the time, in seconds, it took from the start until the first byte is just about to be transferred. This includes CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate the result.

CURLINFO_REDIRECT_TIME

Pass a pointer to a double to receive the total time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. CURLINFO_REDIRECT_TIME contains the complete execution time for multiple redirections. (Added in 7.9.7)

CURLINFO_REDIRECT_COUNT

Pass a pointer to a long to receive the total number of redirections that were actually followed. (Added in 7.9.7)

CURLINFO_SIZE_UPLOAD

Pass a pointer to a double to receive the total amount of bytes that were uploaded.

CURLINFO_SIZE_DOWNLOAD

Pass a pointer to a double to receive the total amount of bytes that were downloaded. The amount is only for the latest transfer and will be reset again for each new transfer.

CURLINFO_SPEED_DOWNLOAD

Pass a pointer to a double to receive the average download speed that curl measured for the complete download.

CURLINFO_SPEED_UPLOAD

Pass a pointer to a double to receive the average upload speed that curl measured for the complete upload.

CURLINFO_HEADER_SIZE

Pass a pointer to a long to receive the total size of all the headers received.

CURLINFO_REQUEST_SIZE

Pass a pointer to a long to receive the total size of the issued requests. This is so far only for HTTP requests. Note that this may be more than one request if FOLLOWLOCATION is true.

CURLINFO_SSL_VERIFYRESULT

Pass a pointer to a long to receive the result of the certification verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to curl_easy_setopt(3)).

CURLINFO_SSL_ENGINES

Pass the address of a 'struct curl_slist *' to receive a linked-list of OpenSSL crypto-engines supported. Note that engines are normally implemented in separate dynamic libraries. Hence not all the returned engines may be available at run-time. NOTE: you must call curl_slist_free_all(3) on the list pointer once you're done with it, as libcurl will not free the data for you. (Added in 7.12.3)

CURLINFO_CONTENT_LENGTH_DOWNLOAD

Pass a pointer to a double to receive the content-length of the download. This is the value read from the Content-Length: field.

CURLINFO_CONTENT_LENGTH_UPLOAD

Pass a pointer to a double to receive the specified size of the upload.

CURLINFO_CONTENT_TYPE

Pass a pointer to a 'char *' to receive the content-type of the downloaded object. This is the value read from the Content-Type: field. If you get NULL, it means that the server didn't send a valid Content-Type header or that the protocol used doesn't support this.

CURLINFO_PRIVATE

Pass a pointer to a 'char *' to receive the pointer to the private data associated with the curl handle (set with the CURLOPT_PRIVATE option to curl_easy_setopt(3)). (Added in 7.10.3)

CURLINFO_HTTPAUTH_AVAIL

Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available. The meaning of the bits is explained in the CURLOPT_HTTPAUTH option for curl_easy_setopt(3). (Added in 7.10.8)

CURLINFO_PROXYAUTH_AVAIL

Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available for your proxy authentication. (Added in 7.10.8)

CURLINFO_OS_ERRNO

Pass a pointer to a long to receive the errno variable from a connect failure. (Added in 7.12.2)

CURLINFO_NUM_CONNECTS

Pass a pointer to a long to receive how many new connections libcurl had to create to achieve the previous transfer (only the successful connects are counted). Combined with CURLINFO_REDIRECT_COUNT you are able to know how many times libcurl successfully reused existing connection(s) or not. See the Connection Options of curl_easy_setopt(3) to see how libcurl tries to make persistent connections to save time. (Added in 7.12.3)

RETURN VALUE

If the operation was successful, CURLE_OK is returned. Otherwise an appropriate error code will be returned.

SEE ALSO

curl_easy_setopt (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-tutorial.30000644000175000017500000015143710265631023023322 0ustar danieldaniel.\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at http://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" * $Id: libcurl-tutorial.3,v 1.7 2005/05/09 13:13:38 bagder Exp $ .\" ************************************************************************** .\" .TH libcurl-tutorial 3 "9 May 2005" "libcurl" "libcurl programming" .SH NAME libcurl-tutorial \- libcurl programming tutorial .SH "Objective" This document attempts to describe the general principles and some basic approaches to consider when programming with libcurl. The text will focus mainly on the C interface but might apply fairly well on other interfaces as well as they usually follow the C one pretty closely. This document will refer to 'the user' as the person writing the source code that uses libcurl. That would probably be you or someone in your position. What will be generally referred to as 'the program' will be the collected source code that you write that is using libcurl for transfers. The program is outside libcurl and libcurl is outside of the program. To get the more details on all options and functions described herein, please refer to their respective man pages. .SH "Building" There are many different ways to build C programs. This chapter will assume a unix-style build process. If you use a different build system, you can still read this to get general information that may apply to your environment as well. .IP "Compiling the Program" Your compiler needs to know where the libcurl headers are located. Therefore you must set your compiler's include path to point to the directory where you installed them. The 'curl-config'[3] tool can be used to get this information: $ curl-config --cflags .IP "Linking the Program with libcurl" When having compiled the program, you need to link your object files to create a single executable. For that to succeed, you need to link with libcurl and possibly also with other libraries that libcurl itself depends on. Like the OpenSSL libraries, but even some standard OS libraries may be needed on the command line. To figure out which flags to use, once again the 'curl-config' tool comes to the rescue: $ curl-config --libs .IP "SSL or Not" libcurl can be built and customized in many ways. One of the things that varies from different libraries and builds is the support for SSL-based transfers, like HTTPS and FTPS. If OpenSSL was detected properly at build-time, libcurl will be built with SSL support. To figure out if an installed libcurl has been built with SSL support enabled, use 'curl-config' like this: $ curl-config --feature And if SSL is supported, the keyword 'SSL' will be written to stdout, possibly together with a few other features that can be on and off on different libcurls. See also the "Features libcurl Provides" further down. .IP "autoconf macro" When you write your configure script to detect libcurl and setup variables accordingly, we offer a prewritten macro that probably does everything you need in this area. See docs/libcurl/libcurl.m4 file - it includes docs on how to use it. .SH "Portable Code in a Portable World" The people behind libcurl have put a considerable effort to make libcurl work on a large amount of different operating systems and environments. You program libcurl the same way on all platforms that libcurl runs on. There are only very few minor considerations that differs. If you just make sure to write your code portable enough, you may very well create yourself a very portable program. libcurl shouldn't stop you from that. .SH "Global Preparation" The program must initialize some of the libcurl functionality globally. That means it should be done exactly once, no matter how many times you intend to use the library. Once for your program's entire life time. This is done using curl_global_init() and it takes one parameter which is a bit pattern that tells libcurl what to initialize. Using \fICURL_GLOBAL_ALL\fP will make it initialize all known internal sub modules, and might be a good default option. The current two bits that are specified are: .RS .IP "CURL_GLOBAL_WIN32" which only does anything on Windows machines. When used on a Windows machine, it'll make libcurl initialize the win32 socket stuff. Without having that initialized properly, your program cannot use sockets properly. You should only do this once for each application, so if your program already does this or of another library in use does it, you should not tell libcurl to do this as well. .IP CURL_GLOBAL_SSL which only does anything on libcurls compiled and built SSL-enabled. On these systems, this will make libcurl initialize OpenSSL properly for this application. This is only needed to do once for each application so if your program or another library already does this, this bit should not be needed. .RE libcurl has a default protection mechanism that detects if \fIcurl_global_init(3)\fP hasn't been called by the time \fIcurl_easy_perform(3)\fP is called and if that is the case, libcurl runs the function itself with a guessed bit pattern. Please note that depending solely on this is not considered nice nor very good. When the program no longer uses libcurl, it should call \fIcurl_global_cleanup(3)\fP, which is the opposite of the init call. It will then do the reversed operations to cleanup the resources the \fIcurl_global_init(3)\fP call initialized. Repeated calls to \fIcurl_global_init(3)\fP and \fIcurl_global_cleanup(3)\fP should be avoided. They should only be called once each. .SH "Features libcurl Provides" It is considered best-practice to determine libcurl features run-time rather than build-time (if possible of course). By calling curl_version_info() and checking tout he details of the returned struct, your program can figure out exactly what the currently running libcurl supports. .SH "Handle the Easy libcurl" libcurl first introduced the so called easy interface. All operations in the easy interface are prefixed with 'curl_easy'. Recent libcurl versions also offer the multi interface. More about that interface, what it is targeted for and how to use it is detailed in a separate chapter further down. You still need to understand the easy interface first, so please continue reading for better understanding. To use the easy interface, you must first create yourself an easy handle. You need one handle for each easy session you want to perform. Basically, you should use one handle for every thread you plan to use for transferring. You must never share the same handle in multiple threads. Get an easy handle with easyhandle = curl_easy_init(); It returns an easy handle. Using that you proceed to the next step: setting up your preferred actions. A handle is just a logic entity for the upcoming transfer or series of transfers. You set properties and options for this handle using \fIcurl_easy_setopt(3)\fP. They control how the subsequent transfer or transfers will be made. Options remain set in the handle until set again to something different. Alas, multiple requests using the same handle will use the same options. Many of the options you set in libcurl are "strings", pointers to data terminated with a zero byte. Keep in mind that when you set strings with \fIcurl_easy_setopt(3)\fP, libcurl will not copy the data. It will merely point to the data. You MUST make sure that the data remains available for libcurl to use until finished or until you use the same option again to point to something else. One of the most basic properties to set in the handle is the URL. You set your preferred URL to transfer with CURLOPT_URL in a manner similar to: .nf curl_easy_setopt(handle, CURLOPT_URL, "http://domain.com/"); .fi Let's assume for a while that you want to receive data as the URL identifies a remote resource you want to get here. Since you write a sort of application that needs this transfer, I assume that you would like to get the data passed to you directly instead of simply getting it passed to stdout. So, you write your own function that matches this prototype: size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp); You tell libcurl to pass all data to this function by issuing a function similar to this: curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data); You can control what data your function get in the forth argument by setting another property: curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &internal_struct); Using that property, you can easily pass local data between your application and the function that gets invoked by libcurl. libcurl itself won't touch the data you pass with \fICURLOPT_WRITEDATA\fP. libcurl offers its own default internal callback that'll take care of the data if you don't set the callback with \fICURLOPT_WRITEFUNCTION\fP. It will then simply output the received data to stdout. You can have the default callback write the data to a different file handle by passing a 'FILE *' to a file opened for writing with the \fICURLOPT_WRITEDATA\fP option. Now, we need to take a step back and have a deep breath. Here's one of those rare platform-dependent nitpicks. Did you spot it? On some platforms[2], libcurl won't be able to operate on files opened by the program. Thus, if you use the default callback and pass in a an open file with \fICURLOPT_WRITEDATA\fP, it will crash. You should therefore avoid this to make your program run fine virtually everywhere. (\fICURLOPT_WRITEDATA\fP was formerly known as \fICURLOPT_FILE\fP. Both names still work and do the same thing). If you're using libcurl as a win32 DLL, you MUST use the \fICURLOPT_WRITEFUNCTION\fP if you set \fICURLOPT_WRITEDATA\fP - or you will experience crashes. There are of course many more options you can set, and we'll get back to a few of them later. Let's instead continue to the actual transfer: success = curl_easy_perform(easyhandle); \fIcurl_easy_perform(3)\fP will connect to the remote site, do the necessary commands and receive the transfer. Whenever it receives data, it calls the callback function we previously set. The function may get one byte at a time, or it may get many kilobytes at once. libcurl delivers as much as possible as often as possible. Your callback function should return the number of bytes it \&"took care of". If that is not the exact same amount of bytes that was passed to it, libcurl will abort the operation and return with an error code. When the transfer is complete, the function returns a return code that informs you if it succeeded in its mission or not. If a return code isn't enough for you, you can use the CURLOPT_ERRORBUFFER to point libcurl to a buffer of yours where it'll store a human readable error message as well. If you then want to transfer another file, the handle is ready to be used again. Mind you, it is even preferred that you re-use an existing handle if you intend to make another transfer. libcurl will then attempt to re-use the previous .SH "Multi-threading Issues" The first basic rule is that you must \fBnever\fP share a libcurl handle (be it easy or multi or whatever) between multiple threads. Only use one handle in one thread at a time. libcurl is completely thread safe, except for two issues: signals and SSL/TLS handlers. Signals are used timeouting name resolves (during DNS lookup) - when built without c-ares support and not on Windows.. If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are then of course using OpenSSL/GnuTLS multi-threaded and those libs have their own requirements on this issue. Basically, you need to provide one or two functions to allow it to function properly. For all details, see this: OpenSSL http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION GnuTLS http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html When using multiple threads you should set the CURLOPT_NOSIGNAL option to TRUE for all handles. Everything will work fine except that timeouts are not honored during the DNS lookup - which you can work around by building libcurl with c-ares support. c-ares is a library that provides asynchronous name resolves. Unfortunately, c-ares does not yet support IPv6. Also, note that CURLOPT_DNS_USE_GLOBAL_CACHE is not thread-safe. .SH "When It Doesn't Work" There will always be times when the transfer fails for some reason. You might have set the wrong libcurl option or misunderstood what the libcurl option actually does, or the remote server might return non-standard replies that confuse the library which then confuses your program. There's one golden rule when these things occur: set the CURLOPT_VERBOSE option to TRUE. It'll cause the library to spew out the entire protocol details it sends, some internal info and some received protocol data as well (especially when using FTP). If you're using HTTP, adding the headers in the received output to study is also a clever way to get a better understanding why the server behaves the way it does. Include headers in the normal body output with CURLOPT_HEADER set TRUE. Of course there are bugs left. We need to get to know about them to be able to fix them, so we're quite dependent on your bug reports! When you do report suspected bugs in libcurl, please include as much details you possibly can: a protocol dump that CURLOPT_VERBOSE produces, library version, as much as possible of your code that uses libcurl, operating system name and version, compiler name and version etc. If CURLOPT_VERBOSE is not enough, you increase the level of debug data your application receive by using the CURLOPT_DEBUGFUNCTION. Getting some in-depth knowledge about the protocols involved is never wrong, and if you're trying to do funny things, you might very well understand libcurl and how to use it better if you study the appropriate RFC documents at least briefly. .SH "Upload Data to a Remote Site" libcurl tries to keep a protocol independent approach to most transfers, thus uploading to a remote FTP site is very similar to uploading data to a HTTP server with a PUT request. Of course, first you either create an easy handle or you re-use one existing one. Then you set the URL to operate on just like before. This is the remote URL, that we now will upload. Since we write an application, we most likely want libcurl to get the upload data by asking us for it. To make it do that, we set the read callback and the custom pointer libcurl will pass to our read callback. The read callback should have a prototype similar to: size_t function(char *bufptr, size_t size, size_t nitems, void *userp); Where bufptr is the pointer to a buffer we fill in with data to upload and size*nitems is the size of the buffer and therefore also the maximum amount of data we can return to libcurl in this call. The 'userp' pointer is the custom pointer we set to point to a struct of ours to pass private data between the application and the callback. curl_easy_setopt(easyhandle, CURLOPT_READFUNCTION, read_function); curl_easy_setopt(easyhandle, CURLOPT_INFILE, &filedata); Tell libcurl that we want to upload: curl_easy_setopt(easyhandle, CURLOPT_UPLOAD, TRUE); A few protocols won't behave properly when uploads are done without any prior knowledge of the expected file size. So, set the upload file size using the CURLOPT_INFILESIZE_LARGE for all known file sizes like this[1]: .nf /* in this example, file_size must be an off_t variable */ curl_easy_setopt(easyhandle, CURLOPT_INFILESIZE_LARGE, file_size); .fi When you call \fIcurl_easy_perform(3)\fP this time, it'll perform all the necessary operations and when it has invoked the upload it'll call your supplied callback to get the data to upload. The program should return as much data as possible in every invoke, as that is likely to make the upload perform as fast as possible. The callback should return the number of bytes it wrote in the buffer. Returning 0 will signal the end of the upload. .SH "Passwords" Many protocols use or even require that user name and password are provided to be able to download or upload the data of your choice. libcurl offers several ways to specify them. Most protocols support that you specify the name and password in the URL itself. libcurl will detect this and use them accordingly. This is written like this: protocol://user:password@example.com/path/ If you need any odd letters in your user name or password, you should enter them URL encoded, as %XX where XX is a two-digit hexadecimal number. libcurl also provides options to set various passwords. The user name and password as shown embedded in the URL can instead get set with the CURLOPT_USERPWD option. The argument passed to libcurl should be a char * to a string in the format "user:password:". In a manner like this: curl_easy_setopt(easyhandle, CURLOPT_USERPWD, "myname:thesecret"); Another case where name and password might be needed at times, is for those users who need to authenticate themselves to a proxy they use. libcurl offers another option for this, the CURLOPT_PROXYUSERPWD. It is used quite similar to the CURLOPT_USERPWD option like this: curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "myname:thesecret"); There's a long time unix "standard" way of storing ftp user names and passwords, namely in the $HOME/.netrc file. The file should be made private so that only the user may read it (see also the "Security Considerations" chapter), as it might contain the password in plain text. libcurl has the ability to use this file to figure out what set of user name and password to use for a particular host. As an extension to the normal functionality, libcurl also supports this file for non-FTP protocols such as HTTP. To make curl use this file, use the CURLOPT_NETRC option: curl_easy_setopt(easyhandle, CURLOPT_NETRC, TRUE); And a very basic example of how such a .netrc file may look like: .nf machine myhost.mydomain.com login userlogin password secretword .fi All these examples have been cases where the password has been optional, or at least you could leave it out and have libcurl attempt to do its job without it. There are times when the password isn't optional, like when you're using an SSL private key for secure transfers. To pass the known private key password to libcurl: curl_easy_setopt(easyhandle, CURLOPT_SSLKEYPASSWD, "keypassword"); .SH "HTTP Authentication" The previous chapter showed how to set user name and password for getting URLs that require authentication. When using the HTTP protocol, there are many different ways a client can provide those credentials to the server and you can control what way libcurl will (attempt to) use. The default HTTP authentication method is called 'Basic', which is sending the name and password in clear-text in the HTTP request, base64-encoded. This is insecure. At the time of this writing libcurl can be built to use: Basic, Digest, NTLM, Negotiate, GSS-Negotiate and SPNEGO. You can tell libcurl which one to use with CURLOPT_HTTPAUTH as in: curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST); And when you send authentication to a proxy, you can also set authentication type the same way but instead with CURLOPT_PROXYAUTH: curl_easy_setopt(easyhandle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM); Both these options allow you to set multiple types (by ORing them together), to make libcurl pick the most secure one out of the types the server/proxy claims to support. This method does however add a round-trip since libcurl must first ask the server what it supports: curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST|CURLAUTH_BASIC); For convenience, you can use the 'CURLAUTH_ANY' define (instead of a list with specific types) which allows libcurl to use whatever method it wants. When asking for multiple types, libcurl will pick the available one it considers "best" in its own internal order of preference. .SH "HTTP POSTing" We get many questions regarding how to issue HTTP POSTs with libcurl the proper way. This chapter will thus include examples using both different versions of HTTP POST that libcurl supports. The first version is the simple POST, the most common version, that most HTML pages using the

tag uses. We provide a pointer to the data and tell libcurl to post it all to the remote site: .nf char *data="name=daniel&project=curl"; curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, data); curl_easy_setopt(easyhandle, CURLOPT_URL, "http://posthere.com/"); curl_easy_perform(easyhandle); /* post away! */ .fi Simple enough, huh? Since you set the POST options with the CURLOPT_POSTFIELDS, this automatically switches the handle to use POST in the upcoming request. Ok, so what if you want to post binary data that also requires you to set the Content-Type: header of the post? Well, binary posts prevents libcurl from being able to do strlen() on the data to figure out the size, so therefore we must tell libcurl the size of the post data. Setting headers in libcurl requests are done in a generic way, by building a list of our own headers and then passing that list to libcurl. .nf struct curl_slist *headers=NULL; headers = curl_slist_append(headers, "Content-Type: text/xml"); /* post binary data */ curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, binaryptr); /* set the size of the postfields data */ curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDSIZE, 23); /* pass our list of custom made headers */ curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers); curl_easy_perform(easyhandle); /* post away! */ curl_slist_free_all(headers); /* free the header list */ .fi While the simple examples above cover the majority of all cases where HTTP POST operations are required, they don't do multi-part formposts. Multi-part formposts were introduced as a better way to post (possibly large) binary data and was first documented in the RFC1867. They're called multi-part because they're built by a chain of parts, each being a single unit. Each part has its own name and contents. You can in fact create and post a multi-part formpost with the regular libcurl POST support described above, but that would require that you build a formpost yourself and provide to libcurl. To make that easier, libcurl provides \fIcurl_formadd(3)\fP. Using this function, you add parts to the form. When you're done adding parts, you post the whole form. The following example sets two simple text parts with plain textual contents, and then a file with binary contents and upload the whole thing. .nf struct curl_httppost *post=NULL; struct curl_httppost *last=NULL; curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, "project", CURLFORM_COPYCONTENTS, "curl", CURLFORM_END); curl_formadd(&post, &last, CURLFORM_COPYNAME, "logotype-image", CURLFORM_FILECONTENT, "curl.png", CURLFORM_END); /* Set the form info */ curl_easy_setopt(easyhandle, CURLOPT_HTTPPOST, post); curl_easy_perform(easyhandle); /* post away! */ /* free the post data again */ curl_formfree(post); .fi Multipart formposts are chains of parts using MIME-style separators and headers. It means that each one of these separate parts get a few headers set that describe the individual content-type, size etc. To enable your application to handicraft this formpost even more, libcurl allows you to supply your own set of custom headers to such an individual form part. You can of course supply headers to as many parts you like, but this little example will show how you set headers to one specific part when you add that to the post handle: .nf struct curl_slist *headers=NULL; headers = curl_slist_append(headers, "Content-Type: text/xml"); curl_formadd(&post, &last, CURLFORM_COPYNAME, "logotype-image", CURLFORM_FILECONTENT, "curl.xml", CURLFORM_CONTENTHEADER, headers, CURLFORM_END); curl_easy_perform(easyhandle); /* post away! */ curl_formfree(post); /* free post */ curl_slist_free_all(post); /* free custom header list */ .fi Since all options on an easyhandle are "sticky", they remain the same until changed even if you do call \fIcurl_easy_perform(3)\fP, you may need to tell curl to go back to a plain GET request if you intend to do such a one as your next request. You force an easyhandle to back to GET by using the CURLOPT_HTTPGET option: curl_easy_setopt(easyhandle, CURLOPT_HTTPGET, TRUE); Just setting CURLOPT_POSTFIELDS to "" or NULL will *not* stop libcurl from doing a POST. It will just make it POST without any data to send! .SH "Showing Progress" For historical and traditional reasons, libcurl has a built-in progress meter that can be switched on and then makes it presents a progress meter in your terminal. Switch on the progress meter by, oddly enough, set CURLOPT_NOPROGRESS to FALSE. This option is set to TRUE by default. For most applications however, the built-in progress meter is useless and what instead is interesting is the ability to specify a progress callback. The function pointer you pass to libcurl will then be called on irregular intervals with information about the current transfer. Set the progress callback by using CURLOPT_PROGRESSFUNCTION. And pass a pointer to a function that matches this prototype: .nf int progress_callback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow); .fi If any of the input arguments is unknown, a 0 will be passed. The first argument, the 'clientp' is the pointer you pass to libcurl with CURLOPT_PROGRESSDATA. libcurl won't touch it. .SH "libcurl with C++" There's basically only one thing to keep in mind when using C++ instead of C when interfacing libcurl: The callbacks CANNOT be non-static class member functions Example C++ code: .nf class AClass { static size_t write_data(void *ptr, size_t size, size_t nmemb, void *ourpointer) { /* do what you want with the data */ } } .fi .SH "Proxies" What "proxy" means according to Merriam-Webster: "a person authorized to act for another" but also "the agency, function, or office of a deputy who acts as a substitute for another". Proxies are exceedingly common these days. Companies often only offer Internet access to employees through their HTTP proxies. Network clients or user-agents ask the proxy for documents, the proxy does the actual request and then it returns them. libcurl has full support for HTTP proxies, so when a given URL is wanted, libcurl will ask the proxy for it instead of trying to connect to the actual host identified in the URL. The fact that the proxy is a HTTP proxy puts certain restrictions on what can actually happen. A requested URL that might not be a HTTP URL will be still be passed to the HTTP proxy to deliver back to libcurl. This happens transparently, and an application may not need to know. I say "may", because at times it is very important to understand that all operations over a HTTP proxy is using the HTTP protocol. For example, you can't invoke your own custom FTP commands or even proper FTP directory listings. .IP "Proxy Options" To tell libcurl to use a proxy at a given port number: curl_easy_setopt(easyhandle, CURLOPT_PROXY, "proxy-host.com:8080"); Some proxies require user authentication before allowing a request, and you pass that information similar to this: curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "user:password"); If you want to, you can specify the host name only in the CURLOPT_PROXY option, and set the port number separately with CURLOPT_PROXYPORT. .IP "Environment Variables" libcurl automatically checks and uses a set of environment variables to know what proxies to use for certain protocols. The names of the variables are following an ancient de facto standard and are built up as "[protocol]_proxy" (note the lower casing). Which makes the variable 'http_proxy' checked for a name of a proxy to use when the input URL is HTTP. Following the same rule, the variable named 'ftp_proxy' is checked for FTP URLs. Again, the proxies are always HTTP proxies, the different names of the variables simply allows different HTTP proxies to be used. The proxy environment variable contents should be in the format \&"[protocol://][user:password@]machine[:port]". Where the protocol:// part is simply ignored if present (so http://proxy and bluerk://proxy will do the same) and the optional port number specifies on which port the proxy operates on the host. If not specified, the internal default port number will be used and that is most likely *not* the one you would like it to be. There are two special environment variables. 'all_proxy' is what sets proxy for any URL in case the protocol specific variable wasn't set, and \&'no_proxy' defines a list of hosts that should not use a proxy even though a variable may say so. If 'no_proxy' is a plain asterisk ("*") it matches all hosts. .IP "SSL and Proxies" SSL is for secure point-to-point connections. This involves strong encryption and similar things, which effectively makes it impossible for a proxy to operate as a "man in between" which the proxy's task is, as previously discussed. Instead, the only way to have SSL work over a HTTP proxy is to ask the proxy to tunnel trough everything without being able to check or fiddle with the traffic. Opening an SSL connection over a HTTP proxy is therefor a matter of asking the proxy for a straight connection to the target host on a specified port. This is made with the HTTP request CONNECT. ("please mr proxy, connect me to that remote host"). Because of the nature of this operation, where the proxy has no idea what kind of data that is passed in and out through this tunnel, this breaks some of the very few advantages that come from using a proxy, such as caching. Many organizations prevent this kind of tunneling to other destination port numbers than 443 (which is the default HTTPS port number). .IP "Tunneling Through Proxy" As explained above, tunneling is required for SSL to work and often even restricted to the operation intended for SSL; HTTPS. This is however not the only time proxy-tunneling might offer benefits to you or your application. As tunneling opens a direct connection from your application to the remote machine, it suddenly also re-introduces the ability to do non-HTTP operations over a HTTP proxy. You can in fact use things such as FTP upload or FTP custom commands this way. Again, this is often prevented by the administrators of proxies and is rarely allowed. Tell libcurl to use proxy tunneling like this: curl_easy_setopt(easyhandle, CURLOPT_HTTPPROXYTUNNEL, TRUE); In fact, there might even be times when you want to do plain HTTP operations using a tunnel like this, as it then enables you to operate on the remote server instead of asking the proxy to do so. libcurl will not stand in the way for such innovative actions either! .IP "Proxy Auto-Config" Netscape first came up with this. It is basically a web page (usually using a \&.pac extension) with a javascript that when executed by the browser with the requested URL as input, returns information to the browser on how to connect to the URL. The returned information might be "DIRECT" (which means no proxy should be used), "PROXY host:port" (to tell the browser where the proxy for this particular URL is) or "SOCKS host:port" (to direct the browser to a SOCKS proxy). libcurl has no means to interpret or evaluate javascript and thus it doesn't support this. If you get yourself in a position where you face this nasty invention, the following advice have been mentioned and used in the past: - Depending on the javascript complexity, write up a script that translates it to another language and execute that. - Read the javascript code and rewrite the same logic in another language. - Implement a javascript interpreted, people have successfully used the Mozilla javascript engine in the past. - Ask your admins to stop this, for a static proxy setup or similar. .SH "Persistence Is The Way to Happiness" Re-cycling the same easy handle several times when doing multiple requests is the way to go. After each single \fIcurl_easy_perform(3)\fP operation, libcurl will keep the connection alive and open. A subsequent request using the same easy handle to the same host might just be able to use the already open connection! This reduces network impact a lot. Even if the connection is dropped, all connections involving SSL to the same host again, will benefit from libcurl's session ID cache that drastically reduces re-connection time. FTP connections that are kept alive saves a lot of time, as the command- response round-trips are skipped, and also you don't risk getting blocked without permission to login again like on many FTP servers only allowing N persons to be logged in at the same time. libcurl caches DNS name resolving results, to make lookups of a previously looked up name a lot faster. Other interesting details that improve performance for subsequent requests may also be added in the future. Each easy handle will attempt to keep the last few connections alive for a while in case they are to be used again. You can set the size of this "cache" with the CURLOPT_MAXCONNECTS option. Default is 5. It is very seldom any point in changing this value, and if you think of changing this it is often just a matter of thinking again. When the connection cache gets filled, libcurl must close an existing connection in order to get room for the new one. To know which connection to close, libcurl uses a "close policy" that you can affect with the CURLOPT_CLOSEPOLICY option. There's only two polices implemented as of this writing (libcurl 7.9.4) and they are: .RS .IP CURLCLOSEPOLICY_LEAST_RECENTLY_USED simply close the one that hasn't been used for the longest time. This is the default behavior. .IP CURLCLOSEPOLICY_OLDEST closes the oldest connection, the one that was created the longest time ago. .RE There are, or at least were, plans to support a close policy that would call a user-specified callback to let the user be able to decide which connection to dump when this is necessary and therefor is the CURLOPT_CLOSEFUNCTION an existing option still today. Nothing ever uses this though and this will not be used within the foreseeable future either. To force your upcoming request to not use an already existing connection (it will even close one first if there happens to be one alive to the same host you're about to operate on), you can do that by setting CURLOPT_FRESH_CONNECT to TRUE. In a similar spirit, you can also forbid the upcoming request to be "lying" around and possibly get re-used after the request by setting CURLOPT_FORBID_REUSE to TRUE. .SH "HTTP Headers Used by libcurl" When you use libcurl to do HTTP requests, it'll pass along a series of headers automatically. It might be good for you to know and understand these ones. .IP "Host" This header is required by HTTP 1.1 and even many 1.0 servers and should be the name of the server we want to talk to. This includes the port number if anything but default. .IP "Pragma" \&"no-cache". Tells a possible proxy to not grab a copy from the cache but to fetch a fresh one. .IP "Accept" \&"*/*". .IP "Expect:" When doing multi-part formposts, libcurl will set this header to \&"100-continue" to ask the server for an "OK" message before it proceeds with sending the data part of the post. .SH "Customizing Operations" There is an ongoing development today where more and more protocols are built upon HTTP for transport. This has obvious benefits as HTTP is a tested and reliable protocol that is widely deployed and have excellent proxy-support. When you use one of these protocols, and even when doing other kinds of programming you may need to change the traditional HTTP (or FTP or...) manners. You may need to change words, headers or various data. libcurl is your friend here too. .IP CUSTOMREQUEST If just changing the actual HTTP request keyword is what you want, like when GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST is there for you. It is very simple to use: curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNRUQUEST"); When using the custom request, you change the request keyword of the actual request you are performing. Thus, by default you make GET request but you can also make a POST operation (as described before) and then replace the POST keyword if you want to. You're the boss. .IP "Modify Headers" HTTP-like protocols pass a series of headers to the server when doing the request, and you're free to pass any amount of extra headers that you think fit. Adding headers are this easy: .nf struct curl_slist *headers=NULL; /* init to NULL is important */ headers = curl_slist_append(headers, "Hey-server-hey: how are you?"); headers = curl_slist_append(headers, "X-silly-content: yes"); /* pass our list of custom made headers */ curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers); curl_easy_perform(easyhandle); /* transfer http */ curl_slist_free_all(headers); /* free the header list */ .fi \&... and if you think some of the internally generated headers, such as Accept: or Host: don't contain the data you want them to contain, you can replace them by simply setting them too: .nf headers = curl_slist_append(headers, "Accept: Agent-007"); headers = curl_slist_append(headers, "Host: munged.host.line"); .fi .IP "Delete Headers" If you replace an existing header with one with no contents, you will prevent the header from being sent. Like if you want to completely prevent the \&"Accept:" header to be sent, you can disable it with code similar to this: headers = curl_slist_append(headers, "Accept:"); Both replacing and canceling internal headers should be done with careful consideration and you should be aware that you may violate the HTTP protocol when doing so. .IP "Enforcing chunked transfer-encoding" By making sure a request uses the custom header "Transfer-Encoding: chunked" when doing a non-GET HTTP operation, libcurl will switch over to "chunked" upload, even though the size of the data to upload might be known. By default, libcurl usually switches over to chunked upload automatically if the upload data size is unknown. .IP "HTTP Version" There's only one aspect left in the HTTP requests that we haven't yet mentioned how to modify: the version field. All HTTP requests includes the version number to tell the server which version we support. libcurl speak HTTP 1.1 by default. Some very old servers don't like getting 1.1-requests and when dealing with stubborn old things like that, you can tell libcurl to use 1.0 instead by doing something like this: curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION, CURLHTTP_VERSION_1_0); .IP "FTP Custom Commands" Not all protocols are HTTP-like, and thus the above may not help you when you want to make for example your FTP transfers to behave differently. Sending custom commands to a FTP server means that you need to send the commands exactly as the FTP server expects them (RFC959 is a good guide here), and you can only use commands that work on the control-connection alone. All kinds of commands that requires data interchange and thus needs a data-connection must be left to libcurl's own judgment. Also be aware that libcurl will do its very best to change directory to the target directory before doing any transfer, so if you change directory (with CWD or similar) you might confuse libcurl and then it might not attempt to transfer the file in the correct remote directory. A little example that deletes a given file before an operation: .nf headers = curl_slist_append(headers, "DELE file-to-remove"); /* pass the list of custom commands to the handle */ curl_easy_setopt(easyhandle, CURLOPT_QUOTE, headers); curl_easy_perform(easyhandle); /* transfer ftp data! */ curl_slist_free_all(headers); /* free the header list */ .fi If you would instead want this operation (or chain of operations) to happen _after_ the data transfer took place the option to \fIcurl_easy_setopt(3)\fP would instead be called CURLOPT_POSTQUOTE and used the exact same way. The custom FTP command will be issued to the server in the same order they are added to the list, and if a command gets an error code returned back from the server, no more commands will be issued and libcurl will bail out with an error code (CURLE_FTP_QUOTE_ERROR). Note that if you use CURLOPT_QUOTE to send commands before a transfer, no transfer will actually take place when a quote command has failed. If you set the CURLOPT_HEADER to true, you will tell libcurl to get information about the target file and output "headers" about it. The headers will be in "HTTP-style", looking like they do in HTTP. The option to enable headers or to run custom FTP commands may be useful to combine with CURLOPT_NOBODY. If this option is set, no actual file content transfer will be performed. .IP "FTP Custom CUSTOMREQUEST" If you do what list the contents of a FTP directory using your own defined FTP command, CURLOPT_CUSTOMREQUEST will do just that. "NLST" is the default one for listing directories but you're free to pass in your idea of a good alternative. .SH "Cookies Without Chocolate Chips" In the HTTP sense, a cookie is a name with an associated value. A server sends the name and value to the client, and expects it to get sent back on every subsequent request to the server that matches the particular conditions set. The conditions include that the domain name and path match and that the cookie hasn't become too old. In real-world cases, servers send new cookies to replace existing one to update them. Server use cookies to "track" users and to keep "sessions". Cookies are sent from server to clients with the header Set-Cookie: and they're sent from clients to servers with the Cookie: header. To just send whatever cookie you want to a server, you can use CURLOPT_COOKIE to set a cookie string like this: curl_easy_setopt(easyhandle, CURLOPT_COOKIE, "name1=var1; name2=var2;"); In many cases, that is not enough. You might want to dynamically save whatever cookies the remote server passes to you, and make sure those cookies are then use accordingly on later requests. One way to do this, is to save all headers you receive in a plain file and when you make a request, you tell libcurl to read the previous headers to figure out which cookies to use. Set header file to read cookies from with CURLOPT_COOKIEFILE. The CURLOPT_COOKIEFILE option also automatically enables the cookie parser in libcurl. Until the cookie parser is enabled, libcurl will not parse or understand incoming cookies and they will just be ignored. However, when the parser is enabled the cookies will be understood and the cookies will be kept in memory and used properly in subsequent requests when the same handle is used. Many times this is enough, and you may not have to save the cookies to disk at all. Note that the file you specify to CURLOPT_COOKIEFILE doesn't have to exist to enable the parser, so a common way to just enable the parser and not read able might be to use a file name you know doesn't exist. If you rather use existing cookies that you've previously received with your Netscape or Mozilla browsers, you can make libcurl use that cookie file as input. The CURLOPT_COOKIEFILE is used for that too, as libcurl will automatically find out what kind of file it is and act accordingly. The perhaps most advanced cookie operation libcurl offers, is saving the entire internal cookie state back into a Netscape/Mozilla formatted cookie file. We call that the cookie-jar. When you set a file name with CURLOPT_COOKIEJAR, that file name will be created and all received cookies will be stored in it when \fIcurl_easy_cleanup(3)\fP is called. This enabled cookies to get passed on properly between multiple handles without any information getting lost. .SH "FTP Peculiarities We Need" FTP transfers use a second TCP/IP connection for the data transfer. This is usually a fact you can forget and ignore but at times this fact will come back to haunt you. libcurl offers several different ways to custom how the second connection is being made. libcurl can either connect to the server a second time or tell the server to connect back to it. The first option is the default and it is also what works best for all the people behind firewalls, NATs or IP-masquerading setups. libcurl then tells the server to open up a new port and wait for a second connection. This is by default attempted with EPSV first, and if that doesn't work it tries PASV instead. (EPSV is an extension to the original FTP spec and does not exist nor work on all FTP servers.) You can prevent libcurl from first trying the EPSV command by setting CURLOPT_FTP_USE_EPSV to FALSE. In some cases, you will prefer to have the server connect back to you for the second connection. This might be when the server is perhaps behind a firewall or something and only allows connections on a single port. libcurl then informs the remote server which IP address and port number to connect to. This is made with the CURLOPT_FTPPORT option. If you set it to "-", libcurl will use your system's "default IP address". If you want to use a particular IP, you can set the full IP address, a host name to resolve to an IP address or even a local network interface name that libcurl will get the IP address from. When doing the "PORT" approach, libcurl will attempt to use the EPRT and the LPRT before trying PORT, as they work with more protocols. You can disable this behavior by setting CURLOPT_FTP_USE_EPRT to FALSE. .SH "Headers Equal Fun" Some protocols provide "headers", meta-data separated from the normal data. These headers are by default not included in the normal data stream, but you can make them appear in the data stream by setting CURLOPT_HEADER to TRUE. What might be even more useful, is libcurl's ability to separate the headers from the data and thus make the callbacks differ. You can for example set a different pointer to pass to the ordinary write callback by setting CURLOPT_WRITEHEADER. Or, you can set an entirely separate function to receive the headers, by using CURLOPT_HEADERFUNCTION. The headers are passed to the callback function one by one, and you can depend on that fact. It makes it easier for you to add custom header parsers etc. "Headers" for FTP transfers equal all the FTP server responses. They aren't actually true headers, but in this case we pretend they are! ;-) .SH "Post Transfer Information" [ curl_easy_getinfo ] .SH "Security Considerations" libcurl is in itself not insecure. If used the right way, you can use libcurl to transfer data pretty safely. There are of course many things to consider that may loosen up this situation: .IP "Command Lines" If you use a command line tool (such as curl) that uses libcurl, and you give option to the tool on the command line those options can very likely get read by other users of your system when they use 'ps' or other tools to list currently running processes. To avoid this problem, never feed sensitive things to programs using command line options. .IP ".netrc" \&.netrc is a pretty handy file/feature that allows you to login quickly and automatically to frequently visited sites. The file contains passwords in clear text and is a real security risk. In some cases, your .netrc is also stored in a home directory that is NFS mounted or used on another network based file system, so the clear text password will fly through your network every time anyone reads that file! To avoid this problem, don't use .netrc files and never store passwords in plain text anywhere. .IP "Clear Text Passwords" Many of the protocols libcurl supports send name and password unencrypted as clear text (HTTP Basic authentication, FTP, TELNET etc). It is very easy for anyone on your network or a network nearby yours, to just fire up a network analyzer tool and eavesdrop on your passwords. Don't let the fact that HTTP uses base64 encoded passwords fool you. They may not look readable at a first glance, but they very easily "deciphered" by anyone within seconds. To avoid this problem, use protocols that don't let snoopers see your password: HTTPS, FTPS and FTP-kerberos are a few examples. HTTP Digest authentication allows this too, but isn't supported by libcurl as of this writing. .IP "Showing What You Do" On a related issue, be aware that even in situations like when you have problems with libcurl and ask someone for help, everything you reveal in order to get best possible help might also impose certain security related risks. Host names, user names, paths, operating system specifics etc (not to mention passwords of course) may in fact be used by intruders to gain additional information of a potential target. To avoid this problem, you must of course use your common sense. Often, you can just edit out the sensitive data or just search/replace your true information with faked data. .SH "Multiple Transfers Using the multi Interface" The easy interface as described in detail in this document is a synchronous interface that transfers one file at a time and doesn't return until its done. The multi interface on the other hand, allows your program to transfer multiple files in both directions at the same time, without forcing you to use multiple threads. To use this interface, you are better off if you first understand the basics of how to use the easy interface. The multi interface is simply a way to make multiple transfers at the same time, by adding up multiple easy handles in to a "multi stack". You create the easy handles you want and you set all the options just like you have been told above, and then you create a multi handle with \fIcurl_multi_init(3)\fP and add all those easy handles to that multi handle with \fIcurl_multi_add_handle(3)\fP. When you've added the handles you have for the moment (you can still add new ones at any time), you start the transfers by call \fIcurl_multi_perform(3)\fP. \fIcurl_multi_perform(3)\fP is asynchronous. It will only execute as little as possible and then return back control to your program. It is designed to never block. If it returns CURLM_CALL_MULTI_PERFORM you better call it again soon, as that is a signal that it still has local data to send or remote data to receive. The best usage of this interface is when you do a select() on all possible file descriptors or sockets to know when to call libcurl again. This also makes it easy for you to wait and respond to actions on your own application's sockets/handles. You figure out what to select() for by using \fIcurl_multi_fdset(3)\fP, that fills in a set of fd_set variables for you with the particular file descriptors libcurl uses for the moment. When you then call select(), it'll return when one of the file handles signal action and you then call \fIcurl_multi_perform(3)\fP to allow libcurl to do what it wants to do. Take note that libcurl does also feature some time-out code so we advice you to never use very long timeouts on select() before you call \fIcurl_multi_perform(3)\fP, which thus should be called unconditionally every now and then even if none of its file descriptors have signaled ready. Another precaution you should use: always call \fIcurl_multi_fdset(3)\fP immediately before the select() call since the current set of file descriptors may change when calling a curl function. If you want to stop the transfer of one of the easy handles in the stack, you can use \fIcurl_multi_remove_handle(3)\fP to remove individual easy handles. Remember that easy handles should be \fIcurl_easy_cleanup(3)\fPed. When a transfer within the multi stack has finished, the counter of running transfers (as filled in by \fIcurl_multi_perform(3)\fP) will decrease. When the number reaches zero, all transfers are done. \fIcurl_multi_info_read(3)\fP can be used to get information about completed transfers. It then returns the CURLcode for each easy transfer, to allow you to figure out success on each individual transfer. .SH "SSL, Certificates and Other Tricks" [ seeding, passwords, keys, certificates, ENGINE, ca certs ] .SH "Sharing Data Between Easy Handles" [ fill in ] .SH "Footnotes" .IP "[1]" libcurl 7.10.3 and later have the ability to switch over to chunked Transfer-Encoding in cases were HTTP uploads are done with data of an unknown size. .IP "[2]" This happens on Windows machines when libcurl is built and used as a DLL. However, you can still do this on Windows if you link with a static library. .IP "[3]" The curl-config tool is generated at build-time (on unix-like systems) and should be installed with the 'make install' or similar instruction that installs the library, header files, man pages etc. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_formadd.html0000644000175000017500000003241010265631023023255 0ustar danieldaniel curl_formadd man page

NAME

curl_formadd - add a section to a multipart/formdata HTTP POST

SYNOPSIS

#include <curl/curl.h>

CURLFORMcode curl_formadd(struct curl_httppost ** firstitem, struct curl_httppost ** lastitem, ...);

DESCRIPTION

curl_formadd() is used to append sections when building a multipart/formdata HTTP POST (sometimes referred to as rfc1867-style posts). Append one section at a time until you've added all the sections you want included and then you pass the firstitem pointer as parameter to CURLOPT_HTTPPOST. lastitem is set after each call and on repeated invokes it should be left as set to allow repeated invokes to find the end of the list faster.

After the lastitem pointer follow the real arguments.

The pointers *firstitem and *lastitem should both be pointing to NULL in the first call to this function. All list-data will be allocated by the function itself. You must call curl_formfree after the form post has been done to free the resources again.

Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

First, there are some basics you need to understand about multipart/formdata posts. Each part consists of at least a NAME and a CONTENTS part. If the part is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME. Below here, we'll discuss on what options you use to set these properties in the parts you want to add to your post.

OPTIONS

CURLFORM_COPYNAME

followed by string is used to set the name of this part. libcurl copies the given data, so your application doesn't need to keep it around after this function call. If the name isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with CURLFORM_NAMELENGTH.

CURLFORM_PTRNAME

followed by a string is used for the name of this part. libcurl will use the pointer and refer to the data in your application, you must make sure it remains until curl no longer needs it. If the name isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with CURLFORM_NAMELENGTH.

CURLFORM_COPYCONTENTS

followed by a string is used for the contents of this part, the actual data to send away. libcurl copies the given data, so your application doesn't need to keep it around after this function call. If the data isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with CURLFORM_CONTENTSLENGTH.

CURLFORM_PTRCONTENTS

followed by a string is used for the contents of this part, the actual data to send away. libcurl will use the pointer and refer to the data in your application, you must make sure it remains until curl no longer needs it. If the data isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with CURLFORM_CONTENTSLENGTH.

CURLFORM_CONTENTSLENGTH

followed by a long setting the length of the contents.

CURLFORM_FILECONTENT

followed by a file name, makes that file read and the contents will be used in as data in this part.

CURLFORM_FILE

followed by a file name, makes this part a file upload part. It sets the file name field to the actual file name used here, it gets the contents of the file and passes as data and sets the content-type if the given file match one of the new internally known file extension. For CURLFORM_FILE the user may send one or more files in one part by providing multiple CURLFORM_FILE arguments each followed by the filename (and each CURLFORM_FILE is allowed to have a CURLFORM_CONTENTTYPE).

CURLFORM_CONTENTTYPE

followed by a pointer to a string with a content-type will make curl use this given content-type for this file upload part, possibly instead of an internally chosen one.

CURLFORM_FILENAME

followed by a pointer to a string to a name, will make libcurl use the given name in the file upload part, instead of the actual file name given to CURLFORM_FILE.

BCURLFORM_BUFFER

followed by a string, tells libcurl that a buffer is to be used to upload data instead of using a file. The given string is used as the value of the file name field in the content header.

CURLFORM_BUFFERPTR

followed by a pointer to a data area, tells libcurl the address of the buffer containing data to upload (as indicated with CURLFORM_BUFFER). The buffer containing this data must not be freed until after curl_easy_cleanup(3) is called. You must also use CURLFORM_BUFFERLENGTH to set the length of the given buffer area.

CURLFORM_BUFFERLENGTH

followed by a long with the size of the CURLFORM_BUFFERPTR data area, tells libcurl the length of the buffer to upload.

CURLFORM_ARRAY

Another possibility to send options to curl_formadd() is the CURLFORM_ARRAY option, that passes a struct curl_forms array pointer as its value. Each curl_forms structure element has a CURLformoption and a char pointer. The final element in the array must be a CURLFORM_END. All available options can be used in an array, except the CURLFORM_ARRAY option itself! The last argument in such an array must always be CURLFORM_END.

CURLFORM_CONTENTHEADER

specifies extra headers for the form POST section. This takes a curl_slist prepared in the usual way using curl_slist_append and appends the list of headers to those libcurl automatically generates. The list must exist while the POST occurs, if you free it before the post completes you may experience problems.

When you've passed the HttpPost pointer to curl_easy_setopt(3) (using the CURLOPT_HTTPPOST option), you must not free the list until after you've called curl_easy_cleanup(3) for the curl handle.

See example below.

RETURN VALUE

0 means everything was ok, non-zero means an error occurred as <curl/curl.h> defines.

EXAMPLE

 struct curl_httppost* post = NULL;  struct curl_httppost* last = NULL;  char namebuffer[] = "name buffer";  long namelength = strlen(namebuffer);  char buffer[] = "test buffer";  char htmlbuffer[] = "<HTML>test buffer</HTML>";  long htmlbufferlength = strlen(htmlbuffer);  struct curl_forms forms[3];  char file1[] = "my-face.jpg";  char file2[] = "your-face.jpg";  /* add null character into htmlbuffer, to demonstrate that   transfers of buffers containing null characters actually work  */  htmlbuffer[8] = '0';

 /* Add simple name/content section */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",   CURLFORM_COPYCONTENTS, "content", CURLFORM_END);

 /* Add simple name/content/contenttype section */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",   CURLFORM_COPYCONTENTS, "<HTML></HTML>",   CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);

 /* Add name/ptrcontent section */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",   CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);

 /* Add ptrname/ptrcontent section */  curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer, CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH, namelength, CURLFORM_END);

 /* Add name/ptrcontent/contenttype section */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",   CURLFORM_PTRCONTENTS, htmlbuffer,   CURLFORM_CONTENTSLENGTH, htmlbufferlength,   CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);

 /* Add simple file section */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",   CURLFORM_FILE, "my-face.jpg", CURLFORM_END);

 /* Add file/contenttype section */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",   CURLFORM_FILE, "my-face.jpg",   CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);

 /* Add two file section */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",   CURLFORM_FILE, "my-face.jpg",   CURLFORM_FILE, "your-face.jpg", CURLFORM_END);

 /* Add two file section using CURLFORM_ARRAY */  forms[0].option = CURLFORM_FILE;  forms[0].value = file1;  forms[1].option = CURLFORM_FILE;  forms[1].value = file2;  forms[2].option = CURLFORM_END;

 /* Add a buffer to upload */  curl_formadd(&post, &last,   CURLFORM_COPYNAME, "name",   CURLFORM_BUFFER, "data",   CURLFORM_BUFFERPTR, record,   CURLFORM_BUFFERLENGTH, record_length,   CURLFORM_END);

 /* no option needed for the end marker */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",   CURLFORM_ARRAY, forms, CURLFORM_END);  /* Add the content of a file as a normal post text value */  curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",   CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);  /* Set the form info */  curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);

SEE ALSO

curl_easy_setopt (3) curl_formfree (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_getenv.pdf0000644000175000017500000004031610265631023022742 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream x}Vko6_At&1+Rolv!MDP@TUGѻ%9i "Qs%CqgśۀbZz>Gn^j21R/Ō w%j9N}1cT;A;"G(zI!Psp:M]H%J>#{ M@#w;OyN_E)I{+݋qmڎov靂|kox5|XS^C˻w3N?t8jDV["ȡn:-$95pzdO5ѐP$뫴ꂔR6]Md$Z{asluQȡmhЮ]2Ć` XQuy .ϫN6K(H EW}j;Y&!d Z}^ZRWdciq)\/AP-:OnLbp:LH i+ك l%idYye*Ảh7A0H+$!*L)0|CgFtaOjLr!7?1j PBCN֜M=hka̴f ws:JÂq } ):zb49%y0ΓyP-găf1gv V_Zg2|~.[wduuw+޽e&u|ґDƾPP/=̥k&̏#XCV&/덾zƁ +]&}6endstream endobj 9 0 obj 1438 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeT{PS!ZE%%nn*nE[|T| "(!$$3<eQaEaeu+Z3Q?\g^=go9{09aXg }bRruJ goaL@eͤl ox?oQpp ,΅u%B(O_zpEL̪I bͨB*6hk ,_$*|AN0g@"'%bB/OX_v5M%YEJ~\*qTH"('7@d,[X(R%c#^dGv  ي$#sȻ;B#dR|Hb3d0Ήs3>jH(p {< dZ\V_@Ul fC塲溥֜]R.} e'ݤ.]vP .C*/L\qyJh?a`Ǩp!Л mE)^ 1N?ONZJNakXsm XԂ NʀPmh^j%ŧ>bWsldFń NB?N x. ҶC2j-G0/ƣdp ̳ *F$byBoh$!x_|7|/;hhԄ*NQe Sl(zJ VŹ-8Ym5k6P"QYi8Wg~[RB$X}UBR̵6K lm1Pؤ_3[G_?èGמ8raU+v@K[\^Y(ޫ' 6̢7<.wߜg.Mߗ'} Mچn?@r=m_<1+ʒ*,jz1& ;I~^"7s6_= .Pjp@'Y T" "+ZO v3Tލ8Z7pS8\V F L{K}n;uzR_;[q^ J̭{WR(:s/K5l6Tqs[ Xq.avM Qs{d'5*mԞj }b!1*[SXCŀ}ch}~#g&C NIt536ZcAfܶEm_1L<6:B;Jɣ6;3f%=DMܢTKdSu }}OXC]9 B GS{̙tF(%:?_UyY$6eFkm:%p~֑D*u*0U8y{57Km6I+ؘ*02л/@ߙ+W~ @k+,%2`wY068| 4NCJ,`J ݓ#H !ry"dߪ&u\dB{}fC`Pl1!lT 3q(DDOqN`OhHon@-:&u:63Fݝ@d镪Ly6UY+4Bc5Ï3pG6FCpPOR_nLܓN 8Wueuk!M-f$ ~U۴l5$IhdqAV{h7A  endstream endobj 19 0 obj 1961 endobj 20 0 obj <>stream xWyXS׶?sQ(*ybB\g+bqh@*N 0&f 3 @Q (ŶjZ[zm}^ur7m߽{Iδ>koߊ<oz|%IUM˜>l=Q\{84N\޲Yŧ7d…=|ݺu>Qldq>MTHI&泙e>q̔xOdL4ځH4gL.KIQdn^eӫAt^ERdOb.@i,=NPpсCAoUƩߞ*=Fԋ X%#JX"~gm&Qc+cPL*SAct6H(E D Jk@j~pn8ΊRPF^~1V[璛e㾇ҿR; YU&]$.Grx*G,aPdaAXb [5^L kk4#%e0(6/[VJj-LLe~#:Bv*c|0tJ`@FF!v1PT "HEko^X翀_o}a^s :hs 8rzn*bo@|n wI0|t\r!+;<Ž+;OWH˳2Vt$ iq :N)?JX6k9%s9ڀBg ~05]S2V+{pYϖ\Ư->} Oz%! _>Yqt_LPieče]_q|X]OE_a&pO~&Y3$rJ~/Q V `ˉkx kǝoV_V΄V5 qYRWBY8d E,ޟrnϡ,m:-CA\+.Y2sg V8v%}%#Mn2 @O9+Kʵ6P; k%}CcN'Ϡn3fOIjI`ڋh49z% Od-=fwWkO>+Z IBz=%qqs6ʎ1X>Z̊zP1$<2 ϝ,Zh]ZijXN(ڂf=Q;s U.A{}pd#T7Պ(a@b1vT:1q*g!k5e*#an $XKvV=*z!EOT|]x!)ݭ&Jۄ k늲Ģ[)ٽ2CҔ7ǖn;A~0;/3E E/F2+ѳdM I5oD!%ZBPԉiݮeԬ=d#=s;5S~dwKPn?Jݟ"}\`kHtM#gw+ϜaMOAd_87MgsKWdW"yCBZUel[$%1Ia[CfȎYUcK:b]'1$oTXQ7kY::umb!NP$8k~}E5_*38|Ī'Nè@ 3E9­\&7PjmYOv0+xX354@~v2?B$=C*CȨF3'&1C%+?κ~Ր+OI۱Mѷn|@lPKs3B/wgܡ {@<'‰ &^T#)0fnEGC'-j|viLC bp%5$(0Ti]ez-1x4Q/n+v^į#-(kᰍ{Y/J)dNzkmբѬޢAĂӯ^轝%xVtڹibψɦN-ȓ$$d1-8X 8jfhc=+"0Ji ^V9)YգOYұʞAp O-:vW}zNB$̝ȞYjM3cy$w+ >S2K9:3`.$EXcR!]ivQfs#2X+*Pmym9k*L_/(o7|ѳOPmmW\tarq9txAsI}mîsî2_fhn7V] K)1[`> 72ᾎOwkt*ʙ{UtO1NslZV"ʳ[Qz> UIC'ʎ(fKK],B,ʁ~IkԗfJGJ8qձJSD$e"fݸ|4`"D]ƾ\Rj IWΝY2>92%I%2mV=I P3\ڈ ^WQ Q(ѢB~IriƋ{']}Wϣo|z;UV\*a 썰8wb:\;)x_= ֙Oƪ h6 CiIIdJa+խ-zd`6ERz"*9UlV#IF4AOW |ݞq endstream endobj 21 0 obj 4065 endobj 22 0 obj <>stream xXyTS׺?1&*VijmZ֪E:Զ2"J30&$a$@ $.|yQ0@$LI#A|=[rt4W&ۗiVr<%F!>=akZ~%D$#2"I"O`S"%>$VaDG"M|LD{_› BLpy$ۈB“׉913}ޜ0{!Ͷ'xγW^yW ǞwdޯK=zyL_>?t~'2^Z`XpZ< F߮cL8,z[-drl;G+9Q<tQrGRU9,d{.5) E3h@A <$yAp2h)AKTܜ"SQ #j3DGdK~\ ٨k18m@XP5KVePryzRW_egp-UikI/` M1饜2PmH*&ANO` /QA{݀:ٔHQF':R`6S(wFsdv.8Of32Ћ#>=P^ o|ezkip5~c|cd< "Z lB>~kZt\>;E^hЮmqMCYdu|/mMҋO| sIV5]T oWQ,o~/;<|2{)::JvJ]Q(ka`qa)d~SQlfHϓ Lg ղk*e #{Àg^?:-$Zp4C4J\Eح[|ui5tAAޜ% n0v^E᪾=Kw> D٢Gd~BB!1GjN彞"h:6P ._qD/=Rs΁*_jUݲww` 5_I~:R'cU=H4!8ѯp-|@"_!8i))jHӅK0жPߢl4f |CY=iZ[KH؜y!WƝ)^̩T\-@DZ|ZeQ:Y f]#eyJ~T;.1F)thff0imau#nk"OD'\R3Qn,lT|vW@$";[iKh@crɒދI@gM o N7ԜVA]wokyE\2m^0]2,tNnM|XC`h1|cf])YSYdsPz5 , OLq4(Y͹T3y9Hlȩ*l4a%w>޽O+jU3h uH\a|3L]q:j5C"IK 4!6S9Qbi_Lރ|x̳$j sx2+,)R@ fIÔhSd`ގ{Nxs+06lEߘk5EruF䁂BK!uao8|@d7_Sg^&E.`M` (y"^Ӎ*`7)pőedH m mќuSp"t'}P >#=JDPHKiZehŀMx 5yJR|"V˛,)%jgH ٍh6-ljb7AF /RHbcp6vc4-Yr^"oS%N(yvez#n`1R";w90UT ,G*,GU@U? EC\bʲ e X~:ma~7*C"LM P6M`&an8IyQ3^  ^byTnIWɎbN50zKcyT:]%o}ȸ ib ܥ~/1ڌ@ TtlJn1*VhٟoՅXVEY m6`z{yO l,,7%g]\.H,w[py4r@SYAiE(qk-uxuq)cWۋ販qN%AZ#s%Z> S;/E9۴w]%G橰4V ` &UM}]0}]=2 NT_PRTZdV+0tUC"i\8`4ɋҰڬc_wB<—,mZiψy;o'v:)@^2^Gp.֏]<'Z"; m&*ZmfZJIUkG1QU5~B˸|GƤ .wRmt ? al&6'лIޚd</Ӆ5R-9QTjv 5* {I`.Y͍#5mH,&~.MhN2XU.QZc o0$L5͚Z0ȃGHJ-ᩁ!쳉! Hm,X܅YEzDŽk?cT2 O`PEn`Lyr_Y8O+G&M|<3'Pc3~y.WqT^@)U/E Џ\ą?6Yx&M3du l-gSWz2z6(5TYOYBy*ϙݿpllf6ǰp5YYq2A+Gu 8;YNFѵ@?AM/H2>caQOh։9^9֥>hMhIV}1Q[rI膱͌ߦ)f'!+t u8h2'DS!>! PrwsTW($Ah4ηpwOn F-5U#Api]2[};k#ڶl LLPO߼ŠCpXf}heaZl9u bX9׺_C ɍ2kqqjpɐ, }z1XtwO=fIڗcSq{57=\#NKM4w4wݵ-`Meza taQl}Rʒs Uݐ&2rrU7۝8Aѿ Ѝ'LZ hJ4p3;y4JVq~PSg6~tpbLON)IV3›E7yk#yXؔKy_ ڹxcgerkS_\cPF2߽rl\0~NK: {> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001771 00000 n 0000015871 00000 n 0000001703 00000 n 0000002125 00000 n 0000001977 00000 n 0000001819 00000 n 0000001543 00000 n 0000000015 00000 n 0000001523 00000 n 0000015481 00000 n 0000014194 00000 n 0000015105 00000 n 0000013704 00000 n 0000014827 00000 n 0000013268 00000 n 0000001893 00000 n 0000001923 00000 n 0000002272 00000 n 0000004319 00000 n 0000004340 00000 n 0000008491 00000 n 0000008512 00000 n 0000013247 00000 n 0000014728 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 16011 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_setopt.pdf0000644000175000017500000024373110265631023024017 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xYkoF_1`&XIj^5P‡Uo΃d(Ċ8s{\0ٛ=g_P|.Pf>ӯ{,N}l=ݐ-gN7gϭ]3VKz0{U}VWOlrO@rN7!]Gl̹X>ub9$/ϧrQgQ|rruy.Fy u r|=?QFkpZ_dT/ 93Bxz e( x۲T3HAtKK+ˮ߱&k%Dg݃skb‘ G狕?M^o7YծeӲl` P N D ]l&9Ԋs{ |F68ai#hW#t$?K [ bd\#QKF/X[bHLNVu헭K||*'s/9jS\֑&)mv Q/~(,zw2Xͨഉ٤, q<8T)Zߗ:NCCMf3c)$`h?A6\ʠ&7uW;B\"滺~ۮA"k! &saߝ#oTӃ"$ZSE}Qvm"M4چI+"QC%<k;PvvS+::CgwEN lؠD4SO9Sٲbdַ^1Mn$C+)AyU9eyJb@1Rt~$OJ?`wi'-ӌT$feq$96SCB S$UEȚ/q Z|t ~G74 z CEUt'F8PB٫~}M]aDW?\DzU3 GFp/Wwoop;>]Ɛ{Ţ8W65}~2 )];֨MKc] ͲFufM8e :UtrLNBsᗙB'R L1/YWuVRS -z"[(T):rP"m#mlltLƩz] pf.u>\3Zj48wYFfہ# 6WwwL\X$&Zkv=YK0U}Q"A^ N'5ׁ#b("9؃ܒXKr[#-St?C;(u~RRMlQQÔ3z*)E_KoTHY?J A$؇aȁWoa_?wjgs% 7Ds!9|.W Ga7Opi.r9d@h$ 'b]@Wh}Y*_54#V17:XE,t" ~NNw"%My&>kd.Wvʺ=:ee aZVbq+`)lnn?݁{lc"aAxA`ij \d7d®1; m5Ѝr0@VjNMSWu߲7ȵKۯ;s Wfw;7*.'n̞OHwˏ,4秾wb?1sn8 Pc941l] d`ET@= Ad ARgbc|+endstream endobj 9 0 obj 2953 endobj 19 0 obj <> stream xYko_1S4uàƅAI5 Iū {W+⥹\'Quq1{,ȄȴcCfc\_1˚.$Y Yy.d$iC .oHj- V?WqӐ)nͶy'yڻRs!8C˻j *|akAmϲ>q{T8< udyNʪl&ԊL!?\vW*qX!}+Z}'mz⡠e Vc)9( k4`z8E+[6? 2YCOUf٦Mvu3''>@ViId]W5ދ kY%lnv3\k˪ncm E=WTJƶ,HgnϮqϹV[ۄq*lP0.<MrO/v"c t1uTgCmrsYl4a#<np1q>Hd`U0D<4>;Jmi=uC(t|뚧ʡOe1qj- Z]$Cʵ!.IL&HMHnLOI^"pAù}FTo@ L;Q*Ƕjl ;52Z[eIOs ~HxBĖh %3rZC6M0<&K}?&U'41>򰃨 N pJZ1i?ka7Fu‚FP >cOCtuVL=zGd^l~8'0{jOVQLQשX$dek S;գ괟K0 TGcNeJ5U+lp;8`+̨gSά@S0vB'*S l) #+V f]'Z<9TnwC漢HC+L-Y="<ذఉNޝ_'x"+u90F)pD:$U-nB_Chp0Nw n8Po)^\xmHCpcQG!6 CaJVTrٖT:r JM_d$is'=~zYCPd"/͛ܗՔCR2-7oQXq;jth?874Q$#Eq4NK$¨K\ YNj4=}.& 7)ۺZV"ajP_$qi {'ʼnٱ6vqpvq,tKC)+x3Xf9g ("FDDZF*9lVZT)-'49nZxh1'r? c ֓sc!3[/h0ރ)}q !>$[RnCA +n͢䗩;04zս5VwhG<0;:D(BIYCEmU[QA+tBP$kzLOj3G]A)sUpRD`_5:kHPO>]TNb[9ˮq2 Sn V|#kf"y1N6e *e^8(8 + q`}sW8FF^w]Y?6wۼJҚR_3R憛=uh)M^{B蓣a)Mcy-g~emQK=( 6Ό%Zn%;0^w#> f"&O `@ӹ.;6ahV&b;5 7WɘGg"{o| |--lWPTq =zJ3}7ܾ]\\CS9&gv$Sl&Kc_AAiEJa^Гi0 18a򰞃S ᅇ9RRv|K`2:NGKWO8Ьl *#_i/ܲjaSn|?LXtuxP!x}^7` qDJ{?Y'2mGNE F<x96໠5=tQPt DGt"qas|mRg y?endstream endobj 20 0 obj 2745 endobj 23 0 obj <> stream xYr}Wۂ.q7TI6D+*MJJ `("qo؏N\pi&[.[21ӧMngf\ij'z2pD #og;H=XiWO"iOh]h9sR`m]R+:OlfI<̡86;OzֿrK>SkmhaۈbMɇ9&e%X-7몷8e-kFjqy4gr%Luϴ2nE,iҴ*I6J:Ѵ!fF$7>&]Ly!A U@]]4$าD:|ٶhvae"#yI859DŽ/OCٻ۫Mtz_WS!85_3yLuzLLn>ABӘ@oE KZp(0D]V]$)3§JSïEm! #>˫'EPJ1#2FS<]rG$.ŗk\/)((5hO'#l;?vԶV?.zC;G#]= q",u7lj+;S `SiU/$G:ƋȐG?CWҀ i/ I"Ge<0u2qSu\ L]ӎAק ؑ*%.&L@dJh 2ȡ**yi,#.v~O=m~ F$x'%xĨ(2vT F3 U_ _~زODTK Nʱ>K{qE9B) w75${ǰ=<=-Zykk\Skp2$|֌m 7U~Aʌ84plH3mDBJ_4q'ɯw'X"+=TX}@9^*'!63QPA-'6Ш!'b~K!d_m+lx>`W%p_Aؗ.naR, ޲739YXvW "/\EɍZT#LhlҠCp# 5@j,Sێ#"^KpTr5 Py\P^X^Br ^9,:E+0FFhIKmޞ7Fu.l_SBlEv,9?[V1m92R-R49kͽpOۑHMNLR%BG9mE_k{'N(q)oQІMx[M)G\MH$V\%2J)Nm7])|7Ćޱ/BG];S1沅zoX@㫡]YȰ:ND`3%L@#x[i˓˫%yCɝ(O$/d& )0(LXCuj٣EORrRz*z뙨L/pT'`nՌ#Dc@%$Hxw/IizN ˋ9Jqm8U%@[s54øPfH^C2b sl_^WB@zOh Hyd^w!:KǕ q9Z %5@4G#t#\F Y4"T]BMM :'<}-dB}9zeX@X-l)Ǎ iFȶ=wtHxS#6RC)68Ik]P$zVv`kڈp5Gn;j4&@=1GuZԬ>MyDԴcgP2n6/|+ZSɑHA@IJ%Gꨝ^FFv>Xahϣ;':nAjXۼL3"ݞE=bXTs7 BL1?z+gGIyPUdS=/ݨ$Pi.3ᅂ2U [W{ǃs!ȄP\DN|o*i.??F+dmN~)Y@j\헍4q\ɸ=|ec߇jCj$sԳ쟒]4[3_}endstream endobj 24 0 obj 2970 endobj 27 0 obj <> stream xYr}WL-q `pu(ъD%X)HE ra?:l'%3ݧOn~a.K?r{ 3ke?Oz=OZ>Sͷ'/ggG5Fծ}pÄ>Lu~}V7WN3 6W'뫛d|yy(mv`MKz|߂j oBJgOT+lեnꐹ !ta:R9IgS;C`h:VHێ 2)P0G|[O_twG\QHڤ2S8c.Rۭw$Y)ᄕ\LGcT-ܱU*_Vͽp0j!΃W_,IݮXn7_*^x:w)0UE'}e26f4 *(ȩYmtɯJ7k;}լD7W4viԮz+8z#OYL[Q(#DlZ5-EӮ^@j6F6>@WO5$*o ^x;tS?&~(x5Bāsvu=zBq6H Ahr> rEe MX-4/gy5\95w. BSKlti)@,VIhInM?U3wjj0~tH4[8OxUNv /1an.T}wQƯ40-Iw* ]IM}vRL3"tTU̱`jz*pV2ϴRwDԐ/o?}/?§ t:Ѫ96,g*C+, ELEƒa6yyLPĠp^b*4'.'_-endstream endobj 28 0 obj 3186 endobj 31 0 obj <> stream xYrF}W<;hpUdG=HD׌GN )"&0ߐs{&ٲ+ea{\03زWBЕj,X<`$bKE\f£k.V\Ɇ/خ*8dZr6_K˪l+Yz]7Kv+Yb3Jy5rʋ;.7K٬%MMSb)eݰCb˲7]ld]c鋉SzCl \E:]Yak ̟fMG,dd/hXKJH1D܅(HK6Q2f̮1<͚]㩦\^bT=Cokk=4l0ZO0kO=(+=pXL wAyYdfMbSKJ#̓4&$4Ywc{NLo xv@v ?l@÷Ⱦ8 mZms{7K#n_;gu'/թARGZPy\eMo/hn O8 x&ѦNƒŚA7UV,~ ]{r/IS;*31Q/q@QCV`(Q &RdNO}7"MAET-#4[!xIV 1,V:5JxD0{{0Y=ow):OfVDGQ/PaC/gOX`3)_zQ Caeשpc&!6mjWu7 aNN, "*Xt46RyPK0%XW}bbZָ$WNgjzW}IҸGnzL"R?$7tb6?gQ> l70Ҁzh#a EgtD@~~L?cIEGZw`@!ν(yU[W jgUG͉0\7fWMEqDhk4 ;H; 4}z(3'όKO1P)QX"%Y4zA%u ' nVV25pj- -sGw(5a!3)'FyPXv&*dN<,A+$.gjf"mpƂz*$ ܣSd?&(.N-Ǹ7V`JbޖL]K vk̏D6l 0 Aڀ 76?'hOv #iOs]?ynΫ U= |~Mֳ** GKʳ+H1(&Hli8/:A(Zy*AƘ|I lc zޏ?xbd^B[goomշРʚ orz68&`lM[ v%j ekȜ)bmU&\!뽥dgԺ̓d3Ì䟺٘8w+8y|#}X[e16O}cQOC?6ZNKX#e[E J~a & ͮ,F;\ 9(u '-;r5Mn'_w~ nEv[%C^`Ji'TVh`}sWR8 MNw𚪡u {'JԨoU׾KF%h={]s:Yی:1yoOn~99?r~\%tEqM]-5gg5,+y&2- ܩr[Zu*ۙaPtD MtmkPWGv8(!Z "[US'-®PdGBхZ-€v# f36;,SQ,fWx`yx84 :EZ>/V:mkp Oz_O_MQ%i9ǧ z*%*zjf6{VȽRV 6,aX޸V z_ݏOn:Icue0BBY*ide)J41ԚrVg+uU ']M՚j-xc d&)O'/:^;رQ٦0t7RKH꒕ $r)wFWI9Qȗ0{>-ugGGU3{p]Hunƌ2 k{6yP߆qA4nB npl5d->Wo/OFM6h#S?vM^oVxԜyZaTjE7'WJ?*|Lӎb_RQKF`QJC$ 9L7YzE5kFA(-T+sz?Nm]5;s|: A^9V47v 0}O-a-({Tay7jG_LWeb{;ԣnɉ~rjl[0fF罬D(ep$``Ѻ}] ^^0YphoKQ} er* S>ln+mm.HPCa튮qCnUw_ƷjCөPS,OتQ[QC6uM,;sDB,U8}qsv1F TwC|5RuiYt@=lzy khu>*oþ|t.5Qm /0(qxtˌu{$u65i\K ̠[gާ2k^yV6 ܞ3wJ٪15 z!0\F M`Fg%=Y4DH]dnvDvUgd~ПP9endstream endobj 32 0 obj 3066 endobj 35 0 obj <> stream xYrF}WL8F oZ[hK*oJJ p(b4ZQ {znhe-=H0==ݧOf>̧>>3_Ŏ}5Zz-Bfl ~VO;8'wϟ:7 *|ľ>y^r3_ [g>_!ndߗ#eu쩬*.l|Y?bb&}~CA6a$;V[vt5{a}_dx!'BdW`)tDve]?$LHVv%.m.|AGwrϛ7v=me+F(Vq }Uv2; $Ly4x\(t8jDz'pmz^;v#"vC ś}9W[x`)"k0>2lE0=A:fd'm;e^' Xtx}neqZ|.NO5j2$'K"xӍd[iexߞ> xjTuPҁڹ;5]GBrVcY#X*"Cd`.ݱ]45>Ew^i)7 z)J0J ,Uy;hHuS9@r'OX^MP\ $=*-aYޡt`,y?r)|pѫx릖ܠ"} <~A$ẍ́j͇!f1 A{vy5x%|;л~w.VnyL/"e #:Ki|p~8P-(wGjľm*]Vn@muִ fҊnY՝:>:9½ئmvMb=74qp9k+ ~QR4-ۗzS.:4_P t7yaȘh׎@hǚUJ Ddu*QTslDpVM~l bywm?f s_)jr68{0E}pÁa=}䛳뫏F\P!#lڤUQWB깙-&I#Z: xxֺǧԱ{\yQL+P '_A%t/˫]ReH*$ m\|` ;]4;Њ$D/T{$ZH2_̀6Cd&s045NQظ:l{ʵ[((#x8m&uAJ;=^H-_ ~dn|EZiV*f1Oyسk^F𥅽1ږfh?;e./H nZj4XyPЉemYlT\^6^[nc@Qul`^/*Q`| ,4Ce ?!볟o)A (Q4Hu`Aسb%|(Q'TأS~}BPVٽ|ŝblO+\[y9RǗKJժ"u FCʣ@fBrZOQ0t}F cT/u#=qm t(@RGŘ$4M.L{i{_7RЀβ-7&6\'hEO^_b-/Hqa٦߳RB;4(nWÜ)@ץ VH~ 'P_va [$;ۻV"<8`ȶAeIuOETIzsP@B]Sl5 M Cֈ3 33)LP$7B7kW="v&Ѝ_ #x\qvS䭐q4]Sv*$$5|伥8,h M7#iDBێj4YKo>1v)ZH ;]uYr0eE?3h l uv 37՘pۯH@[}0B̂k|5hZ]Hhnkvuj~:xN:pk H&/CH"„>_F:nH%@R'p1~}|{JzWh(;L"LN u25+zqUAFtyN4xЗw}u%]0FMPjgBULw7K^,p*J} -JSs'Aٗ8FjajhGsg7󷫳wĻΎ;15tWdPn]1>}jj4ZhlD++ ExUh:IwZI p/01Mmy9 _N)5UM2Y܃U 4 VX[t@-]7I 0fK1VLGI# 2_a]$Q'@R--|qdB8)v/c^$Sa#]fBJ;xE.!Kg+~ >0sendstream endobj 36 0 obj 2864 endobj 39 0 obj <> stream xX[sۺ~CuLyS'ib2Hb- EQ~C Iɷ}رv~!e$/X}9B~~+|vKȼHI4luxH̶Gb.?K>wR5k ?MȲǁN$9췣0!>Gދo/ff?pRqF4|i? 16dz7v+8$> /i5͒l":XI%[\߁e ؆ EU,HWj%c˥ÆlBQ Yjj.2 cyh]! h0ZJ$%$BC hp :ey0bh4J0S$sl,.iXm)98Ԙ׫ w1Ny &MM8UߏSA6ƑF;IRQ|6uӢukk[\vJۄ"2fMwzbQpTiI׬38U]n bM7 RKQiF(uyf%mK_՚+ RP3Yh:*~%>!vʭ}־:%4Ґ # XxӫE@ !EWQ)52p:ǩDl*cPa13jvYnVu+E4{Y _C= c)OZ9JZ>Jv]V~u.+24k pocP`y#81Dg =Ȍ&AGlu_/Tr$< (ZmZԟi(T`Gyz5A^V7 qty~Gm|OXCZaYcȷ IP2Il8Ex/Mq;!XlKH tFs+l ,zRYN';{[+=zy& MPVx^_]>Dtf'wjK (,ϴf4w_'O,֍؈fi6 lkhr.3p78A겑-p/"Y9U7hVWȚnLՒ^/WT^CG,[Қ@Z5/{K80>%l8EV@9in*mVZ BY jdJ^6bN`ʼ%dOm]r ~QMQWB[xɊΐviBxجZ TrԸ@E++?o*]a d楕:h޾y e߸S K| MUS4KWɜp%Z2Us`_deM%HbP7oeN*u!ESr ]ZP'̺os}'{l6צM2%ޅCRh9IumV~R ,] XK##* +Th$'orhqpz[D`Q ?Lׂ[q{Sэ٦7nrV76"FsPwՄayOo%`ZqH*2`f \zUޮKY(BJtmWMa_s:,XnSx脴 , ǭ1CMH{GG= 8@FhH¡90ͬl]d/`),r#$@Y({rd5>o }iuW9Xd ~np@lj MC3= {[MB 8ܕ_3 !< ]!#LCRw 0v1苦v0 ]׷7f͇ 9Td¤a8>p\""%n`;[NB u8Qzxb0kws#ugvfhb; s8 .sf ~,128xF~ UQ(!*EOLSh-J,yD ,Mii v:l"WFh:d[p0~eh~6aw~yr=|Hy \7NpZ7%*'edӥliPK T+A: ]7(3ܺE6FeBmݸ1:9{q쵖qZNmP L lhp,(N(5:\f3N3׬ң8=5lKA^e5u|{8d9D!h4s^hsǚ)y?{v,z)k?hFJLi"]feTpx}<2fR^6(ޭ]Z JSK))<C;5 {(ۯ$%`AΐhVp%> stream xYr}WLecpHt,9TcT92i7sz.Iv>+s`.c\'_'_P5k6yu-=']bũϓe|,N>9)e>ݷ7ݝMYY<әλ}s>#-'.,rբ^l%lآe~N.4ohY+OLeǡVz!g˶{ɪcyu+o&"\U8Bhwa:|Y8n[^QWlݷ{C;vt5R{^ʓק;OdO]) OE6pN^al=炾YLyF.puY,J1"$)rKn?oKu5N8XR^]Op#^Jl=‡OYW7WWS?t>\\LNv~u#ӐR_+jt3" Rwl7Zve*O`d7pmeY+DIM(OoĈuO.FC}C>9"'t Vywox dn#$ً0z$Ͳi:\}*Mg\^M폶ɀ'7:ZU;gô-P}pDY%) > D‹8d%6eK-ǔD)#4r.ѷu)ŘOp@^i*!OMyo}%Qj OowDB%S((Z,FY)a4rҒ(ֱX佒~&zؼټ$U{J>ĹB.?ޫTOg)Z)%cj?~1:1XXPfqim)l`;+T6]:"81#GCW: ʎfE5G̻\ÛUݗK&ZE:T.Quf+MO,dW}z(n353 ݪ0n)]C$Ge^Ԅ75"dLfQ׊P&ݪFvux츋wP0tʛa?G:d7,t)HՁO`g$DGCPiFKS&wCUSΕMRyzq"W]6MMV,H7cDTiAhŏ?9GL) lѭs^Rc}{h2lwyߨvFvѪ4]\}A5Mwi{-1Rڿ't(6 } O ( ?ף+6%9S1JJi>¿@U_}Q-;y;~r8c\1;h Qkg6;М ڢzql( e(A@]0K=tGb Q\Oac2` bw,Km-O5Ѻl Ekfټi[$vt2ZfmF W=LHE鹬bGq~^EίЃ{Jsy |dHeS)0EXCޤlRGZڰ`5nqgv9ZLm;# T6Ʌfe4W65H8 \40Doќ:>/ ЄF,ahkT1ZS0 Pp>} eVMT 0?|T;m&3R'+5Wfy> stream xYێF}W4*1d7''^رw,cqM2IEQIJqX`?!u9uT\_x-OOb+~Xξ}dg}Hdfb2pH,No[wNͮ*BF2y%.>9olq ,X,W3G>_{ѧ+,`\8̜]U}u(W)Y跜C;i)>U׋Sbߕ==@D&t;?yW?iO;fwc{ӴgG[{/럯 ѕrA \@,|MvE#h.MOx?#lY>yOF6X~sNNmUjucD^Xc%\I>qSm}wӹWX}.F$E^ DSmޗMw|u@߆iFn5RgǑ5:l@Qh5rf6L{M,;nmjşGqltmGjɹV<na Ϳ)Q6n"1޵'%"X7L]C>>N5i{hV'WWLԝQ;Nw~KClrpЇ\XA<Sfڬ rT=טWJn!Cw}_Β`0r#wD. _%w#cYsumPFƏMJ~_,@qhg&QԚau0 wja~\aiK/hj>VV&=sD^u r_LA=\Jyٹ2r,pHTӶO/H.ɉAfD× 8ĝ ~Qb9u[E#PN0FqѬoߩ[*/FlT)dlMx7z/ODn\]~W))`tOI枅,F]jH\?BPNty<>*/mܜ_QOi+`9tX"(loǐsNOfQ~E.4NRQ;~ %:tFȈX):^ӓcOFC]צ!h3'gL״,;;{pll]O|d@gZ^WV-6# }qZvcl:I+=Xl{gTǡ* c-+W z|/O2c7]CZٜ4 4pI,$ӛJk]yΥ[$\R|oSM m'w0BJx=ՉِklZ!">* s;&,Pwa(U\ C[w&&k\.:"M.JX']ѪGdɜͼfv@AYkbV+=0Xľ7);DdEH =Q%&68!4$ŀ:(~9K3$e:qwEzW Hhϵ1e[H?aacn]蓾b l\-TEv @5jĒGCWv >7_2؟$ƕ FL;ZVOlK=E s` 18^!vLҌ~$1?Ť&9MH; ͐. 24dm;ڞ_[$YO"7G'@!57Xv,evB%? IKz7p\ν}s}T/砘~uycs G%w$uQjH@eHE $fjv`W0/VOLDTj*Pf(0"(ed"|/CMKP˹ţ䄜mbj~(Q+?=C:3N&*=,ܴ{ XQM֏ҏ":s1ᮯbМFZ5}s3Aɫr0vyW eݾ7K6f5ڮ1.\U]l["6w;U_TJeI"^؍gz u;GۼƟNAwQe hʇ9ڑj \"}&Mv\Q#-u}w_ 3ث+1D%6&te / 1Iķ->wL7]Fu _^L /4r0N#a`R~"%)Vq1_#gĄ)=/rMF\/g?/YQendstream endobj 48 0 obj 2945 endobj 51 0 obj <> stream xXnH}W42~<8^%Z{aT+bB /h!BRSNWfsgۓ'_#_ٖ]qz\\%ܞ8-O6Fծ)+Gz1m}H.-ث+^v3/dՉÃ!r#طia,/Yjxrou {Uee^~%jzyʪHWfibYZҳG1]~!Ħ͖?Yi&Vk\8W%g%jҰuU gRf״zӆrD+;q}N‹[M_n//Y[{L/WY!M[m8dͤmBjm-?I/FIDz*2 ͪ#1MJ;q'Ao(CiI GtFᰗZlͺPj)*֍>Q`GL:E.#6s9i:mn󛳩$Bjy8ǎxh{@Ա!OFJ7w͑_]WHG y|`kgg iT6P׮,/Sr\H}fi{Emڰ' x@>[1Y,,Ew|~KE!a3AP2byu&B4 YKoY>x9&]!NE&SDH+a7v08* tvtʍ#|d, gow}t}̊nSξԝjNAy΋() shJmb/]tن'oXZ:oV "NS8a@_d+r1ex]C PeWCymHtYzK'1>lj'jVC BKm#JHD/atJò{_+(a @ YS/x@x;Zo'w*DZn-(ۼV;n/M~Gv7 3(֦ҺAtuZeG|Ǿqs4d пjl˃";,*?$$LNU.?+R)U, YNYu-SrGR5y7X ~/ʦE mFA+jf =݉$_hG cjNy<^iHCF ?/_6/%=inCt+J)Lpу m 2V[&NV9ZBv,NF 9YT)6vD$KF\M;3WDu!kbɶ+=Pf=^[TcsWa4t }嫄7\vc d@@RYD*j=ʠ(gWꗪrB#`tpUZ2  o=Pp {e:q9 feIkTnwF*gj-s?!F(x߈jj]i -{k2ãNcЄ$/PlĈ4 ;4DB&s˺=?)aL~E/fW\~Q<(Jl3c5f@duvuѠGQ]oӐTZg7W;Zj d8nO k6#"S#-$E,Q741hqTдRRcҬbCPA1Wl;Ptc8HFv ,tФ4]pI4&HY) P6 hC 0sl2r(b P\{˵'JG0z)hfyҢtݡrGpc-_T"Sͧ12^V㶾b4#BvŸJ`xXB?DAnӿA"OL"W'Վg:AY tKIi FW}'e6pS٭Jyouˋ4>N}d=]Kd#_Ziޢ1Sʸj<ҊwUV½HUGD6Ů[957p=r CDs^// CXޮ_P7z6N]GcV]to߿:_u|yq_B<'9<%i-oUto Ďqu =QH7#Ul&f@ш!zU }gJdQG-j1_I;ods**hPB_{M;HUFtk5٪if ] ȟʪ}KvF|%QpȆaC+jfCC9H+,Hn.J+ňFa*!(g0dX5Smd2.Ĉ T:\8ڶa*.4; >B3pCb`?1 S&*i?@Ș#G^Η'endstream endobj 52 0 obj 2904 endobj 55 0 obj <> stream xYrF}WL`8ɉIM-HE @h{z.<ÖdӧO>1{̥r{3cegyy$_K|dO3ob\'޸i>cE+7;gbEu+#[`EbF>3/ yvw,̕/|{zNt{7l->g}x'ўBNXn`H\S p_ZnI ~baSJHO)(mI A}}3b+~5*kU:Ǯ[*>kWoi1qiu'ڂrʒl)ȪJvB*~zH?Q4anLRxl^犁C!;_ͱdSdeӀcYZz0d @Eݨh ?WOVQ鳒GR( L]]^ڙ$HLG|()sw= [^|+]z^` _V(Bdb O|lpd,rEe>%-;J(Cv砙rEm!x(m0jvL̥\)n;$ \< s> stream xXr}Wo7d^TN8dq"=$e|tqE#g3< }9t_O~vgc#L'?1OĬe$$& !I_'j_K5oFs))tC GWNyg""zQ+0V yU%yQjI[}Od~{7Mp .&,aOi0\ϽJo"04k<̧qg4'FD; wYHElw<Y^ۛ0:bG7&zLŔ4= *#2ぉryQQ}=UTVۗl=&$n& Th^)h,m*eM/{MSD_J9 KZ+SA&'d[$m.vP2cܔ-64 ] I UD 9ךb0yeUyh*Fao6Ue嚼nUIb9k|P̽ۙH t4! {-*[7mڢWYT@P)҄}րQՐodtBI. I¾h[NA; Y7D۪3Hb@']<@?ajIӆ>MU+K[|;3e4v J&:>B y 4Ŝ|2!z89Z6p̷l CEJc\zl!w2?|~7?2ƼtxX\^iyqyG桥1~;|gMcdUUe<2@p䩇:U:!`d3e@#ʃ |[Q5:,jOWX_<~gt:4k,!wnN/?oTb.؁@ [8@+zi󝪀ϪΫ5oԪ* pXvվl$jaCnjvX@n+CP=/:PI ţ TϼL *1nJUkZ5U jSM=)r |@y &B6{L,e]#lu^hLGQ?= FW9^^N2^w_zP9RDH$ Uʊs=[d>c>>gm!+{ 螎@݁ݎhc LWe[+í}5~'\R;& B8!;u+AKU*3lj4-:G1KƲ 1E9B4 q螃wqY>C>:@XjաP0ll9`샇2) Y XvN/P3l$ia Qscv5T75.erZ8DV`@ay}s=׍EUa8k; dMQC1.YH|x橆$X>%uR 'H*Hk74|ϯkp-s<]z=wo&?Ke~!/aw?`2 ˫{ 8(cF0ՂstׂjP#{]cgOu"8p+Zhjd{wׁUi3\LN´jqBh}iK!' ñ* -@^pY@2,$lRmON1)2%4 &ϡ9~TeGba~$Wi/3S3'AHDyV0Lv,~H a{m"#>mW3~ϡ[N *S7fm0zX# cR>Xy߄yW9@\;/q7P`WE> eu< óP2> gw۬`Tk/Wa]@ '0eS?UXI & 1J}/ɍ>Pۯ4opIL5,YmMÞ{] r.Uۇ0 xgР"7a[M{=Og,z1{#CF1q44Oɯ'Tendstream endobj 60 0 obj 2402 endobj 63 0 obj <> stream xYr}WLe-q%oLy.KAn) E$@esz.Hkq-ZРӣO̷g>1G>3%=qI:Sk,J<',ݞ9퀥/g|lDZջ}MLn`[7Y6Օ=B6ſ>}z{\\Ξ'm=M|Jgzǥrb%˻~bnێk :~`yվ\~档^Ηu~X?wlU7[ &l]S' yL>(o?Em8CDmr}-Ϋ;+'./oSpN Zx_":mmYvuYu~_n[VY' vMY=}iUQr#>L8ZT,bh>n bvڏ-,#̍HAMXuȻ=̳* lW]ֶ/tuSuֲ#8,Dq4 ثW W];4xEiIZb}/.+eDunGF/ ʊE+m0^<'ahdGu0{nj *INw)Dvyr7gv$xtqqp5[LBtK .!"o…p NUPl6,p^5Ν]<\^_m]Y0nǺ&ڕhsdDVt廅XI\x+o:M+Z𴣶+Mpו< )~5>0W}^βcϢSA*h _;Aҍ)KS/e幪Ä'C)xVQԢeU◮A7ȧYJ%QQK|Sm*l㷤NދcdT{4νJSi~.Y/pk`#)| aZ)+d$,CJGe]bRw\ןň78I =Vc?W@=Tq,ڿ(w#mP?9HIk^rAw:.Ho]"o V%DBi'70zPd8+zA8 b*@{u/_ߜ~mو{?鸘M[]ҏS0jdL @eS )oC"'$%%ҜR qlDN:޼y|=G=%)ݑPJRDW68xj̈L )\BоL:mtpF :oJ@_zLf#DO{ђW .#G}O!!>wqk"Q۠YJUr ryUU.f7iZiuz<5x͑I,xPV]U+'?{$TݤQ*>΢o83XmQǩ)pf~u4^.e|.JT$D)NZ=uD1Lk\ ʜ'erR  uOfc;||H'N4QTil/ƀľ.k/{q0kD=22kԖfuZ 1l9f)şfoՄ`I:)݊ZzUb Lί9>_#] nhTn;@✶MjRUYy;ٯq $'Z;d^8rm]0w o[]1\[uw=[z(b"2-P#|N| 5熚t6 /c^= |7jut95))*Ez췆Fz ?bd!SJd :9J$|׷y) O9?K|o[?%FPx~I8wSa7UE.&qΎz3fR[TOlAMq4(W84QZ KJ\HW _s=@E!Q^U^(Q RMG]lF)%m[>;m qH,U%Q%;dNsǢێW;nt aĚ`J3ʨbhmLqȚP&R-8&deec#u' ˬ*Nev`@KeԻ ^EB; ; d6Nqj> stream xYr8}WV%ybe[&[.Z"N(R!h<ߐn\HR>Ô">}D|ʈ?b34D~~-6t7t512q% I7%IwbW*kV'OI?:+wYAN9w Kݛyq q\׉O`.Y+}ξ8Ig`%&ۺjE-ZLo]Yw? # Ur}x %%)Mo{F՟Lzn>/ >G&̜)mH]6|mM>YV$#?!Lviu)Fs1=Vd1u%[nXgHL qvFbT{g%|]%pQ ]_9w7S$cܴK|d\>FG~tG\6c*2!۟[&2FȾuyQX Lti~5:{|?OhsG* !?Y_?o fm 1H`HBm_t|Lt; nL1 94t%|7}֕Fee%7wdWi#ƒZz7>k]Zˉب;'۵60Pf[ J&#^@٢*!;*#4sC*Ny*70EGQwPCҎ@$\TAJN MU%fP#ɖme6{fb$A'59JVENF{i=>E?7s ^5=F1\yfcJG>h@;/a1?™<()TuсY&+#`C2@t? #7vdVhPcpщ엡ꆔA?=q׍|aK 6ɮ%Y N@(p@?7<.ՒZ_yWנ۽tb,A@8';n捶1+Jd#:güX3ؗs(1v{l[@#ADz8*݌#*Fnu9F5vXVFO2\+[gSY.\BWBB{LC~`LG#8%RꅪAB<* u" c)9P+&^T}}i/5Ci p`!;#_8Ⓞ^({qp@f=C+ [&  ?f6F e!8ҽ!u= EN82X'I3CI/^_^__W߫P %BIDxPX7K2q7~yåxVMz8vxgwq1_qwj6ߨBZe-K`#H$#j l GwP o7]/^>zy4nK Q'&xʖwWF\Q.%e3c!迵cpeЊE\CKIGp~|K=h /_f!ήdF%軩}F엗Tx-ZP44K3=b'uF9_rݫIr7&V! 1! K3IIO#~d onr=`eǑO_*Btl_tQ@M䉤p ZU\Mű9O2wKfJZͪF Q0li$ dĒ7]{js}Y۵MbADQRӛ\@%hL-[9OP"$y`pߗ:+tcn5O?&cendstream endobj 68 0 obj 2628 endobj 71 0 obj <> stream xYr}W1.40E8*%XLS7sno,v$%esn'>/>]|b|f*jOo}.Z%%Y[>\/bN1vգc/v7<8ÂU^,mÆ ylQ[h?y#]Rc|XŴKA_M_n`*Zyu9P,tZ?9*6HϓP$Q湞H lA+,_<?bն@FP #L=7\i*- ˋ)'/QAرz@%C*ՏۻE9?&UDs8RQ"OCAֵh6bC&U(ӱ)zr9l;]~@T@K{֗]ӗx{ywv?ͱY[qج`FNuY_w"t?dx~Qc7=4n,M_\]z~}}Dl΁AlpM/4vO zYb!@"j|G$ )<:\mjbc萵`k+pCzX\pǦ6SEnc>QlE=0eN}\1~Af)s >ݞ*ЀC<-~WkU!IۗIƒ*o)k7W<󆱁T~"b }gEtΔ ;}. N#E'Ƨq"><( ȷW"0%GuѲT /%w KO#5ct֊N} hi-yAnGK䱓xs!jDވvA`fv#R|p+H($ɣoPD帛cD l*ƾز][Tm9AI2d(4k)։Ee1dՙ2@c|ludv C&d3Ŧ>ڠD!‚ T=H:?T+~=78IL6_pHvS;u[YwHx!Sfnnd޷ &014x@chҥԏ$hA"'8} JG)')~٢|ttR9yR@\U#pjX $4>b /GyWbI7DjpQ}xH LS /73!3E)תR:%Hȓэhp7y%DY$\4$ b4)y#VVhZŜ5( ǟg hqZ#Z`d" #ۈ?H_j@צּ o^ܯ^]XիS @[͈ rQ*Ύ`4VDw{HaS)@D\+Oc$mVU9F򝜵N,q v;܋ėyw~u$}zvplhS>?e3MߓXF\ǍbRh]/5f;,I*,ȖXsUr% Qb3RTt`x{/J~~{uG߉fٽ =okټfb#$K C{ D|P~M…RPt{l Umԉ~zOS v@1jL;O-lḭFݙRvHgՄ34*N~> (n#T+Eu$XtA^ZwPqeMz8ˎR W;d"}ھي3c?7&1=nZhYwt"_GPYc:anPTgR{4 Jg3G@#۟_B@٪q{V#h(iׂ~L<7/;,"$uM؍䧽8ik5SbS7O9B7˫H~VڪaHGg9U!LhNΕE& woxjo$ƢB6@1*mTˠ SxҘj? /%#ӷQϴd. iՏ'wmߗkQC 6qq"f78Ȏz0Iҿp}[0Zs-NsZ <Ɂ^teŮh0ԣ,@H3KL 7! 2@FA|Z*4@[hV鿞p균MY3E:5TX n^jyDo%xpJ}7PgKcͻVH$o~7(P>FuY;;r`kL"Y}~D^/Ͽvcendstream endobj 72 0 obj 2955 endobj 75 0 obj <> stream xYr}WL 2'=o5wDJJ `$"&0N\pVK*%WI&s3PFѿ a3+ݐ?]1,&j,#!'a(&̈́q:>Y'7Vw"whmsk6Yr߱>$.Y#,:ŧn@EhDU&߈rԷ6% !HKҬ' y  X?:\-fz9NSB^Tp)猺rGXXٟe\rW9 $ Vk!HFHS]-H^]lv&6J$t[Uߑf78&u 0a-zt~ʸb1!unÎcUG-#j 8H:q9zs*Ā`G7֭@ Ƣnh$Sw!FàWř4 ٬ZBnd$Iu&H("]H_% )$YVfcT맼x$nHlDMxTA*fXi&e>UQ78_.K^Fo % \|؜3Rvqd38bKT5P>Hu ~b9qd]v3XO!7 S8$=+Y *E#~˩4~c0Pm@32½DBdHz&1?ԇ^Ѿ*ReR&D`y o.rsCߌ!Šk}YVB3Ȱ,f|yM _Qeg ȥ0y.;4j*2j`lKjqoQA#&/X7muT#NKcGǵ&AzzU Z\2aba[t7UB$IK ڀ*p\>HPSH_$4~cfe)> stream xYrF}WAcGcSRtR){JMcH} ceT$v傹e~g&3#߰.&?,VVcq$eDx>wCx|p)oen[^:Jŕ-~%{;~K}}3 \g1.N>cUrźdyv5[ʩ:E'YU FAΏy>8/߿߾{wu;S!Bgvy5u]NѲFv}S%.=9Ä; ߼YS.oթ( O|#dtKOSڐ~ۖe{l5Fva?K:0ibw,:vkJ>=4rdf_a3>]I6 evWJEJ<8ȟhdqrn_/#rD6ʔSO}?Z .Hg\ r'ˎe9kYY:}nng X8O}#YwI=YЍ2EMI*6uWרTVuUrG'̌Q*Uy!+8\-]Sa[<(~p?&)8[<R{&%EEXr|m{g Աv2_W^**QywBl3.Eϥ\eƀ)I-x#,M4l[U~$S21jf>%BugerT̷EIRr;Z \a/2}7t Wޏ *jI[֨"Ě%y-<5/@Ʊ~}pβ)]+6 !R71!e䖞cO WQ(GTfD0{[(PPCAOw4-RMŢ=}$ƣ1S~Pw]h(]C) %UWsCjg8RjV1RHp*:u TWkg}L8W"[339K9L :.͚r%:1adcD:g#D.nA c2L;H-7VS$"FNԚ2L-oFI͗eɶ-z2M(azqטD^ x>E(bMW57o]A71}ِOm+$[;&--Y~u֮Y%IIxoJ usIHqYqusu2ۚG- hlbq0M&sҏz lkv͆Zro_Zm#9UqÚ=m]Ch$մD͈INAoi8{j@$fJklKQu&Py{^'Eŵ^1<{lٲm1/p}zٜ`YlpGg\PyquJ|;~ujGr4pR3 PTbO#%[5FEL#nip_7ʩ1Qڬ HZKDީUE%Z\GyC~Nk^ 1WK?wl< UkDLg }@ aendstream endobj 80 0 obj 2559 endobj 83 0 obj <> stream xXrF}W0oMȖVJ[8~e{z. H*/OwgcggWa?/G'WA@Ow#s6`YȲy9[nFAq?aصՍFɮvU-ވz'*Փ-1YjʢH>Y1G ~f.H KAo|z:yΥdXuk#[!MYNVtkVtu6[0 yFK3yd[쥐f)>Mߓgg{,J ʸ_S0f(IaK+Ua/k]_/h XU,-0N$aqcbT -JXbkIX,` ֢Ӟ)笨DQė {jv쑀uμ1IhﷵY-!wt}QJhZdt8J+/,S\ɺ+IXɘj&5Z$~?*!+n.z{q;Dk DG#&QT7g$pj')NgN$NU#U=6i\qlu=E%Xљ')G߸1%YGSW70_۲z]uT'&|ǹvENS>;ܾhW;5wZ.b#ף!AIU ͮB6.$xSGSWHQA78 ]T'kcDg+rҀ# I12FChNaff,v-' jTz-M3"˲ X~e`Z”֑ir&5^.Wf<˝&YʣlvHy~ }P=#jhVpJU?"N46X+3",Ga(ܒ\{5Cڊ% PT 0p/I,elY!i7`dlkB*H~d4iJ# %ɾ_[l=-bڭ$_gׯO=9S6#/N 9ړSxy~:~xe3+љ%ݹIWk6MIņF0bmMnTWOy$$aR0w(3I(]yLy1`=d!Ml.^u|4Hк:{!h! >]}GAbP^=Bȃ>D n|@bz fڎdPԍ֦F8bs]Tj}&(BsV;$z uHKA/Eqj7,:bc?k砧u=}O5A:|,@ go_]׺<"> "kP`D>ii;B_yLfiGIO߫kGo=w,8pwfk̶Z7~aX$ԦW`dQ|=>$;?z n ,AM鎟Pw1'8Պ'O,DzANKl1endstream endobj 84 0 obj 2625 endobj 87 0 obj <> stream xUn6|W% ≔dIN4Q-.XE,:$ .I)v>,\P nv?֦v?ֳwڕvc) 2!E nFYB `;n#~ha\u]{c7ˆeq?#?m2%ԫYluZW5˳e8?n "ʠnW+ t?DJ_3+Mu z\V Bi, ۡnZ$O 3~"}R 2B駐bYk1xl1Y;*8]]žѻ[x,d{* VY,ƀCmn2}od/4tM* ~㛌MRgrDe / 9AaD$G ̟q撧%י i=endstream endobj 88 0 obj 991 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 22 0 obj <> /Contents 23 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 30 0 obj <> /Contents 31 0 R >> endobj 34 0 obj <> /Contents 35 0 R >> endobj 38 0 obj <> /Contents 39 0 R >> endobj 42 0 obj <> /Contents 43 0 R >> endobj 46 0 obj <> /Contents 47 0 R >> endobj 50 0 obj <> /Contents 51 0 R >> endobj 54 0 obj <> /Contents 55 0 R >> endobj 58 0 obj <> /Contents 59 0 R >> endobj 62 0 obj <> /Contents 63 0 R >> endobj 66 0 obj <> /Contents 67 0 R >> endobj 70 0 obj <> /Contents 71 0 R >> endobj 74 0 obj <> /Contents 75 0 R >> endobj 78 0 obj <> /Contents 79 0 R >> endobj 82 0 obj <> /Contents 83 0 R >> endobj 86 0 obj <> /Contents 87 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R 22 0 R 26 0 R 30 0 R 34 0 R 38 0 R 42 0 R 46 0 R 50 0 R 54 0 R 58 0 R 62 0 R 66 0 R 70 0 R 74 0 R 78 0 R 82 0 R 86 0 R ] /Count 19 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 33 0 obj <> endobj 37 0 obj <> endobj 41 0 obj <> endobj 45 0 obj <> endobj 49 0 obj <> endobj 53 0 obj <> endobj 57 0 obj <> endobj 61 0 obj <> endobj 65 0 obj <> endobj 69 0 obj <> endobj 73 0 obj <> endobj 77 0 obj <> endobj 81 0 obj <> endobj 85 0 obj <> endobj 89 0 obj <> endobj 90 0 obj <>stream xx xSպv1PL($L*322Z:ӹiagڤIڤH[2  zDq<ճvϪ+yn&yw^{}#c1qe1390K8kmyzA^ҹ# z4e?VlhJ 8h}a0$5+Key9 3Rla̗ͼ &H,a^NQ4"0|q |vnBN$Wٶyy%% 3Vܹfᗗ7 %l*^!aKV ,᷻O bņeҢˊ3wnZQkUe9I[֔m}["?E\mp^}1%gg[4g7P,YbXI,$fSD"XD!#bb.Y3Y?`|m0L~J֔)|t-O?8z 2pP3żl@Peh&4Ioت!)ź׈]+JxWVlt 8zsLsݥJ^ Af gQ~8-ec#%Qgxdp꜠ 9`,0hMkd) $ pcD'h?sL~wmDKCѣ@(%U"N @P{>S HL&*'qwABpkNeM\$J~ڭ k1$/…r@V ֚cئ1Zf 2$ TeK)t!?qF*k&4e߰}Xd+LP0=aVh&gP]'#|ǫFa Nrbh YCڏdC@2Z&@聖-pɽݛы(MCs_:w.G+<2FqI1O|zPBϣD8]l ?4d(Ec@S rd*)$@ ˶qYeަ'L}-4ƵF|Nsʣu]zVspً jxq÷ϯ,f/G4ɴ&F5$7H-&$&[0U..Jfg>F;r,6ĤgM,_NbK d{;^r:ui: NW@bwua7΃ğcnQ@ mju/[LnYjC#a1?ZuUg ʚ֢tQ;1?C~C.pǽy˶ yyϓ(B/Ā|/s"~o? 4&2BzAFХ/(8l#EBPJK-p`&jU '1=  Sլг#A Go`@@sмWR^kW|>"?M_U9֚e erOAm_)8<~,zf)z|#0΀1j u1o"{N6um@i5(vC >i0h"z %WIzx9('KBҦG?*ҩEI5vE ^eGl? A/TD7GzGp >2paݱL1NA W~~ +7LJ"UGAA*fi``6,rA"ntK"uRfw`y#5{ۂ&e! u8._nw$A/Vγb  ~xb*-ALK])Hk^Mۘ`; Ł=pRmAxk Pr-28+ ( -=SZ _r|+lމCBs[ݼ{w3PBAvn 7پàU1SѴ:c/T5?sD8C%Gz0O-ĈIbㆳ]?~gs^2/6;(0ٰϼw4IM[7Kdc*@.$<_P0ɻ>LW s3 'bzр.|7/1$\?|9] `@)<Ӳ,HGYyQT@J%A@~'3;+cW# D Os{6)t*HC<7n8ʿ? 368 ^lbz,T}C]m}ov]=9LqjLr7W .', p^ -(ŖB=6WYoe%5:AWU nr :1vCe G6&\aqܭ!MX,.{}LFFtQ'.<ڸ( 6emG_%2|Y_Z&ehr Pmjh,J(l^riekZ\OkPeV类󺕛VU&Xh@N< ;yk#\irj<21 ȶPmG$R\^"/)OH29AXh/Wj-U<n@5R"t"*Jh="9}κt$tg v@U&K̼7gm/P*H̐(=:Ōus* yxeK @v;:K H_{As 0]5Va2$-N=ktu|˃ =U D DysL4:ez1u3>$W[N!p?3JrHA;8P[azM[-3eQ BF:3[ -YU:(7XAH"$7H Ów&iQYA)˵M_2\:wP=YTh!"n>{YО]dP`:.rS&SwIKE}GYb0h: G5*5 ^ }Ww4GJZ2׭\͇OFg2SYϓ7l?m5F1 cj5+ "?ő?xݳ_Ƒ¯RJ%HF]╆3-3h1V}qHrv6pjz:p8A~ ;38Uzѥj2 %3z-.9;ArC0{ǡpo8 Of-~Om(֥7dcbw ȑWʄ2M)i!r ycdi[տ[pfLJ%Vcfnp(ZS]m-)ED+:J$RqQqiȾ@pr5p/iO +j\,6tB'r3[٣6;Uggظ3_[zXf&o3WVj6kyB].Бr+|{Okut>`Ftb`drzF-5Z@rupβٿ$bsGAp0Otf ލVq$CAq)N0D(Ώ pΥs9)G+g**Fv{HvW,l )K^_Jjn].)H#nMZ`<6cLwCuUs-`jd'[ !Z~xׂy_kkpZwzoRחykGn+}BOyQэT!9 jXY=j7hn\x΄] O4>\v"nu*Yj, }w1+0&W [v}x6vs Ro~i׎|@UJ`eMe~Ta]wu^6z+]R2V}sL,~QT1=6<6sۘhvi!8Cύ4Ų#6!5Y4Ln7g8T^~ FyβX-2Ak7S9V}ߢEwtY(?K 4ۘ=Sm` U9U}h&H"zwӷgh zҖB\YAT߯rE1+sYmv$ئYuf1Ye^H}vf&eZx+/FGvN:pVsm薽nvTUtlJ'_'vQ}J܅5HKAgna0-:#7 7x உImM@cQ ; 2܍8U*?]"RctW>gX`s؜6;ISfGp4 ;vjT~էЃ:^WX;K*;fz(,F˫Ʊ.f%E>U둦obxsR/˄%y"@斷)Q77qɠ/IDFLy<"~c?K8eEMe͍ͅQK0N@a:e /;˚ {lX&lHܯKc?dqKGS:s5nK5t"YZ>@áP{ VhḾ %8 t,>=)9Ei$Dom֐w+L9<#8lyUa}QrS7/ xNA:Xu}2{ޘ? NΏ+/>; c:w_ pD؎SK77k=8Ïp,{2gaMV-AqMY 4hԟ5k>p tּOƉJŎ=} ?D endstream endobj 91 0 obj 7366 endobj 92 0 obj <>stream xXy\Sg־Z68ֶ֥K]uA\*n$HHI;/[k$ Ah]:֎ZmN۩vюN۩K_ދ7f>ܓs{<9PSPuRkU5n 8f94V::S#OHL ysg ;ϯX"86+ZyBJ*ZG-S3(M͡4jJ<9'M~S~9c2 [Vƞfvoz;3f37ά~hC~>~~#~??ߟU\# `I}>"sŢوwmB X_)wqi-[-hxAS '3dKMJCA<[M*/UUJ)Ss݇].-, l:^[Yq{)ڥkrQ GgZ(p3*dPeummMK=M]\ 1[^DBMn&"g#Ta2s :"| bRsbd-c׻c{*ǔ?֋mc7|ϙ$~Y~^z=sϢ +vìͭCWY.A;|pBrJ_l8(P1hѴ2|aVX:)Ʒ~.tڎhŤ(P7֞9,])0sd0S:(oUf=4I4Ȃ 鵬;@݁^h fK}D=1m`'B m3žb[b&[ZK r 6{?FajI&됇a uO+פ&k kxIa>!WE+7T )٫7PȀ cmoRi0UƂke8#мMpM)㆜Зm'7ӯ;tKKG "ZN?MGT쪉="3mYݩ!/F:Z%_qHt"}G|;"$7Lq14&kt 27K̷t"y%`MX흟a&幙*S#c7pE'&DzCCޡAyO4z^zf8=Ar2EhH:&Y嫰c[aN/cܩ(w':RyΌ@G3PqI4bލ&b9ҶN!a>(tf},7yr!·~qϬ=Z[V#Y s YEvw{ *'r92E&⣌BaV!6|KqȳYyq4y1Gur?yvC <~ZɈcHSյUZqղG$Fv>+Oul}f|(ZNR t&3%NXI4zl~$=}rn.h3t DNܣqa fYD@~|&߻"/3gr%ì7I\?jk.q?wqk.âuxs\bE d#[݊X^62KVSm4,ႛl O <Ëpcg܇{W.4:.ƔUԡ1!^3F^9bŠ~kTd9 &Hk \u2R:ew#t=κyby ݩ{H6),A)ʲQN!%/rsK ϯqHO,޻&֭pw74Km1poS2xF~L D'gȣtsmq)4:},?'R+u&-b3?dr W ( eH[zdB*Pf/#JÌyvCv_ƪ&;v%#Ҕv| 0ssFR0MUGKe)8AWU0Rt跉LuyZ׆L6c] d)T"#)%_!ݢ:YYƯjR[ij- 2f zCFAu2x j@Vﯔl+:Q/0EVXrv˒WqXSvDyEVE)@ɇ']} 1d&%|^ͼ3hnu9{̞}r&ǚ2{FZI*>i2Ϯ 1|ėy1{Niږpqh+PKցNn'l ANܯg>9{"h( ;aW>dY2ΩMN;7ЀɛĨ;O~1\A/r>f }؞Xb(S@LW]EvTr‬<0%NKga grTG<0 j-M!qBTX=K{%Z7񫢋W'`GmW>ݿb<Wm8gj.J=ot!껰ɩE^W}`ՔW9k-ۦqMyJ8U+K!m^o3zU |k؎WKWf$PD$ÛD^3^پOq$iʊʬ⊲rT:(Ǭ \щ}4Jl(Byld_鱃25B*TvrwXB_xԚ0RۚW?F ]t-?$OgbmZaNYg*KV]ɍ裠S:j Aw^8WߒPaS4ߝ/fӸ%f6*#>vsx"' =`vմe '_̹ :q !Db!x;s&|v endstream endobj 93 0 obj 5423 endobj 94 0 obj <>stream xy XS1{Z45AMjUZyEDe&$di1)aeq:Zz:xӵ99{ ܉CbXJ%<'%.b#!v'B@L"%$VӉBb 1XK'"&Lb1# @ /|/qsloB#'^5C.7}#g$ś^o;)aS~9[ߺ]짅Lؙ4/w{@$hzwv%\';1cm32gt\>sԙzsbV֬ӳ爍b;DHbRjaTWp@W)Cz(ܨ)h0R *+{O[Qk4fzl/ժip#oh0B^*ΨUp0W_z0ׄI$::݉>&eJ%Ks͒AZѦXeg-Ԙ !yS 9a02Sf,cA25! ͠D*-ڂ ](Kj6]RuL\ %G/7)󔀎OJ oqZ{[: ֆx V;mutɳT:ET!0gqZ,mٍB+:'eT~BA˄h ڿttVrS`u7<ȡͷ2 G(aY4ߖtYZ6'g B!qaUgy`*_qG?ePIYa۬|uE3{1H~AL'if-HͧɈi|n:uV''I]V\kuՖ^{8q vF^pOBq8u;}E;ÁTdtgB hf9̧p@1&k"2,HLj#BeIJr PL"G<372K9M²o09$@:.@b4{7(ޑhdYwp=/prKuo4 N_· o3<%M},ertVE*4m hՕ+5'l 69u"L zNGBztVjiܧ'_W v,(??0:SCKŝVsYqY^W\+2-)UFRcFCd?(K9@ʙu7%zqA?(9/&Icb6 UܧpN<6 Zy)K;3<Ǵrv}U<#K7N'FXd4K e%tke^&1z?<4A [ϺIF\95gBs3KWt,2q *:",MW%+%VzP \W/syկr+~ؤլȏ4k;/҇~8hFN>2`j{&G>vBpr&^wvh1?t5U>O1f_ZttMAs'$3>%VB]QZhcG}%q}j<\ "AtqRUDS5p濄}v%|x*|V_1\a%[&G-]2}T"<gk/v\A+ƅ8QZX_gxݡVI#c25W̙QIxk! {U]zLd"šM|)-7TE`ј' U:F)K=Aƒ b8_XBב >o?Uܿ4$ǣ s) rK]W A1vjq jk.0j?PP/Kf@Z*]|%+ j ok"+ACt>b{--ɔP(.Ώ6lrtm.+JcZx& $RmoG.^~ﴸt+6"A3'¢,SV.f @'豴45ZIДVna^f8 4!n"'nM5&sI [rqeh?8J x#\9/2uCj`o7=ww}7Nh&y5S||q;5Vܐj8X0^U@oGG`Py֯u@<0/#=i7z{l##A}oLL`PU * Xp l'8^mFǠBU/'W'ۘ%UjSWMxC8CVV:>G 0!!/fjwMZ<󓌄'UāHQ@;,\-'֥h.$9)Sq^N)LYfO`llH೑/NƵ 3Y4zZ/4-3r<1s,/}݀>YY|)Uq3sQ]70n^rôEѩd*/;0d,W1-PnR<~\T2e+a\ (78: 7ͥm >051M4AoSINK-ױk׳R>_cfcCρ)2.'ƒ8mB?&Ը mxrmp~#%w.@ ?44ՒRS*bw&b.$ _i ΃aywH=`8NI!&1gņcAq/9]g0@ͤϠCjO5%J}J`_(<%NWXm؃²4ǜ]DT&n j{~j1LHyDAt|LVTS_-e zn=L3pO$u:%~x ˂ #! T/j`vuAEDGU|7.u=Ip3 U2 ܞn5tzR{by'אdH8KrO.n()ߋVW\ Wp 9PGskװ%b`ݢaxy3Y縍a2[Oᖧ;)H#uXZ$dպHG#I#:Q4ʧV] 9Qy':JNpR9 ri*϶XH- ˈ%T5PIiSԨW("z u)ո3?q 4J2(NĆ帕rSn^x$VԠ t-ikycI#Z˫%k! 'bAdk+2^{^q]| 'Գ&Gj01 ȁ>SJ"cYF(žԞK[4ɨGc5( R @0-xWtԜKfC2G\8t[O2HMlX#9X+О Q>V,W( i <BOaSíW E, -萚*IjVk*d mT[H:.Q+W.RxUZG%\a,!Ew%9ȈF(3\ 9ovk[œ;%%M9ر#AmbXXgۓ˱(N앎@m8uٺ @ T8]+\㕃TL8W*3TW$7 O8gbWmSQ5jo8(, p)4c?e~tey 2lVW%^ 秧\+oY]mwk Wk\pu5O[ 8^ #z3 jm l@1]NkR&t: UI5꼬,$(ᆨZKz( weōK ~pH,?`Htc̍CU(32_p[~Ϲ]h[j :|"ګU,ҵ!q}u`.x_[* 6ޜ|ā_pvK&A^NaIOK"D"ge,)J(l1hzŐ > ̣^&Ii#jqGACqn8uR2xv>'k$.4Zd+sQ0A::\iUZm4Xn3Q!\TYR]* 0IDƔ SW5DR#Jcta=j KZ y堄%'%TI 8w+ɷ;#* *i p!zF݂'7aN8{'O6VY$vD^0΁9׹0v l;0ʮ#NNeS:Y6xS)Y.`N/rڗ)>yN J:3 T3CTI-eA#jjìfvfi\-7D"= 6J1rXHr/[|Dc0tt6.ܯ{m/Kqa5Svvؔ@62Y` NX]>%LtZ$=_\I\݀@дF V'4T77I%8\s{ g<^D!ϩreeTZ)OF7߅=O ϴݴ\Yq5b7pNj?Vȃ\냰a4[bWmG8xp:?}V72$~Z:2x~x՛[e݃ig脞W9ݰX gOa2E@Z^'W'[>X"Fΰg&6r /p/÷AC $@o.@SoĹ3h:chx @Rz.E :{ l&@rG:NE mjkjJ^39h0V0'A)EyHDD<2;"y#dA{|=ha8$C7A{=is_Nrwɱ V fC.d [ԶY{F"[x7qqAg~0X8!,Z?yԾrx@ep۾ D@6о΀Sq#h9i03bO# BA˗/pi nScNp_<1)y_ {΅n6G*/˩4Uab+REHدSST)@Vx4Yͼij\CyW0&535w9\Fg 4up5t藕J8,SE(]liž:Z? +/ZT 7|7fBX a.7L>T6Q7_,\KvgB"ɬM+ [Wd K+&k:1?{$C#8<ՒT-/ 3ubeDXIcI9v׎Bbc%RL5-8'p.6Ic]G?O8QZ.\uU}/>f~pJsh60Zpǟ1y\d*Mi*%MhojRY=Il.> endobj 96 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 97 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 98 0000000000 65535 f 0000055770 00000 n 0000081750 00000 n 0000055575 00000 n 0000056124 00000 n 0000055976 00000 n 0000055818 00000 n 0000052823 00000 n 0000000015 00000 n 0000003038 00000 n 0000081186 00000 n 0000079554 00000 n 0000080805 00000 n 0000079033 00000 n 0000080355 00000 n 0000078361 00000 n 0000055892 00000 n 0000055922 00000 n 0000052983 00000 n 0000003058 00000 n 0000005875 00000 n 0000056271 00000 n 0000053127 00000 n 0000005896 00000 n 0000008938 00000 n 0000056325 00000 n 0000053271 00000 n 0000008959 00000 n 0000012217 00000 n 0000056379 00000 n 0000053415 00000 n 0000012238 00000 n 0000015376 00000 n 0000056433 00000 n 0000053559 00000 n 0000015397 00000 n 0000018333 00000 n 0000056487 00000 n 0000053703 00000 n 0000018354 00000 n 0000021132 00000 n 0000056541 00000 n 0000053847 00000 n 0000021153 00000 n 0000024012 00000 n 0000056595 00000 n 0000053991 00000 n 0000024033 00000 n 0000027050 00000 n 0000056649 00000 n 0000054135 00000 n 0000027071 00000 n 0000030047 00000 n 0000056703 00000 n 0000054279 00000 n 0000030068 00000 n 0000032878 00000 n 0000056757 00000 n 0000054423 00000 n 0000032899 00000 n 0000035373 00000 n 0000056811 00000 n 0000054567 00000 n 0000035394 00000 n 0000038311 00000 n 0000056854 00000 n 0000054711 00000 n 0000038332 00000 n 0000041032 00000 n 0000056908 00000 n 0000054855 00000 n 0000041053 00000 n 0000044080 00000 n 0000056962 00000 n 0000054999 00000 n 0000044101 00000 n 0000046349 00000 n 0000057016 00000 n 0000055143 00000 n 0000046370 00000 n 0000049001 00000 n 0000057070 00000 n 0000055287 00000 n 0000049022 00000 n 0000051719 00000 n 0000057124 00000 n 0000055431 00000 n 0000051740 00000 n 0000052803 00000 n 0000057178 00000 n 0000057232 00000 n 0000064684 00000 n 0000064705 00000 n 0000070214 00000 n 0000070235 00000 n 0000078340 00000 n 0000078938 00000 n 0000080246 00000 n trailer << /Size 98 /Root 1 0 R /Info 2 0 R >> startxref 81890 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_strerror.30000644000175000017500000000130110265631023023735 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_easy_strerror.3,v 1.2 2004/08/31 06:03:16 bagder Exp $ .\" .TH curl_easy_strerror 3 "26 Apr 2004" "libcurl 7.12" "libcurl Manual" .SH NAME curl_easy_strerror - return string describing error code .SH SYNOPSIS .nf .B #include .BI "const char *curl_easy_strerror(CURLcode " errornum ");" .SH DESCRIPTION The curl_easy_strerror() function returns a string describing the CURLcode error code passed in the argument \fIerrornum\fP. This function was added in libcurl 7.12.0 .SH RETURN VALUE A pointer to a zero terminated string. .SH "SEE ALSO" .BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_share_strerror "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-share.html0000644000175000017500000000661510265631023023360 0ustar danieldaniel libcurl-share man page

NAME

libcurl-share - how to use the share interface

DESCRIPTION

This is an overview on how to use the libcurl share interface in your C programs. There are specific man pages for each function mentioned in here.

All functions in the share interface are prefixed with curl_share.

OBJECTIVES

The share interface was added to enable sharing of data between curl "handles".

ONE SET OF DATA - MANY TRANSFERS

You can have multiple easy handles share data between them. Have them update and use the same cookie database or DNS cache! This way, each single transfer will take advantage from data updates made by the other transfer(s).

SHARE OBJECT

You create a shared object with curl_share_init(3). It returns a handle for a newly created one.

You tell the shared object what data you want it to share by using curl_share_setopt(3). Currently you can only share DNS and/or COOKIE data.

Since you can use this share from multiple threads, and libcurl has no internal thread synchronization, you must provide mutex callbacks if you're using this multi-threaded. You set lock and unlock functions with curl_share_setopt(3) too.

Then, you make an easy handle to use this share, you set the CURLOPT_SHARE option with curl_easy_setopt(3), and pass in share handle. You can make any number of easy handles share the same share handle.

To make an easy handle stop using that particular share, you set CURLOPT_SHARE to NULL for that easy handle. To make a handle stop sharing a particular data, you can CURLSHOPT_UNSHARE it.

When you're done using the share, make sure that no easy handle is still using it, and call curl_share_cleanup(3) on the handle.

SEE ALSO

curl_share_init (3) curl_share_setopt (3) curl_share_cleanup (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_duphandle.pdf0000644000175000017500000004157010265631023024442 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xVn6}W KRWEl^g;Ie&R#S.1e;P-9̌^~|s"OE_WHzr# GCIYV;)vsy*7xt *Zx,>-GLYx3 12 qWOQ4! pqoc،f2("](xQ+ڶ$2sxţNth߀wRȬ7p}HY*E8߁8'^Ȁ1y,c]9&QhS/N+5 ,J ȨHiYhvZ4pݤ23.(].PU-1aVT}[AR(dwbNGyԧ8 .#u&9dlab|ߢ,׭xZ@b6n$<8Q1*%cXo;V!S# ĮACھO]l֣ͲR@A֦NEO yZ OuP+ХdHxĩJHBuUNytaJqYUO(q9TƘٲ8չ*qfpII^K2Q <*eyڠ};5b5^pA8Ϗs[ Hx'ZvLhԣ"5jt0h9"nSecj'L<^B:Mڥ(mˮ(ԶejbҲ} MGQ]%NPOġo( 8f'*Κ_•UwlgễJ(c?⒎uИ&6UhrBV_/s;HZ]zOR($::q>͠mסDuXyñQ8l-W?)F+Zd2Ph )Fn&B$ƅQv/*t Cl? v&cJ'&}ט ta˵aou4ܻnP?<ܫvy:cČ-)juh6;h<[sf7-m;U69  ]͗}y}Dľ89=; Vn'NysY"TüX O+} x4 Ku'k F } Hendstream endobj 9 0 obj 1283 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeUyTSW~ϘXyqkm+UJP@q+!% %$ld#/aQ Km]TKqU;m3sfΙ3̽ν{~͜8ljl[T ^Q(S)3cNHE8 yN AznV|t~jQz0)!~{4AqHQ4o[ˬ`f&wM]f3zuoZqm:^F-c0^/ׯ__ﻸQb ۳4m'"O␪dó7:a;f Yf#O6a5cBB2 rT¼vzzP̪5ʂ_ O Q\#N+LW[Ѫ# 9H`Cc=l{ ɂC%Ց$bn(k-Akh؝s7#;~.~}yY]E,q#vh^I%T D^qDZ1IM\:;f@olƻ u'…Trbvx&?@+"N}u?YD3+6sƭ3"a4hķ UzJMf bgG ]!@Y#եj#d,34)DcHo5<[-@9TT[j0Pol~sDAC(ѬGCS )}hP*f6pyUp .Bh ݻ<>uJK|6'Bg׉z *Hg7LR>7E[oύ$SC9!S%HI(1i--gJasTW%;~lD-kg%h 3g9:V8^ZɕoxnY[5+~Dw&>e]k1ed8T` QmzC]Ggf^#+.kwJR'X mc=6mEm+sE欪>f9u[ 'iݝFQVq&)A7yuxURs؎??;/+8hV8 jW'`c`gPf3/ %E8JF|FJŁP7:z\vKLo4[hMr~4-B;&AԳSw^<[oUcp<l endstream endobj 19 0 obj 2266 endobj 20 0 obj <>stream xVy\ڞŢ;E^.uJ-  & A@(Q@bKmK]m3'w3}}If239}#N!x<?eҭ y– v. R.um|Yr6 u/O[kߦPfdIA\x}rÆ AqٿmeiA EDPJ2^چ{Dy2I I^KRv2RmQЋ+V\O/R2AiA AB$ @Ē}fŇ(nSJoۡJT'̐ <6"n=W6R9(N,#ˆKrXA'V C."M"^'b Gb-Bl%ۈ7#fS-,"GiR 8~IEOMrk9S ?>29JmLAiM7={wገ>3u33Ysg>qߟZ? 5LQ#OJPm󐈕SNKځ>(; -% [ (;[tg؝_A{)#@Ԭ_A"gDLw P`4Ad4N\ﰾzfA&-P¤ Z_ N %%=P|~De|2; 6APES1P}z o!72WQזȢX8gGIOzS%U+V[dReD<|jZm"Ys =մ{5m(B(I܂bS!(b QZ KԨk4Pa7צ<$BpWJ.lhXC}bETÆoY gy+ Ʀzu}өw'̭EZр Zm퍽I=Fn}*́ .;  88g\ ]QJZ#,MgnWѲK4kRdc{U$=C$o\ Z.'{ `xne׿Z~F(̀, MhB4 yLHDD% f\wABNVa/vϡ3=5% ij+GslS5f0IԄsUo*m n([ s;gFdG$]Eŝ>p.(hu~ \'~ls%xDsKd6C^0yE/ d Z~!Y76ݐ{ȗ5u7Qk Ït^uo(&O3'YJl5:m"<׬m,[M<~,ߵX\zWŷ1>FgR%y%:P r@ޘQ9wuϊ}T:!5=jx~PA \hj֙W4u.Ꝁ~7% ֭p^t tv:VMcvka &@obuA+翕O7B9)|*@xIp3N[h j _mw4;]A0BD rҸ]ڒq[ 7r,ƒ ic4Ԛcۛ%Jϑo>A/5ü\W0?*2tM|ԞpZ9R{o\|㳳BUFA|;+r.q L S";dԵz&&))6ʕ<<pu8Z|!@o e LMӋrG3q8)(p&jb>(U=D<PٟNCuԛ̠4w#-`L`VzZ؛dNH" V{{uuVºxY4W:.>DajlQԪ'WOa-4G#+5ɕ`WΆ:$΄`S1'JqTl2` G(G͇UgޖfYdh(iҩ nwQT,Y̜Ѩk[6^Cfࢫ,uQo,( a~M*}</W~ k܃=qYjTd$ݩ+3uEr0]ZT(M0U)09m vi:–tUR-.XKjUYyJ@i5ifD|l0.R2 c+CiZ#im6XD]gu'-,7ΑgtwwغMzP3XZ:RgΫ/(N5tip-׈jj0KΆ+$!i@Qə -8MI8íUd77HG<6$W1\/*7gyܙR^۸"\I"!-p5fF_1@KF#GMYmBAV4XudC}>A%Rt=):zZ:6:0Ξ1(7K#RQGǰFˠ|U&$YvyĀ66CVufN?p–X`k,lFZHtr͘l3! endstream endobj 21 0 obj 4193 endobj 22 0 obj <>stream xmXwtW!K34C2T8;!) .Uͪlْn˽)L BqH 7ݳ#]9:ww~ h4=4 weX(D./"_$zF 侅sFfq<'-%5/hiL7/_ :&;A[i)שA8K(Zv<(%S$H&f 2eee%AK7f%u y/hOP#^&JNɃEIA{ ab`0-/GVp =;hqXPxP %?310lMFM⤃{6g sRrSҢ?dH3XvEʰU kB\a+8l/[öbbWlmǢX4!be~,{;6a{l.F8|cl Xl,JGm2N{vbcVCO?xq|#Vg?j7s >w\ܻϞ?-A+>66a$Pß,A丛FX6Zdvy ˌ%2Ԏph6nHFTxKq֪LT1¶e^BΗVdEyRinzW*rnk2q zR2!~%>؄|*62t}G&(-x9?`yp|=ui9z1lߐ4(ܤөx>_g6Z(_tl,ÃJA R1>1^THRp pkXW;G+~_eݷ uNw N+D~@ĝ{&ޠEe̳e5z tEB%zI8h)z5ϊUUQ l^Ne[T"ApN\LP9=p)\L%S[CԛX'IR&qpulJʹF݅u@3lR@e"fv,p STdh= Q@(:(ih(MJshX; 6v B^qˇP QuG'2NkJ2bN@E-"/ܝOr  &gMZ>#YJXTPk\7|k.JȉIǍ1Tu m`w\3a>.0hGE+_׵t {! б- @oC 6C + h;+d@[n]@X0!g~i=,NZ.G~UIȏ[G*(rKZ[0IoB_AnZϗk2A&ȲI2%'8ܝv'.IU/s_҉jylބcg)eaѧLIU3i.?3_i22U;\]G&4vi(3nRE]#[E:;ϣhr״uKEy[S'>Z3Lj h)nںtRhZ,[VU6 XpᭂO2\a,J@ $͐`-ғc$tAY^gMW o4![S g&P(&[z>ӍGuvR>vJu 2g(4tZ@Iy8>b8zil7Om(tlƇPr)'f謎f()=pT8˫N8جn[?mB↼ƆF%erw=\>p T5AFM%8/O&WORzxl>SI]rܚۦ|Z{]A,7(+(ҘZr8kab 唅q+vhb,2,FUl+;'*U;xcUp.F?qBLh;Һ+fj &Ʃ6UQ[U_^*/fQN5z]6'd F/2u8O?R1ܯ) $)mWX [)Q88[Ԯl=GꤍMu eUe~iuX֮VQ oVV RUZz`h•ѡWxUk%Cu~;PU %HWP/?JKų'S0{ix>2Ψ*Θc+v0@TXmKsHM FR)Φ(6ryn<\Y ڬP>J,>@- a p1IAābZk HbUh8qȨJSk]9)(WN.HTf"+ՅU#y gW?.' =w?ka`z?ʾ37v ɿxv.MQxkjۆ` xEG.L+bhҡa+*$F:k+zZoY{ T-^ޚmάnhQ,$s#ۣLy-~FGTŹaN~PiAiVz/HJTS)7Kx*e#Ը^I6i) uB~CU c9ÅG !]Ou]Ueت-U= }#whd 50ВȍZyB&q S_fP˿D/?>y\&NIKh-frF}89&7©ڦ.z?-!q6ozo>|y #xW<ַ vȀ 4;UR@ȑL~q)}Wd؅ɓCn$lJ(.)F6v8,R!hC/Kl<1{Ws.&`j8ܐb] Ck=&%8Bm87Yw܋-f{; >6Zǧbdgs;[;[Рi+LA߃ZZhM?C>e eGDErjD֍fK8; ΀ޞp>Kh$=uQH `IHH4G)hG0C;압JJ꫕|Kt}^APU#v7 c{d:)/Uɑ#Ln{w?x2/#MR_3@L]\UkCh`h@WrrPp{\ d_Mj@;7fI-M> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000001616 00000 n 0000016573 00000 n 0000001548 00000 n 0000001970 00000 n 0000001822 00000 n 0000001664 00000 n 0000001388 00000 n 0000000015 00000 n 0000001368 00000 n 0000016185 00000 n 0000015013 00000 n 0000015807 00000 n 0000014515 00000 n 0000015522 00000 n 0000014067 00000 n 0000001738 00000 n 0000001768 00000 n 0000002117 00000 n 0000004469 00000 n 0000004490 00000 n 0000008769 00000 n 0000008790 00000 n 0000014046 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 16713 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_add_handle.html0000644000175000017500000000465410265631023025127 0ustar danieldaniel curl_multi_add_handle man page

NAME

curl_multi_add_handle - add an easy handle to a multi session

SYNOPSIS

#include <curl/curl.h>

CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);

DESCRIPTION

Adds a standard easy handle to the multi stack. This function call will make this multi_handle control the specified easy_handle.

When an easy handle has been added to a multi stack, you can not and you must not use curl_easy_perform(3) on that handle!

The easy handle will remain added until you remove it again with curl_multi_remove_handle(3). You should remove the easy handle from the multi stack before you terminate first the easy handle and then the multi handle:

1 - curl_multi_remove_handle(3)

2 - curl_easy_cleanup(3)

3 - curl_multi_cleanup(3)

RETURN VALUE

CURLMcode type, general libcurl multi interface error code.

SEE ALSO

curl_multi_cleanup (3) curl_multi_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_setopt.pdf0000644000175000017500000004601210265631023024151 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXmo6_A`&+Ro6 RM] Pd&V#$~CHJe%X~)w|Lʈ;Y >^_|&L=eÑ@/a$$\:l5`,00ndSdrb^J[˽,'C!7qF Nж iy7 uy:~cS?#iX٧ܡٌ}Nϧy]c.͓l'4?箻:m"avF)yFO}7G8!븈WG9ߌgWgˎ7-j)ܵaF ̄Jv3un,vt-"Ak/ϣ3{axԫ|Q*D`'" Rv!x-ѵ!.ZNӧQi_/pnkmx k)+r'k0T~oDfW22ܳ8.d%ZФ'kcl#ovقn L1`j (f,*&D%_'rqȒM)uhn_e g4'pJk.J]ƕ.Q[6|(ΫEO(W#.4,e[T ^H%fئ@>ڙe !C{K2vAy#pS>qZVӕP)dIS@A+ i6 ?lb#{,AMvL 0Gsq(wAJn&5}Cn295yQĘljy$k,t|D Fu:AmF;> S8^ue ,҂ wZ8tz0 tP.̐$B ]y=z>~ӣ"鵋$HRNmuLnr6@8rjO2/HbVIk4kKZ,)-UScIE$XQ.C<56ԃ,D@#4 4~H-m@!j= 1!L `g錜5~d\an:<1me{Lq#ZUJ)`n%{`YB]J!7}!sYHZiTZvGidXs27Aχ.n0*UV8FKjj=308@ٟ~{J卥cW?> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xuW TS׺>H"m֡jk[ u( s !$' I@$ bZmojo۷>t{zk9 쓽wyXf],J ] ԳBQsfóþдc0J뺷JYA+bZyy栣 ڑV!ZAr%9i7oe2DRIfAPrjjZgɢ젰,QD[rW֯YK^ٗs (&7'Y/wsޠ"Qr~Пa {SrSK"wD/Ȍ)nQl(9u[ހakHlĖcX{ V`Xl7`bx5l#ma1 aal9_l>vcb41yyȯy0%\6mq=SMO{33 y;P7zik( uh>4Z߯Iξw3KWNa;nk$B*\kJ c;7Ry,42g܂jUV@H7;XQ;|(ayPEc)4zfjX{ 29x[T|W'N jNu*LVD$L2P/K#{Nz}!PQ~2:~oبԢmwCN^[f05Ni ^P8V B7?}٨R^F]zޡ"x[+:d+vN]$|6-=QXViOK{$x5p}Ӟ73Q)ЏVUuCNG=~u6 =]CҬW$$M|ԝ pmDQhϦOu2MLrPK-O8/DU^dP躬ߌCUa{@c ̮~/,p x܁xYҒj} Ђ2k ~Q~=;e8t壵C\S~OB6Dl~3gcۯG\ ad7 kdP VYXRko-r@g"䥂ubeYar=[pshQ+o8\N{eMtRQb L&o3ї/"&te25h[ZRDr!7ÀDűq#fu^@o{kZ&+jo=pN{h9 A7.sm ~wsud4CCgI_+.qW?J<{mEp\ ߇鰸Z];Zp/ǣ"0Zg-%"u'_?1>W]OL~ [tRw%=Kg󞐌 @;>~ M+ . qh;`,m/F ?RZZkkjDIDI`JWy4+GOϽŗF1Z:PzAꟀq}$ak|CSzV,,#kqjUZ=GDTmER遧F89?)WTLI6d1Zʭd7yyI%t.u(WWiy@Ԟq 5]_z=Ii(P.Lۨѯ/ls T6٫+'aH2RieDSxe@ #{&ۻmjiXWW7P"GSE۔Ӷ2}VoUK7iJoBԳ2n<m`YNXǀsuM FwKn:|H;Cv6rW鮷p7@`irfxgJn;n7i88А 9ى?'"23(֌FkHܮ2I[WUr_n8OtxLJ$m{vF/ *`V"uy+Rg?. 0kfQ/BsU ޡ9I%er$bQNy d۹>JAXQPz>3 =u=z-G6K4ˀ  t?)& fϩનꛄi p!a•,TC=ٽns2mTY* 좂p jlQ0VFV/LMx/[d17YQIc65M6h"/6eqp/I@;k| {̻,Jc+i*LrH Չ[xh]QZbL5=aviI}!OFEOwttޝSgyœV M Fi_wa~ʤ2ygh)d)5"@Љs{m_ '4cur<޶i!,2{P\Р/oSF]}>d~Vx"!PS'^aS3˺ yafNgd]hA-hur:8hv#*|8ڃTZp ځb:!*7\tڧ\>ͤיt}ʌd,s )GaF7So \ZiN@_܌?X 4*z/N.KifpT;*jlRaYp uoE)tQt=g=:h5znŨ2AP}Ϟ81jq rA) wPeZt}:QuH; &Q8zeOEJPkڇZ7u^dCOm-d,0xb!{wfwRi܌b`w*4TZ?-D'/>z( k]?–};i^'ӌeZ g .Q٨V&Xg^xCCj^$| 3~WWUSAJD#&9udS=7'6DL-c4߃yLv#(cȤ331م39p |n!WQ4o]4ww'EEiIŴɫ/u<|85sz,={rYLS+ /'?O$non=ٕךc@x;iIB9ο2o(l(Sߩys~> ɘ]5A lgS9%b3~f F}OK.H$+rrPknU܉{b, EAaʑP ]9Mb/(m2O;Y|mjert.\ۅW^gzwF7"R?rJ<>stream xV{TSW>sQ%Ts+VߝQ,>Z @b#FBw$8DkFX[ӎs׹mg~'3k}]wu}oKS(D/c ;Y(Nn\)̖s/pb]s3C?gB `AH$zzMKQFc ^'KV^L.GAcҦe+MF7dis~\OFtenR&ڮ$&SI X1Kf@>Mgץg&EluD!Q22W(B{X =[Tkdd!K%Sš3&Wlзi5*r$tili^/ pL3u9ͨ6wgB!_ӒrYYJ*d9RBn $ |Lk e$@rP@x=ZXX|AIe e *=L@,Tw҅؁vCW1(R&CF][ڂαP|*}lM1 1=U6;U(Kҍ8G (>R[ՈPX _݌NGY9T㯌LnK [xlbI M$G@~ 'd!W:;]c,YC+k+ b쓟I$06wBݖQ?| 3PSqx҉ v< *V܃탰O"L.e QS,ϋ/deQv\q `'N}; ×P/(j F+l ^a A$q Ad<HaV)dp06`3~# QdϞp1?c:K^!2X 3qB֎ەŤ`E'uZ{'cSgW[Z^_UقKA H3WH$nlpGkGO|7[1+[쫿ÿC#Ae[cY*de5|$<_55P2U Y5r ;0 bߋ:?"<&E`Vw(#hwrBSzR={+_JYح@tV݂Y1NQ XyIx9OT&yM|Y"5LHeLjrrHSgmE7Yc&zG Er]C{`w1^0;+Bz,ds`n.SY\YeEX3rrg/rY՟gQ&:Q5(Oe^g5n^"ɭ?TDSyRϣ~u:Avz|A.G-jN}x9Jf֓VkqstzvORΞqqA& }yYK[ Bot0cIu3V\ڊz\(t(}O_`O)wRH[gs֓9v~׃?ZS*VDaKa䞘u aYe'k3[FRg|MQI ڇ`Cna!,$!5&9RQD=Lچ؍_ohwtD;HXq(3BFAĤ,Pyy!QY[mnIy ^3Y,;w2JB6KXKF'j@5ㅃ#D>#!URy_Ű;gN=-Owf$6{$Hn{m#aU&fŊY|ȳ\zG_XsLؙ?p_O \'JN8Ͷ\8xfY } ^P@$}TR3'v83wӨLҧ[P2g"64 fMj#~gdUvx'%Rx8 nqFdJW>Gosn9cwV)`@)ct%C`s\0! w I.A+gߺ endstream endobj 21 0 obj 3273 endobj 22 0 obj <>stream xuX TS׺>1&hT6VXZZy%I3$LBHHIfdDQSV׶v=ގ{{}YYY,9ӰS0޵w3, LӗM^ \9o &};%FFͼ9ﻓ!| hݟ=*J%gxhɒϊkz6~zBs#,J<{%KS=cb1e$ )),w.\bYso&Z M&dH=1hOAt ` !#M+A{2=_lsh??.39:W0 [Y*\bb2l>öa˱ێa;0/l'[`X 1>}anl5 |Pl[-b[+ `Lab&P ]-JSH8 ~WoSĤ/-G;'D,p°>Oմ`'AcKW=L*fRZʎ(H`ۚ v71ٷ<Ŝ &XO* q FSqF`65Wl+xf &=P0oȫT *0h8 yLH͔(kD 8=-ډs3<\jkZ | 眥}1+lRdDScǁR)ƁU`Rs#ewrpi:0=Wsd4ӎЋ=.^go=괩c-1:|aÅ"Nk⑟xn'/-2R@ti(/ߖb=_N1Ԭ{sǏv6t*Z*NbQh\лp6Id.Z6^]VI|{#ZQ7$0k{{p䏠{n)Iz>ɁY,>+[%9@n+J;yO=倚>~Vmp|@@ogp|ýܶ$ jUA ņY2MvYY7AZ'd8KsVp+zM?*S;_/J ⠬xeob;"(z;[ƹm螺K7;bAn6 KuxiNktFք0_O(eXjm}pEUJNQ$7@&DŽ7 QoSڼF| }=aO'y>7t.A56u I;΄.+WC&KȈ? @U|kP/a0830\{/hVE>8:N2!m6[Uʍ/(9v1!~k|ꅮsAٝ7(Z'& XTPW6lVrA}j5VⰪ"[Fe 戳ƮVq+R5sVuF5K#&=1jl|Amx IGm/<0۵d7T6eb[%9Wt4\մ mU)aZ4`+1k ;5lns/{oEܗ:UݒrF~?bav0z )pmԙs VPI@㏁Ci&<;'W+2v?b0ɒ5L\8zV^8d ÷Me%Q|/G1öʊq,;GpV!t|A l4j UoD=:!Z-cqJ_ |Wc{MphclE& с؜YbI1"p[|'$RL(Td;'A4vVnpyf6y PXZVh.4g@N:EA&u_m2oc x߯yl?cA#|ƾ1 Tp#A  }2(EjT%&+5gjԠ:Vh&Wm(ARxBT?Dfא+.õ7Q4c9<Mڈz43$uzЭmDF;ĕ $ MHJYGrl&ˇfKIq9bK{A75Ul}< LT!?9MC[Vq_ghw^ԧ+@<G`FR,Rpog>NɅ\C*MI2"0bT{7VEIS#NWWC{M,tEx:Ml-m ~p (R h߻a\1Y¼kT\ւ7*m.s0ĀS6kZ _9,,+:NL/) `+mh \]>GS: ħ暖Os֬4&pbWxD^}Bnuyrd ʋmEeSC8تQpћƁlZ\ PNj3j2t_4ft%eY`[xF-YnwDZyN]WۋᯏRxGlcnk=uK/?<stȇ:jFUF[Z&-稐?ⲔBy#$Raw5wQIv.3R<gR+eFP*r uJfJ<1ZO wz* oduJ>G4d|3J_){"G8ue2T`c~Z( FZ(FÂTԛqNpNlT#!A3<'qZ_[d VZGM!z1y60VS#xq w&jM>tE2d<m#OJ'j]r'R]CSC$@SӼK{|;(Cӓa@S.0kކ3^bAgК& 肳]&sxI\`W C&L#GZ'д8\11]^h%\Pf 0NѨ۬G UPʘ4?r wolPD@ T'Rx=׍'r8Di1ҝ|P:h(ˎQ&W*(iR7Pxd8P]Z2x@{ Wx8k~:tȁ Upz ~~A\ D o+$.i#_B1_Ᲊع~%Gr`DoYN4oO~S[Ս-.O9yɏ(7{mȁ#\D0)ξ{k֟;~pb?~DjmH* MB;eGUPC=.gN'jB\!sT9kL\W١F(qs~mN1s$RUAn2bLIZpV+ PRSx@Ҏ>~`Q.ٓߗjԂO Q:ac Zc 8 kqT5mR;um y. B:dR +׫lg T3U&@;ZK"q2@|zFBRd.*2q! 0IؠX &s߅g$Ov_xŅ]^8e}Mak3wYp'd:0L+}}'>8Б?V?r;GGߝcWqXO<.-';]ts9BmUг}N_DC uWD)үoǍ.t!dp5 fLJKOfİd; endstream endobj 23 0 obj 5966 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000002091 00000 n 0000018747 00000 n 0000002023 00000 n 0000002445 00000 n 0000002297 00000 n 0000002139 00000 n 0000001863 00000 n 0000000015 00000 n 0000001843 00000 n 0000018327 00000 n 0000017028 00000 n 0000017997 00000 n 0000016554 00000 n 0000017671 00000 n 0000016080 00000 n 0000002213 00000 n 0000002243 00000 n 0000002592 00000 n 0000006606 00000 n 0000006627 00000 n 0000009986 00000 n 0000010007 00000 n 0000016059 00000 n 0000017586 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 18887 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_strerror.30000644000175000017500000000131110265631023024077 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_share_strerror.3,v 1.2 2004/08/31 06:03:16 bagder Exp $ .\" .TH curl_share_strerror 3 "26 Apr 2004" "libcurl 7.12" "libcurl Manual" .SH NAME curl_share_strerror - return string describing error code .SH SYNOPSIS .nf .B #include .BI "const char *curl_share_strerror(CURLSHcode " errornum ");" .SH DESCRIPTION The curl_share_strerror() function returns a string describing the CURLSHcode error code passed in the argument \fIerrornum\fP. This function was added in libcurl 7.12.0 .SH RETURN VALUE A pointer to a zero terminated string. .SH "SEE ALSO" .BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_easy_strerror "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_reset.pdf0000644000175000017500000003771410265631023023625 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xTn0S DL8Eэ6CBB&q4dxc'Ps;p)WwWn_'ɘ^IVV C{4!Y[G YKv÷jT{Mk^.b(Nr\Nuo{=rnىr61%E>N>\R"Vq}![%ԛ64iprYeZr/twn> ϊ*-L[]~>hS}=DzKRd,"vȇm0Fa~v,=|zL/fGz?tiFrh Y?Usfk0tQx?t_]S>6lTZR=hkhsZ%+[Od٩Bبk.>]cX,rXk|U (Zؙ]]BUx8]N0?(֦=暚lx">^'D|BVU2WuYZ]Q U]K-I3l3O8 diɬns7d'狋 8N;ˣ*LP> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeU{PSW!E%ms[U>nUQB(EJRܼȋCIx?QAyU[[e} >vmwf;8י݋;;Ǟ3s9~2+ a0 3meX*T~[%s% 0}!_o ^c ``tG ;HUE*V\+bcc9JH_FOBI\*6ik }-_$ |A^0oX@",'%bH_~ubiNZ$bBQD'7@dV'T( Tbt $ IFH"rICv#$IBv s8]d6E#B- {,dRK¯YY!D)/ ~7\ʩO+{@p;JrJMb1Wk^3@ubE:\c`DI8v*Z*\_4 7F%?;c-c\e X\"{Fe$ N4$@( sy{̆9c|-n\@e gu-y{%S-}e;ݬ.Z;(vXIO^}1:PYka`Gp10.=ZC/ģQ2X*2W,寱΁g䷚NG6`A~Cs[(:t72j욾J{&M S& $ERkՉnðGs7:,ﵣ/>e7d>jJ-6R)TL@̙N=Pep11t5@R>ֈmg:ћx 3ȧ]O&28)<6oWvcaL4xRX*fāk%k8OhWI4"/jsAY8 M\n -V*AvNvuiBE*^~ Q8FshzZ'&B8҄5iQqwhz;.%ԆzVe}'˂ak K_>>WpmhO(c/[z;2pj 5^tBƗ80= zDZx4Mr'˯?dgB韘8@-k1㧆)Ќ$~i<[o(t/h"28EԒ7U4Sߌ=tXFp,5f$=F{۞Ҵ]$/qͬn\q L:XhQXmv`.,')V<µH𶡞񌾬}8^Y3L > ̚+ƥ{L,f-5tR @i=~_<uG{{#h去 ZVvF%ͯ/||&/r%*iaC*hɥu`}"v?)!l@Cn+8Q@-·R56UY5Yǁ/O5l6q]U BJg@O&Z`-*:=>aOv7>9wPq,f ֺwrO WoQhK\ pe',,(P=%x$`G;lVc{/8 8S]vWd헅VS{;O\ul!@jL- ?L申Q Rs+b /} |5=@ICdhYs L+놫I}ߑGGMMwb=R3Z0˜9#o()D:w74Pvh/?]aY~j]({uOUdPr PUKe!ܧhnPϪo_i9=y ;]]' L.fM؜ :{O*#t t2vߘ4;'scI`ZטXF#KdB>stream xWyXSWڿsU,*JVűu{[. * aM AHXAtZcmK;3;vlNm罙<߹v:_Krs=缿7"j4J$n{,T?MݺRh D|4q/=3qG\/5ܳ45mN&|`e˞U7nGg#ߡԫSMR&+SҞo'jU<^Mˣbck$.Zj2ۗʟ]r3l*9:]/?IJk6ɃAQԲ}/fibo*٩'LSJݝ:˗?6R31j?ZNP;SjZDSPj7zCSkSa:*FfRޔMMRsqJF͠&h0(Bt}lZŴ^;Ƨϟ(w1f#ceÖ;s^]Ӭ%}}B}}j f>U>ȥP.ߟ`< .NdP'$E܌`cӰW3Nsӗլ CǼWz*ad3o+`uDߡ}ځ\%< +} rBaa)5>ŸFG*0vJàyM<؆n|"..KV/9, |'C|C*P/71aǩɫ2yq\W:EU^kRx/y!٦@,Qzmš,S!-Üú@\ו^YJ <=8KZ Q 2&袱ó dU!\Wij`[I]bJw*؋?Kl(@@U_O} k-m }jLX}ddudR" .f5MbF2:'濠ѥwےt ŗ2q3Ýf;Inx\HP1ŔXAѾɔso,\i0kl8S9,HºhyZ&7l6S^Jn8C7_x9Ѱ/!;nG9`KIv; pO?S .,8^HWeu2':F e@o+$>ZZPdohlGs?hB&t ބW/\1uf$E)23OKo`?KL<]ş,9_<;2[*uj"FmujRSy!ض?v?a%+ "8D@ .!Had"ӮȐ < 3 "m`a/<t.bm Y 7hPS$@4\-:Zq[ XIƳ7_K':ܼ GO& 62gK̖_3. 9&TO_(-DTWZx` ¤( NÄP j]=]!4ʒf{r.iArmw?2G!ǡꖪ2G}Zpo 9I,Uі|LL< lkcIg8W?9'5ٹ_cne|9 ;B'p7R`- =HQL)t2 S3dw"݉##}aU kF7O^wDP k8HNfR H5Wsl'j pw>>(U3:QET;zMqYm5Md  s𽣸 /P _=?yci_-žG )zW[^%jQI?V虉Fd&11ìAlt5!z\a]PYaN&.K9k"!JN38ټV?<.fM}NfN*Z7CB<]'/jO XI|CG3s2?-c3dy#&UD17K9$ʼn,.܎Em5׺*+Q]E]bl-:iXFz%7^\a5xosJ횠ʤS݀ ދ¯@dPM{Kscz c/j#Ǥo#eBoXN]|-A=_fDq9.ˠ*mhHub,"6RR׸%)d|u# `#[sCξ&MVP_Faݶ˝`6{3HM<~҆#Ƌhϱ8ULz> ]>/٣yt%-E( e" DF:Z+-W3Qd-tu_ F3Z]1x{=_9 a.ŹtW#4wf!B?F@ |g_{HpkS0_tĉ78NſyX>BĿyJ"NE^͝ gnb쨐l*' *k8To/56J'E_7ML$v*Ï$v v^Ϙxrɭkx ş6rY4E1\5V(7Zzv|˅1߇3Ό䫹<@C[g[$ v>av=nY E7j endstream endobj 21 0 obj 3986 endobj 22 0 obj <>stream xmXyXSg1&jDktKjںK+.H%@,!d% GI $¾#cբvƩ-|i b j s+-uj#5 O*d|1ǘ FiN01)}.[`^ o?)H XNINLɑ&{ aq)dmT*~]>>VwgiBqP,{ Eqw0#-{Pѻ/[,HLK+% ӓ3!C?J,;%Ntpͻ%떯XϪa+(lĢV}M,ۆmBX()}±Z=l}-"]l7揑l0/l.6a'^faa3у2M3Q\,ɚi-s{!Ivٛgw̆~<99Ofǘ32ּ+_wZfAłG߾)>q /9{7y\'E0{ ВpIVS\ x1Z)3\{ONJENzw qv'3^jrӴb@> {{L%hn=03BQjŊ^Q(+EXex_W,O;|d,z=.#=_Q|Ôo`B9ɃY,!+W ¤0GUEZ?+t.J@+מ_/d"rj6|*@R{/xw2 38 ud֡^gSpZ^:)w'`ӅE9,/r@hpqOk 8Gk؛JT6pÍA g·߾˿aYIP9l?3zFQ܃%wBA-d hw]"%-SSD9Zy=8{ \[/WubCBNAjKJlHw]>{BA_Ҍz 8tP_6]$'f=ZAѵ=ຏGkqH]O-dZA}WЊkxUj@4jzb ƤScu u6آQLK#B-"J@4i"jwMr'8GLsh\6֮Za8# W4Eᙉ2K>4e7_í[Zrh0EoQ3f[2^ iY*B"a,'Gn?,VelU>Mp} ~AI^_Gu'n6Ѥ+ܘV@mWwRl"{gGKWe'A]GK*1hc< mbs`|F^hhx5I1 '쉻W[[GU{ n~_$gy|a鋋 FM*534u!DήN)dI0^/e55lN c-J4<J`hm)Y|]{z4vURh-܁s 4ki *mxSV>ZU7 0Xwq{bxot!\@ dl5P|2k+Q<~qO$Tcdj+Gu^c`H՛Fp6Xd컺  "UҪ7)Q\n0?ky%\˞6\pȬD/&5ɰt2n[楢d yz @tnFoЃ|PXRd*"Nѧ\8xeɵh‡?I@^d|RPD^R/GFf{ҴN2]{C<fҌ >5AN겺]upQϛO煜TȔ/.h@ =&8'ā}`p&A, ŎȘ-@H^sNbճK\'O1@ǡh ę#n^G#j/vkyV:~keӕ,@$I Kqph;ąwI ~3]h󲛬ͫ<7OgT39p ؍bijp};ph4nZp%jpexPW( H}t"t =IS"sAΎ!("5(sNbDHEK[ -m vR\a|9aS8T_\R ,(ϋOW)O?^p|y3zN>;}RWOjp-)0| eקX;z}~w\%i=s&Go%ko ?|0yXjNuףM;lRW[(JB܆6Sow&Ƌ gA%N*!%u!*.)0OW7oW\.U:qP L^zq{Z5æjPh.U%l~0uƠԨD&%]u zfKuC_.gkl4:5Gz%pO<)=C 1[JJ<\f.Y0 V 0\)JKM7u47u6n[`$ǧ #ݣLX 4=(<ϡ[|P'OH 8gE =~C=%`#WJNT@ b׮/F )0),k,եH|OuyYn5F"wVj'Ppk!\&/> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001139 00000 n 0000015613 00000 n 0000001071 00000 n 0000001493 00000 n 0000001345 00000 n 0000001187 00000 n 0000000911 00000 n 0000000015 00000 n 0000000892 00000 n 0000015227 00000 n 0000013943 00000 n 0000014851 00000 n 0000013447 00000 n 0000014568 00000 n 0000013001 00000 n 0000001261 00000 n 0000001291 00000 n 0000001640 00000 n 0000003855 00000 n 0000003876 00000 n 0000007948 00000 n 0000007969 00000 n 0000012980 00000 n 0000014483 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15753 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl.pdf0000644000175000017500000005365110265631023022067 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXَ}(`U/y8F[A ,S,Kk+ǜ[ Y[nsWqy|Ǜ7+%QO[\}fя, Xm7ޕc|Zfs iSJ> ?~dkuOBA?桹znR}7F?B8Da=mD=|^̜5]p<y~tʦJ_>ܱ+~/?2_}}}¢MLoѲ ESQ$8AEӱnWgrgjmr qNyڥܸ$lX$y`}YXݲ'9v;u+=gۃ+?V#b?g{1Q?F;$ќ KؖC-[vD)*2DǺM/p,~nbވZͩXRsŕccfsoN\0y6Pt0ŁJhcTcZSz:b,hEs-4Yz*UѺT4VuPjR'g$&qJ}&dߡf'(g/@B ~' ̊=+ԈPg,~c+EJe@Qv%e#vTjPCuyK-6Y)ce4T)'~xR/?塓+9r>4+g-diVa8բT&DBfZ8(]^B Y,Zr:CS ޑW!r:I0#J~b  .0qB δLt VG($AO3er"E]آ֍z=-GG7;q%+~6u?,M J]r ]]7= n||ɞl},)\;םF||zmUCF6{ucg +Kt {3W^n7Af}۷enfw?_s þjֿmf(ŀzy}[/6h/#`狓@ydph̢Cʆ5#ۃn uH.+O}2Xy_n RSۃf0ߖZ/UؐDT|z׫yN6I`)6" ({!&vOCt6(b5ł%6[.DW?R5-OrT` h6; ,kB' ,Z9{St0 >zqC m Kendstream endobj 9 0 obj 2598 endobj 19 0 obj <> stream xXn8}Wp"1GV>V RIwƠP4d%.-qs/IVĖHs|IzGvae$$MY,fY^Un򾩞yI ΁7炊$]SXH,}zEy< DB}FVAi$ Sh8w<=/9CZIʎSxwA|\\տ^jgWSEvIeEQvJd>}z!ꀏZrR=,p)Ce+d,jaQ[0d}7Z^crc+d6mGivYUɂ')1|Yl MocE)]Y ɼHU ېBvYY,i]? t. 6h"R9pdH߅Dɺ~!R:C91*ۮ)7L&h(qSu7SN֤P/@&qlc>ԁ^R{- ]k2V ; duJUd%!(ҖCu" ld )jW6ەP9VR -hcmH)M mn?<}C ާ7On23p ;unir})N6[# ~q˽,$kQhBy3R)8)Q6yΟ|[2'9 W]WAh=lkȃc@&JX{*W,34Z 3 Ck귎LFog˨d-O7jiCueT$>#on7kc274=0k$F]K ֨{ViɸDOTɀwPSjƿLo!k 0{}|ZToT|S gXVըZ@$C٩+LDց9źQߝg<0Z"4agNSN1,2d&Rh&?!@OhSlU!A͖ݞqw9(Sj:HE2EE44Uf/<JߠYBi8 szME3ܽTWYaا4˷Ǵ[lq\ 3T48P{$\Q;j,/H]S2'%ٖoUUvJ&nuU33)pb{ FhH~ްĨ풾!XpMKpȤ0u\(ꑛ+X8C/~m @lPK\]A_ꅓ|}53ou0.͵K-ͪ@Õky!(I4KB{0A f,&`}3QE!n#&SH!7bD,c\ހ)-h44M'C@M 9IDCW vgz/ H@gbwWVvz`@qx^A МURV=KvxaHA*f t [foxo513PAEaz ^_&B.u[ݬ ?Rendstream endobj 20 0 obj 2088 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R ] /Count 2 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 22 0 obj <>stream xe{XW'RZɦf~u*Ro(* k$KnLINB!A@eYڽo{w>}?ޙ癙g9|NJ,Q$Y!emY==r|wK&zog淠m`;ԅ"an1qҁCK-[olذ ?VP$J @/śbz\P3Sݒ3Ă<~H,ۖ׮^f}YW$ɔK2{B8UUKeBaQnn.\ZfbIE!Hُ!!H"IBv!H<ًlCf $ قD#@#h7c)x8MƜTA5!֕_t{3lf 'L2<bb*U FAuJn5jqWfP9a*/)֫Zo9p)L6j .mb\#הB:^gZz=%Dc4 YN؁)&mNuQ$Ѱsd:QHsԸpr#(̌`ݲ{Q/J wAa⑗UVVi[FkǮ}yA74jC{XBhsx煦*I,h{ 29 Tۑ/ֶ3m6n,:Тds8y>j)ŧR_I?02h~1}2CZL|0֍ѫح=yz\K΁r=*b٥;ؙs`J;Erv#IfA&')`*쯬Qp}exI6hI@jSҨc}lRPjiloͱ ) (FeAucٯxԇ6P!J-OmY%*j> Do浴Ե(Q[1GŜnrU5ԯr٢NDq|eT7:5]4HL 70ڟB-&olKr܁. 8p$Mjt㕃LݗyjX%XN@TV|U jf|ZC9xb>x2W)(CBE];sw~ a5=wFZYav,t u=9-B$[yL ]Ŋ" o37OtAڽr[vU8X`Y xV3 %{تDzUF3l#u!b*ޙY&.kvO\"m.Y\yšzhV"+iq>~G/o* j@ 44U;~z?ܯ!B6Ȣ&p;Nx'ܤY7=}dYW,k19h>M%byobh* aA'氓BۦE԰kʼCpɖ Q3ѵ+^x;hF;.{h˩aBвZ] ,Vy7>oy$LJ0H%yiy}%`I&)m23W\a'^Ys؝ԯW,2ݯ˶p5M.@겓%Akm&Ihrj+?mpeթޯ*N8HeR-b]OiK$/[8X-/\=pyB .gmZ&'A&9QyoluΗq5YOLMӃ=O"F#=&,,NQl4h&҄Ux: x<>w9t{{JId4|`&p=o%Sli{4S92e$NZ$ T;B}p92.b/,.Ɩ=CP,To7wNh9`A^{3QuEԨVug L<) TRnhulJ𗿨aN2 1SҨi÷*}.7\FNؼ :%Bkp1d 0a/_5ظ c/7_9|$4FcY2_~2` xbZp# .CvSkμq\'|Ё"TzBX|Gmw9E 05#"D +_-{uv9 ̀5h}r;Qo6|.#̶ oiMI(ukAYRZ4EԼ#qԴƉ(CE{{a*zC olh ū+@u)=E.sjhSL)zsæ;Ϸo4zOr*`Jkݥ15.`F=]F:N]HYj@ot[,*ݎY-+0`}syG_,y`0:vr2֔SW+pVklåw[`Gg**単]6b|4/!84k`v\M䨻%XF2İ #T^FEeOjƑ78]]>w 0MeH5k5(mdD_):? f8X~P I4Ttk gwFO4>߂'otueʦySq?诃8.̎7tX3c~C<l>>:= މF)Cdl fܟ5 Aл endstream endobj 23 0 obj 3355 endobj 24 0 obj <>stream xeW pWma`kTȁHN a /6 0ƋylK%Y^yWXն6^gT a3f`H$dVm5RUWW{9Q3gP"WC6߲) 4e܇+|`ѿ$wx-x/< BC$Z\sT'2]l=yg19XߢP'H_LnʴEj{RBS V*%*Ӳ6/ʕ ߆$dDKJlʉ  ٬ػeVvdyHޭM ԛTz5zZHmVRwAj@VSK7Z* T8BD$L*)x}F<~f~O)z}yl۬felVkר6^A>>q8U|kݾI5ʄ9 6D8" O*Sy(2~f0*Fߣ}dNxrR:9a6Vm4oUE6}55Z9秶sRȢ{76@Y8e Yq 2TM:qSe`|?RO GïR^|&-HyC1R#cyaj;>( BV?PU+.\f,ej49iLWXdDUJsհՎ E` NoH꺪Y~rF s< GgcCXڸVdͅ4ѕ2;:wuDžUx7B,{sk-sӜo|']2ea}Ŭ 㘍u6ˇ0vLef)%>+=EE5 (Jc^C"c[-h0O=_&@3y>{D,my*h3v(Kp&ѶƊo]BZx~ Qͣrr8ܭ+LJïɦ$D ]ýx*FIsJEZ}*{`)]EuI-B~zճ6됌TLoy֑wRAAFz!Hւ::aLZ{~kL(ytx r'T5.gR胆c>ir<;4x!YLd-,ܳz2aN+8E5k%F܅c1i |.գw~ak]{kqoVv*ǣ`樉r#9$< k]mknCO+22ejMRľlq/ti =?"0TbxꍛKBgܡI;0/% P\fvxA0wS,蘁qxb"d=,o {:OO?%(1L%Ȅ ̬XYY5wwEx\UJ %q)ǶF=̖cꝖȌu;GFOq;٭2>NᒐI%vC<}w'AKA#-\c'w>X3`2}$%M:Y( *((P?%u0 nYjlGnuq vP@~qX9O] TE?(!M&,5kǞ薑$YxG̣E[ 2w2?d!d^Bs& &=ផQ{"z+`Y{lA6}yc̷C2UFF~iA9|=ᣝKiHIa3rəYVr&db>^j|xHS+m8¹ Yz'iYkȊZ/ ~|E-Kn_ kz쩎]BI?=]&2("W/H<͵y"!%sđYM;rKXybnNȊ \:V 8&ȚDv\!'N:I!I}j\5O^=)mc S8R\*mGY|IJ6!6FXPEDW] x4NXC.$hѸFp7Ǭ,bfŞ!s]#=O5̩!6z ;y>,c&4>q}\)qH[ĉVQMhObEƫ094(H+p`Zt X ښ5c&kK_F]Hȹ&ѭ֑DPa*KP&7+e' 5dOjnwZd3T.lP3J++ZvZ8P=Q,n)iKeFYCTjԱfK]4̅k?km4/[Dԡ ܬKtC(j t_=ųS'I,cPb*Z pȐ52!)((++(!Fq]M?>2q? 0ƥt6º2 N{ߕYNDhUDd'-9.}&k^D#>0˒t&_ؔ+Ob賄*f _}YIaULsESlycҠ"T)$1>i~Q 6`KNA.iQ1 r2#}13JrD%3Jߖ6G}υW3֊jVa5!%L:.tRV<1BddRK#~åI48]̉*IdC၏OZO%iQ>כ!/Nv_p9V5=jG1,>Ϡ1Rb&4A{Kc|l{D05 1Ӛ|KS`P3zz?& endstream endobj 25 0 obj 3578 endobj 26 0 obj <>stream xXyTS׺?1$*VbjmBNhBN82# "HCœ$$@6 $< S[Z֢vw؇n[oG}۷cXA8  wgoX["KbL/dЯ͠_g@ NmfսƟD'̅p`2>sT\!/9J%iKq^zXy_X$Y"wKp/E9"D1)Ir.1 z_8<5EIܜ=EQaI [ GJ"KE#=Sb|v~&soX2k V b?XIx;Ub‹IՄ%>"#;?XGKb/$+1`bG&fX@! !(b1h!6xc I3N270{4lYrEPsfZgҖ&_{̬edg;nw;v;>SʼWu9S!g98ŜZ΃y{zs۸^ {Ahp!lN<ϑ6BJQ*#|宀ަ.bܰXP6##o*$9}`J-xyr6x~1o2hMѷFә{ۙ| J,3Y>RjL*>HRdR2XFN I )rQ3AKh.ZdwVees6DR% *jSV"5e FXg_N*z`*Tk2HHQȣ0J(VV^ vF+u1#!Ca%J2+q Cn W%O1 &jc4eҋ 7xGT7\| ׬4 KS$5:o51>@zT00T lЫWB`UG~rc6M91B/]ÐLE{:$mnfxh)LT骟S_ L%#XT7|CHVu]kJp$\ .}\i:s|(Mkt .lfR_g|K5VUR;rKXh= ,ك$GgzQl9NRЮum9EF˂i4.-#3dAYTXv;V4l_w?~~%ٺ#+{IÙsiGqVcjE /:ݞs"#(TQ{P8MrSG)Hְ+ &{bC/[߾*K~ij_~w͈B̠-{N&tBA/͇op-᜼?/?ն%u{C@ 8( nn\'/@bH܊{}%(1pU2!L)W.A(dEi/yo#AgKCߋB.u0q:V2TLJR$DGp&#`,70xth>^P%q\H:,ڄAUbP {! [t i2enMMБtOaƯ'd6_ Șy nsAua3N/v^!U|e[&-pw`}vs hPZyb4.~3"}?3L2P^T P!2 0'gO&>mePX9 'ZJs*U FkukWZmLXB 2SԞ2s94؁V _w[ZsKt2$-Iķ+x>r.76AAZetHc# }r^ЄO*UXhsa)֎Vk8rTʙ^RwPw6G {^m# F ! =c q&2DP> !> :_[QGU; ݮTk*<Ұ r _zM ũ.KM-N\O瑇= '9o Қ 6IX_RРt-y5 ~rBD|"R6`Gع5 4IWjwhzP'vQ vi^gҕ)L-aCkLKYdqj,p:;tY^x}*V^ϞA~Gظ"C)RUs{eWKgmau_bŹ{Tڼb!gطMyj3عsk nv&aĂ#.nkE {( $1ZiֶYeOmj*49YppF&GrA~Q:N׷pqKHKRhS?RrE~#qHg'8]wWX+ro|2Jk5; dƕH$)m m) B꺴zo\v#m>8,(`#Ui,A"6!:^yS4$*Wdm(HashV=Vi PgWfb^$Opp:3ytH#舳$VyRM&1 }Ƅ"XT͊F,2nN߼x:lR gQ={I-9OsUp]Ops!GO$.Z`_ίԂ@ e@Rib@Eu 9>z[E˷(AJȍ|7P"f'j{+NZ8gغ!\gH)^Ȫ\+~ 6'iuZU (֨73˕+RSNES,xLb@#8EpIFjeFv.;MB67T#[7/uh 6B^'V 3H'p$Csa1O 0Rڽ Dv Ϸj h yڥ,Y- cJ[ gA^g1dKKA)0}pkVjl7P/xdŝ!L`t rEGXzЃh!O7˴ȥt&X١x[IZn|vyo-ҖYa{"@vJ#v%̄l 8>Na+6ect%13B cBm6OwWl HMoh/.,)4 ˀj<ޒ'G{هEqj*&vH襑u%5iGA7|O?V}Yi*IV%b\8 g\ * AzU𾆳VYķ5Jå˔U<ɐll/8QJqGM͉+[VRYb.5Z͵pȹXsbLI^`<_ ϶fC}m.R;JBv++{H/3M =:-&Fm+])XBwՌ\U𬜝핃_XDX|N—".n:'i@rn JCv/_a|> ӿaSrsaJiA5?.E0t0K{g7?..wwC䈘{54 خmcj{2F M J : Tc} MYxΨ-g=-ƓJ:1o{~?U'Zkº;~ F41~':5t h>8R+Sf? Qòq >A* IȷO`QRmhnIZ]?غiWbPPmvڿ~Ȯob~8l'ZR=||𡘍>eE,|ܫ]ED䔘YoT`P T'ev(T, YkLl`J[|#g+NIקw6Է'74q=`$}8 'hwqNEƯդ$)wW W'P;L;29OR|v_\nLE/y-D7?ęh=b: =/K%ITGjsm򹪋uڦ6@etڈOos劓::5=1h'r d"d\ßEQ5O953ĕ ^>"D4 F9z2<8 {{Ο)@QB"$ u^.0FB#sfGL8bwTdeIEqX]M@]2Nhb,6;%#KS`Xa(;t-׹Hou!Glnpw H=)Q)Pr!ډXأ;_+"vI9 5h(h̢8uSw.XVi1R Qu*Uiéo>:.?|\'3:e6s svU`".J *S[xGOGC=QIIBXܕlgccЭȐk<o:ܜ:WYpE#|Us f~rr{.Ag JM}D:з×fzX3k6A7RMl endstream endobj 27 0 obj 5738 endobj 15 0 obj <> endobj 28 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 29 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 30 0000000000 65535 f 0000005263 00000 n 0000021622 00000 n 0000005188 00000 n 0000005617 00000 n 0000005469 00000 n 0000005311 00000 n 0000004884 00000 n 0000000015 00000 n 0000002683 00000 n 0000021191 00000 n 0000019863 00000 n 0000020907 00000 n 0000019388 00000 n 0000020596 00000 n 0000018810 00000 n 0000005385 00000 n 0000005415 00000 n 0000005044 00000 n 0000002703 00000 n 0000004863 00000 n 0000005764 00000 n 0000005818 00000 n 0000009259 00000 n 0000009280 00000 n 0000012944 00000 n 0000012965 00000 n 0000018789 00000 n 0000019303 00000 n 0000020487 00000 n trailer << /Size 30 /Root 1 0 R /Info 2 0 R >> startxref 21762 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_setopt.30000644000175000017500000016334110265631023023406 0ustar danieldaniel.\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at http://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" * $Id: curl_easy_setopt.3,v 1.113 2005/05/12 21:56:26 bagder Exp $ .\" ************************************************************************** .\" .TH curl_easy_setopt 3 "12 May 2005" "libcurl 7.14.0" "libcurl Manual" .SH NAME curl_easy_setopt - set options for a curl easy handle .SH SYNOPSIS #include CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter); .SH DESCRIPTION curl_easy_setopt() is used to tell libcurl how to behave. By using the appropriate options to \fIcurl_easy_setopt\fP, you can change libcurl's behavior. All options are set with the \fIoption\fP followed by a \fIparameter\fP. That parameter can be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject pointer\fP or a \fBcurl_off_t\fP, depending on what the specific option expects. Read this manual carefully as bad input values may cause libcurl to behave badly! You can only set one option in each function call. A typical application uses many curl_easy_setopt() calls in the setup phase. Options set with this function call are valid for all forthcoming transfers performed using this \fIhandle\fP. The options are not in any way reset between transfers, so if you want subsequent transfers with different options, you must change them between the transfers. You can optionally reset all options back to internal default with \fIcurl_easy_reset(3)\fP. \fBNOTE:\fP strings passed to libcurl as 'char *' arguments, will not be copied by the library. Instead you should keep them available until libcurl no longer needs them. Failing to do so will cause very odd behavior or even crashes. libcurl will need them until you call \fIcurl_easy_cleanup(3)\fP or you set the same option again to use a different pointer. The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or \fIcurl_easy_duphandle(3)\fP call. .SH BEHAVIOR OPTIONS .IP CURLOPT_VERBOSE Set the parameter to non-zero to get the library to display a lot of verbose information about its operations. Very useful for libcurl and/or protocol debugging and understanding. The verbose information will be sent to stderr, or the stream set with \fICURLOPT_STDERR\fP. You hardly ever want this set in production use, you will almost always want this when you debug/report problems. Another neat option for debugging is the \fICURLOPT_DEBUGFUNCTION\fP. .IP CURLOPT_HEADER A non-zero parameter tells the library to include the header in the body output. This is only relevant for protocols that actually have headers preceding the data (like HTTP). .IP CURLOPT_NOPROGRESS A non-zero parameter tells the library to shut off the built-in progress meter completely. \fBNOTE:\fP future versions of libcurl is likely to not have any built-in progress meter at all. .IP CURLOPT_NOSIGNAL Pass a long. If it is non-zero, libcurl will not use any functions that install signal handlers or any functions that cause signals to be sent to the process. This option is mainly here to allow multi-threaded unix applications to still set/use all timeout options etc, without risking getting signals. (Added in 7.10) Consider building libcurl with ares support to enable asynchronous DNS lookups. It enables nice timeouts for name resolves without signals. .PP .SH CALLBACK OPTIONS .IP CURLOPT_WRITEFUNCTION Function pointer that should match the following prototype: \fBsize_t function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This function gets called by libcurl as soon as there is data received that needs to be saved. The size of the data pointed to by \fIptr\fP is \fIsize\fP multiplied with \fInmemb\fP, it will not be zero terminated. Return the number of bytes actually taken care of. If that amount differs from the amount passed to your function, it'll signal an error to the library and it will abort the transfer and return \fICURLE_WRITE_ERROR\fP. This function may be called with zero bytes data if the transfered file is empty. Set the \fIstream\fP argument with the \fICURLOPT_WRITEDATA\fP option. \fBNOTE:\fP you will be passed as much data as possible in all invokes, but you cannot possibly make any assumptions. It may be one byte, it may be thousands. The maximum amount of data that can be passed to the write callback is defined in the curl.h header file: CURL_MAX_WRITE_SIZE. .IP CURLOPT_WRITEDATA Data pointer to pass to the file write function. Note that if you specify the \fICURLOPT_WRITEFUNCTION\fP, this is the pointer you'll get as input. If you don't use a callback, you must pass a 'FILE *' as libcurl will pass this to fwrite() when writing data. \fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use the \fICURLOPT_WRITEFUNCTION\fP if you set this option or you will experience crashes. This option is also known with the older name \fICURLOPT_FILE\fP, the name \fICURLOPT_WRITEDATA\fP was introduced in 7.9.7. .IP CURLOPT_READFUNCTION Function pointer that should match the following prototype: \fBsize_t function( void *ptr, size_t size, size_t nmemb, void *stream);\fP This function gets called by libcurl as soon as it needs to read data in order to send it to the peer. The data area pointed at by the pointer \fIptr\fP may be filled with at most \fIsize\fP multiplied with \fInmemb\fP number of bytes. Your function must return the actual number of bytes that you stored in that memory area. Returning 0 will signal end-of-file to the library and cause it to stop the current transfer. If you stop the current transfer by returning 0 "pre-maturely" (i.e before the server expected it, like when you've told you will upload N bytes and you upload less than N bytes), you may experience that the server "hangs" waiting for the rest of the data that won't come. In libcurl 7.12.1 and later, the read callback may return \fICURL_READFUNC_ABORT\fP to stop the current operation at once, with a \fICURLE_ABORTED_BY_CALLBACK\fP error code from the transfer. .IP CURLOPT_READDATA Data pointer to pass to the file read function. Note that if you specify the \fICURLOPT_READFUNCTION\fP, this is the pointer you'll get as input. If you don't specify a read callback, this must be a valid FILE *. \fBNOTE:\fP If you're using libcurl as a win32 DLL, you MUST use a \fICURLOPT_READFUNCTION\fP if you set this option. This option is also known with the older name \fICURLOPT_INFILE\fP, the name \fICURLOPT_READDATA\fP was introduced in 7.9.7. .IP CURLOPT_IOCTLFUNCTION Function pointer that should match the \fIcurl_ioctl_callback\fP prototype found in \fI\fP. This function gets called by libcurl when something special I/O-related needs to be done that the library can't do by itself. For now, rewinding the read data stream is the only action it can request. The rewinding of the read data stream may be necessary when doing a HTTP PUT or POST with a multi-pass authentication method. (Opion added in 7.12.3) .IP CURLOPT_IOCTLDATA Pass a pointer that will be untouched by libcurl and passed as the 3rd argument in the ioctl callback set with \fICURLOPT_IOCTLFUNCTION\fP. (Option added in 7.12.3) .IP CURLOPT_PROGRESSFUNCTION Function pointer that should match the \fIcurl_progress_callback\fP prototype found in \fI\fP. This function gets called by libcurl instead of its internal equivalent with a frequent interval during data transfer. Unknown/unused argument values will be set to zero (like if you only download data, the upload size will remain 0). Returning a non-zero value from this callback will cause libcurl to abort the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP. Also note that \fICURLOPT_NOPROGRESS\fP must be set to FALSE to make this function actually get called. .IP CURLOPT_PROGRESSDATA Pass a pointer that will be untouched by libcurl and passed as the first argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION\fP. .IP CURLOPT_HEADERFUNCTION Function pointer that should match the following prototype: \fIsize_t function( void *ptr, size_t size, size_t nmemb, void *stream);\fP. This function gets called by libcurl as soon as there is received header data that needs to be written down. The headers are guaranteed to be written one-by-one and only complete lines are written. Parsing headers should be easy enough using this. The size of the data pointed to by \fIptr\fP is \fIsize\fP multiplied with \fInmemb\fP. The pointer named \fIstream\fP will be the one you passed to libcurl with the \fICURLOPT_WRITEHEADER\fP option. Return the number of bytes actually written or return -1 to signal error to the library (it will cause it to abort the transfer with a \fICURLE_WRITE_ERROR\fP return code). .IP CURLOPT_WRITEHEADER Pass a pointer to be used to write the header part of the received data to. If you don't use your own callback to take care of the writing, this must be a valid FILE *. See also the \fICURLOPT_HEADERFUNCTION\fP option above on how to set a custom get-all-headers callback. .IP CURLOPT_DEBUGFUNCTION Function pointer that should match the following prototype: \fIint curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *);\fP \fICURLOPT_DEBUGFUNCTION\fP replaces the standard debug function used when \fICURLOPT_VERBOSE \fP is in effect. This callback receives debug information, as specified with the \fBcurl_infotype\fP argument. This function must return 0. The data pointed to by the char * passed to this function WILL NOT be zero terminated, but will be exactly of the size as told by the size_t argument. Available curl_infotype values: .RS .IP CURLINFO_TEXT The data is informational text. .IP CURLINFO_HEADER_IN The data is header (or header-like) data received from the peer. .IP CURLINFO_HEADER_OUT The data is header (or header-like) data sent to the peer. .IP CURLINFO_DATA_IN The data is protocol data received from the peer. .IP CURLINFO_DATA_OUT The data is protocol data sent to the peer. .RE .IP CURLOPT_DEBUGDATA Pass a pointer to whatever you want passed in to your \fICURLOPT_DEBUGFUNCTION\fP in the last void * argument. This pointer is not used by libcurl, it is only passed to the callback. .IP CURLOPT_SSL_CTX_FUNCTION Function pointer that should match the following prototype: \fBCURLcode sslctxfun(CURL *curl, void *sslctx, void *parm);\fP This function gets called by libcurl just before the initialization of an SSL connection after having processed all other SSL related options to give a last chance to an application to modify the behaviour of openssl's ssl initialization. The \fIsslctx\fP parameter is actually a pointer to an openssl \fISSL_CTX\fP. If an error is returned no attempt to establish a connection is made and the perform operation will return the error code from this callback function. Set the \fIparm\fP argument with the \fICURLOPT_SSL_CTX_DATA\fP option. This option was introduced in 7.11.0. \fBNOTE:\fP To use this properly, a non-trivial amount of knowledge of the openssl libraries is necessary. Using this function allows for example to use openssl callbacks to add additional validation code for certificates, and even to change the actual URI of an HTTPS request (example used in the lib509 test case). See also the example section for a replacement of the key, certificate and trust file settings. .IP CURLOPT_SSL_CTX_DATA Data pointer to pass to the ssl context callback set by the option \fICURLOPT_SSL_CTX_FUNCTION\fP, this is the pointer you'll get as third parameter, otherwise \fBNULL\fP. (Added in 7.11.0) .SH ERROR OPTIONS .IP CURLOPT_ERRORBUFFER Pass a char * to a buffer that the libcurl may store human readable error messages in. This may be more helpful than just the return code from the library. The buffer must be at least CURL_ERROR_SIZE big. Use \fICURLOPT_VERBOSE\fP and \fICURLOPT_DEBUGFUNCTION\fP to better debug/trace why errors happen. \fBNote:\fP if the library does not return an error, the buffer may not have been touched. Do not rely on the contents in those cases. .IP CURLOPT_STDERR Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr when showing the progress meter and displaying \fICURLOPT_VERBOSE\fP data. .IP CURLOPT_FAILONERROR A non-zero parameter tells the library to fail silently if the HTTP code returned is equal to or larger than 300. The default action would be to return the page normally, ignoring that code. .SH NETWORK OPTIONS .IP CURLOPT_URL The actual URL to deal with. The parameter should be a char * to a zero terminated string. The string must remain present until curl no longer needs it, as it doesn't copy the string. If the given URL lacks the protocol part ("http://" or "ftp://" etc), it will attempt to guess which protocol to use based on the given host name. If the given protocol of the set URL is not supported, libcurl will return on error (\fICURLE_UNSUPPORTED_PROTOCOL\fP) when you call \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Use \fIcurl_version_info(3)\fP for detailed info on which protocols that are supported. \fBNOTE:\fP \fICURLOPT_URL\fP is the only option that must be set before \fIcurl_easy_perform(3)\fP is called. .IP CURLOPT_PROXY Set HTTP proxy to use. The parameter should be a char * to a zero terminated string holding the host name or dotted IP address. To specify port number in this string, append :[port] to the end of the host name. The proxy string may be prefixed with [protocol]:// since any such prefix will be ignored. The proxy's port number may optionally be specified with the separate option \fICURLOPT_PROXYPORT\fP. \fBNOTE:\fP when you tell the library to use an HTTP proxy, libcurl will transparently convert operations to HTTP even if you specify an FTP URL etc. This may have an impact on what other features of the library you can use, such as \fICURLOPT_QUOTE\fP and similar FTP specifics that don't work unless you tunnel through the HTTP proxy. Such tunneling is activated with \fICURLOPT_HTTPPROXYTUNNEL\fP. \fBNOTE2:\fP libcurl respects the environment variables \fBhttp_proxy\fP, \fBftp_proxy\fP, \fBall_proxy\fP etc, if any of those is set. .IP CURLOPT_PROXYPORT Pass a long with this option to set the proxy port to connect to unless it is specified in the proxy string \fICURLOPT_PROXY\fP. .IP CURLOPT_PROXYTYPE Pass a long with this option to set type of the proxy. Available options for this are \fICURLPROXY_HTTP\fP and \fICURLPROXY_SOCKS5\fP, with the HTTP one being default. (Added in 7.10) .IP CURLOPT_HTTPPROXYTUNNEL Set the parameter to non-zero to get the library to tunnel all operations through a given HTTP proxy. Note that there is a big difference between using a proxy and to tunnel through it. If you don't know what this means, you probably don't want this tunneling option. .IP CURLOPT_INTERFACE Pass a char * as parameter. This set the interface name to use as outgoing network interface. The name can be an interface name, an IP address or a host name. .IP CURLOPT_DNS_CACHE_TIMEOUT Pass a long, this sets the timeout in seconds. Name resolves will be kept in memory for this number of seconds. Set to zero (0) to completely disable caching, or set to -1 to make the cached entries remain forever. By default, libcurl caches this info for 60 seconds. .IP CURLOPT_DNS_USE_GLOBAL_CACHE Pass a long. If the value is non-zero, it tells curl to use a global DNS cache that will survive between easy handle creations and deletions. This is not thread-safe and this will use a global variable. \fBWARNING:\fP this option is considered obsolete. Stop using it. Switch over to using the share interface instead! See \fICURLOPT_SHARE\fP and \fIcurl_share_init(3)\fP. .IP CURLOPT_BUFFERSIZE Pass a long specifying your preferred size for the receive buffer in libcurl. The main point of this would be that the write callback gets called more often and with smaller chunks. This is just treated as a request, not an order. You cannot be guaranteed to actually get the given size. (Added in 7.10) .IP CURLOPT_PORT Pass a long specifying what remote port number to connect to, instead of the one specified in the URL or the default port for the used protocol. .IP CURLOPT_TCP_NODELAY Pass a long specifying whether the TCP_NODELAY option should be set or cleared (1 = set, 0 = clear). The option is cleared by default. This will have no effect after the connection has been established. Setting this option will disable TCP's Nagle algorithm. The purpose of this algorithm is to try to minimize the number of small packets on the network (where "small packets" means TCP segments less than the Maximum Segment Size (MSS) for the network). Maximizing the amount of data sent per TCP segment is good because it amortizes the overhead of the send. However, in some cases (most notably telnet or rlogin) small segments may need to be sent without delay. This is less efficient than sending larger amounts of data at a time, and can contribute to congestion on the network if overdone. .SH NAMES and PASSWORDS OPTIONS (Authentication) .IP CURLOPT_NETRC This parameter controls the preference of libcurl between using user names and passwords from your \fI~/.netrc\fP file, relative to user names and passwords in the URL supplied with \fICURLOPT_URL\fP. \fBNote:\fP libcurl uses a user name (and supplied or prompted password) supplied with \fICURLOPT_USERPWD\fP in preference to any of the options controlled by this parameter. Pass a long, set to one of the values described below. .RS .IP CURL_NETRC_OPTIONAL The use of your \fI~/.netrc\fP file is optional, and information in the URL is to be preferred. The file will be scanned with the host and user name (to find the password only) or with the host only, to find the first user name and password after that \fImachine\fP, which ever information is not specified in the URL. Undefined values of the option will have this effect. .IP CURL_NETRC_IGNORED The library will ignore the file and use only the information in the URL. This is the default. .IP CURL_NETRC_REQUIRED This value tells the library that use of the file is required, to ignore the information in the URL, and to search the file with the host only. .RE Only machine name, user name and password are taken into account (init macros and similar things aren't supported). \fBNote:\fP libcurl does not verify that the file has the correct properties set (as the standard Unix ftp client does). It should only be readable by user. .IP CURLOPT_NETRC_FILE Pass a char * as parameter, pointing to a zero terminated string containing the full path name to the file you want libcurl to use as .netrc file. If this option is omitted, and \fICURLOPT_NETRC\fP is set, libcurl will attempt to find the a .netrc file in the current user's home directory. (Added in 7.10.9) .IP CURLOPT_USERPWD Pass a char * as parameter, which should be [user name]:[password] to use for the connection. Use \fICURLOPT_HTTPAUTH\fP to decide authentication method. When using HTTP and \fICURLOPT_FOLLOWLOCATION\fP, libcurl might perform several requests to possibly different hosts. libcurl will only send this user and password information to hosts using the initial host name (unless \fICURLOPT_UNRESTRICTED_AUTH\fP is set), so if libcurl follows locations to other hosts it will not send the user and password to those. This is enforced to prevent accidental information leakage. .IP CURLOPT_PROXYUSERPWD Pass a char * as parameter, which should be [user name]:[password] to use for the connection to the HTTP proxy. Use \fICURLOPT_PROXYAUTH\fP to decide authentication method. .IP CURLOPT_HTTPAUTH Pass a long as parameter, which is set to a bitmask, to tell libcurl what authentication method(s) you want it to use. The available bits are listed below. If more than one bit is set, libcurl will first query the site to see what authentication methods it supports and then pick the best one you allow it to use. Note that for some methods, this will induce an extra network round-trip. Set the actual name and password with the \fICURLOPT_USERPWD\fP option. (Added in 7.10.6) .RS .IP CURLAUTH_BASIC HTTP Basic authentication. This is the default choice, and the only method that is in wide-spread use and supported virtually everywhere. This is sending the user name and password over the network in plain text, easily captured by others. .IP CURLAUTH_DIGEST HTTP Digest authentication. Digest authentication is defined in RFC2617 and is a more secure way to do authentication over public networks than the regular old-fashioned Basic method. .IP CURLAUTH_GSSNEGOTIATE HTTP GSS-Negotiate authentication. The GSS-Negotiate (also known as plain \&"Negotiate") method was designed by Microsoft and is used in their web applications. It is primarily meant as a support for Kerberos5 authentication but may be also used along with another authentication methods. For more information see IETF draft draft-brezak-spnego-http-04.txt. \fBNOTE\fP that you need to build libcurl with a suitable GSS-API library for this to work. .IP CURLAUTH_NTLM HTTP NTLM authentication. A proprietary protocol invented and used by Microsoft. It uses a challenge-response and hash concept similar to Digest, to prevent the password from being eavesdropped. \fBNOTE\fP that you need to build libcurl with SSL support for this option to work. .IP CURLAUTH_ANY This is a convenience macro that sets all bits and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure. .IP CURLAUTH_ANYSAFE This is a convenience macro that sets all bits except Basic and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure. .RE .IP CURLOPT_PROXYAUTH Pass a long as parameter, which is set to a bitmask, to tell libcurl what authentication method(s) you want it to use for your proxy authentication. If more than one bit is set, libcurl will first query the site to see what authentication methods it supports and then pick the best one you allow it to use. Note that for some methods, this will induce an extra network round-trip. Set the actual name and password with the \fICURLOPT_PROXYUSERPWD\fP option. The bitmask can be constructed by or'ing together the bits listed above for the \fICURLOPT_HTTPAUTH\fP option. As of this writing, only Basic, Digest and NTLM work. (Added in 7.10.7) .SH HTTP OPTIONS .IP CURLOPT_AUTOREFERER Pass a non-zero parameter to enable this. When enabled, libcurl will automatically set the Referer: field in requests where it follows a Location: redirect. .IP CURLOPT_ENCODING Sets the contents of the Accept-Encoding: header sent in an HTTP request, and enables decoding of a response when a Content-Encoding: header is received. Three encodings are supported: \fIidentity\fP, which does nothing, \fIdeflate\fP which requests the server to compress its response using the zlib algorithm, and \fIgzip\fP which requests the gzip algorithm. If a zero-length string is set, then an Accept-Encoding: header containing all supported encodings is sent. This is a request, not an order; the server may or may not do it. This option must be set (to any non-NULL value) or else any unsolicited encoding done by the server is ignored. See the special file lib/README.encoding for details. .IP CURLOPT_FOLLOWLOCATION A non-zero parameter tells the library to follow any Location: header that the server sends as part of an HTTP header. \fBNOTE:\fP this means that the library will re-send the same request on the new location and follow new Location: headers all the way until no more such headers are returned. \fICURLOPT_MAXREDIRS\fP can be used to limit the number of redirects libcurl will follow. .IP CURLOPT_UNRESTRICTED_AUTH A non-zero parameter tells the library it can continue to send authentication (user+password) when following locations, even when hostname changed. Note that this is meaningful only when setting \fICURLOPT_FOLLOWLOCATION\fP. .IP CURLOPT_MAXREDIRS Pass a long. The set number will be the redirection limit. If that many redirections have been followed, the next redirect will cause an error (\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the \fICURLOPT_FOLLOWLOCATION\fP is used at the same time. .IP CURLOPT_PUT A non-zero parameter tells the library to use HTTP PUT to transfer data. The data should be set with \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZE\fP. This option is deprecated and starting with version 7.12.1 you should instead use \fICURLOPT_UPLOAD\fP. .IP CURLOPT_POST A non-zero parameter tells the library to do a regular HTTP post. This will also make the library use the a "Content-Type: application/x-www-form-urlencoded" header. (This is by far the most commonly used POST method). Use the \fICURLOPT_POSTFIELDS\fP option to specify what data to post and \fICURLOPT_POSTFIELDSIZE\fP to set the data size. Optionally, you can provide data to POST using the \fICURLOPT_READFUNCTION\fP and \fICURLOPT_READDATA\fP options but then you must make sure to not set \fICURLOPT_POSTFIELDS\fP to anything but NULL. When providing data with a callback, you must transmit it using chunked transfer-encoding or you must set the size of the data with the \fICURLOPT_POSTFIELDSIZE\fP option. You can override the default POST Content-Type: header by setting your own with \fICURLOPT_HTTPHEADER\fP. Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual. If you use POST to a HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with \fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must specify the size in the request. NOTE: if you have issued a POST request and want to make a HEAD or GET instead, you must explictly pick the new request type using \fICURLOPT_NOBODY\fP or \fICURLOPT_HTTPGET\fP or similar. .IP CURLOPT_POSTFIELDS Pass a char * as parameter, which should be the full data to post in an HTTP POST operation. You must make sure that the data is formatted the way you want the server to receive it. libcurl will not convert or encode it for you. Most web servers will assume this data to be url-encoded. Take note. This POST is a normal application/x-www-form-urlencoded kind (and libcurl will set that Content-Type by default when this option is used), which is the most commonly used one by HTML forms. See also the \fICURLOPT_POST\fP. Using \fICURLOPT_POSTFIELDS\fP implies \fICURLOPT_POST\fP. Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual. \fBNote:\fP to make multipart/formdata posts (aka rfc1867-posts), check out the \fICURLOPT_HTTPPOST\fP option. .IP CURLOPT_POSTFIELDSIZE If you want to post data to the server without letting libcurl do a strlen() to measure the data size, this option must be used. When this option is used you can post fully binary data, which otherwise is likely to fail. If this size is set to -1, the library will use strlen() to get the size. .IP CURLOPT_POSTFIELDSIZE_LARGE Pass a curl_off_t as parameter. Use this to set the size of the \fICURLOPT_POSTFIELDS\fP data to prevent libcurl from doing strlen() on the data to figure out the size. This is the large file version of the \fICURLOPT_POSTFIELDSIZE\fP option. (Added in 7.11.1) .IP CURLOPT_HTTPPOST Tells libcurl you want a multipart/formdata HTTP POST to be made and you instruct what data to pass on to the server. Pass a pointer to a linked list of curl_httppost structs as parameter. . The easiest way to create such a list, is to use \fIcurl_formadd(3)\fP as documented. The data in this list must remain intact until you close this curl handle again with \fIcurl_easy_cleanup(3)\fP. Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual. .IP CURLOPT_REFERER Pass a pointer to a zero terminated string as parameter. It will be used to set the Referer: header in the http request sent to the remote server. This can be used to fool servers or scripts. You can also set any custom header with \fICURLOPT_HTTPHEADER\fP. .IP CURLOPT_USERAGENT Pass a pointer to a zero terminated string as parameter. It will be used to set the User-Agent: header in the http request sent to the remote server. This can be used to fool servers or scripts. You can also set any custom header with \fICURLOPT_HTTPHEADER\fP. .IP CURLOPT_HTTPHEADER Pass a pointer to a linked list of HTTP headers to pass to the server in your HTTP request. The linked list should be a fully valid list of \fBstruct curl_slist\fP structs properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and \fIcurl_slist_free_all(3)\fP to clean up an entire list. If you add a header that is otherwise generated and used by libcurl internally, your added one will be used instead. If you add a header with no contents as in 'Accept:' (no data on the right side of the colon), the internally used header will get disabled. Thus, using this option you can add new headers, replace internal headers and remove internal headers. The headers included in the linked list must not be CRLF-terminated, because curl adds CRLF after each header item. Failure to comply with this will result in strange bugs because the server will most likely ignore part of the headers you specified. The first line in a request (usually containing a GET or POST) is not a header and cannot be replaced using this option. Only the lines following the request-line are headers. Pass a NULL to this to reset back to no custom headers. \fBNOTE:\fP The most commonly replaced headers have "shortcuts" in the options \fICURLOPT_COOKIE\fP, \fICURLOPT_USERAGENT\fP and \fICURLOPT_REFERER\fP. .IP CURLOPT_HTTP200ALIASES Pass a pointer to a linked list of aliases to be treated as valid HTTP 200 responses. Some servers respond with a custom header response line. For example, IceCast servers respond with "ICY 200 OK". By including this string in your list of aliases, the response will be treated as a valid HTTP header line such as "HTTP/1.0 200 OK". (Added in 7.10.3) The linked list should be a fully valid list of struct curl_slist structs, and be properly filled in. Use \fIcurl_slist_append(3)\fP to create the list and \fIcurl_slist_free_all(3)\fP to clean up an entire list. \fBNOTE:\fP The alias itself is not parsed for any version strings. So if your alias is "MYHTTP/9.9", Libcurl will not treat the server as responding with HTTP version 9.9. Instead Libcurl will use the value set by option \fICURLOPT_HTTP_VERSION\fP. .IP CURLOPT_COOKIE Pass a pointer to a zero terminated string as parameter. It will be used to set a cookie in the http request. The format of the string should be NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie should contain. If you need to set multiple cookies, you need to set them all using a single option and thus you need to concatenate them all in one single string. Set multiple cookies in one string like this: "name1=content1; name2=content2;" etc. Using this option multiple times will only make the latest string override the previously ones. .IP CURLOPT_COOKIEFILE Pass a pointer to a zero terminated string as parameter. It should contain the name of your file holding cookie data to read. The cookie data may be in Netscape / Mozilla cookie data format or just regular HTTP-style headers dumped to a file. Given an empty or non-existing file or by passing the empty string (""), this option will enable cookies for this curl handle, making it understand and parse received cookies and then use matching cookies in future request. .IP CURLOPT_COOKIEJAR Pass a file name as char *, zero terminated. This will make libcurl write all internally known cookies to the specified file when \fIcurl_easy_cleanup(3)\fP is called. If no cookies are known, no file will be created. Specify "-" to instead have the cookies written to stdout. Using this option also enables cookies for this session, so if you for example follow a location it will make matching cookies get sent accordingly. \fBNOTE:\fP If the cookie jar file can't be created or written to (when the \fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an error for this. Using \fICURLOPT_VERBOSE\fP or \fICURLOPT_DEBUGFUNCTION\fP will get a warning to display, but that is the only visible feedback you get about this possibly lethal situation. .IP CURLOPT_COOKIESESSION Pass a long set to non-zero to mark this as a new cookie "session". It will force libcurl to ignore all cookies it is about to load that are "session cookies" from the previous session. By default, libcurl always stores and loads all cookies, independent if they are session cookies are not. Session cookies are cookies without expiry date and they are meant to be alive and existing for this "session" only. .IP CURLOPT_HTTPGET Pass a long. If the long is non-zero, this forces the HTTP request to get back to GET. usable if a POST, HEAD, PUT or a custom request have been used previously using the same curl handle. .IP CURLOPT_HTTP_VERSION Pass a long, set to one of the values described below. They force libcurl to use the specific HTTP versions. This is not sensible to do unless you have a good reason. .RS .IP CURL_HTTP_VERSION_NONE We don't care about what version the library uses. libcurl will use whatever it thinks fit. .IP CURL_HTTP_VERSION_1_0 Enforce HTTP 1.0 requests. .IP CURL_HTTP_VERSION_1_1 Enforce HTTP 1.1 requests. .RE .SH FTP OPTIONS .IP CURLOPT_FTPPORT Pass a pointer to a zero terminated string as parameter. It will be used to get the IP address to use for the ftp PORT instruction. The PORT instruction tells the remote server to connect to our specified IP address. The string may be a plain IP address, a host name, an network interface name (under Unix) or just a '-' letter to let the library use your systems default IP address. Default FTP operations are passive, and thus won't use PORT. You disable PORT again and go back to using the passive version by setting this option to NULL. .IP CURLOPT_QUOTE Pass a pointer to a linked list of FTP commands to pass to the server prior to your ftp request. This will be done before any other FTP commands are issued (even before the CWD command). The linked list should be a fully valid list of 'struct curl_slist' structs properly filled in. Use \fIcurl_slist_append(3)\fP to append strings (commands) to the list, and clear the entire list afterwards with \fIcurl_slist_free_all(3)\fP. Disable this operation again by setting a NULL to this option. .IP CURLOPT_POSTQUOTE Pass a pointer to a linked list of FTP commands to pass to the server after your ftp transfer request. The linked list should be a fully valid list of struct curl_slist structs properly filled in as described for \fICURLOPT_QUOTE\fP. Disable this operation again by setting a NULL to this option. .IP CURLOPT_PREQUOTE Pass a pointer to a linked list of FTP commands to pass to the server after the transfer type is set. The linked list should be a fully valid list of struct curl_slist structs properly filled in as described for \fICURLOPT_QUOTE\fP. Disable this operation again by setting a NULL to this option. .IP CURLOPT_FTPLISTONLY A non-zero parameter tells the library to just list the names of an ftp directory, instead of doing a full directory listing that would include file sizes, dates etc. This causes an FTP NLST command to be sent. Beware that some FTP servers list only files in their response to NLST; they might not include subdirectories and symbolic links. .IP CURLOPT_FTPAPPEND A non-zero parameter tells the library to append to the remote file instead of overwrite it. This is only useful when uploading to an ftp site. .IP CURLOPT_FTP_USE_EPRT Pass a long. If the value is non-zero, it tells curl to use the EPRT (and LPRT) command when doing active FTP downloads (which is enabled by \fICURLOPT_FTPPORT\fP). Using EPRT means that it will first attempt to use EPRT and then LPRT before using PORT, but if you pass FALSE (zero) to this option, it will not try using EPRT or LPRT, only plain PORT. (Added in 7.10.5) If the server is an IPv6 host, this option will have no effect as of 7.12.3. .IP CURLOPT_FTP_USE_EPSV Pass a long. If the value is non-zero, it tells curl to use the EPSV command when doing passive FTP downloads (which it always does by default). Using EPSV means that it will first attempt to use EPSV before using PASV, but if you pass FALSE (zero) to this option, it will not try using EPSV, only plain PASV. If the server is an IPv6 host, this option will have no effect as of 7.12.3. .IP CURLOPT_FTP_CREATE_MISSING_DIRS Pass a long. If the value is non-zero, curl will attempt to create any remote directory that it fails to CWD into. CWD is the command that changes working directory. (Added in 7.10.7) .IP CURLOPT_FTP_RESPONSE_TIMEOUT Pass a long. Causes curl to set a timeout period (in seconds) on the amount of time that the server is allowed to take in order to generate a response message for a command before the session is considered hung. Note that while curl is waiting for a response, this value overrides \fICURLOPT_TIMEOUT\fP. It is recommended that if used in conjunction with \fICURLOPT_TIMEOUT\fP, you set \fICURLOPT_FTP_RESPONSE_TIMEOUT\fP to a value smaller than \fICURLOPT_TIMEOUT\fP. (Added in 7.10.8) .IP CURLOPT_FTP_SSL Pass a long using one of the values from below, to make libcurl use your desired level of SSL for the ftp transfer. (Added in 7.11.0) .RS .IP CURLFTPSSL_NONE Don't attempt to use SSL. .IP CURLFTPSSL_TRY Try using SSL, proceed as normal otherwise. .IP CURLFTPSSL_CONTROL Require SSL for the control connection or fail with \fICURLE_FTP_SSL_FAILED\fP. .IP CURLFTPSSL_ALL Require SSL for all communication or fail with \fICURLE_FTP_SSL_FAILED\fP. .RE .IP CURLOPT_FTPSSLAUTH Pass a long using one of the values from below, to alter how libcurl issues \&"AUTH TLS" or "AUTH SSL" when FTP over SSL is activated (see \fICURLOPT_FTP_SSL\fP). (Added in 7.12.2) .RS .IP CURLFTPAUTH_DEFAULT Allow libcurl to decide .IP CURLFTPAUTH_SSL Try "AUTH SSL" first, and only if that fails try "AUTH TLS" .IP CURLFTPAUTH_TLS Try "AUTH TLS" first, and only if that fails try "AUTH SSL" .RE .IP CURLOPT_SOURCE_URL When set, it enables a FTP third party transfer, using the set URL as source, while \fICURLOPT_URL\fP is the target. .IP CURLOPT_SOURCE_USERPWD Set "username:password" to use for the source connection when doing FTP third party transfers. .IP CURLOPT_SOURCE_QUOTE Exactly like \fICURLOPT_QUOTE\fP, but for the source host. .IP CURLOPT_SOURCE_PREQUOTE Exactly like \fICURLOPT_PREQUOTE\fP, but for the source host. .IP CURLOPT_SOURCE_POSTQUOTE Exactly like \fICURLOPT_POSTQUOTE\fP, but for the source host. .IP CURLOPT_FTP_ACCOUNT Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP server asks for "account data" after user name and password has been provided, this data is sent off using the ACCT command. (Added in 7.13.0) .SH PROTOCOL OPTIONS .IP CURLOPT_TRANSFERTEXT A non-zero parameter tells the library to use ASCII mode for ftp transfers, instead of the default binary transfer. For LDAP transfers it gets the data in plain text instead of HTML and for win32 systems it does not set the stdout to binary mode. This option can be usable when transferring text data between systems with different views on certain characters, such as newlines or similar. .IP CURLOPT_CRLF Convert Unix newlines to CRLF newlines on transfers. .IP CURLOPT_RANGE Pass a char * as parameter, which should contain the specified range you want. It should be in the format "X-Y", where X or Y may be left out. HTTP transfers also support several intervals, separated with commas as in \fI"X-Y,N-M"\fP. Using this kind of multiple intervals will cause the HTTP server to send the response document in pieces (using standard MIME separation techniques). Pass a NULL to this option to disable the use of ranges. .IP CURLOPT_RESUME_FROM Pass a long as parameter. It contains the offset in number of bytes that you want the transfer to start from. Set this option to 0 to make the transfer start from the beginning (effectively disabling resume). .IP CURLOPT_RESUME_FROM_LARGE Pass a curl_off_t as parameter. It contains the offset in number of bytes that you want the transfer to start from. (Added in 7.11.0) .IP CURLOPT_CUSTOMREQUEST Pass a pointer to a zero terminated string as parameter. It will be user instead of GET or HEAD when doing an HTTP request, or instead of LIST or NLST when doing an ftp directory listing. This is useful for doing DELETE or other more or less obscure HTTP requests. Don't do this at will, make sure your server supports the command first. Restore to the internal default by setting this to NULL. \fBNOTE:\fP Many people have wrongly used this option to replace the entire request with their own, including multiple headers and POST contents. While that might work in many cases, it will cause libcurl to send invalid requests and it could possibly confuse the remote server badly. Use \fICURLOPT_POST\fP and \fICURLOPT_POSTFIELDS\fP to set POST data. Use \fICURLOPT_HTTPHEADER\fP to replace or extend the set of headers sent by libcurl. Use \fICURLOPT_HTTP_VERSION\fP to change HTTP version. .IP CURLOPT_FILETIME Pass a long. If it is a non-zero value, libcurl will attempt to get the modification date of the remote document in this operation. This requires that the remote server sends the time or replies to a time querying command. The \fIcurl_easy_getinfo(3)\fP function with the \fICURLINFO_FILETIME\fP argument can be used after a transfer to extract the received time (if any). .IP CURLOPT_NOBODY A non-zero parameter tells the library to not include the body-part in the output. This is only relevant for protocols that have separate header and body parts. On HTTP(S) servers, this will make libcurl do a HEAD request. To change back to GET, you should use \fICURLOPT_HTTPGET\fP. To change back to POST, you should use \fICURLOPT_POST\fP. Setting \fICURLOPT_NOBODY\fP to zero has no effect. .IP CURLOPT_INFILESIZE When uploading a file to a remote site, this option should be used to tell libcurl what the expected size of the infile is. This value should be passed as a long. See also \fICURLOPT_INFILESIZE_LARGE\fP. .IP CURLOPT_INFILESIZE_LARGE When uploading a file to a remote site, this option should be used to tell libcurl what the expected size of the infile is. This value should be passed as a curl_off_t. (Added in 7.11.0) .IP CURLOPT_UPLOAD A non-zero parameter tells the library to prepare for an upload. The \fICURLOPT_READDATA\fP and \fICURLOPT_INFILESIZEE\fP or \fICURLOPT_INFILESIZE_LARGE\fP are also interesting for uploads. If the protocol is HTTP, uploading means using the PUT request unless you tell libcurl otherwise. Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual. If you use PUT to a HTTP 1.1 server, you can upload data without knowing the size before starting the transfer if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with \fICURLOPT_HTTPHEADER\fP. With HTTP 1.0 or without chunked transfer, you must specify the size. .IP CURLOPT_MAXFILESIZE Pass a long as parameter. This allows you to specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned. \fBNOTE:\fP The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers. .IP CURLOPT_MAXFILESIZE_LARGE Pass a curl_off_t as parameter. This allows you to specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will be returned. (Added in 7.11.0) \fBNOTE:\fP The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers. .IP CURLOPT_TIMECONDITION Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE\fP time value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP or \fICURL_TIMECOND_IFUNMODSINCE\fP. This feature applies to HTTP and FTP. \fBNOTE:\fP The last modification time of a file is not always known and in such instances this feature will have no effect even if the given time condition would have not been met. .IP CURLOPT_TIMEVALUE Pass a long as parameter. This should be the time in seconds since 1 jan 1970, and the time will be used in a condition as specified with \fICURLOPT_TIMECONDITION\fP. .SH CONNECTION OPTIONS .IP CURLOPT_TIMEOUT Pass a long as parameter containing the maximum time in seconds that you allow the libcurl transfer operation to take. Normally, name lookups can take a considerable time and limiting operations to less than a few minutes risk aborting perfectly normal operations. This option will cause curl to use the SIGALRM to enable time-outing system calls. \fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set. .IP CURLOPT_LOW_SPEED_LIMIT Pass a long as parameter. It contains the transfer speed in bytes per second that the transfer should be below during \fICURLOPT_LOW_SPEED_TIME\fP seconds for the library to consider it too slow and abort. .IP CURLOPT_LOW_SPEED_TIME Pass a long as parameter. It contains the time in seconds that the transfer should be below the \fICURLOPT_LOW_SPEED_LIMIT\fP for the library to consider it too slow and abort. .IP CURLOPT_MAXCONNECTS Pass a long. The set number will be the persistent connection cache size. The set amount will be the maximum amount of simultaneously open connections that libcurl may cache. Default is 5, and there isn't much point in changing this value unless you are perfectly aware of how this work and changes libcurl's behaviour. This concerns connection using any of the protocols that support persistent connections. When reaching the maximum limit, curl uses the \fICURLOPT_CLOSEPOLICY\fP to figure out which of the existing connections to close to prevent the number of open connections to increase. \fBNOTE:\fP if you already have performed transfers with this curl handle, setting a smaller MAXCONNECTS than before may cause open connections to get closed unnecessarily. .IP CURLOPT_CLOSEPOLICY Pass a long. This option sets what policy libcurl should use when the connection cache is filled and one of the open connections has to be closed to make room for a new connection. This must be one of the CURLCLOSEPOLICY_* defines. Use \fICURLCLOSEPOLICY_LEAST_RECENTLY_USED\fP to make libcurl close the connection that was least recently used, that connection is also least likely to be capable of re-use. Use \fICURLCLOSEPOLICY_OLDEST\fP to make libcurl close the oldest connection, the one that was created first among the ones in the connection cache. The other close policies are not support yet. .IP CURLOPT_FRESH_CONNECT Pass a long. Set to non-zero to make the next transfer use a new (fresh) connection by force. If the connection cache is full before this connection, one of the existing connections will be closed as according to the selected or default policy. This option should be used with caution and only if you understand what it does. Set this to 0 to have libcurl attempt re-using an existing connection (default behavior). .IP CURLOPT_FORBID_REUSE Pass a long. Set to non-zero to make the next transfer explicitly close the connection when done. Normally, libcurl keep all connections alive when done with one transfer in case there comes a succeeding one that can re-use them. This option should be used with caution and only if you understand what it does. Set to 0 to have libcurl keep the connection open for possibly later re-use (default behavior). .IP CURLOPT_CONNECTTIMEOUT Pass a long. It should contain the maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, once it has connected, this option is of no more use. Set to zero to disable connection timeout (it will then only timeout on the system's internal timeouts). See also the \fICURLOPT_TIMEOUT\fP option. \fBNOTE:\fP this is not recommended to use in unix multi-threaded programs, as it uses signals unless \fICURLOPT_NOSIGNAL\fP (see above) is set. .IP CURLOPT_IPRESOLVE Allows an application to select what kind of IP addresses to use when resolving host names. This is only interesting when using host names that resolve addresses using more than one version of IP. The allowed values are: .RS .IP CURL_IPRESOLVE_WHATEVER Default, resolves addresses to all IP versions that your system allows. .IP CURL_IPRESOLVE_V4 Resolve to ipv4 addresses. .IP CURL_IPRESOLVE_V6 Resolve to ipv6 addresses. .RE .SH SSL and SECURITY OPTIONS .IP CURLOPT_SSLCERT Pass a pointer to a zero terminated string as parameter. The string should be the file name of your certificate. The default format is "PEM" and can be changed with \fICURLOPT_SSLCERTTYPE\fP. .IP CURLOPT_SSLCERTTYPE Pass a pointer to a zero terminated string as parameter. The string should be the format of your certificate. Supported formats are "PEM" and "DER". (Added in 7.9.3) .IP CURLOPT_SSLCERTPASSWD Pass a pointer to a zero terminated string as parameter. It will be used as the password required to use the \fICURLOPT_SSLCERT\fP certificate. This option is replaced by \fICURLOPT_SSLKEYPASSWD\fP and should only be used for backward compatibility. You never needed a pass phrase to load a certificate but you need one to load your private key. .IP CURLOPT_SSLKEY Pass a pointer to a zero terminated string as parameter. The string should be the file name of your private key. The default format is "PEM" and can be changed with \fICURLOPT_SSLKEYTYPE\fP. .IP CURLOPT_SSLKEYTYPE Pass a pointer to a zero terminated string as parameter. The string should be the format of your private key. Supported formats are "PEM", "DER" and "ENG". \fBNOTE:\fP The format "ENG" enables you to load the private key from a crypto engine. In this case \fICURLOPT_SSLKEY\fP is used as an identifier passed to the engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE\fP. \&"DER" format key file currently does not work because of a bug in OpenSSL. .IP CURLOPT_SSLKEYPASSWD Pass a pointer to a zero terminated string as parameter. It will be used as the password required to use the \fICURLOPT_SSLKEY\fP private key. .IP CURLOPT_SSLENGINE Pass a pointer to a zero terminated string as parameter. It will be used as the identifier for the crypto engine you want to use for your private key. \fBNOTE:\fP If the crypto device cannot be loaded, \fICURLE_SSL_ENGINE_NOTFOUND\fP is returned. .IP CURLOPT_SSLENGINE_DEFAULT Sets the actual crypto engine as the default for (asymmetric) crypto operations. \fBNOTE:\fP If the crypto device cannot be set, \fICURLE_SSL_ENGINE_SETFAILED\fP is returned. .IP CURLOPT_SSLVERSION Pass a long as parameter to control what version of SSL/TLS to attempt to use. The available options are: .RS .IP CURL_SSLVERSION_DEFAULT The default action. When libcurl built with OpenSSL, this will attempt to figure out the remote SSL protocol version. Unfortunately there are a lot of ancient and broken servers in use which cannot handle this technique and will fail to connect. When libcurl is built with GnuTLS, this will mean SSLv3. .IP CURL_SSLVERSION_TLSv1 Force TLSv1 .IP CURL_SSLVERSION_SSLv2 Force SSLv2 .IP CURL_SSLVERSION_SSLv3 Force SSLv3 .RE .IP CURLOPT_SSL_VERIFYPEER Pass a long as parameter. This option determines whether curl verifies the authenticity of the peer's certificate. A nonzero value means curl verifies; zero means it doesn't. The default is nonzero, but before 7.10, it was zero. When negotiating an SSL connection, the server sends a certificate indicating its identity. Curl verifies whether the certificate is authentic, i.e. that you can trust that the server is who the certificate says it is. This trust is based on a chain of digital signatures, rooted in certification authority (CA) certificates you supply. As of 7.10, curl installs a default bundle of CA certificates and you can specify alternate certificates with the \fICURLOPT_CAINFO\fP option or the \fICURLOPT_CAPATH\fP option. When \fICURLOPT_SSL_VERIFYPEER\fP is nonzero, and the verification fails to prove that the certificate is authentic, the connection fails. When the option is zero, the connection succeeds regardless. Authenticating the certificate is not by itself very useful. You typically want to ensure that the server, as authentically identified by its certificate, is the server you mean to be talking to. Use \fICURLOPT_SSL_VERIFYHOST\fP to control that. .IP CURLOPT_CAINFO Pass a char * to a zero terminated string naming a file holding one or more certificates to verify the peer with. This makes sense only when used in combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If \fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAINFO\fP need not even indicate an accessible file. .IP CURLOPT_CAPATH Pass a char * to a zero terminated string naming a directory holding multiple CA certificates to verify the peer with. The certificate directory must be prepared using the openssl c_rehash utility. This makes sense only when used in combination with the \fICURLOPT_SSL_VERIFYPEER\fP option. If \fICURLOPT_SSL_VERIFYPEER\fP is zero, \fICURLOPT_CAPATH\fP need not even indicate an accessible path. The \fICURLOPT_CAPATH\fP function apparently does not work in Windows due to some limitation in openssl. (Added in 7.9.8) .IP CURLOPT_RANDOM_FILE Pass a char * to a zero terminated file name. The file will be used to read from to seed the random engine for SSL. The more random the specified file is, the more secure the SSL connection will become. .IP CURLOPT_EGDSOCKET Pass a char * to the zero terminated path name to the Entropy Gathering Daemon socket. It will be used to seed the random engine for SSL. .IP CURLOPT_SSL_VERIFYHOST Pass a long as parameter. This option determines whether curl verifies that the server claims to be who you want it to be. When negotiating an SSL connection, the server sends a certificate indicating its identity. When \fICURLOPT_SSL_VERIFYHOST\fP is 2, that certificate must indicate that the server is the server to which you meant to connect, or the connection fails. Curl considers the server the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the URL to which you told Curl to connect. When the value is 1, the certificate must contain a Common Name field, but it doesn't matter what name it says. (This is not ordinarily a useful setting). When the value is 0, the connection succeeds regardless of the names in the certificate. The default, since 7.10, is 2. The checking this option controls is of the identity that the server \fIclaims\fP. The server could be lying. To control lying, see \fICURLOPT_SSL_VERIFYPEER\fP. .IP CURLOPT_SSL_CIPHER_LIST Pass a char *, pointing to a zero terminated string holding the list of ciphers to use for the SSL connection. The list must be syntactically correct, it consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used, \!, \- and \+ can be used as operators. Valid examples of cipher lists include 'RC4-SHA', \'SHA1+DES\', 'TLSv1' and 'DEFAULT'. The default list is normally set when you compile OpenSSL. You'll find more details about cipher lists on this URL: \fIhttp://www.openssl.org/docs/apps/ciphers.html\fP .IP CURLOPT_KRB4LEVEL Pass a char * as parameter. Set the krb4 security level, this also enables krb4 awareness. This is a string, 'clear', 'safe', 'confidential' or \&'private'. If the string is set but doesn't match one of these, 'private' will be used. Set the string to NULL to disable kerberos4. The kerberos support only works for FTP. .SH OTHER OPTIONS .IP CURLOPT_PRIVATE Pass a char * as parameter, pointing to data that should be associated with this curl handle. The pointer can subsequently be retrieved using \fIcurl_easy_getinfo(3)\fP with the CURLINFO_PRIVATE option. libcurl itself does nothing with this data. (Added in 7.10.3) .IP CURLOPT_SHARE Pass a share handle as a parameter. The share handle must have been created by a previous call to \fIcurl_share_init(3)\fP. Setting this option, will make this curl handle use the data from the shared handle instead of keeping the data to itself. This enables several curl handles to share data. If the curl handles are used simultaneously, you \fBMUST\fP use the locking methods in the share handle. See \fIcurl_share_setopt(3)\fP for details. .SH TELNET OPTIONS .IP CURLOPT_TELNETOPTIONS Provide a pointer to a curl_slist with variables to pass to the telnet negotiations. The variables should be in the format . libcurl supports the options 'TTYPE', 'XDISPLOC' and 'NEW_ENV'. See the TELNET standard for details. .SH RETURN VALUE CURLE_OK (zero) means that the option was set properly, non-zero means an error occurred as \fI\fP defines. See the \fIlibcurl-errors(3)\fP man page for the full list with descriptions. If you try to set an option that libcurl doesn't know about, perhaps because the library is too old to support it or the option was removed in a recent version, this function will return \fICURLE_FAILED_INIT\fP. .SH "SEE ALSO" .BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_remove_handle.html0000644000175000017500000000357010265631023025670 0ustar danieldaniel curl_multi_remove_handle man page

NAME

curl_multi_remove_handle - remove an easy handle from a multi session

SYNOPSIS

#include <curl/curl.h>

CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);

DESCRIPTION

Removes a given easy_handle from the multi_handle. This will make the specified easy handle be removed from this multi handle's control.

When the easy handle has been removed from a multi stack, it is again perfectly legal to invoke curl_easy_perform() on this easy handle.

Removing a handle while being used, will effectively halt all transfers in progress.

RETURN VALUE

CURLMcode type, general libcurl multi interface error code.

SEE ALSO

curl_multi_cleanup (3) curl_multi_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_fdset.30000644000175000017500000000313010265631023023353 0ustar danieldaniel.\" $Id: curl_multi_fdset.3,v 1.11 2005/04/25 08:55:55 bagder Exp $ .\" .TH curl_multi_fdset 3 "25 Apr 2005" "libcurl 7.9.5" "libcurl Manual" .SH NAME curl_multi_fdset - extracts file descriptor information from a multi handle .SH SYNOPSIS .nf #include CURLMcode curl_multi_fdset(CURLM *multi_handle, fd_set *read_fd_set, fd_set *write_fd_set, fd_set *exc_fd_set, int *max_fd); .ad .SH DESCRIPTION This function extracts file descriptor information from a given multi_handle. libcurl returns its fd_set sets. The application can use these to select() on, but be sure to FD_ZERO them before calling this function as \fIcurl_multi_fdset(3)\fP only adds its own descriptors it doesn't zero or otherwise remove any other. The \fIcurl_multi_perform(3)\fP function should be called as soon as one of them are ready to be read from or written to. If no file descriptors are set by libcurl, \fImax_fd\fP will contain -1 when this function returns. Otherwise it will contain the higher descriptor number libcurl set. You should also be aware that when doing select(), you should consider using a rather small (single-digit number of seconds) timeout and call \fIcurl_multi_perform\fP regularly - even if no activity has been seen on the fd_sets - as otherwise libcurl-internal retries and timeouts may not work as you'd think and want. .SH RETURN VALUE CURLMcode type, general libcurl multi interface error code. See \fIlibcurl-errors(3)\fP .SH "SEE ALSO" .BR curl_multi_cleanup "(3)," curl_multi_init "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_strequal.pdf0000644000175000017500000003724210265631023023316 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xV]o6}ׯ H͒76 p7?p,V tP(2h)Ga?z)r!@J8s;Yև^R*$[0vqdgQ7GɓCU|?voT3e>?^c_'kJ039]ȉc_u,-|YD>cA-Ʋ?ϝa`@S"k;.mҕ eiQ.j.eD(*]6 Q-z]MrqrO.E+45e,̅">V_/.W^7b8l8EA'!Jޯ\4]s qG9O+^A }C*8bKx>5ɺcqm~1y}x6jO5L8?+ich*X$n*n6rxSĤKߚ݇cc }jq,.G2WrǙ"6vh(=pAٍJa{YBQsQԂur0Z 5U*pDв=v*6AK{Bcd<$|#5DF^6ܶxҬUBx=c_QHdʆ2(!>CZmom85 b/{Q׹9ބ=j0>bW~!w):˧_VMQ}6Ӗ/>7mY ^-K!⩪g_ЬK ׉rq\$_O{CͷU|W HUEOf{dȶ*wj[UՑ˶?JAcpCf?!Рc6n5-4> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeR{LSwrnt^7!*3斠nscFTmJK}HKim}R *0'Nɢnq",1lK\[Lu?V,cKNNwrN,AP]RVkuiN6l.g~9ʯW?_Z;zCDLhkjjU5o).--%m2Vʤɂl`hQGɲl5U%5l"ՍT|>5M۵h4XekȒuYWGo3UZO1diխ?;ALOtq T ۑH5Bv# ^YD t.gWΠh).^xqlyra}I$"nzqe猧wWW)A=V9-]ɽ<3C5X廩'7,u>!T,p԰v2z{RW #?A] JXUӹd8CQstgjUBP*0ًQ z_goe̴UC눦f8%7{c3FRĺbđ? ɑ+g0;zuC%`(& oq[:#bX  \g;8+Ǡ;`MCRپs@. o$Qp J1>o[xjr ˕&kF9RVp|t]O"!!Kl./kR@Ե/(p'3(oo = A8ؠǧl]nx} biI0pY֍uf8fpltora%@(!~sǒ "hng-jk `.X>stream xWyXS׶?sQ TsۋXZŊSH” aI a @iЫVxV{}un}_/99:{[[k ɓ@搷g>yT4H۴p&q/zhP?Cc)` hIxJf*C-OHwoŋ 6dvoT#O[RR,MI{o3V(~ U/:.N??Z!M&WU*"WX^'Ǥk*SBvKAKww0dJ{KjV&ao<,}wd+FlOL&ˈWV b9*F {"Gl'V;~b &uD1$tb1D$/bb c/7&]X9DH KjʛS2 O4ysg^64kW^g0c錚m3dg< {M8k}21@HHeltaH)(paD>->z "]f>7Qa$IVՁ6P`9 ɞxN3*5&"`8Tx>x/&oT,nMp=`͢0 9\P ityy:(h}4QQ &UQ@fȒcS+ϭiXA=eLŅr!'N3=PʢSsbzC8cVKRlD:mSW9 [z3_sI-&Osp va9M~jsg4B[m3BGJ5yj ƀ|Im7;4HA#a;< vB +$|^{=n7cp G8%a| G ]rV h!34xoΏ.7E!{d?&șa1W:ў4D%QzUyIYڤDÛN!aP6NQea !øc( GipT]m$;JP׋j F;3V Ѥ ~h>w]ѳ⒏XPi4Ҵt@Wȶ_HZnREM s1i0XyQ sunTB'9ڦN/ZH ig8Tչ8Tp5Kks]y65^0y؇jS(FfuNjcMF3ϕ3… ;$q-MSЬ[htϹlV{>\†'iSJMKy?xFkpvv(C:$kM $NHI0 dW Gsa-CQ(.D `g>wFFiCmrS/&ټ] }|@L~|mv*<%ܑ60?S(OۣIXPUcoַẕн)b̿[pw\%Yl!EF)ǵ44_eMO<%ä-@ X g~~ۏr8yf}mֻܾ.A/ zp/f#P,Fd!߅0 -D|,$:MB1Pqps{zp>ň #Du{ɪ7Hb51BYb ]R q",h՟^Q ,ѭIKtaDnͻ.}XÈ gsP0@c=Φ„ƃs,{Pp:0(09W7'@T'lz_LoL( ,[S>|?4K>bjfacJP tG i5a,C'Zzi.g2+4FXпVC^l z&tW!kw%9&D1qB%xGOez'_7a`0t|Jf#2.4̦jr4)r:E8?%pL3`*3؉ k3AT:\5Yu"憪ْ6ԈuT l]ֻmϠdyp~:U]Xd ,L3Ĵ+>(!Jir$qɩ[%#"%ɸ'UgfP}Џ^泸!;NC:m&mȮ˰D=&[lzygv\V)/x|zx{[Q.J̩Gn\YMH#\Z׻,gW[Lq, Ǜ'*q1kK'@,X|\C߇ޓ6H񇎏Îl\ HTrMZM'= endstream endobj 21 0 obj 4147 endobj 22 0 obj <>stream xXyTS׾>sJzjmE֡+2je !#I6 0ɌL J:3j-zj{޾}x;oc{Z/++++}ɓEo۹ Me, b<\$/Nl`׿Mk|Y 82b= Hsғ3} [xe5k|o`\FRw*ęk}өI}Rs1qi1q)[RRI+/+ťK&I91X]_QLl'@()3=w_fL}}Pߝ5A!q Y1s 6PHbwJ"woNOH LYv>Yj\thBߒK,o- wHbH,#fC"B%BrbF%>#>""BU""">&‰ħD hb*"DNx^ b#1!EIL!V8{Vgۓ'uz-M=9{Z3S7rJ2%}ʅƩߘF4i-!3o3~?w3|g"gargr{"`quPYgMLubݚh&7/.2Jfoev 8 mRKPABZLaVC+ I )f sb$L(*9yBpjC$,7: 젊jADTdsAB9g;E @ H%W#3EP2YFrg͓gpYem2x{U3fkIZ+BTB*RD'^ %O7غu)3!#AZy(IFilsȟm:ؾU4"s{suwvȘ.6'docHصVayV6\6 %FDKuz25|GjiHytbASkc F.C"?-S9mMvrʅH6\FrΓ||J}߈i\RE#'a{CvfN;ΥsJu\R$ 8Yvd!ʮTu:/ 8^V2IYj:f [hy>Go zbbucl|ӱlt-|#Wn Zצ湖}KN%O֤T Rڲg8̽W: 3*;YǗf@sWЉki6] ]=ͻvJ Ӣ k5)OMT I1k} ބ޸j`Bn8G{.`.dK梚f6] nU֥9VܛIZ`֙pb'cd,8@LUbx>__3?Oh '3{r"ALo.5p8v*39CJJt.Er 4(kSG8B݊7kfʍsYU0—{Y9\Ybԑh!2 `خV S0m)U UUF;5]uI1H_0;f%wEר>OrANZ&f#GQ0vhF׮!"IG@ XGI+kܳp'.=pPG6 Q$ xX`'It\T%KK̠ PBw FƼ`=$u6<{Cb)WSN]tYfE`9尿#`PݛFqǎ7/Fmr}U _NC혺vp9Cp}y5fg3- KEtS}Mt. -Wo$1 H{J~6^:gezgߐ ٴ43S"ilmklhkl =b{kTp˸G2F|-VY䎡 ΕBDPHCIJfjDM9: GhgJ(vrͩ/Rkk}ʉ aSDU8/ҳQ 1.֯y1Y`>jIn I:i$SU؂gG*-:6}_ *O1\Q $JcVVL ,#q-iYyy-kXVq?MI6U\gU1)Tmx? #XPVY} οjeux+˸ 祜SUb+Ӫ+T| *X0Lۢxm/0&|f6Gf Z+q[bp a N)zvc%[)2(NT_PZ\VlUW pTx`'PQd9ACїן,( >wQCXR5*I^6%G$xNw`[ dթCMN}Eug ߉V("_&+=5ߨQTu<@Q`|XYIju3~@F Po…wiֳqy{p/f7Wxz(!*SNw&e`7 LVH`M7RjC<$CJ5 :_+ID&u-C${i}pxZ>A} HTA}ƅqx]'UP\: oQJ|GzKJP*bj2ic{' ?)N9p䍼 k!1Ա &\&8nQv }Emhd@|yͽ'nKKf:t2!S{Ԓغi[01;=낱GXƽ:UWlתaNrOځ9||QV*D5ۑ2\ t̋6 =A2w8ۇA+p\R ;k"ZoNLik-,3w}h7ͯ~Uk𡈃"?s`Ļͮ5ybFfRJRRR.(WnԧH =^eC+bwdS/x -ǪT^mymf<'3׹f-xY/iQzZHz[G󑶎fG0ѬQuFxZ_UO3Ț?(!)Д=_d\_ _A @i0nWP\U ca0z&|], h[EʪJKMR,߁d}fn2OU㩫6'$ NRϞmL=#u瀏!u8^LQ5χ+h fk9Ol%)YI^%xQܝ3p)(n-sViTfij>JUv`֭GG#Ǜ/qAnvQ3_=;>V$DReZ.g᮫>LHOD {8=%J?2q\q{~)jګn%I˕+=w.P޲:&O}F{ŴiOkM',4Y endstream endobj 23 0 obj 4994 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001629 00000 n 0000015315 00000 n 0000001561 00000 n 0000001983 00000 n 0000001835 00000 n 0000001677 00000 n 0000001401 00000 n 0000000015 00000 n 0000001381 00000 n 0000014917 00000 n 0000013657 00000 n 0000014533 00000 n 0000013155 00000 n 0000014298 00000 n 0000012737 00000 n 0000001751 00000 n 0000001781 00000 n 0000002130 00000 n 0000003361 00000 n 0000003382 00000 n 0000007615 00000 n 0000007636 00000 n 0000012716 00000 n 0000014199 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15455 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_formadd.30000644000175000017500000002212010265631023022450 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_formadd.3,v 1.13 2004/10/25 11:05:37 bagder Exp $ .\" .TH curl_formadd 3 "24 June 2002" "libcurl 7.9.8" "libcurl Manual" .SH NAME curl_formadd - add a section to a multipart/formdata HTTP POST .SH SYNOPSIS .B #include .sp .BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem, .BI "struct curl_httppost ** " lastitem, " ...);" .ad .SH DESCRIPTION curl_formadd() is used to append sections when building a multipart/formdata HTTP POST (sometimes referred to as rfc1867-style posts). Append one section at a time until you've added all the sections you want included and then you pass the \fIfirstitem\fP pointer as parameter to \fBCURLOPT_HTTPPOST\fP. \fIlastitem\fP is set after each call and on repeated invokes it should be left as set to allow repeated invokes to find the end of the list faster. After the \fIlastitem\fP pointer follow the real arguments. The pointers \fI*firstitem\fP and \fI*lastitem\fP should both be pointing to NULL in the first call to this function. All list-data will be allocated by the function itself. You must call \fIcurl_formfree\fP after the form post has been done to free the resources again. Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with \fICURLOPT_HTTPHEADER\fP as usual. First, there are some basics you need to understand about multipart/formdata posts. Each part consists of at least a NAME and a CONTENTS part. If the part is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME. Below here, we'll discuss on what options you use to set these properties in the parts you want to add to your post. .SH OPTIONS .IP CURLFORM_COPYNAME followed by string is used to set the name of this part. libcurl copies the given data, so your application doesn't need to keep it around after this function call. If the name isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with \fBCURLFORM_NAMELENGTH\fP. .IP CURLFORM_PTRNAME followed by a string is used for the name of this part. libcurl will use the pointer and refer to the data in your application, you must make sure it remains until curl no longer needs it. If the name isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with \fBCURLFORM_NAMELENGTH\fP. .IP CURLFORM_COPYCONTENTS followed by a string is used for the contents of this part, the actual data to send away. libcurl copies the given data, so your application doesn't need to keep it around after this function call. If the data isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with \fBCURLFORM_CONTENTSLENGTH\fP. .IP CURLFORM_PTRCONTENTS followed by a string is used for the contents of this part, the actual data to send away. libcurl will use the pointer and refer to the data in your application, you must make sure it remains until curl no longer needs it. If the data isn't zero terminated properly, or if you'd like it to contain zero bytes, you need to set the length of the name with \fBCURLFORM_CONTENTSLENGTH\fP. .IP CURLFORM_CONTENTSLENGTH followed by a long setting the length of the contents. .IP CURLFORM_FILECONTENT followed by a file name, makes that file read and the contents will be used in as data in this part. .IP CURLFORM_FILE followed by a file name, makes this part a file upload part. It sets the file name field to the actual file name used here, it gets the contents of the file and passes as data and sets the content-type if the given file match one of the new internally known file extension. For \fBCURLFORM_FILE\fP the user may send one or more files in one part by providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename (and each CURLFORM_FILE is allowed to have a CURLFORM_CONTENTTYPE). .IP CURLFORM_CONTENTTYPE followed by a pointer to a string with a content-type will make curl use this given content-type for this file upload part, possibly instead of an internally chosen one. .IP CURLFORM_FILENAME followed by a pointer to a string to a name, will make libcurl use the given name in the file upload part, instead of the actual file name given to \fICURLFORM_FILE\fP. .IP BCURLFORM_BUFFER followed by a string, tells libcurl that a buffer is to be used to upload data instead of using a file. The given string is used as the value of the file name field in the content header. .IP CURLFORM_BUFFERPTR followed by a pointer to a data area, tells libcurl the address of the buffer containing data to upload (as indicated with \fICURLFORM_BUFFER\fP). The buffer containing this data must not be freed until after \fIcurl_easy_cleanup(3)\fP is called. You must also use \fICURLFORM_BUFFERLENGTH\fP to set the length of the given buffer area. .IP CURLFORM_BUFFERLENGTH followed by a long with the size of the \fICURLFORM_BUFFERPTR\fP data area, tells libcurl the length of the buffer to upload. .IP CURLFORM_ARRAY Another possibility to send options to curl_formadd() is the \fBCURLFORM_ARRAY\fP option, that passes a struct curl_forms array pointer as its value. Each curl_forms structure element has a CURLformoption and a char pointer. The final element in the array must be a CURLFORM_END. All available options can be used in an array, except the CURLFORM_ARRAY option itself! The last argument in such an array must always be \fBCURLFORM_END\fP. .IP CURLFORM_CONTENTHEADER specifies extra headers for the form POST section. This takes a curl_slist prepared in the usual way using \fBcurl_slist_append\fP and appends the list of headers to those libcurl automatically generates. The list must exist while the POST occurs, if you free it before the post completes you may experience problems. When you've passed the HttpPost pointer to \fIcurl_easy_setopt(3)\fP (using the \fICURLOPT_HTTPPOST\fP option), you must not free the list until after you've called \fIcurl_easy_cleanup(3)\fP for the curl handle. See example below. .SH RETURN VALUE 0 means everything was ok, non-zero means an error occurred as .I defines. .SH EXAMPLE .nf struct curl_httppost* post = NULL; struct curl_httppost* last = NULL; char namebuffer[] = "name buffer"; long namelength = strlen(namebuffer); char buffer[] = "test buffer"; char htmlbuffer[] = "test buffer"; long htmlbufferlength = strlen(htmlbuffer); struct curl_forms forms[3]; char file1[] = "my-face.jpg"; char file2[] = "your-face.jpg"; /* add null character into htmlbuffer, to demonstrate that transfers of buffers containing null characters actually work */ htmlbuffer[8] = '\\0'; /* Add simple name/content section */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", CURLFORM_COPYCONTENTS, "content", CURLFORM_END); /* Add simple name/content/contenttype section */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode", CURLFORM_COPYCONTENTS, "", CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END); /* Add name/ptrcontent section */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent", CURLFORM_PTRCONTENTS, buffer, CURLFORM_END); /* Add ptrname/ptrcontent section */ curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer, CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH, namelength, CURLFORM_END); /* Add name/ptrcontent/contenttype section */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole", CURLFORM_PTRCONTENTS, htmlbuffer, CURLFORM_CONTENTSLENGTH, htmlbufferlength, CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END); /* Add simple file section */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture", CURLFORM_FILE, "my-face.jpg", CURLFORM_END); /* Add file/contenttype section */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture", CURLFORM_FILE, "my-face.jpg", CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END); /* Add two file section */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures", CURLFORM_FILE, "my-face.jpg", CURLFORM_FILE, "your-face.jpg", CURLFORM_END); /* Add two file section using CURLFORM_ARRAY */ forms[0].option = CURLFORM_FILE; forms[0].value = file1; forms[1].option = CURLFORM_FILE; forms[1].value = file2; forms[2].option = CURLFORM_END; /* Add a buffer to upload */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "name", CURLFORM_BUFFER, "data", CURLFORM_BUFFERPTR, record, CURLFORM_BUFFERLENGTH, record_length, CURLFORM_END); /* no option needed for the end marker */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures", CURLFORM_ARRAY, forms, CURLFORM_END); /* Add the content of a file as a normal post text value */ curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent", CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END); /* Set the form info */ curl_easy_setopt(curl, CURLOPT_HTTPPOST, post); .SH "SEE ALSO" .BR curl_easy_setopt "(3), " .BR curl_formfree "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_strerror.30000644000175000017500000000130710265631023024134 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_multi_strerror.3,v 1.2 2004/08/31 06:03:16 bagder Exp $ .\" .TH curl_multi_strerror 3 "26 Apr 2004" "libcurl 7.12" "libcurl Manual" .SH NAME curl_multi_strerror - return string describing error code .SH SYNOPSIS .nf .B #include .BI "const char *curl_multi_strerror(CURLMcode " errornum ");" .SH DESCRIPTION The curl_multi_strerror() function returns a string describing the CURLMcode error code passed in the argument \fIerrornum\fP. This function was added in libcurl 7.12.0 .SH RETURN VALUE A pointer to a zero terminated string. .SH "SEE ALSO" .BR libcurl-errors "(3), " curl_easy_strerror "(3), " curl_share_strerror "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_formfree.pdf0000644000175000017500000003570010265631023023260 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xuTmo0ί8if`jmmH&YNک@ Ul)}@:;lߤ2և?qDM\"|o % spȀWq\8+my?վͲk\P*jZe]u2Ϳ)&#b֎@ְ1h(@ΡRiWCf&mS+pkREB՗hV,Teqz!ȟ$`8vVl7tF:GCo:)4 BpI[*IZäs`tsA(M"%n'>CJ.D:&bUT31J\x3r_ݗنWLxGx>"rB.KA )E^HB{rp0sK,TPG°#8M\LTdNEa)4QR[rB۾dQg5<xq'dD^I*Ԥx/VՌOh@Z eqwiV[8ar&20cBۈ_nWT-/Iޣա^ɆD,wnȴrdbZC=_G-JrtpL:qagendstream endobj 9 0 obj 688 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeU{TSGZGnںs늶"""j%B$$5IHGEP(Zw.G"lQkl{zNw.;=g={Μ33g7| ͊p13=HK7wq53+Q/+qԫ LOoaV2;}kA5m ZX/=vxي+?6))RR,PR( e4ZBI|%_+̝ٖ! bX./Tn__f7f>dV( {iBQD`@S+)4RK1, ہb;X2>vK2lm^^fc-lT8_w",Ѭif:)#{{` JE?SW"8|7FZ=(7@XчVタfЗ Zl7X ,A t"E&v.aQ8>F(*Pnx20w6׊!` L2z]l^QI5vIQ T؏#>Z֬N'xVE)8ŀT F-EڷF}svˍ;ݏėnl漴mMeـ8&d<յ1HOK/ f~LͯOTdpXl:@Xg+`|;#:< &dXD%{JO<6&{U@/ (-ѝ}gj%c*B^m`6{OXDZںZl$5ǺjgXt#ALũy_3Fz~5jD| _\Y^Ba1]Ez22N6j\*6\?yx}^>/)ZUĄU4q%{+;EzTrẋpallym=Ԇz)eA=UYNmds)\i89ʟ>!\ͽlu@D+*F$yB[j"( jpd#F~Z"tH4*@ H| DDj^wȯ> >|8+D+v|zNe8?}]}mM]W^sVVn1O[|\X͊AϽ8߭hin!trgVMP%7O'9(aJm&g9QǾ 2@ԝj'7}ST}0Q,Nq*VyU(x5d8U/Oz&)׷&=q3U,N|L#n~M]0/o;AA4y9:Ȉ'%W6jQ'!|wr!û F= IdJC,v&\ tD4ad_~o3 hgNM^Oph:Ɔ!d&5ږw<:_»2,t54-βes >?\AM$8&#ՑgqDx(.n}{iFͯëT. %N]*1Ym"=pK?J G awɢ %UhZz_M@IΙj>N 9)b X{Hvo릳j:DqχSINwnu EjvgL*tR_;MbMàe<&7@-ѡj۹ v5&jFCxaֈT%Lsp}[#)m蹽D~k"Ǯ\lZ\`MVex$>!vGo{30nooF ~q&\ GR=h|>¦M/!D\T!dEr]RㅍA;J~8WTH/([.)$$mt:g|B ;$PNH,۰@C༷JpnO% JU3:YT_5QoTn k% LgྫྷV"Ds/qޜo6vg[>h{gN9okI[%Wf%#GXs&S_1w.w endstream endobj 19 0 obj 2286 endobj 20 0 obj <>stream xW{\gŢ3?jv+Vnxx p $&@@ @p'AH(tUzklk{S}';zNe23;{ywD H$ukkL*iἜ)gMgp_G;fMO p|*Q"YiRRo~q޼+V+ui)Y0T5ʬבh*-QӤII$=*e|c*MQ׽(mki 9:Nuf|:3Ә gSX&Ϟl|9 <x=SS}>(?ϩSM];5fjT#Oy3$0,:}^+ob# C2^Š{-kX//-a|30~h(fDߣdnXy 7xr: d;B4֎(_5(hK&2Q5ٍ5yݿw weS a%k,J`%exhz f[(w_HA|A;6 A^%v-}iD옚Aۍ%:Ya7,΀m쁸⭅=B5|&%Y7}f1R>1d*rn`ѫ2y{|{3^ګu!Lo sނ,ĝt*'9x?s^8+ϡҢ&>;ל=A\ו˾E6N/%聥he%(  S 8o SHuY=BFȶ;NIb/4` 2ePټBU]Q 2 ;:{mynp8,:EKPkX#1@eV c$#Sn+]jn-Cܵ,̐ |ٮaEm7dKhڗ5nm aL9;%uf4QT jrXMOԁ3"~ ֕ ,!wK{$K!|_AXJQt.ts;È~ 2w [WC%RpjhjGg;vgu EކGćt.q*/%}yK|7Yѥ_H?p&,OvjqA"fHZ{X~GPUp@Q"$`9L2I+!Np5N^iמ _81Y|Eja8#Kp_g6)HFz<̆*SCswb*ZJfTĪ:u^oSފj9K5>x,a I8=fVVgVؗ+{ZҖ|d$hQYQQ@ N,hm}VPTOG酉n},5]-} Bg $մ-:%K;5be Щ&̲]LUP 4׏²i8+G!\9)A6)K=ThDPda"kL* ;!_]%Q*isw>9;Oy !yѝr\]? $`NSZPZfB*JT593lڶl)ŏq3(M<A1r?W%>4Ȇ*ʻLկo% yLE;emyXv'S\O}2Idu}2|r'$wDKDž!@Nmդc\2ڋByǺh%5 H% [R BEE+v1(xzl 5j;yg>{~KARF4#,dXt[XeW`\y7ş0ogF20ͭ2L 7u  x(j3v7..55>Ɨ><JI]cpJ!x5PIaR9ud9΃vLZK<=011ʛL('\ wdGS%uBec]|yt\7,vNLl&qhټDr^f܀>fySG8=FWB<m 1G?Cď8/p]ˬZ(4vޭ&]. UDh|G )Gd^dA:d.ϷÛCހXK[C[U**Y1V^\Uyv3!4,muu=B`8yE"7qJ{SK"691W`3hhijp֜"G&#!?&c/!\;.}dc +g=B9}VgJsa} #+Рz~[O°BIIg^犊V26Y2haX.Jx5 nOoKi)+ntXwr&Rd-<2s➍<sׅƽh8N8QM:fv ^>}nxw+HҷqX? "HyrG@ 5W:* Pe.XK~QH  ՖZ<zщOFSݚv[[ٝm ngkm+bO:1YHBkH}|jB[CxI)*s';[R=[V OBV/ j!zx s7 UyP}UUlGGNGc*Q饇K%6ymm ̜ᚢCR\o(ݥv`noAY}V4Z.;S,c-LFN5ݕeHVt{\uuݵe!GE4V)ZlZ[cǚfT?X(+;]vw -obj jRZ _NL9p"칁3g'"7)p[LgYDd*:'WE>stream xmWyTS׾>1$h+18$uġU ^GAHH´!@AFQ<:Tk@y^km}}x;uެ~a.3=ཋ HE)(N瀐ZĠϠ0sl?vϋuC?EcoL<剙ɒ8q@V\۲e0:#=IL#] Od[qa\Bf8E#q. J I$t{x[M?ozIEUB,V"f d1RQ\P#r#&g 7zHd["NKJT-"u 2ecEc}Sĩi Q>nZzMZu7OK00XC{/ "$Ll$> `"8D& Ob`•K$$nO$VҷD" #ᘱxxfK .L5V@3/ e~cgbssω1`N+ϵv"dtvzz1d5j+q {Ld(3,FkE0f}zeu) y0Y *" Q%ԎHr %uƠT/Rkr z ܁*7X-l҆ՠ5VcV"6.r7lК8AURNJSh&e)'o]5*KwUeGm‹o&О f [n,d{*LӨCI@H:Ht i> OXW29)r82ϑvE$(?L& G{bu0Z2ȃ7.AwuX44.ZMm ɈFm$~rۚmWIS.vb Su/SQwӡnޖGCv.Ixb_Nq8I%8*a0Dك*nקzYnHh8ڎL\e8bu_cӧEE&!&J]Fh#BXj߀>2sɩb ։GOl>8F7^+]C7Z2+VVǯIB^l=|((1"I+JnbݚO'-6ŨHt WSZ^K 8Q4m--j_ C׺_࠺/Ր|kJ-$IݡMmF~IR.m&SZtȲ>dKRB/~e|54Q VcEq5$[*"`^0>6xDi{l[yE_2X lm?^/ fQPZ\!1ZWvrg}nq9b]X/*ʇ<ԖhHN9-4i6O? ɨM xy$Ҩ৷6e_&/aҒjM:-nϮ9rC5j)Y-ɋ.0@]CpG;k!y%n_kxɁ3Mp J9GAQ%XY 9dLא뫣'؀o^h͸Coi=z*>א׊gk=̃ŅBS|'UJmŪn PI'r%өkX*ZK,&Uzj5uOtAT1=I&K1!:ԀVv;Կ/S4j!̱Xs<<#'d( #{-tBrTB#v\Clx'j V|O5 ~|wcW`ߍAE\+ޚTC_ۅakg%DsQhR*?ٛ`gyn (]nٵ5 r֪nw'о #4t@C^ɾQP$PVkr?5(G=58S`UmgBik 6³sV6ک_Dgg"~lvv-NZ/ĆMx6ljf7#FКEPi+m} lZBm}\.0X 6?U#m~BTФ]fQoԕga94Ylh>EWῠë)}*ʐI\7T(ƒU1|u~Yp]ixNk„<7b!A)WO;Мap;%eiCi1"+\˝9m DUI`djip9)SRmXU o tGTWOO@R$P4@bm I g^H(Wo"^4DA{Qj7n2nOLzcn^I*Qw$'s gyq)4Ar"7J0]~8 rfw?/ 9}c슙mjq/>{ẗ́h~ /$5wd&n|j\ޜ-y:ɡn\F'Loj'!/6 E^HAkԛb[ ""/AZI$ֵ8s'zyxF ?6ACMWE?u Խ *pjwkuC_Y.BqSl$Zʢ:9r^#ϊSR%M Go*r.^+ptOx4h 49)A֒ѕ*8-⼳ {v uԒzegc WN2A_Rb_τqʡ:RнG{ 8{UT؜Krn[ϻ3Lͱ|i| TCiw>j==&;zނd]H;XK64RǗ&O9r&$?S%' Rjt9C+\gx+9<~txk7=Rni/,ߵhwtͨQ@=sotgn_1N endstream endobj 23 0 obj 4085 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000001020 00000 n 0000014597 00000 n 0000000952 00000 n 0000001374 00000 n 0000001226 00000 n 0000001068 00000 n 0000000792 00000 n 0000000015 00000 n 0000000773 00000 n 0000014230 00000 n 0000013083 00000 n 0000013873 00000 n 0000012595 00000 n 0000013578 00000 n 0000012147 00000 n 0000001142 00000 n 0000001172 00000 n 0000001521 00000 n 0000003893 00000 n 0000003914 00000 n 0000007934 00000 n 0000007955 00000 n 0000012126 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 14737 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_strequal.html0000644000175000017500000000470310265631023023505 0ustar danieldaniel curl_strequal man page

NAME

curl_strequal, curl_strnequal - case insensitive string comparisons

SYNOPSIS

#include <curl/curl.h>

int curl_strequal(char * str1 , char * str2 );

int curl_strenqual(char * str1 , char * str2 , size_t len );

DESCRIPTION

The curl_strequal() function compares the two strings str1 and str2, ignoring the case of the characters. It returns a non-zero (TRUE) integer if the strings are identical.

The curl_strnequal() function is similar, except it only compares the first len characters of str1.

These functions are provided by libcurl to enable applications to compare strings in a truly portable manner. There are no standard portable case insensitive string comparison functions. These two works on all platforms.

AVAILABILITY

These functions will be removed from the public libcurl API in a near future. They will instead be made "available" by source code access only, and then as curlx_strequal() and curlx_strenqual().

RETURN VALUE

Non-zero if the strings are identical. Zero if they're not.

SEE ALSO

strcmp (3) strcasecmp (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_cleanup.pdf0000644000175000017500000004015310265631023024312 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xVkoFίR?0lJiY屵I*V1-p,}<]者dGs=7O~oެ^: -&r%][ Ap'n-Jh绶U}9DV^l@U>-e~B$oq/yzQK$ xe]:[ܦ #ۅ=<{إL!{_CtʦVƥ!U՟wV+mWy+,_d<|U6oė ?MV''dk~[ןn%5F^n@3±w!8Jd첽U=bL76 6YYMVhZ]A cz$"h(ƘY ^1U{YH剬@3AY38 e7}:*@T bbLFs&ay8K ˛ũ,8{sU\EimaY] #ڶ}(X8#'~`(PM89Eb2^#ؗ`y0,z=>}0" fd^ /kc<2=#T,Rݒvendstream endobj 9 0 obj 1057 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeV{TSG1j%M[WZ[ i}!!&@ <7( X>V->9m=ǝޞ{qϞcgΙgof~~e 3g cAzfLKomW$ص3|r1|u{f,92QD< ]/#LC]پ5_)r\rF35 ")JRL+m-$yn!_-̞^&bX.Wo}~uobifQ!?9_*ww񓅢"K ,+?[.,(U##d$"ې$$ً ۑTdC-nd6BШ!3cx0C\T1'fgNEdEeeݎ\9ыYi/L!φߘAr  XGV8IZqF:f2*VT+7M-j -B66hkATt%Wk Xd|zMhݓ0FP'v'E4m .4$@x>B0gqd9\VkIIlfFE]읻Po/}e7դtsK ;PvEauǮpiRh?j`G!Л + ģQ2uXwaw#c-=5gZ.ӂ .Aɦp= O-֮tg&WMq j9ZH7^ny&ns9[.;Id'3#4vzF1̂LNjɢZzFuX!?:$ﴣ\(mקލjJ-6RԊcL.PjMCoxԻkN+"ZF\tA]" 2ȹe9,(nTshU6Fq(FҖ+ƱCp)\ ߇q0oS<EwsޠVE*8W1H$h*Xw .lǚƮ 1ɍP} F99r,iǚWڸZBb.wٯ>Q2sH"rrw.ۿ0K &:F۪A1;m#Жꚶ6u8_!ɏaDh]YD]0Qzuh>d|7r!URU/'@3@ijj]xhB;N{h)bBгzSlU%:/xOؙ\ C?I`dLRH9c VZZVuzkvD{M;SX̓s?ɐmc#=ZZB&"jo4{S=_ &t$ NK l`ƛ.u6=IH~;Xp[yL \gm]7AX5XѢ08 qKʧÞG.z 8'<%;ʴk˩  Ou6h&iΠċ5838bmEk!øWƑbQW=wP r,&j>GDWa•Dßhm4C6p F2WTjl  1'd6U*18XWzKm60vKESm3}S}@@!*+764~?Σރ9\u q?5;~s\4Wws_b=W{ha =6:fL8EJ-Q2t*>9ܮ&Zeef4LGA-کhFn ޽F]olL")b!ú7O <:r  nɣ^Ei ^506x'J&`I֒T3WZ7QQ  K/@Fk`Zjt]>P;Om nSe;;_y3???`Wf%](U !V{/3A oG endstream endobj 19 0 obj 2660 endobj 20 0 obj <>stream xWyXS׶?sQ,*&VkPujT*N$$$@”9 @P "hkmn{޻O}/9g^[#f"x` 9 02c C?FZ\mA mh;0<59%˜]f}/7\x06O5L5vRZ} Ǝ5 Khp!.4)-E>qQdz6;ט2׮z4V 9`\ndJMެh+@WND>("̓'k+,+A3ak<'tW/jK}@ۍMT0TM* [g{s94q?ew`>ttt&%ЁE\fBbkbJ C=7$A[[֞ v*׍{x-R"94+ s2ݢ nYpőGhJ@p I\k|Ot16 8عWpðɟ&.(XZr'Ew4\Bҏc&E|S(5b4XGGГ((evbE݆Qpm c 2O.Tޢ,bPY#f0BX|~ nejS×@h/hTu5ʚ#t!ƶ]zxp'>}ARHJFIe0 a&#dg@`I(DE`:'s\w+Z \`{qfG)>C 9uzQ%P5XDw7Z4:&Fp {5'-pMhNvF؟jtHq>xJzfam| f XCMTZ Fg\ЉwDPJKLrr>qU8a'\z,04Iq{*(OHKA pAgпȀyE3/njY &iVGIn-V_ g!"^ܼxo^gV N9q+rlڍ|]B-;l&{x 6>.1A wcxꍼ;.cdplS=]\Ԑ&{ͤ,_+7=aMZuA;Ι؈>7 EAE͸L(EjO(DG%{\-Tig}j*RB)Ǵ25턌\y¢ȋq7\pL'l>ҡF@}b0*֠tFnʹ(`7{@&?tP`2' "atcV` 3hUc&,h~MBke>wq[ 㞰.ikPlx['-#[\a49m m>kˎ)LFTMp {bjL;fLlS LKp^cr~҅ff\Ou]G7z8}w?NF++2vD *ꬨ$.?==@5cUiqK;)KRJZaXUZoYlGۡQf Zc(u׫s Ui3SJхJ{p]F$ULLّl9Dgz*OrZ!TRHޞk5YNvV1`-l,s(OZߪ֥aj.49 g994'з/FMK;em+ J:KIZo rɶXg޹Oiܱ3CC!ϛffԌ4 30j_{g92h45^&"M~ĀUǷ^1S4C<˘*z [y9z 8`̅!ϼy0s3 x endstream endobj 21 0 obj 4037 endobj 22 0 obj <>stream xmWyTS׺?1$8a%M%&hkp8H$ BƄ$L < 2 #V8Ro'l{pﭻc{߷76h]Ϫd cMX+'W琯%sƏQGm1|i%9ɉI!AaZYÏ;|?AFr6-HKQ|_:55?15GĻBcS)ɩ8/keÇ}YBAx5?Y,JNJX06^J'LL,}¸ } AbVjl0lu@^qD;;%D+{g#5>kc>Zc~Z揽b;AlBOPl# pl/ۇbW0-ܱ"l+ [y`,el. sChsω~>cǜC\"H?qбvs[ܛܧ,R/RKNhr'!pߝ>_’7v\Tȓs]eBܪzPF8n~`WbJ|Bn)NR)ljY[Pl(VR͆;ZeH88%RP!*4¶DEf\L˒)e2TL4hgSyp-YYd\zpMӫfSEI% <AexIȜdMp.vdӚЋ埘=!Dž[_5 }WU^e>׶w {@8#H>'>ŝw/ClKٕ݇^WA#\-::B"H0/9WiE4ƞ{C%i]bO#:lר}];p%u莿 von!L%6@4("=jw;Mr'`94j.Vr; 5m]uɱLHޏhBUd45ãemm7E_C%,tNk'AzGH9jz9)Jbu "O^R8M/ VÅ4]p=7a6[)7d76e6x.DkUiT/2cό pAΜ(iAAq W*5T)yaz[*Rh*7 _bxEcu=g8/ Zӡec}%gNܧTi zLАH!1c*@}hb6AZ<(6تRo*DP&Sn+UR$c2|lsQ54A)th h-Xn*ȢTZMȢ+"vM4LzΜc֙X^2~l0O":](l6 }]rҒ#FEcTȱjMO\S3 zbbqVZa%(.OT#mv$@-r:LR'NIH๭Q*B7TgՈ %Q{R?$6&++ZPD ` oA}S۾Cܦ07Pq}ȁ=7L Q q-iB,2̜EEyUEmh.Xd6eSOЪ4#Rm-H2?PRp,z_=kMeuhDeD}13+Kl%vtV(0 D G8Ru@?Fo_-a=!}+ dIU'y0 gMY=LY'mlk(-.+ʋBv6 npڽraz%U&]p2grjO}k6HVg(yـH$*kgiaKw"k7Y]<7G]gT,FgLwFE%'`7 q'?#P rH*QԀ C]#xDu@=Z$viFQU 90|On 1@ ".CYRfm'9i(|7*$C*ER`@y^,oOC΁oE[~Z/01R u9{#ʝG F=Q;:ZzGn7r>;֩|КԶiW}_p48sw0Y J&KwyE6?p(QZdkA'9WB<^XoGRAMi̬@)ьӓgx#DŜ j#ZC/fzr Yɞe2PktC7j TL4:-zUpK4)#39Qc#%!]8!$*L5Z?`k8 jH6ZǏP3r/8oUΥ oS( va9ni g@Zg$%.?^}WS\o6MpolazZ9XKsKc4ו=6[Ⴊa d̿GPE2Bkz\ \@Ѻ{cd\gPMO }p!cߨ%40zPƍ1 a0?vL~L'QnjC*KKRD5.37O,u݁o.ɭgW= NklUYB*S4R:& {aYG)Ɋ_}/=_bz> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000001390 00000 n 0000015792 00000 n 0000001322 00000 n 0000001744 00000 n 0000001596 00000 n 0000001438 00000 n 0000001162 00000 n 0000000015 00000 n 0000001142 00000 n 0000015418 00000 n 0000014251 00000 n 0000015042 00000 n 0000013755 00000 n 0000014750 00000 n 0000013301 00000 n 0000001512 00000 n 0000001542 00000 n 0000001891 00000 n 0000004637 00000 n 0000004658 00000 n 0000008781 00000 n 0000008802 00000 n 0000013280 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 15932 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_init.30000644000175000017500000000266310265631023023331 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_global_init.3,v 1.3 2004/05/11 11:30:23 bagder Exp $ .\" .TH curl_global_init 3 "11 May 2004" "libcurl 7.12" "libcurl Manual" .SH NAME curl_global_init - Global libcurl initialisation .SH SYNOPSIS .B #include .sp .BI "CURLcode curl_global_init(long " flags ");" .ad .SH DESCRIPTION This function should only be called once (no matter how many threads or libcurl sessions that'll be used) by every application that uses libcurl. If this function hasn't been invoked when \fIcurl_easy_init(3)\fP is called, it will be done automatically by libcurl. The flags option is a bit pattern that tells libcurl exact what features to init, as described below. Set the desired bits by ORing the values together. You must however \fBalways\fP use the \fIcurl_global_cleanup(3)\fP function, as that cannot be called automatically for you by libcurl. Calling this function more than once will cause unpredictable results. .SH FLAGS .TP 5 .B CURL_GLOBAL_ALL Initialize everything possible. This sets all known bits. .TP .B CURL_GLOBAL_SSL Initialize SSL .TP .B CURL_GLOBAL_WIN32 Initialize the Win32 socket libraries. .TP .B CURL_GLOBAL_NOTHING Initialise nothing extra. This sets no bit. .SH RETURN VALUE If this function returns non-zero, something went wrong and you cannot use the other curl functions. .SH "SEE ALSO" .BR curl_global_init_mem "(3), " .BR curl_global_cleanup "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_fdset.html0000644000175000017500000000545610265631023024172 0ustar danieldaniel curl_multi_fdset man page

NAME

curl_multi_fdset - extracts file descriptor information from a multi handle

SYNOPSIS

#include <curl/curl.h>

CURLMcode curl_multi_fdset(CURLM *multi_handle,   fd_set *read_fd_set,   fd_set *write_fd_set,   fd_set *exc_fd_set,   int *max_fd);

DESCRIPTION

This function extracts file descriptor information from a given multi_handle. libcurl returns its fd_set sets. The application can use these to select() on, but be sure to FD_ZERO them before calling this function as curl_multi_fdset(3) only adds its own descriptors it doesn't zero or otherwise remove any other. The curl_multi_perform(3) function should be called as soon as one of them are ready to be read from or written to.

If no file descriptors are set by libcurl, max_fd will contain -1 when this function returns. Otherwise it will contain the higher descriptor number libcurl set.

You should also be aware that when doing select(), you should consider using a rather small (single-digit number of seconds) timeout and call curl_multi_perform regularly - even if no activity has been seen on the fd_sets - as otherwise libcurl-internal retries and timeouts may not work as you'd think and want.

RETURN VALUE

CURLMcode type, general libcurl multi interface error code. See libcurl-errors(3)

SEE ALSO

curl_multi_cleanup (3) curl_multi_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_strerror.html0000644000175000017500000000331410265631023024545 0ustar danieldaniel curl_easy_strerror man page

NAME

curl_easy_strerror - return string describing error code

SYNOPSIS

#include <curl/curl.h> const char *curl_easy_strerror(CURLcode errornum );

DESCRIPTION

The curl_easy_strerror() function returns a string describing the CURLcode error code passed in the argument errornum.

This function was added in libcurl 7.12.0

RETURN VALUE

A pointer to a zero terminated string.

SEE ALSO

libcurl-errors (3) curl_multi_strerror (3) curl_share_strerror (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-multi.pdf0000644000175000017500000005214210265631023023211 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xYrF}WL`J`)V)_6[.yK(F }q@Ql9%Ӎ/,䂅ܜ}9C/L? i/Owg2ɲ"y3!Ʉ-gAS.w}3욱Dg|4[LI#Pݠ.du;V]'\rYg XXEBes%ltZ.J1KR<\ȃu< 㮃8It?JPq]۰9 eLN["2ˏ?\zrjkab] -L29yL&6'bo܍]_,qaτ_lWlmM5g#<@r6{:;M޳}=]vuZ<ͣ#srx:ej*y&^0= " g0y~9#yaOhyX#u2+tչ7._M3PN*!rW_n:rn᧘Ae?rzqˏ/5en[CeKZ8Hߤ <^Kn3u9QBWwXwz ^\?Hd,$0}˦?MYӏ93S%T(.A&w]|7(pY[:Si9Jq+ۦ^VT+ 5uSKa(wը>jҷr,r(SIg8 5XUCiޡ!UFDX5͐//Uxpo>{uFVS_M8-"rƌaǦZ |Px'fi޷+Aܖ} *rWE\Gh^>AGGM"56ˆO 1Y*Uwoof0"X\^ >x]^|d>h37y 'EǼ"r!t )F_Kd$ۦz`}AYfy`G$OetG&xgE5tHh3H#<GZxBR4ۛܭF\h-zIR` B蹷H@$snP[MhrŜ}  1Lڜ+ՈM]mz4 m8ㄋsruFuٴ1Q?!4G' W)x4/.4vt2@I-FQٶ@2sv.R>qB)'GsP6+(IA7/ԴK:).Tݬj,nc1L;zTԆǽZq7+0>*ibJNt"$VMLvj7hU"k\>ne:TKAr}T9ǘ:upM 5e?#ĴZn];^_vhwS`g.{3s(yhL(MnB-cyj$5ިtn4ZAb'NA:iGfr6/<̾V>eG}% ?t-H3a( L`PݽCo+G8}Q~aKVuϕEt r{g>fKIY#d֬[?a n[(RaR( cɀDmݷ%MmzTRGa>K&ۑߋ;R`V a忽ؔ#I JG5|rzHN3Hqhi=hi+Z] ]|6zkCLn*;U.S-*ԣn1dH %Wt>=#2@%4Ta$mpeHטЄP@"<=Z@G[޻D[+@"rVf< (,]L[ !(0=Tgb6ur7onh _x֝d"50j x[RhS&|+џMzVD"-րm.7qi6ejqxy:ݰM.@i9oԛMb+)ɹ@=vv)Fz ~~]ڷLHY$NpnV@Än.*hԔyop'ߍ]^OBJm3 Aؠ O=a_Y "MUcK.ogR'endstream endobj 9 0 obj 3311 endobj 19 0 obj <> stream xuVn6}Wr@hEbȴFGwINZHRΜ9 0 ny&ܭ?uG>7?WǍ\(ɾp\dI汞vMm%aiw#xIYBa!iz#~R :nUk>6 QP!S@QPQo૒7.sF q5i,i `*ۘⷀA0ɒr0o.oa9p2égiBCY~)c%M"vzsԣke]YIȖE?M#`xu`LҔdDžf>d]x,|?M7uO*H I |pQ TpRq2ʘ*#v?Xuyy7Lu9N-%_ܑt(殺…ۏPu9e"r_49.Ni};jZ}di2V gBhM 4C *GxǭrFIaCʲ,æ Qs)Z$yYD2 ?N}Z{V;( z0 Ā'F,Ҝyb!~5?Ҕ2kԺ`f.rE3&e,]kr܄Q6 ?\nx sv)c My+MWCOfjN:Z,T(DK_߳g_ ^3-ty䵱7h 9x@6S.'e0yl:]DG(IZXN- `.AeTW硩6رJEKж;YԖƸJJ=c??wUendstream endobj 20 0 obj 1420 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R ] /Count 2 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 22 0 obj <>stream xeWgxWH؀V AVcB mC5lcmܱnҨwJ$wIe)6`bzВ@6_6fx2333}95c0SbǼ4qRMy񢴄ՋOfP;c3l0#|Lz4L:c2m29i)y!s#w~0oއgeBJ$d}RnZJF,$I%N[~[D"f'&&%>%Ҳ2%!s}ѢEӗDf3Be. / ya̭k a벒'o MKˏ$ŋ~096{ۍmc pl6BEFl16 ہƢM,ی``sR, [ma l5;l,>c-zgcVdNgv%|"}=]Ysc;n7O#?t`%*828!/@Gx<@<:<} ƗF ;48I8W꺬TA<<&`0sR )5 겗4+̧٨wԼ 4۽X A1Y|ŮASmZ IbIh ŠD?RkOL5Wp B}@H)dU|N @PN5ekp*=nC068ԋHyX]VZ ɫ˟7V051Zf?kv*cyd) @1~rZWV}▭3_ =Z-1}L H9k`5Cw٧G%'.8 pOZ2҉hۯ5+4Ӓ* ,(hy s1xQ{I_-ǪΣS-F+-zs=ÍS;(B>r{A#;26f}?4,dAЙdVVd5;/*(M ˣ,@]DCdL|./gKg(i UI j?h| 3*GvZ2k-׏=w" U^oSrCl&crWp󳷈=-gIu 3&0Vp 1D spɏQ"q@V"z(],Љ_uE,;3xb}Z0-w}qS]DBIꗮ7[SߌPICOҰ{8{e%J߃a^Ye8pɃoޓr5؊6XX@Q?dvR!KF?9*as8DV\_HHi^Zg։oz\xaAB.5lIk1=dm]uUmwr݉{SĂ}yB-w2e}5{WjA6- ~4nt_]oh[%FҮ~ͯ74X?}}_WwƆ#xܗ~WiQpDSh^9o߁l,QFΖUObZyf/}jCQZd:k}*\K[ ɲߑ[ztsDI{NK54N]K'(5FKj LHZo@UV40.TnWZV#~x 8ay_{M>NSS,+6WZ˒geE JeJ v:r#dj',W@F}PnYn羑cr"2WZkQඖ<:Ң2|F=:/6[J}RtWv) 3jVo*~x  k&CƝSrc,XbY @ƈsc>wK{H:MFrg-ɥp/T SL {!^19r;9}ힸ/q=X_*DàTUjn;}IIiMRc&Z,S2~9 =$\j)ו d{*$3J7âE0~yfG+5$ 97Cn:,z*3iŠ(a- "NS~SW*ti8v a0OOUz|\J{8(w6iy=L҇nsFO@7-` w6|=<ԤZ1Jcxr׉EuopkzjQjK6٬ޣў- G^'>' V (W5qXVۼKm.HBBf2|‘WWcO32 0G6нQ4fSfDFPtFW:LomlE*t41<̫O۶fʅ‹0lߡ> zNC^[D2FeK<\}[KjфHIsQM߹[gN4D6ZTF)ddS!ĕdBHi5,)l{„cF򾲸 h*CEo[=3ja8yp\7w}aA4fo .m &"?P̦ؐ0"9)NB{BR˟{O9^O<8b箝W0]S\ ɻ?*4;{q]!۶QWP&[E[yR#pwq#A=GY :Ou{w%GKRdq8͉ڠ%Q+]"7/a_f(y ?.}0I:.5W^K<<|ngwp~8tg4nV%l9$ w ZK*p)l{vç(b7ſU>(_]Zumƒ j5p_ n܃JƏǰg endstream endobj 23 0 obj 4229 endobj 24 0 obj <>stream xeV{TWŖiPmUbV׊/TP  Z$+$ U][O+[`wWw]]=oқ?;s=s}o~wGFyyP2 ڤf 35͗ޫ2q' ykmw/ )l |^uVP_, Q'/^ҥdg\`ff'z]:EoLR'j4ZlK^^FC:0|!Ѻ,u!#1SmQSGi5PֺQaqWm]k)j5KMQwtj5ZH-fQ`*ZB(Rez4y{ {(<k =S g:LH?%הԑa0hk 1| :|>ug2 Ř-4 O`H`A1'?.~O/?ԑϐ3-hbHzywgDq]abCTzvSfQZ}ugg^BOYHY_ٯiK^ 4XRMh2Ωc61\'L<o^nѣ!btwʺ!;(, L̄drτ@2Ƴ ǫ)cN$Fa`&T+w<`0?#m< Ciû$ą*#e-fBpӷ9%Ƶ ɇ=55傁-׍xFYc!` EYv\w%*9PLaݾZt-^\p[sC_:waj]vo2+/tb_ |^0k|Gyۣ@GFnk ){6@l@P΀ i0˶ãӚLb̜Ò : (}aHB4 +]"Ym%vg/‰^4rO #]F3 X@a%%b diwDlU6T-L{fMzjotAGh[a)wdPHAI4( #)ݻiqUN IӴ3ݦ,]} 1?$ۋޞ|cpA4X: nmBMmAGK zJ OXXiy{Yo|s̵s=*R2k% N UeHDI "9<B;φM$|37ʝ(ɸ #7CZvL"m7[#$ LXMA#̸H-)%,.^,ٵK`يV4ZE |3[D\p?a! x<+ tiD2&r̙$c a0vPt'd#Fiج_::G{ϴAIAAVIT-^R[1FCCo<3TZ_;h0=M}>W!)&:a| :;'Nu)# endstream endobj 25 0 obj 2203 endobj 26 0 obj <>stream xXwpSWHB(BADr J R ]Ջ۱eIb[iBOB%հ$;{o;oi4N+Yٿ Dy$D@@A?;~π~_i"ӄ1%يԴUaѫ׬YlHRHa^z8%E*̒d-쬬cY촼daoYTb03`WzVzvDjꀍᏍ[tqz" Qp@$LM %& }*^ L颤' S s} m w9);sS "J3eYrQR7]_ ܰq嫫F"8@ qAb':%vDx'^U"xx"6/Dqxx!ۉ b. DO, Vb4'E,&턚I&whYY%ݞ :fkKC'wsb|;wܲV?Uyywny…O/{]Yt?޿u6`o`oX\y1sڡet ˜tsĢwF\ %hq<9q2WⶺpzX#k\1*rFHHӧ< ZBGq2PX\f.1 ^F6jxc<(IM骔ʸGS T<Q9r50C*++ʗ2zrGoz8/鵮G< /)Z(TG*VIS*T0CT9S':ݒW$(c|=dU) Jx[|rn"V(OLAo`t~A } \hُ/A!.ygXp.A![SZd&k7&P69p$T@k&dQE2MO+$m P$ $=5^@g?pOdu Y^ /B<}ӇO5=ˀ?w$rdY}֠BˑV\] =j)/ꕓJp wH^XqvKnP;] Fp^}tD=N5aF4QgRejeT-60AYE|OY`}צaWALկ(E{EAE@? ΁/^dz$w)EuzC/g  ufJIU\SSpٟѢ08 {"RP[9]L>6_>}=`ka'} _T zKR*3G4 ba0pRK&H|2$FsSyUpH\a`AdNqP8z@zχ .|>> `oW!lX mP d^Sf,ڐOK;H}ZwD_pG'c.];[©% &=^T -ZfKN pjG:74VQ|}y@Y !k~>؏s__`\+5/뒷{ѭks:@5{#I0m3F7Xv9]2آw(x.(OllN4 KعOMyh9Y jYJk@\O~ <W U,SRJ(%a.p Wqnb̙9٥;pN"G*A֓@2N  dڧQCNRPK'Wz9B!CIƽryGI0FAm떱ON9ѡ;$k1wyɷ|U&Ěp:jKGHS4Rj7) % _G7^q4Xg2@()/Ry殣OL55\RT_H%nj}JSeY*'Q`^|k5:|!(dK$MMbli{p͈P%t8fX)8_S=F*ŝR e8-Kp8-dRZc<Ɛ pA ?>݅ҘMrE!հqS5:CĽ)xR88O]vbTt3hNs {;)b{{huĩ1Ғ@RV "@%g '%5yĭo:v3,=0Ps{‹ hg0W^2RQty@͢ZXfs*ˌbZ gc!fدpVv3v R턹3k;3r.MƮ=GKsS0fe5mՅqde[^!*T58IPQ[5ޔE͗N|V(h%z'u>;HRqi4$̩UhqL"+o +.G QPwpyHLR{觮3>~pDU')5\mHԒY3p\2~'&??&ZGin/]|/A%V:[T@jK"qOVCSgh4{14;9ya @h=T_irZR9yȣ\#gnطf0= x;YS}0o>68q8)^}t*)G[2=ck˞J\_"J0hA3)WVHbM:Ϥ(V%Uz뽍W7 &C=ךUTԦI mΜZ{k\5jVJUJ$+-(Кm$hutۼj,T*RaV) )lf ZU ey SKԘIxR rwZUvG߄dK^m 7q>FwY`N^+CWjܘ_%QT͏^ѿ:4snI\}7Z;ut%ݛYFO]hL[oĦ DIjO3 :W u3}\xPB3?2?d8o'+ԙG36{yo3l̔D|5uq:8!:%޻?uN9ڻW@'I^'WzVmU#pQnN5;M$yEgOΙ,~ ,+nus 8Rsc_~mm_q"@2%-4\HEsN&ͻ΂K | &~Igb"!&lڔ0~Oq_'&֚ʊz{]%jU`&Bʠ.I1[|NQ#1.|GKs5%Lc8xȂox.GDKg2;ÿ|aߌ_yBL-' ϐ.+[K: 2h.m1Pkv-l%/W} ҴO}6rRprw˚/>K+1 T([SpSDu@}x"!$U+$y>2:z 't[('%~ki+{pG &3-%wn\__5p&0# 9͔J\U@e(R(h%Z\ k`Dkͻ_?o>A>G: endstream endobj 27 0 obj 5562 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 28 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 29 0000000000 65535 f 0000005308 00000 n 0000020803 00000 n 0000005233 00000 n 0000005662 00000 n 0000005514 00000 n 0000005356 00000 n 0000004929 00000 n 0000000015 00000 n 0000003396 00000 n 0000020374 00000 n 0000019047 00000 n 0000020116 00000 n 0000018662 00000 n 0000019788 00000 n 0000018178 00000 n 0000005430 00000 n 0000005460 00000 n 0000005089 00000 n 0000003416 00000 n 0000004908 00000 n 0000005809 00000 n 0000005863 00000 n 0000010178 00000 n 0000010199 00000 n 0000012488 00000 n 0000012509 00000 n 0000018157 00000 n 0000019679 00000 n trailer << /Size 29 /Root 1 0 R /Info 2 0 R >> startxref 20943 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_init.pdf0000644000175000017500000003670110265631023023441 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xT]o0}W\i _4)MLکr0H4~~| 4˴ לs~JPgy̔G.2_{A!=Ől,y$dg]iSRϷYۻq rhDG9ߒOK g4EROG^OO-{v漶(OGZL싱|?)Q-ePT7.,^!` jYYYt\-e j1YvHf%⍬z>2ݜ/Sx3n#/F$lmw4Au%!}"fr#u]]UW#EQ0PlʁaGTkqdp.yy'rVa!ȖTC=#vj#Q4OD#(su-%Z׋UN)o l endstream endobj 9 0 obj 728 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xekPSg\] Jmٖ *UXZ!D$1#y Z + Rˮ"vwmwםَ3ﺷ3{s9;Oq8)XΐDw CCWo FP[|9upbBS& d<%$R" "ًJ$-QD=DV[>+K5"@XP *X5JEłdTP[ bv.bIdyJAzL(+Ra?AayBTdڂaT, ;%c' , KX<: ba^N>/|u~A~hn 7G@:o#E )&%f TYKj5ҼRCڤZ0 xEUUEYz`(ta _`YVh ^}x:/ܻy%Cߞ@Z:]\Uc:H[ F_›sT^!uf2566!<.rS6)z MeޏɭL}2 eoJ-ЯQLS' 5spOAS]{$%rX.oVml#7f0Fg)*{^H+8 xd7|J w~ xTmYꌄYo3Wzt.S޾sL#`"2g+#lG]:Ͼw-'8}jЂQ̼UĄ*Qn3 gչvDBOGUMT[NJww"v!ڵ3tLqqb& 9*X2mf{R8HO^R2B nXZѻ{8Cϐ/'Ӥd.؜i&/(ex6!;D0;X&*nG׿4W/=8FKb(,i>PÀB?pko}S#w:uƪFΡ!5UR*J>stream xVy\ڞŢ;E^.uJ-  & A@(Q@bKmK]m3'w3}}If239}#N!x<?eҭ y– v. R.um|Yr6 u/O[kߦPfdIA\x}rÆ AqٿmeiA EDPJ2^چ{Dy2I I^KRv2RmQЋ+V\O/R2AiA AB$ @Ē}fŇ(nSJoۡJT'̐ <6"n=W6R9(N,#ˆKrXA'V C."M"^'b Gb-Bl%ۈ7#fS-,"GiR 8~IEOMrk9S ?>29JmLAiM7={wገ>3u33Ysg>qߟZ? 5LQ#OJPm󐈕SNKځ>(; -% [ (;[tg؝_A{)#@Ԭ_A"gDLw P`4Ad4N\ﰾzfA&-P¤ Z_ N %%=P|~De|2; 6APES1P}z o!72WQזȢX8gGIOzS%U+V[dReD<|jZm"Ys =մ{5m(B(I܂bS!(b QZ KԨk4Pa7צ<$BpWJ.lhXC}bETÆoY gy+ Ʀzu}өw'̭EZр Zm퍽I=Fn}*́ .;  88g\ ]QJZ#,MgnWѲK4kRdc{U$=C$o\ Z.'{ `xne׿Z~F(̀, MhB4 yLHDD% f\wABNVa/vϡ3=5% ij+GslS5f0IԄsUo*m n([ s;gFdG$]Eŝ>p.(hu~ \'~ls%xDsKd6C^0yE/ d Z~!Y76ݐ{ȗ5u7Qk Ït^uo(&O3'YJl5:m"<׬m,[M<~,ߵX\zWŷ1>FgR%y%:P r@ޘQ9wuϊ}T:!5=jx~PA \hj֙W4u.Ꝁ~7% ֭p^t tv:VMcvka &@obuA+翕O7B9)|*@xIp3N[h j _mw4;]A0BD rҸ]ڒq[ 7r,ƒ ic4Ԛcۛ%Jϑo>A/5ü\W0?*2tM|ԞpZ9R{o\|㳳BUFA|;+r.q L S";dԵz&&))6ʕ<<pu8Z|!@o e LMӋrG3q8)(p&jb>(U=D<PٟNCuԛ̠4w#-`L`VzZ؛dNH" V{{uuVºxY4W:.>DajlQԪ'WOa-4G#+5ɕ`WΆ:$΄`S1'JqTl2` G(G͇UgޖfYdh(iҩ nwQT,Y̜Ѩk[6^Cfࢫ,uQo,( a~M*}</W~ k܃=qYjTd$ݩ+3uEr0]ZT(M0U)09m vi:–tUR-.XKjUYyJ@i5ifD|l0.R2 c+CiZ#im6XD]gu'-,7ΑgtwwغMzP3XZ:RgΫ/(N5tip-׈jj0KΆ+$!i@Qə -8MI8íUd77HG<6$W1\/*7gyܙR^۸"\I"!-p5fF_1@KF#GMYmBAV4XudC}>A%Rt=):zZ:6:0Ξ1(7K#RQGǰFˠ|U&$YvyĀ66CVufN?p–X`k,lFZHtr͘l3! endstream endobj 21 0 obj 4193 endobj 22 0 obj <>stream xmXyTS׺?1&h+\ m P80O*b !B$$!iC ayFF::m}x۱{YYYYg{~;c0}keH,HY(Hz:[^ǘ F>R"Y$O $0Õ+W/뼽=*{W"J2A\0%>0UyzHFbzm\zM}aHl?拭{ v`; l}}`Pl >±vl惑|17l!\EVl1q%%-a)ᠻ]U 8Us 9wO,*N %e*vgUvf^!__A84lyVP5vP1ajmB7c]Q%*.P+4@vTnV(r3ys3|Zeh4rNe<*md(Dk*O P#T0ގ,#.@7&~Χ8(#, '%ܶC=;yq}qB D+ݦXm)&6$)MUW7Iku\h8712%<\#U=FGK?\2̙Ol4.Tm:! PN'әT1ZvbvU˽ h^\lr̎llh'p(E25JZ)czC~Q߱/شcCZZG&4RGH/+i>7ȃK>5RrJMuxظƁtTM˳˷xX(VF1̈́בp)V(,Txnq2^GˊL 庣|t*@;,mzɽs}c{pȘ ,V+\Yw?w霥wuᥜҒT.V: [I_ u˷ٳkBgIJ΢C3p݋s_Q}.3kÔW`B9!dtV:ېʨ2EVE+qo^@k7|xqςdF/}C(j~.\T{/x8{ \RDŽ |`y'@\IGG_M'U%YtՀhp4D7*;On"`6IV;mV{]W_fʝˋ,h*όFD{4iTyC-\]%J]i^ڕ^+FF&s_Qyx /mum)M,1ʍߌg0*dI5|<[_ !D2@%D}dCD?yiZ\@mWwKYyBV{7m NϺ]Gq@ԥlY 7|,O ݣJq&rACczNϬj] o.TY`i<5]T$-40'Ǻ3S@"7:A.JyM D&O{ZqsEIZ[jM]9ҵOcWU&h=.ZS9aܙPˬ~@L4 t$v4?#Pn0 g̙IFQVrNP&WKCe9G 83dv<A+w| 5ff3*$vnjlv 10Mj#8S'^ͫqF69^N~HtY[DӎTc +%ʲxw()ްNM}/FOmG2zcq>~x_.2=YK8U>!K3)kY*ՖbkQ96 >:'tvҜ !IYjTZP֚ P5u:'PR84ERZ%dlqe V'*b@4-8uIP)M)G+gK/oY"f:ϡS xh['c`Aב`K:@45Ijicک)d.I|sJ|DtjV%DlA>g>W'm*pKOOji 𒂉ڞ/mWu/<8Dr];UvlPhl̚6ЛYFhp_7p $ j6H(1挄uک~r\ls* 9$'˷ tyh{`˷r*FUx_Y7.\@zcIa10[p vdn7"!q00/-U+.Tr* ,'h;L,jOV "ecN}Sve#3#*_ofȸ}8X> J:JGW )Z::m#LU\P_i3dUxoE[b&'UT ./AOR ep~fMʬf$zh-`\3(-@^7Aci-ZO$1~f:f]Yd)BnB: !j.֎dU Wv(_YIʭѵwYyJTrULm|Smƴ#HQVoOhh/),-4 ˀhoʜ#4-C-:?}iDݩKҰ8J~K4;C\8;Myd;LVcӷ7gFi3GUP!1َ*A?qP\Va675 Uwb>4iN:IEjpxPW( ȼrr!O*kj@?؋“Bx j/rdUNuR]aܘ3,砆+q1Pß;s;pі_ FfBz0B3xnhz%Cug 80| ffX{qzw]%i=s.zȻ'ۛ{Go\^=T֙ȿ%uk-`9xG%' }}4:`liAm `VT*%A%. 4?OW;A7_åZ+J@;AC<[^t`QZmoi9dV WFn)䋏j N2ͩneP!3+Y6:gz,B1} gF%0~KE^.SRE 3P2!'A$_:z](|)8DH ;=x4㯻nz$QKZv^k/[໚ 1 ` endstream endobj 23 0 obj 4629 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001060 00000 n 0000015090 00000 n 0000000992 00000 n 0000001414 00000 n 0000001266 00000 n 0000001108 00000 n 0000000832 00000 n 0000000015 00000 n 0000000813 00000 n 0000014714 00000 n 0000013442 00000 n 0000014336 00000 n 0000012944 00000 n 0000014059 00000 n 0000012504 00000 n 0000001182 00000 n 0000001212 00000 n 0000001561 00000 n 0000003447 00000 n 0000003468 00000 n 0000007747 00000 n 0000007768 00000 n 0000012483 00000 n 0000013974 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15230 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_cleanup.30000644000175000017500000000177210265631023023707 0ustar danieldaniel.\" $Id: curl_multi_cleanup.3,v 1.3 2004/04/13 14:27:47 bagder Exp $ .\" .TH curl_multi_cleanup 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual" .SH NAME curl_multi_cleanup - close down a multi session .SH SYNOPSIS .B #include .sp .BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );" .ad .SH DESCRIPTION Cleans up and removes a whole multi stack. It does not free or touch any individual easy handles in any way - they still need to be closed individually, using the usual \fIcurl_easy_cleanup(3)\fP way. The order of cleaning up should be: 1 - \fIcurl_multi_remove_handle(3)\fP before any easy handles are cleaned up 2 - \fIcurl_easy_cleanup(3)\fP can now be called independently since the easy handle is no longer connected to the multi handle 3 - \fIcurl_multi_cleanup(3)\fP should be called when all easy handles are removed .SH RETURN VALUE CURLMcode type, general libcurl multi interface error code. .SH "SEE ALSO" .BR curl_multi_init "(3)," curl_easy_cleanup "(3)," curl_easy_init "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-share.pdf0000644000175000017500000004573510265631023023173 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXr6}Wy ձP/xtuֱ[i't24[l$R!)7WŅ7۝NǙ-ٳ,g}}wf0};} oһHI,Hf4Cg޶vlZ}sb8ԏBgޠlU}KDHYd f"OcㆅO!,Is3< 1<$ h).q% i(yb-ܧ‡+.N&J߈0S;s^uh{(n]r}.z",`}",Wg?W.iL'n$EB#aTԃnWG$ա&gd_Wuk(I7 6cfkNvYAqٽj]Urw(JS%~5! ,;n t`Bcn^G# V!8^},=uz7`\qאE[Uf[(IuGY[*u&+[ռz1͎WKZFϨ/t;"iFBt]$dA\^ "Taly.q K=Y,z APmGA\M}Cu#ϝne@;%4 d(j2 P mlT ]fGdSYF{ n-)AY+r`\8\'IV94 b zXC;Q&qZSpK4@&~;ߔ-)ZX@t(KCW>5#erځ37d3|$eM:nb`{f:f} *A~t% &`yM6yO'ڝ{JI9L{qI/ǭ`׀ n &09rRV'o@XRw_)W&,;Н9fS_pma(Āܴ88KB> 6ߪ> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xuVytSվ>49LE ՜ '&QZ-ҦMC:f89I锶IKKG:P R(RDAȠW޺wEzY뜳g},bzzuX/.Z8]vbyy6b-:4'Ysٰ}?IDX ebт /~Į^ZtH?_DER|P*勥o6V-QrD陙vKyM\ph˖.rKEm%K$酢7!ܲN)8mLnaQNrqKRR% X@K=DH$^!I&bK')fbJ JbXOL#OS '?ɺěO#Ȉ)NL)aOg"2S-6<=fzp͸4C3;=̿YKP \kR Ѭm|eɼ/"|O ;X"Q2 w ->Og1 g[. 0y:b> =f%e~e A.A(C;@1ěI:8X˃`)T$?1'B,ݟ#jyjY FAm Z[wM*@iRrH^וZ`&ޯ{,QJ mW`4w$188C6_ >ЀVlՀ+#ۼ4v2hJ YJZF5 ErÞpycYsf<5(RWi9690;b{.h<5v駳ý+u Zik->,{*jޏ~$fdrupc8 j:b5P& dQpe@wZDh>Zo~q٦3Kì`˽xãWP ^iH];m*w5+y/v OͶgS/ d+98 &!fZ@6u&Æ3xqI>dh%hJ>7M2꒍1{0TC0d3k0TM Eֳ<B^rUfSsN~>.b¿4|;%Tʛ[3k?ğK |%c({5@fR4m-2d~ {@+fsVwc#19pcs[k9Bee>,2[1Nj邧` /C, c{ʀޜcQ>[Un9U_|AA\zl- TV5?OUt*pj,X\OeZJBT+ū eV9rW[Y~!vkCEN og>}]wrVׅ֎:̯[BlPԲPzF"|k`_8GkA?@%,$wwS.R!%n!w9Оx Q!HEjFѪ&PR6/T{ Rw)y ?`/1K,};cN}O1LsT/ 7_v43nfR!X5#*,KAp43Qɺ.>ɹcvci6RPvIt:' v# q%;)-vή6LӧɟםEs1hRd.׉X ̶ g] ம,p Quu wٴY^DEFɂg7حIvln03MfNy  0s, GZ,li fd}=dӿ| !Wg2U*uX)}wn']暯2mXGVG6wtYdVP>~oTX|ȓɋJZZۊ[d.;/bjy7rzh> m|ǎCzz\g^%ȉjX0NL ;-f^=4g6|N4I3Ncz+4ܠ\:v2zD_]yӆsӛ6%H ck +7r̮Wt_9S!G(ћ@)_lj ۘpҸ9ܴlNGK#謃K4o{,zGق3p29Uj9&íTUcľY]Ea>tG?F{!04@ ZʢPƩ3Jr3J:k\> s\ihjJ#B2?m^N }}rϧ؛񧂬Pg z|j% ,Jn邋[|'Q+6%zr> hl3Pىf^,:y_?{l0Yu"LO6[L|q|gUarl6^c4M-Eh}|q >eӂ"RZkonxxSހ7xE M۴H2m|ߣR:߀߷yIHrZV]7jLsklM@\jH-=̚'l9xxknJM/>(ҥijvܑOJRޜ ٚ3aڧ&O^j>I~7wnv3rGL8Ʀ We+3Ays1m-=ڜBVxjm㦚ZIyCiw7U̘A'`$ endstream endobj 19 0 obj 3608 endobj 20 0 obj <>stream xWyTTW%U(55H*qg vQQ@ , (v"R@=@ DEKΨq$gYhҭgt̙ vϙoyλ_I)D" `u*yV~x_)̑sq$o]羁?fA;qH U Z]^ٳ+d…β5k(#3^(7ձIJ/#MUI)+7hFd⒕Ѫho{#4&FiӔ>(tE@ubdjr61"I]ܮ PES0Aڱ1_)9nWz-[5{3"mfY̼1k%qfB;_I?OiSqpsQTS-ޟ6zеGf̜qaƥfn%wX!!]ƯK%D@CÐBpxqɟ%'>0p>/䗏T'ne;+lKYaIgkYw{Juz8L7Ṡ:܁OggC*۳>"EҾbs,kQ &OM (@ '"ddw2;\X#9ሂ| EV.2׌X8\qZߎQons8&'K]BCs\ty^=>a5;BA1r7!H<--pNRb"dGb<1}yXTG8҇ѹ/GzEnۈy;K~9't'Z/2Gwg/Dz{H}JZJrh!ABEM989ޑ/TZ$sPxN : +XKa zio}L)ix1ׯ@p*e0׭;64 PWo\|/$?NR=do#=<ʜi=x-yX-@z2v !QF>o?={E+\e`,N~ `ɱ ։A7t ]\!;NIHl2ʋk0Kpj3W2zv,jFM9g2|AΫvv-s{K]O'=5T<հaC:ѱzւv!G'5]lQ!sd%#nǠK54|VKፈ\ EޱχweA  IEZoMK}@u C!Pt{|/Yg2p>6V"ksA,&$DL[edQ9V"L`q%X >҇CVG9Yj ,ϴ.y> sP#q M٩5M 6Ƭ; oTPue߇}["x,YMF8I'z3J d3O?j ƈZCף03? fqnɪTkCFmfm?/#*&Qo_opPűxLEfА2p & :C}𪇊9E<ϟa}Σ4p ̣&D HBL[E-F`eLiԟ)~Sso^M_=NAg/\P0 |=k$] ϩ8d\-jIcp@N"$-yGM!1Km~  ҕom =Wu$E__\VE'Tz"!٦'L$Sx@lN&gbM3ṔF:HX”!0r 5cꢚxrVc߂ƒ2=Idv.GM8~dH+Xۀo ɍu ٪k ;s~ǜ#jۡ*Cµs1[yEkV% lGbi<<ճb_j/if\M_k܎4Ϝ4ږjq|gR &΅\8YHOHtK- W|إ (:H4k:Q+qڒ˦.޼^9Oiy܃l]|G)Mޚ^a>&}Eru -88DD.[chD3D><"Ro_2ü,T5Pi şl#Z slKL~PhD&cu>{}D] ulpUQ[T/m4őLu1?+%ԯS:-uz6pET`#_s[8hPKWeeaOy@sn*@ HH p~M>o&Hm_,<.."?V5MוfQCǷQ/s_3|$kJloU>stream xXyTS׺?shMUVP:j+̓(3d`NBH6 $$32 8T['vv?}k=++}7|03ٽo;Y'JY#F O$Vf\DC8J80"gKzTX"nqvO'&uIIbS#"#""w%I$t+7_?6lqޗ&JvEljReH¨gaDd=0.5Y%N? 8O_y'*&-1"kLtT. .;-Ĉ=REWfu.7,wqXC,%BJ jePV2DQ )xͬaX,dZTsI M -|aze? |pOh@%L\Z ]"-꧑XcFS1p1f)+,ɩПšX9/,/*1j !8ߜ\h)Zpo#qv` 3VQ25"@}ّ9zу鶝ic/&}' 5VXR&7+[D\&te1v(蔒 , qlh\p_>H_L Ou!ݡ4 $l걙-&KIo %%{-yZ1з2V)kXrRS{I,SJ]u,aFѯ8꾩u!ڵ30& lLg32@6Pe!UpM7j-@3ڶMg|.}3/)Yv|k&~ ?΂o]K?HmSv 5лvto=]V%cuܠ9(%٣ P>$[skXۊTד]|3[Uo O< u*?9v{VD!m}v܄Hv3Еh[Ee΂+ʹiMv`pPwa$ɟ]=9\W@ؼeTv8Y5Au p9-&ku Þ]xܽ a0,N8ҾWΌdyrjjl!Yjb/Z~Gjm=/hd,dW28=Kua RΫ_>;&bt%bW)֘ S/:9OgƝ?? G6w0H䝵PGG0TډxX:FTïJTV޴o$,ISrKx>c,w;^]Q3Hԥ8x^-+})O)M@IX! TkTj | *+,He2.7^ 2DFEi`^zՃS (N6*P\n,4ꁭ\Xz@NeS8/tS51nj0N ذ5$Vkb+@$+ qg =>^_w:s}ހqثL5 [[Xx:)Vn,OK+IZOo' O%c T&\̤TR\yRРt-y5|2D|"Rͼmq/U|9Ɲ wz3g`Px P viT޺2oҕ %8ށa|xe%f$9LHJ5XsX0H흃'ZI2M%۱`|,ǠycTٺl&phfZӂ\_T/΢sm/6uUrME+ `o$/r'. "#5NN;4VMAHt$5U,OmimomIm 鳪.zo\uSm!{ŬKU@K*D' \/ME@ei3Ns[p]SNsrYajlK$ g]ͯԀ` e@T%iYB@E&OGm%y*ߢa*%?t?8t%K NvWpQ/kOqrRTdYE&k0q#duNQu1[X<-?q>\*Ju 8I3Oծn%J3CH4jd̩+,j3KE`]6Hq$} 'W@.KPdemgmmrRe܊+Y}y@ r,l{+W% svd6_ 9АUM89 )PWS]ڨL$tO6B%#mݙ/-%pum ~n-Lgβ<5i(t)jz S3WF 8 'R]oe2]-y0@]enPPOJa ` [5-;DJUxxƭЗ#^ K;$+U^2j+Ue)G@yf|z2N=_BO9reV@k@ VEcZa,lJhh/),-4 @5w6Hv-"z.n\*Qʳ!+Vl YY *q-Aܯ<Vuhl+0pfe%'d e-W< ;b6U6Pj?#ZE,&<-+)*5Z#8;\+ȴy816&KO'h>G73C^|o!.~ (VT> vd0kP},j! |jZI"E5JRmfPk$o-~Hl%ŪǃGH8;AI|ŸfJW/xW]~[TDv/+*@#SUd/ ߄|wLH?`fH G-P1?=usm)LnH@.I#F\ą?fyu:V9Y+%/ot:.ɛO-3zHuEښzo9\˻/J~۲qwVr{ cܽq=vowcgpC;sg=joοJ,Ss\Z.U'4sõ|p~ՖTq6>mY[>#QGP;Yz9u gx:W ި1<(dY0vr)+ΓWetlߡؔԸiwo(|.'Am`@o9I1}U oL!C>Q|pM/Xx O&81ڝc诺o ZyҚ,5Ӻz=xX)sIcɭMZۓ/f?9ܯ\Rˀ[f!ٿv2o˥ltjb4 ?m+Dȣc} ,hֈoOqp VwwS.KZOLDL7m Fؓ`0]JP]AQ &A|Njf"[a'V+~Q _>p{@4G}P =>x{ރ7ӎF r\n75qgak7oțE/9y{a4u ~u{!,\\ jZE}>.04F5r ez`5h3#zieb9rܢ/\X.O %<;';pELr@(+v{N)¤0˧kY['B*[$R>SW[u& |ʠۡTGcF-P jYmV>gΓ9s ?` endstream endobj 23 0 obj 5758 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000002307 00000 n 0000018702 00000 n 0000002239 00000 n 0000002661 00000 n 0000002513 00000 n 0000002355 00000 n 0000002079 00000 n 0000000015 00000 n 0000002059 00000 n 0000018272 00000 n 0000016923 00000 n 0000017966 00000 n 0000016449 00000 n 0000017656 00000 n 0000015977 00000 n 0000002429 00000 n 0000002459 00000 n 0000002808 00000 n 0000006502 00000 n 0000006523 00000 n 0000010091 00000 n 0000010112 00000 n 0000015956 00000 n 0000017547 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 18842 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_version_info.html0000644000175000017500000001677210265631023024356 0ustar danieldaniel curl_version_info man page

NAME

curl_version_info - returns run-time libcurl version info

SYNOPSIS

#include <curl/curl.h>

curl_version_info_data *curl_version_info( CURLversion type );

DESCRIPTION

Returns a pointer to a filled in struct with information about various run-time features in libcurl. type should be set to the version of this functionality by the time you write your program. This way, libcurl will always return a proper struct that your program understands, while programs in the future might get an different struct. CURLVERSION_NOW will be the most recent one for the library you have installed:

  data = curl_version_info(CURLVERSION_NOW);

Applications should use this information to judge if things are possible to do or not, instead of using compile-time checks, as dynamic/DLL libraries can be changed independent of applications.

The curl_version_info_data struct looks like this

typedef struct {   CURLversion age; /* see description below */

  /* when 'age' is 0 or higher, the members below also exist: */   const char *version; /* human readable string */   unsigned int version_num; /* numeric representation */   const char *host; /* human readable string */   int features; /* bitmask, see below */   char *ssl_version; /* human readable string */   long ssl_version_num; /* not used, always zero */   const char *libz_version; /* human readable string */   const char **protocols; /* list of protocols */

  /* when 'age' is 1 or higher, the members below also exist: */   const char *ares; /* human readable string */   int ares_num; /* number */

  /* when 'age' is 2 or higher, the member below also exists: */   const char *libidn; /* human readable string */

} curl_version_info_data;

age describes what age of this struct this is. The number depends on how new libcurl you're using. You are however guaranteed to get a struct that you have a matching struct for in the header, as you tell libcurl your "age" with the input argument.

version is just an ascii string for the libcurl version.

version_num is a 24 bit number created like this: <8 bits major number> | <8 bits minor number> | <8 bits patch number>. Version 7.9.8 is therefore returned as 0x070908.

host is an ascii string showing what host information that this libcurl was built for. As discovered by a configure script or set by the build environment.

features can have none, one or more bits set, and the currently defined bits are:

CURL_VERSION_IPV6

supports IPv6

CURL_VERSION_KERBEROS4

supports kerberos4 (when using FTP)

CURL_VERSION_SSL

supports SSL (HTTPS/FTPS) (Added in 7.10)

CURL_VERSION_LIBZ

supports HTTP deflate using libz (Added in 7.10)

CURL_VERSION_NTLM

supports HTTP NTLM (added in 7.10.6)

CURL_VERSION_GSSNEGOTIATE

supports HTTP GSS-Negotiate (added in 7.10.6)

CURL_VERSION_DEBUG

libcurl was built with extra debug capabilities built-in. This is mainly of interest for libcurl hackers. (added in 7.10.6)

CURL_VERSION_ASYNCHDNS

libcurl was built with support for asynchronous name lookups, which allows more exact timeouts (even on Windows) and less blocking when using the multi interface. (added in 7.10.7)

CURL_VERSION_SPNEGO

libcurl was built with support for SPNEGO authentication (Simple and Protected GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8)

CURL_VERSION_LARGEFILE

libcurl was built with support for large files. (Added in 7.11.1)

CURL_VERSION_IDN

libcurl was built with support for IDNA, domain names with international letters. (Added in 7.12.0)

CURL_VERSION_SSPI

libcurl was built with support for SSPI. This is only available on Windows and makes libcurl use Windows-provided functions for NTLM authentication. It also allows libcurl to use the current user and the current user's password without the app having to pass them on. (Added in 7.13.2)

ssl_version is an ascii string for the OpenSSL version used. If libcurl has no SSL support, this is NULL.

ssl_version_num is the numerical OpenSSL version value as defined by the OpenSSL project. If libcurl has no SSL support, this is 0.

libz_version is an ascii string (there is no numerical version). If libcurl has no libz support, this is NULL.

protocols is a pointer to an array of char * pointers, containing the names protocols that libcurl supports (using lowercase letters). The protocol names are the same as would be used in URLs. The array is terminated by a NULL entry.

RETURN VALUE

A pointer to a curl_version_info_data struct.

SEE ALSO

curl_version(3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_fdset.pdf0000644000175000017500000004173510265631023023777 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xVn6}W +Rw(@lMI(m+Q.Џ )ʊ>ACϜ93gPFzdZτ)*SFp%X#!'a(&Ie1Q`YߔU_v&oE` ROhXS٧%9sGr(g9Û]>^$A3%e\/?`C= ydE<9o]f]K)E5žRMTiWԒl")Q.y)XWv)hw_o>]= ]!sOEǬS6ViHK(?^1طHGݣd>4E'F+y{?&4e .$>,c32*(˛:eɮhɦJmaB,PD/̬((+4eOXHhz7Ft}#[RXm)XG`nU]}Yd:,ov?kQ V%yR HnEȓ mߨs?x}}]ߡ.3tAiYr XYJ!N1SC<PH<, > '2@#k7* c^u5ONnESR 7HnDU$ я 8_-TOVM)> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeV{TSG!&\]4mhܺ>!HB$pI  G ((Z>A{Nn϶g\g{9gf|;}CC!4m^F'TY. mU $ c+%^ood3ߘ óMk6B4ѤP,SIK~YvZ~+MBX$'RPR e$ZBI<_#̉HdD, \|{TrXUH2΂4H"(o ; G.-T(ŔF{GW-DMH*ٍ$#"!dIA6"H2I@6 "ӑyl4GF[Gu[VO2>d0kQf _@oj& ,|J?NO):4q]G?" gXԂ N@PeH.r'K.;~c:/M!bi:[!¦װ۷zWUܴ݆fxمؙѾ~ƶ=O OD6,5[+OFaB'Z"<(5hq*`pK2k8>m]@yj2\7@1̔%*6]:{\۝ 䒷 Ċ3_ C^[ F1k(fnwE""#9%6BuP?T\ǚ aD~W=<:iuJ\nt3bIu3&1`8 Lh:tΏcc. T0)ܦB;)UPN*X[\y2}EjuJF$byB*4v!Qjh ]5s5Ec5Z^[e*Nw+qwg@e3WhMÆ+8FOnlhm;p 萈'Q.F1.{?+.':G:++AF::4\/?e Su%"➍s[ m1kK}#1 !M[X i'vD6ˡ&W1u*p4(k{}ӪC0ᐮPx V}1Y A1Jki GSNyW=7ܒۃɨ24h_t< z zfOnO~\?uqHٟo)\qf洸pµHytmvt:+31ŌtgڅtXlEj6Z*o߈@=n3$jxŏpV\gW$7stFs=SWy*<[VJUp-lc#ީuMg8oDP[{K^b|L#t7Zr #FKU x|{4ȖfCKOs[(B8|d-*jt xK*Tڠm :Z$j,DUc@RZ{˃.w{bb(O5m6 Awq F79ի"E9/shSt"ƱzfJ `l}!V=Jӆ㦃Y(pIN|:N87*667~3#{S&OHD! ^>SkC_D4 ܧZ-Ũͦڜ.[i&GVW9m~gEL$PqPOLWJLA9eT)ӟTn3YjwEYtT5foZǃ/hZ;9SQӠ䵯ф DsEENr8mNFirR: u0 s`x}Yd& t-"+!v뱽[3)X0SED"|ql`TvO"6 7AZ`\,^<>9.,$KLϗm vny4+ddʙ8gk/ċїY#0 #P0,SRRjj\-f53׀**Q(d PVId!_C:]I~xtxV29kS]E&E?o BzQt֘!~32 >Ô>UohJ H )9A endstream endobj 19 0 obj 2587 endobj 20 0 obj <>stream xeV PSW(*,jv+wG[ED $@@ 1+ o(y'H\"PZV;QKUڭ;nMOfvϕ3̜s|s #H>[CX&["W $)LT-r1{9_x&>Db:MRr2蕈 ,gV^}DAIJWҋlVOSg>\OZM2IOP k;UZurFuʠ.Y"<IPFT0jer:ABzam7"25Y;^~Eڙ0'mi9f1,a20L$y,cv2˙0+L c$:FN1d<(f\,9*ה)7={|ijLPsn< )|\1ov1ϰOwB,MYMNK]QiH!h9|N5cxr9i?e#' XW"ݲ ֜69|Mma:u,1GO HO7܉jm!]ӘTME =MYw%XdA?Iv  P,d$2.+*Dప8e@K1p?׵w8;0kG*H9M jvr UE jWoօ'}kB_!,,Qu0e;O^J,VEM1Xuxϱ~t:O]zR2{)"&f~{ w3B,p='"s[9Yh^W %ϭ/jב6z5֒}֋X 2 G!L5%=ϭ[R8q:>yNb2mU27[Jp:6&OC: ܀ma/|mzvB'8b3>kiF :ZzkhܶJ1Oa?䉩 @tNj" 嶊%r!}ګKS Dik6ހEno<ړ=㮹P55c1ݜR/о oPzH>Бx2ˤ -#.YH: ۰wK擧I,y$⯿^q12( .:|oQ ?Cz+)[BƅU95Opgu1O~ >(x'enʏD:{c16Gf#R; "o~X-a,~67'c}'Kz*԰e_:r*ڱ#2se $-;y廒 XVӏ ]5V[c<; Pl[=.Il_a0)"A$SDA<σ ƒD+` Qm%SG^Sz'k}S!Or 7l?(YS!(a&WH[E{G#X!j;nW~|gs^,OD܌Qi4 8фh`l f>i{6}\Gn˚F㤉x)g_U⢃pZ_\o"S 5d3rRJ7`›b?;$|C=a`+ZVUhyD,?O/})G#?-.C9|: wMH"a@SD`|mѼ!*!A[ѷTy7ـKg>9cL|MޛlOwl%G#$9tԿ2`Dgpfk\JJEQ\M|K3%ŢpKG>볏^?$ 9$`&C2Ų\43-ZGHprxXt F'؃Vhl x3nW^N^‡#h׌'/hn^MKKKְC,6ۯAG98Dxύyfz{#4DIJm{6JMJM$oRAZ\eCxۗ@"*r?=!튬P95:/">rmk]pz\d++؊ں};ax'I4 شlMވruyyîv9< ksex'mVK\4zJs^, 8Rшm0p7P֕;qKMcG0Ag드]#,k0?/ˤeKլ֦6{N2=,DR cdh0t0Te1b:4"ԙ[i8Gie=2sT"Qwn'!`{һgtPvLa P1 endstream endobj 21 0 obj 2918 endobj 22 0 obj <>stream xXXS?sqDkBU u֊!vv$BV ,ցUw-.;{/{7~~y>rx_Xi⾻k#Y(e,% ^4fI&~c?},x{`?|YHOOZ70K?+}}}b'Hx?dRb$sf|wJJ!EjBWtl(ֽ-$:E51%15Uxk^W.ozҥ˼%qLW$kX% 3^oz'J{W8&+kQ]R_/@Q|VJt\! ɡJilTQn-[33g'D1^Ufr/E핫{c1A,'^$‰݄ [b+&^!AĻ""NA%#$B"'D#v0bIIeM\HR&+|.Ic2b p8[hSLv5BO8}`Z)Sx{ynb{N d^cM[“(vR͉(a۪]8 g\ZjKj>HWrXFMj`R Ҩ 渓H.Z" 9Ep jGvPNp D1j%FW$*sⶰxURN˒ JMYtLԕ>gpUYd󁓙`{T3/rJ@…:|ZԾRUaцn@hJ.D" kabTE[NPA}m$\ 'd̋Л%>#;@ꗳ7>*֬2i[\l9&|,>F%ަsW@G;{M֎ ߞ.d0O<&\NQGy'vMܠ=[V\J,A9L ɇyv-DO.j ӺuF3,`1Nf~\UL9%_L44yD?Qh&,h( k5y‘׷1Xx@3s^h7B\8\F-D65JO\Ǿ|w if~{\4R@V e~C[A1BMR+oN@l"{M8c;(ȚF^% ~bpGG=hb I颚\yZ yh1LUj*QUR *@e1NA:^P^P0mzw>D]0a- JGz{cclҔPU갲 ޲Si`ESZ#lاvv'R gWΝ>tDЕ씺ޣ*Q€.0܈%;@ 8.97vp̽oOFև0_!J|qi\ n_Đ݃˸1$IQ܀~\e>[*HƏldh=,?QVWS~v&>;.1 S[/0$u  ޹Y`f,ԐLLH8@mBgh8WIC g=U>>kίOqj~,.جլBGB}+߃v zB@sjPo,7n.'lѕ{{WD43f[IoK a8]w%7? i򼫳ޡ Ӫ5nt6F&Lʍ/ZK&?D`Nٍv'kU4zR[]W9%-|+%q0T2D[`},b>hr~ý3٢W j"A,$I}1n/yɀ9\ JVZS;5wjϩf &8TM n])&4WOA-|}CN=N0%{ ?r:`,*|З,˲JosPס#zd5 ,ݗbo stGvVQZRQhLm ~xɌݽBD|(V5VζsHgX]]Vܡю@l"Dئ{+Le #ߢϼ':cw̉ܠ~j.;*-6 r 'q՚ x ~F'Oƍ G'"Br@+c{GUwkWkÚvswPӲ|(js+t"ޢcF}P h W#.n[eòȴBvb֞ź/`*Ɗ"I`4 F(`DNh2Yι9a4&3u:%2qe R&IR  ik, ܴ, d(@N!+eW=i/ GPCAg#z9pkԎ97qN&$7aShTPa4R@VRRb@&rU5u4PoI@uk`xC_U^&GcUi1a/G_^l4Z\+[V[3}'7++^9uTj]O}:Ⱥsu@4T> eT( #P)CL( c6(՗_kV7- PUeK]直2}>}ǫU-X y_!#d|W3!G~pXb*XsQ`Z㟇3sR pf1 U[Sy4_>Whta(N絫z`^|cfRdpDd`VTќodĤ#Qc#Ap;O?ゔ|+Uj*1(I'\,؋(%Q@oz*bw1.Cp;ܼhUj~ _fFkq)H!Z8YM|i%o  B=};yD =,8#y-[;ZFo'g877Ok&mhzr=X^7LՃ,8qngp>m_ 6U>/D,j(u1j{'XL/ݵ $7fVڑco:)=Z7a'Fz&f/XYmhFEhYU_몷MgF  $~sJgC2&&WUZx'\[^ FUuJfYYZc>MֶNT92J%Ӗ*ق$K H5^^+kҖZʑeԩ}KSiŤ" rZNg94 Wb)U,= @n-d^톱ͬqNf5*C:MP!.T'Tq`(Q-!BTFHμ,[tv! h%yQFIqa;-5၎ 4MT{w4 [/LknBέgnb1{'p'IrZT;|~D߰0aE63c"}2a@BFfbrj+. l%czrq{ \Xtꇙm{ Y\8~uįw3.pY^E ͷ qvz}A Z<в4^\ 7 Ҍ8MOv6 0+s76ѳ'Ywɂ07+'ֱ,%[Wi,0_;<|aJLjag>[&洰Cche\B@QՍf :q5=1>Eho'(HEl$B(ի caQ0t7I %{;5 ,#VSUҒZ[M)'dq_RnfAePDI]SSV0XG.j,q ?$|}p[w_ :'HNT%+xG~skމ\fmEl-3̖W'IĚ鹌*aヂ&˝[fx> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001752 00000 n 0000016654 00000 n 0000001684 00000 n 0000002106 00000 n 0000001958 00000 n 0000001800 00000 n 0000001524 00000 n 0000000015 00000 n 0000001504 00000 n 0000016202 00000 n 0000014956 00000 n 0000015915 00000 n 0000014496 00000 n 0000015617 00000 n 0000014044 00000 n 0000001874 00000 n 0000001904 00000 n 0000002253 00000 n 0000004926 00000 n 0000004947 00000 n 0000007951 00000 n 0000007972 00000 n 0000014023 00000 n 0000015518 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 16794 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_version_info.30000644000175000017500000001136710265631023023547 0ustar danieldaniel.\" $Id: curl_version_info.3,v 1.9 2005/04/07 15:21:50 bagder Exp $ .\" .TH curl_version_info 3 "11 Mar 2005" "libcurl 7.13.2" "libcurl Manual" .SH NAME curl_version_info - returns run-time libcurl version info .SH SYNOPSIS .B #include .sp .BI "curl_version_info_data *curl_version_info( CURLversion "type ");" .ad .SH DESCRIPTION Returns a pointer to a filled in struct with information about various run-time features in libcurl. \fItype\fP should be set to the version of this functionality by the time you write your program. This way, libcurl will always return a proper struct that your program understands, while programs in the future might get an different struct. CURLVERSION_NOW will be the most recent one for the library you have installed: data = curl_version_info(CURLVERSION_NOW); Applications should use this information to judge if things are possible to do or not, instead of using compile-time checks, as dynamic/DLL libraries can be changed independent of applications. The curl_version_info_data struct looks like this .nf typedef struct { CURLversion age; /* see description below */ /* when 'age' is 0 or higher, the members below also exist: */ const char *version; /* human readable string */ unsigned int version_num; /* numeric representation */ const char *host; /* human readable string */ int features; /* bitmask, see below */ char *ssl_version; /* human readable string */ long ssl_version_num; /* not used, always zero */ const char *libz_version; /* human readable string */ const char **protocols; /* list of protocols */ /* when 'age' is 1 or higher, the members below also exist: */ const char *ares; /* human readable string */ int ares_num; /* number */ /* when 'age' is 2 or higher, the member below also exists: */ const char *libidn; /* human readable string */ } curl_version_info_data; .fi \fIage\fP describes what age of this struct this is. The number depends on how new libcurl you're using. You are however guaranteed to get a struct that you have a matching struct for in the header, as you tell libcurl your "age" with the input argument. \fIversion\fP is just an ascii string for the libcurl version. \fIversion_num\fP is a 24 bit number created like this: <8 bits major number> | <8 bits minor number> | <8 bits patch number>. Version 7.9.8 is therefore returned as 0x070908. \fIhost\fP is an ascii string showing what host information that this libcurl was built for. As discovered by a configure script or set by the build environment. \fIfeatures\fP can have none, one or more bits set, and the currently defined bits are: .RS .IP CURL_VERSION_IPV6 supports IPv6 .IP CURL_VERSION_KERBEROS4 supports kerberos4 (when using FTP) .IP CURL_VERSION_SSL supports SSL (HTTPS/FTPS) (Added in 7.10) .IP CURL_VERSION_LIBZ supports HTTP deflate using libz (Added in 7.10) .IP CURL_VERSION_NTLM supports HTTP NTLM (added in 7.10.6) .IP CURL_VERSION_GSSNEGOTIATE supports HTTP GSS-Negotiate (added in 7.10.6) .IP CURL_VERSION_DEBUG libcurl was built with extra debug capabilities built-in. This is mainly of interest for libcurl hackers. (added in 7.10.6) .IP CURL_VERSION_ASYNCHDNS libcurl was built with support for asynchronous name lookups, which allows more exact timeouts (even on Windows) and less blocking when using the multi interface. (added in 7.10.7) .IP CURL_VERSION_SPNEGO libcurl was built with support for SPNEGO authentication (Simple and Protected GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8) .IP CURL_VERSION_LARGEFILE libcurl was built with support for large files. (Added in 7.11.1) .IP CURL_VERSION_IDN libcurl was built with support for IDNA, domain names with international letters. (Added in 7.12.0) .IP CURL_VERSION_SSPI libcurl was built with support for SSPI. This is only available on Windows and makes libcurl use Windows-provided functions for NTLM authentication. It also allows libcurl to use the current user and the current user's password without the app having to pass them on. (Added in 7.13.2) .RE \fIssl_version\fP is an ascii string for the OpenSSL version used. If libcurl has no SSL support, this is NULL. \fIssl_version_num\fP is the numerical OpenSSL version value as defined by the OpenSSL project. If libcurl has no SSL support, this is 0. \fIlibz_version\fP is an ascii string (there is no numerical version). If libcurl has no libz support, this is NULL. \fIprotocols\fP is a pointer to an array of char * pointers, containing the names protocols that libcurl supports (using lowercase letters). The protocol names are the same as would be used in URLs. The array is terminated by a NULL entry. .SH RETURN VALUE A pointer to a curl_version_info_data struct. .SH "SEE ALSO" \fIcurl_version(3)\fP criticalmass-1.0.0.orig/curl/docs/libcurl/curl_slist_free_all.pdf0000644000175000017500000003140410265631023024437 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xSY0~lDS@z,m ʦ6mi UWȒyf<1>Y7ݣ{P6d?>:ȹ9R. B2 #Z)ugUޖJ<_awE M8B2|ǸAK|B^-qy*> [᪺lҺM+"}ހ2SʤȻ+m>GOm> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xePolu]˺$k4YĤ,FtHق6Rўk/w]om-Miױ2"SHE4Aą7󻥚x1~}7oy}0A0 {r|oc7#ځ[u6=lZU-skmAGMH zǼ駶ejNPhpSYn/էY͕rcGvھ.ϰ {.jwOϮ=p>jԀJiGy~?`!0 ~V-Lc `t(kTP51Q SeIRB󙖢P<ܙR 7$ޛw\0_5q ^/˗-Λvz9h0Klt&0 4u;;^J$4TdYe9nsJx,^l\r2(Of(YzزjXwvyR,B~*;'a6Lyșΐ eEzJd1)k.d. ۖz?.^T <=QĮG!G~e AS(=i41gRm\S[n-x ]z|2I0y?ĉgZ}|]`IPRcw6no endstream endobj 19 0 obj 867 endobj 20 0 obj <>stream xVy\Sg>sQ,UrXmպwR\ZŊ[w &@vH P:VX;ֺssho{k;|w~}>+fΠD"ѿm yLN׾Rm])ܗEB/-Pqǂþ<} s)/H_ܦRgk2o_ljƍ_Fɉ$+^RŧgVV*cluV'ȥP.aDNl)Rc²7#6D<" |u0E)=#@ AE{', ;WFǡ\|ƚ yNJ$j DE\LhuF#Du.g!Ԕ2Ye&RTp2f1=e# }>ɯ $>aZzT_Y|AEEJL`E,T]Pl@l:LKP\FL\Ua:B5)T R>ς/WK>5ÂN7akd"PtS=<{퍋%@;w'e>ߎ\% +A; O)q^)5NS*+0l*&56tSL=w>9KXKO$9σp ˞`NV& %]P[&#{;J^aweV{οQT48U(7!0Ql x^Qomdw9TRc(ed3{H.H:ƷȦ%˳ϳj }#}~&{`<NV#*kDlnX_4L_yޞ {x ƍT T0nhk]fa_'Q?['jh;jͻxJg$zt /_\6!W65,濤ѕHR5]S[I,ΰ^~E NէRJTh۟>vm a̹0?"Hºh"5d4Qʫl`%7R1/[W[.NYC-WRHA_AT9bQt:;³~2cm+ MدV*8T[okjw4#v¹Ṫ)yAaa{TP,X.U[ş.\:2l-\95t u:E_<ln[;oË_y@c "K B^ ˰Bv2SdJt0#@0~HnPp%y(A?\:-> BB&[HyDlTPS،0 1&=G*D Җ h hG\|w·l:F=tކP43`!E:/ޞ2+C.t1ڹHlI]NPQ7buV_{xzd%a SXe˚ (g, 1ydj"0?跍OJerj,f4YScl@&؛A!zLBCy[Mg?dOK?-} `y=&Uw0Ky-rl!ˈ˛LHemxij+A5P몬DuuWis[ ;iXFz~A#rpoſǡ-O%v ދ")gPMV}L}a>45c2qgAwч#cYNr#7۲Q´rt02" .X%@,MJ>:WXh6OToA T2[oqj}-%LaݶNu4މGu yDe%G=r!KhY~S+u-bӲ&ϝC6dyDBVՄRQِ%SL ҏ5!k6VZPsfT_:Sh;4OPO?BI^^͹M#NT_d)STg:鉄„tEqA.K[kwsGUn]*-3SS]rBꈯ2VDPV_^z]z0Q&;_f+fMLjf9 K'3vYٺRB]2+i.}&-\otHuCeұZO^ɮ:}VЅnG{[f,::|`q$\88pBY3wD|"ЧwV= L1٠Gt6~F,'Oc ŷ9q, Gn||Dzget⯈GxS ֊3dЊ?'2) W=UV\̺ 0V^oCnMgXڵ"|c.!G!Ng3s  endstream endobj 21 0 obj 3814 endobj 22 0 obj <>stream xmWiXS׺1Jfy@^V-QQB! !#I $L!Sʌ8֡εm{xιgmݱϽǽy'Z~͟1 Η{ X9P*r=+{ULHIf1Rl)d0n<ʲRD47n;v?OTP_CH$Ieb$SvR_%O b]a!1ID~QH&oڶl/ R"IH"JHba _+p%R{$// 򤘔ð$Iceaj|H#>MD{m: cۊ`QK, `v|ػĖ`Rl恱eC&|̀ʼ3|&bcen%-8}aBՋ, \_Tȹh|ŧ,ٻ$|J3H)¡V*YBc@SYUy6Xv S'U5F[@,Ӭ«PɅ4?X,TA#1J2b22R)go]B\ rYQlC;" aVs, )#@*,Wx;+VVcÍ]oNᮗb DS q~7*Iq10"Dڠlz#[;!|yq" S!u x6KY Xti莈 I"nZlvӬqtfVr\VT h2n0a;8`V98ᰔ*xժ zQ$7+MP}$V_v[XΦғ9ȀJsU^)+$CsI 2:fJ͙ MV<~yQI^_gcg)3ĔRa}WZhuB NGWN& s+8]'qK- K}>d ب\ilUyQ0?*:+\]cv^qn]E79My=7- PXF3iKpvM\^rW`QgTčNl&bQ^6`-/6U*h2 mڕo\=uje tp:F:Dۛx f?MmHGM?'Z*:uw .7[8#1xh ElL ⃥̰\"9z:>,J:u҂ɸM/YJt MBg1tyZsa~Q?O]`8qeyHOQt\'PhzvNíAnJZ*M2m~S%>:~uvUa(#KKJڛҚ$K/Uǝ%L\VC RJ ) \J+'iM<}`˯R(*¾v8xnޠ`\z'zgp]3@[GUz~ʌUUn3=Ô-\_fmnlRi-ˎ$(ʣS Ĥ8TZn4 tC|1nD1G@u HYqT:jG >U+&(!mMbsI^< ,9 5%rh(Uyi_I":': 6~5(ecjٖbh@YN 1W %.O3m&|AajXl2[~̱*uK XѮpsKquF=e(b^bSZ9]1J"M?sqnn̑&ja-U.o c8s,jm~ZEEb1k}&ꏜ]U|"x|j()b-*&Ҹ8LuF?*봎;9$IKJ{gkK{gr%F; ו31YVF+d{DYoNQPR >z5=ݗ/!%8B93ôiPh'D Ţa|N =g!:7 TTj5Ŵz4) MЧe(sT1.&r8 M/ϙK9jYhEOWOEDoCo=[ YԖ j?!WsW=ǂf l*h +vy,* JUzǭgF3Mx.{TҙјY]m齰G+c4>{#qQǯ} =wlO&VV{~z]-zS=uLMwܽgԓ!(ձ٢ŋ.^apN4 endstream endobj 23 0 obj 3658 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000000866 00000 n 0000012361 00000 n 0000000798 00000 n 0000001220 00000 n 0000001072 00000 n 0000000914 00000 n 0000000638 00000 n 0000000015 00000 n 0000000619 00000 n 0000012010 00000 n 0000010926 00000 n 0000011655 00000 n 0000010440 00000 n 0000011409 00000 n 0000010026 00000 n 0000000988 00000 n 0000001018 00000 n 0000001367 00000 n 0000002320 00000 n 0000002340 00000 n 0000006240 00000 n 0000006261 00000 n 0000010005 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 12501 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_info_read.pdf0000644000175000017500000004356310265631023024621 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xWN$7}(mFi!DvQDHD ۗ/3B~tlweghlԩSU\6E;yߦ9Lm!%LD0]Oo/)S#٣=Pϴi;OXuZi?1q\&8z(X/ĺ9&.mt6/me.KhԗZK/@Mvy]Ekn ,Vn:[?UV3 S^~Wanp|Pp7^jV$"X0:ɫO-^{Gv=e5pq#pEyiP Z#!Jb<O67 4lt!]aԥWg$Iv.12}A\BaH[iW;Ss s=P@n<&LA[\3F`-FgKsVW䫕о}1g &:YF2 ZW~-Qխ\Bx]WudW(P]PIT`G,n7Y]c2E'W]^]7WW拊r( Y"Kp-&j(Hh#X(vSNeVJQ#EL L c5ZbX> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeV{TSW?1%-T39iUg1VEA H#/N^Iv!B$A `:c">fy;ǻ۹]w?k>{caoX,{i _0eYT..xWH&޲jf}z,Wl_ 0֡5?7^qA9$e28(hyQ: :VkU1bfEpC{O ~'լ.䓑W]vvX~k'n|wujd?nhCwԘFK-Md ,zʆ?$,p۞c_ ䷚NG6`ӭ`౞}h)Ehk)O~9u3e+Bi2͆cD?K}qVuo}I&5B[n3L~9]@02nMgC6/5l)xd]ꆳB#f}/飀]vCZZcrCP"Z۟y{b'sSJpey`7#~p@-+ŭ8 ;_ ^;0E'-}bFS 'y:TW08I4ʛpÌ{p].0Sgxh* R| J<,;?|k$Z'_c&XO'd%Hk~h;^N'y!Fҍ? \;|UV"ybݧ0d9Jn~2RN.P׸}}'crGAM Q Acywrk`1;p2vW8E)]}#(T)M:&G ؉C. )GZgOU)"7Y}^[AtxHWVi9/,NeW8pu1V;lI9rl# M ܶ@9*_D|~`/ NuuփJPQ^QVUZS*(QꕅD(;6HbFl5Z[M^xLgAlD"f g!x\]8˞IqeG 8: (*SaI(cl h6-f:uLb ܬ!8 N֜]_V\:Qḏ-nTw]RF& " vZS5CpEߌA8f-3,gtW bx,9Rzj<|Vc;nGEQlK1`_He,O͔Y|Ik_0~MYE(5G@њgn}}|FA18ejon|1)@=g=}Q*W>x~K_gU.< iGoAFb _{eb"##'ɡ#P%\ :eb䨠<Į޺YmwN`zptB{sf#X W*墽_ì7u(x5 =V>e2BG  榊Ԓ !Rd=2;uwʯUb(.>Z FVHIHC ģiS Ľ|k{b>w}6%d>ΐmI~0pn;\8]nO1L4'm=9|jK8./݅Gitl r<|z\ oT> endstream endobj 19 0 obj 3134 endobj 20 0 obj <>stream xeW PT+rQ U6;@54A15|Ԩ _<X`aa]kwG.^"R6>bI'oG줍m=ۙLwgܹ;}0g1͑XMڸ,\Mݴ\JE|0Qcgogg|$ݽY/4h3roF-YY~zer'-j&=GB/Z>[SfjRB}QJMUUiYmF+C7/QdHMvrQV(#u땻TM^?`Fz-iQ[ ѹ7Ԫf+f¼D1W=6f9sf0+7*f/1`™L$#a61J$3c%az?gmu'اyf*a}$Eo͙;'nΉOw/* }+ =P a37h3b _(:z/x8g#' XO6CMŝa.1 A:W,%˃z$Ix..󗎳AllIyH沌#H:TGK酞.6&վ»-vIf@rP@#;nk,*DsXUQPP-<MM]n1 R4sZ\jmY >zuQir!J!A"KS.MhU}XSNGծ/8;ѹk/$?O^$߆O뛹{X^sB/ Ms8ԲɆ ml*kƷ;zz9ՒC֗ J!û͖=3ϭ: 29>= 5}>Ű@-#"? R)ieW:b:JAܞw x|➡xv{Ɉުj9TaH&>$"̃U͸u9F1_|c\I "9n7xCY8 n8;骅5ƅ (N7.^r!ys8 GĄ{CD.N1Q^k_nmDA2p3|+t3?pJ=/˲,S%Rsr-Crfc1Xjw`YJO+ͰZM5!;` YB^!I$H}}LWkbQU']^rܣGBD6{p8`hO'Y[·<]8cfB҇GG+?/'-.ܻI .QPRށCO"YmaN9' TWO#g+,95y6Y6ϗ.Mq@{qGqt\w|*v=AA >sˈ"JRI Ed1bcYKIh f UE8EP@{yCàh<5AxN49"Y‹TR (a)VH{#X-j]-g3m@~jo[8^_.X?sJ8e-9dWss[[ZMkdR]c,T[qx~jqD)vLrCs4# 8Ý:=xU2-ΐ*K'?Vo8UzKF[˒22T c$Z*?Lq@%Q`Av6g;\QQDZ@qʲE^#+v_V7*a@k{rPiG(Ӭoht\e,Q +oY|wH/_;79S[ gk(nͧY6pu!zy~]*GИm籠H9""Du vnGzzq7ikcm)L—kmS'h1CE~[TxqOXԄ+-OkDlbmY[J~ݏ[d9MLCh$^ j:0F=UY-j1vǭ-"tܝq]x_ kqMzks.A8?~恲{3 /;th endstream endobj 21 0 obj 3085 endobj 22 0 obj <>stream xXyXSWڿ1&Z[ Vvں֊ ( "Jؓ,d%@d¾# VŭVE[Nۙvڱәs< d;9E̜AX,z 8$& v]b&~O#vDAg !&>C9Lb=xxK'^"| A!1xX=D'YkXGfpfd9M5rC}ZH>3f=?3>;>g~.>Q>9[7ڷ7'dy{syy?/B ߙ/fbyMV4jUR|2P۸!#&-끅yԀn6k (pOGձ&#<2*cɹ(~Jˍ.+`;f)<@7bG-h Se(NNia% I)a)sbL]y%|"ԎHh5 jݶ2ʍiȖ]lt"*&C+3X6U PryVJWеg᫟ R-gWUe܌py+KVR5 )5LrK#c n@6}(D"kUEn2ʢsQ *cnISm*x@E) N;yͼ ћB|̭/{JUf*xvUQ䉇ҭ} `)d6yZ;S>xx&gzX5>eOIOE P};v{ȍ ܢ8;V$ʘ*CLE) :ZDW5@ާkU/S'8..Ƭlc ]߲9H/Fס/}7( Rzbغ>>i0G(={'.xmfX| 4piN5,)EJ4V2eѪ$v?ZP}CBuW""zͻqvf|Ag$ ΁;>!7xq|1L# .TyJWy9J \:ME"Ao)Qp:w$Op{Vwb|&iFzz=Iσ9)'W'y@mV[#j#|Rf~z?~~:~KJYaӇ@auGӾMΝ9<(JuK=Q<רjaHs=SW0/6P#6~T{&JE԰T[.Spٓd'8͢=qT''IE鎳CbG!F (d/y JPp]rNٟ]|+.qoL^ +Eo)$.${CtEW?w\MR;4O)G} _2\Țϫ+d H]7ii )kW}~ߊzzKՠFA~E@=yiU&s]fZ};:, e6=y_)ck"~D"߫+;rrDp)՛ (Իp(ޗzr#YZQHѥ4^)KmϹRO<ԙMcZg%/{΁w_2HjC =-vDd3b%kթ5.بyi&WU.Ar2Ϭ{lO@5W ux[jV9 ȮS֊CZSer]֝S'%NYv?Mf2`im) nomCL G%86/2ݒnZ*"T(*SAD+rS0lnsSQE); (حM Y8o4ڜCe}>wYC;ju9qE`Ab4 F}]1x,0'2at#',/5 ƃ©Tl647b58~LyM̧O֛&zhY^)9A5g3Nam_F;?* lYw +wzڌAˮ]-Z'MHlC9]T4捷UܱK"s$b/KhZȮY]Ȟ].r98x~t@[2?AzYӷ;Sd4/ qt9K+i:$2x&?+`Br̡ӳ҆ƆF O9=̎zPQ&l2f*|x {*8bU)4e ֌oNjUh-9 ⩷El\|D iz.75~q< n _Rg/R$:S]ջi=25 e[ųN= G+UKEF.KӉzdH;5"PBr}խaN Y^|cuFwCwgXXJeJoPᄘCuEzɠ1jlze"KRJ:)q|YorݿkzC,h{ʆI*"@;!WksJB.hP6Tr.rMh-Y8P^NM-뵺UE)lɜZuss+xN)G=.]f+V# m `(6@`UXWzXS6Wl4Wf2盍VhV`s5f SGJ ZA7UB a5_+NޞlQM']}^9 nWU}a;zSktD\ Bݞ`N(_(#@Ԧ,} f|Pe;aǪɾBnMaSXQUXY\ *a?RWmSvC>5Vv|?"+d|TTb_R/<`XUR*5X*f`F\=wJpbU [Tӝ+_}J45N|׈%vug7.K6DgK,%6aqEب֮VN-ݡ2QdrMrHő/ ,{ks#=ZTZA^.K#TȰ^܃Ӭ0d{p4۽_KEnYgT3fɈ2u` 6[spMFpmu^l7Z(h!;k\mz%vh Njn2L\|x/ ٗG<ܺ&0;} 9<{ucʿf%eqt~-_r``E^pL{{ gWu/%D8{bGo_@c6|PǂqgsטX.65pSmF\p0~s? 3KNf4}ܚԶi[: L) 'x3|L>EQTvϴEQMXI/6_RyW sR8ڀG۔Iwza(mD>-zgr=F kkg(j;.L|}Ep:4p )+;9QkZ2J1ZMTižo?ii={o(~o>8̐XIuA"{ۖLei[= 9p_ƓGs ҟmJaG|n>k;!ǶV%??vñ[BBE" F\f J:\&}Msz 39ȟsSPg 8{0{sMo4N*2a)dLB3a~%Xm"m\M%߱oOg˒S} eҷ:xuK T I!a"D @n̉؏`gL?ns[ 2cDH0d?Ȇ;/h-VZ'WunCǍZ$$QJxJ-GQfo_˩[([Cm6ej fLMN0882>ڶ!Z[M9V,T/cvn:OSnJpb~riÂ|f%ZkI|do~o dujS}{nj\bZ)D[PG{1_i"MNl1|ar}C )1[ɼX/WdzxғWK[o1Yx~[ܤ lQi6úԋaf,PŹA$¦_x|'p >(^%@UmHۚZZ4,9 ባ-c8Sޠpz('7N4}"cUq:C]wcݗuXlp:13S(K[$q{$hqFB̦wN&ͯ_;";[sYړ~7|zRG1G^D:nǬGvg~T;9ok:l endstream endobj 23 0 obj 5935 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001935 00000 n 0000017572 00000 n 0000001867 00000 n 0000002289 00000 n 0000002141 00000 n 0000001983 00000 n 0000001707 00000 n 0000000015 00000 n 0000001687 00000 n 0000017088 00000 n 0000015835 00000 n 0000016797 00000 n 0000015371 00000 n 0000016498 00000 n 0000014911 00000 n 0000002057 00000 n 0000002087 00000 n 0000002436 00000 n 0000005656 00000 n 0000005677 00000 n 0000008848 00000 n 0000008869 00000 n 0000014890 00000 n 0000016399 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 17712 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_init.30000644000175000017500000000171210265631023023165 0ustar danieldaniel.\" $Id: curl_share_init.3,v 1.4 2004/03/24 21:40:45 bagder Exp $ .\" .TH curl_share_init 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl Manual" .SH NAME curl_share_init - Create a shared object .SH SYNOPSIS .B #include .sp .BI "CURLSH *curl_share_init( );" .ad .SH DESCRIPTION This function returns a CURLSH handle to be used as input to all the other share-functions, sometimes referred to as a share handle on some places in the documentation. This init call MUST have a corresponding call to \fIcurl_share_cleanup\fP when all operations using the share are complete. This \fIshare handle\fP is what you pass to curl using the \fICURLOPT_SHARE\fP option with \fIcurl_easy_setopt(3)\fP, to make that specific curl handle use the data in this share. .SH RETURN VALUE If this function returns NULL, something went wrong (out of memory, etc.) and therefore the share object was not created. .SH "SEE ALSO" .BR curl_share_cleanup "(3), " curl_share_setopt "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_slist_free_all.html0000644000175000017500000000273510265631023024637 0ustar danieldaniel curl_slist_free_all man page

NAME

curl_slist_free_all - free an entire curl_slist list

SYNOPSIS

#include <curl/curl.h>

void curl_slist_free_all(struct curl_slist * list);

DESCRIPTION

curl_slist_free_all() removes all traces of a previously built curl_slist linked list.

RETURN VALUE

Nothing.

SEE ALSO

curl_slist_append (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_getenv.html0000644000175000017500000000456310265631023023141 0ustar danieldaniel curl_getenv man page

NAME

curl_getenv - return value for environment name

SYNOPSIS

#include <curl/curl.h>

char *curl_getenv(const char * name );

DESCRIPTION

curl_getenv() is a portable wrapper for the getenv() function, meant to emulate its behaviour and provide an identical interface for all operating systems libcurl builds on (including win32).

AVAILABILITY

This function will be removed from the public libcurl API in a near future. It will instead be made "available" by source code access only, and then as curlx_getenv().

RETURN VALUE

If successful, curl_getenv() returns a pointer to the value of the specified environment. The memory it refers to is malloc()ed why the application must free() this when the data has completed to serve its purpose. When curl_getenv(3) fails to find the specified name, it returns a null pointer.

NOTE

Under unix operating systems, there isn't any point in returning an allocated memory, although other systems won't work properly if this isn't done. The unix implementation thus have to suffer slightly from the drawbacks of other systems.

SEE ALSO

getenv (3C)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_init.pdf0000644000175000017500000003654510265631023023640 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xTn@|+ԇB6QJi˃+6T%UD:Pp'q+UH23g>% (>7|}=SSOVDN2#V0-C!$lJ,vg}SV}E]t7}c@YaZNH0iݧ%ZlLjd;Cn[rEzۃ$ŅV8\V 5%MGFk*עġR,\@QD0!kxqHAB֛PvSқ#"[X\^fɺQȦ)7> 9H[z+x/+hy9Jf0ڶ*9ɋ}u]ԭw0 ;}7PԻñ,9jT{xWTEky-o 8 nؕiƑQlDWR$ >ed^%rtGfsEc(q}GqƆfJ%ŲARTy˘@ىawtر;MZ\z7eKB8cN㍪dv%89:2J|7-K="^Ǵ>JS Xxlao-GK ZtI 'G%"^]&3Z,>;ca޴+KKu<a}> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeT{PSWpNĵֵmwѮ [T*Z BJ"ypC 79I" KEAQXv-؝>Nwfgtf;;~g3ñ1+s2)K*IUdaxtML V"ea7|^Kkq]CwRR_*3mشi<y*D!\L4bYR.Vw hsP"+TBQA`~G"X"Ip}m0tl Z6嬰v*X~b8>qa :yյ/ Z-r_;Uvz4ǘ}N99iNj6<41IB.|Vl0uqc!ꨮ0#'ǜ¯O`)Tv\VfX6P IՄ7}i:.ki6rhOq hǷ5R7k"udX] ];`(a:W@|or2V;uj'ra+[Od%L;Q{ x5* ,J ћqd I8̆JBޤi uR0y|! R4SHg !=^):g ;J7~l. p%}zty -1<21vTBHj=^oniIۀ" (mAa.{FjIPԙ:ۚ]բE”*L"udxˡߑGe0w5bYYU<_uJo^vJp8d i DM?l6ޣ&M/ |-n0%Kh1\;7'3 Ň 'GDqbvLN=yY +t—7P#Wz#'!.؍{W!e]0n)4׻3 W?.Tk(>F2%WG_+2eD— f4 R5l7 ABp>d}Hlr:TI>uE:&QO5oֵ Gb. #}=c<<+%-' ('ya ~pQG#_Lqh%Z*z!sv%4em(Bօ?iY0 endstream endobj 19 0 obj 1916 endobj 20 0 obj <>stream xWyXޞ";EںԽ֥nu)=@ !$%H b@).hkm]bm=|<!99{GLFx?m z- %KԯnU,x4vUW0ϋbǵޓpUm eJvH%K^;+֯_D-O_O2$r2YeLe?:.N=-$eJ"?`bז/_*>$KIW(SJd W;M)ٿ=x*^&;mytXrlp<qOl'ubqI,'+AbJ&Vo{UDxXC[DI\#l=_ys^evvo5L Q#OH m㠈SNSJڎ>.> ѓZJ [(;Ktٝ/Ak)&@0lDaR}Q@;\V:@c^iNll@ 2ty %%'Kl /6il4҆RQ 5j|ASC\cCjXDYh'3,pjR5Ԗ Q*.E&UJzV2#\>r`/» EPEn0A59TPi4B|cVB%5A -mk5EyP( eˊqFU54 {~"X*`٠wxvR :NO*(_ߘ٩UVpf)h|$vpd$x̣'H%O#*3[C:T~ X.\as/[6S\Pǜk&'j|)qcDIjzQmh/u.,4-@~vi|¼,NaHt(LnI4v% ׸1H"MP 7fEڋA=\sFh/ѷ*CkZDz: GZs{k}i-z2n ,nxi-9!d %Ђ\.3Nmlj!%fN;oHp:mI*vAkN^;Lx;7\ +Lp`6EXޔ 7c^଑Lɠp0=w3m'q~TnFS^G n؂h)B1pZc?d[exmgg^Jxx Cq3YJ||V*"yjXnp_'(7v@.,3hikohm?FĔ̠ܛp\c9Lyf)'2z3O;oD~3ԟxZl Ť6-D \=8Enf*fMrE!:c۪u|^pcb#P,FdşE0 -KXt<ӮpHt (Db#*ጧdw߱FfUt6S?7g﫳f8utWc(|-p.H s gh>12}݁kw%8١It\rj 8z;Uo&PSZWܩ`pՉ? 8+zKa=a4d ȧexqBs|COV7BoٔI5…S Ϝc!3b/܌eig2*aϕV{i4&**+|K 5/o#'cP'cG|MNeb@UesEl{ޜ Qj`q~î~UQEJ+]j`|yFHs32 Hyn`eYe<!c7|#oL&O`D%$DG8zC(ΔNKnk`!tZVd 5?? {"/|,J2ۄV!IFRA#}άO*{MԀA,A;;{OТ[j= $ngycmVOTZ! 'XM7ANQcr,CD j]95#f]'6Sv(22'TsrF,8zJ:2wnDrz\Vx{S*J Jd$#.Ds7_e p3U 㪒9c<ȌMAku>.^WGߓxCՖR 3`b }}# }#fdé-BA=a^ )6ɺ>stream xmWwTSٺ?1$Pg$:pXGqƆmDD EH$@ zJ}:6z9:͹}x;q{߷+LX,oY/$=/1^&{,O+ǚO=ĢdrxIL$>5#JG,GE |əyK'/^|(-u~Ro_QlZbT}arLh-2QLrlJ\@j|`Z(z[{e5.XVb{*]ۆmX ƾ>ak~c,ۍm- c1Wl!6ۈ06` sa?b͛1{'fzķ㷈uoΘ5#aҙ|gMms:uk՜sɚsfs"+!pjOFDIHTEezYmRbnl%*JLy=UܜGq&{mRu΢>^vTd t¥t#ޖoJ>M%>›5fE\5*|P*Ī4 S- R32Rt$\?q{FVR˭>3?ةgY'z4*+h-W b4|BxH:t1֘SHpU+BxXYynSDbv#\W bfܫMqXMȓ o 1,ɬ~sua!xv Z- I WɏT(^LQ\-zP8N'MYT sYa31wUr/=?/U4GSiZj~`#u\F EGn!Z=_oќ/oiOJOedb-3)ja+ʘ`_$Z|SgB#B+<$\ݥgb#)ҞCVy_Is>B֎tl&3#Y++18cw;O::ۇC x!.U8 [io)Өl9[`˷Ԫca7AOCosڍ_ę~L\'W(:jE{c}JsYJVj>;hnJ'.}7@m7Df&b/B`ޠ 9;*p#.u|A8q&V ۽ lOYNEc&T^=yJWXZwif\{hF&G 8un$u@4;lI:͢#/2|A.m󙽺ͽmKwGP8)?pH-/]D؀~\(~Dg wd'AhoM+T%Y@48j#'H&E}Jx'aŸ/-VW&tխ[AKMɾ Hd YYeGb{Sޣ W l2Ф}_Ir9TAmgWTdG=o?jqhkPunj!٩{NuhP:0.25rY!Y" E쉺u>Z]w;yy\F7u<p stEE׃DSFiiIl 84\xHWFu $#!z )A}|iO+n(-0GVؠg[[k==BJZl~֑k3;ȏ92Kr`حB: Z/Лk:ި=t3g'fe,e@ s pتeQkaGp{ !RdȨ!uk10Ij#xW, mr S[bfotM;C4ej+&P(~З9h-w*zFVѼ WGIqe `2;u}/E@iEAó5:򠠸PHp׵8xSLOVhӀl*D}0H9+ & (Xˁ2Jh5ۜHeu#<T>5A"tNһuhq[ϐ1*pҋLj4 [9B$.13 çCemѩCMruY:<Јk|"PA*7NqP*sÿ瓠k- qvh>KUVCP38B}f=h眩\=9ۈX /3$a:{]idȲ9316:Tq94ϢMN%3v-ɲBƮص m6_3e` [-4iGE~Ag5fs`ރ棻m7vF!'B9Ħe!ᕥI Jv(K, ߕ| Q6١q*nWV>61rRXNo}Xn Gs`Qt:PRסTXP_i51D*|6$7ɍtd˯( >YJQ;xCY[/-bȐjifS#Ŕ7AYyU?~s02S$֯l$4r+-ŌP1CJGc}K+,AWʽѭmߡwY{NTنh?ڔi{EybSojmFCc]m}iQYIXX^dQ?" ݊܃"<-CdPu. פcL][rҳSTҜt 8\<ލf1 w04)ֳ N\.ELv|_ԅCdjjb>i8$Վ+ Κ ȼt,cssu O*khFC[!*/_C_W:ZAͼze|F+&?#JjIR0_%y_i4gϋc2\FO=vỼ$``Ÿ{=#;C'wdg?mkظr,w^2?8vk0>~B7h'D!*(-1zw1)ӵyE\Ek7]sGN}\ӻa og SXАZD,M7qpd<܇ȡzF} }EO.%ܽ5ֳGb.6s&0ÿF^ /RRFSqQ`*(l&HccC/*3! j ~a_L#?_Fs-"*4&kާѮ?Aفu4ۃ^DhM4%F Ć{hKuڦ6 1^o@~'I䶣MmGB]7r>PT͓nͬƗ^dD)bE4tYȓ)$ Vww]8ۋ@ F/$ED"=֮wSagl4wxrTT]ZD]2AMQ i닳*A\&ܧЏؔEb9_2##݇?yN1xe§.Ͻ8m?'ZJM]rCn/F+зEh(l!xuW-\&Y1F QWq*=n0GGǛ/u85*9Q/D:Gz,f׹UXXLJcw?~g*׆#}cBXܞTLN0.N(nz>i,U^v\܇_'-WZw߾@fRjQP-}әY̚at< endstream endobj 23 0 obj 4470 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000001034 00000 n 0000015018 00000 n 0000000966 00000 n 0000001388 00000 n 0000001240 00000 n 0000001082 00000 n 0000000806 00000 n 0000000015 00000 n 0000000787 00000 n 0000014648 00000 n 0000013489 00000 n 0000014268 00000 n 0000012989 00000 n 0000013988 00000 n 0000012555 00000 n 0000001156 00000 n 0000001186 00000 n 0000001535 00000 n 0000003537 00000 n 0000003558 00000 n 0000007957 00000 n 0000007978 00000 n 0000012534 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 15158 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_strerror.pdf0000644000175000017500000003333310265631023024547 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xSn@}+FClvVܔT6T9UDT.ү,RGUmgΜ9s ?L{6x0ׂ3Tȫ]XٟTuPs 2^h姤00U<[mmؘ7~R y?ѬpLdž?UpZN?̩Z`::ɣ:-~ '&Q#\1$4W!1> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeQkL[u* {cPlp[֙,f`8]RZnKJ[` 1P&e2 /cd>¾]9sBP[{2briH&-{')§_B闣Wyj2 _$EuLJJ*4DbeQ!*DA L Df- %$2OˊE2Ȗʤ*RK$f SSE\zT^Z]ErS BHJe"5 ' V(IuA$)D<9 h6u,OC@(5~;O_i*zx6[KK30KYܐ7UuN? ȬuxgԀFG2[{vN-<;3@Yob;_W2Z~jNO7s~3nhI1IL"¤ m/}5x_zXþ?xoMW޸tP6jOwWO ]P @4.@FEBBh<0):7!yI`t|pse_Lyuc`!?$29. G<EួsDgv^RcpPRjTUTTV@%PrgY2LZ-ohXgEoz?aEB'>-<CαNLBI%Lp_k·_.7;&؅v[؁͡J̫,1I,w,cv ?6ݛ;"r,&TJ^G[2\;7j*"tKNf^K߃]h:xT7n0kR% \l9|+062~t?<f+ed0u{gfW.LFh09Y*vꀅ'S=Së|o3+&Hg ZwF endstream endobj 19 0 obj 1047 endobj 20 0 obj <>stream xWiXS׺V,*9J:X:uSPq  a&!Ƅ] a$0(HiТuhϹ=|;gq箍sk]_D)H$ߢJݒ-ꄨ˅~\;M_ ξӳg&gQn"ҾUIFǤ/dEΊE?}MNONҔ jM2)U$:!!6/:!]SDE)*~;bb5uօ~//_b 9ۧNT$ PFŦ&E-zzRd:pVeжZ]̾v8%%K_[k)j y5\Vj.5 KgUi=]6fy7.g=w_mHA1‚衂\`)BX؄X2^߆f~.b*'3LTyn=:Bs`ԃ99Ynrq*ErvbW|;umҔoH#'S{~f͑wsE,f}q߷!v~?w27+D%g7Z`6֡X>An 7 >6 b\oZrP;fPPqC>y/4;,ǀy⁸&{o&_+`T?} "x1ocJ+-:T7Ẋm'eK%xNFs xxw#/i pQTS,̈́O봌^| c>%͔؃@\+nQ6v%5n :k| 1 :Q^TOձMgRez dZ/@ :@{כZz>dt[0!~됗d25gc'*fcMzW0⬸O Ւm2w Z6_a4g"lt̓\p@!WF;ўޤwo_XS`ƅtt0-wI}hɀPVEj-+i>Zwt.>8G<"?TkuxMp-U"~>"$(t27T& f qgdf//#nM\989puL]v"ٵ.o` +ɚq$kZaP$ㅰe'8r?CBx f0@k´'L{ϟ` /IO8=.cܤ!^$z fL_ [aM'Ih֟N܎i-h-Z_+? 9 Ä@f낎^K&L lB\`niO/>D_5.*ZLd$*?VJzKPqY$|`^ͫAY>{dM[skg)R>`bNL|!ǂ N7[ 6/E@XM'WG'U27!v0PĀ,,LGEc,f ^>E0emd^kI%j_X"'5"OV8 {AguMAfTrSҔ>pacX[_LzvG^'$0/)*,2B[if% uq)s Xp'ZF%&n&U'^`lU5Ȍw5u"??'{K@=aJkuMaO<5*C*?Uv!9MNzA~otp  4n%QNenCGC2YO_û/r)jB[r-yOC DŠ'v?qQ[i1;> ~wVT|,9#` Dԯ^t]X5y_j465F6~.,$ ! &9R/7DL؈߸E3nh94.+l`;7j sjX|r.]{d7SؓQώ#v\TJ5}ΌO$JGuUւьAĂ/S2+43~siiO%ɺK .)EpMƫ߅0:fވY|K3e}Gq9_'t%ffhc+2`Ua^7V 4բY1y3vg OD`n0V)F?V7lhDc,o`ИrxoZV-`H]"gX w\n5]m\4.}^U· lmjTZӂBPL-0l$zmt}:79cwv K:RM*C[5q-h$Wt{:`>1)M>:[RRr~AE7RIo:9®=;ii,l0Zdy%uZzk[}D OL x!uZ  eqeN71pܹ&C+d?+j*@(Ę%+oL 2 ף&T_fF Mjт|xA>0VE;]a}qOX-3>--j$Ԗ LZgR&)”!DÞ&]ddT y.3 ~S&^A{\ Jy7?=m$*B:^- rPQz/GE>cXҍQUFJojDxK&])7<#z^eeCk };q)¾K竃aH6+xBxIA7᜶2;)7[k,$ۮkR zi*?WD_.naV^XUΨmLڔREAVXHɪ 6ɠONJe-l[8O2ԭnLuugU \},+gL-˜ےU_RcIMEUfﮬKNb;mNC[ЊfRP(`Řb܆ٰ+BV];AyF0dam UI#J Tt"V_.Ns~;\ygZ8!*'b=*Da1 6 "vpM}D=Y}8")䀽11ތt8.prMZsTWۖ_?Utmu)*V9Dk:SzjB?ɳ_=b&8N!or|-bxo U.. Nf#̡厗G6:s0;mON~Y_;? ? j +Xitsw:gP^ endstream endobj 21 0 obj 4037 endobj 22 0 obj <>stream xeWyXS׶?ǘs%&i{TjU@f BfIH A`3&@B0<:pmqh)ն{>{={/e^ko6-\8N8|%D'_$Bٶ W[ YI1]ֲ2R8&_ $k׭[lruuH(Q-f~drHC쎋FǥcHY@D(VO'e) 7;;orbw%KD B4J,' #QtP)9𐈓҅[>$HNTxH*" akݤ'*drQTBtbo8?5.Brbڏ;mw޴y愽< X(v`Q}mOlb0wc+0s0{l)[9`\l9) N}Je {Kٿpr8i DZ.zœoqɢ%.]r~s;Z;7;_9:"{kZ?\9}"URn-!'%uf$^R!ƼseE+ ߩgEA^hufFh/ XTs,\g⁊d4jXNA@\`W~?Ӭ*]-e* FtT T4vFM<V6EZL8OtKnaq '0$]Ghv+~fE PD_@:{=_}cD J:k6\}B.vOO6@@U{vO;`[h!~e}Dߡ $vZ%Jp0%02%%P|!ʠ ($u9%?$Ui.z.J*V4Hz ؕ&Fl**XP+x*8+ρZ"rbv r Al%mG0׶Л[a,XDП!>Z|5t/ph@-Co#gDF5dwX^]˷W30uRpHή7PEK 2 r&Dɉ En .Վu /:]V)\ <FYڥ Xs@ev G HYRl<\KA?σ -ڶ]鏢_d_G'5nH\=w>{Y$9\߿.xrz3o[քIOX] Ec'ɽmx*Ć1\OU<QfJ5t3-$犵R+WśՀl47> ćgG ]cF9`&֕f ZIx=WYz%UYTV`䙲p*"@Nɘ,"\&a21<\ZW*f@6Z[:Sj$ GxH/g;oTs .OюT."D!(/ 7;{7zJ眒SA*H1e\(?2q&}\?6VRǀ„2Pj;e"`3痂^0`ioltqКӠ n~%թ{?:>#{Oyh\%9u{I!Ę@$yTv8K).A0'%dI- -I RT47Nr8aK;6+8sMZLLrT*<9.Sخ!w>AUĹJ%#Q \f0ۅ(P{J_pheAF#6Gk "9>- 9z=?ѣ]FN#p!`J,,& ̚.g2xJkHL'ʐC(K>UT<50=i}ܞ]e?qlLGL)D\@O70I1 0@}a@ZP=m i(Xy<@U:$ p4IRF:2X_ xPRV5_kJjWiuEr* L(W1s&*w.,_O@HOZ\z| s_)*3G $]Y $DN1CSNn!I u%A^YR!m8>."ϓSUS+φO֤ .&>mq9Y)*YV cd]Âb\vg[=LCoۗeehӃMeTjQy41B*+@? Ph,74 Wwl} C7=ں"B(umÝ5\#whF_fgM2 _()T׀~!c=?FYÙlZWߤ?(#U`>A}^ 혂;f t&t/`3>I=8;zoݯ\򨟷̞8_ؑԻ9eOお` xO"?$D$^8w=߳h߹=h}!lh%ڼe8/buF9Ay :DwGЂC[/[j-2P{Knv}N}Hs8GК/k_pPs-{ usd\#c?IL6 JB i,gʢ|7̿tO\$I$7imo8-mOj|>7&UMsMxKh~ic.D(b|"Nhho+E$#a3|S#!Qp۶0ff%3,x8UP]\Ⱥ2ev8RFPj!vds$?̰h|RD><́;ߟ?y2_`(~Xq+@N_q؆hag+m^kѽϡ Hn~}+~&O54F%5 !*%f8ԓ1`p\֧­$^\pEl4_"W'v?yF½ Dܟhc* u깽k{0)y"Tㆬ[0xiz{WHZ:rFqɒokaؿ$G endstream endobj 23 0 obj 4074 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000000981 00000 n 0000013344 00000 n 0000000913 00000 n 0000001335 00000 n 0000001187 00000 n 0000001029 00000 n 0000000753 00000 n 0000000015 00000 n 0000000734 00000 n 0000012981 00000 n 0000011875 00000 n 0000012598 00000 n 0000011377 00000 n 0000012370 00000 n 0000010961 00000 n 0000001103 00000 n 0000001133 00000 n 0000001482 00000 n 0000002615 00000 n 0000002636 00000 n 0000006759 00000 n 0000006780 00000 n 0000010940 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 13484 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_cleanup.pdf0000644000175000017500000003676410265631023024136 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xUn6}W ЇHE%;ZHw"lmE Eje/b!5Ù3gΌ^\ý:/λE _̚[_s42fk? dI3ȷcICΣ[vmYsYBv'7x򠮞y,Kݏh+jpK?$ q7ޕCGOWr܏3/2$g8P0\A1"c%9D<# $9?-oG~!C%˺[ g~>`^l~@qF搒6*SZf!5;J5O{*[B2ٶ+.ŏiOg$abta1?<hݛ }qF~-f3[kqζJLmVܵ:óa0&[rJqpO7o!q; ' SʁY;\o,endstream endobj 9 0 obj 950 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeU{PSW!E%ms[U>nUQB(EJRܼȋCIx?QAyU[[e} >vmwf;8י݋;;Ǟ3s9~2+ a0 3meX*T~[%s% 0}!_o ^c ``tG ;HUE*V\+bcc9JH_FOBI\*6ik }-_$ |A^0oX@",'%bH_~ubiNZ$bBQD'7@dV'T( Tbt $ IFH"rICv#$IBv s8]d6E#B- {,dRK¯YY!D)/ ~7\ʩO+{@p;JrJMb1Wk^3@ubE:\c`DI8v*Z*\_4 7F%?;c-c\e X\"{Fe$ N4$@( sy{̆9c|-n\@e gu-y{%S-}e;ݬ.Z;(vXIO^}1:PYka`Gp10.=ZC/ģQ2X*2W,寱΁g䷚NG6`A~Cs[(:t72j욾J{&M S& $ERkՉnðGs7:,ﵣ/>e7d>jJ-6R)TL@̙N=Pep11t5@R>ֈmg:ћx 3ȧ]O&28)<6oWvcaL4xRX*fāk%k8OhWI4"/jsAY8 M\n -V*AvNvuiBE*^~ Q8FshzZ'&B8҄5iQqwhz;.%ԆzVe}'˂ak K_>>WpmhO(c/[z;2pj 5^tBƗ80= zDZx4Mr'˯?dgB韘8@-k1㧆)Ќ$~i<[o(t/h"28EԒ7U4Sߌ=tXFp,5f$=F{۞Ҵ]$/qͬn\q L:XhQXmv`.,')V<µH𶡞񌾬}8^Y3L > ̚+ƥ{L,f-5tR @i=~_<uG{{#h去 ZVvF%ͯ/||&/r%*iaC*hɥu`}"v?)!l@Cn+8Q@-·R56UY5Yǁ/O5l6q]U BJg@O&Z`-*:=>aOv7>9wPq,f ֺwrO WoQhK\ pe',,(P=%x$`G;lVc{/8 8S]vWd헅VS{;O\ul!@jL- ?L申Q Rs+b /} |5=@ICdhYs L+놫I}ߑGGMMwb=R3Z0˜9#o()D:w74Pvh/?]aY~j]({uOUdPr PUKe!ܧhnPϪo_i9=y ;]]' L.fM؜ :{O*#t t2vߘ4;'scI`ZטXF#KdB>stream xWyXSWڿsU,*JVűu{[. * aM AHXAtZcmK;3;vlNm罙<߹v:_Krs=缿7"j4J$n{,T?MݺRh D|4q/=3qG\/5ܳ45mN&|`e˞U7nGg#ߡԫSMR&+SҞo'jU<^Mˣbck$.Zj2ۗʟ]r3l*9:]/?IJk6ɃAQԲ}/fibo*٩'LSJݝ:˗?6R31j?ZNP;SjZDSPj7zCSkSa:*FfRޔMMRsqJF͠&h0(Bt}lZŴ^;Ƨϟ(w1f#ceÖ;s^]Ӭ%}}B}}j f>U>ȥP.ߟ`< .NdP'$E܌`cӰW3Nsӗլ CǼWz*ad3o+`uDߡ}ځ\%< +} rBaa)5>ŸFG*0vJàyM<؆n|"..KV/9, |'C|C*P/71aǩɫ2yq\W:EU^kRx/y!٦@,Qzmš,S!-Üú@\ו^YJ <=8KZ Q 2&袱ó dU!\Wij`[I]bJw*؋?Kl(@@U_O} k-m }jLX}ddudR" .f5MbF2:'濠ѥwےt ŗ2q3Ýf;Inx\HP1ŔXAѾɔso,\i0kl8S9,HºhyZ&7l6S^Jn8C7_x9Ѱ/!;nG9`KIv; pO?S .,8^HWeu2':F e@o+$>ZZPdohlGs?hB&t ބW/\1uf$E)23OKo`?KL<]ş,9_<;2[*uj"FmujRSy!ض?v?a%+ "8D@ .!Had"ӮȐ < 3 "m`a/<t.bm Y 7hPS$@4\-:Zq[ XIƳ7_K':ܼ GO& 62gK̖_3. 9&TO_(-DTWZx` ¤( NÄP j]=]!4ʒf{r.iArmw?2G!ǡꖪ2G}Zpo 9I,Uі|LL< lkcIg8W?9'5ٹ_cne|9 ;B'p7R`- =HQL)t2 S3dw"݉##}aU kF7O^wDP k8HNfR H5Wsl'j pw>>(U3:QET;zMqYm5Md  s𽣸 /P _=?yci_-žG )zW[^%jQI?V虉Fd&11ìAlt5!z\a]PYaN&.K9k"!JN38ټV?<.fM}NfN*Z7CB<]'/jO XI|CG3s2?-c3dy#&UD17K9$ʼn,.܎Em5׺*+Q]E]bl-:iXFz%7^\a5xosJ횠ʤS݀ ދ¯@dPM{Kscz c/j#Ǥo#eBoXN]|-A=_fDq9.ˠ*mhHub,"6RR׸%)d|u# `#[sCξ&MVP_Faݶ˝`6{3HM<~҆#Ƌhϱ8ULz> ]>/٣yt%-E( e" DF:Z+-W3Qd-tu_ F3Z]1x{=_9 a.ŹtW#4wf!B?F@ |g_{HpkS0_tĉ78NſyX>BĿyJ"NE^͝ gnb쨐l*' *k8To/56J'E_7ML$v*Ï$v v^Ϙxrɭkx ş6rY4E1\5V(7Zzv|˅1߇3Ό䫹<@C[g[$ v>av=nY E7j endstream endobj 21 0 obj 3986 endobj 22 0 obj <>stream xWiXS׺-i$:=" 2 *L20$L$yIAq֪yEn'=gm]7OZ[{߻i| ĉYC8F_πϠޘF-_~/601P_C?A^ LQrJw.]?׈001K,.?rӥ2q${0NO&Rq eqi-tL&pj08G)]&IDQv0N !NL=Ţ|j_W9Y— ahbrNz\!biviB,10isfrVJ('ܴ8q|˖]jD4$V;{DxJ,"vaħD8W"XC,!" "N|L1`bK&9F5‡`$:1XN2c4ô߼nL\ìfeW"7f>WޟU1{f?^;׻ɜs s_U52{S%95dPR*CWz ˌ%bta 68#&Iǫ@[qJXt׬w;v%C%*bUF\Ф[ Hfed_;:-@+e[Nj 8UGɱm5VF rCbRR BY ItmOt"AjnϤ'$?ƞݴ7]m+0EڰNMhE|91B!!?s~6&TI >ytmtT^r`wt+`:zj@zk6tb ׋P9SӨ?,">T9 t1Θ2IGY19Tr?#^q 7I-bj`atԪFw2S9||zE<⣹=_ K4s֍ I-rғ<tuhDy^'->ɬecsPdQ)x 9Pо GVs4XA37F6l1 6?/S'_C41߾{$m΃e(-rmew( 8dSJΤ7Y#С? 7󔻸^рBz(|Lɹle5S]nՐZ۵|uMnByI47CD.?g50TaKS?3 8S%EУ._[$Uu lwgN]dV b]h:$=\% xdpZGǑO$[njZ->4 )*qJuźwZۨ(qjlj}fl`Ԫ;E⚌fYoɷ-vzv~iv?xUM 6u`*Ȓ I}<a.6J%*B/W"kNwŝng/.9+&,UNz5TVS UP_RiR~ؔC xb=YV*Ҙ3kQ΃5Q+9V kVUnc Gmt] D$'O%Jt$M'/+#rÃ8A~kL/*dLTxp?}7l'(ral7Wyp[uAxrT*9f:AIYHfG y9]ZmNZHT FzA\O@'cGׇ$d&uxf&|>$*#$NcTD9JͳӞt=+&P7^h8E8LG͓xTR^w+_ڦ] |\E Z( ~Ksяef^ak`v3QΕ  >-jsmivXOR98QX§r,| YVOc:Yցhu#(fk̹=6p ^Oc͑=à-lB,X$N>E(1M|IemZR vUfѣI$B@Fc(^J~N"'m:Ul$%r+#C]Gat[D.cû;oɈNIuϭADݼ͠1S,Nzq~Cb=yR^|MsE92/%+[[a9Q&M O8@q1l Tv֌^#Hfvvvvg=~myrƧJvcWj{hy< q]4 H3zbOd'H}3Ţ$EK28G#NYOR"IKe Ѥ:cӟ2U`TLxjBe$÷N'H'k»6}?EI2)T]h= }}2ta9i"e"{k8+֮[Qs43nLSoeBל ]RH. n6dy֖$Aa\ܔn;fymd6:pzWξ;V˔9;÷^䕣ALX,UnPd :#H:e˳bۇcrNq]d]ޅ/u\yk"QX#kWfz0k6A'8: endstream endobj 23 0 obj 4324 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001282 00000 n 0000015141 00000 n 0000001214 00000 n 0000001636 00000 n 0000001488 00000 n 0000001330 00000 n 0000001054 00000 n 0000000015 00000 n 0000001035 00000 n 0000014769 00000 n 0000013485 00000 n 0000014393 00000 n 0000012989 00000 n 0000014110 00000 n 0000012543 00000 n 0000001404 00000 n 0000001434 00000 n 0000001783 00000 n 0000003998 00000 n 0000004019 00000 n 0000008091 00000 n 0000008112 00000 n 0000012522 00000 n 0000014011 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15281 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_info_read.html0000644000175000017500000000625710265631023025013 0ustar danieldaniel curl_multi_info_read man page

NAME

curl_multi_info_read - read multi stack informationals

SYNOPSIS

#include <curl/curl.h>

CURLMsg *curl_multi_info_read( CURLM *multi_handle,   int *msgs_in_queue);

DESCRIPTION

Ask the multi handle if there are any messages/informationals from the individual transfers. Messages may include informationals such as an error code from the transfer or just the fact that a transfer is completed. More details on these should be written down as well.

Repeated calls to this function will return a new struct each time, until a NULL is returned as a signal that there is no more to get at this point. The integer pointed to with msgs_in_queue will contain the number of remaining messages after this function was called.

The data the returned pointer points to will not survive calling curl_multi_cleanup(3) or curl_multi_remove_handle(3).

The 'CURLMsg' struct is very simple and only contain very basic information. If more involved information is wanted, the particular "easy handle" in present in that struct and can thus be used in subsequent regular curl_easy_getinfo(3) calls (or similar):

 struct CURLMsg {   CURLMSG msg; /* what this message means */   CURL *easy_handle; /* the handle it concerns */   union {   void *whatever; /* message-specific data */   CURLcode result; /* return code for transfer */   } data;  };

RETURN VALUE

A pointer to a filled-in struct, or NULL if it failed or ran out of structs. It also writes the number of messages left in the queue (after this read) in the integer the second argument points to.

SEE ALSO

curl_multi_cleanup (3) curl_multi_init (3) curl_multi_perform (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_escape.html0000644000175000017500000000366510265631023023113 0ustar danieldaniel curl_escape man page

NAME

curl_escape - URL encodes the given string

SYNOPSIS

#include <curl/curl.h>

char *curl_escape( char * url , int length );

DESCRIPTION

This function will convert the given input string to an URL encoded string and return that as a new allocated string. All input characters that are not a-z, A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a two-digit hexadecimal number).

If the 'length' argument is set to 0, curl_escape() will use strlen() on the input 'url' string to find out the size.

You must curl_free() the returned string when you're done with it.

RETURN VALUE

A pointer to a zero terminated string or NULL if it failed.

SEE ALSO

curl_unescape(3) curl_free(3) RFC 2396

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_slist_append.html0000644000175000017500000000455610265631023024340 0ustar danieldaniel curl_slist_append man page

NAME

curl_slist_append - add a string to an slist

SYNOPSIS

#include <curl/curl.h>

struct curl_slist *curl_slist_append(struct curl_slist * list, const char * string );

DESCRIPTION

curl_slist_append() appends a specified string to a linked list of strings. The existing list should be passed as the first argument while the new list is returned from this function. The specified string has been appended when this function returns. curl_slist_append() copies the string.

The list should be freed again (after usage) with curl_slist_free_all(3).

RETURN VALUE

A null pointer is returned if anything went wrong, otherwise the new list pointer is returned.

EXAMPLE

 CURL handle;  curl_slist *slist=NULL;

 slist = curl_slist_append(slist, "pragma:");  curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);

 curl_easy_perform(handle);

 curl_slist_free_all(slist); /* free the list again */

SEE ALSO

curl_slist_free_all (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_mprintf.html0000644000175000017500000001147710265631023023332 0ustar danieldaniel curl_printf man page

NAME

curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf, curl_mvsprintf - formatted output conversion

SYNOPSIS

#include <curl/mprintf.h>

int curl_mprintf(const char * format , ...); int curl_mfprintf(FILE * fd , const char * format , ...); int curl_msprintf(char * buffer , const char * format , ...); int curl_msnprintf(char * buffer , size_t maxlength , const char * format , ...); int curl_mvprintf(const char * format , va_list args ); int curl_mvfprintf(FILE * fd , const char * format , va_list args ); int curl_mvsprintf(char * buffer , const char * format , va_list args ); int curl_mvsnprintf(char * buffer , size_t maxlength , const char * format , va_list args ); char *curl_maprintf(const char * format , ...); char *curl_mvaprintf(const char * format , va_list args );

DESCRIPTION

These are all functions that produces output according to a format string and given arguments. These are mostly clones of the well-known C-style functions and there will be no detailed explanation of all available formatting rules and usage here.

See this table for notable exceptions.

curl_mprintf() Normal printf() clone.

curl_mfprintf() Normal fprintf() clone.

curl_msprintf() Normal sprintf() clone.

curl_msnprintf() snprintf() clone. Many systems don't have this. It is just like sprintf but with an extra argument after the buffer that specifies the length of the target buffer.

curl_mvprintf() Normal vprintf() clone.

curl_mvfprintf() Normal vfprintf() clone.

curl_mvsprintf() Normal vsprintf() clone.

curl_mvsnprintf() vsnprintf() clone. Many systems don't have this. It is just like vsprintf but with an extra argument after the buffer that specifies the length of the target buffer.

curl_maprintf() Like printf() but returns the output string as a malloc()ed string. The returned string must be free()ed by the receiver.

curl_mvaprintf() Like curl_maprintf() but takes a va_list pointer argument instead of a variable amount of arguments.

To easily use all these cloned functions instead of the normal ones, #define _MPRINTF_REPLACE before you include the <curl/mprintf.h> file. Then all the normal names like printf, fprintf, sprintf etc will use the curl-functions instead.

AVAILABILITY

These function will be removed from the public libcurl API in a near future. They will instead be made "available" by source code access only, and then as curlx_-prefixed functions. See lib/README.curlx for further details.

RETURN VALUE

The curl_maprintf and curl_mvaprintf functions return a pointer to a newly allocated string, or NULL it it failed.

All other functions return the number of character they actually outputed.

SEE ALSO

printf (3) sprintf (3) fprintf (3) vprintf (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_strerror.pdf0000644000175000017500000003352710265631023024363 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xTn@}+FC!*݅VܔTڛJSEHBe (.Pwr3~JP Ia<k>IdL[OasC!`'|2fջ,n꺪Lʂ]~, jeXbؔp$ \ja5fJyY0ĥf\Pr$PgmW'yyi$u~^Jxl@w|__lN7|ɮK30rQū!ªlZH@j!ah|U\ ۊQ@lubaVce@~fT.B§~6' yz:`ebJ> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeQkL[u* {cPlp[֙,f`8]RZnKJ[` 1P&e2 /cd>¾]9sBP[{2briH&-{')§_B闣Wyj2 _$EuLJJ*4DbeQ!*DA L Df- %$2OˊE2Ȗʤ*RK$f SSE\zT^Z]ErS BHJe"5 ' V(IuA$)D<9 h6u,OC@(5~;O_i*zx6[KK30KYܐ7UuN? ȬuxgԀFG2[{vN-<;3@Yob;_W2Z~jNO7s~3nhI1IL"¤ m/}5x_zXþ?xoMW޸tP6jOwWO ]P @4.@FEBBh<0):7!yI`t|pse_Lyuc`!?$29. G<EួsDgv^RcpPRjTUTTV@%PrgY2LZ-ohXgEoz?aEB'>-<CαNLBI%Lp_k·_.7;&؅v[؁͡J̫,1I,w,cv ?6ݛ;"r,&TJ^G[2\;7j*"tKNf^K߃]h:xT7n0kR% \l9|+062~t?<f+ed0u{gfW.LFh09Y*vꀅ'S=Së|o3+&Hg ZwF endstream endobj 19 0 obj 1047 endobj 20 0 obj <>stream xWiXS׺V,*9J:X:uSPq  a&!Ƅ] a$0(HiТuhϹ=|;gq箍sk]_D)H$ߢJݒ-ꄨ˅~\;M_ ξӳg&gQn"ҾUIFǤ/dEΊE?}MNONҔ jM2)U$:!!6/:!]SDE)*~;bb5uօ~//_b 9ۧNT$ PFŦ&E-zzRd:pVeжZ]̾v8%%K_[k)j y5\Vj.5 KgUi=]6fy7.g=w_mHA1‚衂\`)BX؄X2^߆f~.b*'3LTyn=:Bs`ԃ99Ynrq*ErvbW|;umҔoH#'S{~f͑wsE,f}q߷!v~?w27+D%g7Z`6֡X>An 7 >6 b\oZrP;fPPqC>y/4;,ǀy⁸&{o&_+`T?} "x1ocJ+-:T7Ẋm'eK%xNFs xxw#/i pQTS,̈́O봌^| c>%͔؃@\+nQ6v%5n :k| 1 :Q^TOձMgRez dZ/@ :@{כZz>dt[0!~됗d25gc'*fcMzW0⬸O Ւm2w Z6_a4g"lt̓\p@!WF;ўޤwo_XS`ƅtt0-wI}hɀPVEj-+i>Zwt.>8G<"?TkuxMp-U"~>"$(t27T& f qgdf//#nM\989puL]v"ٵ.o` +ɚq$kZaP$ㅰe'8r?CBx f0@k´'L{ϟ` /IO8=.cܤ!^$z fL_ [aM'Ih֟N܎i-h-Z_+? 9 Ä@f낎^K&L lB\`niO/>D_5.*ZLd$*?VJzKPqY$|`^ͫAY>{dM[skg)R>`bNL|!ǂ N7[ 6/E@XM'WG'U27!v0PĀ,,LGEc,f ^>E0emd^kI%j_X"'5"OV8 {AguMAfTrSҔ>pacX[_LzvG^'$0/)*,2B[if% uq)s Xp'ZF%&n&U'^`lU5Ȍw5u"??'{K@=aJkuMaO<5*C*?Uv!9MNzA~otp  4n%QNenCGC2YO_û/r)jB[r-yOC DŠ'v?qQ[i1;> ~wVT|,9#` Dԯ^t]X5y_j465F6~.,$ ! &9R/7DL؈߸E3nh94.+l`;7j sjX|r.]{d7SؓQώ#v\TJ5}ΌO$JGuUւьAĂ/S2+43~siiO%ɺK .)EpMƫ߅0:fވY|K3e}Gq9_'t%ffhc+2`Ua^7V 4բY1y3vg OD`n0V)F?V7lhDc,o`ИrxoZV-`H]"gX w\n5]m\4.}^U· lmjTZӂBPL-0l$zmt}:79cwv K:RM*C[5q-h$Wt{:`>1)M>:[RRr~AE7RIo:9®=;ii,l0Zdy%uZzk[}D OL x!uZ  eqeN71pܹ&C+d?+j*@(Ę%+oL 2 ף&T_fF Mjт|xA>0VE;]a}qOX-3>--j$Ԗ LZgR&)”!DÞ&]ddT y.3 ~S&^A{\ Jy7?=m$*B:^- rPQz/GE>cXҍQUFJojDxK&])7<#z^eeCk };q)¾K竃aH6+xBxIA7᜶2;)7[k,$ۮkR zi*?WD_.naV^XUΨmLڔREAVXHɪ 6ɠONJe-l[8O2ԭnLuugU \},+gL-˜ےU_RcIMEUfﮬKNb;mNC[ЊfRP(`Řb܆ٰ+BV];AyF0dam UI#J Tt"V_.Ns~;\ygZ8!*'b=*Da1 6 "vpM}D=Y}8")䀽11ތt8.prMZsTWۖ_?Utmu)*V9Dk:SzjB?ɳ_=b&8N!or|-bxo U.. Nf#̡厗G6:s0;mON~Y_;? ? j +Xitsw:gP^ endstream endobj 21 0 obj 4037 endobj 22 0 obj <>stream xeWyXS׶?1&h+lt:TjA D$$0m $"õuơ޶VZz}6މ{|Η/gZ~Y wN%ԕ2It녀ZĠޞEH:魬TyPÑ71&?\"N > >t___A`1#C$KҴM?zuR !I% bq.$a`8I,2-^~$ؗ.VxTH%„$&Nr/'Ħ ^*' I1) aeq~ra|JB(8MHĮ_`㊕׬]"? `Xۅvc!ا:, 6`c^lHl.c`Ƕa 0UfnGݳXRf 2LV~f%88It0Ĺmo~2`u7_n"*vnw׹ܿh)woS 9r6A4Zn]YNUR‰z}] 8h5;r %NGtߵ-.d_6yȵ;!O|:{gݧWkOS>$5s 3XlSFfdYSYa= |OސU7 Od߆>%T?n 8Xw?l2 s8~xq[sI'\0KΎ*Wl3YݼoH2?9:'p ;Y~;p_< -莿 _x8ɴP^d|dAѸ'63:]f\$`:94RVkUk+Mv@49jZ214HO4tלv^?zޖ~ &ZZru$  KS^!/M"qRRrKu S ɏ{=~Q8kYVRA]WORh{a'-]0r2x]'K5nX [{;Ւj^v#cn54dSkt A 95+xȃo삂lcaaX_Jpj%ɋ6<]EM*HF'I%/Dv""o;n()*h4L-y&n\=ڵj =:|]'/:ϸ7 ѐY_5;G8e |M(_1z &uY)93V&^Rd$ C'928?N)3KЬvXXynjlv0Kn#8>+qΠ6%AN34YH&R%`~f,=E=#9֓p+#2b#"a:hɸMGof1/fϘm6!G2Fs:~.2#EmHxMu>:ק/h~.^i+nϠ44un R&5565J.D5*;p$/*ue$ _ V;o3e@IY@%v9gcXWiG TX>xIX]o*kUD:Ȁ)&LcL>>}\-=!4,m[X3W&nF' RD?ds i&) lTsT583 3%=Iۀ?l:}.½O,Elp d &\Qha]J m05ИR5(s#LS\Pi(ZuEYFQ P6kw jo,"&jh[fz=DSZ@iyIzY;h._'i&YƮ,SBKϙdju4 <$|IP?yŇBNksl~ 9ϩ}#ڬ\ -ҌUs4MGhbX=20NT_PRXZhZhl8yEۇU{9GyB+>x:SWyj3Nn:~IYZYv D!~ .n;i3x6 ]_փvե3`!c+TZahM7>"́ij5C]ÀX+Z_E2\,)Ղ.ܸ+[“ByP dZ@-%ÕԸz:I WNBh9u\ʊJ'˳c3xwǟ@)8 oyɾH/lHO;bF=ylZߠ>caZ&LC*(nnin$2dуF=ch{spon*v4PgVQ붦ݕ[GO(I rIm+5{mRGؖ X߲n(?|5Zзvgms;BM9 *tz9f@Kjr PF3Y7P4[.yUp |.JM'6*{,EEe®3O ,Nw.xEJR'R:Ou$7K\1\Orl&?%͌\>dQNj ]hs90Ts~HFo.ZO&'ЂVт A|=,P OӾnoVZjJ*Q_Is25 0JP RgLJ!uf#Nr(X59| 2G-IpzDy{.V'&$rMr~G{gMBJ _"iv(Q:?ۣ$G׋N=ojNOU{n.?H^ٿiz%]QG:vhΛ]<7 o;f^ endstream endobj 23 0 obj 4186 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000000989 00000 n 0000013468 00000 n 0000000921 00000 n 0000001343 00000 n 0000001195 00000 n 0000001037 00000 n 0000000761 00000 n 0000000015 00000 n 0000000742 00000 n 0000013103 00000 n 0000011995 00000 n 0000012720 00000 n 0000011497 00000 n 0000012492 00000 n 0000011081 00000 n 0000001111 00000 n 0000001141 00000 n 0000001490 00000 n 0000002623 00000 n 0000002644 00000 n 0000006767 00000 n 0000006788 00000 n 0000011060 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 13608 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_init_mem.30000644000175000017500000000267010265631023024165 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" .TH curl_global_init_mem 3 "10 May 2004" "libcurl 7.12.0" "libcurl Manual" .SH NAME curl_global_init_mem - Global libcurl initialisation with memory callbacks .SH SYNOPSIS .B #include .nf .B "CURLcode curl_global_init_mem(long " flags, .B " curl_malloc_callback "m, .B " curl_free_callback "f, .B " curl_realloc_callback "r, .B " curl_strdup_callback "s, .B " curl_calloc_callback "c ");" .SH DESCRIPTION This function works exactly as \fIcurl_global_init(3)\fP with one addition: it allows the application to set callbacks to replace the otherwise used internal memory functions. This man page only adds documentation for the callbacks, see the \fIcurl_global_init(3)\fP man page for all the rest. When you use this function, all callback arguments must be set to valid function pointers. The prototypes for the given callbacks should match these: .IP "void *malloc_callback(size_t size);" To replace malloc() .IP "void free_callback(void *ptr);" To replace free() .IP "void *realloc_callback(void *ptr, size_t size);" To replace realloc() .IP "char *strdup_callback(const char *str);" To replace strdup() .IP "void *calloc_callback(size_t nmemb, size_t size);" To replace calloc() .SH "CAUTION" Manipulating these gives considerable powers to the application to severly screw things up for libcurl. Take care! .SH "SEE ALSO" .BR curl_global_init "(3), " .BR curl_global_cleanup "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-errors.pdf0000644000175000017500000007374710265631023023411 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXr}WL8MKQ%P:[RC62 +tEj<*Y$frNWRF\1YHWWW!Kj0q%2 (c "vU1U%|6q?I;Kr\\iL$@^H|a,Acpi8'羷ܥ \?Ddr)jn<_Mo^YUiyM6iI+YCsY7g$_R6$-3e C'RP'I@3\ɋoDD4"s5~iO=soZ[?88PewH??e匥rR:_[Y5dLK=(y 7RfbHRmY$bH]_CײgX܆)um~@DU$9$~pUwbV @3:0kjp;!RXH+h2y7yZNU´'D#KVHA_ۄS~f[tvx~}9}<$YtN+a)pߗaVtF5 ®g@ &`_n; tx:ibÐ03nԎP!y H>iXHR)-l-O WiIM <8LtgyxN@䥙JN}7#uxB#7"*A-?jj:G2NmM)uc&fzC\[ cϼ QhS40$ X'Rmx}{Z0}xT7fVN{j^# {'Jڎr8W%~;Xj}ɫ&/y6VA?v,*)joNG"TpB=QE3U,-p8路a_t!_C>AF0Iw2}~]BgI d^$0!qMڽ6ϧ&<[w@ř??_rIendstream endobj 9 0 obj 2392 endobj 19 0 obj <> stream xXnH}W4T`y.q lK @-;T7dyBL`v۩Sl32BXӿ %3+r$eķ4I1Q\Gu n^ eLrB!36=rλ}]2_M㏋8iZߋ8ߋو& |#SmI<`!ϥYM@:2bb#Wvd*c<[ ;ab-ٯxI5,a[eo(}칆Q/<͌HBLө |xeB= 5OajhP:,08` 8xz *~X-ǐ\5¡Z_Wi`.&h!_Ù9,Iz3ۦ%wѐu;dQ`UHOB-V+*}}-8E{ 5ȶ}K\R? 5]HɽT1#Yx@73[醃b΁L\wsD Hd|qungzڭs=|!N%Oځ8v2샪vWee!HPbD« ֱnjCu% ®A߅M 9EoldK`^u'\':-㒊F.sq48Ip.s 刁n<L 7O6":ҵv,fwa+ sIz[Zz.\ teUfgf_xρ$Zȥ>-49*˧ Eb78 jq J Q}a㕼i-CϚ+m 9hQݙ}{H=\_@CeשTlVH3yON6GqL"qALw i vj`EZbsh:V<ͲH7x`SwtQ//$rkF-? J3uۂ2"Y:.BʹldFKp+ 5~'Vj1Mݎhҿ:#Z@m'ə^aDZK W&{m[FKJުJ*D_n 5/ۊy^c]_' DJ. KDpJ@ {bY)N^+Z^m%;w3+Llz+QB>Gendstream endobj 20 0 obj 2300 endobj 23 0 obj <> stream xXrJ}Wt%*n.4/S9!r<%Dc4Fq<ߐ[BQk-,YX-cɝMɾܞ,p{LNm7a7${cmN7Ztqq3Wbz3Dp1#MvE,6F0frERdYX)}h́99|;ܢ<SWzxVV7)^r*7sM;x9K׬J,#FF\pIʩ N/|Ma1$Z열ܴ}gÏ\S~h{}n C'^8/jGZu]5M7MbiM[ o|E^EvvsÚe5pG֜Ets-j_ʴJGlK4w"<L>٬tFvŪpIbi}B( dq]8`^Tu+ yt}hJ_(,|̊qW^`i^2|'湔[ 16 /^ $ ;aфOK!ȲXnE``Ud2BSJ] ADgx6PK{in{ bv!gDsq^}m{U y&}naXI;(/DGgb\j-q{LWrN{\mӇM hYQ0KQ$!{VI'{֩ǎ#>D]muߣѪd (Ϝ\...2z({7bcP"{m<AV@#$vi*ټ/@ M9wQb̮O>SpO #l9;ChfG>ygTBz/Om" KQըub H}%U'ifaWFhi]FEJu~L:u= C|oO:"Hwd]+L6"yT`z_p|Ruo0LH%)X8@sJ4rF鿬n-x?8a͇o^B*_D\&iVG]q5l[Feϲ&=@ūebT?I7h4(,]0y"bR8f,A ΧI_P4\B;brWlUa1趈w8&:۝ԳD/gn]#}>ĴUd_ϻy|0<}ݞοúM~ޝ%x'\̖(}3h2}]hy1]pi/B(訃l݃i10Cz ˛$b2/Ɖ8@]mujݲ-j$?}PPvM[[ w ?P1ssQMģO RIC [GG s-ܾkV(R 8I4]z"Q4ܣkb5ucJV׽x>ڦ l1$^)Xsh'0Ac\wGɨJQ Pi,#T5lq:J Qȩ *'[=꧶xWveeKNw!AJ7ŗh 4ЗPOe]d5T5> stream xWr6}WO:JΧ,Q [Yr%:hh b@Ld<=8x$:eD;GZ+E4yDˈk7(0Ql}hYzlī[ͼ6O}G/!#m:&׫yY^ ȭf3KldH=}ZW "lht\g MF5ߒ$w ͞WI-'ilۦAДQkDTOl16^ɞ-jx^v(30Cz7 z fNuݰ(1`5*=HT,& -,-.>`Y:M_"Žp*σ7߻ TMfFeQ!WI At՗wq*bx(@Ur&.^#i0Bņ.:|+J#sj2Z"pϖ׋)fQ'7&ؼOfIV fQGn% W&\lBSܗ18C-P8īχɺI^̃KqW{ʻ2,wV&qF, ϙϾc BOCzKQ QtV)}K5u^#0D15 hKdtHFG mX&c$7$N@@}SW6^a]GO7" \r*U9o!u*lU\;F`כ^P1 |G_犯ˮD}S G-9GdmRfe6 }r̗|.i~ɷ H5Я [7{] 6v"XI(jpD[ R|hH?{}`Qv Pb'M )lMد4ed#ٖ(1P?R>*npc>SUA/)l@eAo.H(|5[ozHĨ{gYFl5* !`tjrFiOwqn y.c?#"xuYfWV|هJm,t݇7Q^b( vR!48ʃ]NiUyF 9H"lCq$kO hmgǶ n;@8dzj۩+AD~Ͽendstream endobj 28 0 obj 1659 endobj 31 0 obj <> stream xTN@}WLy~Kl-҆S *r 1rvЏ&IJ990x2i[J7p'3Ɣ%^m, rIA1c>/ƝY˴) ,-lxlp 13槛r1 sbH#"x O= >?\->'gb;\wcRUnM"_Ffcz9W3` A=RŝjD<\Լ\AbbV&IK΋kɵEIAk^dңt`iXTR)oFQ:@>ֹoRlςڍrwJ?3Bz/n{~8h\>VŊ)ק޽fmsQ@\'7q<4l8x*AgKp(GnHh(oz~F˧endstream endobj 32 0 obj 806 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 22 0 obj <> /Contents 23 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 30 0 obj <> /Contents 31 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R 22 0 R 26 0 R 30 0 R ] /Count 5 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 33 0 obj <> endobj 34 0 obj <>stream xuW tSU6yi $ɫ#RQAeWRZ@֖4]6M^fOnf풤Me)PPlV@dSQ@poӹsw3g<;wN{_?x bMزv1~HMZY"N]4' L y O%:;'̍fA˳DUVӹ4@ZU;5)a3fe̼)Mi( 7=xARZ)dcS6sbWd Kc.ʜ9q+swcsSbϏ]Y"J)}/ fY,K]$?miAE+Y +I\$Ν;k7͝&elE"XNL&6+9ĻD1HGD$+DxFl"^#-Zb 1XG!XD1XDh9)b6.?$>8k3 ȋ8'?̏fDZr< W<Tc.dS¼ )vPs#!GfROAS5ѫ<-I]j|Мj=Eo1@??cx}xb>Zъ]h~$wPŤ(^Cwi=DakXt7+/1>d+ ]Ӫ fQCfАb%lٽMGh 3T>~V5r GX~<6?ZȔG4{Ԩ@kfIm[L((l7t+| oE#0 CoW0Hw'[# 4~YCFZ;< i4D;v7`$czU%ARJom=0e'OȽ*1 @n,҉|hü5I$"DQ)%c G '`ǽ_rݛ8A+YLeK@3;jDZT2{t҃KڇP. |F~ahPU;ԚdKVQҋ]{ǯPOz|1f|w7Ij ZOeM'OP-CO:S$|`v@)PZ-|mԟH4Chw8L堘,HN/;2I/E/g[9Kmu#/K0?/'q?Fbtn,ekrhV TLuĠlv"4 ~}o(YM EycpϩcϷ^$/"%@)~Ō&43jgsM&s$SP-)>v'TF5)k SlνUr@h`Zl5X- 0㗁g^DK"\W6y%M& |~ovj>s|f<3q],x{sg; 8=u/}4šh6޼r Q|'Ee\*#+]Z).zu&od6u`ɔ( H`*4fJ 0h 5{x6Bv4e,*qڴ|}GnN;{:G>X(5e,u[L,7Jb$JحvpZ+ I8k O#!D ^9 jAgMʨ1 ]PW[ߛѺukZLandG ec{D)#yC (U܉ƌŗf?g`{AI&} |81a z^llmYj\*ޱP$KӮT<.xdvqTO'-j}AHOd Z#'hՅAE(6VVmGUtyu;,U`U_Y04~2P4\Z>Oc@%r *ܯꝕc`\r"Ȩ;՟Xp섓][; FG[6(  )t"?sM%JyJ 4:r]Mt$2̾^n_Suvϭ3mYPǛ&"Ys TҭSL] W\;lvU54Wlb5 =~SPzf[&6` ΀NXrcOebxz۳Tʲݢl@}8t"`a?{*@/8#0.m9A1\o1.%rڬҋu:vƙ,hY*q {kg ʢ*d*Ce!t ehD85HH?w:oL;gO]Wzx*(ZȮP[ȝrgx"lnTR V5*ʰ$ormt̒m儒[Y ܙ+Qt{Z(>þ㈓JMc-y<^IkX;P> Gy>)#>8@ޭv6಺mKćثکpisC>Sq;L1noN2)1W1: @U[p \N@/Kܺ%*WlpmzÂ18 (;/]R2)9¼Xz(%skG>?]M6v ]kDg2 &<ЛJ!?lmTʃu^ )}h# `ˁ_?p 7 .V|ϸepؔ?8qF,35bN=hd[86o+*Š|[MH 4| vއsm読frx-]Vk_^R++K_.˝7Ih"z=¯4YkD4dE}Y>gv j6{ FPnVl9?X4j|rRR<\.{#HYVg0G2]9&ޤПFLjs902Γm?\ 83'xrޠ抔Ft;G"lNg2i{B8l| ugQLJ &T\*o^ 1+ ey*n?Cgv0NjG[sh$# "]e4WF7,ĤW֢/7?2||+GCq!9\Ʊ(qwM(p\1ܐ-J3ӊ8h <͇5PX!O~u͈*mɘY*^GH k8=E-e\,ܚ{ Du#- L76JotZ'WD\x\} =yPК4v RRaG8q6@Vz 6 &X5t]Wm=|'.KU508+]f}&x n6~lުܔu1x3L<ςClŚHX-ŏܢBQ^SQkgsc{GasnTV70jz7a֯?D׷u6Exw<('QI>D:ieuފߍLTTa_:݀o8?]j߱MJEBܝI9_zn;깰(|\ EGz=&9ÜAnfބ qR3Кf3dkT@"zs9 j>W(-_ d$/޺]-u`.C}8{2RJ3wQ)yW$oPmi.'v%.2 qqTPy!UQZQ~@U!Vp\s!8hw$O-X6uausR^OiaDΣ>>lYbZxjQd$, AvØO7xy  endstream endobj 35 0 obj 5155 endobj 36 0 obj <>stream xeU{TSG!kT=RXUEъQD^H$AG, Au>ZUݮZwkjw;{9sooP>D"y?:a &QOjTgx8#~ EƟ:FDPXFQRhO'O򿑙Wl+9Qg*BHHrԹ+l&3M)e+RU*ʻl]FXEpG3f̜J2s+9|JEZYK⵪hؤ5׮RjHRөRj5IPT85AOH|ddF2̧[BWed_Ӆ+#A㦄`sH&#{5 `E 7ײUVֳ#kNVp:>N Aqq3s |B/vXPOaڸs,"0Ad:>k9> 飑M騐tRv!3H>xH{ dbk!FI ᷧ晷!v!GK&ۉJݛVЇS_[~n ''a0ᥞrbS!.u/=61X\[l,ۏbmiWGةc&o52l*z ZeYNYf؎Y1:SY7/V{R(̄P)Ԋ9<& 'B ߿9(&¼|ܾ ɫ  bچŋK%XE`.ȥ?cZNFYcSxg37w5T %㘭grJb < ={}8V^9*JvX EBĮW.zrr^^OrPt=DsI'(d Z k<'e?wvl=3\^bX|!sg rݓ` bݑUE+ܡ܋ i7F/V:zMb1 Ոv"Sma#Jܸ8ix+8Ҿ[Y")]X{$bR4[ )wUflJZBa8|3F=< 9nE| l;1zMqvzDvntǸ$ X{դ0iPH#(94؊a2VdsKc`&l{3h #o`^xQ\<ڢ7M&B0ކ0ʹV|YOߨl7Q@D'i:M^Zz4{]sdoTn,-9 Cw/\% _ `q -pq{֜n{s*zrNzNes)e= [ *Y"qgNJf_.GLܡ+7dU ?oxe"Cϰ]YduIdZZܠMUn_[q^] HIUfك46aZ,c!; [G73dq({"b+c%s]w;N{Lu=0ل,H-y_o /eJ{<նFQ'o8*HWYhQEKLy=Fgi@%D!'+//!ZSXO`mq8hB0kh%%of%+%]y  :Xgvas1:LۄGT/G,+{ N k8e\' [A#" ~L`Jh :t3=sgm`q7;=sD"QeD՗4(aވD\%VfڈbU )[{ J9]t+ QoydhC͓R`Л҇:5zѠÂnxGW7G+u>f) chinjtԞG>%lT4Yj0w\r.F=48vzbP\#Gsouj endstream endobj 37 0 obj 2165 endobj 38 0 obj <>stream xy XS1{Z45AM Zg** " 30$aZ HyFq:Zڢ<ڜŹϿ{<{ﵳaELBX,ގ="hqxbo8$~2f;ފ:Ω;ĉ9: ~`X=|E KJqY,wsss 눋{xrtd;8I8<>e|v\\8YBTKHXXx2ߐXmq 4[uYleZ=$.)20qHXcwqtJezO845eA]H\<\#SBAdGvoKlI5)k[r};Rc|vO %ذU}蒿7 \w[fV,X£O{ wXBIVb x"keۄ7XNC#v+XH'>&V.bq >$fb5>O! #/ !& b Op&^!6sWY!$M׈& ゘ Z))L9"g OQ,juDKNx埧nj3ze+YsgEjpb;ٸӸvev{zll_O?\qvu^|s͉;unwm4/~^aaP-#"EoEDƙ v17/gsf<\G\ܬ*1b ܲZv),J`R9RN̙9пy5k2jQwPsN .:#0W v*0\nYDC%}L@)Iro-%Ԅ y͐F͜LΜ Csd{EfFv!G/z P&U6@mCJ1RS"$u6qE$P"C.V&J2 ERP'÷Ί}K{(61>Ʈ`2@7*D(_6Q6ʯPQhx:q#q;E(*0P.#4QOo .|H d |GOmjfeހ^ HܭG]MYTZ"Ac~鑡"`v^Vu MVIkƧ؝5P<[)@G"C.y<jVґߜϷsRZNg$,+mU)BY 6[C|.\:qŹ,CGsk&OhI;[0E>߁_{P]I`gT; xpU>°vjs nь'r4B())eE 6Q-ՀS۩:,`0J_ {ay9a5őRcYɁ|Irq>|ntj>NAYo\)Ӗs} lu9é+F& eu)hn#`ZؑXYn'"7Áa&$!u9p:" 8PoPJyt̻A8Ud6%@C!r #X̬hf| ߲9C/[h@'Pg/&RIxcyshư4tg?_%tuqnf5=clL˃ Ns*(Y^.tlH|Beʣ $T*B˨#SK0ST k*Z,=IhW/+3rޙIO&>%Rt^$m:SDi|&i* `-m/(fP!NZ7lG)R]rN(P{4BvSNP~08{a4<vl-)ċTO5ۖY,i-5cAJ =J'PΥ{0,1(k teac2a'4eA&P%puw%Ny___.?eUw]>3-l߾p:H=&L;hV\)^KNw`\E)3Wo>jMDQp@4rYU|UJTgLop*|'ݧ ӢT>r|o#|Н F쀍[zw )oTy7 }Ge^&u״-I⮠G Mpnxnԏw/B_yev_AIJv_Uy}ڴ`%Ud&wmJG8dHIueM]qu0Ή?$]꡻C]b$lqWڇ梷PegD߄}/s %%ǧ :d]g2TmK?$OJI:$APUTہpgs Os1?j+HViuu ؖk:}J[L v_1\qXW Mzj*aEbuƽ}Eȼ[ 6k[kQnFMKp&&3ػ“zf8 ʼF5_j ~eOBˑ͋qJ)yGgւ-V i7_(GF|N3iSqeL&8GT2 EˆuÁpUKbu< 鏈M@' Ho2斁JTW*RH}hBT%K`ɕ77 @r9@rrffənrןY&ƙg54#Xwq6jQnhJl*.Җ +e mi!)FÜo۲@hLgze2J,RaZCfAr=2 e2Xs xCsSv՜~v2coH* Ia {5!{eV'et 0=P;,œdlW_?i+:sr0v^1b KkyGS{ Uwb ͽڸx8jwuf pQ{z,,S `&́ȉ@ {=?-$R* J2,uȅ^^/#{C%2r <\g,Ni!'a ZpG#Wn`Dz,URа#u0J2eЂ tTr# v_ w6S88Xn-g6 >-)tfss g2pÁA@N~1>Β[_?!T%ɵ@h*~W~Knqۥ>6R 2h5:Q;tfG1!x ))ImJsK]mKsJ]<ֻ3Nfw \t T6;RFfh4r89DX#Jba,`>8vІRUQHAWx3)$wEqj|{0g=^]/ 75Ŀ%?2{Fv bxL_AmgΆumReɓV1mvjc1-ts;$F^tk nsX䓼,2H]?G+䕜r-𧑚,R:,h{>D(9VQ ϻU45 8TaꮲSVn*9N ^3%\)É(V`7A]+ؐI7h:%PI^#SfX/S.ރE~Vc9f~gA.iMPCQvʭPiqyY VVL\& h=:;鋈B(3ۨRyz݌sȇNJ/b&.bG slZ \mv!* K +(ũimOA䚴Co騗_`0ꍺbY _w-7MFYY_bgdfUh"rr8d^e` )tA{99AhYtfA-*` 6CNЗtZ Y Vʲ2J5N3+]yeĺI;=ȌY{1f S+4(CE*X@#3 6wP0,kw;x.)ЀF(\Yw;oNM\euTo9P5 Q5L,P[f6+rM~$--CКm5Ԕ-gPPu%Z?8/(NXqCkDL_UƢj|ym})&q`n7+qJ~# wFc< fpfk'wF~S۾o>s'WxAc~:EQuśp?|gbNVJ2%9: *tg ғz|5C乜* }ZLh.s] jv|#ۥ+`F$faY ߛ>g3g̠ULMhi++{)v\/mռUS[rp/X{ϺdP*,Vv@ҼRB#zCϛ*Jn F/W ldHDA?Wp=_`C+Tkـ'BNM2ete5_/; ,j1c8QRBv)zH&cr ,&Zr)4Ad;wd z8vf>b,qY6fPT}yTI6ʷ@QѰ%fnЃQ#qhb ց!@_JpH xt^z|F% TURpZإ^~^ MA0(]=軔OQ8y*15._*Q$U_L- MTPqcp |=^BߩdžN?8D]n5g_< Z #>|[YgdXg૖R̙Gv]P'zʞVN)RTMֽ8f-\9c#CtY3_Oݟ`+7M}φ9ЕWv{x<֚K=NϺ^uԶz\Q)R[JA >:r OPK ?SckS[j[[j;0Yp>Am+D7&8Q>\B;>!= '1݃hmɜ_x/<7(7U {$-^bC w2_Y o&E6+ P8XH @ 0WB*n^gtV,K1cjW‡n:uR4tnKOzסi5B ~^ er+*{Mq%"Tu{0M)6F#hTWjmTDaű"H4h)NQ$$qRjZo@}qsY[5 EPV&4ŁZEH+b%ؙHn}֮*C2 Atr5HSڊ"{d.5u:OLb~f7ⰩnCzOD V6}0|6 >k!*8M!j&py#B1ޓ[ L ۳OS%6QME[iiƼXc6f&G]վ\< 6j_ʊ ~(W*z;럇4 mug`}|cx mEցcA3 ǞN߿yĀH8TaXKo#qt5;,f? D *u7,I0 c$Bont .'JNv󋅦Y)6b%#DtgXˀUpZ.>RVEXرÀicE&ocs|]'!C2SO`CO (286BgTV.O6ʬLFE,8Aɒ0amX; wS{37ribٱc{Ko!NGЌoxx_>k:q{L yB(+iQ7,k7Ziyt]c#Eb^[6W}xG"2)I$Kۓ3rŦ@qbDʨmv}c+kJ:&-_6]iu{v"OLf|O5:˭%ӧ?> l#N endstream endobj 39 0 obj 7903 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 40 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 41 0000000000 65535 f 0000010592 00000 n 0000029656 00000 n 0000010496 00000 n 0000010946 00000 n 0000010798 00000 n 0000010640 00000 n 0000009760 00000 n 0000000015 00000 n 0000002477 00000 n 0000029144 00000 n 0000027750 00000 n 0000028892 00000 n 0000027322 00000 n 0000028528 00000 n 0000026820 00000 n 0000010714 00000 n 0000010744 00000 n 0000009920 00000 n 0000002497 00000 n 0000004869 00000 n 0000011093 00000 n 0000010064 00000 n 0000004890 00000 n 0000007089 00000 n 0000011136 00000 n 0000010208 00000 n 0000007110 00000 n 0000008841 00000 n 0000011168 00000 n 0000010352 00000 n 0000008862 00000 n 0000009740 00000 n 0000011222 00000 n 0000011276 00000 n 0000016517 00000 n 0000016538 00000 n 0000018789 00000 n 0000018810 00000 n 0000026799 00000 n 0000028416 00000 n trailer << /Size 41 /Root 1 0 R /Info 2 0 R >> startxref 29796 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_remove_handle.30000644000175000017500000000156110265631023025064 0ustar danieldaniel.\" $Id: curl_multi_remove_handle.3,v 1.4 2003/03/10 20:43:59 bagder Exp $ .\" .TH curl_multi_remove_handle 3 "6 March 2002" "libcurl 7.9.5" "libcurl Manual" .SH NAME curl_multi_remove_handle - remove an easy handle from a multi session .SH SYNOPSIS #include CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle); .ad .SH DESCRIPTION Removes a given easy_handle from the multi_handle. This will make the specified easy handle be removed from this multi handle's control. When the easy handle has been removed from a multi stack, it is again perfectly legal to invoke \fIcurl_easy_perform()\fP on this easy handle. Removing a handle while being used, will effectively halt all transfers in progress. .SH RETURN VALUE CURLMcode type, general libcurl multi interface error code. .SH "SEE ALSO" .BR curl_multi_cleanup "(3)," curl_multi_init "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_formfree.30000644000175000017500000000124210265631023022643 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_formfree.3,v 1.3 2004/02/27 15:34:06 bagder Exp $ .\" .TH curl_formfree 3 "6 April 2001" "libcurl 7.7.1" "libcurl Manual" .SH NAME curl_formfree - free a previously build multipart/formdata HTTP POST chain .SH SYNOPSIS .B #include .sp .BI "void curl_formfree(struct curl_httppost *" form); .ad .SH DESCRIPTION curl_formfree() is used to clean up data previously built/appended with \fIcurl_formadd(3)\fP. This must be called when the data has been used, which typically means after the \fIcurl_easy_perform(3)\fP has been called. .SH RETURN VALUE None .SH "SEE ALSO" .BR curl_formadd "(3) " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_formfree.html0000644000175000017500000000321710265631023023451 0ustar danieldaniel curl_formfree man page

NAME

curl_formfree - free a previously build multipart/formdata HTTP POST chain

SYNOPSIS

#include <curl/curl.h>

void curl_formfree(struct curl_httppost * form);

DESCRIPTION

curl_formfree() is used to clean up data previously built/appended with curl_formadd(3). This must be called when the data has been used, which typically means after the curl_easy_perform(3) has been called.

RETURN VALUE

None

SEE ALSO

curl_formadd (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_init.html0000644000175000017500000000552510265631023024133 0ustar danieldaniel curl_global_init man page

NAME

curl_global_init - Global libcurl initialisation

SYNOPSIS

#include <curl/curl.h>

CURLcode curl_global_init(long flags );

DESCRIPTION

This function should only be called once (no matter how many threads or libcurl sessions that'll be used) by every application that uses libcurl.

If this function hasn't been invoked when curl_easy_init(3) is called, it will be done automatically by libcurl.

The flags option is a bit pattern that tells libcurl exact what features to init, as described below. Set the desired bits by ORing the values together.

You must however always use the curl_global_cleanup(3) function, as that cannot be called automatically for you by libcurl.

Calling this function more than once will cause unpredictable results.

FLAGS

CURL_GLOBAL_ALL Initialize everything possible. This sets all known bits.

CURL_GLOBAL_SSL Initialize SSL

CURL_GLOBAL_WIN32 Initialize the Win32 socket libraries.

CURL_GLOBAL_NOTHING Initialise nothing extra. This sets no bit.

RETURN VALUE

If this function returns non-zero, something went wrong and you cannot use the other curl functions.

SEE ALSO

curl_global_init_mem (3) curl_global_cleanup (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-errors.30000644000175000017500000002412610265631023022765 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: libcurl-errors.3,v 1.17 2005/02/09 14:13:21 bagder Exp $ .\" .TH libcurl-errors 3 "9 Feb 2005" "libcurl 7.13.1" "libcurl errors" .SH NAME libcurl-errors \- error codes in libcurl .SH DESCRIPTION This man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem. .SH "CURLcode" Almost all "easy" interface functions return a CURLcode error code. No matter what, using the \fIcurl_easy_setopt(3)\fP option \fICURLOPT_ERRORBUFFER\fP is a good idea as it will give you a human readable error string that may offer more details about the error cause than just the error code does. \fIcurl_easy_strerror(3)\fP can be called to get an error string from a given CURLcode number. CURLcode is one of the following: .IP "CURLE_OK (0)" All fine. Proceed as usual. .IP "CURLE_UNSUPPORTED_PROTOCOL (1)" The URL you passed to libcurl used a protocol that this libcurl does not support. The support might be a compile-time option that you didn't use, it can be a misspelled protocol string or just a protocol libcurl has no code for. .IP "CURLE_FAILED_INIT (2)" Very early initialization code failed. This is likely to be an internal error or problem. .IP "CURLE_URL_MALFORMAT (3)" The URL was not properly formatted. .IP "CURLE_URL_MALFORMAT_USER (4)" URL user malformatted. The user-part of the URL syntax was not correct. .IP "CURLE_COULDNT_RESOLVE_PROXY (5)" Couldn't resolve proxy. The given proxy host could not be resolved. .IP "CURLE_COULDNT_RESOLVE_HOST (6)" Couldn't resolve host. The given remote host was not resolved. .IP "CURLE_COULDNT_CONNECT (7)" Failed to connect() to host or proxy. .IP "CURLE_FTP_WEIRD_SERVER_REPLY (8)" After connecting to an FTP server, libcurl expects to get a certain reply back. This error code implies that it god a strange or bad reply. The given remote server is probably not an OK FTP server. .IP "CURLE_FTP_ACCESS_DENIED (9)" We were denied access when trying to login to an FTP server or when trying to change working directory to the one given in the URL. .IP "CURLE_FTP_USER_PASSWORD_INCORRECT (10)" The FTP server rejected access to the server after the password was sent to it. It might be because the username and/or the password were incorrect or just that the server is not allowing you access for the moment etc. .IP "CURLE_FTP_WEIRD_PASS_REPLY (11)" After having sent the FTP password to the server, libcurl expects a proper reply. This error code indicates that an unexpected code was returned. .IP "CURLE_FTP_WEIRD_USER_REPLY (12)" After having sent user name to the FTP server, libcurl expects a proper reply. This error code indicates that an unexpected code was returned. .IP "CURLE_FTP_WEIRD_PASV_REPLY (13)" libcurl failed to get a sensible result back from the server as a response to either a PASV or a EPSV command. The server is flawed. .IP "CURLE_FTP_WEIRD_227_FORMAT (14)" FTP servers return a 227-line as a response to a PASV command. If libcurl fails to parse that line, this return code is passed back. .IP "CURLE_FTP_CANT_GET_HOST (15)" An internal failure to lookup the host used for the new connection. .IP "CURLE_FTP_CANT_RECONNECT (16)" A bad return code on either PASV or EPSV was sent by the FTP server, preventing libcurl from being able to continue. .IP "CURLE_FTP_COULDNT_SET_BINARY (17)" Received an error when trying to set the transfer mode to binary. .IP "CURLE_PARTIAL_FILE (18)" A file transfer was shorter or larger than expected. This happens when the server first reports an expected transfer size, and then delivers data that doesn't match the previously given size. .IP "CURLE_FTP_COULDNT_RETR_FILE (19)" This was either a weird reply to a 'RETR' command or a zero byte transfer complete. .IP "CURLE_FTP_WRITE_ERROR (20)" After a completed file transfer, the FTP server did not respond a proper \"transfer successful\" code. .IP "CURLE_FTP_QUOTE_ERROR (21)" When sending custom "QUOTE" commands to the remote server, one of the commands returned an error code that was 400 or higher. .IP "CURLE_HTTP_RETURNED_ERROR (22)" This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is >= 400. .IP "CURLE_WRITE_ERROR (23)" An error occurred when writing received data to a local file, or an error was returned to libcurl from a write callback. .IP "CURLE_MALFORMAT_USER (24)" Malformat user. User name badly specified. *Not currently used* .IP "CURLE_FTP_COULDNT_STOR_FILE (25)" FTP couldn't STOR file. The server denied the STOR operation. The error buffer usually contains the server's explanation to this. .IP "CURLE_READ_ERROR (26)" There was a problem reading a local file or an error returned by the read callback. .IP "CURLE_OUT_OF_MEMORY (27)" Out of memory. A memory allocation request failed. This is serious badness and things are severely screwed up if this ever occur. .IP "CURLE_OPERATION_TIMEOUTED (28)" Operation timeout. The specified time-out period was reached according to the conditions. .IP "CURLE_FTP_COULDNT_SET_ASCII (29)" libcurl failed to set ASCII transfer type (TYPE A). .IP "CURLE_FTP_PORT_FAILED (30)" The FTP PORT command returned error. This mostly happen when you haven't specified a good enough address for libcurl to use. See \fICURLOPT_FTPPORT\fP. .IP "CURLE_FTP_COULDNT_USE_REST (31)" The FTP REST command returned error. This should never happen if the server is sane. .IP "CURLE_FTP_COULDNT_GET_SIZE (32)" The FTP SIZE command returned error. SIZE is not a kosher FTP command, it is an extension and not all servers support it. This is not a surprising error. .IP "CURLE_HTTP_RANGE_ERROR (33)" The HTTP server does not support or accept range requests. .IP "CURLE_HTTP_POST_ERROR (34)" This is an odd error that mainly occurs due to internal confusion. .IP "CURLE_SSL_CONNECT_ERROR (35)" A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others. .IP "CURLE_FTP_BAD_DOWNLOAD_RESUME (36)" Attempting FTP resume beyond file size. .IP "CURLE_FILE_COULDNT_READ_FILE (37)" A file given with FILE:// couldn't be opened. Most likely because the file path doesn't identify an existing file. Did you check file permissions? .IP "CURLE_LDAP_CANNOT_BIND (38)" LDAP cannot bind. LDAP bind operation failed. .IP "CURLE_LDAP_SEARCH_FAILED (39)" LDAP search failed. .IP "CURLE_LIBRARY_NOT_FOUND (40)" Library not found. The LDAP library was not found. .IP "CURLE_FUNCTION_NOT_FOUND (41)" Function not found. A required LDAP function was not found. .IP "CURLE_ABORTED_BY_CALLBACK (42)" Aborted by callback. A callback returned "abort" to libcurl. .IP "CURLE_BAD_FUNCTION_ARGUMENT (43)" Internal error. A function was called with a bad parameter. .IP "CURLE_BAD_CALLING_ORDER (44)" Internal error. A function was called in a bad order. .IP "CURLE_HTTP_PORT_FAILED (45)" Interface error. A specified outgoing interface could not be used. Set which interface to use for outgoing connections' source IP address with CURLOPT_INTERFACE. .IP "CURLE_BAD_PASSWORD_ENTERED (46)" Bad password entered. An error was signaled when the password was entered. This can also be the result of a "bad password" returned from a specified password callback. .IP "CURLE_TOO_MANY_REDIRECTS (47)" Too many redirects. When following redirects, libcurl hit the maximum amount. Set your limit with CURLOPT_MAXREDIRS. .IP "CURLE_UNKNOWN_TELNET_OPTION (48)" An option set with CURLOPT_TELNETOPTIONS was not recognized/known. Refer to the appropriate documentation. .IP "CURLE_TELNET_OPTION_SYNTAX (49)" A telnet option string was Illegally formatted. .IP "CURLE_OBSOLETE (50)" This is not an error. This used to be another error code in an old libcurl version and is currently unused. .IP "CURLE_SSL_PEER_CERTIFICATE (51)" The remote server's SSL certificate was deemed not OK. .IP "CURLE_GOT_NOTHING (52)" Nothing was returned from the server, and under the circumstances, getting nothing is considered an error. .IP "CURLE_SSL_ENGINE_NOTFOUND (53)" The specified crypto engine wasn't found. .IP "CURLE_SSL_ENGINE_SETFAILED (54)" Failed setting the selected SSL crypto engine as default! .IP "CURLE_SEND_ERROR (55)" Failed sending network data. .IP "CURLE_RECV_ERROR (56)" Failure with receiving network data. .IP "CURLE_SHARE_IN_USE (57)" Share is in use .IP "CURLE_SSL_CERTPROBLEM (58)" problem with the local client certificate .IP "CURLE_SSL_CIPHER (59)" couldn't use specified cipher .IP "CURLE_SSL_CACERT (60)" problem with the CA cert (path? access rights?) .IP "CURLE_BAD_CONTENT_ENCODING (61)" Unrecognized transfer encoding .IP "CURLE_LDAP_INVALID_URL (62)" Invalid LDAP URL .IP "CURLE_FILESIZE_EXCEEDED (63)" Maximum file size exceeded .IP "CURLE_FTP_SSL_FAILED (64)" Requested FTP SSL level failed .IP "CURLE_SEND_FAIL_REWIND (65)" When doing a send operation curl had to rewind the data to retransmit, but the rewinding operation failed .IP "CURLE_SSL_ENGINE_INITFAILED (66)" Initiating the SSL Engine failed .IP "CURLE_LOGIN_DENIED (67)" The remote server denied curl to login (Added in 7.13.1) .SH "CURLMcode" This is the generic return code used by functions in the libcurl multi interface. Also consider \fIcurl_multi_strerror(3)\fI. .IP "CURLM_CALL_MULTI_PERFORM (-1)" This is not really an error. It means you should call \fIcurl_multi_perform(3)\fP again without doing select() or similar in between. .IP "CURLM_OK (0)" Things are fine. .IP "CURLM_BAD_HANDLE (1)" The passed-in handle is not a valid CURLM handle. .IP "CURLM_BAD_EASY_HANDLE (2)" An easy handle was not good/valid. .IP "CURLM_OUT_OF_MEMORY (3)" You are doomed. .IP "CURLM_INTERNAL_ERROR (4)" This can only be returned if libcurl bugs. Please report it to us! .SH "CURLSHcode" The "share" interface will return a CURLSHcode to indicate when an error has occurred. Also consider \fIcurl_share_strerror(3)\fI. CURLSHcode is one of the following: .IP "CURLSHE_OK (0)" All fine. Proceed as usual. .IP "CURLSHE_BAD_OPTION (1)" An invalid option was passed to the function. .IP "CURLSHE_IN_USE (2)" The share object is currently in use. .IP "CURLSHE_INVALID (3)" An invalid share object was passed to the function. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_setopt.html0000644000175000017500000024572410265631023024216 0ustar danieldaniel curl_easy_setopt man page

NAME

curl_easy_setopt - set options for a curl easy handle

SYNOPSIS

#include <curl/curl.h>

CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);

DESCRIPTION

curl_easy_setopt() is used to tell libcurl how to behave. By using the appropriate options to curl_easy_setopt, you can change libcurl's behavior. All options are set with the option followed by a parameter. That parameter can be a long, a function pointer, an object pointer or a curl_off_t, depending on what the specific option expects. Read this manual carefully as bad input values may cause libcurl to behave badly! You can only set one option in each function call. A typical application uses many curl_easy_setopt() calls in the setup phase.

Options set with this function call are valid for all forthcoming transfers performed using this handle. The options are not in any way reset between transfers, so if you want subsequent transfers with different options, you must change them between the transfers. You can optionally reset all options back to internal default with curl_easy_reset(3).

NOTE: strings passed to libcurl as 'char *' arguments, will not be copied by the library. Instead you should keep them available until libcurl no longer needs them. Failing to do so will cause very odd behavior or even crashes. libcurl will need them until you call curl_easy_cleanup(3) or you set the same option again to use a different pointer.

The handle is the return code from a curl_easy_init(3) or curl_easy_duphandle(3) call.

BEHAVIOR OPTIONS

CURLOPT_VERBOSE

Set the parameter to non-zero to get the library to display a lot of verbose information about its operations. Very useful for libcurl and/or protocol debugging and understanding. The verbose information will be sent to stderr, or the stream set with CURLOPT_STDERR.

You hardly ever want this set in production use, you will almost always want this when you debug/report problems. Another neat option for debugging is the CURLOPT_DEBUGFUNCTION.

CURLOPT_HEADER

A non-zero parameter tells the library to include the header in the body output. This is only relevant for protocols that actually have headers preceding the data (like HTTP).

CURLOPT_NOPROGRESS

A non-zero parameter tells the library to shut off the built-in progress meter completely.

NOTE: future versions of libcurl is likely to not have any built-in progress meter at all.

CURLOPT_NOSIGNAL

Pass a long. If it is non-zero, libcurl will not use any functions that install signal handlers or any functions that cause signals to be sent to the process. This option is mainly here to allow multi-threaded unix applications to still set/use all timeout options etc, without risking getting signals. (Added in 7.10)

Consider building libcurl with ares support to enable asynchronous DNS lookups. It enables nice timeouts for name resolves without signals.

CALLBACK OPTIONS

CURLOPT_WRITEFUNCTION

Function pointer that should match the following prototype: size_t function( void *ptr, size_t size, size_t nmemb, void *stream); This function gets called by libcurl as soon as there is data received that needs to be saved. The size of the data pointed to by ptr is size multiplied with nmemb, it will not be zero terminated. Return the number of bytes actually taken care of. If that amount differs from the amount passed to your function, it'll signal an error to the library and it will abort the transfer and return CURLE_WRITE_ERROR.

This function may be called with zero bytes data if the transfered file is empty.

Set the stream argument with the CURLOPT_WRITEDATA option.

NOTE: you will be passed as much data as possible in all invokes, but you cannot possibly make any assumptions. It may be one byte, it may be thousands. The maximum amount of data that can be passed to the write callback is defined in the curl.h header file: CURL_MAX_WRITE_SIZE.

CURLOPT_WRITEDATA

Data pointer to pass to the file write function. Note that if you specify the CURLOPT_WRITEFUNCTION, this is the pointer you'll get as input. If you don't use a callback, you must pass a 'FILE *' as libcurl will pass this to fwrite() when writing data.

NOTE: If you're using libcurl as a win32 DLL, you MUST use the CURLOPT_WRITEFUNCTION if you set this option or you will experience crashes.

This option is also known with the older name CURLOPT_FILE, the name CURLOPT_WRITEDATA was introduced in 7.9.7.

CURLOPT_READFUNCTION

Function pointer that should match the following prototype: size_t function( void *ptr, size_t size, size_t nmemb, void *stream); This function gets called by libcurl as soon as it needs to read data in order to send it to the peer. The data area pointed at by the pointer ptr may be filled with at most size multiplied with nmemb number of bytes. Your function must return the actual number of bytes that you stored in that memory area. Returning 0 will signal end-of-file to the library and cause it to stop the current transfer.

If you stop the current transfer by returning 0 "pre-maturely" (i.e before the server expected it, like when you've told you will upload N bytes and you upload less than N bytes), you may experience that the server "hangs" waiting for the rest of the data that won't come.

In libcurl 7.12.1 and later, the read callback may return CURL_READFUNC_ABORT to stop the current operation at once, with a CURLE_ABORTED_BY_CALLBACK error code from the transfer.

CURLOPT_READDATA

Data pointer to pass to the file read function. Note that if you specify the CURLOPT_READFUNCTION, this is the pointer you'll get as input. If you don't specify a read callback, this must be a valid FILE *.

NOTE: If you're using libcurl as a win32 DLL, you MUST use a CURLOPT_READFUNCTION if you set this option.

This option is also known with the older name CURLOPT_INFILE, the name CURLOPT_READDATA was introduced in 7.9.7.

CURLOPT_IOCTLFUNCTION

Function pointer that should match the curl_ioctl_callback prototype found in <curl/curl.h>. This function gets called by libcurl when something special I/O-related needs to be done that the library can't do by itself. For now, rewinding the read data stream is the only action it can request. The rewinding of the read data stream may be necessary when doing a HTTP PUT or POST with a multi-pass authentication method. (Opion added in 7.12.3)

CURLOPT_IOCTLDATA

Pass a pointer that will be untouched by libcurl and passed as the 3rd argument in the ioctl callback set with CURLOPT_IOCTLFUNCTION. (Option added in 7.12.3)

CURLOPT_PROGRESSFUNCTION

Function pointer that should match the curl_progress_callback prototype found in <curl/curl.h>. This function gets called by libcurl instead of its internal equivalent with a frequent interval during data transfer. Unknown/unused argument values will be set to zero (like if you only download data, the upload size will remain 0). Returning a non-zero value from this callback will cause libcurl to abort the transfer and return CURLE_ABORTED_BY_CALLBACK.

Also note that CURLOPT_NOPROGRESS must be set to FALSE to make this function actually get called.

CURLOPT_PROGRESSDATA

Pass a pointer that will be untouched by libcurl and passed as the first argument in the progress callback set with CURLOPT_PROGRESSFUNCTION.

CURLOPT_HEADERFUNCTION

Function pointer that should match the following prototype: size_t function( void *ptr, size_t size, size_t nmemb, void *stream);. This function gets called by libcurl as soon as there is received header data that needs to be written down. The headers are guaranteed to be written one-by-one and only complete lines are written. Parsing headers should be easy enough using this. The size of the data pointed to by ptr is size multiplied with nmemb. The pointer named stream will be the one you passed to libcurl with the CURLOPT_WRITEHEADER option. Return the number of bytes actually written or return -1 to signal error to the library (it will cause it to abort the transfer with a CURLE_WRITE_ERROR return code).

CURLOPT_WRITEHEADER

Pass a pointer to be used to write the header part of the received data to. If you don't use your own callback to take care of the writing, this must be a valid FILE *. See also the CURLOPT_HEADERFUNCTION option above on how to set a custom get-all-headers callback.

CURLOPT_DEBUGFUNCTION

Function pointer that should match the following prototype: int curl_debug_callback (CURL *, curl_infotype, char *, size_t, void *); CURLOPT_DEBUGFUNCTION replaces the standard debug function used when CURLOPT_VERBOSE is in effect. This callback receives debug information, as specified with the curl_infotype argument. This function must return 0. The data pointed to by the char * passed to this function WILL NOT be zero terminated, but will be exactly of the size as told by the size_t argument.

Available curl_infotype values:

CURLINFO_TEXT

The data is informational text.

CURLINFO_HEADER_IN

The data is header (or header-like) data received from the peer.

CURLINFO_HEADER_OUT

The data is header (or header-like) data sent to the peer.

CURLINFO_DATA_IN

The data is protocol data received from the peer.

CURLINFO_DATA_OUT

The data is protocol data sent to the peer.

CURLOPT_DEBUGDATA

Pass a pointer to whatever you want passed in to your CURLOPT_DEBUGFUNCTION in the last void * argument. This pointer is not used by libcurl, it is only passed to the callback.

CURLOPT_SSL_CTX_FUNCTION

Function pointer that should match the following prototype: CURLcode sslctxfun(CURL *curl, void *sslctx, void *parm); This function gets called by libcurl just before the initialization of an SSL connection after having processed all other SSL related options to give a last chance to an application to modify the behaviour of openssl's ssl initialization. The sslctx parameter is actually a pointer to an openssl SSL_CTX. If an error is returned no attempt to establish a connection is made and the perform operation will return the error code from this callback function. Set the parm argument with the CURLOPT_SSL_CTX_DATA option. This option was introduced in 7.11.0.

NOTE: To use this properly, a non-trivial amount of knowledge of the openssl libraries is necessary. Using this function allows for example to use openssl callbacks to add additional validation code for certificates, and even to change the actual URI of an HTTPS request (example used in the lib509 test case). See also the example section for a replacement of the key, certificate and trust file settings.

CURLOPT_SSL_CTX_DATA

Data pointer to pass to the ssl context callback set by the option CURLOPT_SSL_CTX_FUNCTION, this is the pointer you'll get as third parameter, otherwise NULL. (Added in 7.11.0)

ERROR OPTIONS

CURLOPT_ERRORBUFFER

Pass a char * to a buffer that the libcurl may store human readable error messages in. This may be more helpful than just the return code from the library. The buffer must be at least CURL_ERROR_SIZE big.

Use CURLOPT_VERBOSE and CURLOPT_DEBUGFUNCTION to better debug/trace why errors happen.

Note: if the library does not return an error, the buffer may not have been touched. Do not rely on the contents in those cases.

CURLOPT_STDERR

Pass a FILE * as parameter. Tell libcurl to use this stream instead of stderr when showing the progress meter and displaying CURLOPT_VERBOSE data.

CURLOPT_FAILONERROR

A non-zero parameter tells the library to fail silently if the HTTP code returned is equal to or larger than 300. The default action would be to return the page normally, ignoring that code.

NETWORK OPTIONS

CURLOPT_URL

The actual URL to deal with. The parameter should be a char * to a zero terminated string. The string must remain present until curl no longer needs it, as it doesn't copy the string.

If the given URL lacks the protocol part ("http://" or "ftp://" etc), it will attempt to guess which protocol to use based on the given host name. If the given protocol of the set URL is not supported, libcurl will return on error (CURLE_UNSUPPORTED_PROTOCOL) when you call curl_easy_perform(3) or curl_multi_perform(3). Use curl_version_info(3) for detailed info on which protocols that are supported.

NOTE: CURLOPT_URL is the only option that must be set before curl_easy_perform(3) is called.

CURLOPT_PROXY

Set HTTP proxy to use. The parameter should be a char * to a zero terminated string holding the host name or dotted IP address. To specify port number in this string, append :[port] to the end of the host name. The proxy string may be prefixed with [protocol]:// since any such prefix will be ignored. The proxy's port number may optionally be specified with the separate option CURLOPT_PROXYPORT.

NOTE: when you tell the library to use an HTTP proxy, libcurl will transparently convert operations to HTTP even if you specify an FTP URL etc. This may have an impact on what other features of the library you can use, such as CURLOPT_QUOTE and similar FTP specifics that don't work unless you tunnel through the HTTP proxy. Such tunneling is activated with CURLOPT_HTTPPROXYTUNNEL.

NOTE2: libcurl respects the environment variables http_proxy, ftp_proxy, all_proxy etc, if any of those is set.

CURLOPT_PROXYPORT

Pass a long with this option to set the proxy port to connect to unless it is specified in the proxy string CURLOPT_PROXY.

CURLOPT_PROXYTYPE

Pass a long with this option to set type of the proxy. Available options for this are CURLPROXY_HTTP and CURLPROXY_SOCKS5, with the HTTP one being default. (Added in 7.10)

CURLOPT_HTTPPROXYTUNNEL

Set the parameter to non-zero to get the library to tunnel all operations through a given HTTP proxy. Note that there is a big difference between using a proxy and to tunnel through it. If you don't know what this means, you probably don't want this tunneling option.

CURLOPT_INTERFACE

Pass a char * as parameter. This set the interface name to use as outgoing network interface. The name can be an interface name, an IP address or a host name.

CURLOPT_DNS_CACHE_TIMEOUT

Pass a long, this sets the timeout in seconds. Name resolves will be kept in memory for this number of seconds. Set to zero (0) to completely disable caching, or set to -1 to make the cached entries remain forever. By default, libcurl caches this info for 60 seconds.

CURLOPT_DNS_USE_GLOBAL_CACHE

Pass a long. If the value is non-zero, it tells curl to use a global DNS cache that will survive between easy handle creations and deletions. This is not thread-safe and this will use a global variable.

WARNING: this option is considered obsolete. Stop using it. Switch over to using the share interface instead! See CURLOPT_SHARE and curl_share_init(3).

CURLOPT_BUFFERSIZE

Pass a long specifying your preferred size for the receive buffer in libcurl. The main point of this would be that the write callback gets called more often and with smaller chunks. This is just treated as a request, not an order. You cannot be guaranteed to actually get the given size. (Added in 7.10)

CURLOPT_PORT

Pass a long specifying what remote port number to connect to, instead of the one specified in the URL or the default port for the used protocol.

CURLOPT_TCP_NODELAY

Pass a long specifying whether the TCP_NODELAY option should be set or cleared (1 = set, 0 = clear). The option is cleared by default. This will have no effect after the connection has been established.

Setting this option will disable TCP's Nagle algorithm. The purpose of this algorithm is to try to minimize the number of small packets on the network (where "small packets" means TCP segments less than the Maximum Segment Size (MSS) for the network).

Maximizing the amount of data sent per TCP segment is good because it amortizes the overhead of the send. However, in some cases (most notably telnet or rlogin) small segments may need to be sent without delay. This is less efficient than sending larger amounts of data at a time, and can contribute to congestion on the network if overdone.

NAMES and PASSWORDS OPTIONS (Authentication)

CURLOPT_NETRC

This parameter controls the preference of libcurl between using user names and passwords from your ~/.netrc file, relative to user names and passwords in the URL supplied with CURLOPT_URL.

Note: libcurl uses a user name (and supplied or prompted password) supplied with CURLOPT_USERPWD in preference to any of the options controlled by this parameter.

Pass a long, set to one of the values described below.

CURL_NETRC_OPTIONAL

The use of your ~/.netrc file is optional, and information in the URL is to be preferred. The file will be scanned with the host and user name (to find the password only) or with the host only, to find the first user name and password after that machine, which ever information is not specified in the URL.

Undefined values of the option will have this effect.

CURL_NETRC_IGNORED

The library will ignore the file and use only the information in the URL.

This is the default.

CURL_NETRC_REQUIRED

This value tells the library that use of the file is required, to ignore the information in the URL, and to search the file with the host only.

Only machine name, user name and password are taken into account (init macros and similar things aren't supported).

Note: libcurl does not verify that the file has the correct properties set (as the standard Unix ftp client does). It should only be readable by user.

CURLOPT_NETRC_FILE

Pass a char * as parameter, pointing to a zero terminated string containing the full path name to the file you want libcurl to use as .netrc file. If this option is omitted, and CURLOPT_NETRC is set, libcurl will attempt to find the a .netrc file in the current user's home directory. (Added in 7.10.9)

CURLOPT_USERPWD

Pass a char * as parameter, which should be [user name]:[password] to use for the connection. Use CURLOPT_HTTPAUTH to decide authentication method.

When using HTTP and CURLOPT_FOLLOWLOCATION, libcurl might perform several requests to possibly different hosts. libcurl will only send this user and password information to hosts using the initial host name (unless CURLOPT_UNRESTRICTED_AUTH is set), so if libcurl follows locations to other hosts it will not send the user and password to those. This is enforced to prevent accidental information leakage.

CURLOPT_PROXYUSERPWD

Pass a char * as parameter, which should be [user name]:[password] to use for the connection to the HTTP proxy. Use CURLOPT_PROXYAUTH to decide authentication method.

CURLOPT_HTTPAUTH

Pass a long as parameter, which is set to a bitmask, to tell libcurl what authentication method(s) you want it to use. The available bits are listed below. If more than one bit is set, libcurl will first query the site to see what authentication methods it supports and then pick the best one you allow it to use. Note that for some methods, this will induce an extra network round-trip. Set the actual name and password with the CURLOPT_USERPWD option. (Added in 7.10.6)

CURLAUTH_BASIC

HTTP Basic authentication. This is the default choice, and the only method that is in wide-spread use and supported virtually everywhere. This is sending the user name and password over the network in plain text, easily captured by others.

CURLAUTH_DIGEST

HTTP Digest authentication. Digest authentication is defined in RFC2617 and is a more secure way to do authentication over public networks than the regular old-fashioned Basic method.

CURLAUTH_GSSNEGOTIATE

HTTP GSS-Negotiate authentication. The GSS-Negotiate (also known as plain "Negotiate") method was designed by Microsoft and is used in their web applications. It is primarily meant as a support for Kerberos5 authentication but may be also used along with another authentication methods. For more information see IETF draft draft-brezak-spnego-http-04.txt.

NOTE that you need to build libcurl with a suitable GSS-API library for this to work.

CURLAUTH_NTLM

HTTP NTLM authentication. A proprietary protocol invented and used by Microsoft. It uses a challenge-response and hash concept similar to Digest, to prevent the password from being eavesdropped.

NOTE that you need to build libcurl with SSL support for this option to work.

CURLAUTH_ANY

This is a convenience macro that sets all bits and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure.

CURLAUTH_ANYSAFE

This is a convenience macro that sets all bits except Basic and thus makes libcurl pick any it finds suitable. libcurl will automatically select the one it finds most secure.

CURLOPT_PROXYAUTH

Pass a long as parameter, which is set to a bitmask, to tell libcurl what authentication method(s) you want it to use for your proxy authentication. If more than one bit is set, libcurl will first query the site to see what authentication methods it supports and then pick the best one you allow it to use. Note that for some methods, this will induce an extra network round-trip. Set the actual name and password with the CURLOPT_PROXYUSERPWD option. The bitmask can be constructed by or'ing together the bits listed above for the CURLOPT_HTTPAUTH option. As of this writing, only Basic, Digest and NTLM work. (Added in 7.10.7)

HTTP OPTIONS

CURLOPT_AUTOREFERER

Pass a non-zero parameter to enable this. When enabled, libcurl will automatically set the Referer: field in requests where it follows a Location: redirect.

CURLOPT_ENCODING

Sets the contents of the Accept-Encoding: header sent in an HTTP request, and enables decoding of a response when a Content-Encoding: header is received. Three encodings are supported: identity, which does nothing, deflate which requests the server to compress its response using the zlib algorithm, and gzip which requests the gzip algorithm. If a zero-length string is set, then an Accept-Encoding: header containing all supported encodings is sent.

This is a request, not an order; the server may or may not do it. This option must be set (to any non-NULL value) or else any unsolicited encoding done by the server is ignored. See the special file lib/README.encoding for details.

CURLOPT_FOLLOWLOCATION

A non-zero parameter tells the library to follow any Location: header that the server sends as part of an HTTP header.

NOTE: this means that the library will re-send the same request on the new location and follow new Location: headers all the way until no more such headers are returned. CURLOPT_MAXREDIRS can be used to limit the number of redirects libcurl will follow.

CURLOPT_UNRESTRICTED_AUTH

A non-zero parameter tells the library it can continue to send authentication (user+password) when following locations, even when hostname changed. Note that this is meaningful only when setting CURLOPT_FOLLOWLOCATION.

CURLOPT_MAXREDIRS

Pass a long. The set number will be the redirection limit. If that many redirections have been followed, the next redirect will cause an error (CURLE_TOO_MANY_REDIRECTS). This option only makes sense if the CURLOPT_FOLLOWLOCATION is used at the same time.

CURLOPT_PUT

A non-zero parameter tells the library to use HTTP PUT to transfer data. The data should be set with CURLOPT_READDATA and CURLOPT_INFILESIZE.

This option is deprecated and starting with version 7.12.1 you should instead use CURLOPT_UPLOAD.

CURLOPT_POST

A non-zero parameter tells the library to do a regular HTTP post. This will also make the library use the a "Content-Type: application/x-www-form-urlencoded" header. (This is by far the most commonly used POST method).

Use the CURLOPT_POSTFIELDS option to specify what data to post and CURLOPT_POSTFIELDSIZE to set the data size.

Optionally, you can provide data to POST using the CURLOPT_READFUNCTION and CURLOPT_READDATA options but then you must make sure to not set CURLOPT_POSTFIELDS to anything but NULL. When providing data with a callback, you must transmit it using chunked transfer-encoding or you must set the size of the data with the CURLOPT_POSTFIELDSIZE option.

You can override the default POST Content-Type: header by setting your own with CURLOPT_HTTPHEADER.

Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

If you use POST to a HTTP 1.1 server, you can send data without knowing the size before starting the POST if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must specify the size in the request.

NOTE: if you have issued a POST request and want to make a HEAD or GET instead, you must explictly pick the new request type using CURLOPT_NOBODY or CURLOPT_HTTPGET or similar.

CURLOPT_POSTFIELDS

Pass a char * as parameter, which should be the full data to post in an HTTP POST operation. You must make sure that the data is formatted the way you want the server to receive it. libcurl will not convert or encode it for you. Most web servers will assume this data to be url-encoded. Take note.

This POST is a normal application/x-www-form-urlencoded kind (and libcurl will set that Content-Type by default when this option is used), which is the most commonly used one by HTML forms. See also the CURLOPT_POST. Using CURLOPT_POSTFIELDS implies CURLOPT_POST.

Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

Note: to make multipart/formdata posts (aka rfc1867-posts), check out the CURLOPT_HTTPPOST option.

CURLOPT_POSTFIELDSIZE

If you want to post data to the server without letting libcurl do a strlen() to measure the data size, this option must be used. When this option is used you can post fully binary data, which otherwise is likely to fail. If this size is set to -1, the library will use strlen() to get the size.

CURLOPT_POSTFIELDSIZE_LARGE

Pass a curl_off_t as parameter. Use this to set the size of the CURLOPT_POSTFIELDS data to prevent libcurl from doing strlen() on the data to figure out the size. This is the large file version of the CURLOPT_POSTFIELDSIZE option. (Added in 7.11.1)

CURLOPT_HTTPPOST

Tells libcurl you want a multipart/formdata HTTP POST to be made and you instruct what data to pass on to the server. Pass a pointer to a linked list of curl_httppost structs as parameter. . The easiest way to create such a list, is to use curl_formadd(3) as documented. The data in this list must remain intact until you close this curl handle again with curl_easy_cleanup(3).

Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

CURLOPT_REFERER

Pass a pointer to a zero terminated string as parameter. It will be used to set the Referer: header in the http request sent to the remote server. This can be used to fool servers or scripts. You can also set any custom header with CURLOPT_HTTPHEADER.

CURLOPT_USERAGENT

Pass a pointer to a zero terminated string as parameter. It will be used to set the User-Agent: header in the http request sent to the remote server. This can be used to fool servers or scripts. You can also set any custom header with CURLOPT_HTTPHEADER.

CURLOPT_HTTPHEADER

Pass a pointer to a linked list of HTTP headers to pass to the server in your HTTP request. The linked list should be a fully valid list of struct curl_slist structs properly filled in. Use curl_slist_append(3) to create the list and curl_slist_free_all(3) to clean up an entire list. If you add a header that is otherwise generated and used by libcurl internally, your added one will be used instead. If you add a header with no contents as in 'Accept:' (no data on the right side of the colon), the internally used header will get disabled. Thus, using this option you can add new headers, replace internal headers and remove internal headers. The headers included in the linked list must not be CRLF-terminated, because curl adds CRLF after each header item. Failure to comply with this will result in strange bugs because the server will most likely ignore part of the headers you specified.

The first line in a request (usually containing a GET or POST) is not a header and cannot be replaced using this option. Only the lines following the request-line are headers.

Pass a NULL to this to reset back to no custom headers.

NOTE: The most commonly replaced headers have "shortcuts" in the options CURLOPT_COOKIE, CURLOPT_USERAGENT and CURLOPT_REFERER.

CURLOPT_HTTP200ALIASES

Pass a pointer to a linked list of aliases to be treated as valid HTTP 200 responses. Some servers respond with a custom header response line. For example, IceCast servers respond with "ICY 200 OK". By including this string in your list of aliases, the response will be treated as a valid HTTP header line such as "HTTP/1.0 200 OK". (Added in 7.10.3)

The linked list should be a fully valid list of struct curl_slist structs, and be properly filled in. Use curl_slist_append(3) to create the list and curl_slist_free_all(3) to clean up an entire list.

NOTE: The alias itself is not parsed for any version strings. So if your alias is "MYHTTP/9.9", Libcurl will not treat the server as responding with HTTP version 9.9. Instead Libcurl will use the value set by option CURLOPT_HTTP_VERSION.

CURLOPT_COOKIE

Pass a pointer to a zero terminated string as parameter. It will be used to set a cookie in the http request. The format of the string should be NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie should contain.

If you need to set multiple cookies, you need to set them all using a single option and thus you need to concatenate them all in one single string. Set multiple cookies in one string like this: "name1=content1; name2=content2;" etc.

Using this option multiple times will only make the latest string override the previously ones.

CURLOPT_COOKIEFILE

Pass a pointer to a zero terminated string as parameter. It should contain the name of your file holding cookie data to read. The cookie data may be in Netscape / Mozilla cookie data format or just regular HTTP-style headers dumped to a file.

Given an empty or non-existing file or by passing the empty string (""), this option will enable cookies for this curl handle, making it understand and parse received cookies and then use matching cookies in future request.

CURLOPT_COOKIEJAR

Pass a file name as char *, zero terminated. This will make libcurl write all internally known cookies to the specified file when curl_easy_cleanup(3) is called. If no cookies are known, no file will be created. Specify "-" to instead have the cookies written to stdout. Using this option also enables cookies for this session, so if you for example follow a location it will make matching cookies get sent accordingly.

NOTE: If the cookie jar file can't be created or written to (when the curl_easy_cleanup(3) is called), libcurl will not and cannot report an error for this. Using CURLOPT_VERBOSE or CURLOPT_DEBUGFUNCTION will get a warning to display, but that is the only visible feedback you get about this possibly lethal situation.

CURLOPT_COOKIESESSION

Pass a long set to non-zero to mark this as a new cookie "session". It will force libcurl to ignore all cookies it is about to load that are "session cookies" from the previous session. By default, libcurl always stores and loads all cookies, independent if they are session cookies are not. Session cookies are cookies without expiry date and they are meant to be alive and existing for this "session" only.

CURLOPT_HTTPGET

Pass a long. If the long is non-zero, this forces the HTTP request to get back to GET. usable if a POST, HEAD, PUT or a custom request have been used previously using the same curl handle.

CURLOPT_HTTP_VERSION

Pass a long, set to one of the values described below. They force libcurl to use the specific HTTP versions. This is not sensible to do unless you have a good reason.

CURL_HTTP_VERSION_NONE

We don't care about what version the library uses. libcurl will use whatever it thinks fit.

CURL_HTTP_VERSION_1_0

Enforce HTTP 1.0 requests.

CURL_HTTP_VERSION_1_1

Enforce HTTP 1.1 requests.

FTP OPTIONS

CURLOPT_FTPPORT

Pass a pointer to a zero terminated string as parameter. It will be used to get the IP address to use for the ftp PORT instruction. The PORT instruction tells the remote server to connect to our specified IP address. The string may be a plain IP address, a host name, an network interface name (under Unix) or just a '-' letter to let the library use your systems default IP address. Default FTP operations are passive, and thus won't use PORT.

You disable PORT again and go back to using the passive version by setting this option to NULL.

CURLOPT_QUOTE

Pass a pointer to a linked list of FTP commands to pass to the server prior to your ftp request. This will be done before any other FTP commands are issued (even before the CWD command). The linked list should be a fully valid list of 'struct curl_slist' structs properly filled in. Use curl_slist_append(3) to append strings (commands) to the list, and clear the entire list afterwards with curl_slist_free_all(3). Disable this operation again by setting a NULL to this option.

CURLOPT_POSTQUOTE

Pass a pointer to a linked list of FTP commands to pass to the server after your ftp transfer request. The linked list should be a fully valid list of struct curl_slist structs properly filled in as described for CURLOPT_QUOTE. Disable this operation again by setting a NULL to this option.

CURLOPT_PREQUOTE

Pass a pointer to a linked list of FTP commands to pass to the server after the transfer type is set. The linked list should be a fully valid list of struct curl_slist structs properly filled in as described for CURLOPT_QUOTE. Disable this operation again by setting a NULL to this option.

CURLOPT_FTPLISTONLY

A non-zero parameter tells the library to just list the names of an ftp directory, instead of doing a full directory listing that would include file sizes, dates etc.

This causes an FTP NLST command to be sent. Beware that some FTP servers list only files in their response to NLST; they might not include subdirectories and symbolic links.

CURLOPT_FTPAPPEND

A non-zero parameter tells the library to append to the remote file instead of overwrite it. This is only useful when uploading to an ftp site.

CURLOPT_FTP_USE_EPRT

Pass a long. If the value is non-zero, it tells curl to use the EPRT (and LPRT) command when doing active FTP downloads (which is enabled by CURLOPT_FTPPORT). Using EPRT means that it will first attempt to use EPRT and then LPRT before using PORT, but if you pass FALSE (zero) to this option, it will not try using EPRT or LPRT, only plain PORT. (Added in 7.10.5)

If the server is an IPv6 host, this option will have no effect as of 7.12.3.

CURLOPT_FTP_USE_EPSV

Pass a long. If the value is non-zero, it tells curl to use the EPSV command when doing passive FTP downloads (which it always does by default). Using EPSV means that it will first attempt to use EPSV before using PASV, but if you pass FALSE (zero) to this option, it will not try using EPSV, only plain PASV.

If the server is an IPv6 host, this option will have no effect as of 7.12.3.

CURLOPT_FTP_CREATE_MISSING_DIRS

Pass a long. If the value is non-zero, curl will attempt to create any remote directory that it fails to CWD into. CWD is the command that changes working directory. (Added in 7.10.7)

CURLOPT_FTP_RESPONSE_TIMEOUT

Pass a long. Causes curl to set a timeout period (in seconds) on the amount of time that the server is allowed to take in order to generate a response message for a command before the session is considered hung. Note that while curl is waiting for a response, this value overrides CURLOPT_TIMEOUT. It is recommended that if used in conjunction with CURLOPT_TIMEOUT, you set CURLOPT_FTP_RESPONSE_TIMEOUT to a value smaller than CURLOPT_TIMEOUT. (Added in 7.10.8)

CURLOPT_FTP_SSL

Pass a long using one of the values from below, to make libcurl use your desired level of SSL for the ftp transfer. (Added in 7.11.0)

CURLFTPSSL_NONE

Don't attempt to use SSL.

CURLFTPSSL_TRY

Try using SSL, proceed as normal otherwise.

CURLFTPSSL_CONTROL

Require SSL for the control connection or fail with CURLE_FTP_SSL_FAILED.

CURLFTPSSL_ALL

Require SSL for all communication or fail with CURLE_FTP_SSL_FAILED.

CURLOPT_FTPSSLAUTH

Pass a long using one of the values from below, to alter how libcurl issues "AUTH TLS" or "AUTH SSL" when FTP over SSL is activated (see CURLOPT_FTP_SSL). (Added in 7.12.2)

CURLFTPAUTH_DEFAULT

Allow libcurl to decide

CURLFTPAUTH_SSL

Try "AUTH SSL" first, and only if that fails try "AUTH TLS"

CURLFTPAUTH_TLS

Try "AUTH TLS" first, and only if that fails try "AUTH SSL"

CURLOPT_SOURCE_URL

When set, it enables a FTP third party transfer, using the set URL as source, while CURLOPT_URL is the target.

CURLOPT_SOURCE_USERPWD

Set "username:password" to use for the source connection when doing FTP third party transfers.

CURLOPT_SOURCE_QUOTE

Exactly like CURLOPT_QUOTE, but for the source host.

CURLOPT_SOURCE_PREQUOTE

Exactly like CURLOPT_PREQUOTE, but for the source host.

CURLOPT_SOURCE_POSTQUOTE

Exactly like CURLOPT_POSTQUOTE, but for the source host.

CURLOPT_FTP_ACCOUNT

Pass a pointer to a zero-terminated string (or NULL to disable). When an FTP server asks for "account data" after user name and password has been provided, this data is sent off using the ACCT command. (Added in 7.13.0)

PROTOCOL OPTIONS

CURLOPT_TRANSFERTEXT

A non-zero parameter tells the library to use ASCII mode for ftp transfers, instead of the default binary transfer. For LDAP transfers it gets the data in plain text instead of HTML and for win32 systems it does not set the stdout to binary mode. This option can be usable when transferring text data between systems with different views on certain characters, such as newlines or similar.

CURLOPT_CRLF

Convert Unix newlines to CRLF newlines on transfers.

CURLOPT_RANGE

Pass a char * as parameter, which should contain the specified range you want. It should be in the format "X-Y", where X or Y may be left out. HTTP transfers also support several intervals, separated with commas as in "X-Y,N-M". Using this kind of multiple intervals will cause the HTTP server to send the response document in pieces (using standard MIME separation techniques). Pass a NULL to this option to disable the use of ranges.

CURLOPT_RESUME_FROM

Pass a long as parameter. It contains the offset in number of bytes that you want the transfer to start from. Set this option to 0 to make the transfer start from the beginning (effectively disabling resume).

CURLOPT_RESUME_FROM_LARGE

Pass a curl_off_t as parameter. It contains the offset in number of bytes that you want the transfer to start from. (Added in 7.11.0)

CURLOPT_CUSTOMREQUEST

Pass a pointer to a zero terminated string as parameter. It will be user instead of GET or HEAD when doing an HTTP request, or instead of LIST or NLST when doing an ftp directory listing. This is useful for doing DELETE or other more or less obscure HTTP requests. Don't do this at will, make sure your server supports the command first.

Restore to the internal default by setting this to NULL.

NOTE: Many people have wrongly used this option to replace the entire request with their own, including multiple headers and POST contents. While that might work in many cases, it will cause libcurl to send invalid requests and it could possibly confuse the remote server badly. Use CURLOPT_POST and CURLOPT_POSTFIELDS to set POST data. Use CURLOPT_HTTPHEADER to replace or extend the set of headers sent by libcurl. Use CURLOPT_HTTP_VERSION to change HTTP version.

CURLOPT_FILETIME

Pass a long. If it is a non-zero value, libcurl will attempt to get the modification date of the remote document in this operation. This requires that the remote server sends the time or replies to a time querying command. The curl_easy_getinfo(3) function with the CURLINFO_FILETIME argument can be used after a transfer to extract the received time (if any).

CURLOPT_NOBODY

A non-zero parameter tells the library to not include the body-part in the output. This is only relevant for protocols that have separate header and body parts. On HTTP(S) servers, this will make libcurl do a HEAD request.

To change back to GET, you should use CURLOPT_HTTPGET. To change back to POST, you should use CURLOPT_POST. Setting CURLOPT_NOBODY to zero has no effect.

CURLOPT_INFILESIZE

When uploading a file to a remote site, this option should be used to tell libcurl what the expected size of the infile is. This value should be passed as a long. See also CURLOPT_INFILESIZE_LARGE.

CURLOPT_INFILESIZE_LARGE

When uploading a file to a remote site, this option should be used to tell libcurl what the expected size of the infile is. This value should be passed as a curl_off_t. (Added in 7.11.0)

CURLOPT_UPLOAD

A non-zero parameter tells the library to prepare for an upload. The CURLOPT_READDATA and CURLOPT_INFILESIZEE or CURLOPT_INFILESIZE_LARGE are also interesting for uploads. If the protocol is HTTP, uploading means using the PUT request unless you tell libcurl otherwise.

Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header. You can disable this header with CURLOPT_HTTPHEADER as usual.

If you use PUT to a HTTP 1.1 server, you can upload data without knowing the size before starting the transfer if you use chunked encoding. You enable this by adding a header like "Transfer-Encoding: chunked" with CURLOPT_HTTPHEADER. With HTTP 1.0 or without chunked transfer, you must specify the size.

CURLOPT_MAXFILESIZE

Pass a long as parameter. This allows you to specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned.

NOTE: The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers.

CURLOPT_MAXFILESIZE_LARGE

Pass a curl_off_t as parameter. This allows you to specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and CURLE_FILESIZE_EXCEEDED will be returned. (Added in 7.11.0)

NOTE: The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers.

CURLOPT_TIMECONDITION

Pass a long as parameter. This defines how the CURLOPT_TIMEVALUE time value is treated. You can set this parameter to CURL_TIMECOND_IFMODSINCE or CURL_TIMECOND_IFUNMODSINCE. This feature applies to HTTP and FTP.

NOTE: The last modification time of a file is not always known and in such instances this feature will have no effect even if the given time condition would have not been met.

CURLOPT_TIMEVALUE

Pass a long as parameter. This should be the time in seconds since 1 jan 1970, and the time will be used in a condition as specified with CURLOPT_TIMECONDITION.

CONNECTION OPTIONS

CURLOPT_TIMEOUT

Pass a long as parameter containing the maximum time in seconds that you allow the libcurl transfer operation to take. Normally, name lookups can take a considerable time and limiting operations to less than a few minutes risk aborting perfectly normal operations. This option will cause curl to use the SIGALRM to enable time-outing system calls.

NOTE: this is not recommended to use in unix multi-threaded programs, as it uses signals unless CURLOPT_NOSIGNAL (see above) is set.

CURLOPT_LOW_SPEED_LIMIT

Pass a long as parameter. It contains the transfer speed in bytes per second that the transfer should be below during CURLOPT_LOW_SPEED_TIME seconds for the library to consider it too slow and abort.

CURLOPT_LOW_SPEED_TIME

Pass a long as parameter. It contains the time in seconds that the transfer should be below the CURLOPT_LOW_SPEED_LIMIT for the library to consider it too slow and abort.

CURLOPT_MAXCONNECTS

Pass a long. The set number will be the persistent connection cache size. The set amount will be the maximum amount of simultaneously open connections that libcurl may cache. Default is 5, and there isn't much point in changing this value unless you are perfectly aware of how this work and changes libcurl's behaviour. This concerns connection using any of the protocols that support persistent connections.

When reaching the maximum limit, curl uses the CURLOPT_CLOSEPOLICY to figure out which of the existing connections to close to prevent the number of open connections to increase.

NOTE: if you already have performed transfers with this curl handle, setting a smaller MAXCONNECTS than before may cause open connections to get closed unnecessarily.

CURLOPT_CLOSEPOLICY

Pass a long. This option sets what policy libcurl should use when the connection cache is filled and one of the open connections has to be closed to make room for a new connection. This must be one of the CURLCLOSEPOLICY_* defines. Use CURLCLOSEPOLICY_LEAST_RECENTLY_USED to make libcurl close the connection that was least recently used, that connection is also least likely to be capable of re-use. Use CURLCLOSEPOLICY_OLDEST to make libcurl close the oldest connection, the one that was created first among the ones in the connection cache. The other close policies are not support yet.

CURLOPT_FRESH_CONNECT

Pass a long. Set to non-zero to make the next transfer use a new (fresh) connection by force. If the connection cache is full before this connection, one of the existing connections will be closed as according to the selected or default policy. This option should be used with caution and only if you understand what it does. Set this to 0 to have libcurl attempt re-using an existing connection (default behavior).

CURLOPT_FORBID_REUSE

Pass a long. Set to non-zero to make the next transfer explicitly close the connection when done. Normally, libcurl keep all connections alive when done with one transfer in case there comes a succeeding one that can re-use them. This option should be used with caution and only if you understand what it does. Set to 0 to have libcurl keep the connection open for possibly later re-use (default behavior).

CURLOPT_CONNECTTIMEOUT

Pass a long. It should contain the maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, once it has connected, this option is of no more use. Set to zero to disable connection timeout (it will then only timeout on the system's internal timeouts). See also the CURLOPT_TIMEOUT option.

NOTE: this is not recommended to use in unix multi-threaded programs, as it uses signals unless CURLOPT_NOSIGNAL (see above) is set.

CURLOPT_IPRESOLVE

Allows an application to select what kind of IP addresses to use when resolving host names. This is only interesting when using host names that resolve addresses using more than one version of IP. The allowed values are:

CURL_IPRESOLVE_WHATEVER

Default, resolves addresses to all IP versions that your system allows.

CURL_IPRESOLVE_V4

Resolve to ipv4 addresses.

CURL_IPRESOLVE_V6

Resolve to ipv6 addresses.

SSL and SECURITY OPTIONS

CURLOPT_SSLCERT

Pass a pointer to a zero terminated string as parameter. The string should be the file name of your certificate. The default format is "PEM" and can be changed with CURLOPT_SSLCERTTYPE.

CURLOPT_SSLCERTTYPE

Pass a pointer to a zero terminated string as parameter. The string should be the format of your certificate. Supported formats are "PEM" and "DER". (Added in 7.9.3)

CURLOPT_SSLCERTPASSWD

Pass a pointer to a zero terminated string as parameter. It will be used as the password required to use the CURLOPT_SSLCERT certificate.

This option is replaced by CURLOPT_SSLKEYPASSWD and should only be used for backward compatibility. You never needed a pass phrase to load a certificate but you need one to load your private key.

CURLOPT_SSLKEY

Pass a pointer to a zero terminated string as parameter. The string should be the file name of your private key. The default format is "PEM" and can be changed with CURLOPT_SSLKEYTYPE.

CURLOPT_SSLKEYTYPE

Pass a pointer to a zero terminated string as parameter. The string should be the format of your private key. Supported formats are "PEM", "DER" and "ENG".

NOTE: The format "ENG" enables you to load the private key from a crypto engine. In this case CURLOPT_SSLKEY is used as an identifier passed to the engine. You have to set the crypto engine with CURLOPT_SSLENGINE. "DER" format key file currently does not work because of a bug in OpenSSL.

CURLOPT_SSLKEYPASSWD

Pass a pointer to a zero terminated string as parameter. It will be used as the password required to use the CURLOPT_SSLKEY private key.

CURLOPT_SSLENGINE

Pass a pointer to a zero terminated string as parameter. It will be used as the identifier for the crypto engine you want to use for your private key.

NOTE: If the crypto device cannot be loaded, CURLE_SSL_ENGINE_NOTFOUND is returned.

CURLOPT_SSLENGINE_DEFAULT

Sets the actual crypto engine as the default for (asymmetric) crypto operations.

NOTE: If the crypto device cannot be set, CURLE_SSL_ENGINE_SETFAILED is returned.

CURLOPT_SSLVERSION

Pass a long as parameter to control what version of SSL/TLS to attempt to use. The available options are:

CURL_SSLVERSION_DEFAULT

The default action. When libcurl built with OpenSSL, this will attempt to figure out the remote SSL protocol version. Unfortunately there are a lot of ancient and broken servers in use which cannot handle this technique and will fail to connect. When libcurl is built with GnuTLS, this will mean SSLv3.

CURL_SSLVERSION_TLSv1

Force TLSv1

CURL_SSLVERSION_SSLv2

Force SSLv2

CURL_SSLVERSION_SSLv3

Force SSLv3

CURLOPT_SSL_VERIFYPEER

Pass a long as parameter.

This option determines whether curl verifies the authenticity of the peer's certificate. A nonzero value means curl verifies; zero means it doesn't. The default is nonzero, but before 7.10, it was zero.

When negotiating an SSL connection, the server sends a certificate indicating its identity. Curl verifies whether the certificate is authentic, i.e. that you can trust that the server is who the certificate says it is. This trust is based on a chain of digital signatures, rooted in certification authority (CA) certificates you supply. As of 7.10, curl installs a default bundle of CA certificates and you can specify alternate certificates with the CURLOPT_CAINFO option or the CURLOPT_CAPATH option.

When CURLOPT_SSL_VERIFYPEER is nonzero, and the verification fails to prove that the certificate is authentic, the connection fails. When the option is zero, the connection succeeds regardless.

Authenticating the certificate is not by itself very useful. You typically want to ensure that the server, as authentically identified by its certificate, is the server you mean to be talking to. Use CURLOPT_SSL_VERIFYHOST to control that.

CURLOPT_CAINFO

Pass a char * to a zero terminated string naming a file holding one or more certificates to verify the peer with. This makes sense only when used in combination with the CURLOPT_SSL_VERIFYPEER option. If CURLOPT_SSL_VERIFYPEER is zero, CURLOPT_CAINFO need not even indicate an accessible file.

CURLOPT_CAPATH

Pass a char * to a zero terminated string naming a directory holding multiple CA certificates to verify the peer with. The certificate directory must be prepared using the openssl c_rehash utility. This makes sense only when used in combination with the CURLOPT_SSL_VERIFYPEER option. If CURLOPT_SSL_VERIFYPEER is zero, CURLOPT_CAPATH need not even indicate an accessible path. The CURLOPT_CAPATH function apparently does not work in Windows due to some limitation in openssl. (Added in 7.9.8)

CURLOPT_RANDOM_FILE

Pass a char * to a zero terminated file name. The file will be used to read from to seed the random engine for SSL. The more random the specified file is, the more secure the SSL connection will become.

CURLOPT_EGDSOCKET

Pass a char * to the zero terminated path name to the Entropy Gathering Daemon socket. It will be used to seed the random engine for SSL.

CURLOPT_SSL_VERIFYHOST

Pass a long as parameter.

This option determines whether curl verifies that the server claims to be who you want it to be.

When negotiating an SSL connection, the server sends a certificate indicating its identity.

When CURLOPT_SSL_VERIFYHOST is 2, that certificate must indicate that the server is the server to which you meant to connect, or the connection fails.

Curl considers the server the intended one when the Common Name field or a Subject Alternate Name field in the certificate matches the host name in the URL to which you told Curl to connect.

When the value is 1, the certificate must contain a Common Name field, but it doesn't matter what name it says. (This is not ordinarily a useful setting).

When the value is 0, the connection succeeds regardless of the names in the certificate.

The default, since 7.10, is 2.

The checking this option controls is of the identity that the server claims. The server could be lying. To control lying, see CURLOPT_SSL_VERIFYPEER.

CURLOPT_SSL_CIPHER_LIST

Pass a char *, pointing to a zero terminated string holding the list of ciphers to use for the SSL connection. The list must be syntactically correct, it consists of one or more cipher strings separated by colons. Commas or spaces are also acceptable separators but colons are normally used, !, - and + can be used as operators. Valid examples of cipher lists include 'RC4-SHA', ´SHA1+DES´, 'TLSv1' and 'DEFAULT'. The default list is normally set when you compile OpenSSL.

You'll find more details about cipher lists on this URL: http://www.openssl.org/docs/apps/ciphers.html

CURLOPT_KRB4LEVEL

Pass a char * as parameter. Set the krb4 security level, this also enables krb4 awareness. This is a string, 'clear', 'safe', 'confidential' or 'private'. If the string is set but doesn't match one of these, 'private' will be used. Set the string to NULL to disable kerberos4. The kerberos support only works for FTP.

OTHER OPTIONS

CURLOPT_PRIVATE

Pass a char * as parameter, pointing to data that should be associated with this curl handle. The pointer can subsequently be retrieved using curl_easy_getinfo(3) with the CURLINFO_PRIVATE option. libcurl itself does nothing with this data. (Added in 7.10.3)

CURLOPT_SHARE

Pass a share handle as a parameter. The share handle must have been created by a previous call to curl_share_init(3). Setting this option, will make this curl handle use the data from the shared handle instead of keeping the data to itself. This enables several curl handles to share data. If the curl handles are used simultaneously, you MUST use the locking methods in the share handle. See curl_share_setopt(3) for details.

TELNET OPTIONS

CURLOPT_TELNETOPTIONS

Provide a pointer to a curl_slist with variables to pass to the telnet negotiations. The variables should be in the format <option=value>. libcurl supports the options 'TTYPE', 'XDISPLOC' and 'NEW_ENV'. See the TELNET standard for details.

RETURN VALUE

CURLE_OK (zero) means that the option was set properly, non-zero means an error occurred as <curl/curl.h> defines. See the libcurl-errors(3) man page for the full list with descriptions.

If you try to set an option that libcurl doesn't know about, perhaps because the library is too old to support it or the option was removed in a recent version, this function will return CURLE_FAILED_INIT.

SEE ALSO

curl_easy_init (3) curl_easy_cleanup (3) curl_easy_reset (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/index.html0000644000175000017500000000540410265631023021726 0ustar danieldaniel Index to libcurl documentation

Index to libcurl documentation

Programs

curl and tools

Overviews

libcurl
libcurl-easy
libcurl-multi
libcurl-share
libcurl-errors
libcurl-tutorial

Library Functions (A-Z)

curl_easy_cleanup
curl_easy_duphandle
curl_easy_getinfo
curl_easy_init
curl_easy_perform
curl_easy_reset
curl_easy_setopt
curl_easy_strerror
curl_escape
curl_formadd
curl_formfree
curl_free
curl_getdate
curl_getenv
curl_global_cleanup
curl_global_init
curl_global_init_mem
curl_mprintf
curl_multi_add_handle
curl_multi_cleanup
curl_multi_fdset
curl_multi_info_read
curl_multi_init
curl_multi_perform
curl_multi_remove_handle
curl_multi_strerror.html
curl_share_cleanup
curl_share_init
curl_share_setopt
curl_share_strerror.html
curl_slist_append
curl_slist_free_all
curl_strequal and curl_strnequal
curl_unescape
curl_version
curl_version_info criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-errors.html0000644000175000017500000004472010265631023023571 0ustar danieldaniel libcurl-errors man page

NAME

libcurl-errors - error codes in libcurl

DESCRIPTION

This man page includes most, if not all, available error codes in libcurl. Why they occur and possibly what you can do to fix the problem.

CURLcode

Almost all "easy" interface functions return a CURLcode error code. No matter what, using the curl_easy_setopt(3) option CURLOPT_ERRORBUFFER is a good idea as it will give you a human readable error string that may offer more details about the error cause than just the error code does. curl_easy_strerror(3) can be called to get an error string from a given CURLcode number.

CURLcode is one of the following:

CURLE_OK (0)

All fine. Proceed as usual.

CURLE_UNSUPPORTED_PROTOCOL (1)

The URL you passed to libcurl used a protocol that this libcurl does not support. The support might be a compile-time option that you didn't use, it can be a misspelled protocol string or just a protocol libcurl has no code for.

CURLE_FAILED_INIT (2)

Very early initialization code failed. This is likely to be an internal error or problem.

CURLE_URL_MALFORMAT (3)

The URL was not properly formatted.

CURLE_URL_MALFORMAT_USER (4)

URL user malformatted. The user-part of the URL syntax was not correct.

CURLE_COULDNT_RESOLVE_PROXY (5)

Couldn't resolve proxy. The given proxy host could not be resolved.

CURLE_COULDNT_RESOLVE_HOST (6)

Couldn't resolve host. The given remote host was not resolved.

CURLE_COULDNT_CONNECT (7)

Failed to connect() to host or proxy.

CURLE_FTP_WEIRD_SERVER_REPLY (8)

After connecting to an FTP server, libcurl expects to get a certain reply back. This error code implies that it god a strange or bad reply. The given remote server is probably not an OK FTP server.

CURLE_FTP_ACCESS_DENIED (9)

We were denied access when trying to login to an FTP server or when trying to change working directory to the one given in the URL.

CURLE_FTP_USER_PASSWORD_INCORRECT (10)

The FTP server rejected access to the server after the password was sent to it. It might be because the username and/or the password were incorrect or just that the server is not allowing you access for the moment etc.

CURLE_FTP_WEIRD_PASS_REPLY (11)

After having sent the FTP password to the server, libcurl expects a proper reply. This error code indicates that an unexpected code was returned.

CURLE_FTP_WEIRD_USER_REPLY (12)

After having sent user name to the FTP server, libcurl expects a proper reply. This error code indicates that an unexpected code was returned.

CURLE_FTP_WEIRD_PASV_REPLY (13)

libcurl failed to get a sensible result back from the server as a response to either a PASV or a EPSV command. The server is flawed.

CURLE_FTP_WEIRD_227_FORMAT (14)

FTP servers return a 227-line as a response to a PASV command. If libcurl fails to parse that line, this return code is passed back.

CURLE_FTP_CANT_GET_HOST (15)

An internal failure to lookup the host used for the new connection.

CURLE_FTP_CANT_RECONNECT (16)

A bad return code on either PASV or EPSV was sent by the FTP server, preventing libcurl from being able to continue.

CURLE_FTP_COULDNT_SET_BINARY (17)

Received an error when trying to set the transfer mode to binary.

CURLE_PARTIAL_FILE (18)

A file transfer was shorter or larger than expected. This happens when the server first reports an expected transfer size, and then delivers data that doesn't match the previously given size.

CURLE_FTP_COULDNT_RETR_FILE (19)

This was either a weird reply to a 'RETR' command or a zero byte transfer complete.

CURLE_FTP_WRITE_ERROR (20)

After a completed file transfer, the FTP server did not respond a proper "transfer successful" code.

CURLE_FTP_QUOTE_ERROR (21)

When sending custom "QUOTE" commands to the remote server, one of the commands returned an error code that was 400 or higher.

CURLE_HTTP_RETURNED_ERROR (22)

This is returned if CURLOPT_FAILONERROR is set TRUE and the HTTP server returns an error code that is >= 400.

CURLE_WRITE_ERROR (23)

An error occurred when writing received data to a local file, or an error was returned to libcurl from a write callback.

CURLE_MALFORMAT_USER (24)

Malformat user. User name badly specified. *Not currently used*

CURLE_FTP_COULDNT_STOR_FILE (25)

FTP couldn't STOR file. The server denied the STOR operation. The error buffer usually contains the server's explanation to this.

CURLE_READ_ERROR (26)

There was a problem reading a local file or an error returned by the read callback.

CURLE_OUT_OF_MEMORY (27)

Out of memory. A memory allocation request failed. This is serious badness and things are severely screwed up if this ever occur.

CURLE_OPERATION_TIMEOUTED (28)

Operation timeout. The specified time-out period was reached according to the conditions.

CURLE_FTP_COULDNT_SET_ASCII (29)

libcurl failed to set ASCII transfer type (TYPE A).

CURLE_FTP_PORT_FAILED (30)

The FTP PORT command returned error. This mostly happen when you haven't specified a good enough address for libcurl to use. See CURLOPT_FTPPORT.

CURLE_FTP_COULDNT_USE_REST (31)

The FTP REST command returned error. This should never happen if the server is sane.

CURLE_FTP_COULDNT_GET_SIZE (32)

The FTP SIZE command returned error. SIZE is not a kosher FTP command, it is an extension and not all servers support it. This is not a surprising error.

CURLE_HTTP_RANGE_ERROR (33)

The HTTP server does not support or accept range requests.

CURLE_HTTP_POST_ERROR (34)

This is an odd error that mainly occurs due to internal confusion.

CURLE_SSL_CONNECT_ERROR (35)

A problem occurred somewhere in the SSL/TLS handshake. You really want the error buffer and read the message there as it pinpoints the problem slightly more. Could be certificates (file formats, paths, permissions), passwords, and others.

CURLE_FTP_BAD_DOWNLOAD_RESUME (36)

Attempting FTP resume beyond file size.

CURLE_FILE_COULDNT_READ_FILE (37)

A file given with FILE:// couldn't be opened. Most likely because the file path doesn't identify an existing file. Did you check file permissions?

CURLE_LDAP_CANNOT_BIND (38)

LDAP cannot bind. LDAP bind operation failed.

CURLE_LDAP_SEARCH_FAILED (39)

LDAP search failed.

CURLE_LIBRARY_NOT_FOUND (40)

Library not found. The LDAP library was not found.

CURLE_FUNCTION_NOT_FOUND (41)

Function not found. A required LDAP function was not found.

CURLE_ABORTED_BY_CALLBACK (42)

Aborted by callback. A callback returned "abort" to libcurl.

CURLE_BAD_FUNCTION_ARGUMENT (43)

Internal error. A function was called with a bad parameter.

CURLE_BAD_CALLING_ORDER (44)

Internal error. A function was called in a bad order.

CURLE_HTTP_PORT_FAILED (45)

Interface error. A specified outgoing interface could not be used. Set which interface to use for outgoing connections' source IP address with CURLOPT_INTERFACE.

CURLE_BAD_PASSWORD_ENTERED (46)

Bad password entered. An error was signaled when the password was entered. This can also be the result of a "bad password" returned from a specified password callback.

CURLE_TOO_MANY_REDIRECTS (47)

Too many redirects. When following redirects, libcurl hit the maximum amount. Set your limit with CURLOPT_MAXREDIRS.

CURLE_UNKNOWN_TELNET_OPTION (48)

An option set with CURLOPT_TELNETOPTIONS was not recognized/known. Refer to the appropriate documentation.

CURLE_TELNET_OPTION_SYNTAX (49)

A telnet option string was Illegally formatted.

CURLE_OBSOLETE (50)

This is not an error. This used to be another error code in an old libcurl version and is currently unused.

CURLE_SSL_PEER_CERTIFICATE (51)

The remote server's SSL certificate was deemed not OK.

CURLE_GOT_NOTHING (52)

Nothing was returned from the server, and under the circumstances, getting nothing is considered an error.

CURLE_SSL_ENGINE_NOTFOUND (53)

The specified crypto engine wasn't found.

CURLE_SSL_ENGINE_SETFAILED (54)

Failed setting the selected SSL crypto engine as default!

CURLE_SEND_ERROR (55)

Failed sending network data.

CURLE_RECV_ERROR (56)

Failure with receiving network data.

CURLE_SHARE_IN_USE (57)

Share is in use

CURLE_SSL_CERTPROBLEM (58)

problem with the local client certificate

CURLE_SSL_CIPHER (59)

couldn't use specified cipher

CURLE_SSL_CACERT (60)

problem with the CA cert (path? access rights?)

CURLE_BAD_CONTENT_ENCODING (61)

Unrecognized transfer encoding

CURLE_LDAP_INVALID_URL (62)

Invalid LDAP URL

CURLE_FILESIZE_EXCEEDED (63)

Maximum file size exceeded

CURLE_FTP_SSL_FAILED (64)

Requested FTP SSL level failed

CURLE_SEND_FAIL_REWIND (65)

When doing a send operation curl had to rewind the data to retransmit, but the rewinding operation failed

CURLE_SSL_ENGINE_INITFAILED (66)

Initiating the SSL Engine failed

CURLE_LOGIN_DENIED (67)

The remote server denied curl to login (Added in 7.13.1)

CURLMcode

This is the generic return code used by functions in the libcurl multi interface. Also consider curl_multi_strerror(3).

CURLM_CALL_MULTI_PERFORM (-1)

This is not really an error. It means you should call curl_multi_perform(3) again without doing select() or similar in between.

CURLM_OK (0)

Things are fine.

CURLM_BAD_HANDLE (1)

The passed-in handle is not a valid CURLM handle.

CURLM_BAD_EASY_HANDLE (2)

An easy handle was not good/valid.

CURLM_OUT_OF_MEMORY (3)

You are doomed.

CURLM_INTERNAL_ERROR (4)

This can only be returned if libcurl bugs. Please report it to us!

CURLSHcode

The "share" interface will return a CURLSHcode to indicate when an error has occurred. Also consider curl_share_strerror(3).

CURLSHcode is one of the following:

CURLSHE_OK (0)

All fine. Proceed as usual.

CURLSHE_BAD_OPTION (1)

An invalid option was passed to the function.

CURLSHE_IN_USE (2)

The share object is currently in use.

CURLSHE_INVALID (3)

An invalid share object was passed to the function.

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_perform.pdf0000644000175000017500000004675410265631023024352 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXn ?V^\F6-c8-I(m-y%9A>tgDk'"E9sfc>M4d?'L"X"Yh7'˦V-8-xnzXǡ#@ˋ}zIb L@Yh}VlT!j(%l0?!jԗ P~ʳ,nn|28%D2Iv f჉ξͅ= 51S:5qd(Wc;2mlfAצ̬)'OɟCKoUB'h q\ԅ4Vȳ9fTG֢2`top3ecXq֑HV#&cqnΖw7Wsi[q$lToY*@*$'}"sC םB){4 b+F~<<.nj9nQ9n܏ݞ#Hx/v.(R@e"\`p35NML)1/[uIH"21uz9w4YVݯ/wamA'/^>_f>$q<>4 5;`X+VW熢Р;pI^l/ol7L9o*BlNBm<{֦r{vN/nɓ/`F9;5d1qGV␇)V=kM;Elܱ[47O"Ԋ]8*DAjkum?xwť[PۼR/]-?fE'endstream endobj 9 0 obj 2047 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeWyX羞$SX͉&ړI[;.n vɾ'_$DT^ꂨszmp>z9)rœ•u"z\AH"($ SCL QL8X0wPT Nl]!*/W`59)ѹi1ӣ 2 37%%.a؛vl=6`X, [mĖb',ۄ-N]l>b۰ j+؛tin,c#vܼq0Nv /bcֲ{x*+ MNU&5mk'bw;a=Ԝ78d^{ ȍ|4ylWP$d]KYE ;88!dj\C2^uR ꊏЗ+FR׸yLtr̴ Ԫ-}]ԃ>ùP VU< kqZXc<UGP& ߳|=O%W8y9iRxZmy bg-[wf9&[#Y,UzPŰ=cok{.?;p[%QjED"ZW23d۩/T"`0WN|LjnemMxW4 F Su@x减 ;Hf% /8|e2?btF>48+1u<GHf Q&Qf1Yc8WPv-+S ~&58cɝ%:kS-orp|bԢ #( >9lh Oo^oDܼq[p&vp9_Y9٘DNa~:/7=9{86|3Ԕ:q8 *jFqđgw*]O3Aʺhv@1PX]}[K84C=?]f(~I}w-8ZZ8ȱo ~ьG.~, L Og9*vW^Ԓj} ؁؟̚2QڇQ$#ie+m8ęog\adaPr؀Zl(2IGof xNB]jBdaMJj0Q8d8 Upك7 hbxfk8Z@h3?}B¡\bwc>xnNo& ]:gC-c<7!.FDҘƥu^ڼDcu|n BK 4 ;ܾ(.?|d4]Me%EOQhc\[3XrE1(Wp$x:a*`qߘpAþHE7GS7}W >8cb+G\-(%H=l 4gzaX%\6~`|2).j;2 8_\LJ 3;=/Lgk8˜MpiW :l2Ftt[u5jwN-ڛN-ٗ_|)]M,ϧ٣S8j ȣuXM+ٮii>VA z}dK_WE9~:Yp},cYjy U ll.ܗ'jh2<46x(ѓA̘& *}AqZ (c][JxiҍQ9\Qq Qn0X*1kB04xRP0pLR&\/1 ˒a \Ίpib"Hy;0iG#m-~C].-7?R-yā2E&ZƼVɓ;*D :P cյS/v NgNymL0شN!0aK?6{0I(WnQ7gN}k{zy>Žu U6jߟ>S@ >zʱf[<&g׃]f$Ħ|r뇝~_ VN\j&{WM ebi&Qt@T paQg_ ^Z'yC_]f4c%۽ګeԂceqZ6HҬԋTH,hG6v Wu*`Q=XA3P, ^+ L#;;lP>*!c^N]򅑣={/d 8|9!c#3rQt@m+%ygyF\'铬`Rwql?E'B_$Qˠ(!6*U$%:?O4fƏn^ iN XEn'k`Y[@|Mb17 EUǯ8tUJѤ0DBNsɢSwE`a:hXL& OZ(Hmk_ڽ$I+COwᏘN8{/ C& KURZp:4*RCd,(35:ADqgnI_@l.#xW=l Y_+Bb4FNFb HZ p͵ @)xFaSO^%_:z82on)Vj&cnzTF8|,'3HfiNVߝu`OW?5xGa} -_BmGֳt2Ut& WԊ]=~~tqiHM)- }v n`V$D,jҌ@ˮ&N ']?7+a0.,um;-L9;yۖxJ#t>cF#‡__z0v>LKH.NO!sdopZ@Aůҵ”})zks<_x`_eIao#=I ngp鎶/NrO/ .C8(g°ևo )\d®MomUEGkMxDIZ̺ ^sOaCU endstream endobj 19 0 obj 4056 endobj 20 0 obj <>stream xeW TYT<$(Su{VqQ HLX–^"{H.4یض[{c/:v;k_;-gsTU/5u %ic(Z/٠Q'_*sD|]/ijջ3i~lpYHd:7j:UjZIQRPfj)5B-=T4 R۩>j%/**@"(JPDZM4 MeVL#oG[YLóǦL;}/7M̧3\3cfվPO_A$N_NHLٓb# nfg5,C|Vyg' x77:FӾd;ovfKQ2:۟UyZ ghB٫Cp0jzrwdjqjAmuZ ͉lD0/] VDBp2N",$]@x!, ٱt Lgp<3 'ǂ0 u> ŭ/KP.oQp5#nXqL܊mEDS"Vw:>$}s{_-[RގXco{wzWJSśM ґ^'vԄp e:O5ZLUiiQ.} ܈^5FYJ6*=~OlCX/\}#}ɊWwRq?~?/o)DaD#NAƼ嬸 5(=dUM]qiRɖ-0O`j; BG6HG߫l{:nSlLdo ޚIRD"v[P '7aG"L'b8 E`s8#DNS~_̟)Kn=.o4I,1 hs25ftxUWo)lil]szΎ\([s]WïH_]Ds *G%' kY1=&gm᫷ +/,G2#agR -vn=YjQцnesbߺdw9ٖnۜ!mk̷ű̅30& 4i%zq|d4c h{!4Q3!G-Ehmdx'`7Iwސ@O_JVm%k4Xܜ(Jȕ)PYB8@t:K/=0$/t e2rLhsK>E0-HN/|^ya"`<R~s $RױDk!ʮ,u::beRhV;dWR]c8j̭C2O/v~1| ',P(xhi})J|C!KL(TdjM-h *OKKuFܪx![ .8^oDP>MH 3)++ 3WԑgXspК%`GpR@s6 Ӵ:Xa++8# ~8á7 ~6zΐki_=˱] ~St(qۜ5wNx}t}!+xr&A+!1+;xr\ъ}QPxO4 >aV yO J/$@~4#DŽZ84nTMbG󠢽ɗ<"Nxy[t~[o2k#mٌ}ހ )1[D.\[~qn?D/@u x& Ev$G TUoX~ U~I*IgޖTUU .W*ޡ':uC=ξf]VPeEVK!`ԃy):2n;NԗqP?"fKI2=")7Kz;7jƞ-̂joknhlEY[>lL5*V(h,#'K&PZJ^NnyRffJsD;FVc"(:98ht\3fsLo@| endstream endobj 21 0 obj 3437 endobj 22 0 obj <>stream xXyXSW޾1&V⭉ M[7B¢%!YHBV! $$¾#nkkuע}39{;3ys[]1ybqP$.}wb<ހ 4<'e2g@i8 f>x^JNL34%~ g''?Ӥqz xvZZ{~ilxqwٮ4q i߼-_-]-W"Β.KNOHNOQťm$qb IrN ޖ,ٟ~ۤ~~ܴ;B`E{[gg&lJN IM '/u,-ndī^+[` ^]咥sW> Qv"XD 6ob#OW0b3NCN$%v[ekDLI&6b=@L%%,BBM&&&kg/#(BD$o(.+2iƤIw'9yCsd8`)WfMy}O?ԛO]!}ڟ~鯞Ẏ3|f&&N"yɼf.Y7w9Gg?Y,֬u@2x|z<\hXR&Ň+Nc1|rݵP+'ojAj]!%'^QQ72h4GP"*rԹmWEJ%RG$ruf\ L@_m %rdC}tZ1 {Ynfֽ14Ʈa^f{PU(*#AVR$7BU (x=<=,:=f\'"IPY}{<:>8BN +P42'Q>SAQrBgXGMF^W!WU(/3M,mgu| ]_Gg#!+~+YC3E)=v~>zqnZ<'̿O^['GP6Ɔ?h8$Tb@%#"5'i.v(둓GK\џ,GHN_wC.-WW[Ey0筍'*xOmλ7V;0Zi"{鲻**99P*rU`+$'hFAa2 &<s$ Gg|0Xb05Ȁ*kTMdҶo*^$sى ~- @i}JQ6I}ҾMwSgO7$NuK=Rږ*`H7s}4bl Pl=$w Dh;L`awM.Sp ٛҬ;(8k8 kaY;cEISμ$MR_[Cw7rjD!vԚ{B:JwC,t}[@(ב~V1`)H\]GV/!D= qA B 8$Dwq@Ep4KoP8>X YlK(faѹ/?ǧA?S y=y(ROGu-hء(g)rr*v.+b$aC3zG0l>`ަy?Hd|~{L">L *P"ë Ż|%סh]r)i deyW8ԍR6 }#sYzɋOC{5ҥ k2uj5Ŷnߺ+#&SkH,]A>@q:mz/X:dY7)apـwboRn$"eq\p5 rE*Z`LX=”r+ K&xpmSDrBi*LIȀ UQ<0{םni=tR8U =֚m*Ϫ5Vjg!wW[OMn 'f={cG:q^8ds:.A >;ժ뒪c@<=fI%xm^ѼE9[R7 ʵW[[9gea=Kf4AltwrQ.k7iR\^0w6{Ey5WI 0͹kdz{FC]#g;6 '9Ym8C#:ޒAHI 1;J1ɿŝ~kG\!(h]8wuȹ7 v-&6`J}'{ c!/ztq'G4vr8oad^\\d_B.LӻY+q^j6 zި/MFPJ%)tsc'{G^R  "8 Mb^~\9*β* h~R2*i7z _&߱sCr7̣3rrƜƎtWcZ1qKBn=ɻ*u B$ڌܴ S5yإ1+M8< +J9N̝X8dbBf+ K]f*%$X]tjΦlP4T(sSrNIoDW[ac~<Ălh'bxXvO)4 Qф&Q\\ř5Ufn3d5yd~.$6 h cKDZ%sk ڧ.WM `>MXrgz[%w[@W+CaUUX8lf,wȁn%8 Mf`UX V`6΄7WN3{X0ri؅T]-#ADqz/rjܤr `0 vsQyqyXP3@!כ rLwscih!hK#wMSsKE@ zM>@ !%̸ di;G%'jr\ a(ΗdDoI[@Tsƨ$qφWɻ&etDkUu꠰PO|{YE0ڍ@ Tlm_s#4:l6X_TiV?σ"{@YE6Tw9;~RmSn i] &+؀fu̖zqqreeXHwXe`Z\#uvpb>PuOZs ٷ}lV U"Aܾ}n/\S/kjno(D%UFu7kK)FE[}bML2;pN^Z"Z5JZ> [-*Iz`XTAS?3̒YtuTΒjfIn-8\}o |_ȪYo{O)lm[kNlPBx9Q̇p+5W-¾2x$ =t+ekU~Y.Wbg]*`/ +6[Kpm/7&a^]uV7Z(h!;{Fu.#@qj0$,k' Bvg*&@ntw*"u3.>ptay*ðG#H5TMԐiSAc8 ^m!Q2Ƀ}' vM-B߂ OyXx{,i(ӂ gI 5%}cYo0y47O{{z9yԮ?'zKtc]ѓfe;aSJB!9q|cb}]vȂSv/nGq? g&G3# ے4ovsm`I'y. _cw{4ͭf|M+$" ++BH& Qy[5JM9v,hͱm'F4uHáMhjw_h򰡉I)LdQQZJV4yBPkd#mōE[%P .wck[S3k vmtIURj,IVnnJfkꩨ!F&Sd kОb! >YsA%B*_]>;uߟo5( @4TY<ŽfYzq`>)\2OcpYF_E`VV:MUh\G]"TEl[N$hM姊Xcz a.8lԺ;v4'{2ގ]x(}̨Dd6}ah``1;qNp;Z: .s _|Ds"@Oܛ$ʬB[9e&C4agț.q ñlxYOۆjnU]Fy]N\~v{xD7Lngu~ ?p걿޺p)FӖ oA̡rC 2)x@V D@ *oqtGf8gZޒѕ*7#g,&6sp6og^v½ ɗ4p7 *9i8{tyHChwlnmfgyő^S7?_ςC!El\\ YA)79Q_4wTb.qʄ01"M =}õ} @ (f 3#HlYaK1Uzuqc:ʲ|;8J1?> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000002380 00000 n 0000019229 00000 n 0000002312 00000 n 0000002734 00000 n 0000002586 00000 n 0000002428 00000 n 0000002152 00000 n 0000000015 00000 n 0000002132 00000 n 0000018771 00000 n 0000017498 00000 n 0000018474 00000 n 0000017028 00000 n 0000018157 00000 n 0000016558 00000 n 0000002502 00000 n 0000002532 00000 n 0000002881 00000 n 0000007023 00000 n 0000007044 00000 n 0000010567 00000 n 0000010588 00000 n 0000016537 00000 n 0000018058 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 19369 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_version.30000644000175000017500000000106510265631023022526 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_version.3,v 1.2 2003/08/11 23:07:38 bagder Exp $ .\" .TH curl_version 3 "5 March 2001" "libcurl 7.0" "libcurl Manual" .SH NAME curl_version - returns the libcurl version string .SH SYNOPSIS .B #include .sp .BI "char *curl_version( );" .ad .SH DESCRIPTION Returns a human readable string with the version number of libcurl and some of its important components (like OpenSSL version). .SH RETURN VALUE A pointer to a zero terminated string. .SH "SEE ALSO" .BR curl_version_info "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_escape.30000644000175000017500000000171610265631023022304 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_escape.3,v 1.5 2004/02/27 15:34:06 bagder Exp $ .\" .TH curl_escape 3 "6 March 2002" "libcurl 7.9" "libcurl Manual" .SH NAME curl_escape - URL encodes the given string .SH SYNOPSIS .B #include .sp .BI "char *curl_escape( char *" url ", int "length " );" .ad .SH DESCRIPTION This function will convert the given input string to an URL encoded string and return that as a new allocated string. All input characters that are not a-z, A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a two-digit hexadecimal number). If the 'length' argument is set to 0, curl_escape() will use strlen() on the input 'url' string to find out the size. You must curl_free() the returned string when you're done with it. .SH RETURN VALUE A pointer to a zero terminated string or NULL if it failed. .SH "SEE ALSO" .BR curl_unescape(3), curl_free(3), RFC 2396 criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_perform.30000644000175000017500000000424210265631023023725 0ustar danieldaniel.\" $Id: curl_multi_perform.3,v 1.6 2004/10/03 17:38:57 bagder Exp $ .\" .TH curl_multi_perform 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual" .SH NAME curl_multi_perform - reads/writes available data from each easy handle .SH SYNOPSIS #include CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles); .ad .SH DESCRIPTION When the app thinks there's data available for the multi_handle, it should call this function to read/write whatever there is to read or write right now. curl_multi_perform() returns as soon as the reads/writes are done. This function does not require that there actually is any data available for reading or that data can be written, it can be called just in case. It will write the number of handles that still transfer data in the second argument's integer-pointer. When you call curl_multi_perform() and the amount of \fIrunning_handles\fP is changed from the previous call (or is less than the amount of easy handles you've added to the multi handle), you know that there is one or more transfers less "running". You can then call \fIcurl_multi_info_read(3)\fP to get information about each individual completed transfer, and that returned info includes CURLcode and more. .SH "RETURN VALUE" CURLMcode type, general libcurl multi interface error code. If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means that you should call \fIcurl_multi_perform\fP again, before you select() on more actions. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied". NOTE that this only returns errors etc regarding the whole multi stack. There might still have occurred problems on individual transfers even when this function returns OK. .SH "TYPICAL USAGE" Most application will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's file descriptors, then it'll wait for action on them using select() and as soon as one or more of them are ready, \fIcurl_multi_perform(3)\fP gets called. .SH "SEE ALSO" .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " .BR curl_multi_fdset "(3), " curl_multi_info_read "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_add_handle.30000644000175000017500000000211310265631023024311 0ustar danieldaniel.\" $Id: curl_multi_add_handle.3,v 1.4 2004/04/13 14:27:47 bagder Exp $ .\" .TH curl_multi_add_handle 3 "4 March 2002" "libcurl 7.9.5" "libcurl Manual" .SH NAME curl_multi_add_handle - add an easy handle to a multi session .SH SYNOPSIS #include CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle); .ad .SH DESCRIPTION Adds a standard easy handle to the multi stack. This function call will make this \fImulti_handle\fP control the specified \fIeasy_handle\fP. When an easy handle has been added to a multi stack, you can not and you must not use \fIcurl_easy_perform(3)\fP on that handle! The easy handle will remain added until you remove it again with \fIcurl_multi_remove_handle(3)\fP. You should remove the easy handle from the multi stack before you terminate first the easy handle and then the multi handle: 1 - \fIcurl_multi_remove_handle(3)\fP 2 - \fIcurl_easy_cleanup(3)\fP 3 - \fIcurl_multi_cleanup(3)\fP .SH RETURN VALUE CURLMcode type, general libcurl multi interface error code. .SH "SEE ALSO" .BR curl_multi_cleanup "(3)," curl_multi_init "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_slist_free_all.30000644000175000017500000000103710265631023024027 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_slist_free_all.3,v 1.2 2004/02/27 15:34:06 bagder Exp $ .\" .TH curl_slist_free_all 3 "5 March 2001" "libcurl 7.0" "libcurl Manual" .SH NAME curl_slist_free_all - free an entire curl_slist list .SH SYNOPSIS .B #include .sp .BI "void curl_slist_free_all(struct curl_slist *" list); .ad .SH DESCRIPTION curl_slist_free_all() removes all traces of a previously built curl_slist linked list. .SH RETURN VALUE Nothing. .SH "SEE ALSO" .BR curl_slist_append "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_add_handle.pdf0000644000175000017500000004021510265631023024725 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xVn6}WCŐIQM/ɮ"pC]lGgx[˲- 9<:sp2E9o6;DՖ(Z[ʕl#>Se8/Ε[LCsN󲼮lg}^*wW8M,寮Ad8>B`@d":C6 q J=[}="Ly~C<Y=ʑ E#Ǻf< 'ŇvAD(uW4S/_e_nNϊ"k\D%yz*AGAd;.CIT*%FYUh7uP7 Ϳɧ1L%p0c\M][YdK `ch]\~7X`?MoyQa,$5^|zl`ną%^FPTQIL>&4RxcۼN, FU(m@M}*`Q-8u`GqMXYڒIhעZ Jȩ]70$+S̞ͳ=T)Z|z=tƞk?<ؔ,ӱꧦ|.t"Mc٬y3]nekK$\UK𡭻\p}'qiS!n-eyjbK=;m0c`*RQ2Y< g^9kp{?,s+(r7rs\QiGZ%X2nfscTx']Pa$a }"\bF~q>v1r JX&3 (]Ρ)@<0mYU}H =6QPTȇArh;ˍʕu>:$endstream endobj 9 0 obj 1002 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeV{TSG1&\jJM[WZ+m} oDPDD!!nϛLBH@ `(+-ںm϶uם^ٽg3̽g曙o~~0FֵtY rߨJ%kMboN bRs ?aUJt8<  ݯ!LCSֲ>K͖3y[`zFGG j;"HrG%f)d"r`=m-ZEF@&JK(e b%RB[`ْ%Kߧe$9,P.ؖ-"slNS $W%{ylGb8dE>Ev" F$لBv#[u6d2A^G&!Q4xD$Ęϰ1MP0g0),B"EF7L<)fҞI&}b$(ɓ!f-=t F!;@E8$Bo)*[ԅ#FNbaF >&ĥ&4^rj~/Ʀ Zil XМh}8Tyvj>%PK^Hx2E%ze&cn [:7j:Ʊ3%0d*dr,y5[V8!|>^6 FRkKrO| k U /J alsǭaOiAELAE),M 7Ca0b_^QNh5T:k Ep=1fځ5+q{y. x`OwE,XN: vS Jw4K>g4`CqFCƄ 8)N~! ` p~(xfSKhj ; >͗|Js=}2\)Ո2,=CPFf*5Lmj5w.pc/2Wp(AxFkX~'amJk6 ߀7Y.haQ.hiF]sZ\`^]SUYݑސOّ̗$_7G[+@;¼BG͚pRS ST8:ŵˋ8@KZ=* ^քa7hB!f ήv8qrvayΐUW.]=:"&A=9s@SzGh9K϶N=Wgfu{S> t%b'*2\y AzGRR#Aɾ$E$~j4؊/Wa?Vh>mSFwp 0ٶxhezGEvz{.5E,pQί}F+K$ NKR 6)0Wͤϑk O=q:a'V;?-iLKf&.S . ,<̚hnnmxro$oq,’q7}#53ƹ[L ܜLlә-4P 07}o95F.&h]KM/W7uw4 UYBeVjju ] M ?3A iwoim΂#T8O-m_ P8 ",NGAl.r:V:t(mMR6&\*6Ԅ~r 3L(+[\[B-;,-P|7~[oUЁ *XK~+0)fZif m3^ ZGYd'Pr-&3aGHWahgl4gC6p F0W[2e#U3*ƘdU&5 ꂟ5|Qlak퐇SQerT+|0T^bl謭~O7\9 ~59vmB'h񧧾:/tj<Fw76f™%Vѩ((|o%(gK4j.ypo,5v486edt4+u<6Ԧ3))&̆$,\87p1ZܒI2`$\=?|nt#@MѡvPyty2tH?`Eg\D_9 J.0h7kulUp (ZG $nLL̀mKe[XPOtz-'x5޽xHe`,y('ߞ(T1-K J7Cw^)2A \ endstream endobj 19 0 obj 2819 endobj 20 0 obj <>stream xeV PSW(*ٌP5I;-Z_Q(>*// Q NE TV;Ql;mmkݺvdg\Ywwf3w_LH$?l H #4E:m}0G"̝"sD"63Y,d$űI1h2~oE.XYfel'tMbҗ^d:}:-5&j┉}RR_ۥҪS[5Z^RmZ|eeJ&563]KU)uk u&30 3/pcZ\ОMzu- MxfohURflf3k%̋Nf+yY2r f;ŬdȬbU&09ŐD2ISҧr qheSf{.MAQ}7-bZRMx.:wZ]iod{5&L$,SQ!$/ǦBOç̲SJd $ * OgK늰 sVGt(sp 5V܏cuZ RS:F|A5ͮքDBB f KA"KP,hE}˩c6k٢)=яN+/'s?O^$`wO\VxNzV%nε?d. 7"|s-$szF Gdu'{f‘ȥpp] }sk,VMf͈\i=v et, JIkL+L.q`_Xłk0fQɇ;R^\Al8:I!ĐXO|!-)NGFQ{K)voaHC!ǖ+lカr;MBJB3vjGdX؎ј#&3uai Ƃ+%/̒xvATkP-* ݣb|Ž,\Ma +%EL\ lʸH?F>ō|3rCC: - xGq~HE"h IJKTS،7YLR*'yxgxHC)w#PaXm{ # RS҃%%TiUzz=Z>a)ߪqֽw/ܛ(ZP^:_:D%u7S 2Lrv㑳ƄI4vQO'l꨾~1QzC\$*h,1%'guQ$4;SR[,k |4Xm Յ]m. LfJʜ$.8%o9݄2At̞D ~[K\9Xo>>0p7KM>[ж瓮fP@'$D XپJ[N@ctTN&H^+U A^<)PQSRɊ*++S-)"K Ù.GosYSMQ\_ieܩp#qovzWLj&s.m}OްxnD"/tRN ^>{6v%Νb{ZSp^ean / 8Rш>0p7@֕P F+Ǖ榱c'脶!5ɸI=Dz§eԠRboSTfk9ւikFȓ)-lJ5j:Mֈ-OBOBUBZLFۓ]:cG>stream xuXw|SGBHB(H&$ lJ)`0&$ƒ%ْ%ٖ{mj= zewF{S3sw#1{`0wm1bQ(8Yq ^ȠE?4"?BYM=;Hx`2}&f/ҥU g$8\& ^ERX$_gggg](K NNI%gfdgdRyWW\j9~[.xWX+]!I͐d'KRwEi@8#?0͕ޕ!>\W׼\v CWV_zKb9"@&‰b 2Il%v"xx%#5^"Il&vaD%O BLy,"""fs|y"BbuYYN31g/"YɬlB(@}5g8:?p57l~S`@00&0+pY)@CSxGF߀*&_JO) vf}@HIsFЀevkjz[4%'fVT* 8L,<LvEr&D걹p zG9@ J i-tr! ;!:Ytxs0|YGȵ[.@u֨Qz;RJ ӽ*u-`?ybP'[" "x/`Ղ,$OpӁlՎmɒP);1ܤY]LE%-/ P+w<}Š[ Mkpڄ}$6B_cGzT?l2 SopIӮA}>rMQ C D9TD[X(AĭHFbt>rCjzac:՝?CϟJgW.EE0>( ^=#Jඍ)GB院 ?L\LudtЋoY7N w1L:Pk*$| N޺s8 gv,z5.*g*A0j3SkNS'=_ p$x`XYwGhj Ƒp _t?`uq: a,`NF(gfyN@mUP3fN fkNG]z[㗿 6+xh8ddR3zR{?K\ = .k5P~ap:{=fJEr԰RW)l5- _OokII»+Oƨo|Q1l`O z &sHDC]æ.Е+<дăe Bk 틐8&@2^epJoR!Ža]Sb_ 7y A]NP-;dr9IiЬ/56جׅ%CzMk0 qg頃kMe-jJxi/3ymV`;z^Sbp 4.P>ycF$?mZ;)Fd)!w܋=*q!H%v'Goh.jW5jO_7puxYV cFSEE)QꂂEuB怢>d󓲤2Jآ=O9ht8,ž36`(mXx 7N"#i ttX"~|Yqw׏T[!J 66;:S &&֞$"1vC-^ )}C-d,M-qEVSҏC;w LQPNŹ{TҾ|!g u)ٷzNMonmt7fi nR02 aO'#pCiJtr0=yew_fg,0FAs(To2@ (,Sg݇.n='к*C৪; _q`^} WcXjLصwe ΤaV件bܐ\Y~Tڜՙ"[~6 Nby%z\#sV@&Ѧ/Bȸ=p}Dzf :j4PU(n>hv9&IjrVP:•(zJN䃦*$8(4AǓ.?tA~_qAvQHr@KGU$xt;ø{ $?>,jln)J"sdE# pxs:&Y܎DQ~.Qzp6{aPd!Bexqq Ozآm#|xsS.mܗ+(< TAƊ{+nz'2>opKZV_˗Y^Y:RcLNב_g>p| >wE%(qG&;6 @{ ockGO4 9)!flMfp~ب$W8ByhL?ij(i+R$Ox ~[uu,/kqvBq՜uA\v#"q_#t$kGuI#.2 >bae2CqLo<>|"yo #scv;`1xI"%Ep܃ 8u ߥp>vXjDHF dzKʪ{GL=,Bh Zq.W4w{fS?t<m >&4ӱJEnh3RS:d/s0Ft5 ;2m@5yjWCbϪͩ+Nvv Q-:Z rŹ:S)NWWU\TSQBV+tUvi2JKuV]u"E^Q8d6.pn`Jrtlg6Ќk3n<[S?Oݓz :;r 2/]`_>$ℨϫƝ%=lӻGXΖZyI&I]Z5ǭ=zH>mkO&o} D$ ŇuVWD߼Šc1ܧ=hq}9b6J1Oe 7v\NLjQv@%.*vsq456Uh#a8w`t3#S!ޟ_ +"xlqsAwoKsww^o]e@'7V\%1ҳ;Bӏ̋\8}w\O9X-D7߂ĹcuG P"EQojNmKM6W8[_ܜlI[nWO{[WONX{f=tl.f7 ֯^cwÃHd!>g"17bQ Q13Q6f`_/l$\^ wO1SebLX ChhTrd* u6CV`[~?z_-lV?ѴO3ZA# ƀdUjzdчLD%λN !< &/nEHfMo0ACeINhX X332q-ھ!km*K uJfq~QmԔ% Z\_Y'(+w[ LZ jmQZALzl黑;TAV:KT;`燎<+֮(˝.m*'#CP4~KO_ 7n.W܋HqDm Z&њ*7?yhۏN'_ IYY8g?h Je꜂R㱤4uZnP,y'6%sRx&dWyhb{:޺k;ˎ+Wo^t\#idw'y_v endstream endobj 23 0 obj 5333 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001335 00000 n 0000015806 00000 n 0000001267 00000 n 0000001689 00000 n 0000001541 00000 n 0000001383 00000 n 0000001107 00000 n 0000000015 00000 n 0000001087 00000 n 0000015363 00000 n 0000014139 00000 n 0000015076 00000 n 0000013679 00000 n 0000014774 00000 n 0000013221 00000 n 0000001457 00000 n 0000001487 00000 n 0000001836 00000 n 0000004741 00000 n 0000004762 00000 n 0000007760 00000 n 0000007781 00000 n 0000013200 00000 n 0000014689 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15946 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_getdate.html0000644000175000017500000001222310265631023023256 0ustar danieldaniel curl_getdate man page

NAME

curl_getdate - Convert an date string to number of seconds since January 1, 1970

SYNOPSIS

#include <curl/curl.h>

time_t curl_getdate(char * datestring , time_t *now );

DESCRIPTION

This function returns the number of seconds since January 1st 1970 in the UTC time zone, for the date and time that the datestring parameter specifies. The now parameter is not used, pass a NULL there.

NOTE: This function was rewritten for the 7.12.2 release and this documentation covers the functionality of the new one. The new one is not feature-complete with the old one, but most of the formats supported by the new one was supported by the old too.

PARSING DATES AND TIMES

A "date" is a string containing several items separated by whitespace. The order of the items is immaterial. A date string may contain many flavors of items:

calendar date items Can be specified several ways. Month names can only be three-letter abbrivations, numbers can be zero-prefixed and the year may use 2 or 4 digits. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.

time of the day items This string specifies the time on a given day. You must specify it with 6 digits with two colons: HH:MM:SS. To not include the time in a date string, will make the function assume 00:00:00. Example: 18:19:21.

time zone items Specifies international time zone. There are a few acronyms supported, but in general you should instead use the specific relative time compared to UTC. Supported formats include: -1200, MST, +0100.

day of the week items Specifies a day of the week. Days of the week may be spelled out in full (using english): `Sunday', `Monday', etc or they may be abbreviated to their first three letters. This is usually not info that adds anything.

pure numbers If a decimal number of the form YYYYMMDD appears, then YYYY is read as the year, MM as the month number and DD as the day of the month, for the specified calendar date.

EXAMPLES

Sun, 06 Nov 1994 08:49:37 GMT Sunday, 06-Nov-94 08:49:37 GMT Sun Nov 6 08:49:37 1994 06 Nov 1994 08:49:37 GMT 06-Nov-94 08:49:37 GMT Nov 6 08:49:37 1994 06 Nov 1994 08:49:37 06-Nov-94 08:49:37 1994 Nov 6 08:49:37 GMT 08:49:37 06-Nov-94 Sunday 94 6 Nov 08:49:37 1994 Nov 6 06-Nov-94 Sun Nov 6 94 1994.Nov.6 Sun/Nov/6/94/GMT Sun, 06 Nov 1994 08:49:37 CET 06 Nov 1994 08:49:37 EST Sun, 12 Sep 2004 15:05:58 -0700 Sat, 11 Sep 2004 21:32:11 +0200 20040912 15:05:58 -0700 20040911 +0200

STANDARDS

This parser was written to handle date formats specified in RFC 822 (including the update in RFC 1123) using time zone name or time zone delta and RFC 850 (obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the only ones RFC2616 says HTTP applications may use.

RETURN VALUE

This function returns -1 when it fails to parse the date string. Otherwise it returns the number of seconds as described.

If the year is larger than 2037 on systems with 32 bit time_t, this function will return 0x7fffffff (since that is the largest possible signed 32 bit number).

Having a 64 bit time_t is not a guarantee that dates beyond 03:14:07 UTC, January 19, 2038 will work fine. On systems with a 64 bit time_t but with a crippled mktime(), curl_getdate will return -1 in this case.

REWRITE

The former version of this function was built with yacc and was not only very large, it was also never quite understood and it wasn't possible to build with non-GNU tools since only Bison could make it thread-safe!

The rewrite was done for 7.12.2. The new one is much smaller and use simpler code.

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_perform.pdf0000644000175000017500000004331610265631023024150 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xWmo6_A`&+R^a@y@4g@bӵILEFw|%;6H t{_Q _׳}QGߺFoW}+y! 1ZgwoϢPOEm)?QU'(P4}QMS9 Z]̂7g~L89 f|XWåf "i(D[WumѨhQ!Dg澛W77#;0lUg}k~TVwˋi`sqQdze/GaͦG3gqlԯw&)xڕ mfݕA}]Tؠbۉu;ʦ>pN S(RbF(U @ug} W"CL2p'Ph#Ժ-!1i@0')սн)ngLUQJь$~RPJLZJq5 $4bG$hFlt%tnl36Lsrmu4 HV ̓xEf\Բo:$G|H99=D"4߿ߕ*/C--z= `:@Z:pd#@7kR ܪP7aa"zc'z#8Q̹F}[|:<؋3$ՠDiVޙJ"ɁP)Y6 p 6{\E< QN@[q@ /Tge3[L2|qΪ! `tbKwzw}kKi.Ŭ{Aa9q@5ߢ6m $Gw+uCEп>Usj Ѳ 3 {Pr9gQp|kLrYom4ܰRa3F8 :xvJ@x|~ 7,_|)a[j0@fRt}DnC)3.X{=j4L#r$da@o.n^pM z=1Ύ- BS_Bj 'zUuIp_bl_GsXgendstream endobj 9 0 obj 1566 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeVyTSW1&<%M%業V-nB]h]PDZB$ a /dEP,Z[2.贸ug9뜙G̙?ssw}]6u b^LIKd IYjəW,)lN$Lϩz鹗ٰ~&t,mcJ#f'ҥ72**JtH&IL-d:j*ԞsGK)q:V#Ά,89ɠy! MEpIQPУh؋( -YwaͻBp9ē \AgHop؊RC6eEw b 0ZK|O{@1Vդ6O֡:[6mqʮC//s(rNlu5յ]MiBEZR|97 >|LhPSk(~\ZXUST!qjF B`6a>PrV!}a74! muȺ;:.h5[ZY?jgЁj/To:%Ȼx%GϵN=WgV R> $2Dy0A~'RL`ͽ˦% $~h4ʎT^ nUcM[П"p2v0`x!ezGEvSz{>anY~ˁ{_u0Rn48)$P!&FAvxa+-jcst4=;%aV0-)vo%jpGQ(f+"{ۛ~"4$o'I,cC8ck^P Ōom"x{p7-6\ pHx;^WAj.s V Y:z5B&Z\Z9x&0RD5ֶ}JV]6|LFehQrw$<>K? >,h#)gemk9zv-jM)|Yrp$ф-"v(ʴڥ @hZ䡫7δYw)ŕnjM5ߏzxU 2{rUB%3{/|z+R_[7' Ă;>cOlfp7fʙ%U2(>/,>D"O :se.Wyh_ R?jzَ͌[.^ʻۨv rΔBxD^e6$wՁC.`BZ2ۑt7 m22:.ThIwjY ζ %p}ć v꧐t0.Z/:?qDXXē5{Eʭ m ɖ+sf7(`05YQ{І&2gќ'fgkn)G-aԸOa!:34h30CḾ1?C_wvz v'҃JBLѭd (w7qwUK= 4 V"K4L 9՟!'V :ڇoP>&6uah#_ pA/dk6lD0vzkM}ޱژs ^7 nsue3f`ؿ,Q endstream endobj 19 0 obj 2696 endobj 20 0 obj <>stream xWy\纞Ţ3?Ai۪p[ۺԭu=@ !$@@$(HjZ֞{9^{joҏ{EOMrgԹS||lĔ.fvi_7ҷgq>#~q洙3fs֌Y!ϻ =^3\3GC-Nl*Ses6:L4$btvˎ灃z"ZM T]+Sv Aw)#A4l{DRC@J c$n*:t:OS0`MY@崠Y?0C#,X3/e.lkȡr hH& CA]ip* n1U88= +@eERat!2VSlw }C-gzh?=bW;xw &s_C AQ (%l T64ԷkQR y2jpQUVpԽ(eB?6 {?.vNd%63ۘ2/yz4f$9`\] ^R ҁ Y|PhUX.kt]wCw" l1sP=P6` l@|avn&%4H:_U&Ժ9Z-#. .65}؀-UM1fm4DuiLy}w| M֥RJ`'ӗ>^- 8PtH8؞ҷv>* hԁ"_@ n4Ţx- 7/_hksqupvT]k`翫~&)_\tE u4ON,|E|“2)ۭMvk]{4K>^p 퇫zxB8I8ȉ xv_ΉbO ZȒϥ8"1if F /Y?"d*8yZ] my^}o2H F(#&"Bb$Kak9 Qh i8)}^{X2GĨ9uV$T%x$QHЂ.k%vFhwXOz7eG@]-h}ӈ0<û EMv5Q hqQ+ V! ^ &CTR(,/3BZѡw/^V&F%J6ŃtD sꆝ}>c֫pA8j=т5~#PЇOJvz"@^{AaCﻩm-*Xb|A4#SѦ_Sp!#opMQ7Z*0Q~ADTU&KdysQXJA8hE4dLLBD 󩁦qn}8ppAK()+}J a@ 1\jCB}xאޔ(Pڊ:wt{:Iwf{u,c(|4G`ApAU_Rj%2B )Y ]Xi]jJ'eDo*IwSΚz`u e]~p77ψVA/rttۄNmc-Ozg8x7d"dlQm1'j>Tq>Y1d}QBO1nA!9nq39@_S؄$p ri#4**-|ΑNis>ʑ l), !%dpk4a4ZUclҬ3%-ȗ&ˡ?=iF~7}Y9p(`]Mm8(0ߩ¾U*™y/w}>U\n_7)qhΟQwAe$)0Xfk6ثG+q5ɪEx,y1rn;O4Gvsxs%! ,9YVn~ʚV03=n ` !n شkLal>V[S]6~tpsK}z\d5vv.u„[(tX+S 6-[;7\gctQEF4Nt_FyqR g4H"WQ´ɮ=`|tי+.{B_~Sɭ˴(s6/( aB^m:co/~1:G5aUitJQooKe(VhBY:^*~+ܖ֖`=6eZV29CV+LF=ݛߨtNd7ΖshUh+dʶ.gS}Cyn4P+_Eys孙mVs)JGj-u&a]ζ.jQtu~uR F lH?{NzC3p}<6 dV\WPH!w0#2o:>. _?=؄:w \A"C8*7 [ }7=r(>@(-jh/Ϋ#Nk%l+4&6G>NyJypy^gOG7ǻᯥPa-P ?)A&^bBSىkI/@ X~et٭C ?]TIuGHڕ>ǮînhlF9Ht(xf̀y endstream endobj 21 0 obj 4136 endobj 22 0 obj <>stream xeX XS׺=1$8JJMUbqP<!si!!@gd:msjk=ގ>||9__kaN0lv20AOu <4Yt@ :è}.d 8&Fz|-KSܖ|rgQ_q& ݖ?2I"/LNJJ8$ǧEc˂nbQrzxqGk7OSD „4[0퀀&;6$H{$zhz۫yғS J퐉b¼wJOKHܓyfR܊6r_f掅c0l5b;O1?l`K3laAX0[`J,ۇcm 0Wl>挽m`. { GbNQiY f ;}FȜ3Uu=s47dy 똿c~;|#of9ce^C.,:+.#2%&ol_&J=s#8YQ񰘰S]Ϊ;8Tw-b;d>%"Oh fS̎ʜB]jphUYA9TCzFUMyUdRMV O ЁXbeHL=ޑ2xy9\Mv58F.hL+&CYQ9 ZJ<*Eh!6<(nOY:q!iW) scË-QG&>ĵpi*0 =h5ާAvθT@x}߾۪-KDZiן91<43(/,Jl&nns>dA0Y=E Ágr39;&ADYwLJSYAKOr`1+$:.ێo1 ƙ1Fy#D8-= dLܩO U5-'s-*;خTz;@?2=';jFI0,Oj4-W֖5:[""E~Fs!"s,-QzTpBf}\k.qXip;hp1[jT鲔2B ˄u ϧ0mˀ\&e!'rm OOth =VR\j<7ȅ ?z'/ޥwomd@iMc3ZS9I/l |@iGyx>B+d%E&PRQ;Л)pޚ896[f |߀Sw=u(<;=#n (yJR:7;GN-2\0EUzoz#(E(dA% tv`Z푇rɎ+,qfL|TwA,Q Ы 4Z<f02L)2Iw,mi˟ cBZgp|A@͑SIN=l36s¡**Y5 /ܝO"3( o&g!*A!Yr[V,W :ޠDl?oaE@TJP>e+eb|S[)o>u7Pn z#HWY0A +ukJ;6CR~¡byk{ b\\.pgLu=TtM;ȤL{}*ҽ1ߣ@7!㱋DtAno{UW n7Plk>TήBs &m͝-.0ZsY>ҝğ;q~[c(:zupǂRKh{LPɭD"@y _HLYlI*߄R ͋ ⑧JwbDyBT- j55:W׍*x^cVw*fAA0pt@WtcǾ]<ޕY 8QЄ$kјS@d1Y7Y:9z//O<ͣ/EFooЖ:,>G= >]G۪1G`Z{kt%F>\x5$dh8b # 7@1 J4Gx3? ZdLj Z*9wj *;22˄'zflh10In%XMY#TyWS>kmJay=̡&ps&|fo)/ .qˈp#u+ J#AN_Tj)Bh#Yy*N rA~Q8Kcnl;rToÙN<#ENXyUG[^vĀrp^uj.mbM! 34.%^s$JQrsD"SٹHJ9κO1[ q U(Tl bO X#!T̯H*7 WbxƂW:Gbǽ C(K ,[3Llz;tz6Cك )7NWvu҈øu"D&w65u:O~KursP9[`VQzAkИ& jo;M6^'H?lMQ :˔ {;Si37tq/ݨ<}>ߐ)Qt es%r(1 IӔ; vmmXGNWb(}y@49 E6 ή'g 5~YarN0 ,OPq2,#zԘZ~@7i 1iInVy#3Z-U(S_^p m,Ҥ%j'vycGO^9HVJ\uWV%R{qz8z@pbGl|u?-RU5TF&X9+ %JO~ ͔2PK;y8otnIFƣ9H (b#v˜F/$Nc*e@*؆Syq~0rξ/KpPg QZac\3Æ⪊ʆߵ-[xX&bUCSK޺C#7dUiW[(`R3_1a{ to?uLx|ԴzI\Td!34ؠX૴>XWQlAJr1=I#ɱ>㗽*=?hJ?httU%zMu>irE9 5̶9m+7y1t endstream endobj 23 0 obj 5192 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001899 00000 n 0000017407 00000 n 0000001831 00000 n 0000002253 00000 n 0000002105 00000 n 0000001947 00000 n 0000001671 00000 n 0000000015 00000 n 0000001651 00000 n 0000017025 00000 n 0000015703 00000 n 0000016647 00000 n 0000015205 00000 n 0000016330 00000 n 0000014745 00000 n 0000002021 00000 n 0000002051 00000 n 0000002400 00000 n 0000005182 00000 n 0000005203 00000 n 0000009425 00000 n 0000009446 00000 n 0000014724 00000 n 0000016245 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 17547 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_cleanup.html0000644000175000017500000000445210265631023024507 0ustar danieldaniel curl_multi_cleanup man page

NAME

curl_multi_cleanup - close down a multi session

SYNOPSIS

#include <curl/curl.h>

CURLMcode curl_multi_cleanup( CURLM *multi_handle );

DESCRIPTION

Cleans up and removes a whole multi stack. It does not free or touch any individual easy handles in any way - they still need to be closed individually, using the usual curl_easy_cleanup(3) way. The order of cleaning up should be:

1 - curl_multi_remove_handle(3) before any easy handles are cleaned up

2 - curl_easy_cleanup(3) can now be called independently since the easy handle is no longer connected to the multi handle

3 - curl_multi_cleanup(3) should be called when all easy handles are removed

RETURN VALUE

CURLMcode type, general libcurl multi interface error code.

SEE ALSO

curl_multi_init (3) curl_easy_cleanup (3) curl_easy_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/Makefile.am0000644000175000017500000000624010265631023021764 0ustar danieldaniel# # $Id: Makefile.am,v 1.19 2005/01/25 09:29:06 bagder Exp $ # AUTOMAKE_OPTIONS = foreign no-dependencies man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \ curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3 \ curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.3 \ curl_slist_append.3 curl_slist_free_all.3 curl_version.3 \ curl_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3 \ curl_strequal.3 curl_mprintf.3 curl_global_init.3 \ curl_global_cleanup.3 curl_multi_add_handle.3 curl_multi_cleanup.3 \ curl_multi_fdset.3 curl_multi_info_read.3 curl_multi_init.3 \ curl_multi_perform.3 curl_multi_remove_handle.3 curl_share_cleanup.3 \ curl_share_init.3 curl_share_setopt.3 libcurl.3 libcurl-easy.3 \ libcurl-multi.3 libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \ curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \ libcurl-tutorial.3 curl_easy_reset.3 HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \ curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \ curl_easy_duphandle.html curl_formadd.html curl_formfree.html \ curl_getdate.html curl_getenv.html curl_slist_append.html \ curl_slist_free_all.html curl_version.html curl_version_info.html \ curl_escape.html curl_unescape.html curl_free.html curl_strequal.html \ curl_mprintf.html curl_global_init.html curl_global_cleanup.html \ curl_multi_add_handle.html curl_multi_cleanup.html \ curl_multi_fdset.html curl_multi_info_read.html curl_multi_init.html \ curl_multi_perform.html curl_multi_remove_handle.html \ curl_share_cleanup.html curl_share_init.html curl_share_setopt.html \ libcurl.html libcurl-multi.html libcurl-easy.html libcurl-share.html \ libcurl-errors.html curl_easy_strerror.html curl_multi_strerror.html \ curl_share_strerror.html curl_global_init_mem.html \ libcurl-tutorial.html curl_easy_reset.html PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf \ curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf \ curl_easy_duphandle.pdf curl_formadd.pdf curl_formfree.pdf \ curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \ curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \ curl_escape.pdf curl_unescape.pdf curl_free.pdf curl_strequal.pdf \ curl_mprintf.pdf curl_global_init.pdf curl_global_cleanup.pdf \ curl_multi_add_handle.pdf curl_multi_cleanup.pdf curl_multi_fdset.pdf \ curl_multi_info_read.pdf curl_multi_init.pdf curl_multi_perform.pdf \ curl_multi_remove_handle.pdf curl_share_cleanup.pdf \ curl_share_init.pdf curl_share_setopt.pdf libcurl.pdf \ libcurl-multi.pdf libcurl-easy.pdf libcurl-share.pdf \ libcurl-errors.pdf curl_easy_strerror.pdf curl_multi_strerror.pdf \ curl_share_strerror.pdf curl_global_init_mem.pdf libcurl-tutorial.pdf \ curl_easy_reset.pdf CLEANFILES = $(HTMLPAGES) $(PDFPAGES) EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) libcurl.m4 MAN2HTML= roffit --mandir=. < $< >$@ SUFFIXES = .3 .html html: $(HTMLPAGES) .3.html: $(MAN2HTML) pdf: $(PDFPAGES) .3.pdf: @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \ groff -Tps -man $< >$$foo.ps; \ ps2pdf $$foo.ps $@; \ rm $$foo.ps; \ echo "converted $< to $@") criticalmass-1.0.0.orig/curl/docs/libcurl/Makefile.in0000644000175000017500000003566010302221113021770 0ustar danieldaniel# Makefile.in generated by automake 1.9.2 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # # $Id: Makefile.am,v 1.19 2005/01/25 09:29:06 bagder Exp $ # srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ top_builddir = ../.. am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd INSTALL = @INSTALL@ install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = docs/libcurl DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs CONFIG_HEADER = $(top_builddir)/lib/config.h \ $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = depcomp = am__depfiles_maybe = SOURCES = DIST_SOURCES = man3dir = $(mandir)/man3 am__installdirs = "$(DESTDIR)$(man3dir)" MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMDEP_FALSE = @AMDEP_FALSE@ AMDEP_TRUE = @AMDEP_TRUE@ AMTAR = @AMTAR@ AR = @AR@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CABUNDLE_FALSE = @CABUNDLE_FALSE@ CABUNDLE_TRUE = @CABUNDLE_TRUE@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CROSSCOMPILING_FALSE = @CROSSCOMPILING_FALSE@ CROSSCOMPILING_TRUE = @CROSSCOMPILING_TRUE@ CURL_CA_BUNDLE = @CURL_CA_BUNDLE@ CURL_DISABLE_COOKIES = @CURL_DISABLE_COOKIES@ CURL_DISABLE_CRYPTO_AUTH = @CURL_DISABLE_CRYPTO_AUTH@ CURL_DISABLE_DICT = @CURL_DISABLE_DICT@ CURL_DISABLE_FILE = @CURL_DISABLE_FILE@ CURL_DISABLE_FTP = @CURL_DISABLE_FTP@ CURL_DISABLE_GOPHER = @CURL_DISABLE_GOPHER@ CURL_DISABLE_HTTP = @CURL_DISABLE_HTTP@ CURL_DISABLE_LDAP = @CURL_DISABLE_LDAP@ CURL_DISABLE_TELNET = @CURL_DISABLE_TELNET@ CURL_DISABLE_VERBOSE_STRINGS = @CURL_DISABLE_VERBOSE_STRINGS@ CXX = @CXX@ CXXCPP = @CXXCPP@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ ECHO = @ECHO@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F77 = @F77@ FFLAGS = @FFLAGS@ HAVE_ARES = @HAVE_ARES@ HAVE_LIBZ = @HAVE_LIBZ@ HAVE_LIBZ_FALSE = @HAVE_LIBZ_FALSE@ HAVE_LIBZ_TRUE = @HAVE_LIBZ_TRUE@ IDN_ENABLED = @IDN_ENABLED@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ IPV6_ENABLED = @IPV6_ENABLED@ KRB4_ENABLED = @KRB4_ENABLED@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAINT = @MAINT@ MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ MAKEINFO = @MAKEINFO@ MANOPT = @MANOPT@ MIMPURE_FALSE = @MIMPURE_FALSE@ MIMPURE_TRUE = @MIMPURE_TRUE@ NO_UNDEFINED_FALSE = @NO_UNDEFINED_FALSE@ NO_UNDEFINED_TRUE = @NO_UNDEFINED_TRUE@ NROFF = @NROFF@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKGADD_NAME = @PKGADD_NAME@ PKGADD_PKG = @PKGADD_PKG@ PKGADD_VENDOR = @PKGADD_VENDOR@ PKGCONFIG = @PKGCONFIG@ RANDOM_FILE = @RANDOM_FILE@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ USE_GNUTLS = @USE_GNUTLS@ USE_MANUAL_FALSE = @USE_MANUAL_FALSE@ USE_MANUAL_TRUE = @USE_MANUAL_TRUE@ USE_SSLEAY = @USE_SSLEAY@ USE_WINDOWS_SSPI = @USE_WINDOWS_SSPI@ VERSION = @VERSION@ VERSIONNUM = @VERSIONNUM@ ac_ct_AR = @ac_ct_AR@ ac_ct_AS = @ac_ct_AS@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ ac_ct_DLLTOOL = @ac_ct_DLLTOOL@ ac_ct_F77 = @ac_ct_F77@ ac_ct_OBJDUMP = @ac_ct_OBJDUMP@ ac_ct_RANLIB = @ac_ct_RANLIB@ ac_ct_STRIP = @ac_ct_STRIP@ am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ am__fastdepCXX_FALSE = @am__fastdepCXX_FALSE@ am__fastdepCXX_TRUE = @am__fastdepCXX_TRUE@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ datadir = @datadir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ prefix = @prefix@ program_transform_name = @program_transform_name@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ subdirs = @subdirs@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ AUTOMAKE_OPTIONS = foreign no-dependencies man_MANS = curl_easy_cleanup.3 curl_easy_getinfo.3 curl_easy_init.3 \ curl_easy_perform.3 curl_easy_setopt.3 curl_easy_duphandle.3 \ curl_formadd.3 curl_formfree.3 curl_getdate.3 curl_getenv.3 \ curl_slist_append.3 curl_slist_free_all.3 curl_version.3 \ curl_version_info.3 curl_escape.3 curl_unescape.3 curl_free.3 \ curl_strequal.3 curl_mprintf.3 curl_global_init.3 \ curl_global_cleanup.3 curl_multi_add_handle.3 curl_multi_cleanup.3 \ curl_multi_fdset.3 curl_multi_info_read.3 curl_multi_init.3 \ curl_multi_perform.3 curl_multi_remove_handle.3 curl_share_cleanup.3 \ curl_share_init.3 curl_share_setopt.3 libcurl.3 libcurl-easy.3 \ libcurl-multi.3 libcurl-share.3 libcurl-errors.3 curl_easy_strerror.3 \ curl_multi_strerror.3 curl_share_strerror.3 curl_global_init_mem.3 \ libcurl-tutorial.3 curl_easy_reset.3 HTMLPAGES = curl_easy_cleanup.html curl_easy_getinfo.html \ curl_easy_init.html curl_easy_perform.html curl_easy_setopt.html \ curl_easy_duphandle.html curl_formadd.html curl_formfree.html \ curl_getdate.html curl_getenv.html curl_slist_append.html \ curl_slist_free_all.html curl_version.html curl_version_info.html \ curl_escape.html curl_unescape.html curl_free.html curl_strequal.html \ curl_mprintf.html curl_global_init.html curl_global_cleanup.html \ curl_multi_add_handle.html curl_multi_cleanup.html \ curl_multi_fdset.html curl_multi_info_read.html curl_multi_init.html \ curl_multi_perform.html curl_multi_remove_handle.html \ curl_share_cleanup.html curl_share_init.html curl_share_setopt.html \ libcurl.html libcurl-multi.html libcurl-easy.html libcurl-share.html \ libcurl-errors.html curl_easy_strerror.html curl_multi_strerror.html \ curl_share_strerror.html curl_global_init_mem.html \ libcurl-tutorial.html curl_easy_reset.html PDFPAGES = curl_easy_cleanup.pdf curl_easy_getinfo.pdf \ curl_easy_init.pdf curl_easy_perform.pdf curl_easy_setopt.pdf \ curl_easy_duphandle.pdf curl_formadd.pdf curl_formfree.pdf \ curl_getdate.pdf curl_getenv.pdf curl_slist_append.pdf \ curl_slist_free_all.pdf curl_version.pdf curl_version_info.pdf \ curl_escape.pdf curl_unescape.pdf curl_free.pdf curl_strequal.pdf \ curl_mprintf.pdf curl_global_init.pdf curl_global_cleanup.pdf \ curl_multi_add_handle.pdf curl_multi_cleanup.pdf curl_multi_fdset.pdf \ curl_multi_info_read.pdf curl_multi_init.pdf curl_multi_perform.pdf \ curl_multi_remove_handle.pdf curl_share_cleanup.pdf \ curl_share_init.pdf curl_share_setopt.pdf libcurl.pdf \ libcurl-multi.pdf libcurl-easy.pdf libcurl-share.pdf \ libcurl-errors.pdf curl_easy_strerror.pdf curl_multi_strerror.pdf \ curl_share_strerror.pdf curl_global_init_mem.pdf libcurl-tutorial.pdf \ curl_easy_reset.pdf CLEANFILES = $(HTMLPAGES) $(PDFPAGES) EXTRA_DIST = $(man_MANS) $(HTMLPAGES) index.html $(PDFPAGES) libcurl.m4 MAN2HTML = roffit --mandir=. < $< >$@ SUFFIXES = .3 .html all: all-am .SUFFIXES: .SUFFIXES: .3 .html .pdf $(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign --ignore-deps docs/libcurl/Makefile'; \ cd $(top_srcdir) && \ $(AUTOMAKE) --foreign --ignore-deps docs/libcurl/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool uninstall-info-am: install-man3: $(man3_MANS) $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man3dir)" || $(mkdir_p) "$(DESTDIR)$(man3dir)" @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.3*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ else file=$$i; fi; \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 3*) ;; \ *) ext='3' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst"; \ done uninstall-man3: @$(NORMAL_UNINSTALL) @list='$(man3_MANS) $(dist_man3_MANS) $(nodist_man3_MANS)'; \ l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ for i in $$l2; do \ case "$$i" in \ *.3*) list="$$list $$i" ;; \ esac; \ done; \ for i in $$list; do \ ext=`echo $$i | sed -e 's/^.*\\.//'`; \ case "$$ext" in \ 3*) ;; \ *) ext='3' ;; \ esac; \ inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \ inst=`echo $$inst | sed -e 's/^.*\///'`; \ inst=`echo $$inst | sed '$(transform)'`.$$ext; \ echo " rm -f '$(DESTDIR)$(man3dir)/$$inst'"; \ rm -f "$(DESTDIR)$(man3dir)/$$inst"; \ done tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ list='$(DISTFILES)'; for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ esac; \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ if test "$$dir" != "$$file" && test "$$dir" != "."; then \ dir="/$$dir"; \ $(mkdir_p) "$(distdir)$$dir"; \ else \ dir=''; \ fi; \ if test -d $$d/$$file; then \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ fi; \ cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ else \ test -f $(distdir)/$$file \ || cp -p $$d/$$file $(distdir)/$$file \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man3dir)"; do \ test -z "$$dir" || $(mkdir_p) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool dvi: dvi-am dvi-am: info: info-am info-am: install-data-am: install-man install-exec-am: install-info: install-info-am install-man: install-man3 installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-info-am uninstall-man uninstall-man: uninstall-man3 .PHONY: all all-am check check-am clean clean-generic clean-libtool \ distclean distclean-generic distclean-libtool distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-exec install-exec-am \ install-info install-info-am install-man install-man3 \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ uninstall uninstall-am uninstall-info-am uninstall-man \ uninstall-man3 html: $(HTMLPAGES) .3.html: $(MAN2HTML) pdf: $(PDFPAGES) .3.pdf: @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \ groff -Tps -man $< >$$foo.ps; \ ps2pdf $$foo.ps $@; \ rm $$foo.ps; \ echo "converted $< to $@") # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: criticalmass-1.0.0.orig/curl/docs/libcurl/curl_unescape.30000644000175000017500000000172310265631023022645 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_unescape.3,v 1.5 2004/06/01 08:33:15 bagder Exp $ .\" .TH curl_unescape 3 "22 March 2001" "libcurl 7.7" "libcurl Manual" .SH NAME curl_unescape - URL decodes the given string .SH SYNOPSIS .B #include .sp .BI "char *curl_unescape( char *" url ", int "length " );" .ad .SH DESCRIPTION This function will convert the given URL encoded input string to a "plain string" and return that as a new allocated string. All input characters that are URL encoded (%XX where XX is a two-digit hexadecimal number) will be converted to their plain text versions. If the 'length' argument is set to 0, curl_unescape() will use strlen() on the input 'url' string to find out the size. You must curl_free() the returned string when you're done with it. .SH RETURN VALUE A pointer to a zero terminated string or NULL if it failed. .SH "SEE ALSO" .I curl_escape(3), curl_free(3), RFC 2396 criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-tutorial.pdf0000644000175000017500000023247210265631023023730 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXێ|߯hlޙ7۰kˎ0d ${D65|)Gp5}.UuE!g?a{ϸ~4vӕμYJ²b*ʌwOA=7oբA٫m٪ N0hD=+^70L`&QMJGz4AkZpbDA*K׷gUֶ72ȅ?-t\57KHz+UU9ƢoZv.Z*I \`@kc}R$de5[vVtM+ 4&]P/!OX{5"@`}~̈'.Uˌ9#яrC&& /$64tpAnhYnf*bD'S;U4inn|F,^ ehu2/~+q>Gqu"3@rd=@`FT/YѨ2+6 eB h.{Q)&nX5Xp̊ - Tc"DE'SN6nO z{j0? !K΍QR#z'+`m5^iHmv>f낞_>ÍH/V aM[@kk5\ P⋙RR5Q1QY|9},R<ױ4ˆ!{íB?Ci+euh,mm衩:aj%!֐C3;P dpcKC$d݋ni=Nl &h[,5 g}[9ZAzjw\QT`T f0S{DvyCEF޽ODZ'NON3##P'lQ6$iYؚds ׸g"?XJNJjTtj}ZrLװ$+tS8(9tAuV0:+0Cv& 4R] 0 yǣ>Eƥ+vƢ%_b\'o"~7gvd/v-"@ՋmN=FOto Ϯ9aejϋNE%L1CH;ԅăӝQFh(11JWJ9Z 'syfJx {vZ`quZz w!u?!5,J,/$Ma-}(??n"rYuX-4f&mf0CJoM00ӷSm;?Hendstream endobj 9 0 obj 2500 endobj 17 0 obj <> stream xYێF}7SQlY/&k3a Z#)-+oGn S}˩S:E(#p泈W}/o~zE~wcF"W"/cYpE,TܟomOC6'M~+ᾮ*ڲC0TC='{u(U;j! LɌ8w7~&HI-}!KSmZ-~Z4 eFyлޮDyVK+ΪD)ZGa^8aM.}̎RkY2v`;gP_x ,nlz`cn`ۅš*|RR='t~)W:=" J'SjXE},-Cwb(Kfv9 S=x>BtJK3GisW%w[%R`{i;y[SR 5VՅ=m[ql+p*̴|8u#H4"ȡŝTd#J*sF9ߛ(kb\2)Ԍ8K F)^ĥ??OY#r/dlH$2(Zȃyhc>oQ/_ͧ2=+ 0wI{vuNV^YF1Ȍ쁝s + 2\FPK4Y 94C:o(I6(zI2Jkl40 4%o=YQ 69"'lSxzBWkw}o>zHVDDLl)[BLr>`~.8Gn@73mRJ9v*:O6Rm6>15xڈC=zfuh}[aX.}UuAt̮sDZ0gw]~nhxuUo/k3y ' ۗmb\r-Ƣ[ݶԪ/fO-1ԽVd8\M^wT[.℄w J[[R$2Ie ,\g&#ڴ.!1LN$PHE6m+ osሱ?MIcig*q?6kH*<$q>uKs\ۆVTN䋞:NrKgxgjD]u]o/ztKV Syģ*w,1p!q7K[!ɏY@VcVoahvW4:0\2Oڞea]€R#m:K)o2'ë\sy|~Q%Aއ߫$ #شTΠ8t!;5y;I[)^kkJ׶Lvg~vtɭ$yJsFOT Sli"4M=e]{)4lp{wƑﮫj&^,y8`5H];M[Rna|k @x˓jgDJ8蚚vCvxE?)-T@ ΚtBSHEFβx 5N)䐶eKiq^(JJ9ʐl~!KMLj{M@ l;QcIƐ̯Z a*b<_fU}= , ;sD41MVPNQ Dέ|D7qVCśMm2˗ȽrA|,|,a&_=߯eD}꧷/"K塥 -'.Ї|_˾NBElR׏I n 4O} 'Wc 姈ʜܔ\4LjɡR-\iG!`|u}1嶊m/~L8`'~Gw~)d/*z(L1|}#尵;> ZKlk2J-k~ŅL Da9k4ra#h42{]bzX{Up!k0T[7u6_v琶YѹzZQ O^xvw' =vozվrWAfYġ޷AjvD0//Ss҂f'|㠿-kmӽѹK<=3Gj'oAk5ͮF6jGZ+#{[OJfzrEZhu:>[BjܬB60odz H{w*Z|2}ՑPvKӫJ34ŻUdP$!Uj|4TCDdQWKxo{M`$CfF_T@"Wp"T3ly>r/sCfRendstream endobj 18 0 obj 2853 endobj 23 0 obj <> stream xYێ}W46ټ;-q]'^1^3"e97 PSN>G,}\}\}d~('ەY\yQqE%/mW7AihդwAnH, twW?o3v*$aT6j;tddN*%6u{UGu W"aۗIn{6hzWtXb ;"-\L ̸HqN1 pjlmJsZP=_K9vل(=tۆ=J{i?Io cZ Βucxn@!Nywˆ'S;0C5PџUӞa4ȋDk^T0up.eJ==ytz[^r P( 5 ތT(P)ߡ p13qS% DnOF%O؈#+IcF$fZ#gik㡵6OW5_(3kfլ9t{M. rh[ԅDo{r(X\ʦq2RZ eh ċ'}(dk:n,J K,1+8sZKE{ 8x{s}yI$ }4з/^]lnc6NQ~Syʣ y]̎{eC:czAtl(.@AW:ıyH 5(dhV.Č?6IŒGhS >oqs)ځN9$'Y[NcOd%q&8X 4, *rdoW mɨ'vuG)JU joTP]ʡgBi  &hO ``boX ;I& oz<贇z'ߺ" -"]Ɩh^ AgM8! mf.qI#p/J;cRw3yRmD$5rb6ZC* MwRK#†UZKZ?ȍ2Zc2贃L-HՍzp?,8U՝]Z ᾂo@.mlPbvRjFaz3T.HD)ѱ# B+ӪH!9H<7f:F8V mXG#DCӱyN["10HFw3{E~TƭH}_=k-j;S`#QlnM|%bF!BZ\!mM>kl+QV3;+(xXYwъVTf.Oh j;sgE̽#ѧ Ct険*?T/yNߐ_kU$]y v[<Qh5so+=?Z4qk%׮;ՕyV;dnGL,Fn9 q҂g7b0Fo??:\t\oo̭*j`Ƭrݼđӱ}]h S!f!b(c]P-ЛJm7>h3ɿ0Kw;>pgdj#j2]Z2,c<^Nmz/ X({)> stream xYr}W6ReRyg)xb˵\4YP?GƻI\)ӧ,gGe '̬ Xx^v/-^S?U},tۮ./z3tcX[ޮkr3{E)[r5?`J[S"|jy.|elYg]v8{]>.ڗ*AOܮj=𨰯<ŵۊ9o 0ܜx<Ί>^]_>1G;OLor+SneY wZ`7V[Lo%JS=9. 뙏_zWkvhyO$>+پQ>\_jn 0yǯ˫$c#r7j2)OT,L}x9`!ONrEas[ 6(^w ic-zQ̃m'ZJ+F(N.?&aZP(]; U\:lGă-u+ŵ*%ggSY}ctMVB4`1R^֓פ.eMEwdswï*r(KIzX`xRiQ,R'ePRײˆ鮔j-7.6 J(ΰE5Ãm vx.y Ypd0Nl[-8sx X)jkǖ0d B2 M1K'"GAn"<>qFHqr:3΋0Nq51'0 xnU8v|k``Пmmhu5,_ICnc7|]q,M7twҔB}qnoB"џ8N7tl5EEq˲1by}g];igxcfڞXjy`a [~k7;)Tz}h{p* n} Ķ y{V8y{ Z$̐CY.!8>O" sT,Lȁ(%1[ _]8p5=}h6XHd#3nvBb=;Td/G}X54 G'5 BBoQS kDg @Y7⾹Xå^ "b*RE/ԏQF B=ӣkrui'<jwOa A#k^ MwDǩ=Zua<{_hnP>7Ώ'wo..<>.8#jx <{RUwFo|{{n[agv2~y#>ЍzY|.=BhWċrkC!X49Λi)њk!a:o~{0OA$6{{moA"[dK"OLa:kezp7䎩`*^tP+.~h{Yb W0Aq\}yIM2IxۨAȁ xwͻyo6GH5}RihceZKA3;6S_drcp,@$*{F8uQyZ{XIX?o4v%LӖ2(x,dhLj4 Gtbgz  ig@?r2lQd +]h@d!V:ez&: ʸҶٙVraxP HCãȍZBOM| ].?g_5 endstream endobj 28 0 obj 2916 endobj 31 0 obj <> stream xXr|WL^bEbq'?EG `_StGWV1݊)UFPIlOؗAvP{!:s?\}a}ϫЗ (8u,ѻ\M 1U]YF8 Wb\,7LC~t)U( ̊I{>eӗ*P>/N=lBtlz6y;%4},9b.J*iy 80_g0D:Fܪ)sR@4}.NeU[G VtφzvR-z^9HYzAC Pgl0);2Tʽ̷E/O| gy^db5=Iȫ E%/C .b&ub#{@ eHCKIvU~64;lPd0cn>.ch>T\Տsߣ䭒1yհjk@~PiSclj嫫k&zP6HX'5zly`8P*]a3f#/S,6 >7JWʬB)]b4Դmz+_%1SI2/HPyjAx0 GMe PmEFӋ7sQt wd7\`GJM8 *%:gg!;.\0E= ٥y<_/~Au]y#pȡ>hzLe;iAe4wE`1$5M& )NP[a9W=Mhwz4DZoHRN>)FZ7&bGk1 tDžo5~rM-MBϚ%p&߱taz2Vv`8>HцEZXYП q0+<|vNgi9WW?O7irı%h-Kx c%4fGӜXeaBdT&5T@`&AIcN &R>ZHOoʬ~hr*QFӷ'.Qvce4z[ߐ*+}B<7KFeO4AEit$W%YRgEas?|PyXBg5LP lNߨ>l.1TׯBq*(iĎ"t& ͡RVi\ZR|4?9Ləxuq~@CjSDyjٜ+Q+ܷyP:1pX9*iq=uY-={^h;Ho-pn_x1ȅ/7['KA$ t$ 1zrI^")ԯeӍ X[Y}ٟV ؼ*?LvF4h-Z6^ީCXY.6\h99^3ai>N99[Ҵp]d:Kgd|GH-mK5}F$˛~Fk\ys~KH58zlĝ:}krǙ8G}7u&pPEN6iT&/>3 T5_cRG!xH.f1%8t{5T`q~] j&uk&bAN&I_.r`y{3}g?niM5_/I+/YrjphU1]v7->\9U F}N)0; ڎW(Rz.䎘Do;|Fuv[DΏ>(m+$":ROI6jyVe="@}BpW?J"OHxϸq 8[+}EWۡAK:N[@[!?:Q4^G\x;S>|q,Y1(12Q֡4/F'w5q ֻq?ܛw߼Z~CZ׆Ii9 YO_2HruHCȬBi8.Λoyj1~˝!"epG d6S&X؍[:bREߞ\TGqN~HGɯI잩9yEt < w>`KOd@N=o.LabC9M-b_{ewy5yxyT7$䊏j1!-Ϳ޾CeVDh$ϣ9TUz]v>?'UP'wHqfg$|2m@^wPMj6Di@`a Ng?L5ʜw5Va6կRRͦvt3.|HS={~Ś[b7I,ZcF?̀endstream endobj 32 0 obj 2702 endobj 35 0 obj <> stream xXkoܸ>0ZDz?/MSmҸ]FZ=at%)J3"YHE9˯s?g_g_ 5rvvydK|dO3g,ivT]EۮխΙy:_!fNuܳW?wY-W3gQF'8?oEU͗<5 R-uz_u(e~SJ֗uq \~ beAU1# )BJYW/F2ѬY[l#$݈Q,5% NQ)4xPIʭ)A~?7{9w=#}g)S (>Hv+ Ή0' OހvI_Ad!"/{:zG/Kxq; ZhkBv Ւ^DZ4"g8=x#j=*"mK/{)v$8L9% hS˥4ɤC QYHyi`#'B. P dCn!6ggwr,-$(o볭7g8<4u'TFLs5@=ha9dSoaOW?X-J?A iws(eG$x䗴 ":}';.T?'4&MXytV К٫2UZV5nAneTTh'tN="G}>E)ۦRȪh꺼""QW<%P#4Q+5X #V¸M_.S2` ^:OPW]ݴl%k|\0lAݴq_S^^ EUS? y x>PL,tN) Q}ގҋ8Ȳ.+ > O\6!t]^>t,>Gsm߿H/Khɒg#y+)>BsP^$QlAT$53;=|GGSc!i>~;<[HOjod4 V Ο~7E7elÜ60?IVI'Giu6n4 5\ 5[uޟ\{dS6ޡZrq x;W%jMۦF#$϶zCyGblU]Y5l@pT*ǃH`o;SC wZ wW2;!&|GZef%DxX$P2`b׻&XÊ!#1MʹR(WYcyyzbET\./ ۽PPFJ=o+6eO8o\/|S{$m:;qVJqʖWР)qCIUNaN2g}RڜIMxɓ֟س-eW Н КXZ䛲7{zjkpZd:ͩ{0Я~BG4<{wB^c ӕg+G3`4K'.ِۘZ҇;Z Sk uMZgfOuJ `HNE>Ǜ?Ե7Z04z<2 qw4 ?6Mw %׳2 Nu$zejGW9[^閒Xauنڴ䌼7Hx4^3#T{ULLyRvu{8 DQ.l= 7mAG w >J^L3>[b7 o)Cc42&^Bvʫ$;fxaqGuY/'V:oU7p6x'VWu8]tIGmh ot^?@JѹDVMhL.?3?iendstream endobj 36 0 obj 2617 endobj 39 0 obj <> stream xXk>2u Y 06h&BwM?LQ~?:!Eeq#s\c~ǓS쏢f'go<,OZ%>K[',rwrT]1tBʼu3Og ?,u].5?nYD1[^t||.f0IAnD#"enl]x>[N\6ulۉq|S=+6VVCg'V C} \)So}:!P/qdC,oVln$xlO"io;RR޾uPv8dyA,|"".$gc-,! -jND_ (n76^WRy%yyO#FYYW\:B}v3$SE4,gEU"oȒG3$b%`P VtbE.|XkP_C~!ğIH)M޷hٵQw4/xhOG{K+:J@#VN9PI[ .%ikj?Wg9\rq /"{!ۭu8SգiB{^s}4r.'Sn`Qc"g J)09!?U7$0&W}k7BةJ+$^$PzU:I]CϲnM}~QlK|Zn+2܃}ꍡѱngsQngھ[(R۲t1oPR3`D2dTb4kq+Lx9/^6lm' _mE#L{Q;Q8홟i]V++ڡY-dWn e_"B!F⫇^/SӪZJdnS1&N7#8Z_Hx<j,_LU=7uҏkڧ|`3ݩ#RV]yBV]NTNI[g:h@䕡S,*y@r%9P)z9 K͆j ?ͷ ]EL'lہ I4&t9I:atpo\:C)M{torn;m9"\Uk`- ,1Z$smou8k9! qZ g_ $jCJno;+ Vv 5S^]ӡҰ.XUNbD瑤W^![-q3"Ih;\1HyLk?}Uo/_^bYA55$kjFk"eˆG>( -v쬉YJUEJFWr9H喬EɃNԭIqnH4=4MޱtSrygQGtO {>O?*__<|r=WRzcN7Rn'9rtvѣ4czV:$9P PA˧)bϴlltPĠ ]if6gv8\PoŧkzC[crXm48g=N(6FimSy"PR361^0? m]}3L-Z+mKtW6ypSՠ}W{ V~h#Y:hnlB7I@znow v*<}).7L]%[*m_JI?KCyM>) !Z>AV}]h:`D.^}Z0ZhDWvu-MӑW<#nґHz(+׌Ѝ*h4 }\XW1VM'TiiRjCsWo//ǐ;Gc} zM#GaNV%>(%Du0=m3EP*^bb]7_@m =zd;?|fendstream endobj 40 0 obj 2539 endobj 43 0 obj <> stream xX[o~ׯaMҘ;wD%u,vaȑ,E20{\H)5( \;|Oĥc٧'Ԛɟcmf,#GԧIJIHѩu>tRJ^=9Ӝ l8ml;ߗxe/3?!YɊWmzIeͻ#)<8cnfJz?>B6|rJ,7wﳷ׫7FT+˙(9/!HQQWQjjA<[-{ fOd'w?gٻW?Y=,3͓Vt۟FÝ%&g, i" ?΁c\hL,G0 {ty +Hduu#by -ʣ>K4~ٕ0I۷QY|'|(XhatHq> +H|O݀2z'']zh  )_I{0  D˲N%%ꀆ5ƣ>uCWFM@1O˳Kޣ#4HS٫)^D*Y.[IpAlܾJcYˮ)\sd-/ HdPup Dꚴ?9p/ՑTfϚt#,piY]j]=&`fY+$=}͒($QfK]Ϧăf,hN) GZXȴ t=\g(+v;&P~ ;P--KI w;𳄔4s/t5^ \c 57aN`﻾<$Z(a!RT;BJ?mW ]F`}[~@LZtC^JumJRAj׀CkC3;f*1 \z bU #G$fR}rv^TNyQraEb 5~>I[Pȣ|1vv'vS( Rtgqbwx76&Rc<ѫw .Js"fdI\"9)dnf5k|z|n.%ʚ!@L)ɨ0g۶*s*ook$]c0/S 0 J!LD 36E̎'-Qzd9^ RYthfAS;Ř/`o'ޙDiT0xcɅ*sD]\iE'3G* Zgػ F*VZ 䚚[{plZVRgzJxR;CM{gD{y#M5@){w`:f$*Xy}+kC]Rbؒnb4`/^?i# <9 @u1~u)l uHl l[诘"Au4,SU,RFv 8U*#?CzKendstream endobj 44 0 obj 2137 endobj 47 0 obj <> stream xuWRH}W0ȴ] aAv\|lNl;1Ͷɳ8Hzo]<x⥀.'q3)Od`S9 CMF$+QrOliD0UB$q%ɠ_X3Fb JMu ߲_gwpG򴮄x2x3QZY,"7)Lq1-nE}V+wMV5+ ?5K*N&K_ƖgO&&td[UvЮmV}d9KY Up:k7ʇ-T#S(G<4=c}qI׶= J{*YwpDp*j<}"v<@Yb@0>؟䶆}t s7%kOsɖIB_)cbV{ZfkvhD!74>ݨٖL4 iQrX u@*(sM+D2sӴlGrزL ļHM.l_Qr78CYiPaJnӁ>:ԢCFN~Zt-ܖ>{sp7jgv-8]HhGxQCQǗWVVlp}J|V=wZAYpuUnUG') ״j8at)`O];TE1oAfll{!<ٔ{_10:j5I(#5@"9<$,a$aEwy wU0 m9ۼ!Z@:n023-x[ ~fyˑj ud\2˳( i>GNHev#.{حi$Ւ`Ot YU4VmS~]}<ԁ^!m*+I^Kú{e8ɒTP*p^kQvB)$"TJ4o۷5[_>/⫛9gȿ<}%D6~$\ b@PiPnVh^BGd*|ebgi;5{ݬo}z[+)/bJtwn6m8Px(R_ٛJf!GreŎZHlb)*#pHe+Vȫ!bv厮:ȊAcAkE`d{vx*%$|О"O ϻ`b/Wm,=)dY*5VV\k#M/C4N0{d՟[9Q⍷GAF+q:PPHW9c',4ETb!vI!7-e?}\ LVQtp 4;KaDf 摥4sQ<()UӺL,%Bkj]vZYr%l-=N:Z%7fobѰC5b0ש(UdTCXzM\¾*hn6C9Oq]e^Qw>m`ini2#ܝKo~j؋dVbo٦驤rZkDmendstream endobj 48 0 obj 2135 endobj 51 0 obj <> stream xXko_1S5~v`Sd74 ȑŚE-{r;Ciyoyn{jKؓl>CBWֿ7u\h͞?cyNt`fdcsv\+v*#鐲gi ?6]i='xtnnؤZ^@\_kVYeM釆,:ھ8WݰuZMq8Hu3wk߸5,-qM_/o>:@dm)G[INdcE]/>JE_1-Y'>ꜞY10v>W|s"(H>KXHS6D׬ê){((@1"1Ǵ~J'IͤB*ͺ;kVE~m$5~O1(ڸ~C;P Q9iN\.k Ȏ *r ]|CYI\FʽKp@9<\S^ʅJq,~gY&!ZY:*9$U䒉za҈UUpj텉8JPӦ}^D+( -*^ /r Hqs9FΫwEEa%~ P~Pz(jgvGku;#7oX3m"K sVg Q-usNpǬrזl8{iMÄD߂X}} uΈE1B1[vOҬpP**Ojw|sA|J_"ԺΉywILi#o& R5D)9{4O L5$'F?q jsYm)eGq\xQt@0JJslu/3 'w< v YTjT%NK-ʮ{9ix0nkNQ*yA,PC 3/M+O C/8H'd4FL&Q Rj#W- H^ M;[̉?B>ݾ]XZξd/>\Es2u"ϼ>؎Z=菉R_J)M_Z8j6ZLPJzh/*Wj:T$TrMZ袘*ʴS_7&Ig > -{= Rb2Qꠝ> ?P8J-tȊYʑutHgw:IbD͒+3EbJ0TsC;mYA D9Q`[nߘg"}*ngv|zf=zRtMM}Y)},%ޅa&MLvc/@ Pʄd)`%_ȲMpscOLy UFe:+g=vvG/rƫ^KO&KgҌrh>! ޣWDDž3ٶ.Y9\%dӭϩ E*̢t3a~{ G0eD =D1i9vÉͱѹn't6DtE5c??pMOcu{وr)jD89Guy!^VeJ0V rX派YՑԼySZVXٱ 5};F|w][gvybe=}݁D(Gsr5=q7f6B+}zޣ≔-S+6} A-z\3[.䄊E6IXcA"3jnVZR3uZ,_K=D9k҈(@'CX^,A ED4"(9'$f(́k 8o2~*EήP 푃;Zx5ֺGȝI| ďYM8͢Bi=Q'2f fJX9 lI0 LkyU7ܹVnNISQRf]IĶ~]'7U?D_/XN!?cvm;PjY tŎmE?oendstream endobj 52 0 obj 2584 endobj 55 0 obj <> stream xYے}WLŠDpOTȖ"UqiS!0\ QoGt rRJ frṾ8>>ٿakߧ'JE4,s7b:u/Ʈv~-66Ϝs>ttOcQ]y0rzʣ~ "瞛OBѢ-iayj:ݴuYe3̻n:v|8 )>ؑ0s_+qZW|43z=ײjU{q}{`T>šfGq96Cp{dnNo޼)+UECM`ơD`%m ۡ?D6*mzWX[5&lGO\?l)2ka&j~Z$V5Ex޾:UpD Ǚuw#(ԁ,5W~DK 0/`2RmWX PZўU'TI6ثTs'Qc.ǶH  4O8p(IeAzNos|vPY`L2B ^^ȑQjM%n<?f6(s(}bPE;m^כF->|g_v9Aƙ}۽ҨO37|G:%*|АSGn`yT#{dK5$~q n;,M bk[gi\2 @]/ϪAe;W&B Ms Dvt*ODXQ1<\sBקW*²Y|MΈ\! *iM~n{/-["ҋ5d H&49ė0*/%-6ΓMNW+U(Q'4Wd(T+aKD3d4"Bh47`q 3¹}*n\6k΀T.rk:zPOyk*YoO )5n%7@L@{bAD~T?JlbƔ\^A57'$bgԞ(Ϯ*bbk*&*O5l:~},[RuҘq4ܐMiB+a#Cu2,1{U>ۑ,B9`!`I&Ҟ@l%2Y\&'2?1a i~,KG܀zͱl-Bڑ&e n&~{{f-N/gaO&ESp IjI/V G^hށtì-'JϸMһrQ`jgd hHh.p;sp.폀Ȥ9妉*uiÿڊ .A5/ Ki@3Ww) y5?jѣy-=Ew3cm6w * 81M:XOs4][짝׊t)dendstream endobj 56 0 obj 2852 endobj 59 0 obj <> stream x}YrF}W%`pǾ9\QJ]ٔ!aI`/Oe˙Gb+Q/o9'^Y$ 4c癛[\C[-mW_˂bm:M+wmߗ}Wẹݝ0Xy880 K+gfYf^C/X.-]2Z?B) >ܜoYNөNWeӳBn#[#92I. V]Y2-z7;0n+Md,znXJEݳQr.}͹o-jE]vٱ}c'N~$͛:u⬠Ѝ8QwnŲXpc౨@G;"ޤ?n4S^t(jt~ Պ:qa'Mx"\/VxD], Om@<4Escl2uYzqNdWo-sʞ`u- Z|Y;UK>?_I`Bw֝XjxlZL`Q^?L(b<>X/w=skkPj]^`ǣ @!O칔C6Mj>hԱmYLmJ&g2k\ =7yґQcIm&ptH<)ۡZC}/9k||o~i'lkލL=k3 tL\h/ U#Giyw 3C8ӿt iJWzu?>]cj:yv4JyWd: "_k؈ MM;G Ӂ6B< $mЈB<&6v hi-o[96Ch\eR娀h+e!y{(Ron5掃L3E^`)mR4Ш5݊O5%dTuI{1 7'L!o#>x¤_I#1`Ȕ"KU %Cާknn|6-"xncSG #WO]ʥL%Ę{^^<8βܧg+3?wendstream endobj 60 0 obj 2900 endobj 63 0 obj <> stream xXnH}W4bʰ:l`zǙu ^-eqL^ha>zBQYc0؅r|!.e?׋//5cmz/#GԧIJzXJ$$~٩M>vzٕzp14qN>u扼zdGهi~D8Y\ ^'(0r6wNGb$R^:DCr$c/)2HRH w( p~[ԣn32SU}Ox%! Nzѕ'rKv3!|(s^U4S $4=mC߯|?9CbwqSMNFu4)4ϓN<77{4D[qJYjL9`eYn 26و;~H^B #!dmaL}7u=qR*e x e`'E^?K`"<0CvXWIUIXVvizۂCaYy.,3[evAےy;Tsl:N,I~ IBgbSJzt _;4r 1 ,0[UmN*t嚊C[1;DCdЧP)ΐD6E;sqsV%AJ|Y% BbkHjn9!,}K^XBwy\wf(Q,q*< Dhc&z*y486oKRO QʰM^MJF*VlP8e5D{F+dӛSѫq@]HO*yi{16oJPR+5F}@̃%°C`eVtWNe5fLOfĩ^Օ;Ծcok4`vJnZC9 nۗ ~hchOO([__Lz Fc.,STUbպ~l| ( M=~V Cg3FиF#GG3C;Q½y.BM۹@kKQQ{0,Yx%P+b͓qBQ"y+B_jHO> J)ț7  #gC<6%r>Ix2;ǓESؓ:FCjtȮ[ξ([H*l$jFhB;R ))ՒgvywKbsgpG7*0Oܦ~K~F1Xf0ڌEO@ n[n<؟>{ỵ7I a.vRXcX2#+)m\SxYz7"p._2tSMTqΊ cҎ 02A$fk6UBc}ahMf)EeVlK;HcΣlu.*類3A(پX&e |ibD2 V;#IbAo-Vs5-L/f :|=Qk{^CՊv}Jӽc6ž/Hds0Qգ!R"Q+fEpYl4U6ke^ TUϳ8vVUsMq>(ag!w_J*_MεuT~=ID$;&JPiŐdzU:aJjL}E=7nˑ?Hh3cqHMvǎ6BJ?i_y;VWq$:@FjxISze۴'Cڧ )9(+W0(3}mjWD 1QW%țsxŕт H@ o gG޶0dy} Tsd'OT?!X_*=eŸt@=yI&Ȇ% -a LĜ-ޛş)kWwKLvgV-f`'J=0g+W9 歧aq1tB KAJK%_Ğ4> [sendstream endobj 64 0 obj 2247 endobj 67 0 obj <> stream xXMsFWL%|CY- ID?zgPvɖ"A`oy.gExxϸf ~xs.^%Y[7 37K#>.CWԠdW<,\!ܛΡ.oݱ/> fl].<7NRq]mɪ-;Ɂ}>^6-|jڼOl'ZJl/Rt%b]8+&;Z7 U,w8|aG?p \ XqV*ZT\{\r[W$+dw]_e8y!͉Us\zeW!ߍC19UA3pa3t󒋇巘F~!Ԛ݉ZЁnC{%j{MOkc w$ԥJj,ޚGƛ}G رR{&[AZ cUV҇01 gfcXvm'8OXq׋2F`\=l o2ETQ&Խ#EF=z}`{9.b;P ֡%d \j?O+3p처 lcaE+aQ,&~Jq>gs pVdLY3FNPp^e/9Y8t.Qc/50DeU'P[ŌII/0wWgYtCp]ʜV&!k@!]Kr|wPICu&TM\ߚڞ^>h%Jp>t549U[Ci9/K.͆ ɚFtfa_P:<ȳzS〃v R`VjO5*ll[r;4&]Hsd'E`4AAvz. ~f} 96Z즇"f2͓R'7}; Zz٫a]sA''NkC90OvC2 # 4h{3Jo&h#t\6,41!HcYséWyzG./{混wo~Y?"}7?GY;)q{#<>RgX}-y(SG*tGWp˧Oy&<4{)A\X3U n |{ 'B{Qf#E蘃bC7fqz<,xHi]f_=G?dU`l'evhayink#{y):G P>bZz[GFMpܞoJ8@ 9fЮ&{4 ݕQ.3ㄌƋ/z8Qr7-c(w>L^׽ᩦ94hrapIl*z^O  IXa$OxG-yILmUykzل\ ̏px~‘~<;G0,FK2gY>o7z9aI7m[N$ ~p;PsDs@IKTxqd4Č/Ts]Ϛ$H)X<]RY=hQ}yOS{91=\K-RrX_t_9F;=A]k纫^ލaooo/ JC8#>O,e@v,=/3(iJx ɿ.￱w)endstream endobj 68 0 obj 2406 endobj 71 0 obj <> stream xXnH}W%@y0 ĉ`1FjYPK<| I&nN[__?Ş^ `iUE]7FT f̹H-%Gm# (4i4;^l&CNH(2c>xEGwSmK`j6> (;Rd(pS-= y%^93eEB7 %E{M?+il[G:}ud=Pn-I.Йfiґ@q(Ɏm Qq&AAh.OVc'y+J_)byËOGYSǨ6Aاc԰JiPιa-{#wSz돕X jS8 uoG1x1-:(\|q y{M9*kU= ƅ#r@”BzLmh(v|#e@*CY+݅(Pu}wo4'a;'׳4Ɲ?9{1픶'>b]?4sRǁX+V7ٌ[4uh@[@ 2QW&OKy7^ǧk<3ΊSi(-֡&ԙݔ*t)YvR U1 ?1& pA%wo?/(ZB(CճEtT(3g\e<^,cCV ;Ȯ%M_Ahzm4In6'x82"d 1)TQ>0Rh?fb]S4]Cy##P{3;p b@镬N-%,l7Tݓՠ8a\qQ3@3 S/}$x &e 9Jq?UxݎH:+C*?e XлS_:LByZ+oNbھH5O{hM21!ٳ.acGz'i=f QmX8g+W(! GTރBR=TpA#uRi.g;C 5\NusmP;99Ĝqv1[\ ,R-3 n a#R{>D9ՊdO1f˃Y_/Eۙ6Rv;*Յm.KQe (n=W44;f/!? '%+԰N+.egF7#As'ql]eA`3Jj P5bA!BGLk?IrCj.lc25Э{<[Ï'&a۹.gо9Ԕ^ZK;C"qX#7> stream xYr}WL`Jq<:\k+2ז7CkP\9s(i7-K\zO.?gv/?T;ū0OV 6y$2RvaXewաoaZ6z a>],k}/wnY{8KZ_~tp]Sw;ym7\~X=Qd)ݱHb?O.˼n0gDOReGBO>E^AYKW[%VAX7!G!l+(~ðWU97nlD~EbFt:l2pÇ\_~w%֝ڗ'=>(a٫? ?UMthaZ{=dj]!{瘑6{s}rXD9uu|S %]v]+0$;nzeT iPz%ׂ(wV翵- иQ#?)'~j9QZq! r-;ֻް){6?1HQ2^$l~yݛ~ܰ/}~侇; T}vGilxP!%mGEi[[S?zܒxơ{%^n)zK6#?\I9wّ[Ld Z $9xNkϦ+4_^jgGfpY~#0 Kd5g=gIlC{uK`[RPbBA~AZ?r2Q b ,we;PUTM77oUJk9J(f8EYd$YM~Xj1Eȴ.%T8פBf/ ң`#:ׅu_B<Š4wb%.aLWNSi+-_?a)؋u>YE$_$x=xq]o4'%ڴûB̃QXyRbL6j#&г!wke . ]fٹdQ`T9E"+g,r?)wךl0j#?zhV'k<-O0Df"X&ʭLi$:-nmD#W.4vUGr?P,q4qP#3?oh{]C/Bnzej,dd1_jg:V47˝ ThМ )>X=a?8xsRٛYdGVGR6G۶G[s ʬs*ؕ|m<F'S9ĺ @1?N4>tQ5$X7ZkTAIKK:Sٕ'׸n-/~Lw5v;PjQHA|_SqEN=$^MԬHM=:*0El(S 4N'9~ċEhyfw;c%{ ޝbݵu^ǫn97Lyz+MÉHlH5*9(6iK љx+%;]fV*^eY-=ڌ-o=V(1o,- #S̆  Eam0T),t4룟JHLC*AޅT#䮥i:H%cUN|w14Yh1\izՎ3aR,҉u(zݫAcths);LxMfpk<&mCliMp,:H{}3nnf~|q)ΚQ* 5N੝.xn /e1еOXd6{i"'gTi=C#{i'LtE47N%zbL{s&#bK-37`v̓0IGB j]c\^{~'9om5pz;,2f:,#&J;335 FQ'ڡdNO7ei6Y`qo\4C>8q>/M-lY~A L@W/ܣgXpkڿ5QzxϺ?rٌ\͝D 5FzL9)f;ҝLp_ 2Ϙx%s6gB Wvd |5vUנ|+RJ^ u=)[3jZ7f8[sN"7:?$ʩNuQZuM{P0Qu@%ϡ}L#s ؇bBo䒛A[x&;@Z$UN]k@۪9,-b{%wd1Wjud7  N4H|;Q)P`v#/%jQOWvuK ]$t|`*n(P])]35Nwv" S,#I(/N*hj`7 rM+ vK2JF3A(ѸdA袠Q2ղM0*`ilHvØ,+<۾eQaL-Р"vc_=s ;w, 柇Ѳ?c_JXgP2O*|2|{8bV>\i..7"E\թits¹9z4vUnj|\k'\ҫÜb~zd Vf|t?34wvZ#3}EZЪuNP[]cȡF ,tMk32ʧ&*N-4E辺_2dQxgyQgpH2賫_Onendstream endobj 76 0 obj 3323 endobj 79 0 obj <> stream xY]ܶ}_ŚbG-q(ApvՈcQ7^}) {Hޏs=~/P{!wlv7[)XUnª|st}sxݻ yj*pho$Xf{#(Oު<;=7o8ԽPOu'^;7¸a, e7ʄbWmf)dgnMp]De |P*U^EQXn]Ќ{ѭ_QpE۳$kӲmMm8+qԨ-nUeaR>a t25⌗kFVR aQ2M$ K^F/7SfU$aU2p ?UQTj뙳s8ஙG..6;-~>3;-oՎ="lq+' DE;D)36Sy'NFq>Gq^(/s(2sM˞u F=AZl$zSTwYYZxĒwGQDz'}(2.GE2q}.(z AoC2*D΢>xc} pE(^rƑvE0Aw]`N^<""acѺxh%D(8nQ|DxdHNq A\']Rz=b%4oe8V (Sb>ZO$ꭸd94038{*s&*"ֹg >?\i7'8]EA`#N}Ol fn!>t,p3]7Zԫ. t*tZSڭ Vj" iUUyB1)|0+N%AB(2 s#{Fm.C)'Ba|3.S^T=k,.82-lpP^8mV2Fc%mlb7SrmqXFr`|eaE4)GaXì-3eөSzq5КGh/>(neaMbiw!}:HI8{Zm [qЧL׃iTt ~g7)0=9V{:"K !mE|Ӷṏ}s Yo2rЧm6 :8I>о)J, EDO ii1.)rjDD~Uzd9@>GJTX?YYľ縶NrrC{ Cc`5M>W7s=W`ɘGKҟzzmQjS;\*0v#38WVR+0^"5lF@l/i ԫ.G*MA8wOP]4ia6mCĆHFd|KƳJ\4/9/?lw+sɲm乃Dre#N}-8'$o+1M18S.!ܶ|8˿\z "A'UT]`Esvmǫ"EF?LM&h `aQ1tj%j;YE^@zrR+&2s9.}HGg5JPF?.0y܂J{jG:l8^` ?ȰH+gyϑD䓬J &ayϕԖ_VO!j"$`k}$kmrr%<;Ϋҧ x̙Nf{5hR-v3_q.X)!A0$duZllP޸™N[{)-eyWmm?2lk 3Tl]]vEI2ϕDK=JuW1,ؼ5DWƤu^DL+^.x, P|P}^&C< zfE48X _]S"i8ӟ9 `K.M1ҝ83[J+ަ70kVbmY7P'ګxY0QzH$y`(ܢ̿4=ɝ{6%$ā/GXRn`g]VFQ i*=Ht&~=~Ԅv?7#(ScC[vac?c eRyXqOD7z[8&?C9;KFծؕ6s#يEc=^*$`&( > @O$@s ]rkMyWuSa1Ю=yX^94/Ƞ:} *O4UŠ g'_΃Ε8K- 9קnl#$nη$nQ ;Xw& Uu[n}v(Y|nyD,ﱃ~-6)C0Ʊ6 4/lx^W(u ϽT=l(Oendstream endobj 80 0 obj 2791 endobj 83 0 obj <> stream xYnF}W4b :}rl$ى lY)R!)+7T_xl0ؠUN*|.OpLgGq`_n> =Zɒ,i6+!2ۜ^W>]eYy`oU5o+vb}~Plꆝaߞk6znOlh٩WpXcSy淫S)d6W~5Q\G"%Pw^O;U=Au Ab[5۹c0f;oWN=\37DόCxOȘWLFKqI#sJ2iFuWǡjv@Ѣ.(I}9=/'+B}nsDDz#i᫭"%˷ba pi9so KgהRD I8~h ܂Tm;B ԝK4t_j0D_0 y& `eC!j=87B_@Jp/a,vo6z8G<[2i֔*_ _! C."ص, 1ѸmWPb#.Wrᣧ#7 4گ@O(9o$nQ)fnjI]>s {qetU x^>hX.b #o:/ZCr@P#[ z ],"3HmH|# !W*+ =`rŐt/8fvCFd %tvKÉ1eMoV@f!Uʱf֢'Ts}Y4+ t3r0i!2y#7ۭ%ɮ'E-U(LéE'F+$T1erHd 2LGxj}Puت3#]Ԍ4AʛA绌QdN7K*9I| ) 8J1lOF4 rMk|) ЯY6:YIGEJE^qoG6'u<.koXe!JujC]聶bb^9pQQazĴUwȍ^ښ2~8j%Fm:WLq,Fj-@b.nvS ŀAZiT8DzV`בzG2{* kEM 3:THxܹ7`NDF&ANiNg JA)A!%J.  Qx]U_[mkjTÙ(E/2/A6%Gv=aFk&si[{EX3'dOLħMNS|ǀ 89ҥ.A+ȯZf ȷU] BvVU"az!$yCuȬ8fbm&Scz㌏C ңZYLZezUS/xVce 跛͏tۼHtzf Xն3t|RbY'=mE2N }nIp~kpϦl퍣`D@uRv\㺥gەSU&֜fU_rH<󅎇ONSgicc|2/BI]H~7s5*77 dDۣINy }wϫ1F@0-*DAb?Ohu^PV;A5˩AUpsu%dT!"I`ڌɹTs2s?CyKQZ|p_.P}S=`olUOUo0gփP(NfXaƚfC12f?qR 9 ;Ĕ Kn$RDtO`!oCKߏN۰^ѿdendstream endobj 84 0 obj 3291 endobj 7 0 obj <> /Contents 8 0 R >> endobj 16 0 obj <> /Contents 17 0 R >> endobj 22 0 obj <> /Contents 23 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 30 0 obj <> /Contents 31 0 R >> endobj 34 0 obj <> /Contents 35 0 R >> endobj 38 0 obj <> /Contents 39 0 R >> endobj 42 0 obj <> /Contents 43 0 R >> endobj 46 0 obj <> /Contents 47 0 R >> endobj 50 0 obj <> /Contents 51 0 R >> endobj 54 0 obj <> /Contents 55 0 R >> endobj 58 0 obj <> /Contents 59 0 R >> endobj 62 0 obj <> /Contents 63 0 R >> endobj 66 0 obj <> /Contents 67 0 R >> endobj 70 0 obj <> /Contents 71 0 R >> endobj 74 0 obj <> /Contents 75 0 R >> endobj 78 0 obj <> /Contents 79 0 R >> endobj 82 0 obj <> /Contents 83 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 16 0 R 22 0 R 26 0 R 30 0 R 34 0 R 38 0 R 42 0 R 46 0 R 50 0 R 54 0 R 58 0 R 62 0 R 66 0 R 70 0 R 74 0 R 78 0 R 82 0 R ] /Count 18 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 33 0 obj <> endobj 37 0 obj <> endobj 41 0 obj <> endobj 45 0 obj <> endobj 49 0 obj <> endobj 53 0 obj <> endobj 57 0 obj <> endobj 61 0 obj <> endobj 65 0 obj <> endobj 69 0 obj <> endobj 73 0 obj <> endobj 77 0 obj <> endobj 81 0 obj <> endobj 85 0 obj <> endobj 86 0 obj <>stream xeW XSWIVFֺo긵uź  IȞ$$!HX ֺv޴K3{s%۹۟M1YmIXrZB9qVzCePoO~_xWK3a hxb0[fDYIr_d;n:]ۖ7>MH%lJߝJ뗔*O<,d-ܺ+?MN;* HMۛo_hB056Y -ڳY%#~VABжYIBw$ v憧ƦݿhY {‚m{X0[Bl%>cOX[-±]X[`l/[M|M[l1d'mkחOct決`kz*{j1mpW}I3on9eҗ77GRhA'_.`'N%HU1+ Q$ee];Ƕ RcIVqrRETb}" &vR.NE],dW(SHbEZPaͅf5mT@ j:9p1,;ʼ}`T5>)3ی`8ΡMN)@ H5)˔r2,/89b0&M7 bx\rHPR,6(qAA+y\4@ $uD qJܾA*Nf'S*m7mqՔ>L\$d]4AP>~`93r.;rL}\JDuAipNB9vK>JNp3^9a(&gDSsOI:2^U*^xDܑ hKaߍ^nypp3 ˚I/bS΂L?]a W_sڈ_6pӶP)7 foG87AZyJ\ qmމ|b|c~YkmE>_X֓sw%o͎&r7hxxT B ֍+ĭ=O}5|Y.tcb w Y1?yyŅ;ɡӿ<5|EA/Nx\!x^Z }$ExHcFȓ4ŬzA]r"W<,zbni!K@.7GkmNޙp=iErvɯ!~6 [g|aMY!H2Lgp5?&SZodixj.;&*iEѼ,/\muC&vCDw%Σ@YAEgt }oɳ_Q vW=//T\%|` sSZa~ -x@}ȫ|\5Vw<,dJl4-DX[TKr;g^o. Lk7˜MпΠiB*ZȚڪʚƨx$~Z|% N_/'Z|z%U Id:WRcטA;pJJ:a8N]?8t|iGF&a:lsOzQi8vL+i#SEcnXF M5<[c번Cמ]ĺאŇvgf; 7|_vɉҾD{[Iw'BƤa;%5 J-OR `ZZ44wHAL'W>mXEk),kTQҒHظ`2 ;t-R~'f 5eztC5F,-1 ]=h6T**<^@פ gq< Ųx#?O>{~uDti 8qgm} f~`8.]g1-Ll(ѹ48?8<'<$ oVemŴ,r>tLL  l{5&+w@o5yj!750bfPlvZklnPNu*mR:4z:B}"myV[˭@5S aPAsJnxj}!޹p>C]bRJA|Bݹg]!Ѐ|МXb}!]T(@ M#DgIL-c>Mq'#+tHZJtX?ijs2(@29IKn/q] T5 N=]v4*Lc ƫTyH4 t.#s$Elqa&Yh;)>JS! CHi{Ab=sܭ;}q]C."܅HP/m:W!:CYUɄE-tXq=!]kn˂îL[%Rǥke &fOFǟy6Yj~|dERF>܊ N)ҔǀɆsm]KmQ{H<ᩣxy?azF:3}/P.K UlqhzLt::\yԑ꼃h; Q<<ѕ|0?:夥T666 hyj1CXwI hLR+Uw  E+T-AK"S.S8t&ovW4I Xݴ5VEACIC49mS%Tqg ,~rJQs_mGEVQwcƧ{䣉Wj!ZyhDmN .;(s2;$ef{y5k-z1QA:|Q]/=Vj3;,ՄlMp KT*UΠ):\_4ցozQ~YèxEIDQ)Rqڪ{'}pa.1LvW*1th7`{O7_y Ow{ꪾ .]_ @S6g ?tRO=WZ{ts>v 2eN+;dZb)rYOЭuT ά<$r`T9 i_t}\Z c՗$IMJ#p}`աv:"M߃GWV_saLKr^!HHB^Z9Ywmtoyzl}'|(t2Pҫ ޞ{kY9ciCp \BQnM+E"I㑛sxH@"1!&ګ%Ό>٣"7_ = $4*F2K&&srp쒅B h-EbNK&8Adi:!/w6Qέb,*쟈f!q{&) 7BF-u0 7 G$Gkh]i{w0:vb`'gx~9,ĸO/|X|6{P78:ܽtrv&&E1$8ˠP_?m 8$) sgā|SV&mtEd%ʽ3;M<:w}ڂYt:md{^Х q=߻ m$ pZwz>j9"ur>|j2'cǦgjN'FY;i0Q7NB endstream endobj 87 0 obj 4940 endobj 88 0 obj <>stream xXy\Sg־օZb TSkm !k @^ @ >uRigFZ[j\^tf/s{<9PQ`߼]m_2bBson>{%"8[ܴWe0L\dcJGF{|8w޼;+VKyq{T+M$J*u46}5$Z{G*SQZЈiP4{\)WU>kzp;ow1a ZULhjVmyB_(j֏Rb÷"֨i"k6wnLPڔq249&,pw[oϡ>j;OOSj=EPwNj#5EmQ>fj15MmPoRVj)FR{)?j D j2Fb5 1cncz蟙̗l {%K_OPLÓOʜ,\5A6G/|n;S|p]xSȩ5S;܆ ur?B;$bi$eTtlgʇKpJݭ~P:泜Cih;jK HXy[owv srV&`-詢fd@:ߠo5L8JԄ˜gG=!XYX%3XaW6秓7j.GQ縺q8~86s"MCB &( c܊A*؍Oy8an!Dи0.vef4Z$%&rЂ}{q93XLwE/ksv Z`{Ϣ vVgYYQnn[(a%>)]ECnQ ;bvae&OdVXS0P2ȵ6zh`1,X =" s#צC{tL. +a]pHjD[YYa"}_ }/:B ?{3l{`0kћm!oT˹|!Q7M-"mLIKVGl, iצ3]hM6O 'dHr+[ s\ }fw߿ ztgX$)P.Ia6=4tYB'<7oΒ˥<"}5i62׳˳P0!clAVxYx>ϴN Jr/BT>)>јݚ߃D͗.j5B۔\ngܚ~H mGH,#LFtd>,O#-}]VA ZɪKDkY|!O ow? <7g["m}ɱY6CgoX ``_OѨ\:iByI2 *X ~<!8 ~Rm9I[C}OEZq.D/WdOɑ<eg53~Evt̉M~?=)HV]#w(ŅA"TZn74V5 vȱ{)*ElcN36lŭn6" ߧL A(PbgJ[f{ Jh_t݊A]Wx`W'_`+C='Q K+S$ :RۺavA': ",%8Td9!υy8Hx2 ݆a3H dL;gOI*CXkvS p NkE }\#- KEBeӊ5hz+iIAy͈=ܬD{aRxoжLfi8 *7t۷:fNW὾=ʚ fӾ< vzz%g4rnS^#vJOs~'z?ops- 1 f] ]cƜ6t2f3&]e&mGuɿw@mZtw@ި΋`ZAGQZ?EXR`(a'ok:vď6}3+EyFRqxd> E 6V=S[ Ҹx6I:0cTNqFпQtGJ}M@VnLREvB!ꍨ,h#"1U.e')vҼ~:̊tG by NlԣQ 0,s0~ņjtPK_{YyVZXxC]g55Mjj9: o?Wx@;|X͠W+wkth B䛑7G7f\!=!KBrTXl%ivܢNĥʳV峣 N ,$@?F1;qkh]B|>>I,H L>N_'mYWmO Èo'8J@HFʪe,@-_p"!۰RC- ?y}7WL'"/Ggcܠswa(7Tn"`;+3Ht0Q%ͮ) =خhwk^ޚlwa"KT"a23SE e䀶4<}}V 0;ᎽΓR+=&a,+2Tېu*+P燿ݠ[$x$8 Ǻ?8,Deo1#]tvZI a g!© ڗΏɬ)OF'Y??07ih/ñG|atu|g}d|RkHHex#ƽ\{A'zQQ|r) \0̩* a'BhT!6Lg?-o,3kF T:m. 8/yjcȘ[H֗VZ*JTQ;eMŰoi>"k+FD!rmb/ nw=, BjG^^%0d[ s0rPP- u)\ӵ0q8L)&5+MIA~r2Jk(C;E?i:bq@^:\9iY)kf 8.ς,^ZQ,,Deeov‚90la1]_VZ5;\E<]W_ȭBzdH1T<Փ[kܚT$ռ]"w&J-hit|_ՔP2U$B`(TwCϛ]!D&CaS? pWDR*?f{os=8%. 4Xk' I#ҰYUz"x\[QWS>Gw͆/cqc9MKwTfxd˔"2 ܪ;I7ZP9UtBќMd x>.Ku؆IXYK1 hbs&#HnċW0\[7-ݙkKAњRTQVGE܆Vw'D!xV!|\edg#rj:{u՞aMoO\mILI[&ؗ#%4qHL<5W/:'Ӑ|V[w//$1=S=?ːyeCVUU} ^hl-rLy~Y~j/3#ef].\c->G XUciar,z SΏRey+Y"+6>^XTZVZ~lg"FSafNfhL_lJJ 7pYybՖ"5~cܱ6*&>Z‡6Ԏv[F59Bc/ucsHcD9(H-dif-vwbgdQ!< |_ bIȳ*>I;3 `$`|m֎˭D[Bխ'nt^N/r>f }6ךHNOL2r 9Ed>Z]0yvSs'?œ8*ۖWG*K0}5w8X5L=\GCbED8bD`CBCE)Yoy Ȃn*ˌs 7#_LOdzaB(ΠNksuCc%A+6nJnvv^ЉLu%[L #YXCQ2m]E^?t6}B7Ht_XEe&T:`᧣B9g}+JJ-KAɒdBh'Iqd_} endstream endobj 89 0 obj 5078 endobj 90 0 obj <>stream xzXYĘ٢MMXk]]a&RDDB' IH j zvlk[=}'ߋaf<~rF1u p]K\$~QK+,;9vMv7^>33XmpydP@`NYe1?XEY?J%~a묷CC[}|}|-X Z/+V.?V#񋔾g- > YEGʭW $b'z/ &'q~<۾ m~"G8 t+&ewl=q>{ec6~gw=?Xb2lγ]6 ֭X~ 6 aGˈ'@l'>$ GbXA,$Jm™E".n}b1qC&!\]aO|@,!܈}Vb-N'65/oWlUCH1B !1VkTb31xsI&$fE>AG1QGxc=u))7Cܿz!GVQj/uB4̗^r^xiA~6k_3f̨əY̧/x3ij7ξ," U?Zל9ys 3~3Uh]tYT|@|T\ njcޟ^|?X _^wa5,b1l~81(TJEлȭ61+-QmFm2ꮾXlW)&2 F[yos]̑,mA]^đw"a/z;!3M(f3(˘S,/YRn*!T$2GMa)XiTϛΦ  $KS:Q0WoL)BPf2e&tLEզjD邬$޽$(@m"bd*Att\\Tpsd3b}:KLY'cn[cr 2 ] 8iTn)(leha+ubաȏj _呓Pi(>+Twi\Y^W0b'qnLL^sۇz{Kw4ht4uɩUO1WۏˠDy&DR# @<$\$T A)%>C`Fge2H 9hDW▂Uey L5X=n( xmP:ͯH)\eQm򢏲6 ǧ9ϖ=~LS&A9*#Ews1H=)1L򐑟&'ĻXy fjc B(=13ǗrtnX!3τ0o+őQcEł|EI~N>*:Zۛ /mԅ)9U\QP]Aj*M=VpQEddv%;Uw ="?f1왊ojR1hd9p#ֺ Jh$"a%τ~R˼22tPD";<%;ֳ9 _AW\eЬKm8(؅%M;suwXz*c\.Y:Zs¸1.|eSJRT8(f?3=ڽ a< ݑ=&F+(ΩemV):ˇZ{)ș tF '5{aW$'qc`<^69!QXZ #5%IF07gfP"NU?l"@[)Z]rLT4tb{ʓ 3-|6e5 [Ebc13 :S)rU~G &I݇}_@9£ǰĠT6ж;N`KXR2KQw}.-h Xָ= 4x1-/b[bhpWri[\xTnQsIjC[hVR(3|M&?jORapHq e u!BÕT[poTw#zP̃ji<>xwxcN" ݄a͐jAsѰ m;/Ե]%2骶!YUqr-k =ak%p TKWd?䰷pDEz0c&8WK畗VT5 ᇉ 'vO;U ,jgO;FHr_6 rFs䵴yG_S\h ~ {rQlsm!S=GR^q#сG ) l:4 +Y7\y;'9KBl~oÀm M ;HH[.zK |%yrvMiGo_d#]~"- ?0{Dv sLX ^:]bgGϬ~ f vV%f,ASqf^[bYKPc\@/~&ȂBA(/+i gw\n %b^ex 䨹¨ +DiK]e.j=5+B ]'VM6(,M!Gp:&ػTvK=~-|~64<g /6_@3xQTXݤ{P볔Fpfc up upGT*#3Zˆu{pMS tG(4 A) \F} Lb *IݱFVHc/d}nn!qW*KW5$/M[Sdu?rq c(tM~eQ]ۛK3Q;&p1TsH]n~PT*TZ[m!ӿkLA&toܕS?uu fLF*3Z!&O^K mٶ¾ZX&+a8bzh>;o{k{O:JA'|wKbrҳ98=tnSS]K *U3tVL0nQ8nE Ž#b>́2jQY`\Am/;Dfwu~=I^h.\ySxh{a˧9VԐz8(|0b%WLl^,[xءh K]B~%CÏ==C#&A}lg0hur: X2 l$X1{4 ǠTY!P[_,WWS<WB!RJ(&J}'hE1e(,•1U9>x$@IK5NT?x1hUossg ̱6vz&`yP`VaMzR'ꀗ"Ix*;# //x"w>1 jsEISjϡ'̌_V\AX+:s׋Zkͽ`;"h?ڥsAFK*&lXF\uԹL.r“}uGD^%iPu+e[4cZ?㎻?''RRL(>BoCkAaQu4JKkUd Őz\ >Kn8b;u{E;u9NOFCo \(*͡&_m|$ۘ ҳ"]>Qs9u feѧrm ÝէZDH6uWİ 'sxmo܅Ķ(8#'LImZ hMK1!ch2>* iuEl.y)T2?:c%S5~xy!(V}!NuwX_:'D|.wh?܈ydhS̺NewR7v ԗ~*g賽zemcDn{v9>sD 6va6M2ꁮPq&lpڜat9t?NƈQ)Ug;,F8jI&4(JA^N-w%P@RicB$ i#:jT/PO*l촑“F!Tsd,h?牜 S) _HM^JR%*U~<rELHw8}8O6?M5c^42 f"h46 )lUEP*4&p#oGyd5TT̽XL_ FY|fu6+~1Y2Èz"d;M6bpJ9դ2MӦh"B7A>4,ڄܔTgA;,]VR<7)C nlhk|e~%[ ԞX JMfy8 LSJLLJi NL'dJf"B>'R*hu`CДmv,τȮI*UΔ /$M~v9BϋJ>-QʨF8lK=nv:|HެĎ;xĂvHFW)-9nt{Z:d'aǖEns'SGb#TH_MIxLtOdn$:9[7l)V](R _"kabP,!+o%ՑR)?hdSS @Tfv) 'eY9/x׌7,(@S[x5&>;\Riw(&לFYA̎/v|?Qt~1tq*AY~}ڃ[<㪪++s <`+Sh>EQ?mL*(ʾROũKCe=?|['4&:P'Ʋӓ1||3}d2 x]x- u*` 3oQ8 #іG'ZRx9]9>)J/٠1( [ΘhڎOtXYFk^M ;4<@V13v JT*4=hר:*X `:AWKnDhS6͂^&2ĕ739ChBTcZwVBBLdh>AS VP ņ |l%ǴT.4Q҄\\5g^五`{0;y|q<8+ϲY)FP)1"MktѰyCMU_i+ג8Y7D9e(KeP}-e>_n#FpJJrფ&*"S.]Bx/^xP$?TwxƞG2dA%hhWpn/p&9GtX- ܌l`tw~x } y2/#R4}#@]ZNbez0Boƪ^]Upru> u]쫺ũJd>$MFL6;ƒ|.cx& 4C2*?] !Os˺?Th^/<yNu{tU`CA@/߾xiLSuiiQ_,'A<8|./KHWHa$Q!a1U5L 8ˆ@u& G^؊=ShG ґPa9Oh;sDcm& |Ϗ<Ԝ/ľ.~sM` /lsm i@z NNa6wa׹Mí߶wxxzlVY5"wwGMM\Uh ~1=@ < ヂ\]C7aƷhzwOO 2͇o}}CFG֖O3Ey*"brLHk:mR?yāsn% ;3 Ѡ&!#i@:H&g5w="HKo0TJD!U T ~CQnםTm٠wSzr]7s=d(2ca N:Da(3W'mNܻʐZX! ք&hUzľ!E%I9zЙ[\j*eIRF"%11 A-s r%/S*幱PN) YIp{\uBi2e|\TDCר5 ucz#IIՕ%9RQCKNN ߐViq[hEx~ \x f֐mTSqq@J٩oaW\i|3ZGV7Dlt@$@V`u}g.c{ol}(X.L4:#pOݿ'M⊒6Kf^L n(E`8^CRny#ws-з<0mb07}ը0(l5)CNZPhh@%<%օZW?)8Y]d/,UJ+{7nrKiJ%Ur؃&H-*MQV|D0p|n[K"=u$0*:(J֞k2N0W"?/':B;fcRS8|mD ,,* EH/ 2ƸMtGDNwUA~POpfQəI隔PJNĉS̑F+J+9My#w)򷊑ʢ2YZX$;3' nmHP@SD(k5R&8>~BM_>)m7>vq|ksE/aG;!گѴD̝CsȞMnT;:$~Z50xjtʍ>N#N~TRR- ]p`cӯ`ރ'cOpCwAX)+ɣMų=S9@3N->k1Kuv9| 1Uo9h!qZ^ KI$JyrbEПA1IdDhXMdCSmMCSDt,: sX,"ˡϑ#<$$&7B-/)d,!O2FʃVxeɲ!:2q a:5)F16j 8zHg̷`AiYcKO'n}1A;هqT3k9?,ۆq> @Gg?D@ҐsɨQp4hfR#C~z?/ ܧ8UW$5¢֒fXSݨ/y>zF˟]x%4c %mmgZ ="C8x2 tueM8{b|Ƀnqm*#O*#9si^A On~cZQrY,ZCw/Rpgr㲔@E#-> i-Q7"j8ڄ`fznQ]ܐ&˅̎FˋLV|\ >ܾWx.vGar/p lG[vGczyZE-s,9H"p`S.췼ڵr 3 X]!bˋDe*LpB8aOS*`X3qOv#BcɑdH{?pr6BrYf5~y!uE~1owk]uŚkDW G[BA*Pץ 5Mgj=E#U!#ޢ[ls9q;|ࣦ=u_^W1w`Ag/WAkLdf3Hd5KUw9\V d9N#%p=ۮw9s_ QU$ lo Nk7x-[Jv G^ky/ X$#&#fJ榼R6#d9ls,LnoZFmnCYC#㲪UF̹i,"wW1Ź 5 k mLvLxp)Ҫi~.Vkl 3T$e ?(U}1?xT3$JY柾9Tqsݽ!"I2")Esg x("#T3"'0nO`nD{٭\47wXYs*D-^u}3ӺoZ[3RYrRN6ƼW_}R4o[ endstream endobj 91 0 obj 9177 endobj 20 0 obj <> endobj 13 0 obj <> endobj 92 0 obj <> endobj 11 0 obj <> endobj 93 0 obj <> endobj 19 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 94 0000000000 65535 f 0000053012 00000 n 0000077063 00000 n 0000052824 00000 n 0000053355 00000 n 0000053207 00000 n 0000053060 00000 n 0000050216 00000 n 0000000015 00000 n 0000002585 00000 n 0000076440 00000 n 0000074950 00000 n 0000076094 00000 n 0000074309 00000 n 0000053134 00000 n 0000053164 00000 n 0000050376 00000 n 0000002605 00000 n 0000005530 00000 n 0000075756 00000 n 0000073815 00000 n 0000053502 00000 n 0000050520 00000 n 0000005551 00000 n 0000008559 00000 n 0000053556 00000 n 0000050664 00000 n 0000008580 00000 n 0000011568 00000 n 0000053599 00000 n 0000050808 00000 n 0000011589 00000 n 0000014363 00000 n 0000053653 00000 n 0000050952 00000 n 0000014384 00000 n 0000017073 00000 n 0000053696 00000 n 0000051096 00000 n 0000017094 00000 n 0000019705 00000 n 0000053750 00000 n 0000051240 00000 n 0000019726 00000 n 0000021935 00000 n 0000053793 00000 n 0000051384 00000 n 0000021956 00000 n 0000024163 00000 n 0000053836 00000 n 0000051528 00000 n 0000024184 00000 n 0000026840 00000 n 0000053890 00000 n 0000051672 00000 n 0000026861 00000 n 0000029785 00000 n 0000053933 00000 n 0000051816 00000 n 0000029806 00000 n 0000032778 00000 n 0000053965 00000 n 0000051960 00000 n 0000032799 00000 n 0000035118 00000 n 0000054019 00000 n 0000052104 00000 n 0000035139 00000 n 0000037617 00000 n 0000054062 00000 n 0000052248 00000 n 0000037638 00000 n 0000040511 00000 n 0000054094 00000 n 0000052392 00000 n 0000040532 00000 n 0000043927 00000 n 0000054148 00000 n 0000052536 00000 n 0000043948 00000 n 0000046811 00000 n 0000054202 00000 n 0000052680 00000 n 0000046832 00000 n 0000050195 00000 n 0000054245 00000 n 0000054299 00000 n 0000059325 00000 n 0000059346 00000 n 0000064510 00000 n 0000064531 00000 n 0000073794 00000 n 0000074851 00000 n 0000075644 00000 n trailer << /Size 94 /Root 1 0 R /Info 2 0 R >> startxref 77203 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_cleanup.30000644000175000017500000000166410265631023023516 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_easy_cleanup.3,v 1.5 2004/02/27 15:34:06 bagder Exp $ .\" .TH curl_easy_cleanup 3 "13 Nov 2002" "libcurl 7.7" "libcurl Manual" .SH NAME curl_easy_cleanup - End a libcurl easy session .SH SYNOPSIS .B #include .BI "void curl_easy_cleanup(CURL *" handle ");" .SH DESCRIPTION This function must be the last function to call for an easy session. It is the opposite of the \fIcurl_easy_init(3)\fP function and must be called with the same \fIhandle\fP as input that the curl_easy_init call returned. This will effectively close all connections this handle has used and possibly has kept open until now. Don't call this function if you intend to transfer more files. When you've called this, you can safely remove all the strings you've previously told libcurl to use, as it won't use them anymore now. .SH RETURN VALUE None .SH "SEE ALSO" .BR curl_easy_init "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_init.html0000644000175000017500000000356310265631023024025 0ustar danieldaniel curl_multi_init man page

NAME

curl_multi_init - create a multi handle

SYNOPSIS

#include <curl/curl.h>

CURLM *curl_multi_init( );

DESCRIPTION

This function returns a CURLM handle to be used as input to all the other multi-functions, sometimes referred to as a multi handle on some places in the documentation. This init call MUST have a corresponding call to curl_multi_cleanup(3) when the operation is complete.

RETURN VALUE

If this function returns NULL, something went wrong and you cannot use the other curl functions.

SEE ALSO

curl_multi_cleanup (3) curl_global_init (3) curl_easy_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_cleanup.30000644000175000017500000000142510265631023023652 0ustar danieldaniel.\" $Id: curl_share_cleanup.3,v 1.3 2004/09/16 14:26:04 bagder Exp $ .\" .TH curl_share_cleanup 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl Manual" .SH NAME curl_share_cleanup - Clean up a shared object .SH SYNOPSIS .B #include .sp .BI "CURLSHcode curl_share_cleanup(CURLSH *" share_handle ");" .ad .SH DESCRIPTION This function deletes a shared object. The share handle cannot be used anymore when this function has been called. .SH RETURN VALUE CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as \fI\fP defines. See the \fIlibcurl-errors.3\fP man page for the full list with descriptions. If an error occurs, then the share object will not be deleted. .SH "SEE ALSO" .BR curl_share_init "(3), " curl_share_setopt "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_cleanup.pdf0000644000175000017500000003762310265631023024272 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xTo0Oqomu-MN")TR ϰ&$B{LOob]=S[O!n2&Waq[1NA[x_fU6DwKb-uҕ ף ވ4äaXV:  r!kd2kfu#ps&5D H0R~~FPE\ { a0dz={q-ж&yq_ ( _M>xnK6ق\qQGt:h'OgJ#ib;FQ-&I3ѝ96NR Kvp~9]D'ro&i}iZdթD4K8󢆕}qQ3=I>BԱŢ6o6GJi6ֶ<Ц]pXN greM>Ԗzendstream endobj 9 0 obj 798 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeUyTS!&y:(䥭uQ\ftDgdD@\B$ @H !/$M"yDvPee N;ms㹏>zڇ==}]2a0 #_@D&Rٕ$% rG^ûgE %4CɔӲ+c~3냂ɚZa"D,*4C!ɳ Bio)@,(Ҕ$P$Y$ %RB Taݺkf>,9[)ΐ%2{"q4)SAS2LeL^m!H$D!;pBv#qH"$,C0d£!Cf!0c>}ʙ0Z=j`>VK-K‘;;H&_T'L%T c7a2KS5={#ϗrkP~rg- X5z 7\󶿯eMI%PA,>,Uh[o% $F0^̗L=/&J}ђ^:]ҔoY Yo3#ԝ'Th~ #LFISۇ*-X)x?^wQ˩TjЁ'.OZޅc%*YRX*RD*:? ࣿ1 6wwxpCW4h\sR)NbI)QopGh w9A @khthPWYt|=&`5{՞g|7q9g*viU =VgqUK& _T]9z jA=Jm|ДZZz ұM:SACWf9KB$L'bK4 Gb?Pd d &)MA P;S8v*ꅻvQdյ_/4G8E.Es謙Fݎ,Ԓ2)0λFmr6__ X ?l|nm}[K:a3y=&̄l2l*0JSYYRQ:8EW X8MA{9NԄk-9G~)ASrz:&oU5"'K^jz 5=] h @ OP*vv4֬=p|:@啧ȉ,nG^l6:EగYm.#}#&I*[?MY4\ *TvN<:Ԃ*F@$uft˃9\E@Y]Qz9Lcpcv nĨeӵVbwN@[_Ћ{I //b5dR-%.u/ ƜEGό#9)?*Cmq1ރV8JT~& .j |q(|R!ɕ4-go[-s3/`s&ZĻm+A60lf[mf?j鴍Uɚ q0 8d[v"x'v "TQViiư+W/^11`,Ql^T}Od'̆M'd3 Bc̴i 1À#SiIߩ`#fx+\.m,..CnLӕ|ʷk>|%Xp(lOMRX<1oCJg:8k+@wU1_.bXJ9 \V#'%jfhu˪7vcz&kH޳urut1wq='92yޏ[6{6 endstream endobj 19 0 obj 2109 endobj 20 0 obj <>stream xVyX纟R%g$u{[\pKEѰ’&%H K1 ..bKm-K{fO՞c{y'.;Fҏ Y#whWY ;~vWFǢQvo uӣec>""&2uސA4ģ VE 'XI)?GNd~.W( =_cHA |#ŵ(ŗUT^ȦA3Q? VUVնע=(å QF;[QЀ.P=Ά} MHԃ9n qqQyш]}["S\:v&:'w^^}?{0w{nO< 9\C ^妫t0ϸ7&} |Lafi5>ΫŸJG*PvZà}ƀ"\PehEY>}q'=JX|2%b_ǿ=^=|L/}9)57zCol;3>)#˻ JNA>wang;&NJcn#0- YxK8TRmקg2{XH6IS6f%=͵ϵZ} C^. o<rOV"(Gl[s͐qJ1': Vx 46P="P`/zs{k}هe+|#˰K. OVg}9+Y W>|GGRҔ$돗rTpD^u0֢[,7[3S{ti>xbmf/̶c.{DӷuTYo~0BL[/AkhN&>Ew(gb PlfJb:6SXekaqHX ;\Evϯ@E"Ps=\RbfJ{t)Bf 46I3]ΚzdJ\رyR8'ߖ;3@K?8/,`JrKJ1u}bzeR)8Ko3ZLQ͉N[.`ާdukuv9::MmR>9q0|vOnlR,5[U$w5#B$/B^ǟ3cn TWWe"ePod[r@Ham!o#E A$MhLH w&:GU}<){ VA `x 9)N-*&UTQC±OR.ľ7bU{F_(gGXGWRm36nQSkA5x,xOG߀ŝ=gex3䅁G/I{,)D$ko_Wb|!,fPXv^c;9 4f|, OJ9(cp ̌|"17J`]=XDVl`ﲋ>f{Փ#N 0iXYEi 6: 4fP̪Я,cҙjH<0C[L5Br0Lu33dٸ P˱BME_IDA,$~ȡYy3 fЄgPYnW17Kmz 6|%r~UpgkMcO%V= ܁__)|ˠ榆:Kd}tqC>&cKlaG\Nu F t|g]]tC3Z4ܒfWrZ t1")i\AAyyRZd|-!c#.{oSI"++BU7ѡ 2=>L#Bdr*Kׯ^#?fQe`šW9ZoLClrfą fZ#C/Dџ6$Sn̎7&FPjo8mFO1cŵECP;л}qڇԂN*7 }p=}w3%X s5ΡԴ a_y~}])xį!^orN[Ci;=`ZCgfzij\QA\ B 5N}&9#C]YД*)+L˽*`fon)}J8^&Xf)bC-Xcu.>8QWo9OZӻڻkM6~tݝ[Sl՜ w"44^) ̭o! Vp elsq._>stream xmXyXSWڿ1&j+iFm؎mP[7@"B $@v@v $;a}[ZK3vw?fxxpyya `4}^!@(l򓈢{\ *-'%nFÛl# NiϟKda @u6l9GOƉנ?/Nv'& ?uKI)Q11D~~aP*;yMcN#i"~dP+ SeQ"~\(*o7!&˜w(:-G$n~Ĩ\0l^rI439.E*?I`Fb(zs񎍮6Gl޻ [aG1l3`;/s`k0 }buXmc`!al;c1&œsa{#aP갅S   it.XfdZLb9q_kͯdÒ[&:,qY̶^|󖛖+Xo"ށ9@juyvKJކr2U!\qOU#E8S]@XLάļJž<"G{>\,! +^S)Oם2T|&;+ ìxxfW̼q-̡ &1 (9 YTDdr|^+6HP6Y@gS)!*&'+HW孧)͠,ƑBE+Zu2"'}Ed  PzEʤL%Ё!(/"5##%+yƩ s6Xmku\"g)- m}@fχ5[J* jp }P P T| E0L!~D_]xW5]ވ` cRvĆ#]dp4K{NB& 2slʟzzrΗ7m7M #~p}kG`\֛p.s^>9T,Du_Q b`d< 3D khjj'e`NY;5:nMIS &k]SodA҈$^Rdn\N-)u `nzux@}pdA=ޟl 3NPoB Q1O_Xj f)̮DT2 R%CU&3Yr[YYbRjTn%Z6cޖ7dhgFr%Z_QlDKEV$ TF^h-.0 9VV(tf@4[jm(qGgAiq*LKzv[nk[x҉= @0;I+$@.m/y2\/Ve n XG4>veУz]T\j@}wO[yEH2-m6K8 ]_>MOݪ81=&y4 9gU. L  "F]4f5[U]nWjMxژd9ڢ|M@jJV}ἩȉL͍&E"\̸Ą\]ؤCtUӟO>}GaKj-3i!}VݛGPo/8ɣpp@սjkrp_}r4 /yzavrGKTF\t>тiL<"B`%C5=; U563*'hXtanj 0Kj'XC|MXcT{&AnxoiO?E0/ ng·جi[U \>ubShzT\&7"IPۉ’.m}9"h5YjN @Aq8Kc8qiL7WU,פN#(fi? f%@}Tb.旐Q]oƂbȭ!0-MMHSmM&1ρ=^Qg}^C>0wH=tf*5pJӊ)CChx o+v V`d*3ȔzƯ2:p \>N"{ jWlB 99+^tx ڗ,:m*ДhZ( ;(TUU_ڇ>{Mc?2xom{yP*<nʊ++]~P57 +b=gEڳm[шe֗G֊pUf¿<ق({pPR^i44bQ]j?;ZpbE-J@1]7uRWF\_-$I%Uh.7$7+(l @t&,$Mg `t]ݚᦹy%Q i1Gleť(| u4 ߯= Z80{)|` ß)OS}w |#fO%5weg9=n4 ւU#oQ/=Ϣx1-gz'}z^j!rZjKUըng CA9p-f9-8hM%gNZq}:NCm@YhjR8j۵7),'Vv,X@޽O#ֳLjmm:y"&6q sȃ߳ot]ӂゔTaBSfok,eIl`,mx}(p[8B|gʧR\d%_6-~ǕþCǏ2&ֶ +Ɔ'9_`g[t6+ް=\ [(nInlmiLjٟJ-?MO;uα_Yߕ_>jhԢ Rg`g|?$\J({j =3R>ŏt޾=0 ̣A3:F]Jd*--3֖VU(x/sSr9ʂ(;-GYAh&xH6ݧ?=[eS* ?>xq~pOc BEܣ!iޮ[;/#\iJ_vw`WK9`5\Mۿrߡ cs,WT'7ڿQ(#iM&Z Yք31i%XgoM[ׅ-8HHJ;jw7} "q{EI ־ =o7 oM;`qyM#}rCj~vvQOÀzf_(_%K1O endstream endobj 23 0 obj 5010 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001130 00000 n 0000015556 00000 n 0000001062 00000 n 0000001484 00000 n 0000001336 00000 n 0000001178 00000 n 0000000902 00000 n 0000000015 00000 n 0000000883 00000 n 0000015175 00000 n 0000013883 00000 n 0000014801 00000 n 0000013397 00000 n 0000014506 00000 n 0000012953 00000 n 0000001252 00000 n 0000001282 00000 n 0000001631 00000 n 0000003826 00000 n 0000003847 00000 n 0000007815 00000 n 0000007836 00000 n 0000012932 00000 n 0000014421 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15696 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_setopt.30000644000175000017500000000442510265631023023544 0ustar danieldaniel.\" $Id: curl_share_setopt.3,v 1.3 2004/02/25 12:34:19 bagder Exp $ .\" .TH curl_share_setopt 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl Manual" .SH NAME curl_share_setopt - Set options for a shared object .SH SYNOPSIS .B #include .sp CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter); .ad .SH DESCRIPTION Set the \fIoption\fP to \fIparameter\fP for the given \fIshare\fP. .SH OPTIONS .IP CURLSHOPT_LOCKFUNC The \fIparameter\fP must be a pointer to a function matching the following prototype: void lock_function(CURL *handle, curl_lock_data data, curl_lock_access access, void *userptr); \fIdata\fP defines what data libcurl wants to lock, and you must make sure that only one lock is given at any time for each kind of data. \fIaccess\fP defines what access type libcurl wants, shared or single. \fIuserptr\fP is the pointer you set with \fICURLSHOPT_USERDATA\fP. .IP CURLSHOPT_UNLOCKFUNC The \fIparameter\fP must be a pointer to a function matching the following prototype: void unlock_function(CURL *handle, curl_lock_data data, void *userptr); \fIdata\fP defines what data libcurl wants to unlock, and you must make sure that only one lick is given at any time for each kind of data. \fIuserptr\fP is the pointer you set with \fICURLSHOPT_USERDATA\fP. .IP CURLSHOPT_SHARE The \fIparameter\fP specifies a type of data that should be shared. This may be set to one of the values described below. .RS .IP CURL_LOCK_DATA_COOKIE Cookie data will be shared across the easy handles using this shared object. .IP CURL_LOCK_DATA_DNS Cached DNS hosts will be shared across the easy handles using this shared object. .RE .IP CURLSHOPT_UNSHARE This option does the opposite of \fICURLSHOPT_SHARE\fP. It specifies that the specified \fIparameter\fP will no longer be shared. Valid values are the same as those for \fICURLSHOPT_SHARE\fP. .IP CURLSHOPT_USERDATA The \fIparameter\fP allows you to specify a pointer to data that will passed to the lock_function and unlock_function each time it is called. .SH RETURN VALUE CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as \fI\fP defines. See the \fIlibcurl-errors.3\fP man page for the full list with descriptions. .SH "SEE ALSO" .BR curl_share_cleanup "(3), " curl_share_init "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_strerror.html0000644000175000017500000000332010265631023024733 0ustar danieldaniel curl_multi_strerror man page

NAME

curl_multi_strerror - return string describing error code

SYNOPSIS

#include <curl/curl.h> const char *curl_multi_strerror(CURLMcode errornum );

DESCRIPTION

The curl_multi_strerror() function returns a string describing the CURLMcode error code passed in the argument errornum.

This function was added in libcurl 7.12.0

RETURN VALUE

A pointer to a zero terminated string.

SEE ALSO

libcurl-errors (3) curl_easy_strerror (3) curl_share_strerror (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_perform.html0000644000175000017500000000711010265631023024524 0ustar danieldaniel curl_multi_perform man page

NAME

curl_multi_perform - reads/writes available data from each easy handle

SYNOPSIS

#include <curl/curl.h>

CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);

DESCRIPTION

When the app thinks there's data available for the multi_handle, it should call this function to read/write whatever there is to read or write right now. curl_multi_perform() returns as soon as the reads/writes are done. This function does not require that there actually is any data available for reading or that data can be written, it can be called just in case. It will write the number of handles that still transfer data in the second argument's integer-pointer.

When you call curl_multi_perform() and the amount of running_handles is changed from the previous call (or is less than the amount of easy handles you've added to the multi handle), you know that there is one or more transfers less "running". You can then call curl_multi_info_read(3) to get information about each individual completed transfer, and that returned info includes CURLcode and more.

RETURN VALUE

CURLMcode type, general libcurl multi interface error code.

If you receive CURLM_CALL_MULTI_PERFORM, this basically means that you should call curl_multi_perform again, before you select() on more actions. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied".

NOTE that this only returns errors etc regarding the whole multi stack. There might still have occurred problems on individual transfers even when this function returns OK.

TYPICAL USAGE

Most application will use curl_multi_fdset(3) to get the multi_handle's file descriptors, then it'll wait for action on them using select() and as soon as one or more of them are ready, curl_multi_perform(3) gets called.

SEE ALSO

curl_multi_cleanup (3) curl_multi_init (3) curl_multi_fdset (3) curl_multi_info_read (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_formadd.pdf0000644000175000017500000007274410265631023023100 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXr}WLm1fpORz嵷lIrAPDh\F 蜞 B/qT(>|b>̧{>t:fw'&%kf?pQf<1HdO36[ if|۔u^a▾Le{oj]~;\ DӊVYD1>.MNO|,"e2E&ʼn|20IGS!2;HMVͻXWMtOElvŮ.ofvARSd51Ou7..n^ $ռ.;e2 !e:{{7'2\ڮ;sauMv]D:DQlLgNܽ}Vfs.#a)s Ksaׯf./FT ;:hٶU FU VbemrQTw_?Cꊵju(jWi-ksɴKŨ~ gL.uzl[uE)p.z H&M5F?˩. w07,%/K֭~NOQpzpȔGqo7*cCQY#86Q-m򶥿 A(<@!/牷S #awD#n@~ |oE,lQi<#@]Z~.)KWlN-uY6*PMf<]e ui%\%k :OÔom`jQe)gmY_$q=6gqcM՟n3d ^!Ȱ|L^7\LȌ0{Hp>#Hy RVݳEvȶQIxv5iN 1)_jlEFڎ&)q6}jn;5*X8vJ{u"\i}o_t>7蔦.t+j-Kj .=S.OUs {cEתr;J/(zkyX4[AfhZ"<ƅ0pMуZ' Uʰ H f(nT[ojY~7 P0-YKٮ@A-XޔÛ$,9?h_?ԤTgNObc#GsJ(EI9+(Tf(m3tG'Gg_>RbN !̞F26zQgT?~v\k(Qm ێ|~[ocB?g$t-@RkfBJKZP 9Jٍ+3tlPHÉ}FíeKfjr+5H(":+C6D.j:{wV*)+~Vpz~4ΌB`8v!.H)oa$@ ƨEcZRct5dhfƓ0QN* @edo[kZRқ޿|~yX:XЋor -qb2 i}+Z {6w_-@2@يpFeeaC}Jԧ U3ÔV,ђC0f`]ԪNV:Ej@S&cW h&&IMg-7+D-ՎցxE$tK?BaB9jEEbv?c&\g$$^Sp:I?[X0a-aIo&In(vUY3<IT{v00KUAfA? ,3s98a0l~˨۴< )4(`~ Ē0ӐfW8-\{gǨ>.wLzDV]un짩0~vPR-4imm!T'_լ;Imqwl6+,e# H-),lTlH>tJ$|cI!=!3ކy!j,Bi?N<GKBE_O2pt(j΃h}I&&ӤSyaR4⇧Jz޹kq4zs=x:<ƉÂ}cz"1=3uQysbS츺ڇ@5v5`odzk{$ߡbI?CfU}zI&aW5<#@Yȃ$"~i"ȲC z`?J#ķ mIwamr%J$4> stream xXnH}W<w>:igҍ,7 eds""e 9d-w;˿Yn-bB?s?-{],y%=)6 V4`i,gv!˜g!+_򰯿nV^xduuC 9ȚZm&lzOWX㿊wzhoܴu.f7LmnYNZ5k7mzWӽ o}a-8~kVs)|"OuS^5 P5QᤪackK:hM3$B(fh9ѥ@4vc0 Äxڎ!]WUlX5BkQTr\ahewbhgFD?ό,!& %B/b}6;j@3v%=&Ǽ%9b>6tS&,1$`l9c;)b3gLG';Z2e/4CM19Χz85D۷W/+$d;ƌF2&t̨Gx5V V ?tTuZ(7EsPqڊ/IJ70wnVjCÔAM(SlYk_ƴ/=><׃,^1?{Vh< {ޫnPC:`i'sh&y+Bi*3C` 54;j몔=&֟!¥G1r A#O"1M5X/ ZZwx=MH;) nh-ib+2r1omiK7|,ot:.@UE$_?A$DJσZk]cYE ?+]ij9Zll6'f }b{~uuIIY|nGs`S0U]L i]A񼎡&8& 7Z[+5S}ݙLH#rx`~4{L?0RUaϢfi1fU8KZ0NjȔ=Bɽ"}3I (LdS~̰ʸ)F .6Ɛ7ms>i!XSGrĈh?7RF ;dÌI?s6(V]};.Dfv &H75àCsIba`H~uTs0)4KcXC 9#T8ӽ8hCaE+]Se R4eҪ*evdPRHr 褠c| P:d(r_TWWnՠdr9^7Do`=&yJbrQg3Gߦe7zpWfijKaڰG R9Fm# -Ƀ-V8]G_"> stream xWnH笠ʏƎcv+BYmrHAa3ޱ 1Dݴ+$w=̜C7Oq"^S>+oAzJkhě)y ]"Ŵݵ{PFjJ,I#:XpqC&s ̏W~ϪkM TQ~< yw +{G#sl-C7" T?K$n"4I! ӔO$[4t)Z-wԽqQb^6bEA2^;:9,*D D>s!$G@WW[M]š_)> !)~o4VxiX3qU@Q7KJ.Ln*y|+8Z `$dGJ" wW{%k5uiԾ1e ud]oշ996"걚Տ*%1gcZG{ īwEjMSYf!LS EֹUBt:開~8>9 Hb/b &y w p .&|TuԢdidxl{*ve :o x I ఈ o( 8ߟ&r=54dsUl :=xw lo-9: }*ʻx\²,w [fQrRutĩ_EZ՘ B RR5ZM'k*.ڀt8].Ϯ Kض Hlwh$~osh#eO+s}Շ*w9@M(QOIX]F;SR¯g;A^bGZ\鑾`T[{Ve4oȿ孻ONlwuW =90U";z_=깮endstream endobj 24 0 obj 1102 endobj 27 0 obj <> stream xUn8}W JňEܬ u؇) E6Џl'N].@:svsȟ>ӵqgUw7N4:,A$ $r3>i[eY,2+ յl;yRI(gvH:Y76~$c?#oK@_j6}FlA>۔u3gy"t~8.'8sx>f6m%A i˺<{;Cyf ys LJFe[Y126uePTvT`m*nvpx#81^_S|"Fy !mvscsR9![/U81q;tO=VG BPN7F \Pb~)eIK!N՘/ʋd-PHVFsDfIr\GM_䢸in;3<(U]BLd%V(2X'tgbud({`̐M D w.'ӱ+Nk?nZ(((#+$5)d9 |*Ki :6r O>grm'~uRV*Lm=ba.D #ӁU,vI}EڹR7to8ͦ;f8hFIb_Oᒋp1<b4b@w~%TmpTt$СvKI-+شBhՏvE\] Now@Y6#|}][`*Ef$ӈ{C~1;Aendstream endobj 28 0 obj 883 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 22 0 obj <> /Contents 23 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R 22 0 R 26 0 R ] /Count 4 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 30 0 obj <>stream xuW x庞P (ED<*#k-6MdYڦM&)w(ZY- GQ9Os{;df"CXɻ6ۜt)٩D39y3e"mO1,ViM(;38nfRYs; ,YwPۓ$=@_z*v.7.3W.ΒĥE#%7='nmvnX\P7sլ,X8^ڒwP*K(KɏR$nS\Bz47(* A۴ByeU[d%+4q}RnJެ;0ٛf\9b7O&[4bX@@#Ӊ "XO,"fIebxMJl&V[qD1%&ˉ'?1 ßbdlpL~ǖ>Žgws&r\\!\C6]4qw/y'o}&V{fº O.x'q'7SjxǟZ f`13FFѯ\l(BF Zfp̝Js@*R4 ȷaW'03uʅ Lѫl.sQPAG-ːPI ir]9+Ð-bNM:2F#ICwT|8V@Xf+J9bg{~<0 6JyAYF]"UU NWӸ4*ҢHiGp w7$+pB5pl-j+RWR4(oAR.Q̱ tLɦYX“` d8_R!ˀPz= Q v#5Ow6nG/O} -$MeZHsت@64$/UDN\ݙ=Whj!}.u-aU,eڧk莓>(i*j݋?Oܚ& ȄWz0>[{~d5uAe5)n wţ(MG ^#_.fPY qA392Nw[m 訮h&~ʹVxVҁI*H'ɰûB 8G%PzogjL4w>곈/BU8M8 \d> ^_}H"b=M|w?UtW!o N'{E@ʖ1,ѴЄyaV]x7f6q\gh+CI^u|]8wO]l g*J u,f71CL~=۫ݍ@ t,$ϐhSmx5)~^EE&x;tjP՚ yp\t {rnZf9V;m YϣyR6 `u`XJ攭{rw@tv)-ש+OʼZjK/@\c}{۩r8;M/4 -DK߾zP>|p@k<*#+]J F:Cu&d50mE%Qܷ3!0T )LǑ6@!~4n <`|Hk稬Ic|A9p6>izцUy`/P@a"M..X:# Z,W1$"Aox(᫴wd0CN%S'*:*tYl>plҺLOaU! T_jc˲]eWwUTK)m *lB,axo,8~Yfx͎ p٥* [mmbR\HLIJe aűRT .'2R@GX\삾_/.Ds.}FS~Wnsʫ@+:ȇP"Flpxlfޣ¢J[ܠIp -6*d kǦeݪFUͦ[xpiXC}ihd}s oG7dh;ܮJPj!a-w/yTȎpKě~fTA8e}\ @(sH頧ܓvN8/:+y9s@b8btl6֩54f2p1xj:8L6^^'O0&6U! T6ra9e"]f)3J l:z޹a6j٢2T"JU60H7jA/ZY NY;;\iWܸ M5r ='/w11#Ff B[ZvJ=2Q"ڋZ L|n?R9@u4gK@ @j,j4]_y ]M%u_S:Pk*ĵ)f9uNOvGTʄdFQڮ# X:gjlNg=) M_<74 :I݇_r3uF ,$Ǡj VHlD=NN%\>aqL/Y,|*-'z mAk6c.YkOaQ ._,+˩+iion)nS8]9nGSÉ:,&{bNY$mguTHs\S_vV?FBW],-Qz A2|7]k="۔$ؔx*Ck~so2M{ RхR `?蕞6$,yJ.+}0-79oE gZ,@G8_{nosmnW-c:Zs[8)h^yA8*DFp CM8\^]t:V;}bL8ڋcѰ*  tKѸqXG'{P~(1Ri+2t {fYa*oPJ6'b8O;!M9<4PsC>ccUTXڬ؁yPmB_^OGm#OXb`)iI)U5yZZ ẑzYcNħ!+| 4/U hWɜJ=l4ބ7)oTJyh"W#WI4f=؂~̎“|ϩrY f3-[M%oZzo dZ KԀ4\.Ox>Oy]#rAy.cf`imb*Z;7p5x /ڨlhɢpC0p,%~{$-KWv0e!'ӅC`-j;/nMB/s;H10" vA/p6k s6EM<͊G-pqqGX2FcYΎyy_.cKRsZ> e|Vqh(aCl|.:2}3RJ2S)ʗ$qPmkԒJ:= 2e}WEô7tYQç} ǩ;Z~m ]W ~S7EgM}-pZ?i>p/@Ѹ]S/ܤ oG$sBԏx}O endstream endobj 31 0 obj 5184 endobj 32 0 obj <>stream xXy\Sg>sΩXd*Mh*eR;cVeq(Hؒ?- QXvK;:vF;v{2޹w@s}}CD͜ADm },ٛԽNKذ\3t8y]?K}s`CyDzF&WK?WV]60.H&.91#p!9Q5ʌ_n$Ғr5I؄ep۾4ejdFqq//_yEhrz\.p:=6#0T6pg`2!9;(Z܌!5ʰM-[lλi~(5%* 6QkT8zZFLP˩VjC-RPSAԻvj%G^VS!T0 fQޔzImP zZA'"hѵWxyQ,~~6Uv;3Y>KSGg}j ܛݛ\>sͭ;+[}+dz q~I4_K3u8՞ܷjhi zߴGG~vH~92 Ȓ8+ltwYXwiW.5,hMڬԍZ9ol XgMD٬DrEId y|FOY,3T|+> ^|+Kth鐹X!sFfmU~.\c,4=f3~df!Ʀ*T]U#ClΑd*#)N3,_k?_!!r /GG6XfPlIqT123 6477uv]lrd$YIj;ί SU2>xA$Uf!v޻+v[^^WL<5ؓݮ㗷y,ze`gߺ(cg&+qz6yސ-tHs9vej^W:dENkjrPVErZ春? "ވ3U:2-pLhqqs~VC_Ν|x7\Uz>?[ >؄8͉~<2/ϛOҩz)4m(%w~1뚋Z',ʠ6:|h* ĸ^K,Q;fPѴg䘵tS/I ԋ`,Z>]%A/ @yT^&ر#vBtd򲜤GEV 5B<0JOru.7u1c+Su̵R`&T]X =}噌s6bi? H{.]tmOP~X hk%( q Pp !B2J?jn#v"k T=p2POa86O2y£Ne0]P(9武d3uBߡх mZViG Yp;{6ϓ\,W!HC)LA;3&3+fӣQhBWz5Lal@Ũ6\wl98ċR`^\j:/?J:ay~օTmBj'_JY(Jŕ,!dBk /2gu 3?G +MV&eD+ sS2 Hހ!X/\i|dZn J@Grs+PG}Up:u8±$5Ax!^٣|(6X/GF΢^ԑߘVgVWg -wſ*JHNEO~`pf\ϒ)!xf0B@+3A- $KQVRh$ip4xg<@v|QK_-( .s)[d=ڂ~UjT`vF[>p cp_ /'*)àIQNw1MV! 漭sHKRZV$+.0"6[70qCOȲJ*vw4 1A ?HzLz6̓ ޗ#_}JV/eA|[K\֖6SDBCedЂ* 1j.nB7YpduWw4vY2>tbtBv>#6uKK_xگGQDD4h=0"r˾޶3c4E~YP^/x1٨+:|eP}"U9H]hndD7".~ iUQI}4_yBm+ s>"~p܆eJ<cMń(-Q ?%.&Ԇߥ1IIQh` nt7 1AxxBz:SYRG3d7Rqoa'wn?ƺ2QȨv*eBwlF}t=dGY:7T:J &{[q{Q9^t͑l|r1@=ñ]`oNC?'$P|=)Ǡȼ'.ncS~+:h'/ܑ8A=-sHj$ebgo$]ͽn;GƇ?E߰Bº RMޤClzNœ'?wʧ'yv $kOm([Ly1X"xQel\ZlOZf MSzh0_.N+\2I?|e-5m~J6 5-sioohGq[Vش<Ǚ*P#ZK:ajga.|zj٤`*ne֎Y$N)40Az灊ݽwo?C:FKΨ_-E8aYBu>Z/ ~/D5ck5RZ;ZBM:Ga.M$M/T2_%5qu]5ƺlu^mQ[̩1WŖZβzH@A}F4Y!?UaeK"Kl%'àRwf:[㍍ý ~EdV)R|rGV__gWdv#:Rh؃^ggn<6TC`.,* QN:uZy\p ]7">IWGy7_@%~N*1ɋx^H>3@/'҂u ȭz/NwĔ3 N ";^AcFфPVbXG66)&~NHI9ٔ^(7wX7Z@77c7D?"q*"Μ&q q^㏙))KLN~+r|,ax)^7E^bg4$Ez{#,E˹_Yjhl/;g>stream xy XS!֡SԄNuj:SYA"c3I ӂa <2+΢8TVEU;ځM]s=Cd~~+ f`0{lKCĢUv=w=Ei?U1͙t ztx-`tx(E-p=ҥj?ńE-pIX_r.(\c(  -v|nͪU5ĉEђev!'B"BbevvŢ ;:qHln>"xP;';WQP\!b6Y@;N8;6mO\a{Ck_]_ VnXqMkm`1A,'%bC8;|…E"BC,"܉ńXKOxuD|H,%qp$ .&M01SIfOL#-1J!"3yL$!1Lp l͝fl`NbMf>z6&Ұ s҃lR=gM 7|3M4%gWS?zھiߙ1-grYfW{{!o٩f[;/glml]mlo͙5Μ78v4L!HOҿZf<:I s"eB.vUnnqʂڤ}I vR$T*PRocYN )gyZG ڂ(K`q>PΗBo `/2瘄p2 K"Q@d J q,BC ճi(b>mfړ(%I4p j@$@!Y(RMQϐl{(bbeTT )K#5ʳ倊MH muAWLͅ>^iۋϟϘ%\CAf!BIWp*fpS<_YHD'zQQA .m -xL겼e!Dj`Ԍ0w*ΠW@9$xIIs@')U~mS'$F xdw4 -uWiN1 2Q؇q/ثUqRaܞ,w)Cd!C,Hg4Ť۩%$8ܜ-R"fbh=]Cj Y0e#H洕-Jg)E͊+MOJd?w+:Zۛi' oE-9g(8m5n[hfm8@J.wcd[,68؜+fA>k6y-PFڶApeZ/}JWC ذ~eFi V;3*,TC[Og4|aB}^ М™p˿CG4Kp]Y![OTw %?Ե\hzF _ip9V )Hi J.7Ȕ,yvHe<@ukh)j,<\X]4Z8RgV>2lNjd @ٻCx '*y16pD>Q b6E@xZ 5%҉z+o0EJN/Vށ;m'ZvU*F &KYRГaWgxMMֺL+(?i "Ղ83Oiũre~Ooq.-e-Rv/(N:B'9ʹ$%] .13JgųEwW/Z$qY׫{ <0m[NodRd]0IJT^]iWg>x^(yL#TQ{D8Lr!YOIf u &B=|o|mίE{ GH}G|]·Kr/܂(xĵQ`;0 zl9c ea oj8" p%[\D=˸Z;0R8v3Z! Lט=h>]޼ꂋp{6`@vi9@ogծCI2O 7Gֿ9E J;V(ٜ͆ҿA8U[&*v!~ov敎+wUIُuIF[¼7CN yt荀9^ j* RfզbY:+e"m),eU~{FF 26PaO-6خQ;ZEd& B4)籨Vv3ևe&Z< P[}}|z /ǏJ I-Ѡ(Qt UX\;2"Yv?(:B4ĕq,H7S 酠 dOUAE,[(UrID+`4#ͭ9l\;T ӛc_~b<|4ҶbC~fj@/nOg&wfpqdsmDY7\Z_[Nϸ ?a,.50dNO#;GfsJ'7 qyȂȜ(\b*:'BL&קF@/Rw'PPd [G~?>xTsNT :#= ̊%./?ØatSF.]榺zs8Rҍr[tm*eK b}We4r`{mV..@-"͗2;8EzL'gNN}55sԼSqd(&+6gcpp*>V&VЫU3^"-.gY*ozz.##@55gaG}Cm 1 &9n kTD6 2Ƃ"̖Uz<.lȍOĴl"↤DQ]MCT ^۷9=p/='u&hy`V< y}/|sW/)ut["?2Hfg@z 0jI.x|tZPeEȐPъ`.N^UGT.G R :ZV5L{`fuq3R_g [$F뗦Ops^pI3+d޴dsRn,8Fɰh"Ȇ~oP7x6'%%5*v2 bűR2hAAf*6z\= u6gvNhqwD^82pls6DjDxCq{|qy bٜF̪dgZ3iEשJ"I~7!>pyG&h +*qe( bkj#B?@d-& 5.%t?v> C4TY<3ձŜᦰ}5؜—$gi$(ȸpPa=BN?|*i Krßu,3g8QܰzоsH,7'Ӝe,|9.$ؒIkJZBVOĽL{N+<xJKsJL&dvHhRҲ i/h'ڎ_dgxhCDNu[n{*'quU0fʳN**Dn(T䦙RLUH**duRu*͕B?007($97Xo1;sMR+*I Z֥jIP[_ؔk.TEbIBBΖ BsA$"EҒjuB"1!\y:IءkZT:^@t7h\ bUeI~TВg,7UZ ˯a| ϡu6Zdj|S8zf=Im"E0"6;#6@`m^~ba֋1~:.4Gյ @'/8bM <ʳyfaEIS~Ui FL/l5ϘM:m iTnZ"ͤ[s||)DV)Iڟߧs4&pfT."ͺ M9Ž'A=C,&kk_a.߼%;H(МovƵIY16"udc{ 8&.3]|(f#Y70x] Jap:|hpLlHX=ט+0f6W&9qº~iICBGb s("xM\qlL21F,WᦇVh4vE [J¿֒JU`"cg^z>q85I܄|Sǫ=Z"~_)|ݶK,8eFBoU7jѣ{Fe)kP%ۡ{vJ)iY =3N̸]鲑ϞcpҎ\cW_)-bogmA+8.1]as(NF\暅hv#H\)>/@-8 I$I U?0`M eNk+.$R?~oUY;6Q^Z-=O d-h)1C,-mo )R|Eq#!ݺu~@/t{n4~a>&'\`>>U,%YSUf,Ɔ"_&HR[eLnL,)\uT#=~ WgЛ(<}&X XǾ{qZng6۽{(/n@΁;zr{ p񮢐v< jRtvW]^t&-䊯k;A?uu`5-`vUnsqTR;oh58p'Dd#[<3/rN>JfÍpߟ|h=CqOBa)ڛe|W_#D KMb,;B%AVB\:YGGneBzLxly~ҫ(Nŵl׻`>!ɍ޸OGvSM "? 9TM'. đT^g-u)H-%1V"9qth8&x>qŠJxK"<MO_kl7DMK(=ˡ{9o6MlTKQ endstream endobj 35 0 obj 7278 endobj 15 0 obj <> endobj 36 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 37 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 38 0000000000 65535 f 0000008070 00000 n 0000029201 00000 n 0000007981 00000 n 0000008424 00000 n 0000008276 00000 n 0000008118 00000 n 0000007389 00000 n 0000000015 00000 n 0000002725 00000 n 0000028662 00000 n 0000027205 00000 n 0000028276 00000 n 0000026699 00000 n 0000027898 00000 n 0000026081 00000 n 0000008192 00000 n 0000008222 00000 n 0000007549 00000 n 0000002745 00000 n 0000005198 00000 n 0000008571 00000 n 0000007693 00000 n 0000005219 00000 n 0000006393 00000 n 0000008625 00000 n 0000007837 00000 n 0000006414 00000 n 0000007369 00000 n 0000008679 00000 n 0000008722 00000 n 0000013992 00000 n 0000014013 00000 n 0000018675 00000 n 0000018696 00000 n 0000026060 00000 n 0000026614 00000 n 0000027799 00000 n trailer << /Size 38 /Root 1 0 R /Info 2 0 R >> startxref 29341 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_strequal.30000644000175000017500000000240310265631023022676 0ustar danieldaniel.\" $Id: curl_strequal.3,v 1.2 2004/04/30 08:38:08 bagder Exp $ .\" .TH curl_strequal 3 "30 April 2004" "libcurl 7.12" "libcurl Manual" .SH NAME curl_strequal, curl_strnequal - case insensitive string comparisons .SH SYNOPSIS .B #include .sp .BI "int curl_strequal(char *" str1 ", char *" str2 ");" .sp .BI "int curl_strenqual(char *" str1 ", char *" str2 ", size_t " len ");" .SH DESCRIPTION The .B curl_strequal() function compares the two strings \fIstr1\fP and \fIstr2\fP, ignoring the case of the characters. It returns a non-zero (TRUE) integer if the strings are identical. .sp The \fBcurl_strnequal()\fP function is similar, except it only compares the first \fIlen\fP characters of \fIstr1\fP. .sp These functions are provided by libcurl to enable applications to compare strings in a truly portable manner. There are no standard portable case insensitive string comparison functions. These two works on all platforms. .SH AVAILABILITY These functions will be removed from the public libcurl API in a near future. They will instead be made "available" by source code access only, and then as curlx_strequal() and curlx_strenqual(). .SH RETURN VALUE Non-zero if the strings are identical. Zero if they're not. .SH "SEE ALSO" .BR strcmp "(3), " strcasecmp "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_cleanup.html0000644000175000017500000000374110265631023024316 0ustar danieldaniel curl_easy_cleanup man page

NAME

curl_easy_cleanup - End a libcurl easy session

SYNOPSIS

#include <curl/curl.h>

void curl_easy_cleanup(CURL * handle );

DESCRIPTION

This function must be the last function to call for an easy session. It is the opposite of the curl_easy_init(3) function and must be called with the same handle as input that the curl_easy_init call returned.

This will effectively close all connections this handle has used and possibly has kept open until now. Don't call this function if you intend to transfer more files.

When you've called this, you can safely remove all the strings you've previously told libcurl to use, as it won't use them anymore now.

RETURN VALUE

None

SEE ALSO

curl_easy_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_reset.30000644000175000017500000000146710265631023023212 0ustar danieldaniel.\" $Id: curl_easy_reset.3,v 1.2 2004/07/31 19:47:00 bagder Exp $ .\" .TH curl_easy_reset 3 "31 July 2004" "libcurl 7.12.1" "libcurl Manual" .SH NAME curl_easy_reset - reset all options of a libcurl session handle .SH SYNOPSIS .B #include .BI "void curl_easy_reset(CURL *"handle ");" .SH DESCRIPTION Re-initializes all options previously set on a specified CURL handle to the default values. This puts back the handle to the same state as it was in when it was just created with \fIcurl_easy_init(3)\fP. It does not change the following information kept in the handle: live connections, the Session ID cache, the DNS cache, the cookies and shares. This function was added in libcurl 7.12.1. .SH RETURN VALUE Nothing .SH "SEE ALSO" .BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3) criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_duphandle.html0000644000175000017500000000505610265631023024634 0ustar danieldaniel curl_easy_duphandle man page

NAME

curl_easy_duphandle - Clone a libcurl session handle

SYNOPSIS

#include <curl/curl.h>

CURL *curl_easy_duphandle(CURL *handle );

DESCRIPTION

This function will return a new curl handle, a duplicate, using all the options previously set in the input curl handle. Both handles can subsequently be used independently and they must both be freed with curl_easy_cleanup(3).

All strings that the input handle has been told to point to (as opposed to copy) with previous calls to curl_easy_setopt(3) using char * inputs, will be pointed to by the new handle as well. You must therefore make sure to keep the data around until both handles have been cleaned up.

The new handle will not inherit any state information, no connections, no SSL sessions and no cookies.

Note that even in multi-threaded programs, this function must be called in a synchronous way, the input handle may not be in use when cloned.

RETURN VALUE

If this function returns NULL, something went wrong and no valid handle was returned.

SEE ALSO

curl_easy_init (3) curl_easy_cleanup (3) curl_global_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-easy.30000644000175000017500000000252010265631023022404 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: libcurl-easy.3,v 1.4 2004/05/05 06:11:57 bagder Exp $ .\" .TH libcurl 3 "12 Aug 2003" "libcurl 7.10.7" "libcurl easy interface" .SH NAME libcurl-easy \- easy interface overview .SH DESCRIPTION When using libcurl's "easy" interface you init your session and get a handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use \fIcurl_easy_init(3)\fP to get the handle. You continue by setting all the options you want in the upcoming transfer, the most important among them is the URL itself (you can't transfer anything without a specified URL as you may have figured out yourself). You might want to set some callbacks as well that will be called from the library when data is available etc. \fIcurl_easy_setopt(3)\fP is used for all this. When all is setup, you tell libcurl to perform the transfer using \fIcurl_easy_perform(3)\fP. It will then do the entire operation and won't return until it is done (successfully or not). After the transfer has been made, you can set new options and make another transfer, or if you're done, cleanup the session by calling \fIcurl_easy_cleanup(3)\fP. If you want persistent connections, you don't cleanup immediately, but instead run ahead and perform other transfers using the same easy handle. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_perform.html0000644000175000017500000000552310265631023024341 0ustar danieldaniel curl_easy_perform man page

NAME

curl_easy_perform - Perform a file transfer

SYNOPSIS

#include <curl/curl.h>

CURLcode curl_easy_perform(CURL * handle );

DESCRIPTION

This function is called after the init and all the curl_easy_setopt(3) calls are made, and will perform the transfer as described in the options. It must be called with the same handle as input as the curl_easy_init call returned.

You can do any amount of calls to curl_easy_perform(3) while using the same handle. If you intend to transfer more than one file, you are even encouraged to do so. libcurl will then attempt to re-use the same connection for the following transfers, thus making the operations faster, less CPU intense and using less network resources. Just note that you will have to use curl_easy_setopt(3) between the invokes to set options for the following curl_easy_perform.

You must never call this function simultaneously from two places using the same handle. Let the function return first before invoking it another time. If you want parallel transfers, you must use several curl handles.

RETURN VALUE

0 means everything was ok, non-zero means an error occurred as <curl/curl.h> defines. If the CURLOPT_ERRORBUFFER was set with curl_easy_setopt there will be a readable error message in the error buffer when non-zero is returned.

SEE ALSO

curl_easy_init (3) curl_easy_setopt (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_unescape.pdf0000644000175000017500000004140610265631023023256 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xUnFϧX(D>HDj.d;"]4uXHG,/}=zRv%S[EZ@5t)tFȌCht95H8aڋP݄L&(+[ NޞT1;p7H n~--.?d7' $8ۖ [UR\gz!jxm(*=D6b_s@~x" \9yR筠Tt9y@VPK ϨΏqBb=[! =90]U3v L.qJ^hY7}Zp?~u|( mӉhyNMaq:r> #I}qxX䙈 vix!r$,k82@(E-Ӑn%)02f ںa0;|T;qM-}Db ٴ{@U6QZlN^  Q֙>MUp#/ @إ;4]m;Zv@ ΈO(jGAD}tǪR+[(uIǜvq Lฝt~;s:;ѫR>*kT_R |U ׷9kk#f^U%@Zf0/oNfeӿ Gd &ot4v].`&E 8CEsWy]lSl0v ;cendstream endobj 9 0 obj 969 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeV{TSG1&\J@VWi}G_>jU߈T| !DKHnBIbC $A,@QWmU jw{]wsٱݽg3̝337~aaGa,0eZL!QXU!e.52*â_EFSQ8ǽ&fumq*]LS MIi72{޼y❺ΈI2Rۘ!2*W#{]1O#n y@k!>w>kKWp:a8R ,z#9:Zo锲tIV\  SLνwꭻo Z~rWp:\B0R̫o$41{CV)N_U EN8e8pS}6DFV}ʆ,~\LgyU{_=QES*fyg?u}矊?p`4Cud\++m  [Qfa:HuAsW(ޕFsEv{=^CFC d+\{Dt@A~UV۬Dnd>ܕݼeKV6HU]1 I A \83~5S),omՆr T%TxٛyZ?thi R7x8wR "ce@Uڔ3b5xkb7aL`418wPbDI?8Y~FN^$KH[XÓï/vmy %!٧ 9vط05R#FewEǦ'CNRHpa2S1m}er$eB9W%Sƅ(Aוc-~b )ikW-G٨@P aDp(x>se~GOG(#) tP)Ɉ~Ph*yiړFYWdnZPP+Cda|}5{ge+עy7ן].s.&[(/x 8n^f KhU֖E5u>y*<(H/ An[5Va| endstream endobj 19 0 obj 2971 endobj 20 0 obj <>stream xViXS׺V*9*MU֩USXq s@ !$!H C1 kkkmsO;iϵv8YyڜsǠBV%N&jjE,T]PlD@&\K`U&'_UЄΰP|q↽ruXԇC_q^*q 1]sK;S"sZ8r"cg:,{?}Ym]= 7]à|bV w]ƆF!ˇ2fk-+ +M1^%5ZV͈"i5MsFЎn|2{n$`}#weZ{ίW h&N1K닑Ż賩69b x ( n9m䘌,s&bj pW.tٌ.x<{=sX4dOb/Az]eh*./2ؕl `|H04po'f;,º?[I!GX:QKQ[~v:|Aàw12q>|zDAK6S,ŗ2a3ǝa=InxS\XH!͔\F;ў 7C,wn4[1*Lf]4QQ'T3X gƣQ?q,,K!+me';:,CK)v;D h At9b 5w9Ъ;ı.ba_~ ;mO%sll@s/^'uɈoAX'B.*;ţY'e7X%KJ>- Y>/K?] >9we*wb~Q*w%-h;;HPQ XPA$|b^j(GX>d]g[3wR>xb~퀥䟄S,1CS.e.Dg [D&Hs-i4[`dBM* Qw]}qnTrCZصx}B1Bёwg}"$$)+)5TPke%ūv9"!Z~j_fIմč7FGMm=nsbsG^UP?q uu:}cvk;c=yvэ߬'^1t"N'*XOŌLHFN¤@M`(5XC~W]=n0gIt3AR'n䡭ЖB/C COPMukU fu-?y)Yeqq׎n /~6jеq)1k4?j,6 Ϳ2>Ї;R 'h7VX_HțHqL)r2IVS b㢓b"ccQ@4Q'I>w DPބ9HMeӋrH5We8c)58Mw/U3E8iayT3MèqPjtO .ޑ}Rza8Ӆ&z!ᔴ?ɖf%DVgWkFU史0:fɄY|IN2gCq)++z2⳩eL.b4C/kbԘG,d)yf{r-X.{,,&O 3ppvL Z4ݮ"Y#YDK=;c^/]i]m.9qP$ HK t45ت'*{Z&#(&}G5t->} qzXgruŖfB.!GC5h!}.X%O AJLOX,㥤(ɠ<J8XvdRl ,5u.wiB[xD%~4\Kg: ( 8QM:Ħfu_>s/L p<J-aik1JASN4O00^քZQgkP5WV2EP?jKT?nwYFt_я7_ḁzH3 ,_ޫҦ\3}.ht&ցN]Z&TK  EUvm=͝U u;ԩꂖtCQe))%5F b DiLvV63)r6<͐q4eݧzjK JVrהi)}Tٞd7;Z_o^]]}؍GGZ,::h.W9`O`oĞ{89Qk VUTJ6ʘ2,U\yT¹W p[CGZMBxXǷ<@F<|O '" eIp&-jpx%H74^k`9l8(†΢uT) 3X?%8GN%L"8S&3Fbri:zt8 :礍`xo&\BYVʱ7Zzn"Ѹf)mWxC mmǘmz;c; ny9o>E79 endstream endobj 21 0 obj 3748 endobj 22 0 obj <>stream xXyT׶bLOXI:9 T<QA(d`NBH @dhZ{;pz'z{zYYYY9; b4`p?݂_$Rq 4B˽ 2קo0Mmru'o.uy`2n+Tdђ@K-[߿Qh8I--_RrT,K^/چEǫ1IHq{[PD8NS/Q(䩢%ۖxy^?֬Hʼn",J"$DH^8:B$ lJU$+IIpT+)s >[T{_8*1:)?YYj`Z|Rzd`o zw/![D(Nx+0bXE;]~S"x$>'GD0J6b& MxLbK OCPrZ )':%s*%jF(p͛998ZW*ul9_KxO#J#9 TI>ũ w\dESv, M<~~^rgt2ɏܩm.rk}v- i Q:]BJl{JMGwu&/En,Rׁ)z1 FX63h2BbJשZ$3PHR=#sLVyPPF, =04k-?@Lhsk^ː-iOp'hP'N[@/vmOӯc_\F5N/hf4=iL p\@Egҗ0uaNX@ zJ Gȋ+ʏ⛓+qBn&!c:03 zUZAu:q/"p!W+@0dgdj(D}E9J @(/)Py3&xh+ >0rpϹ5ZC .o'{2J_cpNC94u$8_;EExu83`~ 6)كCr[_'U_p7H+UЯ8y{<єopK PVAT 9Lh`v{s\j+010p:|/O %M15znk(kd7^q6p쌪ؑwYW -C5@8KQl7> 1 @rnΞ ?qgipJÅLqwftj'8C}pRm(ThMv@;+;R%¿bD)/ c=˾;65 :q6i@cNe@q-ۼ|*U*);VKi Ֆq,Q ?}q`\VzŃ[̈k& PTRo7W=z@@KvBƩ @ءX YcB,?q5wokTK+U1C /97Su6^]">S \:K4  $%(amۏ> JL8y$^6dPlֲB#΄ r޽|XRn!".+4 |LdM६-<Ÿ9}1dVç܁㭕}k!D$e^Z`|M0>!͒Ĭ|E+,*0b@ dNő`)/ w~ \\=JP'bsZU{5F'=&^׸b!g(ٷ`;5˂!c[qCӅ0]`Sac.nsyI?{ԈhPBiY.6̷ױ%`z)7LS 87 {ms'z;D!4Mw\)m83`Z*4m+~ѐ`A]i'YqVސ \Er\^RWҜ\'U,ͭ:<;'4fc9OI]F;k3 e@)R@Eu9>Z%GspB=}MMA:(oKEH:Lh$S$H_a]]rlPCӨz ndM]`FV=2\p:xAH/%ưqf]ܗmNw-aOY~LI>ʶ ;M^Ƅu 9%{PUe_ͳg~^l4gYT, [kkiIo?4m\V B$*Rb aeKa7 ^1j7& n?J\;tD[!v׵>A@qp} waw4d@cJ+VDZ>AmuĊ א=96}uUiUZT^(:r@J:SjȺCm0\lW_ֈQE& [AqiE?C~U /udr-[$˴XHdcꝤOQF&s ņ YWDfdkp+mt ghSaʾbKOruZ]}MumQ~qUW_TS{m&YD+)O)iZI Cj/T^ 3S3T@;E$8w^r:'9 "~̓, Whl+3-HI6etij|@ a8ՔBvgwv *Ԕ> vjmPm d<̑$ 4":SX'Dx3N2PZ}|x3#o N HA8kPģ-ƆvK'`LbnvaFuPǗ9RP/͌NUb@s8 ly_th hzHOb>E] {E;F[{gp^/??2P{=#)ysbnW#ϰ'q<uop{ azʴډLjܬ-)6{Z\5xC)Nĺ†1oߡ7W;/XL1Iɒ:eZP`X (TŔ' ctчb >xĄ6Ny¯UV%')UΥhk >}ƕ&&[ZnAsOTn{6Nz62BSuT~1"eY%:U/M/&/MN YD? 7 c!17njZ4Է=/܁ Wգ4E,~2|cKxTǷuMmO%>(;*SG!)dÞqaSsU"Hv`Qp$[)أ]qBWgI+]MHٲU-`4Z捲'4h)F1I ך-z;0[:[vKKb@c&DzZYT1UجLM67M-NrCAz_w[ c&-opuQ/e/?>vQ8&N&kw׀8C+׮ȏA/pww+vCyOx|I~=3h1炵oQY*F3rc#‘cgUe-Vi wQ_4ZӫBqBי;vs DkR\+W‎n &DA,ca)q K.;a拭7RitP5 f|JkɬYf&p4E endstream endobj 23 0 obj 4933 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001301 00000 n 0000016439 00000 n 0000001233 00000 n 0000001655 00000 n 0000001507 00000 n 0000001349 00000 n 0000001073 00000 n 0000000015 00000 n 0000001054 00000 n 0000016042 00000 n 0000014713 00000 n 0000015666 00000 n 0000014229 00000 n 0000015350 00000 n 0000013775 00000 n 0000001423 00000 n 0000001453 00000 n 0000001802 00000 n 0000004859 00000 n 0000004880 00000 n 0000008714 00000 n 0000008735 00000 n 0000013754 00000 n 0000015251 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 16579 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-easy.html0000644000175000017500000000426610265631023023217 0ustar danieldaniel libcurl man page

NAME

libcurl-easy - easy interface overview

DESCRIPTION

When using libcurl's "easy" interface you init your session and get a handle (often referred to as an "easy handle"), which you use as input to the easy interface functions you use. Use curl_easy_init(3) to get the handle.

You continue by setting all the options you want in the upcoming transfer, the most important among them is the URL itself (you can't transfer anything without a specified URL as you may have figured out yourself). You might want to set some callbacks as well that will be called from the library when data is available etc. curl_easy_setopt(3) is used for all this.

When all is setup, you tell libcurl to perform the transfer using curl_easy_perform(3). It will then do the entire operation and won't return until it is done (successfully or not).

After the transfer has been made, you can set new options and make another transfer, or if you're done, cleanup the session by calling curl_easy_cleanup(3). If you want persistent connections, you don't cleanup immediately, but instead run ahead and perform other transfers using the same easy handle.

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_unescape.html0000644000175000017500000000352710265631023023453 0ustar danieldaniel curl_unescape man page

NAME

curl_unescape - URL decodes the given string

SYNOPSIS

#include <curl/curl.h>

char *curl_unescape( char * url , int length );

DESCRIPTION

This function will convert the given URL encoded input string to a "plain string" and return that as a new allocated string. All input characters that are URL encoded (%XX where XX is a two-digit hexadecimal number) will be converted to their plain text versions.

If the 'length' argument is set to 0, curl_unescape() will use strlen() on the input 'url' string to find out the size.

You must curl_free() the returned string when you're done with it.

RETURN VALUE

A pointer to a zero terminated string or NULL if it failed.

SEE ALSO

curl_escape(3), curl_free(3), RFC 2396

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_strerror.pdf0000644000175000017500000003405610265631023024522 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xTkk@_=jsw֓ 8S")%%z_="\8 q=jjD4>(j[AkB(\-jw]GUz]7UZUeuW:,*h/ϚQ UGR6+keaIx|=1,9Bx TiVЗ$*Q}A\&>c!Cvo4 UVĻ6I"q~W+-<"ˢn &~p4QՅ:p襚p'U#$vL96+|,Ⱥ8+큉)gSExzSypw!a}zzm[MV5Dhyڙ;u@VEEM2ݵyZ4Wutǰja4|miƬ~I'8&h$)G܅Cڲ^nU "HK&ʟb2+$U gE^r<`љ;>,Wy߲aLj/0ĩ?7{pζGðw]iT'lC[̱> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeQkL[u* {cPlp[֙,f`8]RZnKJ[` 1P&e2 /cd>¾]9sBP[{2briH&-{')§_B闣Wyj2 _$EuLJJ*4DbeQ!*DA L Df- %$2OˊE2Ȗʤ*RK$f SSE\zT^Z]ErS BHJe"5 ' V(IuA$)D<9 h6u,OC@(5~;O_i*zx6[KK30KYܐ7UuN? ȬuxgԀFG2[{vN-<;3@Yob;_W2Z~jNO7s~3nhI1IL"¤ m/}5x_zXþ?xoMW޸tP6jOwWO ]P @4.@FEBBh<0):7!yI`t|pse_Lyuc`!?$29. G<EួsDgv^RcpPRjTUTTV@%PrgY2LZ-ohXgEoz?aEB'>-<CαNLBI%Lp_k·_.7;&؅v[؁͡J̫,1I,w,cv ?6ݛ;"r,&TJ^G[2\;7j*"tKNf^K߃]h:xT7n0kR% \l9|+062~t?<f+ed0u{gfW.LFh09Y*vꀅ'S=Së|o3+&Hg ZwF endstream endobj 19 0 obj 1047 endobj 20 0 obj <>stream xWyX纟Ţ3PEc֥֍ť(; ; &%H K1 .-Z[^{k{I?oxy߅'yވ(H'_7ߒqIrReb}/~?,u=]w3BlϡD"]WPĦzy/h%6lx6UIZHNJU<9u/_xEDGˣF$%ƩTt/o^Xr)9ڧLHWn'KKE-fFr2<`k6&v_jivq0)r_.{)lol&ԋT0@mQ65j92ZA-VR j'zES5_C)_j&L(j65B͡<)5ZF0'0iien:ms>ozt^ ߠG?3V֕wg2㣙[ff>t~ɹC;s.?wcdvl4}69hű=u؄HM5DijT3BI#Gr >;CA삍fWIc+Q0]Ic|>HD02 LGfy;ѽbP+Qܼc!'*X?|IOJ~%bGK|Udg'> =tiX~-|"j:b\orQ;dP@~cy.lҵ,πq򾸓&{o!V"'8,~{epג'%r[x6ho]X[OO9y rmƉv&"` zqm! an&\)x/{~{vyY*jS i=$u^lțdSlPXpJM_/n)@HNςŵyJQ=\sFj+jXwx| T T5yu*~Zk fXJu] nQfԒ=Lf$:/;GLژM^-d$#3...56~\G-A.lMG[Y|!F3f Mrñ^4d}|D{Ǔ˹u C!Pt{|fFU19ʴ:Vrx||/p8Ex!D}~ɶ6{DBE'fh|"/d F Cȶ]_/9_]8cn\:1xu֬D\Y~&ٵw?`-;yhEiDEAQ";k9ᇧa3~$PH ,xuWms BIZ~ϡ0v1A 2у(^0g$-VԚMk9IbwJ;6u횄и#8Bdn샋}dd`"z+O|3ORI?+jBIF@~ڣE3muLmoic<%UnE?}X(D!m5}A Û Dt2&9Dq k3bw  Й̲p?tt Xfka݅8aڈ\"+\1Vo@F,^E(jJ\# aD1[MfK%7T;Nُv%zZz{ٵ1HII_]"T6 R6!ڽA) Ù0&l(ЄSa+G@Uy8ܯlݝA4J~*-|%vqS6ȅ|6 su2?C=CUUd*6Ae)q.p_3,)~RبD:̮T]g#ePȸ@w` Oo867ő‚AMh ڇc љ]AELu$0 蜡"c:P%=o®>")(c{p覽mRU=36nVSkB5p,p;prgI^t48;Y┴7֔lEj&lY1"g2(83Gp6Ʒ6]`y̦O~f>+6g,E550rO\/:MFHmN޳1>5Mdd&Ng| 5[+?&>VN*nIaJ(ŧtwej35B7ddV}3g,VEPE!z`X#tP`y+KCZ3MOt)w-<~T"Eď8t8#gl6* jf%`"gXwNU]i2]<4-2k{v xJ{ V575ԙ*GI}taC.) L[? q F t|a*.)> Wj@RWdjJ5, JyW, F$%v']JKKv$&a7iU65M*TZL};TR;kjIqχ^t 䩻IWc{ML_>6""79(7Q(vI"Oe!xt#tD2d6;ѳ$XkwgTJMػ,g>8~䋐჋J¦״ aO9 0uJ@@x]!?[$A얆ʡr+-o0kMmۡZi OLQP!ne^QYM̬kJZRwJ=ޛ]BlNcҏΕJ3B&!-4?YPuYk{̲55]CiXwyqm T;X\ Af>Y}s߸R endstream endobj 21 0 obj 4137 endobj 22 0 obj <>stream xmWyXS׶?1&h+mjoVQ*\ڊ,4!3$$ !@yxmS)ն>}={;_kf` ` &%8GF #mfX\.Kv}gNcN#IalX%åG%pGIxC"NOs,$")uGd^_0l> Y\ MLH Dl[ NΛlÜQۈbޘ'gۏ?  >Ŷa@l;ܰ#;Fbsbv2l/8["l](l!a81l_]&\ ;='"E=ǾO,i)o`魥nn@hE.M'XhGA`M~jGN݆nBJT*Di.8vSt) TT<*&;7'1szJMy7 tcE+ ޭaZ eFК\n* )SaE?=$7+Thհ8ljaQZyxz0+dIaY~9 ZJ!|_*(PB*R@3uN@L4~GBxM<8&$/,Vq+Ikӹv.je4N3Й N'=fMT$(Nܦ:k!A)`E?==kseB+2FW̹|0\2ԻN+Vwʛ.|.A( P:UB! F?R]]]Z͏*tZƠ>ȴ"m>] @ QX?٥,+<6ίc)8ym = $zCB\9z3ףw{#t,ǯ|MQ+[ͳ0e ֒pOU>Ƨn K>rƅ񍈅Vl .ՌwᐱtZMZJV pdM|Mʥ0hP10*̄ɬd>9=#de$2xZ6m?{]}BUD^DD2 3q*#"~JQ#ItPvWe)Yo2hE8gh(av5{o\'fTvB>|4/H\^B=@̐}{x6$ aP 'ZtW xuS! =4x0\=]WU 3o#,ݚk;F-B+UƙUVYy; טi2m]iஅr3| ZIVX.Bt2h3?PL;'KJJU KUKgr8\W`R;k"Oطܖ~ =Wpur w)4$R IFy8qWii }):dS` A䧢V><ih^C YX_ *AMgw4ϐW ,͝-n0 ZUͯ$;uS'C|,-cM I%Zd Tv4 \m]z-F]gtSHΆ6Kh 4ʘTjo_oBNuT%X F$5ץ3t6 9qCYQpEnvoiΩ^5}ɄΣ=|ݐU*A3webxK=*_uqo! ڪ1G!88U2|IPp4/م,t<b@ Ncpɢc-ODゥVW2VpFZIaaJ E[6SgsGuauo\+49⌢T2 =if쵑nMj3K`BDWYp;{>%9- T^XH>nvt0nYCKY^gB9^\st剾N<9^M(eu>v:_1.m ɟT`/܆-āViZ IqVɤ<1Q&KlikmIյZ~,T3A͹DF@Q0FUDc Pb1s.+hAQ suٜ6$bձ (U9V]r k8G?W_ C}FRy1qD#11{^1"ny\_Wl6cxm{K!`+^Pax"TwfDT$Г 9h}I YJ'fH5Gh ?sB T:t7h\lE*3GPs8dzh`nUf5 Q2 sIADWʧetT2 %P=|:aDz(v/! ]m {ǶtVtGݐ~^P:`aP_V]2P>A#ߌvDuqaA%ޛcR %i(XS[ʸd*wTFm]\;$FU F:"H_P\Z9@ _ kW%_f9&Y.7ҢLE8^toh,WQF8OP?9B~k=xrhv'+8Ϩ#%l% u#|Hi*UِsMOi}!^5) 5uEyy~ni掺fi6VdgI)*^##SWyǪA|w6}M,3"Y0{:Vޙb@/ۗiEhM|TbQGo 堟8(0 U݀L?F7_Yoj EӢ;+GGoYIsaG^K(n Sxh}Jkmj;73)2dvARu\͕H$1PΟc9: {pٞI.z81CC>o|=bj5 8FXNOּB;W8:xD:6,ZmYf$ik/\[Q?o}q&XGFcfQކ{ZE~D%v uB/~3\OIw-<5'鬱¯l/ eg̝ΪgPsl7Z[5EH]w:U ۷ #h2ggp:TPUTRe v:TՂO/gg1WT}aI;8W,6={x}%ň1 l_z:Emܱ#V敚b>]:ˠ>!^Kݿr)(ZaPT%nO?j6]qi{J]I`%89{nC6 1<\tԒ0xo: n |D<`Sg/TMu9}0)i*T[ +Z˵*װFqɒo,ŰTf. endstream endobj 23 0 obj 4299 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000000983 00000 n 0000013683 00000 n 0000000915 00000 n 0000001337 00000 n 0000001189 00000 n 0000001031 00000 n 0000000755 00000 n 0000000015 00000 n 0000000736 00000 n 0000013316 00000 n 0000012204 00000 n 0000012931 00000 n 0000011704 00000 n 0000012703 00000 n 0000011288 00000 n 0000001105 00000 n 0000001135 00000 n 0000001484 00000 n 0000002617 00000 n 0000002638 00000 n 0000006861 00000 n 0000006882 00000 n 0000011267 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 13823 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_init_mem.pdf0000644000175000017500000003774410265631023024606 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xVn6}WC撺k[H"E.X@h[,)s$ۊK"@Ù3gf L?'Oƻ;:?}!xi+6 "7%;ƽ:X""k6|37l!:)$GZ[?Sm Dy0oέ "Yz&%xJmi@$ғ@}T`<ɒ<IfaYK|GE;8SP|siv9;_f۔odw^+ݛ>]lNsʚz$+1QC?7d}h3ٲRcRyP]v!妖ݾ(|S]QBNjO`e# G~rn}}6ԁf8zx l ;τP,G-aMCP^?BЫb?FB$GPX%iI,Q Ie{Vf gUgL7oS"շS=_6CP=-k^ O m&8jOa,^0',tʦ"Q1I T%+pUHZTd,kj Uѡxtla!A(@"fEOk^]ALڢRiAέhЂ+ځgYt>UdA)lfWq1PʀPCNx? n8>т#Gnu.SK2 s\A:wHO~  P^Itb_G@C1vPǘHϖ^\B67 @ߐHoyV1VjET nC4ëŵ%8INjt6R@'@+,:ʛxWWz[L숼ђ #ܰ-'grjS@m*ʪ6u-VzhZI`q;/ėb"Ą^MYdp)nvz/`Q܂I <0Q zGK@5,jBm~ tVJ]wF4>"1yԻݍLz/_O|vqίfNjl}jMF X,֮o _A#<ч_p`cbMP!\';d? E~4ϟH]endstream endobj 9 0 obj 1230 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeT}PS!&."(nޛq论 -"(D *BI$$Kn!@H" (EQXmEKW;Edwgǎstv:Μsι;s*?`HKTD EyQ;V,8!G~T.Ij {-"L?D. xhZʑaak "BqL"*"[L jY Włb$#! H:D#1j$ y 1BV!Q _3j9V_wK5#7X=A` aOԑ*u踏qdO5^v I}hьb SAg E8Xj)ńjhYk 2ezIԨbuyR\ ];8ǣaxA+cV\޺b~E5iփٝZ-SǤ!lf€Q=K5"lS_}u\h[`Џ[Ueq\QgFaF`r'B8,*:@>w~OT9*muXQ>KkfRceJ)@ =Ͽ 6DD#0|i#@90:sd5,VS0魕u_H2 nw~}t2n\o$@Ah3|;W''b%=U}z.>t2=bDž:{ 26`8U9W5ti%c@qD4AO:3n"oLZ&`4>y*{NdKrt_z JaKsvU4KALY9@hj劼>stream xWy\纞R$$*^K*֭n,5Lؗ$OC@1 փ֥Vjmw8`=߽]B&3}ͼ>󌈚8D/yмN _H8O3&348g~;M/΅rR4utdTs͛?gZ#4&:2c6IV(U q7=֓JetG2-!J.TzlVF'$=qIU\HjvoExtR(jüU{}'(|7DmTGjw&2$.t Z[k<)5ʗ@-BUjZD͢ޡSfjZBKmReR۩7S)OHMR. j&%&Q Tu]%*k† }Dvb5b;J&M5^p\o_8K睟hxɅuqwYRbsyJG"}>nQWH)ʨЈikZ' ]W{DžG2v,t=ZVH۴hY V7]%]m\!2,{a2SU4V (2KD1~ըV,ן ItHJP6;t ,@nw1蹟W\(v!+,2y(Ń a5oe"t3J˫*5͈lH) fD:+^]NP}~\!uxc" /r0+Kw݃2lee9$v!T3K9/WOps%?7 (m==ŷB7scFҭcY]]>eyݨYFQcJ|WQM7iQ;bV:\10P6v_J;v~u;y98@)a+xϯp ==찒Ը RvaÑ<xޱR1hk v aT!91Lr <,<3ϧ즡Ag)$VZ/_kuPvX0; jZAC.GYQP쀽b'Ҥ*Vr귿zt p09x6}zxSy`%9!:OkvM<$_?UƊ?5^fh#&~$ykS䳒N.(y*d 5AڮSLjRb6 1:`f >DPm얚^\uP@\t+*Z9E/ؕmlA"^Y31,d2ݵðl4vIm$z?d0+5}Z6. VƧTWFX +*2 9-ӻZNDU$l>@܀C38k幜v׶ނ0G|&Ws?C2Mǎ+̏iVɚ4(IJĨCMYҭ)mښzdav'4ztTm욱Kf|7بX 5?5H]kI+If }&Ï9'GeDYX4}[z>kSX6<`Fd*Sm1W2TQTUت;oC+#?|yJQ u6[wK>IjINbU~,\Å>KC)EXW#KW);40$#Є4 Z,mm4x^ۤ/j*Dju٫yo)= BmqXZ_b$kTMe_ٖ,;u%_/!~kZM, ܺMw}aׯWNQdd%#wG8C;+ͷa Op^NeorzH*աnv#.8**$a ?Xٞjv#OU1yssӉK*H8FtAӭ~W37 ,>s7N#_%d2&.:TrjCZKSWtґb#i1gi>P^`D,Lg*m0cWiA9,taמVuoO.VgTZLZ|/%BMUp\rt4OK4E}​\2EAl\rkϥSp$mUp2Ugs_{A388(40bj(o@DFe)gS˄M S5~SC:05k<{W$n ]nGۑ E~;?}fv%݆x9n)`[hccOj/=1'0kb2 }f#훱Lq[$F֊Fm޻N#?{U1#ljK1@X5[>F*_ě9` }C}+3FibT":dmkkO67ү ԧ Xwp']́8QЊwoA)ъHmaqN1qzbz4PHL_N=~KG,k-\maQ!O/Ey(2P"N"bLwAq׀,&L)#>Ŀ\B:GO/{HibO6>?B vfKs2eH$l1^A$R-I;ObOM1Rծ YRIpNUsn Zb)UqN&q*83MƟq1V+&eX#^vǗF 9G~1 f><v''hvz՗ L endstream endobj 21 0 obj 4246 endobj 22 0 obj <>stream xuXyT׶bLVJsMMjբVmՂ^) ʠ%@ C CBfB0ϓkN{[{Xw/{YYYY;4l FK@^!K$1|r|f, ?cc>2LυOatmW2X_%5%}ɫ._V ?AX"ʓ_ 2D(-]ˏVŢvbIX<Yؓ ccsX6[-žahi lu]L̂JKkƟfowf o3n1wx h}bgz\_f3Yŋz>*)Jaը{Q殘S/oCh_L)z|{|hvPR ڌ*BxF p?v$0v<$AN3('r$U} YbqmJdQAxd:na +sc^I b||ta!s*ܲfU+tCm7Nٕ)mo#}ܮPW9"s@  w V{(!]\'m8t!i m U_%EmyӇwmF&%7"޸ZSsj)˄ar #~ƫ,F3i pD% 97vi=C;*E^ pk?y:kܫYسy}Nn2d5*&.^F|$vӺBhd'A\U[g呗J[:߸EͩuNĈǸbpaܷ:91[ӣ--8hP)R@΅ɛ}8;IaI&Qߚ 5Y<twIn0ljp+v! YÙ%ƿ..(NnV[jYng>zsr"})ýHB]~e0nt H{{gT 4l) g`J(ڽOۺ:ub\.v5R ؋ PhkQ 5jntn MU+jq_+LA)|(gOϦ.r!kDBCvX)3KlW*]NO j}V? Me-lii.)t9  Iowu-Fdf+Ʈt)lW(D4\!>&K^JVHuJe J"% rpN硓Ѿ~0 .>XNve`uA_#@k;06m?, Y/n@.1s?t \ѾN$mo9vi~P1+Zɕ-aܵMx >00kjL* E}ѢR2&w`HTA,C$˹e6b[okRJ9vwU5/}%[y, j:@@_3Umu)ڧS0Jަ1@Cp٨KF^\%`&K7el3x]/6o͌ w qjJ6S46PQrfHoK!HBns09K^&њŐ wwx{xb'4,ID  \-FPaW{(؍^@%]Oo]@g:0D@5:hiv?*ڭ\j;fVT,V u5Ctw\XmTN> Ki?P.#b8폋GxaS} n%/-¥=m6igIVq)ijA8eX>oUj#I =dZA%)<ċ>?G/kcՍE ֱOGƂ]]qF,^_sew*JBOh]0t50b#-H>C& i0/0F;Bp& )Pa%FP5*+X>א|e<"mVnvf'p?07=8]vLk}E#: .7]?nM80|^eU۫9n * ɪk4šh9Lct]ţ=nNFq;jc*fV:^ūlBԜ\T?*j >hZh%JT^KG~\.*fj0]NU d5^`== V63"A:s:da V'฀<@`7;Z-~KKOSkkWK"juRX>SZhܤ~Β#n{dҟYjRCi7KaLMbxohEԷoؕXڢlkom :j]O.i*7 G+>P { VT0ჭ'/pe (^ĕ2}Vf*DlpWOUa8AlL1PŇ05M`'Vi:^Q,U:-;~wQ8x^^d#&3Z 9R~+o}~VX9@e*X.DٓS01(귻#SCښ<ͦ1\mMC8ΧXCJ%JxJ \$h> 3XʣٜlxMb51܇Y9I(JNΈRȴ-JfSZWi~KSP-.6Җw8; QsRVDl69(eh~sL6:Jgjql>B/-UM)#:aԔ'*0uz`RCZzz-#6z! NN<z'H+|2v dV^"Lte:ڇ8z2 Y0(3GFc#Gegp߱pzEbW~|b.V$K'GvZTVVfDJ 26ZJ?W7dæVUWCܤoDkc ܩ \gaCQ`Ov\]Ntm`Fp% RA h*R_rq1:\Z,V(T(KZLK1Y+Y=fF]8q=Ca{FCs+y&Lx܆7?i8PD1>fGSxڿFϱ 䗔 ʇ:'eX\(MQ`aM14rNw ݥ8_<׳QtcfIJKĒ-[!8ihcJ(y?$EbiGqO_gGO_Q08-:>]3–HuNϐ[ 4^`b2ǩG8G;癴w@H'eB@o:($CZ.bM&&! .#~4iPtS{1 -ۚ]MTmh y\ZaҘ oUx112$ȶ4]:)ϲti 3zo3p_ؑ؟-i ? _ԙ5ogX6d\JNo|. C~:jMDtEXʦkRAtr%jW/,\q'x;ς+DńO.oNtZӯ H5P>鑁K 1OW\̓Hd%1 ܬC=ۗfv*N6k/ɆJ>?__u];|,l!ZfouϞM9_D} endstream endobj 23 0 obj 4512 endobj 15 0 obj <> endobj 13 0 obj <> endobj 24 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001563 00000 n 0000015637 00000 n 0000001495 00000 n 0000001917 00000 n 0000001769 00000 n 0000001611 00000 n 0000001335 00000 n 0000000015 00000 n 0000001315 00000 n 0000015244 00000 n 0000014084 00000 n 0000014864 00000 n 0000013466 00000 n 0000014587 00000 n 0000013032 00000 n 0000001685 00000 n 0000001715 00000 n 0000002064 00000 n 0000004039 00000 n 0000004060 00000 n 0000008392 00000 n 0000008413 00000 n 0000013011 00000 n 0000013999 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15777 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_init.pdf0000644000175000017500000004263010265631023023600 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream x}UnVSūp.U4Y9Nƕl18|;w6aecߏ9gΜ8x1>|xzkx${=Mi%  .lHƽUXq"kL0<{xym{gG q@\z-|lش=N|ag1Uf<-MW1-O_UF[gF[[_Gz=SV$yU+a~F>ܛWb >Xx`z-cZ]E׷Ig*9!GiVî-&+ TVE<Ҹ 5א8ϡIQujYCrljA \jJTERz{D.ty(B82ihb`%f>z=]`3Oz_*nBkgJTbkѶ%cCl^aWu~&$V00oI0>`SUhM˃t5jNh|rUiж+>te`ܗg$syғ(a=\E6D i}ﴩ -⺦D&k@-Kן.W ? {̚tZ+6HV f۸2d_hI]B>Gw+rPA[xPTt>7qgmTM3d \ͣj θ@wK߼\lS_{fB:]]/7E߮)U=Ǫįf^`eڥ:,H8(pF m"tIG<&:?3DJ~Xf1Us 9aJzo hpXp{]O:ΙӴ/&!r0w1;NCJ8uB\snA2SMq{q XPo I:y_ z}U2endstream endobj 9 0 obj 985 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xuyTS׾ODUFiskQ- "8BJaNr2d'$3"((SNuhjo}{>z;gs{ l4`̏Bb2y+v'2WM=P iԻ>Ȥc3_;~sahza0u]۲%܌|K-[w֯_/8"va^FXS(eKmh M$ RR)S% QD](Xm`UA+YG YIb]haZ()WGkLM"<7/=:ώXQҒ51l>cB, VaA"l`G,[c[X0lƧM_>x6m4b雧O XzO;f|33}WoE9kݬYٳge~8Š>|ZHUS @YEs^ʢt=%8IU./*ҷI2 x#Yn;jk *yr9ϏSuʼn{+k&~m܄x%d-.VMk͠srAE< Tj8 ͬ<"Qҟ>Nj!n3wC@H=娋 *2CQ^ 6JۯCz#&4ޑۜO* GoP5@ S7EAxWi6R1J fQi(#΃ߘgSp0G*#:v._-o['iN >ZȿFk#GΘkzaz9 WW6X?jYKH@}xd>}5"`3oȔ}";ɩ-6 B2s*z=-#{#R$@Ъb~ezfKzOaS У( /n^xyc{ $Z~q!g-5z&qD؅a0;)jṅJ>pFmeu]ӈ֗o7N!g7ٍze|Z\)GZnL1q BoR|\5=~,9&h(xeF^'cyF'tr$[_gM8ݟro!SK苀[ m8(ŢC(WߞO.hMTzC>a u ~q%8[$ i`Ps~@-41E @OG\ɇyub!Uq$'렼[~O4K@ y0=@(JgL&gl(4r@)81<)h/=}п>:qf$ JoCg[swiu:rPV>hs{yxW|$+9=?x:2_$MeBDžtSew3.ՇOr>A. D~bȆ)0L|;|o|y<aѢD̦ɡ+\rq+6~AQWp\E],TF3_o"th-dPz@or-O{s< 5xG&a쭨%e: rDm8(ERf37CK̏k?q,j}Ah YWZq0,''*${VW6?'jOTvW :5M_]b3X5zrP1p'BV.\ѯ*Ls&Tr7VT_AYa^[»aO#/uAJrvw}gԛ/QHr#Iɑd2;֭*ik1O:j+v7֖Ȕ_ɩU^@?]324c(VtUkD/ Q|PҚ}'c ΢b (U.BS,>-uGtPr5b٨ו4a`m'0-VU$Uu"Pqgz[MV+ ..NBY[z6u}]4O?o9#CzJ0T5(6$Hkh1] t PȽasC_j o O ,GsI<OS̶WxvcAo4k}\NO/l&܆LѨi@x֑UHҪ gϠcA/:\:6ߩs֝SArm6em t5Z:D$4<h4Xa߄F.`"5HmSVt6Pe: */9*.VMja3o!?JŻ7Tū+.Y<:h5zuQm*^lo7޸Fq AJ4+!( &ʪ,Vk[g4hDopQ C?8rp7|9Q٨ym}>rzLy | ْ'ɐ>rnUbh h 3OBF͚k>,PVjlpn@k ġYIxc+gq174>VB8 szGzCg{Rc D8QZqPkn)W c6-i4e^~d UYb/i~T ޹8VQp IK5+kƄɥIR5!uNQ]Ej0f>zr, 5 endstream endobj 19 0 obj 3538 endobj 20 0 obj <>stream xVyX纟R%g$u{[\pKEѰ’&%H K1 ..bKm-K{fO՞c{y'.;Fҏ Y#whWY ;~vWFǢQvo uӣec>""&2uސA4ģ VE 'XI)?GNd~.W( =_cHA |#ŵ(ŗUT^ȦA3Q? VUVնע=(å QF;[QЀ.P=Ά} MHԃ9n qqQyш]}["S\:v&:'w^^}?{0w{nO< 9\C ^妫t0ϸ7&} |Lafi5>ΫŸJG*PvZà}ƀ"\PehEY>}q'=JX|2%b_ǿ=^=|L/}9)57zCol;3>)#˻ JNA>wang;&NJcn#0- YxK8TRmקg2{XH6IS6f%=͵ϵZ} C^. o<rOV"(Gl[s͐qJ1': Vx 46P="P`/zs{k}هe+|#˰K. OVg}9+Y W>|GGRҔ$돗rTpD^u0֢[,7[3S{ti>xbmf/̶c.{DӷuTYo~0BL[/AkhN&>Ew(gb PlfJb:6SXekaqHX ;\Evϯ@E"Ps=\RbfJ{t)Bf 46I3]ΚzdJ\رyR8'ߖ;3@K?8/,`JrKJ1u}bzeR)8Ko3ZLQ͉N[.`ާdukuv9::MmR>9q0|vOnlR,5[U$w5#B$/B^ǟ3cn TWWe"ePod[r@Ham!o#E A$MhLH w&:GU}<){ VA `x 9)N-*&UTQC±OR.ľ7bU{F_(gGXGWRm36nQSkA5x,xOG߀ŝ=gex3䅁G/I{,)D$ko_Wb|!,fPXv^c;9 4f|, OJ9(cp ̌|"17J`]=XDVl`ﲋ>f{Փ#N 0iXYEi 6: 4fP̪Я,cҙjH<0C[L5Br0Lu33dٸ P˱BME_IDA,$~ȡYy3 fЄgPYnW17Kmz 6|%r~UpgkMcO%V= ܁__)|ˠ榆:Kd}tqC>&cKlaG\Nu F t|g]]tC3Z4ܒfWrZ t1")i\AAyyRZd|-!c#.{oSI"++BU7ѡ 2=>L#Bdr*Kׯ^#?fQe`šW9ZoLClrfą fZ#C/Dџ6$Sn̎7&FPjo8mFO1cŵECP;л}qڇԂN*7 }p=}w3%X s5ΡԴ a_y~}])xį!^orN[Ci;=`ZCgfzij\QA\ B 5N}&9#C]YД*)+L˽*`fon)}J8^&Xf)bC-Xcu.>8QWo9OZӻڻkM6~tݝ[Sl՜ w"44^) ̭o! Vp elsq._>stream xmXiTS>sl4Wmµ#Z:jy$MI @gdgjΨ[[[zw;|k};~ܛ}{~} [hG׆>/m%j_p!7o9xQ׽ZDY ^W`4ZO="IjB\|~lذ-O^ZB=%,y.S.qQ|KTL /ƾ-(*?!9A$f6W׭Ƕ.G3TFAl !]%q9EbxTG }4.G..~]0{Dp0樇0#1̤(~.%;6muۇc&l-<͘m|;`ab!#,;mc71aG151gll%17%V7l1m'"Egv:t,~{q#}8}amćD>hx_׽_\oiԎo;]ehy Ɗm+Na?W:TSPHB`ٜ^έbpKʓˤ17@dS軹$w,e5f9"|pf/bmfL}tX`kiA6 ">%o8g1{9El1 YVRf%the n0 )@RuP1!F|A+XZd!%#'4RH52FgUnvA0jpX ̠ ja-axsA( Y[C‌ dR<%C,U R) ҳ;SnN\FsgeE 's֡\*J*Z. R%8SC !2!i|bϸ i+Vc7"Yz1 $(}TwIziƁ\ ]Y^qi~p=_UY[g5:n5\ ԟoU=F[Ke?b FȚ9۬P(>AI]6|_*@8N,hlRKČXXwb7 ڗcwJo t j%ھ<ɢ亁PkӋjO\5{yE?q`OLl@&Wx66zƯc%WZYםW"P8u׆KUlXF@+UoZEjOs㐶娔TnOrH .*peʎGV1GIR"ppfTXJJP9bR`ͭǁ#="tj1 ,)wGr[#[tpPLz&CrL'ӇUw|$o3]9#%trWfg|7'&Ё=K໗ft&YCI:^qz0 3bɷX%PqB<ΜJL̯a)QT܊w'6_.^߭L m`f"@ʆ/ݟMC~={ +|IaN .I򺊮*C}CՖ คpv$HMT$ܓR7`2f+SV W᯿:,H.Ah^-ϊI3}yS%ԘhnʬM{qD_%x &:| fZZV1)2tf³PId2΢ QY p^W\D"' Y dr&,J](r:;Av|hb靃 vuˋ :`+2A/vtZhowTjVW$ ~R4CS\&,Y[:*NM)cQ7^UuZEәk*f5o t%(75@UjcFFiʚOB<;O}ΝNΪN$aHB^lmP\"LoՌ*J&T– im)Y3c=\ \X%k-쁎ֱK 8{(*khSMq^\* T _X1/ #_|ҎEp%<_flD1lT.$KF^eBQ{47f~eUNSP|njl q0Mi#3(,)'/O5(*3S \Pt L~B!=산%.C\mҚKUpRwʊV?7C`&K.֧5Է79E]f7ynt [Ŝ$XtR T)1kL'A4Q,`?\sw6W(iSv04b6 1`NSzFdJP]` =i wt8O\6:$t$YR|&hrh R,3b|&R <^el*Sw=z;bBv&YrӝY֮XiS|F %|3gmRƵB TrRDL!.s>ޓ 2{U--a^Z4USyFI%!OrHFu><pYUk-r)8]Ҩj9AZ'ig#%f$ .?k!]%A0 qRfeԆA% " Wji 6?!{9; Q)ImGB߳g>%ƿ7)^PMB HUz29 5B (G~ЭC~4DTcԀVөZ`7}[zCx-HNX3DW"B(xV).1]P[+dU: 'rs59 H]- 9Xm-hI9ȁ:W.AFљt 7W}>%684iG&i2:B@// ?xFѸ3'z5^ ;ios bW(B(yy@ d4h+Kf64Ƒ2 4 bĕ w~Z **@ԙKUexCQUP?9FQljF%Ji-ʫC}\3+Eh:P^S rdRp(Wx(wiN@CKyW~tntvV1G`I92y.Dm~6M֘st|f0ڬƺb DKgd s6O,yBjȫ#ugrʂk2it>5 $fɅ`\6{,,lh1Q<;Kg3Z Zc0\ xhW*$nJdᮚ1@\q84:վy"Oφ8|-.ߐ@RBK B7MI!b4%HI~,nl]n%(BM<[w7.,죩O)G!{&b̡bݟho_\?8=RܙĻ%uO`x[&:*y"zA9{]0ru nQR_- *0KU'H,)sZqP tΑyB(uFteՖQ llwu]}Shef'>ȻidzCVߪ1_lgPa 70~~-kϬ]Wb*D|ZzBRGo()s ZJy5$al`,BycŇ^ˀaG[z\YGrM-w枑|` .Ij;{q8tġ!~hz39bmzzt~~HQ*Na kv <}{?a ϸH9:J㦲Rm{],kٹ\yaڬ'%` ?&xH6ܧ9BKQ=ؔ?=b9I $g]/=_bߎO#6ƥSr=*p }̻yn_.\Yw-o~ ~`D&όθ=yp;>< n3ゎz)F0}9{~W/n &q"YJ1kѮ뀸1'KMBف4{&>Ϗ׽7gM2U9.=H|~0?mz4UK€ZFk߼n\0[ endstream endobj 23 0 obj 4900 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001317 00000 n 0000017097 00000 n 0000001249 00000 n 0000001671 00000 n 0000001523 00000 n 0000001365 00000 n 0000001089 00000 n 0000000015 00000 n 0000001070 00000 n 0000016718 00000 n 0000015415 00000 n 0000016344 00000 n 0000014929 00000 n 0000016036 00000 n 0000014459 00000 n 0000001439 00000 n 0000001469 00000 n 0000001818 00000 n 0000005442 00000 n 0000005463 00000 n 0000009431 00000 n 0000009452 00000 n 0000014438 00000 n 0000015951 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 17237 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_getinfo.pdf0000644000175000017500000006370710265631023024137 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xYnF}h`146],0G6H C$&oGoU_HEq%էN?2b3[O>O~X䱙|&L2?51a0:$]$YOhH2.yڼ?ĝMIYtuV]ZKM=a`;ó]8>$9X̧~DSO4mcS_g>S0e̱u-DEj&tZ'癀5.O, gWD1?؉7'˳riF}7D%ajy]A4jۤMO_  y Ry8"i?ݰIZ*jVYݚW.af§d~Igm3\Qy5 |)c0{JkaqGF) \t;+m&Ⱥ#,~M9oXqįtkyEˡRM)ѢǨ/ޛx, ,y$i:/IVe $~,piy/ &ܰꪑ,]_,BF=6i,}~,-}Nf\SM=pI$R8lj.K&H9q,5om ǎ5'BP(卥p :3U^I3&\~c`zcWvk=I%Zsy蚯EAwV;vU H҂eSY B:Ka8>gbGѾHCNEA aI0翐ymji>;x (aˋ4h%EI X_|zpﭔQ玖0iݵҰjQ$9eqO 8u=Nkxl?RZqy 1@p%P!-e$C5xi8e؋L%5J)B %6c/Sf^!AIڨ8`TLҺޟXL$RPyZJ 8X=1M!!3e 5Z?^ J@ xqov*ӎ{J7yˮ8`)-X"7jPZ\>eԧ9.Q5=KHu(E+e[_KDħqWHH[W#Wp0+G&>I@07c 1Cd$m'}d;hxӳErvGy"y@xHw`'ZrXs"T.y(q|| gE֔=WɎhƎCS(ϡ3 ])xB@j y$6dk=n>I kW2w,: #˂F=ŠMud^mF6ht[5q\E: T\ZT7b Ud;:ѽⅡXwMn(y <9N1թőa$ t-lP# U6UaMy e [Ntxh'nqU3Y>čP=ѣ@؎v&dTWK3QУR Xw֟BtM9{ =&|J=؅ghdacje>A̩*I@XqL _' ͽ~J\]3ic4?X@yn諈 ) Ț_,ί~tX>0wQu+ /(P˄g`V߇'M CeUZP]EZtkl}:wWwO(';Oasv=F*vl$ +e7 "Y/oN`;5*Q(F4 wy_Kg4t[XAa$Jthn"2oGcQJ q֗@FJN-4zl3uԖe } w+Le[j EAvTԥg1QcH"vLcך/Nd7ߥd`EUQ'y'qj`huX59NR}5@Ð7sO2$-wtR);еV+KKDu#uL܈z:ôPw E8#ψc䙡b"!0>9endstream endobj 9 0 obj 2445 endobj 19 0 obj <> stream xYr}W̛9 Xtʐ;5иH|?:s@L9)ٖbgN>=Blʈ_{||!L>3 [<c$^OԻCÈě c!'4O7wur>MI'lפ쒂~u'3gbvus5?o_ 8o3.߾LF4`Qsq{VӐllEM ~ɪs-ReC##6^~b glxM4"ʬ[LUMYۼZm\PieF,ul`5֢Y2#/ MD|2JpԭȨ.8,pqI^6f[V1}5@z+|?(:<\]!lMW9P wȖ?YgY&2D<! ߕ ixQoVDJqƎPʻ#u}B!6ZHZ( Vȭ + rDC, ԩ}{b5 GQ[g>?]6u`dڻ%+[cmQ%.=pߗ?qrI`#}*,j=Ԉ֨ǩ;EjHUJR dGs[LF$zԶZrH{R SHh;:~nhSk6aqc:8;4t+cldה_OٕfUIXsRd~׎Pv*ڬ)!)Xh#Cap $燰*e j3A)og+['6Tu07JBx{S7lt=}9ivyAO"'<.tloB(ҁ6ԠN0a~ǗZG;2w0 %+[4IP7=L kv7gSΣȷ7֝x&/n>̯.jz18+>-. K2Hn7d}X{ STm5MdѸԢSWT@kr< xDW@+Rmi0yztPN cXF/zAD]FX:.˿_,OS^QDem#URVTJT4E˫!;daaHGV0@~*d}(tYmE %im(:CM̠Tjt5J.6*z##I`E}q/Oq:DS rJr]]Gq3L30ij^$XAauWp6* y\M]ۊȨz:T`U/B~N AX7\܄m*qCHcvckBPag@;[N yy{ko3TW!XBHfIHS-cRffMs)N/Do5C]YN;+w`1+?HdfxWuQ,_WQ肎LrV0ͿaƵ~폧ߞ2"p:GW=c% rij1wX#O[q%BuH};4Wh,ҟ"H^DDj),r\&w0. ytÃN<+_+L5(3.3mP!9Q}@L 5$մXBo[WmV5Dhml05i+Htpp츼J~+G1ܥ-)3hGC ?xM(dmUP|QV׉i4O"H+fgз@_cohz^GHmN.r&T(spEmgBpǡП}8/1mu%a $ Au ܡ;SWNi{~v4,BOImh Hi_R/rh`z,<* AmJ(n$/U$QN}}3'R7a, 5KNPta@MqqCׂ:)0˃q<&MD`endstream endobj 20 0 obj 2327 endobj 23 0 obj <> stream xVms6_ogjɖ-}9:M+17$1pclbp]aL3^IkwBLP^{/ "{+aIzm=cKPJQ*"!'e'/my"6~|R'ǼBfxQ&mO>0!!a&OK`Ό$:CSֽlQO,d9 L OJ\@"P{Fe)`;p:׏ek6~\*>…pe?UmV;GL:BÄآC|}?l2E)&!q-"m/# g#w? ,F@Vmݠ׀2?oKKᦢkYh"éNae^VVbdP%b h@b>dLљ|)ݘP))?ؚ5'X 5GkK&޹{DZ9'T |ު ]Q{k.vW = 9 judg#`?9$ͨ ƨײ9vokG;r.O@7aNeӤfV0±Ld d@#jӋ 0O3'0:)@nLePxi 8]=]1$Ɯ*f#^3$&Cl+\GW>^[y=n𿖝VP3N a"+fMmZT7j 9/n͙hq0Ll׭"JZÚdz%M~l @O @"1T (]vp >Vѳr>$PiOV3 v[@fywAz+*;Wla>1Zc{*;ؒ&HBO, \ M(KH~%9?v]4ytdP&O) Datq8 =Uendstream endobj 24 0 obj 1172 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 22 0 obj <> /Contents 23 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R 22 0 R ] /Count 3 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 25 0 obj <> endobj 26 0 obj <>stream xuV TS׺>'Ѥr[SQW[NŊ"KN&2'; $( bZZ֡Vw]];Y$ M1Y;”,Mٔ*Ώ޿tEc X"%a l#Ea۰X Kvl[cX8{ hP_H`1$tb_V~}_O>q720uTTԃӢBW85z׸d]2@P[JhUέxRYZ,ogp7Ĉpz-p(>$.!U*.ly@ 2]^Az P²-r]cUpzk^2:oӟ)wÞoG?!;5xKAk-z¨֫Z$HВ7ϧp;#).H- 2?=*K?5-F1FSvcq걇K뤱2uGdo*N^QǷI8Ū?C,!Ycr6QfexeR&ZF,AMc&l^6h 8 w;+ՠ Ժ dQ+y T>b6 Anr^Tq[oi`58q6q=2,7ɀheny O~C( h! F?OOe]$ Ga@.rN{mljhNH臱M jQj8V9P}m.IJ44t;]WYkM4ZZ".hCܞID\v'`5P/eII=a9}p sK"_6yw7qX?Hɂϛ=cc`X%=sx X &D7nLLX)~iZwsE"v u ʛhwz( kwJ_kV.8**HEI^7 `BDxmh۬f¢V+ܗݶ{wfޜHq,M_ Á>x99waĘNh+CS$MϥcT]qVUT!S8Dp_5#H` I\AO-(/[bĕ/)3  [giN mlම}J9NyDd:7V:޶NW] rr#br|~|3ɺj1уHe)6J_t忸pI.E5>Wlfpx핖zWdiM3(bvƧdr<\JFdں7wV_U_4:dM1وi4{ln=݃s>/` ?pƉncBUxAءnGUY rۻصRI%D0uDQ; _+ Zep/*z}%7󎬬_ Cw ­Co” }\TRoaB +g 3Bg3.6}a<|`&ٜK]  f r‚t[*V>㜑O˺SVr 9jiIFZa*qsApG9t?8| n ~؉t"6} Wgl(2ߥh=7G90~z&$|h.ޫY[^/݄ԆL Z&ߛR9u*I endstream endobj 27 0 obj 3512 endobj 28 0 obj <>stream xWy\SWھs(* jX[quk]@\*naO HH5aI A@b-ڱK;3کc;.37'>Bn=syy (@m!eI2 [U-+=pGw}h̗ 0m*uF˖=ϖU6lGOvV˔*u,9mdR SfQXmĀ BVn[˕+W@ Q$EiBTbiIAQʽd$oU ٦.ݡ۩?8vhʨK x~3W@zz:FS˩gPjZA=KvR+Eԫ*j1uzZBvQש0zZGS[ ʛPtj C-$*>i n "7Iyq^'nN>.  >LO01@WҌn3'fFμ8mֹY_}n͞=s>̜Ks΍=yoǽ94n#'R}A% A:e|b`&Ć蛆$ATuɩ,t3>t$׸50"5qɔN:;\ lGa~*k&Gd Ej DILhej@Mۛs~F5ơ4VFy񥬨!'jX|DO}%%Bބ.Gqx*m,DZd,׼m`ZX(qi7U+Җ(/e< jPyY U]ZBNI&zm6:,k9__]𗑝_k A: PGUjȫ fǂA5umvJp1Y2`gb+y*l'U>|(rZx+AɣRrXw-c*l>ة>ĞﰟxᒧXE W%>ێn!<^_j1l)d5 k@|nwHnT1ĤB\YrQ;bо\CP/lַ,@Ca'SaV/8, |/YHD9IzހŰu ~[[=]hrT]^H+rH8Q,+DRa"/$Y6Exᇁ?^vYF%9Tiե{X6vխ5Kh t:/>Vk-(s5 ᙐ}!GIj`̵bGЁ?0=zm57xb-Ym^=e 06TU3l&Ϻ? ۆF ӳtdFGs<:.Փ4prPhz?nak: ^+{ vr/D1}!HvɗsnoY`PlH<۞лuD(rLNѨG(2ݲo8Kra ^ 1\k"9fG`~D :'_\!d) vvؘL+SÈ%A+4.uR\.PM؆q><QHHn&snr1ǔ(%J8S*B]ihb9Ibe0Kg|WͰ.!'jͪUVUGlms zavxO_尌 cq Ad Đ12,L` < 0`z8()5=_a^k9|AFD(74wY`x 0Wm %¢<=uAg/K-)e3Sw }Ċ{DtD~9 `'CN^+5(y>au-߻"0 KIku s7z` L#)Cjw5?Q4rLc& =B|MKemFO9bh0l=,{M *I5wT:FPGMn|O_X$Mqv HFN"Gu՟L?>xy>0V9M9r C)ög>m-_;q<_J&OTʍd{j)X?&̊ʌFt>y35t xt-3[ܦiP7e$ t+-K-'ZҘb*ByYUHِZ`:ɩAllRJȃt`CUpDwAPyɫ]*a]NGG1Ml5d#~6VxXk P4;Y6qf)6a)M30AhB=(;e&,~k&2FX"L;xXw6ּ O-zt2B=CՕj2G}ʱQ_{c%)'Y;am֯2A:dmLCzus'bMNUƖ ƿh+<I'L&b ,hf>|E}XȖhfpii.j2X$jTڜޫV{5HE&+"燌ߘ`"n8ҦPaZ3h9p$Sѽ!p@?(6De2dFbďFdG*Tf.#@AÌ8AcNM5eix#z#^cŪܡn^B9Ut}1_":Otjek**k b;4vu@  a+U-Φzdf]6URZ*29ElUˢ M~2[Qf 'Ad.9b/\( dLbZ)=Ҝn\mm老4O`ELY]]m]:M(1TueZUgYr;봵9]+%ٕq-$*~{>{+ztфӉCUըZ\QVP+SDm #6JN* ?~V>z¨TG6qp[Co@.D'a ⩭I/ 7S} oh<ȭ<>as&MG%}K H@x05]*;+8OB^E$ qhlc/h2ZJ^8B&.%G,̯o/h\PKl6;Gܿ$A< i 3U~J2p$ 5n.8An{#̡_^|aP79pVӑ>t='|6lxp^g壬f]3 9g΢ endstream endobj 29 0 obj 4473 endobj 30 0 obj <>stream xyyXS׾1{j+ij6SZZu¡IFQfa@F0-$$32$8W[gV=iڜŽ߷}?.Ok1u bx[w?QiK|%∤u˜ܘ,fu&wqONޅ)LyBYK6Jq1n wx;r}qJIrȌJ$׸mg'&wI'ǦEDFFE:/ HJp,t[m˖-_?Vqۑ!J.wHt)pGDF9ǥV.KwĉeMoTLFbD!bzy IdQ!;=S7lNݒ5#̄]Ĉm2oZV%K?X|łM"IxR"&6s b3XF#|-rb>Gl%V =b!XIMۈU"""'b5L 6xxx`bOL' •xXG&f.W-T8GXkXp_eM-9JJ6QoPUkt2 /|-/ N9mlog//zdr6H{%6kfu7\ֻ^t?n=1gɜ9 !7/fq/"JTFܠ.1b \%n*=`J!Q.1 0y51,7Qs/%Qf ` Z[*Mhvqe9 U(ePC RҨ3CIϘ#v#axh-0DP+`іkPc7vOE5VkD|.n JP{)Ī AvDfV+.w\9r=)KwFS/Bχ*M^RXreRW ʥ0N++A7 RGWvz1Z<)Nh*( ԏׇ%*mޣ E!8:iefބxb|lۗԵVmETQ&AS!AҘ}p!^Uw mgRƧ8\u^x([F̯2tʓb gwo"vAm(Q5$ZobR(ee1E"#X5`=sU2w#N>.V4hf'F86 6>͓낍Yj@4ycGRyEN Y~n?h($cmNanZ-o[641{yea>t.OB8ݟЫ"b:ٲ.2/S$9~F.\::θCC6|9U :F_1,b.Q9EX6 *+,e)eTTGr~R\7ѫV){kGQ5 V.M%K2޼}btwh_Ũ9! r4J䣅0U[e5[yGQ1B\Nu$ߦg!>@:ݲ\YHU n0 abGktλ8,a 86/Qy\{v<lѷqZ9lv+wCUwW5ĸA>V8$fr2IcfF Ҥ, . <{vMۣ4,m[uܧG 2|>-Y_^od pޙ vS)`jE `fsf@IZNY>ZV[]z~rⓉ?q'JTvBl<根(lIDz>1o"Ɨ9 ݋qL!Kz x7KS鱱{ 쩉m mGF3V8vȐa+=sh(J}u Y&$d652>/B{V [ۂXo.8eHc:.FXRt;iQJ>` ]!fլvähxx>xԉ`ϧp5W4e\GyP&ZٲxUțzl'6Q`^\?4)mdNȘpsy#J*,J>8=pV-\+{tRG< i-@'! `1Wjzj;a_RR+$ݘKa*U6 l @z9}8-a;!3)r_Ϭfƕg3V@yV(l0l` vjIaghAu m.-UTF+-qI!dĨedt^<|ty1 wcJ5Mj('[KR0p˼>r1'>I-RY\p7[w {۫;@/{` JE vv5 Lo-(=bGAkNF W^K(TD|Zց".,?ζt 7)Uš0I%ņ팸D;mx4ᾛ~7)ahVqvPDZڈ?p^cnUJox`X֕x2c1@0i} Wt$ IC#ucX%&i}cLaP5rLy0-%Ns];-Nn\su&y}PNϪcת]]_`MW\8% @`"m m(T4%NIP\^&<ݠ>Cg\/J-E[~/`liέ}G:wvqIR<}-gV4g'Y7X;'C>z fP`Nc|wYesRD;"mgrLqT_ Yɢ MЃeIl=>N*ݩ(ϞASQ/pLRKAX*;;` {RZi(%QhsuuΰІ/Q[S`6:ρȉP1{ۻ$83"F& K5.wڅ^:Ձ= Cerr02Ro.M{i>#y#ZpǏ- F/4_PL*NiU@Lr{X̨8}-@{n^w[te(8<pfW_ )p:VBπ8AN`}KR|>VsK(4d (YZr@^a)>Nm<)TWd*t@l(~~Kntw9J<+@8)eJ li7;}@g>)[`B*f%ֆ֖$w'u]:cmwVIk x&+E% \(`͐}=QLFs[6:g IhԓJ`uuz}>o2_91Nҧz/t l)U޸MϳC3xFA\cq]F1ThaO:GnwPJ1p<򯫠AbUl.Q8(/ P;hW4P@Ri35b@G&q{h:gS0P sY88qvW pQk 嘼ӣr4Sb3}>Px1ʙ֩5ϓda>tN GeԣJ-b]fŤ8#HIvu@t\BTɟˍ<(SMDQ7i_d4LRy_7WKm&zX͏y30tE*Ȥ@`^Fͫ픴p0]EA7Ӕ[WgLFCgg5B&pS#Z>0Z&ۊp +*PAE.P}JS >NEi>Y~2N1_b3gU,k hǭ-,qru4&; =$_t[F3bne ?[]W ʇ&N|,Jc6y9J密aU+#fqɭ2̲R2_m| @]eb|V%Ր_OJqD OBwHk.6Wq~̀~~~vດx`B]*WNyk,1 TD6+&a~KכoݟO(qlC"xN1{;KևxJj J ̢2`;Fv wPhv~o!Cw ??_w$&/KwqOԤ$ٙcӇz|59GSy5Z Yd-`b] } fq6Qx`\ &v2c** xY>>WY`Š-RbF?mB0w[E}LPx~Mȹu;?߼'H )Z0!4 UeO z_\UvD@vy{Y5f'*q _i涪BPRm#3ǨZd@~Xjn+tگ,@}h.COg(<;%єXKvk|;Vl,2 Nw'y8Ce;7yVSs7<+TJR`Rک"e8D. Y ]I'8vʷPY .аjdw^c'ITJH] > yc]B] HT^-P$+y"P5.SLV W! |y vĄHSt{#4Cyi8 w|!2X&_24$h& n`9$_:S`>Ӄ\f&wr[f>f§˨c9vyk⠓K5p|mȂ#',[_b>e;l&yO8Lph^!  }Ex75 _KdއF?}پ#),^ͱ-V [j/qFIS 0_`YLofe.'PXHW @ 8ϠB*v^cGR^,LhHORiRFn=|hpp\  m@/9 642xLc:N`*V)u5d3xWmlӪq3$)b +6|zR BN#ޞ_KVpv ԃ&~!)ϹA|Cjࡶà8ԍqds^]?Zx6ڸLbu,fIz5S@$ sobjBot>GcMKKhu K"  ]- Uӷ7݄o~ `e:xW[\9pڝ~7+l~{|6h/FwZ+bOxu0|do0';)4< y@͖Ec6|Lչ&Qu큊V@*cg$&Hmmo:ڞ$y v:a!d&_@h[E4j|OQԝ"ѱ>~QXcic; i0b|FV !hңX019,.㨨ʒsu1Nux}zV2[4V;aaNwiɂ=f3:O]ރDO7? ~[ qg]–^!BGøbl_1^9x^Yp w47fܺ |7t}-(ϔ/k7+XHR^V'>9s+bdeJN{.΋|8+F*%-iNNDy]0Y+n_m8PY_sQҕ|+6a}|B[1z dۋ^j+6Qʹb` endstream endobj 31 0 obj 7185 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 32 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 33 0000000000 65535 f 0000006765 00000 n 0000025688 00000 n 0000006683 00000 n 0000007119 00000 n 0000006971 00000 n 0000006813 00000 n 0000006235 00000 n 0000000015 00000 n 0000002530 00000 n 0000025236 00000 n 0000023845 00000 n 0000024842 00000 n 0000023339 00000 n 0000024524 00000 n 0000022865 00000 n 0000006887 00000 n 0000006917 00000 n 0000006395 00000 n 0000002550 00000 n 0000004949 00000 n 0000007266 00000 n 0000006539 00000 n 0000004970 00000 n 0000006214 00000 n 0000007320 00000 n 0000007374 00000 n 0000010972 00000 n 0000010993 00000 n 0000015552 00000 n 0000015573 00000 n 0000022844 00000 n 0000024425 00000 n trailer << /Size 33 /Root 1 0 R /Info 2 0 R >> startxref 25828 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_setopt.html0000644000175000017500000001120310265631023024336 0ustar danieldaniel curl_share_setopt man page

NAME

curl_share_setopt - Set options for a shared object

SYNOPSIS

#include <curl/curl.h>

CURLSHcode curl_share_setopt(CURLSH *share, CURLSHoption option, parameter);

DESCRIPTION

Set the option to parameter for the given share.

OPTIONS

CURLSHOPT_LOCKFUNC

The parameter must be a pointer to a function matching the following prototype:

void lock_function(CURL *handle, curl_lock_data data, curl_lock_access access, void *userptr);

data defines what data libcurl wants to lock, and you must make sure that only one lock is given at any time for each kind of data.

access defines what access type libcurl wants, shared or single.

userptr is the pointer you set with CURLSHOPT_USERDATA.

CURLSHOPT_UNLOCKFUNC

The parameter must be a pointer to a function matching the following prototype:

void unlock_function(CURL *handle, curl_lock_data data, void *userptr);

data defines what data libcurl wants to unlock, and you must make sure that only one lick is given at any time for each kind of data.

userptr is the pointer you set with CURLSHOPT_USERDATA.

CURLSHOPT_SHARE

The parameter specifies a type of data that should be shared. This may be set to one of the values described below.

CURL_LOCK_DATA_COOKIE

Cookie data will be shared across the easy handles using this shared object.

CURL_LOCK_DATA_DNS

Cached DNS hosts will be shared across the easy handles using this shared object.

CURLSHOPT_UNSHARE

This option does the opposite of CURLSHOPT_SHARE. It specifies that the specified parameter will no longer be shared. Valid values are the same as those for CURLSHOPT_SHARE.

CURLSHOPT_USERDATA

The parameter allows you to specify a pointer to data that will passed to the lock_function and unlock_function each time it is called.

RETURN VALUE

CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as <curl/curl.h> defines. See the libcurl-errors.3 man page for the full list with descriptions.

SEE ALSO

curl_share_cleanup (3) curl_share_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-share.30000644000175000017500000000374510265631023022557 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: libcurl-share.3,v 1.2 2004/03/15 10:23:14 bagder Exp $ .\" .TH libcurl-share 3 "8 Aug 2003" "libcurl 7.10.7" "libcurl share interface" .SH NAME libcurl-share \- how to use the share interface .SH DESCRIPTION This is an overview on how to use the libcurl share interface in your C programs. There are specific man pages for each function mentioned in here. All functions in the share interface are prefixed with curl_share. .SH "OBJECTIVES" The share interface was added to enable sharing of data between curl \&"handles". .SH "ONE SET OF DATA - MANY TRANSFERS" You can have multiple easy handles share data between them. Have them update and use the \fBsame\fP cookie database or DNS cache! This way, each single transfer will take advantage from data updates made by the other transfer(s). .SH "SHARE OBJECT" You create a shared object with \fIcurl_share_init(3)\fP. It returns a handle for a newly created one. You tell the shared object what data you want it to share by using \fIcurl_share_setopt(3)\fP. Currently you can only share DNS and/or COOKIE data. Since you can use this share from multiple threads, and libcurl has no internal thread synchronization, you must provide mutex callbacks if you're using this multi-threaded. You set lock and unlock functions with \fIcurl_share_setopt(3)\fP too. Then, you make an easy handle to use this share, you set the \fICURLOPT_SHARE\fP option with \fIcurl_easy_setopt(3)\fP, and pass in share handle. You can make any number of easy handles share the same share handle. To make an easy handle stop using that particular share, you set \fICURLOPT_SHARE\fP to NULL for that easy handle. To make a handle stop sharing a particular data, you can \fICURLSHOPT_UNSHARE\fP it. When you're done using the share, make sure that no easy handle is still using it, and call \fIcurl_share_cleanup(3)\fP on the handle. .SH "SEE ALSO" .BR curl_share_init "(3), " curl_share_setopt "(3), " curl_share_cleanup "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_init.pdf0000644000175000017500000004443010265631023023736 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xVmo6_A`"+R/a@ybuE -3VYrϻD[v4"瞻#q(#th Ȫ2 SGW!oc8d FkȀA0"`<;cn&Mݯb!4O;ӽH.7"oDF^ii <'م41xl+pԏxa >XP6xA\4H_S"|`؀f U٧l4va͟<ɚ$7]zvp9%Y [p xe^&,昫J "/w/$^ gnGtrF1:X`1^yh)"պh%)lO2&ܙyA6eIօJ,qu(whqץˊ塼*]z- /uS%Hu?hG ـ`99Z cxz::-DlY(`8(ڭBX0=Aᵨ w# xC8|NS"A>thP?k՜:+wRA!Xi[jkS \ʝ:RѲ ,z$Ь-ֲ%M]R ^MV`)a1ʲv69LKDKP]Cv8ౢ} j<;o|pgrry]glt%Ѡe\/L b6 nĞp^ЭaL2??> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeyTSW_ OkՒmb뱸֥uZ qCw!@$B6^6&!$$ nPPSjq ns}γy8g1s=.?a0omK.sHd"eB$w±t8&5!C/>eտ=~, S&H*VJ%2ABFs_Ϣe˖ rt)%b`P H^BD[K}bNQDyc2RQ Y"(jABl ͧ%R^, 6EbTX*o ț:ynBT*VIhۜެ% لFR4$ٌA :$IA$d""GV!o".2 30l{,2ǍocqX{[Ì1ĜD[S'o2J L3!r&w/ AZU 5܎uM٤VF`69g*/WFaw@h[i ׫Aso0,r?YJ@4^h3\v;Xb{fm$ .t2IH,<~}ğy7 = 'TFku+oD}85 !cNہvc.,&.vӃG6LBˢ8Cmb<>"!>{ݒtI]]Zێ8Ɛp9ftـU E}{6Qs(5Z8얟Flu^0GơQ<ʄw.m@}@-\ƓۆcWnI^7-鉅g3E%ruع^0% rsd x<@,b*^rMnm4eQ C1ʫ#w#Xp\?Kd^hyw_5nsyXcE'G-P`}FWC HkeSwJXq#ءk FFCʄ nRJ>XK%y~ <ȚS3E2j\} |J?~D [g޾[ZA;# HqB(rxA?e7hq%x1>htGl9u5&sN>c]#p»qH)9MZ8PX#(\r֨lKiC:M);Γ󚰬%u {]jr~{wꈰ= x^]C9P rŮV5t@Nr~;ҠU`J0UT%H+-1>8֨ Bw}8pPKXu`]azL[>z쭣ꓻc~B;#.>gЖ_ ZLCe`[ V@WgK^|z5E ض GȊHOOUgX(a'V;?o["Kff.MEf-VTuto ؀8Y}:+|#5sM&,lf0+,  xwVC4ghiX ܮI}٥@i\LVԠnmnlli-kVЂZW86\y'sҬۺNojsVQ܅gXөlMvl+R^ڃ'_9nm!(Վ*BkmuZ$Ի6 СڮCgax2Pfm&)\~LEB^ G`o<>s[QdK|NX0ꝗMU>stream xXy\S׶>sΩ8r Mus[Z's) s 2'H QĹUzVVՎup;{}[߷QQ"yO<_eB*Zv?Cǿ!)>⦙rqȜJ9Dr*.Y Hpswy^'V\Lj:F6IRDb oyhe[xtr\-X.WȅvG+6(qq$7wϹn/\52&$QCZK!W&EQK塒Sl[^A΍F 6oFS/S>z j @-fQNj#56Q)w]j3KRQ)/ʃZNyS j%P㩵Tj&Q2y9j)|G+v8w>~xM oz}d./>;Mq;6:>X8oґI_O1 SOTqӊ?mx7N[;i>pzmWϻAddU)ӯ̙;VKGFGDL^Xo]mfH]R֊V3NEQuzlVpq=FlU' &'Ӿ*)(ռ&` 䢢z_1?3m_+@2)MFͨj>o8tprq()#+:QƁt&, ӣ|?d|EdG>y&i(;[u/YP+4Xpi*,/,.Asa">풼+eO|TrΩ,FKdee=1)ݑڏԘRs;˿R̟C~Itd D_h˭B,`PpNv@6< Vi@,TzRӄ؎2ϠTe ʹ0tRޮ +|¤y /LuH%a/Ǯ  9rYY6|p =l9qux+X;Lb۝˲ɿCV;mzo7KF3=sm.̪j{3pFF|y ǎ-#sU/ʬ,5;,@q Qh>:=%Vb)u:5sC2=rKVz"dGK__oJ=QS2.=o\qC퉛ǂ^{)R4H""|s/忽 y 6)Ȋ%| <_G{fúCWeExBfr3$jeW]pibK2j -aW"oaNǭtó̻dIP^VJf6!I]I˕˶6N6F;.hem$e8NM_ϯAHO%[ Q5hZVi/j֙0C_)`#"`[ Æ2WjPXiCt6;XӡiBY] lw[{4T[A(5s'! ceL;mΖ`r:띹Y+JWB֎ءsЏ,88Лʛ";ְV48&=BסlVXr7,>\<gCGW;/Ȏ56`3Oer!/wg#r@"d!l63%)&t3 ?} 2 ;'lCƚZScSM#b,۰3ԕF*'l%m"~6LNBr{8#X etޗiQ]'Mh-wdz{ `&>ZQCjEtn6AgDHdq(%sHB @ I$$ fH ܳ:TwO U3WۋF C!4*e5=אF˚$\tĭڥ-AFC gafu."w׋osbQ M]-B>"#, 4L1UBU[9(UjI \Y/@L*=V(D3PƄdl0ޥ* ۙ^[Eenj`nz_iۿGqLӐc0&osmN_/ ę$1e T7lR5 ڷBNN`_[#!ӷ(B{%L=z[`YMd榞sQwQU+zt9%7}SPuk -hP̟ ߿/:\?&mTWme- s_aK49Μ 'n&Jd3Q:ZrՑ 3nZ ه1jcOhΆWZjsJT* Z2[o?sDeEܢOjɆg>$ WC>BC_^a\G'c;A!@m5GdQUJz؍YkxL4)ydeTX @(- */59ʍe;^ڒ&Jŧ(s`[yFPNۆ`!^XM7ѻKč[z#!Ȃ8SD?&3?ҏ+ ,]2`'=~ieB`^ٗ3{Co\>yT]U'!W[c&C2+L#@@)@ٗ]M#wnca"2P$(""8nUv ~Dg㉚hә@yH`uJ11Ln|NN ٞ$lϸ?\1\;- ;dף#? {Voc=uRn˭FT sS:s{ a FG9NӮWOv}Rv\a5m#5t~ڬ#/') ڛ.8=xde<+Sk'4?#5s3ߔ8AMa[5s=pH7-cPWZ:2 0$'&?8Ck~p!bV(05(Ǚ$ !i2x}4LONE˘Ń~_ u/Kte%&$m~VfI ey S #{.8t JL'9}̂be֔XV;%d│[4";:cYEbs;$JqXZ<yV ܀g\RϠFC]MA$:&N]w#at3aJ; sP~+M)Iۊ* s@ær;xf8ۜې_窺?jIXEk) SkҼM>:B43&na?YQL,)aZDPCCCwQX K* Q&8u ^mNVBb\ K [iAsx5׆X=ݭL,Vc8ojm$){ _:e ݨ;zQ~$qL bcZ/z sA1v"_k2{m#vqiXyKp\ivW70f5}АQFQZ~:` :V`@b+9H\HjȔ]'D7UGj* yU{!bVxX3ONl+!{%jk5w{x <wVP+fUzGx&٪m@uP1%pa_!wat c]8b7K:6N!*'i"Y28ZG.پt P+&;՘~.r?`co l'2>]eW5̨9sA!"K/W}l@{<@WgLcfTxeX#^)W h%:33o92d5$UH; Fݽ*" L _da2%x(yIw'8̛̝$]ۚ{DMR/bm)Ǖ,gn=oFW},R*?cA"N|&4>!KԄfs'\~,{^dfW*Il?vDXZ_?go>l+㸺9?jC/ Zl?mn6ĉ4qEcɱ endstream endobj 21 0 obj 4960 endobj 22 0 obj <>stream xXiTS׾?sqB%MMMEk+\;82 "9 3IHB´I @ (yhkmkmkC7ﭷC{X,g>?ٳݳY(e c$[\~ ~rɱ} ilo@\z|FBĠsRbd⣡Vyn^k\>ko$uD8qA'"b'Wb9@"D&> $VMD%C>b;F'| oK%XX@Hwb!XLx&^ oAX~Ygjp{<{O") )+=fzέs[=O4]{Brх,zeѱEq,.,XXr?=x=s>hrg pߜ>_Ien\HT$˽ܮ6 1ni'Qw 6IOSS^@(< ݙ"$yΜv)E˔dw.P/\:{ TArH;QZXP@Lz=&(@Ҳd*`:\fQ)ԝ>|gں&>>8Y_Mn5+\ZZJeR P:TH+a:T4NjxsB$ZZ8 ԓ "S{w Ppy&8诽ð;X-ݘW7bg|F ~ߦ Y:y6:.~('0,JCnjmζ˴ sjY#Ls[0 x9=Nj{nӌ?v׌+Ai#el.#vzz5d/IWh M$dv2LfU+*E*=\vYqP@"*Y@kۙCݠ Zz<'%o^kˈ}dظlt"Ocn \&0g J^R 2SEvKUA*GȋuVoNGl z&8^^ fּ~w%\˭w* M4~V/$ cʛKh9\u.@xoۇ'U(5fQyu]9tEzffByGBG~O7;|hE7w\`%gVR'IYz`_Hjd0-J_I~n`&ׅB6cT{4ݩ//&,RTYZ (!2Q ,?oޖvpYT3mmFUeQޓ]#.SHV_Ɵz L,oh%ֶ$|cɪZŚz>Mr I9 :DA;BS▆|ӽ/['ǻjqp6y!JP{**K,%&,rt;QФQRnOWq@ߣx? i؆9Ƚ7ժ#A,$I<Sq|mcn^qS ?7%,.嗔hrS[UCAE/%f~TPbQ&n5/ҹ$y(X^d mu|֙BD|,Q6PWčM?k9p?n )wxvgZw Q8vk?Pn0G̹dT)1/]OճsR( }p:; =ޟj#p2ȜϟC5d-᜚ZL9VI/: ͼꞶV0'i4 weSCF[5`=6od:1ɔm+U6|`s9۫*K²ceȴÚa[\=#Tw.'9Dm*y/ڼpG#>l0SZڲn"0EdrU6Ђ\rYqSa +P7v=Y1hEնKx0f%S:bk tZQptDn&ߐ @Qi#7wF_?<#PWe+Yl.…7J`F[i%7̱Z.kz+:Ricf{GScG{fD|nc55'~԰,OЕlO[H_b*Ikq[@Fj0ç>ڨ UkA( -P4Y)yb@& 9:]dWHS>`M[I7UV|꬝?#l_Y Zth]锓)S4Sq$h7Yt3iﱧl&'')( K.ت\#LvW$>&0Q 5`ZX_upC d@[-ԮDռ`^dX?TYLX RRNj-p> |,7 ,6|u|ft?zI`ʍ[ :B8MТ"_ TN1Џ耩Xd,2+&(u:C@eJqƜE`F;*2UEBzJ; <> /ֳ3|k%՛o 4dhR7tf2fwRR՚Ef{Jh/[+z=JBx.C?*3 [u+Wf0W a+nT^sXL9qdUiu)V6i8RLi_Y'N vbF_bxΏO U^;|R`CٜlxݶpƲXơ6A~ ߧGhΏY9Ĥ~#QWGN4L\e}i7\RPIuـNa|:,"t) &e󱕨.;F%Yl5eU=O:,6`Y:Kq)+NP:-!jJ^.y`y~a M^`=~_7'_6S~VFٕmeP v 1* (`Z,-M'k=Ҙ &Ѕ*TY ѰGZ4L-pvi@*6ih1xIq5W\^F],z S6=8ɽ{u`8~~iyڷ6zSK8M`}s.9s0MhEgu$ ^百A9u\$ ILLn-f@) A,;bu ~nܛS1t|m_cƖk?@7 +sC]mET &hg~%<_S0kMriĜ i8Z[&O^D5i֧ R IܥÐAh{Lp38=-EҒѕ*D3,'tQ?Z> endobj 24 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 25 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 26 0000000000 65535 f 0000001669 00000 n 0000017973 00000 n 0000001601 00000 n 0000002023 00000 n 0000001875 00000 n 0000001717 00000 n 0000001441 00000 n 0000000015 00000 n 0000001421 00000 n 0000017584 00000 n 0000016259 00000 n 0000017191 00000 n 0000015744 00000 n 0000016900 00000 n 0000015176 00000 n 0000001791 00000 n 0000001821 00000 n 0000002170 00000 n 0000004894 00000 n 0000004915 00000 n 0000009961 00000 n 0000009982 00000 n 0000015155 00000 n 0000015659 00000 n 0000016801 00000 n trailer << /Size 26 /Root 1 0 R /Info 2 0 R >> startxref 18113 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_slist_append.30000644000175000017500000000225310265631023023526 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_slist_append.3,v 1.4 2004/02/27 15:34:06 bagder Exp $ .\" .TH curl_slist_append 3 "19 Jun 2003" "libcurl 7.10.4" "libcurl Manual" .SH NAME curl_slist_append - add a string to an slist .SH SYNOPSIS .B #include .sp .BI "struct curl_slist *curl_slist_append(struct curl_slist *" list, .BI "const char * "string ");" .ad .SH DESCRIPTION curl_slist_append() appends a specified string to a linked list of strings. The existing \fIlist\fP should be passed as the first argument while the new list is returned from this function. The specified \fIstring\fP has been appended when this function returns. curl_slist_append() copies the string. The list should be freed again (after usage) with \fBcurl_slist_free_all(3)\fP. .SH RETURN VALUE A null pointer is returned if anything went wrong, otherwise the new list pointer is returned. .SH EXAMPLE CURL handle; curl_slist *slist=NULL; slist = curl_slist_append(slist, "pragma:"); curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist); curl_easy_perform(handle); curl_slist_free_all(slist); /* free the list again */ .SH "SEE ALSO" .BR curl_slist_free_all "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_reset.html0000644000175000017500000000371610265631023024013 0ustar danieldaniel curl_easy_reset man page

NAME

curl_easy_reset - reset all options of a libcurl session handle

SYNOPSIS

#include <curl/curl.h>

void curl_easy_reset(CURL *handle );

DESCRIPTION

Re-initializes all options previously set on a specified CURL handle to the default values. This puts back the handle to the same state as it was in when it was just created with curl_easy_init(3).

It does not change the following information kept in the handle: live connections, the Session ID cache, the DNS cache, the cookies and shares.

This function was added in libcurl 7.12.1.

RETURN VALUE

Nothing

SEE ALSO

curl_easy_init (3) curl_easy_cleanup (3) curl_easy_setopt (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_free.30000644000175000017500000000107110265631023021757 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: .\" .TH curl_free 3 "12 Aug 2003" "libcurl 7.10" "libcurl Manual" .SH NAME curl_free - reclaim memory that has been obtained through a libcurl call .SH SYNOPSIS .B #include .sp .BI "void curl_free( char *" ptr " );" .ad .SH DESCRIPTION curl_free reclaims memory that has been obtained through a libcurl call. Use curl_free() instead of free() to avoid anomalies that can result from differences in memory management between your application and libcurl. .SH "SEE ALSO" .I curl_unescape(3) criticalmass-1.0.0.orig/curl/docs/libcurl/curl_version.pdf0000644000175000017500000002724210265631023023142 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xko0+/mnA&e2I褩*BHapi$4!q9~{^N@0"/L+d\o >bR!l< Mdƿ bG{:; geM[| eŜ $OJ5~_ xLSe}`Fš\e96XVsLdu.wʍICLPэE >,hox ]=4횂?*Whɢ)j}-"ak лeobzEH3s hO 醙 1}+35<]Q&'(8.k>eLںZѵPTǺAZWU RmQYVYF/pD{x-^hgⷄlvmn&/BAޔ͏S$a.x'j!A|UOlP.ʶgc!̗ƺ_ ~09}Dr {QL+qtҽqNIpQX 0o8b5iendstream endobj 9 0 obj 599 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 14 0 obj <> endobj 15 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 16 0 obj <>stream xVy\SWsU**MNEKۺ*K-[  kC$ Qk֭Ll}]w3w.3}o>9OD͜AD P'^ UB4G_KqgмZ|{ (Pڪh)!o\t۲rÆ _{u y0yNT5_o%U*euzl|z|<<1A;(Zpu[lKR)gؑ*~6PKsj¨WvjzZISj:H^"T8JfSzImQA3E@x&MMfUff33/h ]G2fkfϞ=;lv<߭,>ȹvYnBw9rkgX@ˠS7U)iqIs6!veDƫtA e>.?SF2BY-#h?o6;%07WN'Ű@ aIs8ߟ=)_d*j/GпĤp^"3:Gun>QT8M(k0#w21 x4} dzMY=}$u_%ʦK` `ww=5ZFY[ @mx䟨.k@(]ބ[YR2]vbL Upo $8-º?[GH WX:YK;P[}T#1}B(ljilHSg=}]ii-M5gm,ʐ < lwE2jȘȸ\p=a!:̀9FrG# Y7MPLTkYMWѦ Q/18`um]٩8K6}">sGT91(e9U)ɂ.*BP1u!8}~Էʰ 6s0%ԃUVCOе<h/?}ÉdO!8Ǔ=-xr,&1x , ىTf\sɐp<3 '@0׺ $m=PVBHH*I ' < _K+NNt4N~iP_T=b [d~pdgFhȮ-~ 3(dTDbªCn<] ~̻Mfc\Z$-/7"VեtE]f.Z#J1ǡ5h@0B7@`=!^- $`8XX_=zߣXZ`_* {Z<Nf$I(P XPQPk ̔lk|.cbqNjކ3, #7٧jY`zD9VW'g(mFNA8:ЌY fNHT% PKān@.]_l !#M(~:K.fwM7󚤒v[q3cJϱÉ7DX=Y' }@o_9I,bJKˌUYY)xM;8!Fqz QaR5- nY[׀xԃ؇L~s+a$^PW)C7آiqnT B.9ו8vTՅ6A*`~ot:P) 4񩝰ysoAE-XC-=n0c%)|.8ݲ|Up.ZTQHqGP7#1S;8T[c%s4ڭcۙ-U7`9{\L7f6(LTI[II򤎎{FG1<| R%x =1g䒄hΪ';KM\o&v>ٍ?ƺ2Qd#Qv_Jj <ҵ;GMxyk𿧸 /p] <79Cii=`g~KV~\ȍ\5Ma";Vf#ai&55ۤFl\<:lI}PXU_N ǯJ#?%$YzdZ# ^7Ԉ>eyOO(ڰ/KWB<m q/a^ g?4U,$~̡95ǏnfЊ&X n52g>IBC]">G0RfC XDD\Qb9QFjs]W/c?d7ҞqF auvivKC|D%yzW;ߕ60\B#>tőW8Jo!6={sMW* ȻW@ҷlf,,_`BaQiʊZ*m?iqsC4L=lm $׍_&==Ρ_A:vk:~޺ =hmx)x_!?"H>^y5#U.Plu4;IKdKTzifRIQR!Z XCέ)j͔:MfK@V;ݟߤAlAl7NΗˇsX3Ud`gY=Ζ>L}PO]Y EE^J6fYVm4RplЛ_ovOv#1]#ɯIn#>TM0VpĄ.\<! A䄽w;">Ns;^Hoqt~Z,' >P;q(0Y Wn|r!~mpzW<.)V#ohbPV/q>orgo]s85pfCv[TSYҼ8utc})A%Rw6ut CC琀=f8ȓSLX'^ǐ>#[A'R)rɆ-.u$wZە=>Y3?uuOQc=A̙9s) endstream endobj 17 0 obj 3795 endobj 18 0 obj <>stream xeWyTS׺?1&hIZ,z[۪+*("J 20BFB6 0 8aZPZ꫷j{վ>ûeeoߦa `4K^2It{A@o. ߢJ:s~7!A6 OvSr,[w`F/`D.@ &\A4Ap@"LHn~qfzco%G2mIYð;G)e r Qp8$+;E/9n`׆8>Za^jmb@ van,ۃb_`aa_p, "}Nl?-ha۱'^aP}X4vE3~[y~?ÅQ C›fѶE7-%!KX*ZԶck=_/ [V$!/Wu3UJQBh 0wj*7ojOV,$rpd< w2< Flͅ؇j-D^(T¼v/6/]xa3;*q̑6% ]i/%rj6a$Y ʳo^KfWjQSe8֩#9r ~D-_)!4(']I?ǝܻw/0Euy\2PdtZЛ㟔  u,>pۚ\'DG*d6zH?1\koqw] ':{> >Z6TwVA*Q bp*mD&|Xhׂ8xGcDvZY 58,`8(E좑ع(cFU+xLDc8x1QϬǤ\*r)2 7u: C3yM὞Q=<ç|={a=8{{Bbp6_6wt 4*f=f⹥%Iq>^hQ{2Șup>z9%SàK۳0 |]UfU8fϋp$g`a=s{\&F/E?op!|!qaq-҄*s&?`pPנ4Ît/;s zK."pEߙ#mQ`P|lEպOo_(?`;6p\-2g?dA& ޤޡbzg'N߄w_m_rpk PKL冃Xp^1@:x146tBop6 W`C/զuhv7ǵ.MJ?!<2N LjՀ =W_iwfr%a**/OqUPW n 0 j*j5F; Zu xi_4o³49\wOH˭0yó{}"I{3\Tf%ʑW+vz N*R(@M; X_<9qe﵍Nz tptbWrMU4[J-f*V0np)Yج!ނI@ԫI E]Hƥ"ũ^vk~u73cGlݎ0\>s+*;>)&2/AFDvEoEy᥺l 1yEc(e%4u^&;]DUe>zҍrz%)r&C*ğ6 p[^AF_niz'E}nGl<3S&klnl"xyTC))Nf7Sԃ/R6λ(v*. 'K,wjc2 ̆JC%soq:tA{xnF%+Do&?b_7iI}\Cu\d*6V |R'3Μ?EypNg/wZr qIV3Jkj-/2 RCPWbpWQV :F*f*v.hLXPq*|ȦkXr*sZ(.\h+G)rlajZ9ˍkUH^S?jh@i](O̚2[=j4pLx@%ȟQLJ~򕪛!9-? rlZ[Df8F`SՒ׎EsKcCSyiE_RUjix]ۏS) IB-N^p<鋼p 7HP~ ,?"ٱ1~9.åGP5M{4 _ I]ꖺmUy1|*ŘM0D>KkX] 7" ўăTu+q@$$ IL q.Nȴ0^yq{2OqUnX{.ӮBŏt5)jR7/W x %\߆>yh/|DO)wkġV0}g:60~_呓iM=<΃vQ=55m|,@> ]/lɬ&e1'ߢf.%dR4Jh)([{ 4#<'oT4Ix)͙ըbR6]8q{f)35w> endobj 11 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 20 0000000000 65535 f 0000000931 00000 n 0000011319 00000 n 0000000863 00000 n 0000001274 00000 n 0000001126 00000 n 0000000979 00000 n 0000000703 00000 n 0000000015 00000 n 0000000684 00000 n 0000010964 00000 n 0000010099 00000 n 0000010592 00000 n 0000009613 00000 n 0000001053 00000 n 0000001083 00000 n 0000001421 00000 n 0000005302 00000 n 0000005323 00000 n 0000009592 00000 n trailer << /Size 20 /Root 1 0 R /Info 2 0 R >> startxref 11459 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_escape.pdf0000644000175000017500000003657610265631023022727 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xUmo6 _A0>:Iv [萦pKuDC"~l ѣd;vC)Ç3P€_ֳ͎aSɎcFI+ Ba(h1#4d.2K>s\$#.UuzkGg˥3$X0̲gdQmfc2yXeM!LNO˸v𰘁PY%T{;c 66 <Ѷ mXb£lR65㪐jׂᲘ D\v9m nHꍀu +>-М![s$(-kdfF Ib96#~g<WϽv{N^~.?.n?'PEim%lkU2WpW.w_4ngQ%zӹ_Ad44HS]AiUqRBTuMZAZB 78E+yDŽa׋CR|@OGf*ꜘVPU([ }P7n~t?p̎D 벀w #;0eC- Smϑc.|eZkN{NvnNVr+݈Lq+(CL6&WHcc4!)/@nCo!vWtRTDzsp9Rh19˕taFk#Rv|M%%NV$8LI[jn ՈE*Er#gLmy+U{UՄ4yXW,0'دSoOz> y'\**xjJG֚?f <͛pǔ'伪S̖ gj7W+D0> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeS{LSW\ÍJ},lA㖠 S! VQt2mm)B-=m)(B"Mits> Ĩ̘sU˖e|ɗx9[q+qZ,OT!'ykWLgpfY,VHZ(HoCz x@ZXVV ٲ݋INII3x\sN(iڊ5xWMpmqa|e]rBYg NWR'-WXm+5 }9.+ȵ| .S  A2n0= HوlB]Vd&G2G~eFGK3fAo CH,Mߛ'gRm47] (wu%]/'n)!GfA;gqg@ǩhKhql?"s(S|e<y4b>?k|Ӳ@eηxZX_=\y~}*/=ɩCmix]A:Pѫ?ߛjŽ0vNNn=nZR;]WC]:9(L`EZԘ^AU>Uo}@Zxp(9ydoԐ+1/ oNľL g3;|{]R ] eV-MS&]2d.k>:q2i(sd{HJCdP<VF4R^mi~=2j \n }.+MQVUc+6T!{ tEjnܻ$I :b}!±''a<0#\m5~ 1:]n'sg.ݛS Px?)@4,32;j>=NY82qtQUay Zo7x72ɇ8GlR,7TZl<= cnDNӗeVڳ2l')AY1vnU Uj`lȯW1Ua&= s7fufF)gi endstream endobj 19 0 obj 1299 endobj 20 0 obj <>stream xVy\Sg>sQ*i~҄TV[uk]X\$&@šKؗ $,ŀ,ʢ"֪Z[vnW;v~;t:{_䜜y>+OB_!{ 5*e|{7_O?ύ< 0͡<ccFS'{ŋOk׮ I'`BW4JMVS^ DFT؀xU6A-+}*ERVJj6- xaٲ%B1ݚhu@fm΀\;(Zul`&"lsV}Խ^WE[%1rK/_DQR¨sEj) J-PSj!F-^S+}JO**HfRM=AM6Ps()JJ=I͠I~ X`cf7=ޜ<> t,}Y̌ 1l暙3/x.yVȬig+ K^8D#Tx"M9U>" b5ΠJHۓa)bݦƯ*Y'yx&:NQ?:cޘK{Ȓ]nj8ŴeL}54M*3eiuIq2)58o6B*ݻ!"-JM(eEE(X6ВczBX]@nMp $pbGOhaPt~^DBg15~l mkw4#EG,&CMF^ۀNPwqmL'¹7Nxa 1]+ĵ ksJjCE:ҏ]>o`oܹ,ftNO.X~YdV[Kd2y_I<߂WBz#ktZV_mgd94w 'EHLXUX=ww09ԅZ3kTcEm5ܾ.Al_`U1VFFB,.$(cX]dzɐ< 3 !G0W{uNG:#jyt_"u]& *xH,3|YG_/l""Uaĭ}Mjİ2)B);9% uCgG6|L6|6ފ>fE]~I"wuMh ;ʈPHH!++Afy.fU- ]iRM O0<y!A0yGG,nȇl+<gȅZA F>@tJހY0-T Y@c>~NL8r%X>Dj^pa}\s$/VZijDWYLt jj 2%漎]Jב kG~%./\Ox\קpe>hd~CNfiezB6& ut:"ƺd$Htڦ˱5Twc<[2YE&Tr3-HUR:ٶNɾܥCIM=[炈+/4TPg<[N14bҷ~ȳ o;胶сз,/un|![OXQTe%&, p%\HH K.-))9VD*Z//`/ lqN u9z MVi^]Ib]־PF{2Hz&1EI694zXX2MN|'vT=w ܻxJaQsJB%(,ŸbBq5r j,k.#D}c j{vo' F զƉj?eUW}ԽcI@d]a5̥8FHs#,Ԅ"uGbyϗ o} =V7T;PmyVkmCCjW$GsԄ a+֖:̺ mTMFenQ]Qa..(U tCiYZĪu4Q,+LRjnIt)GmӴvk{l"c\}iJ-˜lMnkn(5%jowVMMs5].JiDeVe| P]¯1ތ9v01썤aK*Tr(K 2<ɸ3g(X6̻-x} 8z: w7Oo|HrWBx+DMxE`v̈́Ok,h5Z V endstream endobj 21 0 obj 3940 endobj 22 0 obj <>stream xXyTS׾>1&8O%&P'Th{d"HC ! $LC 2"SZmZۻosz; zYYYYgM"N!X,`DK* l_1 Y̻SL6S.}Ƒ _φs6SWilj|DXxhס˖-_VSsE&N-_X8&q?qL طED;##bcɢ%KEkWk6&I墈ЈTQPLhD$$u1{o$8)AQ^C%K+A؞sl\7Vtd $x駢 W|2k]B+bF$;$v] %&DOCħ/A{ Wb:1`‰E8lb1F%##(b1XHL6:pOg*S>lqu%')gjdôiק/33N̲YY8,w8/ wr2Q!9P_pw:,G uȻ:SI^7pW*vdQ2oP`~ǙX>6+4.3לR(d2}7Z˗Abn2,f 8L8xyO% ҐMBM&żaF,FhV ?A͈E:KA8(XI6dW吋 VI_yP"C.Q%ɔ@2BQ^ TbJJBd[|s3BYnn++3,8z<t4 PM% !'ZM)`-P@;ȑS;NE)Dbx~Ba `*cGw Zj`>q6if?`3@g:=, PλC׳tա¢biej57jϹoM JwzJ+o4[.R6 &X5TaO|ܤ'H1]'J E1q wp (nR=˸O`5 >R6t@^ ~$,X ,ha1…tjO _@!0K9VA9ܒ;V%@A&r,G^Ĭib5-߳9Jw!Zbt~8K4O]BBұؗWn ƘM0e pL9 ,;!d&pn9?,/ŀ. 3)n-;oNDworjC@MרSS51x1 9'?}m H*UdJPQZ床l)iRPS.#Gr-}8tB;HNqƱh#&p>$\/PsTWk:ӽvp>oa4SKK6RSȞK5JYP{rfdU̾'. wB^ =KaTqX7 zHw.vt_AԼcgmhMrJRB|w%*2nd-r%'*k,q'eqs 'X*bِ^T[418Pڮ}{|b 36Q.QOu.ءNw#JeCegqY@[ %&@՗ ~ZtMk%wVpIdhcQILP,әUghjOIt 7ORjë0ɱf̷Ac|b"'w cRSlilaxpvWgF#T.+2FR@)x Cnb#C< |yaC +]䣏/堪$Ϙg\s^}&k'Y6 i'Ǻ]5qz6B,/M'ZrAeĄt&Y]q]IK?ޥb lP¾#x2DgHfrȂ|(@qQd ux,Ҙ~U-9yUcbRJc:P0,rnn1750Pu5SV, f^fQ`4тPe)G ts'4ASYq{ 0H\nY.[1rlcY4Ϡh3tZрlVY '?אKFgZ^d#] fpbϐ jRk[8:SǭZ (;lAN$6TrQlɐf[z(![@#'E.`62[Iizh5W ? QN:>HfGb᛼7z>=o |خJmŁ<x+W^ v@_\j4Ttj&C2^vH^ pd@{ @(Daxn⇤V2N/ѫ*A/pzȥ-qނ H={xDAa'cM3*q)b31v//F@d 'g8~goq^0᮱#rz݃#- 'n57#q5Ӝ{47ml+X >Tm+zӪlb`u߳m4jVZ* 90G*'? f5$@mL]ACkaee4.k+jkEM_ӖqaBI:Tډ矜j]$-Qi> PE/8׸0| ߢC%j4ĈZYW1?H`"]f4;ThOUV/=`U<)-l1~%̯U&&RӬK+V Вw|U`6Z?/&p_s\HAUpь5Bp3H/?~Z6 -E8A u4!T嗪Uèz羦%q1ͭ ͭq ;,'=:g  Wt Hy@HjGӆtJN g{ , 9|AN=>61֯' CfwUՙ-QZtUka\|^곉 I#MCs?=])<} xHI`{w ȱa =v *[1nzC޾{1hLxjT Wf ikCU±mMYʜf0}qF0tQA 3=_yEY)9el8#p(ISaYAXQPkD%PqJnO+#=>S{xf=ZU Q&nn}{<% DE(nYN}?w}^>?r!ډ<9;*Hi昼o?ߞ; Wo鋠6.U_Iڹ`ןǦBJB>t up*m85Ff Q wYdU~0$VϚtPU@] S %bW]6nąq[mE~񀆤(SӦ{ k+MWZn_R*x2ٌ3UΜE穅 endstream endobj 23 0 obj 5073 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001317 00000 n 0000015023 00000 n 0000001249 00000 n 0000001671 00000 n 0000001523 00000 n 0000001365 00000 n 0000001089 00000 n 0000000015 00000 n 0000001070 00000 n 0000014617 00000 n 0000013359 00000 n 0000014233 00000 n 0000012871 00000 n 0000014000 00000 n 0000012451 00000 n 0000001439 00000 n 0000001469 00000 n 0000001818 00000 n 0000003203 00000 n 0000003224 00000 n 0000007250 00000 n 0000007271 00000 n 0000012430 00000 n 0000013901 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15163 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_mprintf.30000644000175000017500000000620210265631023022516 0ustar danieldaniel.\" $Id: curl_mprintf.3,v 1.3 2004/04/30 08:38:08 bagder Exp $ .\" .TH curl_printf 3 "30 April 2004" "libcurl 7.12" "libcurl Manual" .SH NAME curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf, curl_mvsprintf - formatted output conversion .SH SYNOPSIS .B #include .sp .BI "int curl_mprintf(const char *" format ", ...);" .br .BI "int curl_mfprintf(FILE *" fd ", const char *" format ", ...);" .br .BI "int curl_msprintf(char *" buffer ", const char *" format ", ...);" .br .BI "int curl_msnprintf(char *" buffer ", size_t " maxlength ", const char *" format ", ...);" .br .BI "int curl_mvprintf(const char *" format ", va_list " args ");" .br .BI "int curl_mvfprintf(FILE *" fd ", const char *" format ", va_list " args ");" .br .BI "int curl_mvsprintf(char *" buffer ", const char *" format ", va_list " args ");" .br .BI "int curl_mvsnprintf(char *" buffer ", size_t " maxlength ", const char *" format ", va_list " args ");" .br .BI "char *curl_maprintf(const char *" format ", ...);" .br .BI "char *curl_mvaprintf(const char *" format ", va_list " args ");" .SH DESCRIPTION These are all functions that produces output according to a format string and given arguments. These are mostly clones of the well-known C-style functions and there will be no detailed explanation of all available formatting rules and usage here. See this table for notable exceptions. .RS .TP .B curl_mprintf() Normal printf() clone. .TP .B curl_mfprintf() Normal fprintf() clone. .TP .B curl_msprintf() Normal sprintf() clone. .TP .B curl_msnprintf() snprintf() clone. Many systems don't have this. It is just like \fBsprintf\fP but with an extra argument after the buffer that specifies the length of the target buffer. .TP .B curl_mvprintf() Normal vprintf() clone. .TP .B curl_mvfprintf() Normal vfprintf() clone. .TP .B curl_mvsprintf() Normal vsprintf() clone. .TP .B curl_mvsnprintf() vsnprintf() clone. Many systems don't have this. It is just like \fBvsprintf\fP but with an extra argument after the buffer that specifies the length of the target buffer. .TP .B curl_maprintf() Like printf() but returns the output string as a malloc()ed string. The returned string must be free()ed by the receiver. .TP .B curl_mvaprintf() Like curl_maprintf() but takes a va_list pointer argument instead of a variable amount of arguments. .RE To easily use all these cloned functions instead of the normal ones, #define _MPRINTF_REPLACE before you include the file. Then all the normal names like printf, fprintf, sprintf etc will use the curl-functions instead. .SH AVAILABILITY These function will be removed from the public libcurl API in a near future. They will instead be made "available" by source code access only, and then as curlx_-prefixed functions. See lib/README.curlx for further details. .SH RETURN VALUE The \fBcurl_maprintf\fP and \fBcurl_mvaprintf\fP functions return a pointer to a newly allocated string, or NULL it it failed. All other functions return the number of character they actually outputed. .SH "SEE ALSO" .BR printf "(3), " sprintf "(3), " fprintf "(3), " vprintf "(3) " criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-tutorial.html0000644000175000017500000017755210265631023024132 0ustar danieldaniel libcurl-tutorial man page

NAME

libcurl-tutorial - libcurl programming tutorial

Objective

This document attempts to describe the general principles and some basic approaches to consider when programming with libcurl. The text will focus mainly on the C interface but might apply fairly well on other interfaces as well as they usually follow the C one pretty closely.

This document will refer to 'the user' as the person writing the source code that uses libcurl. That would probably be you or someone in your position. What will be generally referred to as 'the program' will be the collected source code that you write that is using libcurl for transfers. The program is outside libcurl and libcurl is outside of the program.

To get the more details on all options and functions described herein, please refer to their respective man pages.

Building

There are many different ways to build C programs. This chapter will assume a unix-style build process. If you use a different build system, you can still read this to get general information that may apply to your environment as well.

Compiling the Program

Your compiler needs to know where the libcurl headers are located. Therefore you must set your compiler's include path to point to the directory where you installed them. The 'curl-config'[3] tool can be used to get this information:

$ curl-config --cflags

Linking the Program with libcurl

When having compiled the program, you need to link your object files to create a single executable. For that to succeed, you need to link with libcurl and possibly also with other libraries that libcurl itself depends on. Like the OpenSSL libraries, but even some standard OS libraries may be needed on the command line. To figure out which flags to use, once again the 'curl-config' tool comes to the rescue:

$ curl-config --libs

SSL or Not

libcurl can be built and customized in many ways. One of the things that varies from different libraries and builds is the support for SSL-based transfers, like HTTPS and FTPS. If OpenSSL was detected properly at build-time, libcurl will be built with SSL support. To figure out if an installed libcurl has been built with SSL support enabled, use 'curl-config' like this:

$ curl-config --feature

And if SSL is supported, the keyword 'SSL' will be written to stdout, possibly together with a few other features that can be on and off on different libcurls.

See also the "Features libcurl Provides" further down.

autoconf macro

When you write your configure script to detect libcurl and setup variables accordingly, we offer a prewritten macro that probably does everything you need in this area. See docs/libcurl/libcurl.m4 file - it includes docs on how to use it.

Portable Code in a Portable World

The people behind libcurl have put a considerable effort to make libcurl work on a large amount of different operating systems and environments.

You program libcurl the same way on all platforms that libcurl runs on. There are only very few minor considerations that differs. If you just make sure to write your code portable enough, you may very well create yourself a very portable program. libcurl shouldn't stop you from that.

Global Preparation

The program must initialize some of the libcurl functionality globally. That means it should be done exactly once, no matter how many times you intend to use the library. Once for your program's entire life time. This is done using

 curl_global_init()

and it takes one parameter which is a bit pattern that tells libcurl what to initialize. Using CURL_GLOBAL_ALL will make it initialize all known internal sub modules, and might be a good default option. The current two bits that are specified are:

CURL_GLOBAL_WIN32

which only does anything on Windows machines. When used on a Windows machine, it'll make libcurl initialize the win32 socket stuff. Without having that initialized properly, your program cannot use sockets properly. You should only do this once for each application, so if your program already does this or of another library in use does it, you should not tell libcurl to do this as well.

CURL_GLOBAL_SSL

which only does anything on libcurls compiled and built SSL-enabled. On these systems, this will make libcurl initialize OpenSSL properly for this application. This is only needed to do once for each application so if your program or another library already does this, this bit should not be needed.

libcurl has a default protection mechanism that detects if curl_global_init(3) hasn't been called by the time curl_easy_perform(3) is called and if that is the case, libcurl runs the function itself with a guessed bit pattern. Please note that depending solely on this is not considered nice nor very good.

When the program no longer uses libcurl, it should call curl_global_cleanup(3), which is the opposite of the init call. It will then do the reversed operations to cleanup the resources the curl_global_init(3) call initialized.

Repeated calls to curl_global_init(3) and curl_global_cleanup(3) should be avoided. They should only be called once each.

Features libcurl Provides

It is considered best-practice to determine libcurl features run-time rather than build-time (if possible of course). By calling curl_version_info() and checking tout he details of the returned struct, your program can figure out exactly what the currently running libcurl supports.

Handle the Easy libcurl

libcurl first introduced the so called easy interface. All operations in the easy interface are prefixed with 'curl_easy'.

Recent libcurl versions also offer the multi interface. More about that interface, what it is targeted for and how to use it is detailed in a separate chapter further down. You still need to understand the easy interface first, so please continue reading for better understanding.

To use the easy interface, you must first create yourself an easy handle. You need one handle for each easy session you want to perform. Basically, you should use one handle for every thread you plan to use for transferring. You must never share the same handle in multiple threads.

Get an easy handle with

 easyhandle = curl_easy_init();

It returns an easy handle. Using that you proceed to the next step: setting up your preferred actions. A handle is just a logic entity for the upcoming transfer or series of transfers.

You set properties and options for this handle using curl_easy_setopt(3). They control how the subsequent transfer or transfers will be made. Options remain set in the handle until set again to something different. Alas, multiple requests using the same handle will use the same options.

Many of the options you set in libcurl are "strings", pointers to data terminated with a zero byte. Keep in mind that when you set strings with curl_easy_setopt(3), libcurl will not copy the data. It will merely point to the data. You MUST make sure that the data remains available for libcurl to use until finished or until you use the same option again to point to something else.

One of the most basic properties to set in the handle is the URL. You set your preferred URL to transfer with CURLOPT_URL in a manner similar to:

 curl_easy_setopt(handle, CURLOPT_URL, "http://domain.com/");

Let's assume for a while that you want to receive data as the URL identifies a remote resource you want to get here. Since you write a sort of application that needs this transfer, I assume that you would like to get the data passed to you directly instead of simply getting it passed to stdout. So, you write your own function that matches this prototype:

 size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp);

You tell libcurl to pass all data to this function by issuing a function similar to this:

 curl_easy_setopt(easyhandle, CURLOPT_WRITEFUNCTION, write_data);

You can control what data your function get in the forth argument by setting another property:

 curl_easy_setopt(easyhandle, CURLOPT_WRITEDATA, &internal_struct);

Using that property, you can easily pass local data between your application and the function that gets invoked by libcurl. libcurl itself won't touch the data you pass with CURLOPT_WRITEDATA.

libcurl offers its own default internal callback that'll take care of the data if you don't set the callback with CURLOPT_WRITEFUNCTION. It will then simply output the received data to stdout. You can have the default callback write the data to a different file handle by passing a 'FILE *' to a file opened for writing with the CURLOPT_WRITEDATA option.

Now, we need to take a step back and have a deep breath. Here's one of those rare platform-dependent nitpicks. Did you spot it? On some platforms[2], libcurl won't be able to operate on files opened by the program. Thus, if you use the default callback and pass in a an open file with CURLOPT_WRITEDATA, it will crash. You should therefore avoid this to make your program run fine virtually everywhere.

(CURLOPT_WRITEDATA was formerly known as CURLOPT_FILE. Both names still work and do the same thing).

If you're using libcurl as a win32 DLL, you MUST use the CURLOPT_WRITEFUNCTION if you set CURLOPT_WRITEDATA - or you will experience crashes.

There are of course many more options you can set, and we'll get back to a few of them later. Let's instead continue to the actual transfer:

 success = curl_easy_perform(easyhandle);

curl_easy_perform(3) will connect to the remote site, do the necessary commands and receive the transfer. Whenever it receives data, it calls the callback function we previously set. The function may get one byte at a time, or it may get many kilobytes at once. libcurl delivers as much as possible as often as possible. Your callback function should return the number of bytes it "took care of". If that is not the exact same amount of bytes that was passed to it, libcurl will abort the operation and return with an error code.

When the transfer is complete, the function returns a return code that informs you if it succeeded in its mission or not. If a return code isn't enough for you, you can use the CURLOPT_ERRORBUFFER to point libcurl to a buffer of yours where it'll store a human readable error message as well.

If you then want to transfer another file, the handle is ready to be used again. Mind you, it is even preferred that you re-use an existing handle if you intend to make another transfer. libcurl will then attempt to re-use the previous

Multi-threading Issues

The first basic rule is that you must never share a libcurl handle (be it easy or multi or whatever) between multiple threads. Only use one handle in one thread at a time.

libcurl is completely thread safe, except for two issues: signals and SSL/TLS handlers. Signals are used timeouting name resolves (during DNS lookup) - when built without c-ares support and not on Windows..

If you are accessing HTTPS or FTPS URLs in a multi-threaded manner, you are then of course using OpenSSL/GnuTLS multi-threaded and those libs have their own requirements on this issue. Basically, you need to provide one or two functions to allow it to function properly. For all details, see this:

OpenSSL

  http://www.openssl.org/docs/crypto/threads.html#DESCRIPTION

GnuTLS

 http://www.gnu.org/software/gnutls/manual/html_node/Multi_002dthreaded-applications.html

When using multiple threads you should set the CURLOPT_NOSIGNAL option to TRUE for all handles. Everything will work fine except that timeouts are not honored during the DNS lookup - which you can work around by building libcurl with c-ares support. c-ares is a library that provides asynchronous name resolves. Unfortunately, c-ares does not yet support IPv6.

Also, note that CURLOPT_DNS_USE_GLOBAL_CACHE is not thread-safe.

When It Doesn't Work

There will always be times when the transfer fails for some reason. You might have set the wrong libcurl option or misunderstood what the libcurl option actually does, or the remote server might return non-standard replies that confuse the library which then confuses your program.

There's one golden rule when these things occur: set the CURLOPT_VERBOSE option to TRUE. It'll cause the library to spew out the entire protocol details it sends, some internal info and some received protocol data as well (especially when using FTP). If you're using HTTP, adding the headers in the received output to study is also a clever way to get a better understanding why the server behaves the way it does. Include headers in the normal body output with CURLOPT_HEADER set TRUE.

Of course there are bugs left. We need to get to know about them to be able to fix them, so we're quite dependent on your bug reports! When you do report suspected bugs in libcurl, please include as much details you possibly can: a protocol dump that CURLOPT_VERBOSE produces, library version, as much as possible of your code that uses libcurl, operating system name and version, compiler name and version etc.

If CURLOPT_VERBOSE is not enough, you increase the level of debug data your application receive by using the CURLOPT_DEBUGFUNCTION.

Getting some in-depth knowledge about the protocols involved is never wrong, and if you're trying to do funny things, you might very well understand libcurl and how to use it better if you study the appropriate RFC documents at least briefly.

Upload Data to a Remote Site

libcurl tries to keep a protocol independent approach to most transfers, thus uploading to a remote FTP site is very similar to uploading data to a HTTP server with a PUT request.

Of course, first you either create an easy handle or you re-use one existing one. Then you set the URL to operate on just like before. This is the remote URL, that we now will upload.

Since we write an application, we most likely want libcurl to get the upload data by asking us for it. To make it do that, we set the read callback and the custom pointer libcurl will pass to our read callback. The read callback should have a prototype similar to:

 size_t function(char *bufptr, size_t size, size_t nitems, void *userp);

Where bufptr is the pointer to a buffer we fill in with data to upload and size*nitems is the size of the buffer and therefore also the maximum amount of data we can return to libcurl in this call. The 'userp' pointer is the custom pointer we set to point to a struct of ours to pass private data between the application and the callback.

 curl_easy_setopt(easyhandle, CURLOPT_READFUNCTION, read_function);

 curl_easy_setopt(easyhandle, CURLOPT_INFILE, &filedata);

Tell libcurl that we want to upload:

 curl_easy_setopt(easyhandle, CURLOPT_UPLOAD, TRUE);

A few protocols won't behave properly when uploads are done without any prior knowledge of the expected file size. So, set the upload file size using the CURLOPT_INFILESIZE_LARGE for all known file sizes like this[1]:

 /* in this example, file_size must be an off_t variable */  curl_easy_setopt(easyhandle, CURLOPT_INFILESIZE_LARGE, file_size);

When you call curl_easy_perform(3) this time, it'll perform all the necessary operations and when it has invoked the upload it'll call your supplied callback to get the data to upload. The program should return as much data as possible in every invoke, as that is likely to make the upload perform as fast as possible. The callback should return the number of bytes it wrote in the buffer. Returning 0 will signal the end of the upload.

Passwords

Many protocols use or even require that user name and password are provided to be able to download or upload the data of your choice. libcurl offers several ways to specify them.

Most protocols support that you specify the name and password in the URL itself. libcurl will detect this and use them accordingly. This is written like this:

 protocol://user:password@example.com/path/

If you need any odd letters in your user name or password, you should enter them URL encoded, as %XX where XX is a two-digit hexadecimal number.

libcurl also provides options to set various passwords. The user name and password as shown embedded in the URL can instead get set with the CURLOPT_USERPWD option. The argument passed to libcurl should be a char * to a string in the format "user:password:". In a manner like this:

 curl_easy_setopt(easyhandle, CURLOPT_USERPWD, "myname:thesecret");

Another case where name and password might be needed at times, is for those users who need to authenticate themselves to a proxy they use. libcurl offers another option for this, the CURLOPT_PROXYUSERPWD. It is used quite similar to the CURLOPT_USERPWD option like this:

 curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "myname:thesecret");

There's a long time unix "standard" way of storing ftp user names and passwords, namely in the $HOME/.netrc file. The file should be made private so that only the user may read it (see also the "Security Considerations" chapter), as it might contain the password in plain text. libcurl has the ability to use this file to figure out what set of user name and password to use for a particular host. As an extension to the normal functionality, libcurl also supports this file for non-FTP protocols such as HTTP. To make curl use this file, use the CURLOPT_NETRC option:

 curl_easy_setopt(easyhandle, CURLOPT_NETRC, TRUE);

And a very basic example of how such a .netrc file may look like:

 machine myhost.mydomain.com  login userlogin  password secretword

All these examples have been cases where the password has been optional, or at least you could leave it out and have libcurl attempt to do its job without it. There are times when the password isn't optional, like when you're using an SSL private key for secure transfers.

To pass the known private key password to libcurl:

 curl_easy_setopt(easyhandle, CURLOPT_SSLKEYPASSWD, "keypassword");

HTTP Authentication

The previous chapter showed how to set user name and password for getting URLs that require authentication. When using the HTTP protocol, there are many different ways a client can provide those credentials to the server and you can control what way libcurl will (attempt to) use. The default HTTP authentication method is called 'Basic', which is sending the name and password in clear-text in the HTTP request, base64-encoded. This is insecure.

At the time of this writing libcurl can be built to use: Basic, Digest, NTLM, Negotiate, GSS-Negotiate and SPNEGO. You can tell libcurl which one to use with CURLOPT_HTTPAUTH as in:

 curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH, CURLAUTH_DIGEST);

And when you send authentication to a proxy, you can also set authentication type the same way but instead with CURLOPT_PROXYAUTH:

 curl_easy_setopt(easyhandle, CURLOPT_PROXYAUTH, CURLAUTH_NTLM);

Both these options allow you to set multiple types (by ORing them together), to make libcurl pick the most secure one out of the types the server/proxy claims to support. This method does however add a round-trip since libcurl must first ask the server what it supports:

 curl_easy_setopt(easyhandle, CURLOPT_HTTPAUTH,  CURLAUTH_DIGEST|CURLAUTH_BASIC);

For convenience, you can use the 'CURLAUTH_ANY' define (instead of a list with specific types) which allows libcurl to use whatever method it wants.

When asking for multiple types, libcurl will pick the available one it considers "best" in its own internal order of preference.

HTTP POSTing

We get many questions regarding how to issue HTTP POSTs with libcurl the proper way. This chapter will thus include examples using both different versions of HTTP POST that libcurl supports.

The first version is the simple POST, the most common version, that most HTML pages using the <form> tag uses. We provide a pointer to the data and tell libcurl to post it all to the remote site:

  char *data="name=daniel&project=curl";   curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, data);   curl_easy_setopt(easyhandle, CURLOPT_URL, "http://posthere.com/");

  curl_easy_perform(easyhandle); /* post away! */

Simple enough, huh? Since you set the POST options with the CURLOPT_POSTFIELDS, this automatically switches the handle to use POST in the upcoming request.

Ok, so what if you want to post binary data that also requires you to set the Content-Type: header of the post? Well, binary posts prevents libcurl from being able to do strlen() on the data to figure out the size, so therefore we must tell libcurl the size of the post data. Setting headers in libcurl requests are done in a generic way, by building a list of our own headers and then passing that list to libcurl.

 struct curl_slist *headers=NULL;  headers = curl_slist_append(headers, "Content-Type: text/xml");

 /* post binary data */  curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDS, binaryptr);

 /* set the size of the postfields data */  curl_easy_setopt(easyhandle, CURLOPT_POSTFIELDSIZE, 23);

 /* pass our list of custom made headers */  curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);

 curl_easy_perform(easyhandle); /* post away! */

 curl_slist_free_all(headers); /* free the header list */

While the simple examples above cover the majority of all cases where HTTP POST operations are required, they don't do multi-part formposts. Multi-part formposts were introduced as a better way to post (possibly large) binary data and was first documented in the RFC1867. They're called multi-part because they're built by a chain of parts, each being a single unit. Each part has its own name and contents. You can in fact create and post a multi-part formpost with the regular libcurl POST support described above, but that would require that you build a formpost yourself and provide to libcurl. To make that easier, libcurl provides curl_formadd(3). Using this function, you add parts to the form. When you're done adding parts, you post the whole form.

The following example sets two simple text parts with plain textual contents, and then a file with binary contents and upload the whole thing.

 struct curl_httppost *post=NULL;  struct curl_httppost *last=NULL;  curl_formadd(&post, &last,   CURLFORM_COPYNAME, "name",   CURLFORM_COPYCONTENTS, "daniel", CURLFORM_END);  curl_formadd(&post, &last,   CURLFORM_COPYNAME, "project",   CURLFORM_COPYCONTENTS, "curl", CURLFORM_END);  curl_formadd(&post, &last,   CURLFORM_COPYNAME, "logotype-image",   CURLFORM_FILECONTENT, "curl.png", CURLFORM_END);

 /* Set the form info */  curl_easy_setopt(easyhandle, CURLOPT_HTTPPOST, post);

 curl_easy_perform(easyhandle); /* post away! */

 /* free the post data again */  curl_formfree(post);

Multipart formposts are chains of parts using MIME-style separators and headers. It means that each one of these separate parts get a few headers set that describe the individual content-type, size etc. To enable your application to handicraft this formpost even more, libcurl allows you to supply your own set of custom headers to such an individual form part. You can of course supply headers to as many parts you like, but this little example will show how you set headers to one specific part when you add that to the post handle:

 struct curl_slist *headers=NULL;  headers = curl_slist_append(headers, "Content-Type: text/xml");

 curl_formadd(&post, &last,   CURLFORM_COPYNAME, "logotype-image",   CURLFORM_FILECONTENT, "curl.xml",   CURLFORM_CONTENTHEADER, headers,   CURLFORM_END);

 curl_easy_perform(easyhandle); /* post away! */

 curl_formfree(post); /* free post */  curl_slist_free_all(post); /* free custom header list */

Since all options on an easyhandle are "sticky", they remain the same until changed even if you do call curl_easy_perform(3), you may need to tell curl to go back to a plain GET request if you intend to do such a one as your next request. You force an easyhandle to back to GET by using the CURLOPT_HTTPGET option:

 curl_easy_setopt(easyhandle, CURLOPT_HTTPGET, TRUE);

Just setting CURLOPT_POSTFIELDS to "" or NULL will *not* stop libcurl from doing a POST. It will just make it POST without any data to send!

Showing Progress

For historical and traditional reasons, libcurl has a built-in progress meter that can be switched on and then makes it presents a progress meter in your terminal.

Switch on the progress meter by, oddly enough, set CURLOPT_NOPROGRESS to FALSE. This option is set to TRUE by default.

For most applications however, the built-in progress meter is useless and what instead is interesting is the ability to specify a progress callback. The function pointer you pass to libcurl will then be called on irregular intervals with information about the current transfer.

Set the progress callback by using CURLOPT_PROGRESSFUNCTION. And pass a pointer to a function that matches this prototype:

 int progress_callback(void *clientp,   double dltotal,   double dlnow,   double ultotal,   double ulnow);

If any of the input arguments is unknown, a 0 will be passed. The first argument, the 'clientp' is the pointer you pass to libcurl with CURLOPT_PROGRESSDATA. libcurl won't touch it.

libcurl with C++

There's basically only one thing to keep in mind when using C++ instead of C when interfacing libcurl:

The callbacks CANNOT be non-static class member functions

Example C++ code:

class AClass {   static size_t write_data(void *ptr, size_t size, size_t nmemb,   void *ourpointer)   {   /* do what you want with the data */   }  }

Proxies

What "proxy" means according to Merriam-Webster: "a person authorized to act for another" but also "the agency, function, or office of a deputy who acts as a substitute for another".

Proxies are exceedingly common these days. Companies often only offer Internet access to employees through their HTTP proxies. Network clients or user-agents ask the proxy for documents, the proxy does the actual request and then it returns them.

libcurl has full support for HTTP proxies, so when a given URL is wanted, libcurl will ask the proxy for it instead of trying to connect to the actual host identified in the URL.

The fact that the proxy is a HTTP proxy puts certain restrictions on what can actually happen. A requested URL that might not be a HTTP URL will be still be passed to the HTTP proxy to deliver back to libcurl. This happens transparently, and an application may not need to know. I say "may", because at times it is very important to understand that all operations over a HTTP proxy is using the HTTP protocol. For example, you can't invoke your own custom FTP commands or even proper FTP directory listings.

Proxy Options

To tell libcurl to use a proxy at a given port number:

 curl_easy_setopt(easyhandle, CURLOPT_PROXY, "proxy-host.com:8080");

Some proxies require user authentication before allowing a request, and you pass that information similar to this:

 curl_easy_setopt(easyhandle, CURLOPT_PROXYUSERPWD, "user:password");

If you want to, you can specify the host name only in the CURLOPT_PROXY option, and set the port number separately with CURLOPT_PROXYPORT.

Environment Variables

libcurl automatically checks and uses a set of environment variables to know what proxies to use for certain protocols. The names of the variables are following an ancient de facto standard and are built up as "[protocol]_proxy" (note the lower casing). Which makes the variable 'http_proxy' checked for a name of a proxy to use when the input URL is HTTP. Following the same rule, the variable named 'ftp_proxy' is checked for FTP URLs. Again, the proxies are always HTTP proxies, the different names of the variables simply allows different HTTP proxies to be used.

The proxy environment variable contents should be in the format "[protocol://][user:password@]machine[:port]". Where the protocol:// part is simply ignored if present (so http://proxy and bluerk://proxy will do the same) and the optional port number specifies on which port the proxy operates on the host. If not specified, the internal default port number will be used and that is most likely *not* the one you would like it to be.

There are two special environment variables. 'all_proxy' is what sets proxy for any URL in case the protocol specific variable wasn't set, and 'no_proxy' defines a list of hosts that should not use a proxy even though a variable may say so. If 'no_proxy' is a plain asterisk ("*") it matches all hosts.

SSL and Proxies

SSL is for secure point-to-point connections. This involves strong encryption and similar things, which effectively makes it impossible for a proxy to operate as a "man in between" which the proxy's task is, as previously discussed. Instead, the only way to have SSL work over a HTTP proxy is to ask the proxy to tunnel trough everything without being able to check or fiddle with the traffic.

Opening an SSL connection over a HTTP proxy is therefor a matter of asking the proxy for a straight connection to the target host on a specified port. This is made with the HTTP request CONNECT. ("please mr proxy, connect me to that remote host").

Because of the nature of this operation, where the proxy has no idea what kind of data that is passed in and out through this tunnel, this breaks some of the very few advantages that come from using a proxy, such as caching. Many organizations prevent this kind of tunneling to other destination port numbers than 443 (which is the default HTTPS port number).

Tunneling Through Proxy

As explained above, tunneling is required for SSL to work and often even restricted to the operation intended for SSL; HTTPS.

This is however not the only time proxy-tunneling might offer benefits to you or your application.

As tunneling opens a direct connection from your application to the remote machine, it suddenly also re-introduces the ability to do non-HTTP operations over a HTTP proxy. You can in fact use things such as FTP upload or FTP custom commands this way.

Again, this is often prevented by the administrators of proxies and is rarely allowed.

Tell libcurl to use proxy tunneling like this:

 curl_easy_setopt(easyhandle, CURLOPT_HTTPPROXYTUNNEL, TRUE);

In fact, there might even be times when you want to do plain HTTP operations using a tunnel like this, as it then enables you to operate on the remote server instead of asking the proxy to do so. libcurl will not stand in the way for such innovative actions either!

Proxy Auto-Config

Netscape first came up with this. It is basically a web page (usually using a .pac extension) with a javascript that when executed by the browser with the requested URL as input, returns information to the browser on how to connect to the URL. The returned information might be "DIRECT" (which means no proxy should be used), "PROXY host:port" (to tell the browser where the proxy for this particular URL is) or "SOCKS host:port" (to direct the browser to a SOCKS proxy).

libcurl has no means to interpret or evaluate javascript and thus it doesn't support this. If you get yourself in a position where you face this nasty invention, the following advice have been mentioned and used in the past:

- Depending on the javascript complexity, write up a script that translates it to another language and execute that.

- Read the javascript code and rewrite the same logic in another language.

- Implement a javascript interpreted, people have successfully used the Mozilla javascript engine in the past.

- Ask your admins to stop this, for a static proxy setup or similar.

Persistence Is The Way to Happiness

Re-cycling the same easy handle several times when doing multiple requests is the way to go.

After each single curl_easy_perform(3) operation, libcurl will keep the connection alive and open. A subsequent request using the same easy handle to the same host might just be able to use the already open connection! This reduces network impact a lot.

Even if the connection is dropped, all connections involving SSL to the same host again, will benefit from libcurl's session ID cache that drastically reduces re-connection time.

FTP connections that are kept alive saves a lot of time, as the command- response round-trips are skipped, and also you don't risk getting blocked without permission to login again like on many FTP servers only allowing N persons to be logged in at the same time.

libcurl caches DNS name resolving results, to make lookups of a previously looked up name a lot faster.

Other interesting details that improve performance for subsequent requests may also be added in the future.

Each easy handle will attempt to keep the last few connections alive for a while in case they are to be used again. You can set the size of this "cache" with the CURLOPT_MAXCONNECTS option. Default is 5. It is very seldom any point in changing this value, and if you think of changing this it is often just a matter of thinking again.

When the connection cache gets filled, libcurl must close an existing connection in order to get room for the new one. To know which connection to close, libcurl uses a "close policy" that you can affect with the CURLOPT_CLOSEPOLICY option. There's only two polices implemented as of this writing (libcurl 7.9.4) and they are:

CURLCLOSEPOLICY_LEAST_RECENTLY_USED

simply close the one that hasn't been used for the longest time. This is the default behavior.

CURLCLOSEPOLICY_OLDEST

closes the oldest connection, the one that was created the longest time ago.

There are, or at least were, plans to support a close policy that would call a user-specified callback to let the user be able to decide which connection to dump when this is necessary and therefor is the CURLOPT_CLOSEFUNCTION an existing option still today. Nothing ever uses this though and this will not be used within the foreseeable future either.

To force your upcoming request to not use an already existing connection (it will even close one first if there happens to be one alive to the same host you're about to operate on), you can do that by setting CURLOPT_FRESH_CONNECT to TRUE. In a similar spirit, you can also forbid the upcoming request to be "lying" around and possibly get re-used after the request by setting CURLOPT_FORBID_REUSE to TRUE.

HTTP Headers Used by libcurl

When you use libcurl to do HTTP requests, it'll pass along a series of headers automatically. It might be good for you to know and understand these ones.

Host

This header is required by HTTP 1.1 and even many 1.0 servers and should be the name of the server we want to talk to. This includes the port number if anything but default.

Pragma

"no-cache". Tells a possible proxy to not grab a copy from the cache but to fetch a fresh one.

Accept

"*/*".

Expect:

When doing multi-part formposts, libcurl will set this header to "100-continue" to ask the server for an "OK" message before it proceeds with sending the data part of the post.

Customizing Operations

There is an ongoing development today where more and more protocols are built upon HTTP for transport. This has obvious benefits as HTTP is a tested and reliable protocol that is widely deployed and have excellent proxy-support.

When you use one of these protocols, and even when doing other kinds of programming you may need to change the traditional HTTP (or FTP or...) manners. You may need to change words, headers or various data.

libcurl is your friend here too.

CUSTOMREQUEST

If just changing the actual HTTP request keyword is what you want, like when GET, HEAD or POST is not good enough for you, CURLOPT_CUSTOMREQUEST is there for you. It is very simple to use:

 curl_easy_setopt(easyhandle, CURLOPT_CUSTOMREQUEST, "MYOWNRUQUEST");

When using the custom request, you change the request keyword of the actual request you are performing. Thus, by default you make GET request but you can also make a POST operation (as described before) and then replace the POST keyword if you want to. You're the boss.

Modify Headers

HTTP-like protocols pass a series of headers to the server when doing the request, and you're free to pass any amount of extra headers that you think fit. Adding headers are this easy:

 struct curl_slist *headers=NULL; /* init to NULL is important */

 headers = curl_slist_append(headers, "Hey-server-hey: how are you?");  headers = curl_slist_append(headers, "X-silly-content: yes");

 /* pass our list of custom made headers */  curl_easy_setopt(easyhandle, CURLOPT_HTTPHEADER, headers);

 curl_easy_perform(easyhandle); /* transfer http */

 curl_slist_free_all(headers); /* free the header list */

... and if you think some of the internally generated headers, such as Accept: or Host: don't contain the data you want them to contain, you can replace them by simply setting them too:

 headers = curl_slist_append(headers, "Accept: Agent-007");  headers = curl_slist_append(headers, "Host: munged.host.line");

Delete Headers

If you replace an existing header with one with no contents, you will prevent the header from being sent. Like if you want to completely prevent the "Accept:" header to be sent, you can disable it with code similar to this:

 headers = curl_slist_append(headers, "Accept:");

Both replacing and canceling internal headers should be done with careful consideration and you should be aware that you may violate the HTTP protocol when doing so.

Enforcing chunked transfer-encoding

By making sure a request uses the custom header "Transfer-Encoding: chunked" when doing a non-GET HTTP operation, libcurl will switch over to "chunked" upload, even though the size of the data to upload might be known. By default, libcurl usually switches over to chunked upload automatically if the upload data size is unknown.

HTTP Version

There's only one aspect left in the HTTP requests that we haven't yet mentioned how to modify: the version field. All HTTP requests includes the version number to tell the server which version we support. libcurl speak HTTP 1.1 by default. Some very old servers don't like getting 1.1-requests and when dealing with stubborn old things like that, you can tell libcurl to use 1.0 instead by doing something like this:

 curl_easy_setopt(easyhandle, CURLOPT_HTTP_VERSION, CURLHTTP_VERSION_1_0);

FTP Custom Commands

Not all protocols are HTTP-like, and thus the above may not help you when you want to make for example your FTP transfers to behave differently.

Sending custom commands to a FTP server means that you need to send the commands exactly as the FTP server expects them (RFC959 is a good guide here), and you can only use commands that work on the control-connection alone. All kinds of commands that requires data interchange and thus needs a data-connection must be left to libcurl's own judgment. Also be aware that libcurl will do its very best to change directory to the target directory before doing any transfer, so if you change directory (with CWD or similar) you might confuse libcurl and then it might not attempt to transfer the file in the correct remote directory.

A little example that deletes a given file before an operation:

 headers = curl_slist_append(headers, "DELE file-to-remove");

 /* pass the list of custom commands to the handle */  curl_easy_setopt(easyhandle, CURLOPT_QUOTE, headers);

 curl_easy_perform(easyhandle); /* transfer ftp data! */

 curl_slist_free_all(headers); /* free the header list */

If you would instead want this operation (or chain of operations) to happen _after_ the data transfer took place the option to curl_easy_setopt(3) would instead be called CURLOPT_POSTQUOTE and used the exact same way.

The custom FTP command will be issued to the server in the same order they are added to the list, and if a command gets an error code returned back from the server, no more commands will be issued and libcurl will bail out with an error code (CURLE_FTP_QUOTE_ERROR). Note that if you use CURLOPT_QUOTE to send commands before a transfer, no transfer will actually take place when a quote command has failed.

If you set the CURLOPT_HEADER to true, you will tell libcurl to get information about the target file and output "headers" about it. The headers will be in "HTTP-style", looking like they do in HTTP.

The option to enable headers or to run custom FTP commands may be useful to combine with CURLOPT_NOBODY. If this option is set, no actual file content transfer will be performed.

FTP Custom CUSTOMREQUEST

If you do what list the contents of a FTP directory using your own defined FTP command, CURLOPT_CUSTOMREQUEST will do just that. "NLST" is the default one for listing directories but you're free to pass in your idea of a good alternative.

Cookies Without Chocolate Chips

In the HTTP sense, a cookie is a name with an associated value. A server sends the name and value to the client, and expects it to get sent back on every subsequent request to the server that matches the particular conditions set. The conditions include that the domain name and path match and that the cookie hasn't become too old.

In real-world cases, servers send new cookies to replace existing one to update them. Server use cookies to "track" users and to keep "sessions".

Cookies are sent from server to clients with the header Set-Cookie: and they're sent from clients to servers with the Cookie: header.

To just send whatever cookie you want to a server, you can use CURLOPT_COOKIE to set a cookie string like this:

 curl_easy_setopt(easyhandle, CURLOPT_COOKIE, "name1=var1; name2=var2;");

In many cases, that is not enough. You might want to dynamically save whatever cookies the remote server passes to you, and make sure those cookies are then use accordingly on later requests.

One way to do this, is to save all headers you receive in a plain file and when you make a request, you tell libcurl to read the previous headers to figure out which cookies to use. Set header file to read cookies from with CURLOPT_COOKIEFILE.

The CURLOPT_COOKIEFILE option also automatically enables the cookie parser in libcurl. Until the cookie parser is enabled, libcurl will not parse or understand incoming cookies and they will just be ignored. However, when the parser is enabled the cookies will be understood and the cookies will be kept in memory and used properly in subsequent requests when the same handle is used. Many times this is enough, and you may not have to save the cookies to disk at all. Note that the file you specify to CURLOPT_COOKIEFILE doesn't have to exist to enable the parser, so a common way to just enable the parser and not read able might be to use a file name you know doesn't exist.

If you rather use existing cookies that you've previously received with your Netscape or Mozilla browsers, you can make libcurl use that cookie file as input. The CURLOPT_COOKIEFILE is used for that too, as libcurl will automatically find out what kind of file it is and act accordingly.

The perhaps most advanced cookie operation libcurl offers, is saving the entire internal cookie state back into a Netscape/Mozilla formatted cookie file. We call that the cookie-jar. When you set a file name with CURLOPT_COOKIEJAR, that file name will be created and all received cookies will be stored in it when curl_easy_cleanup(3) is called. This enabled cookies to get passed on properly between multiple handles without any information getting lost.

FTP Peculiarities We Need

FTP transfers use a second TCP/IP connection for the data transfer. This is usually a fact you can forget and ignore but at times this fact will come back to haunt you. libcurl offers several different ways to custom how the second connection is being made.

libcurl can either connect to the server a second time or tell the server to connect back to it. The first option is the default and it is also what works best for all the people behind firewalls, NATs or IP-masquerading setups. libcurl then tells the server to open up a new port and wait for a second connection. This is by default attempted with EPSV first, and if that doesn't work it tries PASV instead. (EPSV is an extension to the original FTP spec and does not exist nor work on all FTP servers.)

You can prevent libcurl from first trying the EPSV command by setting CURLOPT_FTP_USE_EPSV to FALSE.

In some cases, you will prefer to have the server connect back to you for the second connection. This might be when the server is perhaps behind a firewall or something and only allows connections on a single port. libcurl then informs the remote server which IP address and port number to connect to. This is made with the CURLOPT_FTPPORT option. If you set it to "-", libcurl will use your system's "default IP address". If you want to use a particular IP, you can set the full IP address, a host name to resolve to an IP address or even a local network interface name that libcurl will get the IP address from.

When doing the "PORT" approach, libcurl will attempt to use the EPRT and the LPRT before trying PORT, as they work with more protocols. You can disable this behavior by setting CURLOPT_FTP_USE_EPRT to FALSE.

Headers Equal Fun

Some protocols provide "headers", meta-data separated from the normal data. These headers are by default not included in the normal data stream, but you can make them appear in the data stream by setting CURLOPT_HEADER to TRUE.

What might be even more useful, is libcurl's ability to separate the headers from the data and thus make the callbacks differ. You can for example set a different pointer to pass to the ordinary write callback by setting CURLOPT_WRITEHEADER.

Or, you can set an entirely separate function to receive the headers, by using CURLOPT_HEADERFUNCTION.

The headers are passed to the callback function one by one, and you can depend on that fact. It makes it easier for you to add custom header parsers etc.

"Headers" for FTP transfers equal all the FTP server responses. They aren't actually true headers, but in this case we pretend they are! ;-)

Post Transfer Information

 [ curl_easy_getinfo ]

Security Considerations

libcurl is in itself not insecure. If used the right way, you can use libcurl to transfer data pretty safely.

There are of course many things to consider that may loosen up this situation:

Command Lines

If you use a command line tool (such as curl) that uses libcurl, and you give option to the tool on the command line those options can very likely get read by other users of your system when they use 'ps' or other tools to list currently running processes.

To avoid this problem, never feed sensitive things to programs using command line options.

.netrc

.netrc is a pretty handy file/feature that allows you to login quickly and automatically to frequently visited sites. The file contains passwords in clear text and is a real security risk. In some cases, your .netrc is also stored in a home directory that is NFS mounted or used on another network based file system, so the clear text password will fly through your network every time anyone reads that file!

To avoid this problem, don't use .netrc files and never store passwords in plain text anywhere.

Clear Text Passwords

Many of the protocols libcurl supports send name and password unencrypted as clear text (HTTP Basic authentication, FTP, TELNET etc). It is very easy for anyone on your network or a network nearby yours, to just fire up a network analyzer tool and eavesdrop on your passwords. Don't let the fact that HTTP uses base64 encoded passwords fool you. They may not look readable at a first glance, but they very easily "deciphered" by anyone within seconds.

To avoid this problem, use protocols that don't let snoopers see your password: HTTPS, FTPS and FTP-kerberos are a few examples. HTTP Digest authentication allows this too, but isn't supported by libcurl as of this writing.

Showing What You Do

On a related issue, be aware that even in situations like when you have problems with libcurl and ask someone for help, everything you reveal in order to get best possible help might also impose certain security related risks. Host names, user names, paths, operating system specifics etc (not to mention passwords of course) may in fact be used by intruders to gain additional information of a potential target.

To avoid this problem, you must of course use your common sense. Often, you can just edit out the sensitive data or just search/replace your true information with faked data.

Multiple Transfers Using the multi Interface

The easy interface as described in detail in this document is a synchronous interface that transfers one file at a time and doesn't return until its done.

The multi interface on the other hand, allows your program to transfer multiple files in both directions at the same time, without forcing you to use multiple threads.

To use this interface, you are better off if you first understand the basics of how to use the easy interface. The multi interface is simply a way to make multiple transfers at the same time, by adding up multiple easy handles in to a "multi stack".

You create the easy handles you want and you set all the options just like you have been told above, and then you create a multi handle with curl_multi_init(3) and add all those easy handles to that multi handle with curl_multi_add_handle(3).

When you've added the handles you have for the moment (you can still add new ones at any time), you start the transfers by call curl_multi_perform(3).

curl_multi_perform(3) is asynchronous. It will only execute as little as possible and then return back control to your program. It is designed to never block. If it returns CURLM_CALL_MULTI_PERFORM you better call it again soon, as that is a signal that it still has local data to send or remote data to receive.

The best usage of this interface is when you do a select() on all possible file descriptors or sockets to know when to call libcurl again. This also makes it easy for you to wait and respond to actions on your own application's sockets/handles. You figure out what to select() for by using curl_multi_fdset(3), that fills in a set of fd_set variables for you with the particular file descriptors libcurl uses for the moment.

When you then call select(), it'll return when one of the file handles signal action and you then call curl_multi_perform(3) to allow libcurl to do what it wants to do. Take note that libcurl does also feature some time-out code so we advice you to never use very long timeouts on select() before you call curl_multi_perform(3), which thus should be called unconditionally every now and then even if none of its file descriptors have signaled ready. Another precaution you should use: always call curl_multi_fdset(3) immediately before the select() call since the current set of file descriptors may change when calling a curl function.

If you want to stop the transfer of one of the easy handles in the stack, you can use curl_multi_remove_handle(3) to remove individual easy handles. Remember that easy handles should be curl_easy_cleanup(3)ed.

When a transfer within the multi stack has finished, the counter of running transfers (as filled in by curl_multi_perform(3)) will decrease. When the number reaches zero, all transfers are done.

curl_multi_info_read(3) can be used to get information about completed transfers. It then returns the CURLcode for each easy transfer, to allow you to figure out success on each individual transfer.

SSL, Certificates and Other Tricks

 [ seeding, passwords, keys, certificates, ENGINE, ca certs ]

Sharing Data Between Easy Handles

 [ fill in ]

Footnotes

[1]

libcurl 7.10.3 and later have the ability to switch over to chunked Transfer-Encoding in cases were HTTP uploads are done with data of an unknown size.

[2]

This happens on Windows machines when libcurl is built and used as a DLL. However, you can still do this on Windows if you link with a static library.

[3]

The curl-config tool is generated at build-time (on unix-like systems) and should be installed with the 'make install' or similar instruction that installs the library, header files, man pages etc.

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_mprintf.pdf0000644000175000017500000004660110265631023023134 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xY[oF~_1xQvjDiR%}ൃo! 30-BZEٝ9;ؔ?__<~]xO2=e zP[ 8 "Y ߮)2y$Yzcl$Λ8#E?׿-V6 NIPhH'utpa4Xorv"k~+q~8Pm+Jvs'O]rڶY3[s 8FͯZv|*5rVd[ņM}$)rbbCFhB!1((e6ٕ}9OC/ώk 4idFQ%,zD `x t`2.#0x&@xTٌ*p A:7܀AJ,q0)uFGLJSŎ(3m7js(| pwc)Pȿc/g |ުÿsMKt6]4z UouQQۋ"BCQ*%R_#UuCKT8'qN@w6 ֍I:ٶD|'zgjk+.N`*YdzWOH>W*s 􍀃9n[}#h[E?w7:*Fd%zw5+,sʡJm3n+ zWRM6=zٳWG/G/N'-LϷa7RT%e6yRH},6M"*%IR4ߑ "HU8KMJDtG8EѦ0ǣ܆;. ?FMp ^uEIgO.Ŝr$Ye[0Ukewy[ 5%ѻɳUUdbZ ~)x!H^4J`*49:Ӯ۲#,m<"6FY|)\A&=l2Tkx''3gu&h8t"+uq%m`cl܃AXNQKt f}TwPK@~ lt.BI \8!.qZ+)P,RvZqQܒr^i&JjAp k1 29tZc;aRh٘A׽ިWTUPC][iX8*5$֢ubZlsXD~\)8PQsHG,=$BC .i+ۻ$b{Llo6\O2VڙT]Fg&Ƕcz&/ ltv9i%;لispSCg,k>7Bƒl G6{|ĆsS.`q:Cq`pMJQ7e$1 %+dDMHudQH 7cjf[ ϹJ1݋8uك)ϛyp! 5֑[CK22)(%>k"W!X/YݠqJ*xRih(KҼHu10\U |T PK-fssUB1嫣W/.]zvPj*}Jś!?=z@/Q<ރ7ܗtJf\zK"^ؘ$NG`@Dh䏳]}U :E?ҊyQPrlfCHQ)k?endstream endobj 9 0 obj 1826 endobj 19 0 obj <> stream xTn@+J\p/ގCа% mb'^Mu$Cȇ^z!@5950,^gΫ3NV:S,C LRv1Ju.|j+zPW[< wU A޷3 TДdsHS]} L$0 'JYḧi~>!S$1d懠+k(&۪aӻ@Mh0c&smF%wRIaQ`T.ܺvÕ|QVOj@AUGLk)!,RJEDӾiKضLUZ*,/B"e 5wm z(";`,j[\CT뾇4Ur>9`ӌեF Ң;ΣKWε6":[޼[̀f+E1&ri4˱# =q6#d5Jd"t.g i?M䜧6cZ%(m\dHTSHUf&u(9˸$rdnqܾlch<=ns5@?Nfp7{VDFŸKm1.-Y܊fm-!R-/z3i4_- P8s> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R ] /Count 2 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 22 0 obj <>stream xe{PSWoۮJ667Z+:VUD  DB;7&H@ TQڇV[vv;^{̝39| YXg2|qiRXf*W&߲~a7r\<~sO|ǗйaXƾRL*)T W9.nFyRIpQe DIX˘sVQDb²\X$IRpe ǯa~r0T["L.M%2Aee1d/lGwHIG2=V$"K%+ݤzQ 6PlNG{37[G<Ѐߤ5ڊ2,N^0dzF?WLajm9;GW&\g2vW6復F5tWA֢wa4} Hi.l{Z cSKcTl7~u> ~{b3Lۻ62꒣j`pX눶IPu:^m8h_1SCT"m8ukB@oy=HPz-Γ_CuAW`Kq*z{j? "S N\ > 4 ;/tꍋݹ1wt \;yqL#ɱB55 {0ujZYKԫw-˅EionV/j\(F& Yo_$paI6tvUֶ,Q!@.8,Cq)>Û?SLgf'z uKV%0-a4?}rptu;] @[Gn?}q B8rudS`gothc`S!8(\I-qlQ*4fkXy\ PqyéϯbL aMD&Y.f+x\{Jdԁz\b Zd+gԣ.c1tbԽ6q!E9VJ`vi:r0IŌwq\&tz&z[&U܅osRu~xY5Z5ltErS "@QC\vca`e!-FH4kn\aD'5*o^ѯXslO,&s5:-5{m}'U=.G=)1B0>"pi#-v0;_#gS"lv*Zm|k nu.p&$i:h, >Kߥ7l~>V&iJ䨱ko;ZdJ3~<16|yo\i^ŢV0ضZ6Q%7M@, D:e?΀܉f*>~u+b0 3]OB /RKr*F7ƽӱ  m6{ &H=h w\6d6}`t-Ys;GV3YU*QWٽu&1lT׸o': BdL#gSPK3h2ꪍ:>@LH!9 _ qεRL?6` j}hsMvѮѕ* 0xhv6j9Vװ+6xKr`!r vK?YO8L׳wlߟGGlbDw"Nwe 9j杓ۮ|?2}0ty+BԶ<=yWmŋ_> endstream endobj 23 0 obj 2413 endobj 24 0 obj <>stream xWy\S׶>sQ,*'VA:mġ0 aJfH@1 ^jkmھzok[ۻNw{2a}o}[DGD? ~JHVh1k "~8)/-OuN`ByDJ::Cй%Vz6!.6IW(UdEJh2!?NG(bvG*I j*?`\/^l^NHJP%GVoR$% E-ZJtP`*fo:bؐ  ;vmJS;y>W^ 36j=zOPEsvj#EN-fS;9.j"&ZJQSr* VPDʛQOPZj 5zQ%|r*&Z#5py/oGwP$Ŵ|¾'̟``bē۽ޞIK'Y&/)NyesJ+SfꁩMPY\NO=R:e|RTΌWoJjlSOâYh;g$=hjExbɔ+lpqEt r셉X˷hR,4fϛ.Qk LbB*RPjv9l=it8J(ݐ_Jz PQh1AяHÿ2&@ 2/#9SKkrQ$O3(2?/,B;*jkkZZnRBP)ϭG'Y`n>j\+C"< 0ŋ_ ".6`Nb3>vyf7U,y}S{{yg^3+ŸRC(P(;b6qu>bVUMOd2zWN?N1rڎj\`),UX kImV[ўlc`4Ej CNY++Ik'^x, ƷDxQ{_ l%ǭ '>:D\,O+a)3ғ /#6,~maqa4OK8_I0/9, x~L#y0'+Urwx.t{- \{;LB`=weTuگ8I\-1#90mrq,<_vۆOˊPAnѠKM7!v]~ShUl^mpW Q kÓ Pya Bs\EumVK]b*i` aPɴJCZqNbmmL'Op }4ȯ&Lqڎ`GS*t.՚frs_ߦk 4Mss:Z ^3j= Iyf|.$(IObL,PMhkwH9C8tz C1 iM^úhR5o2QʮHe%ל!\G(gCzɎ؇YC5쾷HҗC4ZAFK?v .ϴ,<͜9fD,$@{])-sV`oioAsBv$f\m=Sφ\>eFA)ӻ3廋` >ԛxBnEH3uEg9|qw˰p0pYԁ}lMmֻ=~nQ7l/)VDp &́hC x.r١D]O!Axf0D@e`acjG]Dj!p]ktKW5h0g$MRМM re7vIw7hnYRX|fĆd>pHSS1΃2fP(/$t2ʌ}\ >9kK:\+.2\V٦qz.x#Tś2vG8w;$$t 3J9,vD$1 m`GI, 2b[b"PJm^ 9%[_1ը8*[O`fw+Foj d^LKb*ZN"ݕ[ PL=f6{tLJYfzjF`<%uт:<̊s~iRخ (zF…hv2tHǀƜU'\S7[fuJpثPq@6,q=?2W{H-*u1*29rJzbI.30? H~i}NiNݸu8n~;I' ҘB#*@eYVKLHxSЊM#d&whP|0l|NTEKxsTV .-j7m@˗8f #*b޶vSzԡ˰c3.ds>WѪ+7XoQ:-v궇JǪ2Є[` 2O@,^ͮבv[b`1 7 :(07ww@vbG8TYa-$sV,z"ْ.;`^s%/]B@Vkeaw)y վ_K5u:EVN:25c|9[H'7WG#9_n";xpa.@BwЩnNwDP^ϫ8HNf3I0Upl*3̕bGդD:}Bqg~Ħ`ttUP5+n1gE~䷶97^Ks3/p>+ޖb,;EKU@2`a˵pQE8nR!6* -ӟ_'U pW#ݶ 1Mw;`]1f2-,4բOXyf% >\|nS0y0>fY̟]<)f9i?k녎l"YrN!pєz3"SQ9c K*QtdrR։˵Lkqeqe^Y9(Ѱo,̉G/­A/CmWAgv ع{ 3pA}-Z[ř22\o \Ǿ_ɸnZzz>A߱))**J(Zؖb96SPYͨOul,JᓯpŇ G3d|m#`=kgWcA&˫-&谎[6u4qtbs"" >v)9iݞY4:m,=ϩ:}N!st.gAjFI(ؘ%K?臊u:jYPCW 3lw킚~4FH2nN)i͏*3^Ǎ,ԭI[A*m [SUbOXS^+j C+>>j4 jCƆF ahY{ꅺyڡH*M܊"9Y Ԏ_.;oB4zD܋98Ž5.Dx&Ҝ٪mpmBRޯ~4O|s;+ʜblƩN3+u҃)$_f,M ʺu-4UfEnACQn*4):5Yu)q6HT/53Iiő%}%Pi*;$/%oiyYO&49zCU#f> YXEvE\A|78`nעNoۛW~4iRJ+e uyEBPa*,䊘cO9uZqBpo7D|҇I7^@U:NJO'-I?M!ǟ]~ ȭ|1xHrã{Nwx3j|dׂdyЊ&>stream xX TS׺>sZSքj֩j:XQDQ˜$d$ ӆaJIfdpCZjᶵm݇k}{pZEB{8gGCx$6b1M"ۉD!b<#d'*NZ5b1 M8b%* %NVIsm[ؙcc=r;ZI qo?c|D&M[t~}tbk_7iɤI-=V{yTz{|/ BNL512.[p=hS4 7uŝbVFǣ"څ:]] 6ң~ljgJ /$O|(!G7kx#.fXs7V<~fIț"׭yiRMBq_7A7x]h:U^I>2fup#}v##ᮣ"p{K}H_.v0iSGa!M^r:jQeb Ɲۃ%My+OM7}8;VC9GÛНrg?[OsefpLcnU^#xΕ 4\i >ڞCK퇞/uW%0<^'VjSg.-S‚ Xz ܔ]=ǗnN%FNJJa$kk>~5vIO;|u>gVbJF*hFq}D"e'3 &~UoE(1㬵dz/6V쁋a#ɏ󦽵N]wb -xpTݸ`jQLe%FZNWZ1E:;}uf| c1%}pҥ B"}1y;l;w lLReyVȜi4%A2 fd\k.:G.o=pTO<-ImL(Mu1[bL~[pn__ /*TCaGoF'T=74&!%EKinkiNqj:pQϠ)Sl7Ff j`ЕD9JHU`7X9ݑ=xXR+Jɴ@%d%{(jE1:2UpLZ.sԇoOn "9|ϵcNQ[#WgT.Lq{nBi&g>5y-Bh"K5$J2@G Gh:Ѐ}4*VywoeSh`M枮*?bxهatw,_D(Y/R5νXdH&-M]זf`߫Rc.߇3{F+1߳?m Ff42B?Vj` Th @ZjU҂Vȫw fku9xx'k >ĹJiV+.F݌ۀDNCŸ qsƷQ,Xjq8@)nmVP=6Y`bU 'û-ZK X=:2e0hvp:sR Fv /NkvANA5GXbZ@iы(wV+ Z=[nrxKY(_Ddo^y6SVݓ $z?C(3q 6#.on,d+0\Q QR-`ld¶Iׂ !ᄪ)p ^ѥY Zx\ y:?58O1ꈹ @cI6$,FIa8.u6qή0)mb"6td喁2!(9RgmP%ƺ=pBV-XbhN-28 -@hE}5ٳZToIx? p\|l˴؏&R`V盅#cpR2pfVK/کKgGW3O|QkY\fǠ٬MCj օԤ7Ĺy%F7jj -.5]7w0ڳWEEӎ#=4zKH2ZEfcGą| :v`pJ x~ 'έ=_DK4Tkn^$ͲUtm_u؁nk8ҔRR׶{'" A9.GB_d/95GpȫR`!PL?{6}_7vm,bmM`F;IhA/ ;)PPRf`] VL ST@ \a:Q}(w&OR8Y A O.bl.Zo_n(qᬙ}:!\0UI0 J3#ģis35. { wm_Z8c<q)DXpoGp0| 3 9 {փ62wO6vo8Q?7|dbv}M1ksLw,sdNvvyF=/ *3g}`I:P_Q3,Z$U9z[f5ĺ\R묪i^?14Z,;h7qfe屻F2$T>B(#Qw$!~dnv Чcz$+m"[-xEԮ(=yyqS3ӡn,*^-:euJR|j1o'ȒI-m[e}N=?񰁙C?%[~?)CHHr2 M#:d/PʇS8w]H$L:7o*YzIy;sz4'#0mtJ}تl!orjG<y ϡ9LPGJ8xh܉3ɗ0Py|R4XDSD91G$ Z,0n𱯲F5 YEHJ}mіE|-UQT^XXPm*W[sřR225ڜ[Ԫ2pf|}.~̍U錮(*@ y̠ݩDx,Ͼ?ŀ[|mB|=;/W)$b6?>G;zy$3E\d.܆LZP{-7`KH5Ddj}F3zƣ''6^7:eE|ى>vݐpu|HIL<뀾q,7Z$ɜ9>^&Kڷai̜1tլag+*=W^Wt&Ki~؟4]ku^uWZK&LxZ=U endstream endobj 27 0 obj 5508 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 28 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 29 0000000000 65535 f 0000003186 00000 n 0000019042 00000 n 0000003111 00000 n 0000003540 00000 n 0000003392 00000 n 0000003234 00000 n 0000002807 00000 n 0000000015 00000 n 0000001911 00000 n 0000018606 00000 n 0000017308 00000 n 0000018216 00000 n 0000016800 00000 n 0000017963 00000 n 0000016358 00000 n 0000003308 00000 n 0000003338 00000 n 0000002967 00000 n 0000001931 00000 n 0000002787 00000 n 0000003687 00000 n 0000003730 00000 n 0000006229 00000 n 0000006250 00000 n 0000010722 00000 n 0000010743 00000 n 0000016337 00000 n 0000017864 00000 n trailer << /Size 29 /Root 1 0 R /Info 2 0 R >> startxref 19182 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_info_read.30000644000175000017500000000353610265631023024206 0ustar danieldaniel.\" $Id: curl_multi_info_read.3,v 1.5 2004/12/18 10:24:49 bagder Exp $ .\" .TH curl_multi_info_read 3 "18 Dec 2004" "libcurl 7.10.3" "libcurl Manual" .SH NAME curl_multi_info_read - read multi stack informationals .SH SYNOPSIS #include CURLMsg *curl_multi_info_read( CURLM *multi_handle, int *msgs_in_queue); .ad .SH DESCRIPTION Ask the multi handle if there are any messages/informationals from the individual transfers. Messages may include informationals such as an error code from the transfer or just the fact that a transfer is completed. More details on these should be written down as well. Repeated calls to this function will return a new struct each time, until a NULL is returned as a signal that there is no more to get at this point. The integer pointed to with \fImsgs_in_queue\fP will contain the number of remaining messages after this function was called. The data the returned pointer points to will not survive calling \fIcurl_multi_cleanup(3)\fP or \fIcurl_multi_remove_handle(3)\fP. The 'CURLMsg' struct is very simple and only contain very basic information. If more involved information is wanted, the particular "easy handle" in present in that struct and can thus be used in subsequent regular \fIcurl_easy_getinfo(3)\fP calls (or similar): .NF struct CURLMsg { CURLMSG msg; /* what this message means */ CURL *easy_handle; /* the handle it concerns */ union { void *whatever; /* message-specific data */ CURLcode result; /* return code for transfer */ } data; }; .SH "RETURN VALUE" A pointer to a filled-in struct, or NULL if it failed or ran out of structs. It also writes the number of messages left in the queue (after this read) in the integer the second argument points to. .SH "SEE ALSO" .BR curl_multi_cleanup "(3), " curl_multi_init "(3), " curl_multi_perform "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_strerror.html0000644000175000017500000000332210265631023024705 0ustar danieldaniel curl_share_strerror man page

NAME

curl_share_strerror - return string describing error code

SYNOPSIS

#include <curl/curl.h> const char *curl_share_strerror(CURLSHcode errornum );

DESCRIPTION

The curl_share_strerror() function returns a string describing the CURLSHcode error code passed in the argument errornum.

This function was added in libcurl 7.12.0

RETURN VALUE

A pointer to a zero terminated string.

SEE ALSO

libcurl-errors (3) curl_multi_strerror (3) curl_easy_strerror (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_getdate.pdf0000644000175000017500000005437610265631023023102 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXks_~0}v:ZDQvMf@JDC4a~{>Z~<,?F9acwϣ>D}&\r;Ff ' q*inFIV8?۟UZi,?MȶLJxlKkhƨ`1%HY݌Ʒ7#yHT$j=/&N Fθ =8FfmU.8h2(W$MSnIVmi|$mE^դz ʫrݐ(sE~PSӘYfTMwKo߆2֊z$Nܞ%8d5FCWI.ipHW\ ]mOSœuޝ#9gA//$I)#$]^-~~~w{V>OHI˾ y8y[T%U{ˆzݚV^-߫RMCUǺr7vjRXIYd:۩m*/F%:<D=MYШ쳦!}=+LdY}7 xu5"O]l8l5P=4 ~OxUerA٪y`u]凝*LΫl $N `-ړ#Ðr!RzGw2SOӎUw$/UH 8M{]T fyoXS]ݧ1AYUĺhɮ.a@wY cp﫺UkroIB8ɲ)tc)c\`:۪fՑEX^~O.u3 Ց+Qn0WKd"*6I /XKĽG3`2G mUڀf٬7T\E^%g`p`SB/AJ ] 7}` 9D*NNpLje=xsb\zqpu K-qren9uhF A"pI؜`,J:clSbzNx2\g2襶BQ %KDE (PfFpRv ͛c)ԓ? 64iq1lصi(ţ*ک:`ۇÄfSiU05\5y}~4a9ƄQ!; ()Yv:‰Xs*dXqcSX< ^twUՌC¯d=.p8*c@5/ɏZ ~2maFÚ3zU@@w*1QXZemK3ixzQ: ,\S]H[^t@n~7NiGKurR[q6>`?s8.>k0:k39xmޯAObDl_(_J.5YMZW@N5'W+Ůendstream endobj 9 0 obj 2227 endobj 19 0 obj <> stream xVr6}WlBM-zs7I֦ۇHbC2AYU!]dME^Ξp&ӷ['V6)𲘜_ Ab9qR i,b=gYn9(}^]M$d̃ݪ5x? OQMgI E9 #q',< I IͶ=Gc"f <'ytcaݒPD27GWбby^]68eI88(Fi2o SӃQ-7 9@s f ݔ9*ĄwW$Ic (ߪ^Q ,b, rE4w[:G=;Jova$#YGJlmPw6;Q^-8 77D,\WُɒT~aƢ؂؁]+.꿶\$ǖs#x؉7np:XWei] RX';Vnt:t-{8μGR'^?N%O}0A@zCVuMinWL;[h?aӰ9m>vi!U>n*b۵7WskA|Y,@mQsU!> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R ] /Count 2 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 22 0 obj <>stream xeT{PSW!vd#ֱV-ukEVUhlwwf;Nsݫݽtggsf|s@fE c^MY" +R%$ raP/82=Blh0 u}"X,/ĥ&[ldkl*"`1-("T(+ L[KD#Wrs3niYa`X"ˋKkVZ~KK"iL(^S,Ji -)%R$+A [$d+ IARHBd2 B~d$0&"F2 fz)eŲM 9e7QYF<Pّ;TT?WޒcE/ 'R=Oug_$c/`c&|[z;<|ko8f`*MEoNCGzPK)Z|,凉Kȸ1DbM)&|@VqJj˩7w_nC;oPryɉdl҄ř=$4偎A΄=Gmf32Za0k{zxiFu-d@ .=ksJͣQI-7n-̘n/%LOlNhz|ۅЋI7 mO-VS>}p/)\ kK$jD 5kt|?1Jwk =٩G쬜$mNRHԛ^Y xtB@gCl$ *`ک丹 Z7פ\0W j4jWkŒr4*zQnL]}3[~C}ͭ 8\|QP}ǃ vEݧ9N@8Qm(}Eٸ'F@0\akT7dXiT Paix >!miVc XvZ/\aT{~_u2HK4pkc'g]NІvB=|БWgԱ:sX@vrB `'́TTz #ŒjѰt1y2~$<YqMߵTlX8݉Tnrฉg- iۆ?|{jgz9žGSLg_0cb( - cYYy 4xj]>O#\.E('ÉjӬ2JOZU\^]BNڶn] IMRE^w|yu0Lq*K/?s. m|*o6?{ .4V** lnv p6d0K]󸎹t; Iz%BO\ТV܄Qoj `ϓs)& #8V,k'8? I5wǍ}P&Q\]jf'#\!8=6M ضI!_>4vX~|3/+|T*Hn AV~\o( endstream endobj 23 0 obj 2051 endobj 24 0 obj <>stream xXy\Sg>sΩ Ub6 ֥[] Rq {@B5 a |[ A@( Ju֥vZb[mv~`{_Y-< jupYFp8Yf2[%KHLycE^;֮]ۓ,!5x>>ɔIj[\. Ng+1xC1rIr2LTdlYҥ^‡d)0=xYFʿ? b՞ײS(⏄mQJnoS%oO83 ub)1N,#Ab'! v+CJb8LDXCL!| 1xLl"fӈsxXÁoF79QD9?yd7ׇ"T9 m?u)'|uS˦^gC97mE.1gF3@w p:;'*@ ?LZ'&JdotXV㠈SnS*ڍTz"dz(^/8o6*d^)ןf^zR2:)H8 Ƈ%uy A< FATxUzhnAv$ ڂ2[D'FK@\ƈbR}}t&2KP}ڎ P[ dsW*.dRSNh6 IKNAں PYaUTWT*CmIiqҥ!t8=3&ڟ\J;A!DvAPQ]b Z ]Zg4S8Ӭ< B%jseTMpUԽC+VKL8& prҘX@8x1PoUc*H6;-G<"!pG;\=cw;n#+24Sy|waAz*@k/Ԟ'M8WWQ(-(-E)RA 3kOyʒUcċ996R/ז*U5vSBϡ_[˝ _ts~:x+q367?sS 4F[Vjj ㌜*vM "qju {Z7֜Lǿⶓ$I+HCravnfrTU@0Ym"4Fmr4Y߉. |`G9h6sa ?|3&xU[5h&b_-8n=1vU+"{nwBj6hgWk ؤmIBjFI]h7}6&46C? BmtDd| rtZMz>ЇTB_թ4=MǰeA"o4TE>(T`^|wih[Bw׍>WQemYv܍>جׯe;;xli³f;O-CaN"9~zfp==\jl|=YE)j[itg>ӕn8nzYb ^ȿ0:F%xgRFMb *D> @^UF=ͻ ?pl:(h>Js;Q Pn|r)p} }/@Qxb q90SܠԹm!@}CDGP[O.AMhouZZ=ڋ4ETg_Π[po/\ahROdd,*IjӼ侤bA4Wh'ഏϟ=|;x@Kn:RQyþm 8=pa %.;*fiol?"na>!a\r4x"<?"Y8+S_;Wudv1k2폡a ~ ͆2(4Oސ^1k;?DQd:>%-rx~PAZ70ԁjP[V_ڮkW ~0h{ .]*thQOιgq.*Zm?щ1]ICC]ChVdu1tf C_&&QaJ UVX7eَ'%5P=wF14 KT:HjAh4h^`]'EhW3\3}>%=%Nw)tq-ajVW{5Wk>(2Hq$VS)*))Stl-|@aшF/ ' 9+hƂf}=f\|tL܌| H#s;f;vN UZqّHvpMmjc4E1 kUԭGFMNxyg#N6՗]Ɔ"l@3WMurdb󲓌O| FhHRN׷hfF .XQ-.JJL :? ^\x}k|pvZKs]6Z x΋g } [Mz[չJlzȢ𳅎:x=6ok|N`68vdoiC!H:T./0S'+0Z2hny@WhҪӥ-;YhQRx_4bZO6S0d|E5Ky6IqsMX-H'|*~iREn a22n\<ukM&:h4`\Tg&Ӎ׋ou=FMd7vxl=۔aM8܌NɔE ~}a֬`thqktj@d_>sфvsT%" rhCSpXЇ +}F aCA; O]Wp/潃3rKl=-mq7?%"`,\a4;l5̀>mM;z40<5fM['L Nšp\K/I!LR-̯̼n{RF-䝇 Ğ0brlQ~Bᆇ4'^*?yn(PC”]c9An/2v]*mȁ,$MF_, *13Y'u"VVZvXČ30q{aL8Tx2ጽ׎vy}T_P|+ZA]U7C4 a|^M*moϗQ߇>T V@]^gk'6K+kii*NBfOTtUȩ*hJ:$&}ELQ qUy JFgiRlRR[i6]D%gcYREkXiԔeLa4Δwt:;,:C/ T :j슓Gmv@{7DUyU ͘RM?{ؑGL6 TQ *PkJd1"p` /G;%9{vDrzBzwμa) rJ$"\Xؙ.\іH_G_x, >x\Vٜ/EꝅY$a֐ })!5·j殦NjZD1|~xAw?4IjK/xv`wᴇJՖ9r5(lc.a;5vu`To""5 endstream endobj 25 0 obj 5159 endobj 26 0 obj <>stream xy XS!ٻJܕ`IֱZAcED$!aNBF0- L2#8S<iK{Y8WýsyxxxVXbvm? |"Ţqp%.l]vs|bG&qdbe+R2yP]7oQxRLp>!byP]RMqa÷$DxoMܳ-g{r/RbelKOu]ۢU-Ylb!>O&6“L"^b Ml%s=6b.Cl'>%{/DŽ/O#<ψ~b'#vML%&fo,BL8ӈ)D,'l™xXO&"63GGPL5bN>7tut gJ<ۉnt!9Z. >&7TkK^˛*_Μ9S:~A3}YsftoYy@~"t\|gٕ4&f~9:6'eiHTD]Q].d$UV(vyhQԄ'Uʍ锌۹F0`~{Uq_}Ф+rN)\:فhR2o#R,|pƁVnR9 ^ͦdPbR3Dcq+04䶖fd3 Xa%|Pi5RV"3* EN&UW|LPUqI20\]̬S*1%%!5s3BZR\gq>z< 7˙SqN BCojVrtP(y| Pu1ۅHDRהa ɟmQ*xDrZT6ibyfއK ހZ1$8{IEV,,H*TʫV{nSC~As hdtl k;X5T?c'HQ l|UE1 MT&eܧ HM'*ȵyZ;%a1NwbNK;e6Gc 9^1>Z+AvʹJ>;vV `@$n~Q~R]\WMڏX;{òA_%Oh8 &N_U*8ؼϪEV Z(ġ͌s3 Φy:?cZW)" cEh*[tj(("%352YMòK _ ſB8 IJN~#˱˷N1΍0e _h8ggL@K̗dzn"BCO% s @!:t!BJK㝓f[:vT,`0htZyJ.P>ᛐ3|J =8GH"ʮЃKפ)( ̓rcdbP&#g~CY m$rnIF,WU SЗ`okNj}UG;(?d-ԒbqRV\ו'Ȯ̲ kZ(8h=$O?Ϻ R5VCf8% &sTM HJܯp1;}6-h XԼ/~ :t %ܰi=C]>1ȦkZJLxo&=S1E9fPfDZO# yJ^].W(laM:['(~oiݛQt󹎡xw4 rƶB|]ubwop)ЖuVqG`>EB+ ˽ KXS8wB.r4ڃAKx G< ]`௱|. =nXq0g[:ToIٗOL8(`eD˾qX˾cTwpY@MV<̟c f*,k&*vr!v ߁{C[o"VzP T+>2aBky1-%ϯF<ۻ !+WY* /1 Uua,8y/EьڲG"w{MjHR}!xO_F5 2:},Jb8*)*F^©>M0>Ǣ4fvY|R[KWu.RPWT#~N_i`0.Hr~sFݮG+fҖ{c:;1jKxY!8S_wT]Ҧ(>A2]}SIR[gx+e$;Ș pCd*'7Qʜt{UpEGg~kh rApn*pXW* VVH0 .\Agsq(+RGLgo?9ɝ//l3LrJu(5HL$3vhp VrIa)Dh((JוU%F mU?bM W{iTà_=;%jh] &D8rPPXm6[%tkKC[M鵪V &6c0~hS{ EOj͖Ḃ?ۇZrAeDi FB BLI4NY-W'1ߞw{j^ߩ8rNֱGk?MXT(KWanjRUǓW x}v;++͐Fr/LJʋ~=GS*@ ?(Z?2R#$IUR<BrK1QeƆDB!"+~OKeWq֝Q Rjԉ#ᛅȟ[uj/+븷XnR0kU 5`F++BLs0sgC1͠ H2sLYitЅᮺSmuIrBaʆ+B;ĉ2On}8JlJs-9E_7IJ[윫`Br?LIMbcSmMScbm,֖vfg5\x9T>7Hjs) + +@"*6"F {mѩ#"u~2Hxm~y\p3psleV4fR{>=UtKH8C<' oDŕ{2} Nc KJak %f[l [ о鉽Ya UQenN@-{)3KuBHU*4)F#Th>!o>BsT2%P>w:W2/DUG2"1cA3>y'2IVjtSYVx\P#ES:L\ZNjm'5'#dZ<ɔ:)w,v{BF>{C3[qgWy!n~3: ,]n*u2@%vn+ɮ,nCq5 &}@_ b3]fXOҍi ؜b@$ؗnW:L9U=Hv2r3s3MBҩ4F SX+7c >B_[.5yeؓZ!;$>MvhJf4zTXoVN}s c@cOqp2< ̥Dbi`:$a!#16R*6HE1y189v~[Y]hJTl@qJoR%uyb`Īںꪚl0(֚ؽ]$ZS?$x?%"=. V$W ÷wQh11iɚ$-P<p?jeaRcLk5oE˔dsVCNII7jUO~X@ܜ|XYD6ruˁчN!:CT&_ ?MlT 7@.y\#0ܐeW;ɻXGmcާ-B]Q}Qjأܓo%}s%$-,6Wj&{1ZoZ$ZIeL|rP+BNoˀ_Xɸ\qta ^\?k@~>a/u4Ej}vke^º9 SeÅk`T@͏<`TOQZpy:)溟 O:t84v;X{dT9_2kXp#+OxqvhzD۾ $ xBǛ;n}83c!jjR{4D4V]$pwI|ǿbc疃\;42Y HE, YcP vz'G-ص~M\#D&cŪ4c Fo7۲!A޵hj}]U#0:xW%۸k= g~3 Ⱦ\37>AdPA!l p%pi=BP7;ޟⓅUVauyKtn5̽ƆFPנJ! ní̜6z(=naV7}.ءU¨Z=y2\sE~U)5mg?k-K ZIPjsOg ;\0`jɯ(nI-γZQ׸vWP 3pq,f|zDs+7*-g'U.5z6x \NDtHHusr \rђaBD2XV.(]`d^Cb5Iͭ5 GW CXBQv+}]ゃxUΠˊgEJ+Sk5<]18E1/qfh|Y*= II/)-H@`$T|H) ~yY}bT/$Z\|y5>wY`?CbO/EUۖ|ab;D%luh+7\A0@!}g_]8C}q|eM1<ײs#Wnm 3ȴ{ i}[O<}ƆwS~"h*dTKh'@P84 I4t%)h9h6~{$>8N4m$!Lu/V +4s -=R%^1gJ-dfwÿ[Tb|s~SDvSEuG[FDmg:QՏ;ֳ^@ t}@",k vlOgɄpWt(f 2AA"$ rY"0F BsX`s6_m[Q%yyٗt8LVlNwKGM@^&peByq431=Jn/wG۳xB5}fեQI[WzAb +f> endobj 13 0 obj <> endobj 11 0 obj <> endobj 28 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 29 0000000000 65535 f 0000004210 00000 n 0000021983 00000 n 0000004135 00000 n 0000004564 00000 n 0000004416 00000 n 0000004258 00000 n 0000003831 00000 n 0000000015 00000 n 0000002312 00000 n 0000021507 00000 n 0000020146 00000 n 0000021101 00000 n 0000019625 00000 n 0000020845 00000 n 0000019187 00000 n 0000004332 00000 n 0000004362 00000 n 0000003991 00000 n 0000002332 00000 n 0000003810 00000 n 0000004711 00000 n 0000004765 00000 n 0000006902 00000 n 0000006923 00000 n 0000012168 00000 n 0000012189 00000 n 0000019166 00000 n 0000020730 00000 n trailer << /Size 29 /Root 1 0 R /Info 2 0 R >> startxref 22123 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_init.30000644000175000017500000000137710265631023023224 0ustar danieldaniel.\" $Id: curl_multi_init.3,v 1.4 2004/03/24 21:40:45 bagder Exp $ .\" .TH curl_multi_init 3 "1 March 2002" "libcurl 7.9.5" "libcurl Manual" .SH NAME curl_multi_init - create a multi handle .SH SYNOPSIS .B #include .sp .BI "CURLM *curl_multi_init( );" .ad .SH DESCRIPTION This function returns a CURLM handle to be used as input to all the other multi-functions, sometimes referred to as a multi handle on some places in the documentation. This init call MUST have a corresponding call to \fIcurl_multi_cleanup(3)\fP when the operation is complete. .SH RETURN VALUE If this function returns NULL, something went wrong and you cannot use the other curl functions. .SH "SEE ALSO" .BR curl_multi_cleanup "(3)," curl_global_init "(3)," curl_easy_init "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_perform.30000644000175000017500000000312310265631023023531 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_easy_perform.3,v 1.2 2004/02/27 15:34:06 bagder Exp $ .\" .TH curl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libcurl Manual" .SH NAME curl_easy_perform - Perform a file transfer .SH SYNOPSIS .B #include .sp .BI "CURLcode curl_easy_perform(CURL *" handle ");" .ad .SH DESCRIPTION This function is called after the init and all the \fIcurl_easy_setopt(3)\fP calls are made, and will perform the transfer as described in the options. It must be called with the same .I handle as input as the curl_easy_init call returned. You can do any amount of calls to \fIcurl_easy_perform(3)\fP while using the same handle. If you intend to transfer more than one file, you are even encouraged to do so. libcurl will then attempt to re-use the same connection for the following transfers, thus making the operations faster, less CPU intense and using less network resources. Just note that you will have to use \fIcurl_easy_setopt(3)\fP between the invokes to set options for the following curl_easy_perform. You must never call this function simultaneously from two places using the same handle. Let the function return first before invoking it another time. If you want parallel transfers, you must use several curl handles. .SH RETURN VALUE 0 means everything was ok, non-zero means an error occurred as .I defines. If the CURLOPT_ERRORBUFFER was set with .I curl_easy_setopt there will be a readable error message in the error buffer when non-zero is returned. .SH "SEE ALSO" .BR curl_easy_init "(3), " curl_easy_setopt "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_getenv.30000644000175000017500000000237310265631023022334 0ustar danieldaniel.\" $Id: curl_getenv.3,v 1.3 2004/04/30 08:38:08 bagder Exp $ .\" .TH curl_getenv 3 "30 April 2004" "libcurl 7.12" "libcurl Manual" .SH NAME curl_getenv - return value for environment name .SH SYNOPSIS .B #include .sp .BI "char *curl_getenv(const char *" name ");" .ad .SH DESCRIPTION curl_getenv() is a portable wrapper for the getenv() function, meant to emulate its behaviour and provide an identical interface for all operating systems libcurl builds on (including win32). .SH AVAILABILITY This function will be removed from the public libcurl API in a near future. It will instead be made "available" by source code access only, and then as curlx_getenv(). .SH RETURN VALUE If successful, curl_getenv() returns a pointer to the value of the specified environment. The memory it refers to is malloc()ed why the application must free() this when the data has completed to serve its purpose. When .I curl_getenv(3) fails to find the specified name, it returns a null pointer. .SH NOTE Under unix operating systems, there isn't any point in returning an allocated memory, although other systems won't work properly if this isn't done. The unix implementation thus have to suffer slightly from the drawbacks of other systems. .SH "SEE ALSO" .BR getenv "(3C), " criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_init_mem.html0000644000175000017500000000621110265631023024762 0ustar danieldaniel curl_global_init_mem man page

NAME

curl_global_init_mem - Global libcurl initialisation with memory callbacks

SYNOPSIS

#include <curl/curl.h>

CURLcode curl_global_init_mem(long flags, curl_malloc_callback m, curl_free_callback f, curl_realloc_callback r, curl_strdup_callback s, curl_calloc_callback c );

DESCRIPTION

This function works exactly as curl_global_init(3) with one addition: it allows the application to set callbacks to replace the otherwise used internal memory functions.

This man page only adds documentation for the callbacks, see the curl_global_init(3) man page for all the rest. When you use this function, all callback arguments must be set to valid function pointers.

The prototypes for the given callbacks should match these:

void *malloc_callback(size_t size);

To replace malloc()

void free_callback(void *ptr);

To replace free()

void *realloc_callback(void *ptr, size_t size);

To replace realloc()

char *strdup_callback(const char *str);

To replace strdup()

void *calloc_callback(size_t nmemb, size_t size);

To replace calloc()

CAUTION

Manipulating these gives considerable powers to the application to severly screw things up for libcurl. Take care!

SEE ALSO

curl_global_init (3) curl_global_cleanup (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl.m40000644000175000017500000002005610265631023021627 0ustar danieldaniel# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION], # [ACTION-IF-YES], [ACTION-IF-NO]) # ---------------------------------------------------------- # David Shaw Jan-23-2005 # # Checks for libcurl. DEFAULT-ACTION is the string yes or no to # specify whether to default to --with-libcurl or --without-libcurl. # If not supplied, DEFAULT-ACTION is yes. MINIMUM-VERSION is the # minimum version of libcurl to accept. Pass the version as a regular # version number like 7.10.1. If not supplied, any version is # accepted. ACTION-IF-YES is a list of shell commands to run if # libcurl was successfully found and passed the various tests. # ACTION-IF-NO is a list of shell commands that are run otherwise. # Note that using --without-libcurl does run ACTION-IF-NO. # # This macro defines HAVE_LIBCURL if a working libcurl setup is found, # and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary values. # Other useful defines are LIBCURL_FEATURE_xxx where xxx are the # various features supported by libcurl, and LIBCURL_PROTOCOL_yyy # where yyy are the various protocols supported by libcurl. Both xxx # and yyy are capitalized. See the list of AH_TEMPLATEs at the top of # the macro for the complete list of possible defines. Shell # variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also # defined to 'yes' for those features and protocols that were found. # Note that xxx and yyy keep the same capitalization as in the # curl-config list (e.g. it's "HTTP" and not "http"). # # Users may override the detected values by doing something like: # LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure # # For the sake of sanity, this macro assumes that any libcurl that is # found is after version 7.7.2, the first version that included the # curl-config script. Note that it is very important for people # packaging binary versions of libcurl to include this script! # Without curl-config, we can only make educated guesses as to what # protocols are available. Specifically, we assume that all of HTTP, # FTP, GOPHER, FILE, TELNET, LDAP, and DICT exist, and (if SSL exists) # HTTPS is present. All of these protocols existed when libcurl was # first created in version 7, so this is a safe assumption. If the # version is 7.11.0 or later, FTPS is assumed to be present as well. # FTPS existed before then, but was not yet fully standards compliant. AC_DEFUN([LIBCURL_CHECK_CONFIG], [ AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL]) AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4]) AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6]) AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz]) AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports AsynchDNS]) AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP]) AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS]) AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP]) AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS]) AH_TEMPLATE([LIBCURL_PROTOCOL_GOPHER],[Defined if libcurl supports GOPHER]) AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE]) AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET]) AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP]) AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT]) AC_ARG_WITH(libcurl, AC_HELP_STRING([--with-libcurl=DIR],[look for the curl library in DIR]), [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])]) if test "$_libcurl_with" != "no" ; then AC_PROG_AWK _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'" _libcurl_try_link=yes if test -d "$_libcurl_with" ; then CPPFLAGS="${CPPFLAGS} -I$withval/include" LDFLAGS="${LDFLAGS} -L$withval/lib" fi AC_PATH_PROG([_libcurl_config],[curl-config]) if test x$_libcurl_config != "x" ; then AC_CACHE_CHECK([for the version of libcurl], [libcurl_cv_lib_curl_version], [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK '{print $[]2}'`]) _libcurl_version=`echo $libcurl_cv_lib_curl_version | $_libcurl_version_parse` _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | $_libcurl_version_parse` if test $_libcurl_wanted -gt 0 ; then AC_CACHE_CHECK([for libcurl >= version $2], [libcurl_cv_lib_version_ok], [ if test $_libcurl_version -ge $_libcurl_wanted ; then libcurl_cv_lib_version_ok=yes else libcurl_cv_lib_version_ok=no fi ]) fi if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = xyes ; then if test x"$LIBCURL_CPPFLAGS" = "x" ; then LIBCURL_CPPFLAGS=`$_libcurl_config --cflags` fi if test x"$LIBCURL" = "x" ; then LIBCURL=`$_libcurl_config --libs` fi # All curl-config scripts support --feature _libcurl_features=`$_libcurl_config --feature` # Is it modern enough to have --protocols? (7.12.4) if test $_libcurl_version -ge 461828 ; then _libcurl_protocols=`$_libcurl_config --protocols` fi else _libcurl_try_link=no fi unset _libcurl_wanted fi if test $_libcurl_try_link = yes ; then # we didn't find curl-config, so let's see if the user-supplied # link line (or failing that, "-lcurl") is enough. LIBCURL=${LIBCURL-"-lcurl"} AC_CACHE_CHECK([whether libcurl is usable], [libcurl_cv_lib_curl_usable], [ _libcurl_save_cppflags=$CPPFLAGS CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS" _libcurl_save_ldflags=$LDFLAGS LDFLAGS="$LDFLAGS $LIBCURL" AC_LINK_IFELSE(AC_LANG_PROGRAM([#include ],[ /* Try and use a few common options to force a failure if we are missing symbols or can't link. */ int x; curl_easy_setopt(NULL,CURLOPT_URL,NULL); x=CURL_ERROR_SIZE; x=CURLOPT_WRITEFUNCTION; x=CURLOPT_FILE; x=CURLOPT_ERRORBUFFER; x=CURLOPT_STDERR; x=CURLOPT_VERBOSE; ]),libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no) CPPFLAGS=$_libcurl_save_cppflags LDFLAGS=$_libcurl_save_ldflags unset _libcurl_save_cppflags unset _libcurl_save_ldflags ]) if test $libcurl_cv_lib_curl_usable = yes ; then AC_DEFINE(HAVE_LIBCURL,1, [Define to 1 if you have a functional curl library.]) AC_SUBST(LIBCURL_CPPFLAGS) AC_SUBST(LIBCURL) for _libcurl_feature in $_libcurl_features ; do AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1]) eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes done if test "x$_libcurl_protocols" = "x" ; then # We don't have --protocols, so just assume that all # protocols are available _libcurl_protocols="HTTP FTP GOPHER FILE TELNET LDAP DICT" if test x$libcurl_feature_SSL = xyes ; then _libcurl_protocols="$_libcurl_protocols HTTPS" # FTPS wasn't standards-compliant until version # 7.11.0 if test $_libcurl_version -ge 461568; then _libcurl_protocols="$_libcurl_protocols FTPS" fi fi fi for _libcurl_protocol in $_libcurl_protocols ; do AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1]) eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes done fi fi unset _libcurl_try_link unset _libcurl_version_parse unset _libcurl_config unset _libcurl_feature unset _libcurl_features unset _libcurl_protocol unset _libcurl_protocols unset _libcurl_version fi if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes ; then # This is the IF-NO path ifelse([$4],,:,[$4]) else # This is the IF-YES path ifelse([$3],,:,[$3]) fi unset _libcurl_with ])dnl criticalmass-1.0.0.orig/curl/docs/libcurl/curl_multi_remove_handle.pdf0000644000175000017500000003602710265631023025500 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xUn6}W Ї1$JB)rJ")Ljd)d)Ѣe/P ^9sf 0f[4nW`zd[%MJr+ Ba(dٮ.͟j&?H2Gx'Y:^-c£8C1_4yYM.AZ*O̼}k|;cS ,Lձ6t$2A"Ql{ťJFZ&&mn2P±Npz4{ 4/E+; Cڛ&fNG=8E; Jen_{'^.Zr:Oa[}[`8b4u)U}til" T]t%N{:g4\}6vZ5ry9\&Ca`޳~~ L8Lsv> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeT{PW>b§kFK[뻊ŮZ/$!% 1 !!!oIHB ACQ,TD٪;>nwv;ޏ~tggsgνs{ι8H.f{U| 9qV6 ތb`&{f'3fphlX 1kRKZXT:uxڵw1))[dA-ȥC^*DH grA1/M,%jުռMߧ٦ 4T*e$~^@T*+x-BJWZan,;aal,KR lI`alaᘧdĜ9#tb~ VQJORujYp (9< ʁRJNR*gџ3M(-//U4kwRB DUK5d P ܾ]0IvE9fpk^Ϡ9;;4Y⁉=/Ǿ".B .` pɞOC+P?M~9uG9Mj}=ai*MV h㖱Cu)xH\=.Jl}0GqI'cW;`ZN-1Fb.Цz`wP|rMf:a0 cFCIh\ӧv;Vr6,{rgtۤ`H .#n!;Q|8}xB#p6@2^0wDʧrh9^|2 "[Z{X XI5jz&nC0+Ҁ6j;Z0jD/c1_l>[;µTݟi2m]atZHVev(T5]|ZԌ0B+6Tb0[a TC0x6_B4"yz ڴRo.…/ȲNPs֦W\!|v5+AQ4/mR..HoC]tWAxd;͘ClqV{!pU*o#pzĚ2^-?bZ@ѣjgً NA񁞣kmMD'UIN{zgnjR؏ CV?L ߘ>>|- fek"th#׵ ]8yfgQ1.؍C$e[q|\{{B6x1z''g|[4rkX܌R٢_!qнqC0-A{z);%7%{0; OY-R;>` endstream endobj 19 0 obj 1943 endobj 20 0 obj <>stream xeV PSW(*ٌP5I;-Z_Q(>*// Q NE TV;Ql;mmkݺvdg\Ywwf3w_LH$?l H #4E:m}0G"̝"sD"63Y,d$űI1h2~oE.XYfel'tMbҗ^d:}:-5&j┉}RR_ۥҪS[5Z^RmZ|eeJ&563]KU)uk u&30 3/pcZ\ОMzu- MxfohURflf3k%̋Nf+yY2r f;ŬdȬbU&09ŐD2ISҧr qheSf{.MAQ}7-bZRMx.:wZ]iod{5&L$,SQ!$/ǦBOç̲SJd $ * OgK늰 sVGt(sp 5V܏cuZ RS:F|A5ͮքDBB f KA"KP,hE}˩c6k٢)=яN+/'s?O^$`wO\VxNzV%nε?d. 7"|s-$szF Gdu'{f‘ȥpp] }sk,VMf͈\i=v et, JIkL+L.q`_Xłk0fQɇ;R^\Al8:I!ĐXO|!-)NGFQ{K)voaHC!ǖ+lカr;MBJB3vjGdX؎ј#&3uai Ƃ+%/̒xvATkP-* ݣb|Ž,\Ma +%EL\ lʸH?F>ō|3rCC: - xGq~HE"h IJKTS،7YLR*'yxgxHC)w#PaXm{ # RS҃%%TiUzz=Z>a)ߪqֽw/ܛ(ZP^:_:D%u7S 2Lrv㑳ƄI4vQO'l꨾~1QzC\$*h,1%'guQ$4;SR[,k |4Xm Յ]m. LfJʜ$.8%o9݄2At̞D ~[K\9Xo>>0p7KM>[ж瓮fP@'$D XپJ[N@ctTN&H^+U A^<)PQSRɊ*++S-)"K Ù.GosYSMQ\_ieܩp#qovzWLj&s.m}OްxnD"/tRN ^>{6v%Νb{ZSp^ean / 8Rш>0p7@֕P F+Ǖ榱c'脶!5ɸI=Dz§eԠRboSTfk9ւikFȓ)-lJ5j:Mֈ-OBOBUBZLFۓ]:cG>stream xXyTS׾>1&h456vu WkUPkŁIT s$$$!a@B<ʤ"8Vks[Nik}zYS~_i~s#~,HIq +4I~ fy^~i/5:% _Ie)IoE}{%}ge``|R$o/rQT&I)seYq =q4-))2TVVXZ3G,ʔ.O$HRs$ Ģ8q\ȻA8%;3)ޙ"nNi()'=.nHiBL!OTljz{ek, \Z+֭\p;oR"Eˈfu"Bl%‰bI|D!V{=bD$b&1`bG&|?b1@%^&!"1XcF˴yL{ gޚjzx=09D͠ԅ̱Ѭ+gg~smNusnAs]7gUEoYgs}hAWsdMiժ䄈@}ޤ i1 >y`ܨWI695`35BJIpˇ.FgI{h]k+*5P"TS>wن)אEuJdR%nMj>PgĚ\oQT*@e+Yݙǯ_?'%nwpO0kWV*u LWDaW}Z'hkvu^|~ ܓ 8A?cNGNE _MM w98B1$ʘ*Gyt9 E+_:&jj ^(Lx]\_jRBVLjmvzU;;XC\ҊH<~Bߧ8P+N\Z^A[7$$6 gnd^ghvF#`\ --ŀJ*pU~GVYA%Bue^E/yN00zDhrz "9uݳL.ל<0(RIgYrI6ѵQA Hyh@է.gY+_R?78L n{ g7t(oT0{g¸Z+U/@}5K:@5b[w#;!̈-H*]K}&]~RNh9 ^>/?1N0m\UV X!2 hܞ]V)CvY AarU#oHdG ɵ''I[NHZ Lߔ| 7kkAt*'8%J.dm Z&4UU S%ZPyu1A{e~{>s@W]7WhF\+oOyf =mUR3p8Kuuz(ltS81>4_zI$ ;'lcBK#]*q>H%v}Go+9u,)/tM@_Pʜw&Fx1WQi})F@bhҎSylNZ$mj5%M&~/'DZu hjLY$c|1wY rt j%iE`^j#Jcȿǝ]p,4ge< ,,8$J#f!OwV}5^_ngϠ2s'".9⡕wY>F?;& h]3:;v6co2f'fL nQ0P fOЏ{ʣpCKqIJd .̂70obK&`2C1yE: AqY:αttjL@g9n&bta^{x 2gu CFM nizR`nHr,;[*mnhjhn\}ij|?[&1n!4|JrU*j=P> N/TBڑB0|Ԑ'k,亓mk Ȋ>sAtmϘ6IpIN-gn2B_Pt9AcnF5Mp=k ۄֳ͐ӁoXedxHUFK@_/ҿyo*SMq :a5cOM#Y(d6 +_y7N3{0¬4bc$[\e%T.W׀^> !?e.*/./6+f( S@;֜;=?:QwUԔctC`h@AևGE|IAh_\Lm3L\+;.j%yTR (bo Y6m/Hpxh+CD !NAAp*o`/#FڔD50[5pA6j>UEպHҦ@1`M|੮8w1c="-X癜fu׫fO Mz)!bh,5 8@s\N%9^j7YGuzw4N%yЕۿFNظX ߝZr5vȀ3v1h3 3|1wşh۝{ҖܾC`!xM ) '>p&nr>v-(73r}𑈍Her)(VWv5j xvxZs Q,Hkʶh3EYw&n {]pK95{" xυ&7Hn\nhS"QZSXN8Fڊ ܶT~Kz]~=<5V#&LUgXxݶZ&u\J̜|cvG]Q 'VPVjI2JK<>Es~e3tp@2mcm]'X*m*k>8V|Ǥ&7p[ܴw#6@~ݶwbe]z'O^%"cFQ .ƬCGGcA8%NpSUabZ?O].z5u # `_="ZQ ; sآs)"A#h*?[d%ަg0wYj;A;pkS2W^{\uǣ$Mk-Cߺ͠#1Pha]Ѝzyb6z '_ea F^.ScɃSҚ}V[YU`+ # M(kAhk7CvF#RNww8W\P0p9Uo!qxx1ђ ^\(2 ҬDm>_i58:h> gfKZ2;Z[:2Z^> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001312 00000 n 0000014664 00000 n 0000001244 00000 n 0000001666 00000 n 0000001518 00000 n 0000001360 00000 n 0000001084 00000 n 0000000015 00000 n 0000001065 00000 n 0000014228 00000 n 0000013021 00000 n 0000013941 00000 n 0000012561 00000 n 0000013664 00000 n 0000012119 00000 n 0000001434 00000 n 0000001464 00000 n 0000001813 00000 n 0000003842 00000 n 0000003863 00000 n 0000006861 00000 n 0000006882 00000 n 0000012098 00000 n 0000013565 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 14804 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_duphandle.30000644000175000017500000000251610265631023024030 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_easy_duphandle.3,v 1.4 2004/04/13 09:08:52 bagder Exp $ .\" .TH curl_easy_duphandle 3 "18 September 2001" "libcurl 7.9" "libcurl Manual" .SH NAME curl_easy_duphandle - Clone a libcurl session handle .SH SYNOPSIS .B #include .BI "CURL *curl_easy_duphandle(CURL *"handle ");" .SH DESCRIPTION This function will return a new curl handle, a duplicate, using all the options previously set in the input curl \fIhandle\fP. Both handles can subsequently be used independently and they must both be freed with \fIcurl_easy_cleanup(3)\fP. All strings that the input handle has been told to point to (as opposed to copy) with previous calls to \fIcurl_easy_setopt(3)\fP using char * inputs, will be pointed to by the new handle as well. You must therefore make sure to keep the data around until both handles have been cleaned up. The new handle will \fBnot\fP inherit any state information, no connections, no SSL sessions and no cookies. \fBNote\fP that even in multi-threaded programs, this function must be called in a synchronous way, the input handle may not be in use when cloned. .SH RETURN VALUE If this function returns NULL, something went wrong and no valid handle was returned. .SH "SEE ALSO" .BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_global_init "(3) criticalmass-1.0.0.orig/curl/docs/libcurl/curl_version_info.pdf0000644000175000017500000005564510265631023024165 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xX[o~ׯlLxޒnR8VwH "GT8ڶ ?̅dI>b9?F9awOۈl_s|\Nbi@,w3/a0C*`qҀaΓ*{/x?'U=/R:",: 9xՂQ9}4 ą_,H}W3\C~b}_L <[p0cS+ȂZ])2YKpvFm#hC~{Ww֜hK?u^$ dy3[^v2'΁|5Eer?G~"J g.ViLݏ~^z挞)֒}S֝lIJ>Q]9VsyVM#YcHeO] OLSkC)1NJy:ԶB Y0zGJ%;J-)YRu_VVݑzЖ%ٴَ%n;@oʎG FLB$MWJ e"q0p(d RCNC9dcDs >&\R6{`rm;eua[Vҽ!8$r jRk4@Fc-[Yw&4=+{歆קq4th0p l8ڷkT&ISMڬ=j^Cܐ$;F؃$xUW:" )ddK?'{)o<_1φC0^U(T4B(C_lzQP .u]Nɬ,&y[wH֍qۃL4[ud:ەO77<Ap]Vot*)^ǚd'b@ғk5[5G}dU b4EMk\' `*j_+m6m1t1HAܟk@U\B뚼ذX1{ f+gz~ǀAN(z FGI@}3DjĈ/ ,j߀h)Tpw>~g;2yaq9i₟¤SVPޡ%C*6j*l-^j7e4,0i@ƞ h0튡e:9'v0L';=c'i]'Y' {r\r`lGm& k4,k53n ߖu96r ljm?zqCFMcO5" I衫4aDs ф<6Pj뎞,L`m: *]`]A`,]\M:kt~tkLXFnQd#2܅A؅jS ޤ9mr!Y|@g^_VZ6ƁW7 :~\> stream xWr6}WT&BH('VUN:-b )ߒg<&g_I-boz_{_%5 9z斅O:k?ih3Ȯѿ=RDeԶH]IQ"J4ed50 3<#?=;p*[ m|1>^g=<&bv+$ٽ xkd4;qpTP{sSw}˄BYuL[1AxftC=W`SJ4U"iN|jM->y4LVJt_v1&g/`R G.9 @M9F4-2hHpq0Mk܊*#F'7FMSD&;8b%3Of٥՚`0ٷPkiԲA2[ߒouU( )iIw<{ ")+r# 6&!55iKsfkӇŨt"n諼4&^0^@y<N@ASP:H=Ipl'T-$J~,|%r6T|+e)8 @m9EV> &ᓭB\fcA4oa{E^7zE9gڧԬRi^AIHRA ,R~!/xA. X6AQ**'cRlҁd QTAaL)qYqT<=ކJЕ.Qt1}\C3 ToaK곆S-8=sՊWVC?< =\Fd8Y(GG$`u%}p LUCk F?ϳKendstream endobj 20 0 obj 1656 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R ] /Count 2 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 22 0 obj <>stream xeVyTT8h:oZ5Kb6Ƹ5@500 ʛ}}3wfeA!06. h⒚M4=>LGzzG={1gf! CImyX*,][!sy\ _EI-r=y;9K~a2ErmX/MO=+vƍlw;b"T(SloOKw"V_ sgHDD,K_fڕnX,I2TH)@$A+)+ JD R%H_\A2 Ȼ.$ ٍ#{A$ نC#ȏg.m?$Xư12+q֟Il{.U?'Go퟽zxvs<6%)o3Q{f\ J0"%='gAN+V*jv`B*PeYAv ·`DqB-pm/i*pR2E zS ' ԫj&7dN~p K 6v1=Bfg9bY `v;o^#o}o~E_AM7o\<;lj`wݎw YCp]y+_]hܤ5 ,1"j\s_h+zH,hK0w9iɹ nrc4@#VpZ0e4?6~нZFԚҾc g .fQW喚p_ '@aH6,9ihٞ>R Z0a>b%P/sLN MB%/h{be6O32C ZM}s4эkcoS6*@k^궂%{’,|4Mhq% 1GɥF^Z> _R&33(e; PlQdspS _9nuy f Jkh] 얽$H>"9"ud6_>?Lb&28ۓ%8Pj^ϥ7ZeǓ>_|ZD6R6]zͩ3Gj/'.4V+$D oйʉw;A-$߸&߱?_&\5X|~xsИVµ q엟=û? V3BXmpmQ6"r *75##WyTē檏IY4@ "R;085Q Ce!GmuXBcقd'7Gήh2+k@46^Bjw9@?wj= )n j( z-HOٲk'5pmWRr!}o}|cF)%J1@֡>F34185y|vq5PM_*A3J?wPK,ri˘p-hW,c/*BkXQYVթ6`jP΋/v$kWa,?;}6i3y?$ YSLRH_FPjE'oݳc7U<8LsS 69(iW(nBoWR $WOOi  Nı4*ǐa#o&*A;<; s =tRbف CT& "+-]__{q\=T5#{Mf^:q6@f5tf @iV"z |Ao{m»X&r Gh<\o%p3OKͫQOTZ!-W576)4rQ+: n3K hܣ&9oal]x1V*چ۶EơB-KkƱ{S "[ ǟ1ZV<hQQ%y2>TN>f|&_3cN'D4(^]XE-)hl1|,n*u0ἰofpl70__4L @SJhif}7ńbPijv+*<~.''dЖlaԆn;a?m"L.3ppE΋m>byF4̅8:aJ%i!Uxr/a LGXR *=jS>/>oPʪ}M&xfxsP S)dW ^:'X>:<1NfL8D2 :5trs[ܞFmӕ2 $R&#cV4n52*u\)9lәkDSl$̆Cmևp}{WFOlB 5 7ϏmhepZ,*95̕VCg&FxY|<>DŽ| @ ,Ѯt\6eK^ys+p9õf y07vaȾʅT3Rp`!~r'RyQlMvvܩDQ8E\v2ZoT]`zMl\GMM` bjalTJ3#g)q8^x2]D{;O|l'/]e0,KN1 f3+ *җ*r PTHd1<>/QjO/-ώ燺G>isbR{4݇ѷƫi!nqC$z}h'{MImjkCbuVDҳ;X8ss ȿ $\ endstream endobj 23 0 obj 3081 endobj 24 0 obj <>stream xVy\S׶>sQ,Ur&ioEC:S 0&@fIb@(VZkjVgpI7o؇۾wəgセ-5y%~7*E)T[HhE|$=~חa 84S>"ڵ^ԩC>oeU17(Ty0yP5eWhZ+OPgj8eپh2YIVi yy-ZC֤DwhVɷɷ+T)]w`z auGT{:z߼ քPKsNj 6RP M"jZLS{ԛ-j G-^©v*ZAM|)45ZGMg(5O&M ZQ&m4|ɓ/hgol)9u|wZNKTSf zZ~ޅȭRnaL.NZmP'&\Ʀ!fX6ώI?ڟg-`uDߥd.X}{7:e;T44֍(rJ:$# 5պ twucJg%ZXJQ\%=z f[(w_HA|4aK]>fYEDz(r1U&gʚvWc;bZ{dAy٪2b*i*.کЄK|"7< 0݇_".>:-7K>0feU貃ǎ#t7-Asc!0{=w.~݀^-4 }p ړkZgauY]߀nݲnWwT1b\oP8;aNڏ{b| %! }f'|OK{J+ÆccWdx`+qgUWj3& 'u`V&L]XzVf}CEY<Ñ s:b p/yzfxwzWrXTdM`=OuKPf=%u/:PVUˠPyUm~= 1[zɪNOᙒNԒsn7;HhwN `p3k2[_3~)qF%; ŗ2wv7dk vl/ áM]?2gP٤(&l,75k,\0 c SR/-)1|Vݡw/ZF>R+MOĠeH@l>x )ފc c%ˁ}CT҇菋Fv|#G XI嗚 ͼV_Pn|dFHLm3)ӎH$&N/LvBO0 _7JZ(u9BW d (hz|++mdj{{%gҲTGYJ`%`ޱ,6b^V;1[bo\|SR]A5A[z_  |K|u X fII25v#7.*11:“4<RE eNXct@y ))%0dSsEz-1~8Z9\mݲvM#:>js=Yu:;E 6hVe+𿫸 Ͻ` rz࣑D{c@k?D~zI:>',u)Lf2𺙥z ˻xdLт}nh+V;+Nd01dN,?Uf4$c9w*cn;sH'P/m =2d[2-AU"[}ՖՖ.\gڭs10 a)/o4x+r%pw" Cl¾s".C0hXo1[H`7yϑfFwmC#oX./]|#n=gg2dRYv+owC0@ 5L7|U.?j-&ŋ.f˵b?ݿ.ƥ;5m.j2eV]27!^JJPEq63 ҆mhN8"ULzĦdt^:}_Ryw 6tb%l)+ Kd)iD@nk(BMe2_ųнt`t]in $Q߉_x?:zŭyY s1ޭsFyAKs5; VKC俅Δ|=8+]QgoCKn*Ti*2]^QlЦIIOdU7I sYtU3zsM5R즱ٙ{`&kaѥTc-Tu)8(7XWtkA,UFk)5 ؊Gjsj-Nv9ۺ<*e9 -E3`PE:@ʓYv݆YE|`KnSpt&%{*yt=-_0|*G3FE•]L2R-?CRX `{}Ctsv灤iu-RITA}{aZZl,8Up=Tb2sg&13jbX 1q|_6r^=NN1\n'i2b/T`_9g~v1O:2FR>B i];]p48h;hTz<Ӧ}Sy endstream endobj 25 0 obj 3862 endobj 26 0 obj <>stream xy XS1{4&NZZP['pL aa@F0-!$32$l\ӹgX8k=Zk{}1}pvm_K⥒2idf>Y0Y݌9ë_% oY2->6.c񞀽o.Y#J+>d7,I,E*IXNJ?LKDÂ#$[SRdYX|ʵ241JhRIl42ZN#HSzZѻQS%f&E vnT&ڹI%" 9-vKz\֌m A۳ȓ"w(Q{W<ּ]e￳vy+\YbXJB b*Fwb XNNl%Vo6bDl'%{UěD0XME%|}Nbx!vބ'''/!%L".N&6K~b!1'DA12AALxsdoZW NmG$AFT5Axn?¦p撙Y g&f=ߋ߿,síeoߚ˛ey.L&M!!tw_}|k_3 Bd,8Ƃ 7-L_xsSQhZf1G\s~܆*&CRzzI[-fSUJPgvhfzҏr5MûpoD pu``OrEOv7taB uQarGkxI,LQZhC Bf1(y902&BsIjC,5W9@:mCŴEi} P`1:!ձ@- _T3)6X6U ryzBgkgp󶣳dq?l qW{Q[աbTDf_qNj_uXCeGZU{S *( ԏ7'vl=Lšx}P6^pq?2ͱ^3H~=}]\Y&UaskBc!} rWwZ\-Y \]fjǹ1!i?I].jUSЌqC B()PEC6ѓoQ5ӌ\ԺU#fQd85F[/쇕 Cj[w[|5[Y\Zg>* #ܩ=Yw 6iKJGէzڭpwN_ymyoOHnv\Ho9dEHTF:TS)qޫ;E$08b3=8,1*FHDMJydNe@C\oL ʬl} B s._Dho9p"8b?vi ZxniNg;"vӌ{+ qS.:ͫ бƊ11[3P RPrC-$)S^ N;Wwx9Ӂɤ34C2=>!oރ3S<8GH OA:0rU%@a\3UoU%*0Pԉ*ͯp MXe0,Vk*Sp1̺usé!^S_o`WÂynFg)prT٫JJ:՗_̩Ӕǂ43 Z @?=rS'P.0,1(5Ìg=`vNQr`/4ge -ꐲ x& ڼS i`YS?^ <ȕieFRO uFK?Ngu&:ehĤ5Z̺<|2M],@9 œq(ثi妆"mFTwBat:|q7oF?{A*!|k|ȽF zE,܂ɝ0oCO~;@8ؖ|Ag*B+C[Z'~/Q)> WՐ%H #6ё+ h9VѬ1_q;Ї 4d3"4d|򜓍5eu5mǪͤ'+ }X90s:Hr?&<(-@/~5@KWAž,2}({φv,"ߛJȈ; @m\ޑpxѡцs*E/WgHșVgov%^/]Wr|+}tn-A VcSy.[RGEOOX Qk߿/_ Їtf'Xcur~EUِ&/: ɵJC ]=ͻwS#ki/ lYyq8)/ܧ 8 , $_a676G}rgp jR j]9Qv'7S`ѰL&>45i_[~!k3DϼF/_W)Y#/#Cq0 2DZM\KA!˨/S:4EJf܏ -"85ؠYA&݆᫼V2*mSTL/9]8Ƹ6Ɲ_e)/1P dڡá39\a&9t Z#W6g9]JW#5G}pf1 V-Q<_dp@ZuilaMYCeƃDZsOrRJ<~E1;>lXK,r{K7]-ͮAp i{Shݎ6yhg76؎co:؇Paƒ0 akEY?|!Y QxjyIˎ~xr[NO!o|T$++Μ pFQRњE~lnxT48ޣ--!'URpT'y4=L8?!)9Ev l,W2Miz٠1jlze<JUfbY8xj,|̟9Іh xOdrEyhr hD:Ҍ&itؐ`z)< Z)x&KZcMIճ Gي[TLq˜40 QuXnʯWغ-iާ l /(6[LcX J/{v 8_`Iqe]vmx2{YI:)yѡblЗh%88ߒ/,3X 1D 5Lv$W) Z\:V&tTcSD5Š<FYƓ+蒍Bq=3.Ο? d*` ;ZA=2WgE4V$[#iM)Ǖ^g:X(fM4B? ~ͣĩ(QVSGLvP9] ! 65՛WcS(LV .eGJ]TcAa~TJ4X'!}ULmZ^ݏ_k^q4uἔEE?kp{J=o.ΌIcW%1lQM=\dMsz5|yn?0U]jX qmS7eta/pPߌ:ycS}]CI&.(/,6%yhTJh2w+{k>%$d5,@Ɏ K0T81ř \~@)E'E&~8Uegӊ*?u)Qܟ#' Ә]+*NX8eVLWA h/4b[! ڇ6s`Tڪv>dw>npHD+T{݌+BLK5ZN TP尵a8RSZ۱GKe0% u'%Y6Ny,JS^.$ OsA_b^;,eXsyvRbP9bu8Jn mÍC5݀nIJ@>U 'PWihڇjG}6Sb)`4M2'Z,-ւBE/ߗG߲DӗO)Aj֌:qnA\tC~nq:Ÿ_+LfMWiQ <'R1kɵ<'B<:]Q~>ſ8p!I†u?D7&y;!\;Nm󑉄&3 {CN7c>1O:ڰS-̷%uCӶ`xU뙲K+sm.|ƇjPRl}#ȱ Y@$$ Ca(ܒ~v@3;bzɮ U(1ÎKZ?nx\4ϵby ; ϚL|s֞~5fAAQPfd;߬Y!BWR5 1[9CSL>89WΧ;9G/|GsgDQh zSix N֜y:Z;~ +㋖W{^g:TG? e3f|U;c&Ao;> endstream endobj 27 0 obj 7567 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 28 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 29 0000000000 65535 f 0000004427 00000 n 0000022662 00000 n 0000004352 00000 n 0000004781 00000 n 0000004633 00000 n 0000004475 00000 n 0000004048 00000 n 0000000015 00000 n 0000002279 00000 n 0000022138 00000 n 0000020763 00000 n 0000021764 00000 n 0000020275 00000 n 0000021465 00000 n 0000019813 00000 n 0000004549 00000 n 0000004579 00000 n 0000004208 00000 n 0000002299 00000 n 0000004027 00000 n 0000004928 00000 n 0000004982 00000 n 0000008149 00000 n 0000008170 00000 n 0000012118 00000 n 0000012139 00000 n 0000019792 00000 n 0000021363 00000 n trailer << /Size 29 /Root 1 0 R /Info 2 0 R >> startxref 22802 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-multi.html0000644000175000017500000001546610265631023023414 0ustar danieldaniel libcurl-multi man page

NAME

libcurl-multi - how to use the multi interface

DESCRIPTION

This is an overview on how to use the libcurl multi interface in your C programs. There are specific man pages for each function mentioned in here. There's also the libcurl-tutorial(3) man page for a complete tutorial to programming with libcurl and the libcurl-easy(3) man page for an overview of the libcurl easy interface.

All functions in the multi interface are prefixed with curl_multi.

OBJECTIVES

The multi interface introduces several new abilities that the easy interface refuses to offer. They are mainly:

1. Enable a "pull" interface. The application that uses libcurl decides where and when to ask libcurl to get/send data.

2. Enable multiple simultaneous transfers in the same thread without making it complicated for the application.

3. Enable the application to select() on its own file descriptors and curl's file descriptors simultaneous easily.

ONE MULTI HANDLE MANY EASY HANDLES

To use the multi interface, you must first create a 'multi handle' with curl_multi_init(3). This handle is then used as input to all further curl_multi_* functions.

Each single transfer is built up with an easy handle. You must create them, and setup the appropriate options for each easy handle, as outlined in the libcurl(3) man page, using curl_easy_setopt(3).

When the easy handle is setup for a transfer, then instead of using curl_easy_perform(3) (as when using the easy interface for transfers), you should instead add the easy handle to the multi handle using curl_multi_add_handle(3). The multi handle is sometimes referred to as a ´multi stack´ because of the fact that it may hold a large amount of easy handles.

Should you change your mind, the easy handle is again removed from the multi stack using curl_multi_remove_handle(3). Once removed from the multi handle, you can again use other easy interface functions like curl_easy_perform(3) on the handle or whatever you think is necessary.

Adding the easy handle to the multi handle does not start the transfer. Remember that one of the main ideas with this interface is to let your application drive. You drive the transfers by invoking curl_multi_perform(3). libcurl will then transfer data if there is anything available to transfer. It'll use the callbacks and everything else you have setup in the individual easy handles. It'll transfer data on all current transfers in the multi stack that are ready to transfer anything. It may be all, it may be none.

Your application can acquire knowledge from libcurl when it would like to get invoked to transfer data, so that you don't have to busy-loop and call that curl_multi_perform(3) like crazy. curl_multi_fdset(3) offers an interface using which you can extract fd_sets from libcurl to use in select() or poll() calls in order to get to know when the transfers in the multi stack might need attention. This also makes it very easy for your program to wait for input on your own private file descriptors at the same time or perhaps timeout every now and then, should you want that.

A little note here about the return codes from the multi functions, and especially the curl_multi_perform(3): if you receive CURLM_CALL_MULTI_PERFORM, this basically means that you should call curl_multi_perform(3) again, before you select() on more actions. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied".

curl_multi_perform(3) stores the number of still running transfers in one of its input arguments, and by reading that you can figure out when all the transfers in the multi handles are done. 'done' does not mean successful. One or more of the transfers may have failed. Tracking when this number changes, you know when one or more transfers are done.

To get information about completed transfers, to figure out success or not and similar, curl_multi_info_read(3) should be called. It can return a message about a current or previous transfer. Repeated invokes of the function get more messages until the message queue is empty. The information you receive there includes an easy handle pointer which you may use to identify which easy handle the information regards.

When all transfers in the multi stack are done, cleanup the multi handle with curl_multi_cleanup(3). Be careful and please note that you MUST invoke separate curl_easy_cleanup(3) calls on every single easy handle to clean them up properly.

If you want to re-use an easy handle that was added to the multi handle for transfer, you must first remove it from the multi stack and then re-add it again (possibly after having altered some options at your own choice).

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-easy.pdf0000644000175000017500000003327110265631023023022 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xmVێ6}WX"uLS2 .DD4&o߷o{ :rq$5uT-}ܽSZ$t%H)ݻ>)OHW\jM=0]vf%;C4^X9`"ʡD<$ rgc]ͭ(DݞGMQ= tQCW*>gC(v:@\){k|21ИR JLyKw S04CsU'7N;w4u\sߐ :.hdx֣#,](FjM$9$*0Vf L_wpy HCϪ̥ew>)뿵mx<*gL-zr՗=FcxBI9p`1djtߵdXUt2vUΘ{s%)Ք{e:o+$p.r.ۋ)z)<^gs$ $D'} (kypMKݍpHw#!A:Nldz_jE / 2-Zý-ZC,Gr&#Q`JLmLB׀fU׶ʎg~GC'E/"EaD#"F~Y[+gnj޾ #G-3G6q[{v-ƽFӿHhl,R''[oDQ0 q ͖,3endstream endobj 9 0 obj 1381 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeyTSW_ ObkJl'/mN.օI$!}%7 !@X$,AP̔ZXDe93=ӹy=g9s揹޹w@.@ se}T.*xeZ(fL|LIYчS؇}`% rQr xU:`6 R.\]23=(E4d+n(\77{ۑE/xn/ x=`В,XC]$2I'd4_jG 7IFFɄ $N;" BeXK \iʛS+-T'2ˋda!#=f[Eh"|,NwIHqƘK)w6ݥIKq)У:]L1|OT^oh urgk=wPrm:VW\_c^7L+d948 F&ORm_Dj|Q;$st9r`=wa Wv儽[<*H5E_|!}0TQinifO턷  88H\uc=7{hx"ǝ,>lMLҊ@IMy: xK|uץ i~F^։jALh ԣ&}l߀"wԬ)~Ûbz`xjJGo?BH QOLmv6589t% sVmvd&.+O^7\Xx?JDžOCUhY)c xѤ냯t;B;j@q_!|8Cw<]~|@'J@Np;;#DiB*2 [ (lE9ÿtHc:T~6uA:ZqJtY356Tԇ-E{m?O tvL yddgBb3tއۨ=\ɏO.•~}IS(zZ_CD6xrWCBufHֵՆɽax*n\<%K1t endstream endobj 19 0 obj 2420 endobj 20 0 obj <>stream xeTkPSGr*m4(b}[E"ê*ZQ1* :HFQJhH>: ۱N[fԶ禛i3gvv|9ߞ=2&(d%c]hNQY9߿"eiJ 9ǻF=5ph<'02y*h*7rr3fΚ5N$m. DEVo4h ˅Dz[e 9rSnh5~YzmZיLR!:qpsY+[R$ B1VX/j50 *5-qC[2Tf.3g3 ( fyG`lv861(2hP$P>,@i+&zV+XR$uO2έfMf"p1|>h0 Jؾ9&\jmD|l?h ŏP E/+~,ye ÛmU+k\\K1Ii~#;}zSˉ>k 3rx*E.i#H\,˻ta/p~*K$̺pJ:8ނӭLV-GqwI~F~B7s#8 [\q®Br8;f+6x-^1 nB?PPhWMi{I ݺN+V#Vn Sl=ewԙ0eoRJ@z7=%\+yMDk|Y=䱙_w'#_éu4F 7[ŏd c;v&*ma,6 S Qp ʟK iFJ ,?3lU5~*؋Y2cAoKe.T!ΈXc׊MūZ殸 Nv|k8Y{v#~ S],O.be߻ʾvkݫǒv" H^p, -r:ZH:au Fl#QlD#^!?+r WoHpx}~_]VZ e.).=`;$q v endstream endobj 21 0 obj 1532 endobj 22 0 obj <>stream xWiT׺b$*VD$*bHUIE20$Ldw]w~yg3ٲm~- KD2ItgAH-`PoMfBZu^oP梧s8գD7phjY}^#5M+m#уw{yDA`t?0á[JO!}~Cq&/ߦvo^r0G ϿoF/{rS;OP^ @2YoP_"S2EUU5z}rڋ^Hqgv@h`+@`(ir3tRH?DsױwO)xn96!)Xeuz uE*]:K/AZc+d8kzL mս 0VTAp.U:_1y7XiR]E\DNYBz( >w&PylU 6k gL10JVzr ^& пEwhOh:z3" WЇ9]gFn[G43v}Ё. i jĭ# CNټҋ$_ufHv5F3O$޹Wא4'Iv]$mۿJ֒kRWYp p 1km"o*3z+B85vH h31fpf %Q6>^USk6-ޜq4+0VUdvfU_gVç;t}S\ ̹j*L$-.z@4jra.̱%t`|o;.`JsM)קwD2Lk{•<]S~#AsZs}]CW9e-/-PVV yF3i+Iv]uvvEBz=ߟ[ xhqIi-l֜%Y`, CYl  }uJVj#g+S[h sxn[t,ua5VoHp wYPddyrW>(7JHWR 2q| T8{#~T}^DĘ>:s>z/^ut{{܇( w{Dm GNުTF.7R7IΘP!} }šp:ls{|cr])ƥ0Xg0Wc,||CР/XKKͥIkuמ5 .Th诘)ݸ_2q(Kunr@^+ʨ i7ys/*VF pYY2YSVGgsSgGVTsN16MzQ9E]Z9`ߣW*YJ:Cʊj<;@ԾQ^c%NEҕೱ[Ca/PQzav0Y/x~38p`u q7ք|'ER;tLT`>Z3x§{G'|KPW+-QY5Xm~3*pԢy͢rMFʫW*hq6ZL5N#AL.gVM`*i\ |I< n.6J%jBc_BR+ޜN8AHng/tV\NjG*C5xzs)PlH!ȡʨCIde9L *<h> Ƹ{{d{L7s> *Uae.iR4U[-~HiJmyVa~ %UH dlG$stĤC<>NGx(SwV` S]e7({&ȔwjxRFWW@ $&jA%Esx[Hrl.?rif5Q[6Nv3=XDQa1]'?qi.+l4 4[Oy [-]{,C}+g䴜0- pȕ7".kѪ^.cv ujNZ=f=a8ǺGns f@F/;S}ܞұem\ ˷ɂ%!8Mĭ]ԋ[Mn5. njJq.Vqb̢GOʒH]rE\uH 6Nif#:PQݚ[FW]ᘎׅ& ${IƵ&yAE OX;ukӐ$,:vJ\Ojыy> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001714 00000 n 0000013290 00000 n 0000001646 00000 n 0000002068 00000 n 0000001920 00000 n 0000001762 00000 n 0000001486 00000 n 0000000015 00000 n 0000001466 00000 n 0000012914 00000 n 0000011684 00000 n 0000012676 00000 n 0000011325 00000 n 0000012387 00000 n 0000010875 00000 n 0000001836 00000 n 0000001866 00000 n 0000002215 00000 n 0000004721 00000 n 0000004742 00000 n 0000006360 00000 n 0000006381 00000 n 0000010854 00000 n 0000012278 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 13430 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_cleanup.html0000644000175000017500000000321210265631023024606 0ustar danieldaniel curl_global_cleanup man page

NAME

curl_global_cleanup - global libcurl cleanup

SYNOPSIS

#include <curl/curl.h>

void curl_global_cleanup(void);

DESCRIPTION

curl_global_cleanup must be called once (no matter how many threads or libcurl sessions that'll be used) by every application that uses libcurl, after all uses of libcurl is complete.

This is the opposite of curl_global_init(3).

Not calling this function may result in memory leaks.

SEE ALSO

curl_global_init (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_getdate.30000644000175000017500000000735410265631023022465 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_getdate.3,v 1.8 2005/03/08 16:31:56 bagder Exp $ .\" .TH curl_getdate 3 "5 March 2001" "libcurl 7.0" "libcurl Manual" .SH NAME curl_getdate - Convert an date string to number of seconds since January 1, 1970 .SH SYNOPSIS .B #include .sp .BI "time_t curl_getdate(char *" datestring ", time_t *"now " );" .ad .SH DESCRIPTION This function returns the number of seconds since January 1st 1970 in the UTC time zone, for the date and time that the \fIdatestring\fP parameter specifies. The \fInow\fP parameter is not used, pass a NULL there. \fBNOTE:\fP This function was rewritten for the 7.12.2 release and this documentation covers the functionality of the new one. The new one is not feature-complete with the old one, but most of the formats supported by the new one was supported by the old too. .SH PARSING DATES AND TIMES A "date" is a string containing several items separated by whitespace. The order of the items is immaterial. A date string may contain many flavors of items: .TP 0.8i .B calendar date items Can be specified several ways. Month names can only be three-letter abbrivations, numbers can be zero-prefixed and the year may use 2 or 4 digits. Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6. .TP .B time of the day items This string specifies the time on a given day. You must specify it with 6 digits with two colons: HH:MM:SS. To not include the time in a date string, will make the function assume 00:00:00. Example: 18:19:21. .TP .B time zone items Specifies international time zone. There are a few acronyms supported, but in general you should instead use the specific relative time compared to UTC. Supported formats include: -1200, MST, +0100. .TP .B day of the week items Specifies a day of the week. Days of the week may be spelled out in full (using english): `Sunday', `Monday', etc or they may be abbreviated to their first three letters. This is usually not info that adds anything. .TP .B pure numbers If a decimal number of the form YYYYMMDD appears, then YYYY is read as the year, MM as the month number and DD as the day of the month, for the specified calendar date. .PP .SH EXAMPLES .nf Sun, 06 Nov 1994 08:49:37 GMT Sunday, 06-Nov-94 08:49:37 GMT Sun Nov 6 08:49:37 1994 06 Nov 1994 08:49:37 GMT 06-Nov-94 08:49:37 GMT Nov 6 08:49:37 1994 06 Nov 1994 08:49:37 06-Nov-94 08:49:37 1994 Nov 6 08:49:37 GMT 08:49:37 06-Nov-94 Sunday 94 6 Nov 08:49:37 1994 Nov 6 06-Nov-94 Sun Nov 6 94 1994.Nov.6 Sun/Nov/6/94/GMT Sun, 06 Nov 1994 08:49:37 CET 06 Nov 1994 08:49:37 EST Sun, 12 Sep 2004 15:05:58 -0700 Sat, 11 Sep 2004 21:32:11 +0200 20040912 15:05:58 -0700 20040911 +0200 .fi .SH STANDARDS This parser was written to handle date formats specified in RFC 822 (including the update in RFC 1123) using time zone name or time zone delta and RFC 850 (obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the only ones RFC2616 says HTTP applications may use. .SH RETURN VALUE This function returns -1 when it fails to parse the date string. Otherwise it returns the number of seconds as described. If the year is larger than 2037 on systems with 32 bit time_t, this function will return 0x7fffffff (since that is the largest possible signed 32 bit number). Having a 64 bit time_t is not a guarantee that dates beyond 03:14:07 UTC, January 19, 2038 will work fine. On systems with a 64 bit time_t but with a crippled mktime(), \fIcurl_getdate\fP will return -1 in this case. .SH REWRITE The former version of this function was built with yacc and was not only very large, it was also never quite understood and it wasn't possible to build with non-GNU tools since only Bison could make it thread-safe! The rewrite was done for 7.12.2. The new one is much smaller and use simpler code. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_init.html0000644000175000017500000000361710265631023023634 0ustar danieldaniel curl_easy_init man page

NAME

curl_easy_init - Start a libcurl easy session

SYNOPSIS

#include <curl/curl.h>

CURL *curl_easy_init( );

DESCRIPTION

This function must be the first function to call, and it returns a CURL easy handle that you must use as input to other easy-functions. curl_easy_init initializes curl and this call MUST have a corresponding call to curl_easy_cleanup(3) when the operation is complete.

RETURN VALUE

If this function returns NULL, something went wrong and you cannot use the other curl functions.

SEE ALSO

curl_easy_cleanup (3) curl_global_init (3) curl_easy_reset (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_init.html0000644000175000017500000000414610265631023023773 0ustar danieldaniel curl_share_init man page

NAME

curl_share_init - Create a shared object

SYNOPSIS

#include <curl/curl.h>

CURLSH *curl_share_init( );

DESCRIPTION

This function returns a CURLSH handle to be used as input to all the other share-functions, sometimes referred to as a share handle on some places in the documentation. This init call MUST have a corresponding call to curl_share_cleanup when all operations using the share are complete.

This share handle is what you pass to curl using the CURLOPT_SHARE option with curl_easy_setopt(3), to make that specific curl handle use the data in this share.

RETURN VALUE

If this function returns NULL, something went wrong (out of memory, etc.) and therefore the share object was not created.

SEE ALSO

curl_share_cleanup (3) curl_share_setopt (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl.html0000644000175000017500000001705210265631023022255 0ustar danieldaniel libcurl man page

NAME

libcurl - client-side URL transfers

DESCRIPTION

This is an short overview on how to use libcurl in your C programs. There are specific man pages for each function mentioned in here. There are also the libcurl-easy(3) man page, the libcurl-multi(3) man page, the libcurl-share(3) man page and the libcurl-tutorial(3) man page for in-depth understanding on how to program with libcurl.

There are more than a twenty custom bindings available that bring libcurl access to your favourite language. Look elsewhere for documentation on those.

All applications that use libcurl should call curl_global_init(3) exactly once before any libcurl function can be used. After all usage of libcurl is complete, it must call curl_global_cleanup(3). In between those two calls, you can use libcurl as described below.

To transfer files, you always set up an "easy handle" using curl_easy_init(3), but when you want the file(s) transferred you have the option of using the "easy" interface, or the "multi" interface.

The easy interface is a synchronous interface with which you call curl_easy_perform(3) and let it perform the transfer. When it is completed, the function return and you can continue. More details are found in the libcurl-easy(3) man page.

The multi interface on the other hand is an asynchronous interface, that you call and that performs only a little piece of the transfer on each invoke. It is perfect if you want to do things while the transfer is in progress, or similar. The multi interface allows you to select() on libcurl action, and even to easily download multiple files simultaneously using a single thread. See further deails in the libcurl-multi(3) man page.

You can have multiple easy handles share certain data, even if they are used in different threads. This magic is setup using the share interface, as described in the libcurl-share(3) man page.

There is also a series of other helpful functions to use, including these:

curl_version_info()

gets detailed libcurl (and other used libraries) version info

curl_getdate()

converts a date string to time_t

curl_easy_getinfo()

get information about a performed transfer

curl_formadd()

helps building an HTTP form POST

curl_formfree()

free a list built with curl_formadd(3)

curl_slist_append()

builds a linked list

curl_slist_free_all()

frees a whole curl_slist

LINKING WITH LIBCURL

On unix-like machines, there's a tool named curl-config that gets installed with the rest of the curl stuff when 'make install' is performed.

curl-config is added to make it easier for applications to link with libcurl and developers to learn about libcurl and how to use it.

Run 'curl-config --libs' to get the (additional) linker options you need to link with the particular version of libcurl you've installed. See the curl-config(1) man page for further details.

Unix-like operating system that ship libcurl as part of their distributions often don't provide the curl-config tool, but simply install the library and headers in the common path for this purpose.

LIBCURL SYMBOL NAMES

All public functions in the libcurl interface are prefixed with 'curl_' (with a lowercase c). You can find other functions in the library source code, but other prefixes indicate that the functions are private and may change without further notice in the next release.

Only use documented functions and functionality!

PORTABILITY

libcurl works exactly the same, on any of the platforms it compiles and builds on.

THREADS

Never ever call curl-functions simultaneously using the same handle from several threads. libcurl is thread-safe and can be used in any number of threads, but you must use separate curl handles if you want to use libcurl in more than one thread simultaneously.

PERSISTENT CONNECTIONS

Persistent connections means that libcurl can re-use the same connection for several transfers, if the conditions are right.

libcurl will always attempt to use persistent connections. Whenever you use curl_easy_perform(3) or curl_multi_perform(3), libcurl will attempt to use an existing connection to do the transfer, and if none exists it'll open a new one that will be subject for re-use on a possible following call to curl_easy_perform(3) or curl_multi_perform(3).

To allow libcurl to take full advantage of persistent connections, you should do as many of your file transfers as possible using the same curl handle. When you call curl_easy_cleanup(3), all the possibly open connections held by libcurl will be closed and forgotten.

Note that the options set with curl_easy_setopt(3) will be used in on every repeated curl_easy_perform(3) call.

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_share_cleanup.html0000644000175000017500000000352410265631023024456 0ustar danieldaniel curl_share_cleanup man page

NAME

curl_share_cleanup - Clean up a shared object

SYNOPSIS

#include <curl/curl.h>

CURLSHcode curl_share_cleanup(CURLSH * share_handle );

DESCRIPTION

This function deletes a shared object. The share handle cannot be used anymore when this function has been called.

RETURN VALUE

CURLSHE_OK (zero) means that the option was set properly, non-zero means an error occurred as <curl/curl.h> defines. See the libcurl-errors.3 man page for the full list with descriptions. If an error occurs, then the share object will not be deleted.

SEE ALSO

curl_share_init (3) curl_share_setopt (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_free.pdf0000644000175000017500000003247010265631023022375 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xS[k0~8l &]=f V[N|i鿟dI!|גּC:WVT]+2)"G$z)m!ֶv,6ԏQG=/u3jQeSx(f yka}Mb14컹H1u.4"+yQA%yn;6BH7/U2^#=WsIMcOEߨac)dVz~G(}?Փ`hdC"[ٞ7nP!1cECivE} a_}X->kU &9.qloejT vPoTSJ~R)ǾN#l岮xY0̸T۾𺂼:!ooE#d: 9;Q )]ݳR á,2T!g8LD8avfv:xKf0_7v(0<$adi~coݚ=o7K?4'endstream endobj 9 0 obj 563 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeT}Pg5&l=J%ڲ;CUUl{@9?@V!@) MBI _"! hj8Q8i[7awsmg?ygek2T˵o쯒Iۗ4e_^ƾ"Hd,|0rĆ(8ՈE)CRQVEl>9.n$;"5D\TD,UE*[B2hʴD^vDiJRR6۷xgj-]ġ"Ȗ+UJ?I dF^6܄ H*rIC>@r\$#+$%d_ d9r+G.ZX.3BT% /Gvqx-/HtReR -X$3~tWMOL1_BZt oQR*vqϢMOgg>y `Mp B96կSCW{fYFXA/,'INVI1e+y ;`s VnvفLgBÙb[s~ d0ʮ&I- ^)? ;./Q] Xb$.Q3w&tn#$/#Zi;CcseuӴUjUʀ f᡾ĘSVGs -\>#nlw ėX& `35 ^Q6:X^9ꬭ ŗ {3E\^wiۜVe)j!ծLѩ75 saD IPi@; &C]KU?u2zgә&_?{| h?,gy(:dh+?W=pJ?~'5vM|$`K2pmj 0)4L$z[Cv]"B 墹mA.Ew0>W׼G#F{}7%]]ZP~ϭH۫(kIU/?>z{bp \Ij\{}_siv8r3bb 8{' ebK{a$%?yX|1a{W2f&fFJse:EBc"Ywo=&n(@aSU'*THjXL+{&zG O `1_]/*szWZF-\Dpc N|>kDskyeJd=`w[RWZ{a@5 !x"$^+US endstream endobj 19 0 obj 1758 endobj 20 0 obj <>stream xV{XSg?sQ*y$RﭨVx B!A.I @C $ABquqNm]8˼'1ϳq<&9'|wɓ(Hguz&m"a\9Foĝ,g@+`ND>ϠN8"ծߑūV<#ߨ4ӵrJwjF*O34ed2KYQ\yԆ-Z9N1w鲓X*vy2M'(65F?vrFU&C.=jR ]&ޢ^vPTzZHAmQoRSj7J-R˨_RT JR"j2NSs(5$xhZI' @W c1`W,R8etSߟaATP@PxPIP}iɦVkSސaL&NKgF4Y)ykkn=ji60)?fF2YF~1gͮɀ+P{?LF3TGcĨr`qDoDbUiD]ֳCE7VGEcd /$z|NO8'+/s >ûކY|A% ŬJ=ҊXp1ԉ6n.c(_]NZÒq83{!R>*4܍=x%^`g"`[2y5>!`@"BVNFQYL,#sގ,$]v*'7qgQ?^9.qvRd:kA^G  _Q"{^K ;+97wJ 3 )8DŽ (8^YVPX5u 2԰ ?ő ZozA5`;vkg{c_u5 a02S2 G \Nh*(JL^fM}^F28'zs,ޞ6C̛/B.æ{7a>e<`Z2Ku_;Rx`!6LyapZgfZK(3VVrwl| pNHl*;cI"އWG .&/ !%{,Tӥ_\wdrtr2Auj ݉}lAnC}~MVpN%>EB*F J$<ax&nidIr  XL0?!a94r(`yLhHG Rf| 0зK H*NNt5a>iޖhoZV< Eͣ`xB˜8+d!8S~0(jQFa64;,zd)3W[;O6-{MZ\PnE6VeznƝ[%ޘdS2vW")K NAw?\'^X~hk̮9E?Yr`ߕJ#Җ|e$*Sd:TJvJz 'Kw5%bjEyhʴoD>nAa 0/W"|=ibbҥk=kM(c@Υ5aoNKT `s8a^Co{BLZ4åE(e OYK&Ҍn{]=gGվC-d/Y҄c/זv+E8T*x܄saLhmv CE5fЛne%ρoJmlBW Hş!?PMUke P~:\jl0"7 Hq}1Y{J@xjK d722|##}au'ae2"(@7:ᒒY+sGCY58|d|;}0| aJ~wStމP>vt>XzB)m;-ÑKafYuFڗԺfv#sqí;j% 2V& Jb&33תClJChÁ)(iVOm8~W?&cbjs gy3·D/70v=">O[W7S[z\qfRǖGq,uS::O59nil:TAݥ;}YԍwG*YBUAUz3`P%YD|:'aKSJpgt%-s hA9ayTG3D™pgHŤW4:Ka.DH/ػc'코;gf?\V($7t4ͮ%ZfMS'}Jp*Q]88Hp 8g,3fhbrY p|5_179=A1qnr1ܴ 8a-}i éű=̮3[OA mcGOGhL.>.7>_P;QQ: endstream endobj 21 0 obj 3472 endobj 22 0 obj <>stream xeVyTS׾>1&8aKLM&ڪu* jH%@ B $i@<$HUbu֢V}oN:oG.h4`^9D$o ${b5x{I?v3^'M4ioJerQbR`chp{7o/}||dz5"%K0U* % |٩lYR .>^ KRE24S=/[ǎ P."IDQF N/8$& qBw?(C-K$@"]PAG &*Rðu{%'˄ "3T'>`m^w|bQ!ۆaA~v;`c؟0,#}}bbq0l9{X lu BL@ -x{A҂BBB #39 .Zhrx̒K-Y%%rJe1Pz\XKΖt4W9J&?Oˉ.f:t;UNZ@.f̚5\(WJ,TsjG8 H+bE#D\fvW Md XUv.uYGL<5 b%%nNj.TgĚ4EaIWeU T'wˇM\@mglRC<,WkJu,0X(("؇`tgS?BrUI.Ugp ~7&ULQ"mHamAkO'"/v`{?Bo=sjl|BZuMP&GJ]8m~TuW_`:s$n#U@|Vp0;dڼ!L 2*?7&HՁOTM8qFjNU@Gf|k3#W?_<@< ~={i3d|y`O|BLt*&3x\SĪvZ3ulaQ Ka1> (0Et*n( WI/ O@H\qC@I?@`ir!r8sWgרjQP7Yx$ְ+K'$:õF\XjTPSkWp&7! -D7uӑXyh,>0B3rCT\iB؝3IG=st#G# ovc uH =ŗqtwba$<-=.>8ɻ/^B0|N_a!QM[pź*W@/a4~Z>c' y ?t3_ݛ[U*se-9| `G\Y8R6KeΫ؍N7j{2Eq (ߨ3S$it%{ߔ|ok["d(ڬ**82< ,mW@/l YJR,/\*A싻Zx]5pk&NI^ a}Oo[Ee 늝%Oz]pv4iq0cxd<{rvǓ:FI> Kc]*q56#CqW_R54s= +Y5:fm)Do3|CII!Τ-Y5 EY]GO<_LU֤Tnl4Ble7N9LVV[AAH%0֮ś=$Z۸Ǧ;E;xsogQ %{xf-dtA0f7p ~;qbxhEyrLefX 1| Az*>,:(XMI-YAt=R[3 :aȱBh\Ec.`h)B/>CŜ)r`$N(-h2Ej)'!^&0'ox## oPV> endobj 13 0 obj <> endobj 11 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 24 0000000000 65535 f 0000000895 00000 n 0000012925 00000 n 0000000827 00000 n 0000001249 00000 n 0000001101 00000 n 0000000943 00000 n 0000000667 00000 n 0000000015 00000 n 0000000648 00000 n 0000012583 00000 n 0000011459 00000 n 0000012217 00000 n 0000010979 00000 n 0000011940 00000 n 0000010547 00000 n 0000001017 00000 n 0000001047 00000 n 0000001396 00000 n 0000003240 00000 n 0000003261 00000 n 0000006819 00000 n 0000006840 00000 n 0000010526 00000 n trailer << /Size 24 /Root 1 0 R /Info 2 0 R >> startxref 13065 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_getinfo.30000644000175000017500000001602210265631023023514 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_easy_getinfo.3,v 1.18 2004/12/22 12:31:55 bagder Exp $ .\" .TH curl_easy_getinfo 3 "22 Dec 2004" "libcurl 7.12.3" "libcurl Manual" .SH NAME curl_easy_getinfo - extract information from a curl handle .SH SYNOPSIS .B #include .B "CURLcode curl_easy_getinfo(CURL *curl, CURLINFO info, ... );" .SH DESCRIPTION Request internal information from the curl session with this function. The third argument \fBMUST\fP be a pointer to a long, a pointer to a char *, a pointer to a struct curl_slist * or a pointer to a double (as this documentation describes further down). The data pointed-to will be filled in accordingly and can be relied upon only if the function returns CURLE_OK. This function is intended to get used AFTER a performed transfer, all results from this function are undefined until the transfer is completed. You should not free the memory returned by this function unless it is explictly mentioned below. .SH AVAILABLE INFORMATION The following information can be extracted: .IP CURLINFO_EFFECTIVE_URL Pass a pointer to a 'char *' to receive the last used effective URL. .IP CURLINFO_RESPONSE_CODE Pass a pointer to a long to receive the last received HTTP or FTP code. This option was known as CURLINFO_HTTP_CODE in libcurl 7.10.7 and earlier. This will be zero if no server response code has been received. Note that a proxy's CONNECT response should be read with \fICURLINFO_HTTP_CONNECTCODE\fP and not this. .IP CURLINFO_HTTP_CONNECTCODE Pass a pointer to a long to receive the last received proxy response code to a CONNECT request. .IP CURLINFO_FILETIME Pass a pointer to a long to receive the remote time of the retrieved document. If you get -1, it can be because of many reasons (unknown, the server hides it or the server doesn't support the command that tells document time etc) and the time of the document is unknown. Note that you must tell the server to collect this information before the transfer is made, by using the CURLOPT_FILETIME option to \fIcurl_easy_setopt(3)\fP. (Added in 7.5) .IP CURLINFO_TOTAL_TIME Pass a pointer to a double to receive the total transaction time in seconds for the previous transfer. This time does not include the connect time, so if you want the complete operation time, you should add the CURLINFO_CONNECT_TIME. .IP CURLINFO_NAMELOOKUP_TIME Pass a pointer to a double to receive the time, in seconds, it took from the start until the name resolving was completed. .IP CURLINFO_CONNECT_TIME Pass a pointer to a double to receive the time, in seconds, it took from the start until the connect to the remote host (or proxy) was completed. .IP CURLINFO_PRETRANSFER_TIME Pass a pointer to a double to receive the time, in seconds, it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved. .IP CURLINFO_STARTTRANSFER_TIME Pass a pointer to a double to receive the time, in seconds, it took from the start until the first byte is just about to be transferred. This includes CURLINFO_PRETRANSFER_TIME and also the time the server needs to calculate the result. .IP CURLINFO_REDIRECT_TIME Pass a pointer to a double to receive the total time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. CURLINFO_REDIRECT_TIME contains the complete execution time for multiple redirections. (Added in 7.9.7) .IP CURLINFO_REDIRECT_COUNT Pass a pointer to a long to receive the total number of redirections that were actually followed. (Added in 7.9.7) .IP CURLINFO_SIZE_UPLOAD Pass a pointer to a double to receive the total amount of bytes that were uploaded. .IP CURLINFO_SIZE_DOWNLOAD Pass a pointer to a double to receive the total amount of bytes that were downloaded. The amount is only for the latest transfer and will be reset again for each new transfer. .IP CURLINFO_SPEED_DOWNLOAD Pass a pointer to a double to receive the average download speed that curl measured for the complete download. .IP CURLINFO_SPEED_UPLOAD Pass a pointer to a double to receive the average upload speed that curl measured for the complete upload. .IP CURLINFO_HEADER_SIZE Pass a pointer to a long to receive the total size of all the headers received. .IP CURLINFO_REQUEST_SIZE Pass a pointer to a long to receive the total size of the issued requests. This is so far only for HTTP requests. Note that this may be more than one request if FOLLOWLOCATION is true. .IP CURLINFO_SSL_VERIFYRESULT Pass a pointer to a long to receive the result of the certification verification that was requested (using the CURLOPT_SSL_VERIFYPEER option to \fIcurl_easy_setopt(3)\fP). .IP CURLINFO_SSL_ENGINES Pass the address of a 'struct curl_slist *' to receive a linked-list of OpenSSL crypto-engines supported. Note that engines are normally implemented in separate dynamic libraries. Hence not all the returned engines may be available at run-time. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP on the list pointer once you're done with it, as libcurl will not free the data for you. (Added in 7.12.3) .IP CURLINFO_CONTENT_LENGTH_DOWNLOAD Pass a pointer to a double to receive the content-length of the download. This is the value read from the Content-Length: field. .IP CURLINFO_CONTENT_LENGTH_UPLOAD Pass a pointer to a double to receive the specified size of the upload. .IP CURLINFO_CONTENT_TYPE Pass a pointer to a 'char *' to receive the content-type of the downloaded object. This is the value read from the Content-Type: field. If you get NULL, it means that the server didn't send a valid Content-Type header or that the protocol used doesn't support this. .IP CURLINFO_PRIVATE Pass a pointer to a 'char *' to receive the pointer to the private data associated with the curl handle (set with the CURLOPT_PRIVATE option to \fIcurl_easy_setopt(3)\fP). (Added in 7.10.3) .IP CURLINFO_HTTPAUTH_AVAIL Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available. The meaning of the bits is explained in the CURLOPT_HTTPAUTH option for \fIcurl_easy_setopt(3)\fP. (Added in 7.10.8) .IP CURLINFO_PROXYAUTH_AVAIL Pass a pointer to a long to receive a bitmask indicating the authentication method(s) available for your proxy authentication. (Added in 7.10.8) .IP CURLINFO_OS_ERRNO Pass a pointer to a long to receive the errno variable from a connect failure. (Added in 7.12.2) .IP CURLINFO_NUM_CONNECTS Pass a pointer to a long to receive how many new connections libcurl had to create to achieve the previous transfer (only the successful connects are counted). Combined with \fICURLINFO_REDIRECT_COUNT\fP you are able to know how many times libcurl successfully reused existing connection(s) or not. See the Connection Options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries to make persistent connections to save time. (Added in 7.12.3) .SH RETURN VALUE If the operation was successful, CURLE_OK is returned. Otherwise an appropriate error code will be returned. .SH "SEE ALSO" .BR curl_easy_setopt "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/curl_version.html0000644000175000017500000000271310265631023023331 0ustar danieldaniel curl_version man page

NAME

curl_version - returns the libcurl version string

SYNOPSIS

#include <curl/curl.h>

char *curl_version( );

DESCRIPTION

Returns a human readable string with the version number of libcurl and some of its important components (like OpenSSL version).

RETURN VALUE

A pointer to a zero terminated string.

SEE ALSO

curl_version_info (3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_slist_append.pdf0000644000175000017500000004000710265631023024134 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xuUmF_1J?F]{m4hb)q_ꨐ,؜_D;0gyW0 S~gt^B{L#:o)'V_2p==q)'Y 8E!6% #}#+ﰀA}iK_uT)]ui }F*MKM%vD걨=sIG\@.*Om0m4*,)jyკ.4q3xnnŽ xPNn%"9EzAMWAcQW#!2M0xeNlsI0NaRPN`S\*ClR67Xb&eOu8h /S/i1? jȟOO p蓴1z$pTmwmfPCq\NJQy!).dgh'eKs0.lkLOO)tg񴻿agO\FU}RC;_am]2;+N>q?/P佼6mKJQHp7PUP5;*Lj2}Lo^Fo*V.'-Ԯ.T^k4\[oZcD9:_iZ*7~\endstream endobj 9 0 obj 976 endobj 7 0 obj <> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xemLSgoMqRa!$Q>039|j)m/}/B߹魥Z- El&ν$ Lt/fLs͝f,>ewh+˞Yշ8uMMt؆Nt Dka,@3E?dg˪B,ߐ$dG *Iɂ͜_F teO+eC]oI,7 1[w 3&l' UazJ\u}n)e.S"x[/_+za"8 ?g =BeP/L>~R'CT?.( (|D}dVtʴTn^OSSPhohIsNLAт_'i*˿O J:NfNN)e9}a Ч%E.>stream xWiXSV,*龀҄"ֹm֩uq8y $$@”y@P (xڪNԞj{l=k|߶}&7wwEDM@DgI>sw+btשk ~L;M#5,n|ޓCT0MD"C}ZUŧ3dܹeU"SĩMZRIQ淞V*Q~qtM/"::&Z'BITh44s^Yh|rz%H۩NPWm V&m{S7P/h&fZ]ŮݛQF߂K(j>@PFUj!D-fQoQ)jL-ޡPK=2ej9HVP)wJDM&Rki/%&Q 1.Z#ڄ ">|xJ=B23`<'9&ݛIS#fOm6}(p-Dmrx˽$'9ZOݕb C2^ɠ; Y/-qёL70~h^jC{bɒ)wmtpEt4ʴXǷyiY`:#h!,`SP;jvtRq(hP1'"lr!gx1'\$!;* 2 59(ŧVP? VWִ۬%Å 5f*P.˩G'X(g9j\+wExyͩC7X>A7nUW`q%>+ŸRK*Q;fviugt0* -6'0P1@A{nlX ݠO$_Kܣ'~s`NV.+}Ȏ`Y G.=߃dX!0䡑;ਸ\uڻ8Q\+GroeO&YVYӀ_9-ds 'dԧSG>Ht٭i͡J \j]F;HRbSt{ĬĬWa=f {+Y켏kRI/?)hD F唘 p^[n|DzW0Lm3$Hu ]7lLA?oI׋Z!m~3O9hVWǩ䱻3 vPȀ,,LGa,ff VQ`AFv_̋ēJ:zΈj]d9L;Tnj@Yu9k3뤒뚖F΃b4o$$1ҜJgճ1HyI''YLAVA ÙDYR:s }ԩEltRrF48*SgAt܉W.{#z(.N@{9Ujץ7O%5*G l>["ǕI/}*{b;BOQ@Nm5$\:2V4`9 x_jq4t::,h%9 J%_]ؘ BrrV v0?C=CMedJKcfE'ɒ3k$eâj-,*tnV3?c E]6ǥ:}LfvQeF6~,$ ! r$?On&ٙ S#`7#B =!Eo 'ORnsDP9HJb2H.7Vs,+cfbߕo`%c}Z7di;9H5ΌOXF]tƂQ]qkhFIGexWS0I{-*$f?( 5?\E4=0a XcFM(}LBBY,Y<:x^uP$V0KFC뵌^> s~ ZEPID&qMyPJs- L-7cw.x]t3i=}~/JGڗ\04170hf]Ftg-sЖE g\"GXw\n]j\-:AqM}V%} V65ZO&ChO덄ͱ t[6udS+bkBѽŖt4b3XPقq|`|HIi']rr&"F5簇Tҏkkv{ LYnmq%dmދ :jIut*ꅓҺ3hu[8QM:&u ^JDŦp,_zca5RE76 Uߴh~Mc7Ԍ?m0F_ׁ_.;;m=< E;fKB l\/lv}6y{<⯞/]5V_>t؎jWXk,ۮkRMyJ496/'VE@+0QVVXU(iLb̥1J`ZOV*^g1NY|&158ݥ2Ī[S;m 5VYDZΪBC5fPtuuטmR`QSHUwWVuU}t؁N[kN,<! boI8Vzx~#:>stream xuXw\~cLׅV6Uۺ#T[V ag03&a=@BF^Qgkel vbMŦa Lya30fby+|l06OLozqxkRڤ5oLn`MbY;}߇)˦4N]>U?δӎLgM1}F <.5Db~Y[===<̉(8ssoٹ\O^~u 4yPd}ԯ.ϟp$MTTJEBlՖ.>%f…dC6qNجRn%d8=} ndy PuL:[TL]Qf;ZɎ(` :ZMfNaA'{`qĚ T\ -$dPC q h:dPb*DJ}v^1"Zy`jupޔW-U@6*28-a@ʌP)S#2D 4=#ms3|ZL\ze|1 72+IVdDK2pU#0+QnƏ+񆔏H"P7kqmLQl{lzݺxI}ȈA|֗mo,WkUn1(V@>\G+ۻy 涋.d Sc?R7ɉ0jkNѬj7 8J(FT1 ؏rxodFzƅX"LeUit-F뷰[&4QIbC.@G4q Y|A~Cb?/C,:}=8\o8dLFKt"@gB;Nʧ\[s9#%z\( ͯskTe`'HJBd!Pӿ؁sd 8N9aʷ3`cta+mH(MJKxeX~|Svo!X$mɠK/@y򗄼zæ >-L~N Ο:Hv]:V)a`q(|2,^#ˊ sjw Qj"\% +A78{8.l=Qi!Q8$+Aw֓mG_ _?Pn pUt^k,Lkִawd^c$xWAǻ!6Cpep4tUu3C6!d3}IGoȥ>g>}aϢ7Vw/slw' o_ 4[EWHHH8 @uBޑ_iXD񺳀xqņ9 |{ؐrŞosA٭7N`1IrROe'=XԘ' ԼC|BעƟ鲹ϙ`_pVDռr] ]QMvJ"SQ9kG:ljݼp~&%u{Piޯ'ܗe f/dSAUax؆.ut_AU{-K|d;96'&6`un%5)+5jma3x/X[W^4)f!`:zv86;" GvP6)*Bfe0QX,<8MNj 7X-aTFVj.Ya*+*DcYvpf0lV 0:l)y*gUKgVMb(cS8{B3ջe<--7E_pDy}RR/MbN64 >Mr17I)* H ڴW77Aԏw4 Wu^pe"-^ietv5Z MU(lolqv5^A \8 TEw[뭎|4çŖ&WP b=]מѱk5:ϓWM*g:Y糴0p@W5EPY:om>=G/$uIA 7*Y/1Q'e5l6'8pz#9zO.<޹OĕFoo9ߖ;| g|FUDcf> V:،#DywtH<5i9{V6^Rdf@ O$idSxEWNϧ?il td|6a-^mMAp {R[ oy#UƾcӂM/WYn2mt16kbGYp{"zBrK eEx lM4m,YVh2 zޠ Lit :yj{VB q|+N/Iczu#[ ,f)>]^(*܆%āN7:'9>7,R!e׵dԋ/abu cBD$ mn2'4uN _o!ExO#nUP(#(JUyknuˁd.;RK G++:F Ĺ*V"6 s>D U %$_{l=}ͼ!/^Rp~J:8V>Wr ٠N^& l#5qmD Q2*hg4E6@t,wډKDŅ8FLy|nd^odJ(rL)h) jm镑Rn+NtP+ѫTZyxQx^@# sV<.ocoL R$+|dWL@jd %SփM ArTaq+_ weC# _!ng}pNM4 |n閺2˹TueW*̐D/@m8˝~Vڕ|Fׇ?l(Z f(F.[ZiW{ʵ5!VUf`El\P[^z~j/(Џ^R&RGy- ^!mE\V`.5^Ճ&s *c4tEE hᖊ: ։hl,A@bBۢx;.P^ =_oSj秤BUP1̇tmU6dvt2j 5u%B+X掺͢N-ۡ9( 8O3ĤQjO]Vg z +4*>  C\3NlF:)@Z2f}^_ũ(:J%V`3)d5rTU%Pᰶ8RmRݾb#?aΐUN\1;,VyrC^͏.$b<7EBm ʲ#F[F;͉+]8(.YCU]K mhAnpAE*pfmz%|O̜@؉ ՠ cp85҇RCx! U]QюRjUƍQ( @G+%9\=YJehD%8 5'7u?,.N;}bFl{E ?>aڱlrF'Ya>\3mE&ً6w5S/Npvwbd{}Мвa}XPJv\FHQeyh iU[;rz?3Q&;r1l:'t3yEDn/b M檊# .mjUua- L cq5ϩnaP!ln*gjYB6 xʺƆ !6}@^Q} endstream endobj 23 0 obj 5574 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000001308 00000 n 0000015672 00000 n 0000001240 00000 n 0000001662 00000 n 0000001514 00000 n 0000001356 00000 n 0000001080 00000 n 0000000015 00000 n 0000001061 00000 n 0000015240 00000 n 0000013981 00000 n 0000014858 00000 n 0000013491 00000 n 0000014620 00000 n 0000013073 00000 n 0000001430 00000 n 0000001460 00000 n 0000001809 00000 n 0000003114 00000 n 0000003135 00000 n 0000007371 00000 n 0000007392 00000 n 0000013052 00000 n 0000014535 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 15812 %%EOF criticalmass-1.0.0.orig/curl/docs/libcurl/curl_free.html0000644000175000017500000000270610265631023022567 0ustar danieldaniel curl_free man page

NAME

curl_free - reclaim memory that has been obtained through a libcurl call

SYNOPSIS

#include <curl/curl.h>

void curl_free( char * ptr );

DESCRIPTION

curl_free reclaims memory that has been obtained through a libcurl call. Use curl_free() instead of free() to avoid anomalies that can result from differences in memory management between your application and libcurl.

SEE ALSO

curl_unescape(3)

This HTML page was made with roffit. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_easy_init.30000644000175000017500000000140110265631023023017 0ustar danieldaniel.\" $Id: curl_easy_init.3,v 1.7 2004/08/17 12:39:10 bagder Exp $ .\" .TH curl_easy_init 3 "4 March 2002" "libcurl 7.8.1" "libcurl Manual" .SH NAME curl_easy_init - Start a libcurl easy session .SH SYNOPSIS .B #include .BI "CURL *curl_easy_init( );" .SH DESCRIPTION This function must be the first function to call, and it returns a CURL easy handle that you must use as input to other easy-functions. curl_easy_init initializes curl and this call \fBMUST\fP have a corresponding call to \fIcurl_easy_cleanup(3)\fP when the operation is complete. .SH RETURN VALUE If this function returns NULL, something went wrong and you cannot use the other curl functions. .SH "SEE ALSO" .BR curl_easy_cleanup "(3), " curl_global_init "(3), " curl_easy_reset "(3)" criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl-multi.30000644000175000017500000001174210265631023022603 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: libcurl-multi.3,v 1.12 2004/07/17 08:24:22 bagder Exp $ .\" .TH libcurl-multi 3 "13 Oct 2001" "libcurl 7.10.1" "libcurl multi interface" .SH NAME libcurl-multi \- how to use the multi interface .SH DESCRIPTION This is an overview on how to use the libcurl multi interface in your C programs. There are specific man pages for each function mentioned in here. There's also the \fIlibcurl-tutorial(3)\fP man page for a complete tutorial to programming with libcurl and the \fIlibcurl-easy(3)\fP man page for an overview of the libcurl easy interface. All functions in the multi interface are prefixed with curl_multi. .SH "OBJECTIVES" The multi interface introduces several new abilities that the easy interface refuses to offer. They are mainly: 1. Enable a "pull" interface. The application that uses libcurl decides where and when to ask libcurl to get/send data. 2. Enable multiple simultaneous transfers in the same thread without making it complicated for the application. 3. Enable the application to select() on its own file descriptors and curl's file descriptors simultaneous easily. .SH "ONE MULTI HANDLE MANY EASY HANDLES" To use the multi interface, you must first create a 'multi handle' with \fIcurl_multi_init(3)\fP. This handle is then used as input to all further curl_multi_* functions. Each single transfer is built up with an easy handle. You must create them, and setup the appropriate options for each easy handle, as outlined in the \fIlibcurl(3)\fP man page, using \fIcurl_easy_setopt(3)\fP. When the easy handle is setup for a transfer, then instead of using \fIcurl_easy_perform(3)\fP (as when using the easy interface for transfers), you should instead add the easy handle to the multi handle using \fIcurl_multi_add_handle(3)\fP. The multi handle is sometimes referred to as a \'multi stack\' because of the fact that it may hold a large amount of easy handles. Should you change your mind, the easy handle is again removed from the multi stack using \fIcurl_multi_remove_handle(3)\fP. Once removed from the multi handle, you can again use other easy interface functions like \fIcurl_easy_perform(3)\fP on the handle or whatever you think is necessary. Adding the easy handle to the multi handle does not start the transfer. Remember that one of the main ideas with this interface is to let your application drive. You drive the transfers by invoking \fIcurl_multi_perform(3)\fP. libcurl will then transfer data if there is anything available to transfer. It'll use the callbacks and everything else you have setup in the individual easy handles. It'll transfer data on all current transfers in the multi stack that are ready to transfer anything. It may be all, it may be none. Your application can acquire knowledge from libcurl when it would like to get invoked to transfer data, so that you don't have to busy-loop and call that \fIcurl_multi_perform(3)\fP like crazy. \fIcurl_multi_fdset(3)\fP offers an interface using which you can extract fd_sets from libcurl to use in select() or poll() calls in order to get to know when the transfers in the multi stack might need attention. This also makes it very easy for your program to wait for input on your own private file descriptors at the same time or perhaps timeout every now and then, should you want that. A little note here about the return codes from the multi functions, and especially the \fIcurl_multi_perform(3)\fP: if you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means that you should call \fIcurl_multi_perform(3)\fP again, before you select() on more actions. You don't have to do it immediately, but the return code means that libcurl may have more data available to return or that there may be more data to send off before it is "satisfied". \fIcurl_multi_perform(3)\fP stores the number of still running transfers in one of its input arguments, and by reading that you can figure out when all the transfers in the multi handles are done. 'done' does not mean successful. One or more of the transfers may have failed. Tracking when this number changes, you know when one or more transfers are done. To get information about completed transfers, to figure out success or not and similar, \fIcurl_multi_info_read(3)\fP should be called. It can return a message about a current or previous transfer. Repeated invokes of the function get more messages until the message queue is empty. The information you receive there includes an easy handle pointer which you may use to identify which easy handle the information regards. When all transfers in the multi stack are done, cleanup the multi handle with \fIcurl_multi_cleanup(3)\fP. Be careful and please note that you \fBMUST\fP invoke separate \fIcurl_easy_cleanup(3)\fP calls on every single easy handle to clean them up properly. If you want to re-use an easy handle that was added to the multi handle for transfer, you must first remove it from the multi stack and then re-add it again (possibly after having altered some options at your own choice). criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_cleanup.30000644000175000017500000000126310265631023024010 0ustar danieldaniel.\" You can view this file with: .\" nroff -man [file] .\" $Id: curl_global_cleanup.3,v 1.2 2004/02/27 15:34:06 bagder Exp $ .\" .TH curl_global_cleanup 3 "28 May 2001" "libcurl 7.8" "libcurl Manual" .SH NAME curl_global_cleanup - global libcurl cleanup .SH SYNOPSIS .B #include .sp .BI "void curl_global_cleanup(void);" .ad .SH DESCRIPTION curl_global_cleanup must be called once (no matter how many threads or libcurl sessions that'll be used) by every application that uses libcurl, after all uses of libcurl is complete. This is the opposite of \fIcurl_global_init(3)\fP. Not calling this function may result in memory leaks. .SH "SEE ALSO" .BR curl_global_init "(3), " criticalmass-1.0.0.orig/curl/docs/libcurl/libcurl.30000644000175000017500000001152210265631023021447 0ustar danieldaniel.\" $Id: libcurl.3,v 1.11 2004/06/21 08:28:10 bagder Exp $ .\" .TH libcurl 3 "19 March 2002" "libcurl 7.9.6" "libcurl overview" .SH NAME libcurl \- client-side URL transfers .SH DESCRIPTION This is an short overview on how to use libcurl in your C programs. There are specific man pages for each function mentioned in here. There are also the \fIlibcurl-easy(3)\fP man page, the \fIlibcurl-multi(3)\fP man page, the \fIlibcurl-share(3)\fP man page and the \fIlibcurl-tutorial(3)\fP man page for in-depth understanding on how to program with libcurl. There are more than a twenty custom bindings available that bring libcurl access to your favourite language. Look elsewhere for documentation on those. All applications that use libcurl should call \fIcurl_global_init(3)\fP exactly once before any libcurl function can be used. After all usage of libcurl is complete, it \fBmust\fP call \fIcurl_global_cleanup(3)\fP. In between those two calls, you can use libcurl as described below. To transfer files, you always set up an "easy handle" using \fIcurl_easy_init(3)\fP, but when you want the file(s) transferred you have the option of using the "easy" interface, or the "multi" interface. The easy interface is a synchronous interface with which you call \fIcurl_easy_perform(3)\fP and let it perform the transfer. When it is completed, the function return and you can continue. More details are found in the \fIlibcurl-easy(3)\fP man page. The multi interface on the other hand is an asynchronous interface, that you call and that performs only a little piece of the transfer on each invoke. It is perfect if you want to do things while the transfer is in progress, or similar. The multi interface allows you to select() on libcurl action, and even to easily download multiple files simultaneously using a single thread. See further deails in the \fIlibcurl-multi(3)\fP man page. You can have multiple easy handles share certain data, even if they are used in different threads. This magic is setup using the share interface, as described in the \fIlibcurl-share(3)\fP man page. There is also a series of other helpful functions to use, including these: .RS .IP curl_version_info() gets detailed libcurl (and other used libraries) version info .IP curl_getdate() converts a date string to time_t .IP curl_easy_getinfo() get information about a performed transfer .IP curl_formadd() helps building an HTTP form POST .IP curl_formfree() free a list built with \fIcurl_formadd(3)\fP .IP curl_slist_append() builds a linked list .IP curl_slist_free_all() frees a whole curl_slist .RE .SH "LINKING WITH LIBCURL" On unix-like machines, there's a tool named curl-config that gets installed with the rest of the curl stuff when 'make install' is performed. curl-config is added to make it easier for applications to link with libcurl and developers to learn about libcurl and how to use it. Run 'curl-config --libs' to get the (additional) linker options you need to link with the particular version of libcurl you've installed. See the \fIcurl-config(1)\fP man page for further details. Unix-like operating system that ship libcurl as part of their distributions often don't provide the curl-config tool, but simply install the library and headers in the common path for this purpose. .SH "LIBCURL SYMBOL NAMES" All public functions in the libcurl interface are prefixed with 'curl_' (with a lowercase c). You can find other functions in the library source code, but other prefixes indicate that the functions are private and may change without further notice in the next release. Only use documented functions and functionality! .SH "PORTABILITY" libcurl works .B exactly the same, on any of the platforms it compiles and builds on. .SH "THREADS" Never ever call curl-functions simultaneously using the same handle from several threads. libcurl is thread-safe and can be used in any number of threads, but you must use separate curl handles if you want to use libcurl in more than one thread simultaneously. .SH "PERSISTENT CONNECTIONS" Persistent connections means that libcurl can re-use the same connection for several transfers, if the conditions are right. libcurl will \fBalways\fP attempt to use persistent connections. Whenever you use \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP, libcurl will attempt to use an existing connection to do the transfer, and if none exists it'll open a new one that will be subject for re-use on a possible following call to \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. To allow libcurl to take full advantage of persistent connections, you should do as many of your file transfers as possible using the same curl handle. When you call \fIcurl_easy_cleanup(3)\fP, all the possibly open connections held by libcurl will be closed and forgotten. Note that the options set with \fIcurl_easy_setopt(3)\fP will be used in on every repeated \fIcurl_easy_perform(3)\fP call. criticalmass-1.0.0.orig/curl/docs/libcurl/curl_global_cleanup.pdf0000644000175000017500000003406010265631023024420 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xo0+NCA*mmmyԦ]La38UIjB <FywxOG=.*k'!ƒ/BE( o> /Contents 8 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R ] /Count 1 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 18 0 obj <>stream xeT}PS!&."(nޛq论 -"(D *BI$$Kn!@H" (EQXmEKW;Edwgǎstv:Μsι;s*?`HKTD EyQ;V,8!G~T.Ij {-"L?D. xhZʑaak "BqL"*"[L jY Włb$#! H:D#1j$ y 1BV!Q _3j9V_wK5#7X=A` aOԑ*u踏qdO5^v I}hьb SAg E8Xj)ńjhYk 2ezIԨbuyR\ ];8ǣaxA+cV\޺b~E5iփٝZ-SǤ!lf€Q=K5"lS_}u\h[`Џ[Ueq\QgFaF`r'B8,*:@>w~OT9*muXQ>KkfRceJ)@ =Ͽ 6DD#0|i#@90:sd5,VS0魕u_H2 nw~}t2n\o$@Ah3|;W''b%=U}z.>t2=bDž:{ 26`8U9W5ti%c@qD4AO:3n"oLZ&`4>y*{NdKrt_z JaKsvU4KALY9@hj劼>stream xVyXSg>sQ*3K:݊XPGEH HLvS$$ R[:θ;vZ^gjNe~nsrη'&OD"/&{5)* 6~2\s&s݌Xbg}kp5ȟND&=X4h`E[|ݺureO5*&!UKUZ>E(W jUFץ\lbr{3LxB} eebO󫬢G ) #=\\SbY<ʠآB%vF]߄X2TUmmM[-=2\ u^4ͷ3 W"RO>;'re ԱGr] ǛYe!B(i}axgەx ,?.͹oeaОMŬ>w0u,ƠMM+fT2KZ1%y(uPD9uS+zI T=.>S8,_ +|+Nh[{Z$#rWD; Oߑso7v2?`]npTީS=QT58+)F 01Sœ|<#u7PIAV~^FZ(b pgn2eP.X w@+m)BȔhPb7:{@|reumk:NKsd@|&cPټN%@;w[z*}Ȭra^W|d \ͺR R2ƚVa|5(fCdے ̣tŷ2sJw*lw·E\Dh)5?Dr,݅I1:ŷ'$DM4M:ZJ#f(/1X ~p|[ud%{cmxz3lj|uAʢ¨"6&"ˊ:sPG0ba^Ld"vi'io׷!vt] +D/j3cP tg9Iֽ43c_B| MU遫fWk+M'u'9VSsfa?k"8D | /X!;xi'a3hо,L' A%-/aCƮcj> ZxQ(fl2wKZsH"vNm_|N}Ah Z*9ZJہ輆™^K&|I&\%78}b]ÿEOXj`}ߒJzclu15 8TJzQ13Y$|`6֠,;YØڙ:&5f$oFl6B~%I#}'?B淋Oh ]BB7;!@)"4_Y>B`:>S'XajaU qHD"nק &LOH塸 iW l3av1C5uR}}kSa쾎΋#CTmXy<3V 3aޒQ|:?HS͇u}Evؚ7ABHy:n+0ɠ뱆/I[U:d#Gc!Ït^:ٍ}nGVba[U]ggmU-YbJ8yo[Fedy(5җ uU-/"IO+R:y<c&$ @.Y gnu4t:Ξi@#,}"|,Qic ؈ ߾0?C, _prBƨ4W:f?닙.;)2TٹGgn2ЅlZcX*HHE.)$MHa&ٙFn$&Fw' tizc0uDEv^ p'&^AJ S|(Ȳh5 PE5Y{ eA>[FouqU%vgM,mqT4jTWV;JS#gym͏*~o`rd.$p,83 jr+Xҍϱ[:+^-=e܍;]۰L);Bb]W$ ܝN[g/3ß>R<Xp17-\h ,Յg6 #\A~0q U|tˣ"l!z(> =\Ax#b,ALxA}e/y=g\JlaHUW>WQ)# .rɂsKW^sh+⾋`; #)wr!@l_3|"tTww{xcE] endstream endobj 21 0 obj 3593 endobj 22 0 obj <>stream xWyXS׶?1&8і4$m{V-NL(!$L$$!d`Gdt:VEj{}x?މ{˗|k͝h4gEX"X&K7{u:$3Ȩe/KheN_y$禋EIeaQX~Y(8_+- H*xz4#A;5U|D J͕'e ^Ta`8U,˲˂_zHe+biX*K%BQ@ :"g K:D,9T"  „"Ej|^0li.YB\.H+³RS%_juuK[a1nl ۃm`6l;ہcaX$c.S, c4-¸ {XÖQbߴ00 ͹+B9üx)|=~uyu7`炲c ~Y([Y\ؾhޢ݋Z9S>D1)}NyhdKT̮Rcl'E.XɅ5ې ՠZkW"&Y1=}U"BUfRNS䨡t96E cg[gh5Uh2s`mWofGY%*T1| 0:W$GGpMI!}M Sqq傟n>ܹwL1bmxu-Nko vVQFw>@/n~&:V]V[- gmpOW#^^kSmky?ڙ4D;A<`&C!kj7{rݶd, fMdab19̇. ][#eX8 (ͤҦk#ֵDLb_A%A-^|/cO_AN2nߔt,/;wȓK7y^_6Z#=MGh)F--+GPhU&v*y^fvUI W8 V ;9gFwD NB< z 1o==?3y{' B&unKJ&<u ܅?Y6 70[l?> r(!TpT+kPhs4R@ɝJv彣}E$sGT7-F񒷟_B8sޭҜj74Ƶ)?OӋJ?SWS&H.4k+]E>gWiceN7WI3 J<#hV*yUJ M:q4sK o"=94t]nFmm7ߢSY$Lpl2gv!/O8 **4&Ka6rjg,rK<9/^ܓ;ZO;`?pd[9 X{ZR3-qZa m=#-JI&y&{Iv:WאWOo=y X̪FU6kezeJK u&m9Ϊ+%¢v.?ܓ]Sq)hq!\ИcI9,&'awIr`lk-Y2ueDF^>]Ua+XgȹF iBAf-zDh+p.?F8vxG3}΁BXߛǕyRfgSj,Sj9){I. H;w(:JFX` i F,e%4ySݼʬtN|4 T ӞP.d&xirU@n iyx GD,<3S&klkolhol8Inߛh۴2&؅ZS"):'5 j\@a^dOM&DkEs!NݜN 4/^+閑Nۨ.v jWzHVn-<1ޚk[\>*ifu?@=`Φ\x#??`Tqq = I=\ m.2\lxAQQ!gN?IB֛_]is=+EZ7)979|򵡸maaB^a1E^q"/J/SaFYW*P{Ap '~^%oO /O /86-?< q}8fxH"/EJQn/:ħυ62!_We?*M^E o-fFз󰱤g_R m[fy)'QڼTꬤ!ō-G[&Ux2oTڙݐ㌫Y6f5)"DJSq=}_TtD"Sm{Jͱ[OZVwxlTeYNU] zzRGI'Cu̎-/\]E endstream endobj 23 0 obj 3899 endobj 15 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 24 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 25 0000000000 65535 f 0000000965 00000 n 0000013665 00000 n 0000000897 00000 n 0000001319 00000 n 0000001171 00000 n 0000001013 00000 n 0000000737 00000 n 0000000015 00000 n 0000000718 00000 n 0000013298 00000 n 0000012086 00000 n 0000012935 00000 n 0000011602 00000 n 0000012658 00000 n 0000011168 00000 n 0000001087 00000 n 0000001117 00000 n 0000001466 00000 n 0000003441 00000 n 0000003462 00000 n 0000007141 00000 n 0000007162 00000 n 0000011147 00000 n 0000012566 00000 n trailer << /Size 25 /Root 1 0 R /Info 2 0 R >> startxref 13805 %%EOF criticalmass-1.0.0.orig/curl/docs/index.html0000644000175000017500000000113010265631023020262 0ustar danieldaniel Index to Curl documentation

Index to Curl documentation

Programs

curl-config
curl

Tutorial

The Art Of Scripting HTTP Requests Using Curl (plain text)

libcurl

See the libcurl section criticalmass-1.0.0.orig/curl/docs/curl.pdf0000644000175000017500000023371710265631023017747 0ustar danieldaniel%PDF-1.2 %쏢 8 0 obj <> stream xXnH}WKf&2X,Mm"ЦZWT_(faSN3 `ؿnyv1e3z)v+, AOV"2d8xqY.tj?6ז]ǪΏxD/n.BOsE>oE s39Yu_^MgÞ.!^\es"֎^y۾wAMESJǠ[TXCɴvQwM8;C3 UQFUAhD_Z L.3Z)%Q4Bnڅ3H3[ǐaEZUT/T,֖ l{4A B^y7 YUc coU%](q30Ģ|ȽqE\^UPM@;&^~T#{U5>U f.K? Һ(>znR}jlzi5rvC՗JsewYo˞J,'V :SrM+{/͢߶JA@. uP[EV?&cKV-zNŠA?7vDay)|׼Io~ǭA$B(R[)*MMm9ļ`R=h`DFߦQ5VΎcC^5;o b NxF<arB5Ad5hdWb(CD2w]p'.䏰o"w4$;wж<n@Ag෽PN8lm`#R7[mQa$ (#\C.uTEI|pRko"ȽI0,lATSqpȯB^OK0 xB.UPdHW"zNzM:&7a^b'.g|yrO]Zk$3_vT*5lq(UeS=|T˺OPe8Q &~*lS/!CM Fu ĝO#<}-I+]D7]MڬLP P%k=e'o ܮY7p ◌k`& #$(,< q&\06?@6@s5'+|(&6M;m$J#BE;aye/dSѓB)+6;BZ7i@ dZCM dLv{bgێ*GB(@oE  ʇ; Ӫx;pt߲0Ĩ(يsF?Pnendstream endobj 9 0 obj 2454 endobj 19 0 obj <> stream xXrܸ}W z1'%BکڊSXyHH]eƅá։󐇔,ilL"HϺ?|0Q=c>HJhYmŠEF'zlkmY;2/'`"LrmNbʲ¾:#z7)T=(9~0fXӜe@QNCSݵ`OI* yGڜ@^z$FCو&5'nk[9^lîwQNWIZCĶ3Ul 𖫶v- Ȫ~ 4EP$ba&h2Gb(!X4v8>-YHf559MR\ *>PJzM0V"ʽXiL!MyregWJWbkk> yvR2E?%O)Xo 5E-^ ;Sm$oeOnጀZV?kvQwQf}jDKr+&DGoIi|v߰v4 FCɛ; kS>Jf͞{c6  -o܋6Cuhۓ5Uѐ<7SdL1=VⲪ*CPև;ur;Bx@7e 2 Hpf`yL̛dc1-p)h 1h xB崴s{x/^b!1Xeszy}r #LJ Ix*# ԘG5r=ޏ|2sIuZzOJV1qlp&A)%lUx0٭!c{z,I2W%{ K% H ILs, 51SÀ}.DRnlI|F:'B XSrq4!ʂF8<c ͜7 9 {l,?)ڰUsk *F3$}hm2R$4L[ϸ;ՁX&'&1?Ŀ<.9O@MK$Ǣ6zV@^W !n۵˛^y D~NY_l*`͌}X,I[s6/KoԳ*XGg\9 a|gajqw2r& 9j,( zPOq/^^ծ68,q߄U*"C/oa!j ^ϜB%h"MEh44tilT_:U`=rK%WaJ}ʺNrE?)̧NMe3lݣUM)\pc[JO$i4򈆰#$B48Q5kW;nS?7нZO^DXo[Ca M@b9[G7yΰG6B{vZ?<> stream xXn}W pL spZ#ASXjaD, {.$4(93k'АcVէ'ܟ@Y|Cf[wCG$/cZdsXyA<%ޫơ}‡5~֍%ӣ?7Y~M pjGԾDFk"zq僙p@*#`,>GFEY5lIˤ"ش-r1ۆqNӄaF ԯn|G6_[N:v`FfƉU;%qT{+Nb$G\-c) hh' ,3JvCrA=ꨚ5/!iQnLsT[-ɘlOd&Ad>}&ɑyLY97gyv"!{Wԅ! Ex""_R:-Ã'&wq0(ubS'Qk|^9,`(n)x`iG\ɊQg;1L@ HR"L8v/j&{i,+bћ?{o߭ۼ-5h.I΅#uW&Y%Sڮ,E:qQD$rLuXm:>s\vqaC#3[Tzn:jZ<,A# Iq]ދA> }r6'cg/A ٣͸^clr`&Ȝ .ٷk)r#FVtPlx[V=a^$'7H}V`^H\~"3{`M٨ Zo8@g,};t#!k{~i7(Y1QbHPۡDtT2+KoKX4F4ffDg4 Ehepǐ9&^3WHX^|V)ҍ-Lҝ'ؑ ˤ|jR\C wߚԓt*)ơ2$4JW@_BoRs @tk8'c V[xToDܽ Y')xٍfF]Mr[?CWA]g% | {>𛽀B,4ڀ³%448f>, #1K_}K xÜEм׽Pװld4"mPQYje8ӑbTn~c%8p2uK#7JүtSf1IMF&M0>]e$bGlv;aR(\g0S>:1Vvr&=Y s[GY@ d@^ 60=k΀1װ Fx\] ŵZIc;8r?4>A!|$0=e,ݓeFkX\SCjm Ej$:Ɍհ.Z'1r~Q aw&$ qQ ]|( ,npRf1u"AOb4zDCݑ E9*7:Ya(AaX)% `Hآ&ov)Zp{MMJUǵi 5C=.} fPAXP$44P\b9e=x`tjS*>VF޿>̈mlntܑ~YFfugxsY8:fd'Cj?QƹծagZo L}ZH)0(\HNR+w e^Wo;u(3y+s !`]MAP ]aIKӏq!ۦj#DqljZQCo*9AYr)"EdV>V,ٚ 虔s,^19\TY_`e}߂BIVxhti:0H$ga 7ӌӽT?݇,#yNq1hj7L^lμLcj`e[D4)#DۊZAڡ(P.b=wfBQV$i/z!]Ͽϫendstream endobj 24 0 obj 2684 endobj 27 0 obj <> stream xYMsWLx1"F;QJSL̈+@b$,,?(9gXV\|HI*J`~"YmN>|y~Tɋ7aHOV'6YɼI2z<]߼wgkWIlwe#WgZ$J?I@_z./K_V?ee;;AwيAv53V%R>/(e5vV ?L#Wy- z-s'Ir=Wy,U^zb7z8'EjAtg08T=yFX7([ݮ@a$wRك7u[g]$}q0{>Cmu/aY\4(2Yލ fÕ9|fvw^p'yqCezm/4ga툋 vQE,䱱lG1vf'8S 2{4 c_o}nLe3[1 &кw-5J_0=9\,ceb%A}*2Os,myxZ'N@3o``9m@r9`Af,h>x0<$i.Fl ;2I mmč& MtGdUvdL,t'KC|[]5=]Lf|x;h (|mY~sѶ7e_Ƽ& f=4Grڃnmfѹ[8.[m6aYz s`^( yr;PnIoks#xՑחoifZ"t *I G !`{( eQ c*qUw=pU\wв#BN-=VǾlb ][~pJ-cO5oLٜ^p D8D8rfk *y5;[ ^8[.Hq&M" ca[#m8.86%MM8;f%2^ 1[Spa y; kV/oZί=:RpOz JEDBYR_* ח BF>uMq =3Wy dC,q@F1E_ߡ5ZݍD}/f(&$C9_8MZ'S$9{.w6D *jZ !vV@hqύ{a C/gײt'eQ7a{=]V3g ]c;}x3bebaiZSg篢!yzcbU|N]aXRk\!QbFy9nM1JԊ0]҇a٫'!mSU^&0J߳J X1͒Yg*<ԏ|1l~Cfr~ ᷜF##GꉵO6r,DChв㵷:?cwQ4eJ -qգHݧH}2 bml0*nH^}MjD|5kzBh@˵hh5gYr+Å̧2jE{ut.@_8+,rʃj: BW >h(}r_hI'մsT4)e,Äl^6ddJPs͜uZ.[88X?PT'0jOP);}ePÑ;q;+ʰEւg%Oe9kO-Nwn(] \tR{VCPϩƺcf}ܵhnLYNрPIǀO޾x2˳̩;LIo엗N"oz8L(,F&Y:ğePOLV)H"]|$ ;ܗCHP;kpP? |Wc/%d8x<6 [xugHцi@qzلv@zƱinHF gr,-1)IL@b'x;d d jS#M.MdΒ(E3!{΁<Whʉ&Y= *X֮&Own3Oѩz3vf hKny#Q][-- o;% PCʢJ7b^]]oBmh|T[!ΉˤEݤ@plCSӜ Mj:h%ֺʴ~xf74Cuebm]OC{63j2IZ?Z n]m\섯bȨXl%4)nn$ucNwL d{1ejT.^m{ 1/2ͽ Teendstream endobj 28 0 obj 2643 endobj 31 0 obj <> stream xXn}ﯨ̋فX4<@8V@2Y͈MYEt[ ! Uw9sO<23ؑW| 'i@Ya'aH_0T= ᒒ<lg8 8W˲(7U \__mR-(Zr̓MaDFLASO*4iOu֩uf|$V &_Lx3IFVxF%jk gx4A!.%G$XpSđ%uBq(55Dn&4s]ۺ^Cg)Eԩ#ŤL`C[&hxxF*,k5avEɛVbԘԵ5 YiUU~3  :wG2 M!Pb OR |!3Z_3I!G.SrtŸ?(TŶMAHrY6rOGR 6I%yFCU+P5}F^\#@ Ou9h7Jv3x5?h@_@?ƙif8(ځo=pdUNV8L zXj bkon;vDDKijk OJbJr ^Hog-t1 TogFZg]}8#7/.j Dh HbB 1m 2w9]X-*$m{PHI_pt'#{ߵE'׊~:RRj.P T%b*+l#XiH~@ qͦ0͞ ҁnyBprT$.Au+f3h!~셳!lx9T qvb֥m1h(cw&3kid|5Ex`Qf)?^c <"q狣4l+ ^Hgl'O" *B3dDCBr1lymTe|xQk)ӀCp@YA(ch[&U]ɣAkБFāP%=o;,f9rSx̴ b:F}nrcw#__YC Ш*)b:7A`ݵw8*+14Bt'NH9C_j`7o cL2jA}/xr^L4O5 |NqtǷp0^#v<`ӡO x}^R@y;G pT_/d"iU\5pU۫sthRj/GUX<8gh}GϋՇ0z%G+~hendstream endobj 32 0 obj 2441 endobj 35 0 obj <> stream xXmo_QH9ki88"WspW̾H+z@Q,rvgg>33QmٟQDOt?4Rq1xUײE(9N ֻc'MdfTa\]m4EPbbK"A5nvB}U&2ϫJw2^dzZa@kd> z`#D@W7e1O£% Z&Ёn۩ĥk0hq`Bc-H7_ Wz;hʯىA_s󎨪~{={uT,r煩ј*EdEZv3rk{a^ήN π RWx}6E!'+d*d#8r?TҸ>u2ZY@WF4PEyij8AN꒷G2etMx3C,%h~RӝoAf|'`$"ٱ`㋅?=  ZI}B'ml*jkFGRG6Wrc|Ɲak;hUqwRT%N٪EӓX@IX`WEQJrMPx8 iw[hrE0M= KAQd6 I3`*Z͜&Aם5W,2N"jQe&V\Hi W= ݗ%GHNK=K DmTiwMwt8ʲ4V_N*znV LGǘ>qEzyt-lGs/kzԉcg 4Zt> stream xXْ}Wt"5\NMٚ(2U&$!E1>:$5 z9Gc# 3U֋A@Oۅ,dY`"rg [o7ݒ-Wa{?$6-^ylϺ¢~5ݦ.Ä~{qVҬYAgx}Xwe\^r~&"IV9O^'o^dtnw(z%'}/[vNLɁ R,v^~|4Yp`wb`end+˿; l/}"306[hbs? Q J6EyQvy320S|C\,(zҤmc,t)~/23ǒɶ*8/ʲ+NG0JxX{jm%AzhLj4DlEi#~R jvhYsL<]Ȥz;, X J6M˩ Ĥq;Wv M-vZ=]Z⼂*yk'ւS3R!h rR{b/%vB/ٷ[6tV?`v=Q҈@":rI Mt 8Qd5Y'"ri\ ex+*\F?0ЅM[F>D4S a҉TY_xеAXn('A;dj)&<#Ah@h 3@J݂,2lvo.X,NgC8aybhd+f9z[QDuBr>VG)5t`܍|5JܵTrܾ.?pF tq"u94}gm`³GykkVuv5TzylDy Kd&z_d y5 nd}9lĖ6ԪL^59kƴB'y8[/1׻T]0,b,T|y$ wcʶ HbDOv +~B~mR{YVęzI rԴ(ϴ *mC%Qɭ4߽`]LK]Ǖq82;%s+5 !ނ ߇nF0ʸk/O@/f\-m2 b8mٜ*9n%2(ݏfF=roN xLe$@bM"&ˣNTSF<,q6g!IUW Ýv34Cp(9;t|ZIn  纔+ UGb4uUfLO)PގOr-yUqd+,t0tPu)cW8nL{ޔUB,fBK{.JեY~Ц>co̖đĖ/,`a8>?-X+UM,'VԼ afJ_tS{P4zќX``Lu=}_>þl_]\~g(]gNh5+l+pÁH-vݵ. Zlb @nt+IN"7J`᠛f:1_ G.;9b),@\ՙ8tU4,P-SEzO"m/~Ŀ?.E*H셃\VG\)ԧlez^pv0r{z媯(B#rJ{Y\/ xC!u_Js$ '8mF6nBեbRR#I8~;3B5cԥֽRbF> stream xXko_1b!j!;HӦM6nt?bL,Qd;>$;[`])hBP[jsI@B/ѷ|7 hY.Ӏt$hdHco?ph~kZiP~=mo򢜖Mwo-_#MuFf} 轨AcrD{#ڦ ߃,-ضHlo`tma gs|`_|bR5ΜPNuu\#m}S Y\4 ϳRv$EhG=/i)2X;bv!kCh'')J#EIT̘{uOPG_D6vqϨAWhnJ:l0QBȘ m]OؠZ؟5JY;}U#eqʩ9ɶ`JLg:@1͒0b l JALN8W(1HW9n@Ff|G 0-dP%bT5A::/3Ч\U/F1r;,9.j;][a=??Ֆ)^`9oeV3TE1+]yT%agj9 r4W-T,(JޢȑԫDOV3$gyugd(@y#x"]"{ I5afyGk.|[5P`0,󪻵B _+AY e3%`ƾ5 F.ety4 " Ӎi*=jV,ሇ#a y^fYXq@ї ׋" zZPhQ*' 3F@O&x'K_Vx@Gqp ZY>NfXW5̷ 悾`<ߵn^e}࣋5 g-endstream endobj 44 0 obj 2503 endobj 47 0 obj <> stream xXn}ﯨ7cu2xq2 6YM۰i)sέdKc -sϭOsY4OOSEþoyk=,fll$iesP?8Ö}߶;?ry;5kMۗv:]]5ոQvZjP؋:>,X?U԰q[ySpHFQ걽-ZsuU,3^$WyفLnxHX!Xrٞ̕Qw~8 u Q>/6lfoZ؆fӽC4"~oyNk[6іqGίO>{і]<2kQ՞ v㍪]t)".UJ&UW;5(챪;e-iYnP|:np. IYBj&@ Pij:s 2,wUrjnNkN>U'zMl\s[j)ԩ{ʛ!||*=;n{$!,Z\(!2Ԑelcw5b8]cյ8/-P|C '_AmT3@>T=\U!4%CJɚ6+Pe1R%踾ӝU5D;NM*NUŠnx beڽXFq;ƪ d JٸکdR6#59k T5HX5TCKd:E5$y#Nku4*P+8j W2|JPQ1vcڂGBl8\ 似Tcqfn(qE7B>W XvN2oO_ԇGBc+oX3ܖ|ĞܕА8W^FP32z|<zY |e< bljs!A66:e'd<0/u ImO\>H4:=R7Za]EJO?tTKp>vPK>oTT"[J5h)!v*¶O7Nq][n,ܰ˽\;8]b24ZJx3l*6PW4B% KUP"5>6" C'G,J9J8r (h}O튜.y 0t`eX Ԭvų$R;I@T,K`LGQYH(;ưB?Ԕnv}Odz, 7Ǽ*O:T0z0G #(hf& U(tsﻬz$32ѩB8$ ElpFw6 Vi8 2%dž)/NA׌PX#kYADnf܈DW6AS 9s玔ۥ26wQ,E#'DԀ[0u<W $F0 -u\GP \aF\'(x1n\__ M-VqۓP[~/ZqZ"AXiurqEC<ډJxGyM |E"ok|ũf0b-"f E^A+kd7Tsk=J%J֘,E*!:QJKdXۙg  vs6S3 cyz`~ | *AuLF@DFB0b2z^OŘW6~u^zEû3C+١C`z495P)fol48ifo5_c3̴`=i5hkkLaY1],6p9wHA׋A i)-<7@MKFLB2}yJ;UrDZdA.t4]&$S9CNtGIЗt $+'E[R cIӳ:V''Z)XJUIvg> stream xX[o}ׯdLEuZ>8Fkb]?ȏB]l0b+"zΙy~j;{?{BSmٟ?!}X̻!ˊ[lga}ˆM,:Rb5}_/ƦY˺5#6m;͎ r&<D}k)ύ[9tթuؽoœaцV]}Nvۺ5?,4,pG2{Ϋoج?K\hydRuujܱN+*Ի9uDq`FTE\$^պ~W=]d;׏<='9Oc^Yxlq=^_Oȳ<:սn'}yRVk:ُ$䑳wyE)3 zS,IF$<}QD_9)Oȕ_1̕2 b q^WAO{<,1J6uqۨ~+ErV=.lִ^d=Aa7(\dӄB͞f)'|Mv)d̲^VHy>hЈjGrh}]KW ky77{4 ;$eA~ljBLMMȜQ8FM* Y7.;Tq8Ij(3(p((\ G~B ^M#{Uj*'RwhM0i1Zh"{l'S"p+:o3=ځMyOWzd%8<'E] sL ӡ'~ҺBflVR6Vfkr:"]+jHS"B&OB0Y~:GsELiZӶ0yG?Wmf Nlm2ǽg8;qfqI~WO\$yMwxȮn4C#?ɋ r7yiz$83yPj.A)ǘ ul!/3$6;(Ϊ9Jxb'#Q'(:Q?j9KX`x]=LY/;B貣@}!ic3Ԅ7nz=y >]’> stream xXmo~b|(0WpIت|iPHA&W:<&$.yYRPdrwvy{pq=lU7٥dskK%Kg9V"xls}__{z^_k_Ɓjfӫϛ&lS= z` #Fp$,Us.<+wk{ZޭE@F~Na΃2"k =?;e~m+̋v}Ǘ rKZpOf [v1iTmv h'8کv%<{U ]Ӭ9Ix꠳wouɖ!(hT=7$bp*_~YQ0SR NeE[V FtaھpCv<$U VF|׻| 0(j,$iJaݛnol`_I*"Z2܂DB8a3Aw{:YVήM}qzj+Gmb^@83)eأPEBW?^y7ƊZ:m굈WnzI(M̜y@,2m[eQC1nNo~ lK'h\>$D NP۟$Wx*7OW&Tnnr D?$>{>Bf{L(IJ>za@Vn/{ShLdI$ Iڜ;e Bȏ=&JXggk&= 1xwg|o]/Ifۑ3ɘ;t`%$ c XG4!ggA6i1z7@s_(u6@ MvvW`*-^x|BZRоB)@ j;Q8Vx~Bw't5r(#;?t*hکRdFׯ^}r3vJ@QI$728a%7ƹ?eY~:ډ- ٵ0V6vĿFp37h60{ʃݘ'_Re _<,ޟ70\|ʨxz||jmP5i5T'#W թ@b;஡[ 1JAb8VpK+ d)29b,.pan>7[OŘu<:N!=f44Oܞ ˹8SbUQ=Ϩ8#vr- n?&$Ӈ{ Ϳ\&šEHҩr u @|\",0F3LttoU٥1kgYN2fö%Φ87i~bN;n8v&66t7ʌz& (:_ Ͼݰ_#kendstream endobj 56 0 obj 1992 endobj 59 0 obj <> stream xXr}WLEZ~ڤ*kqbYb*0"l0e>:g0CQ.W6.}9} YCПڜ==P_?Ն<{}te:3φ,X^Ƽ(rs/->znhn~~E-sYv~enj<ԏFH`7\~`cVVjϞMfsQB6ε#,L2{qصЏ@(zJ}cO0n$;%~ޝϮOQ@/ȈwǘX~2#(S﫨F ns/A׽Y'6E"K=N߈;rպ&#}#qltyQQtkac{ZrD}݁h6VDlt@5X}fZ,gFL3=ꗢ.)%xNVp(oǦLi} o\~2d4FlE;ɞeRM}+#~c, DxtĉEj\ pj8۾V/Gg/u9Q$B^:i@ lvkF'M9U\wRql!]gBMJ۱ْz D/T_'-T2[hzwԇOk1:@p]5v4N1vș3w#4#)oID]=`޾# DR0hV[fk|_.{ 5 ,8x͡^k49|mՍ?I85ē/HݻI _>zԼzAACv+\'£e<R)8 M'"Q*oȣGYs2JIcy%zte:SV(2Gj$?+ NdfDi컬3,͏F-S~+mBFlS܏}~pߕ_kXJB1yǻ?HT'Ɲآ7$ c7s *, r~,ͧ١"-3$BCu& b{V@9Yg%ao@byL0=4(42L8Y :b[Mܲwmm(6,/'1G(=.|q1=Hb厅,WM|r)0hY}%H@vt\/^#ֲZF%'0pAoMO2GweHlhݰ?um/jGx0]lhkM’6Z_7-ItWTDpiFZ<:IBЩjDʮv|wT^Lt>J>}߷!3qS4h"pfS}GXÉ#t4Aѵ%pF Pendstream endobj 60 0 obj 2384 endobj 63 0 obj <> stream xXn}W8ݼ/Ml6&y4y=)T߆3#؅aHb7rN)g1,g_zτy4=ns[!^Vl_e.jSw2áXXZU5oW7Qn{, I1S;j{ٱ:hjD,ě9ZuBK!-dV^3=OI?v=kةV[Zk!$e,6ڬKdYSP/eu:H/,0'ml'XS\ 2m,ǽnǁ7 0ǶQ7Y5#cضɼپS?nn6)yis酽o*(*"\^3=ܪA35MD&4#e$JO-];ǩ/>ɜ󢤘HQĥ ]tӮEUFh40(6cڸԄ%q̋4=9#%/{P ois.xm*w &xeLvdh̢G](HV=Z2[2CW܁/1Z'EGo8¾3yZzjq-En,DX +8̊5Th폛qbFdBn'=N.5]ne)i2,ea=h'eq5;<ԭfh@d#w#(xPRi˗!4k;GcUYfިT`amGLnv8 e74~0HW*E燺Z k؃GlMD$UH),F{A ױ}"s}"x"9E[A$_ƃ/4j%[ԸygIxY&WdG\f< aYnJbڻ~dl1 zXU\0TAخ#uneGFMzٺx!}ͮԩ&WSDbĀW2@H_C̿ca4|_"P<нZ-E'ϪMxuH_%/ 9-; [ VxꠘRꪜx@G.y0E<'[qVYʋػ,awbq.LG"i]~ }1τi~Usa36t鍁=NdZn}lA89.U$|*@#yP: ސ 鉷Wt u*0c^r9ë!-EyRwEH}Ra4aV#Ά"]¿=:,Eumf$npI QiR{d]noOv~a3ܩRBi2^Fy1Jkף!5YOSnpҼ=vb;b4.'T5Qi0sDZwű%A>e ZIWĨU1DVlbRwq2r(:8*5!>@ޝX!-E?)0zم SPa򄣽r}X˅2οUE 8I\6ylnݷ{p? ļ?۟6ci|~AJ_&V$ Gh$BO 88/3E<z܍`vp)&rїp$F*`۲N -(7Ў⚼/Yɓ} !*b@|b̂Wq>zSgb|X'1P4Z=t{-BBK?=ڝhL$&hOĶp~EbfMgb̷s-pLXBoQX؛T%J;ļUvR6>>W9*~; }lYi@& lٯn~% e+؋}yC s`ʱx%CyHdYh]P)r&zIMOZ?X])2nIMJnqe(jBY'&8=EB~a?"endstream endobj 64 0 obj 2414 endobj 67 0 obj <> stream xXnF}W4*+ټd`wƛ&AjILH6lZ+,棷/5öKթSY|X| LeC.1#va2$#h,h&8,rG=.5|Zaxk2=ZX|ćb|_ʍqY~B=I,5MOȖ o{+" \fy?v _T%[J d!8$qۭЯPS^>,:튆;A'xU?QYՠ!Ӏs?6IkԣjR$МƤ[x[ 1 |<,!8my9 x=MUVDrOd -bGr oKup}45V8ʷ]/^<2^4yuypRM^*YB7vf^|2ŕ}]T-Uܾ{s{:[0Z\ /|^뿾28VoB0N 窗m#ZEp}şjaXl=hǮ|?/5'ePxVepBk[XL{H%Ȼ(Ѵ@BRxM\<s)ѹ+- P5]'ڍ^x:占ħ\I3 9L8^U#.k7U/J_C੒#cF"] T 84BK:y} OB${9!y4ig{;e B3 4pr; F &8TV |jFGm_蒧k (arl >AOh6Tz<@'qGvT9^ . bW˧'  Sx >.w#J㞜I-*$[5kUu.XIы#,"q=.p05ZZ1p|evfIG?S  )x2U0\Le+B'WaikהD.hr޴!2^kR(A|2jv U v Ү*Z!hȥ҆l^,}!I(k-eQtZ8`j  / FCWg:hk{&j^^rSysZȞF4$4EQDZ|nh~]f}1N07(AEUa,Ƽ?+οO`iN-Aa*4wn~^942/\G.eU(aDj?t4O>M1{66w/֮){7ov؁!hU{iM_5wS^Mk<$>t46, ;RA.x6n07]޶Y-ZH`0MJx.}/ ݓ  |8?tʹO_ ~7@*e_ 0c4IqD'ŲWz#{͑ABkc͵m[q"N<fUXW$In  uQendstream endobj 68 0 obj 1964 endobj 71 0 obj <> stream xX]s۸}ׯ@bj'DSLfҦɦkmg:N(XSB֪!?a7ӧǖMs/\b7:ʄy>rW!r={K%K!l4YavCWė9~2y35\e&MxC:~}kaGf̛tK lv s G{U\Wm/ 9UQ1 "^=yf)01xCauSKT{FCUla@<1 8C]wmzUscҶH2qK f7z6 ;gE.-/ߵlAc;YIE(dXy\?ڇ/^V *vV+IC 5B*#.h[1"Lv}>V(nD65yqxmq2"}Nnƭ][S.:eKM ǡVKT슑GซovA_Q.2 N1O &];u-iij̅jrۏʀL0IZbD,9afVTl#$둶єlk0B+'EBk5RT+ڙ .`qxl'gU{w>Tznތ]$N\Jhw*ozb0+s {nW uL3{jbm0Y.R,m ۪,A`i;S}UvT'INjaZm#/$seeYGҥ%U~´ gD3–eK2DQ0\5E=d`Ϯl5I(8f-|cu> \8Gѩ]!=y &/[774$^Vu<87#:ARv͗&Ы:'A߂b vlW5 ĸCO] ix6A`~@!≤H"K- dq?QS)&^| tY} ee^ie)-r(iwх}@[Y`g=WΏ{3W}>2yM8qOoz>eu W8I-cGhxV~K  ;t:}.*A8UZVS1iq\m[: {X!Fsh L;@]ޭYpujߒ==n O hr=tt" K7в ~[f_z΋vm#fȉZuVωXͮ{%%D|Q)VSąt{#|^[$TIoDc6ơ(` +7*b/-tmZIn=L_ww 6a"q,,R}en≯-#Jon-Q }YӋK tG&6!W!?[c3O礙ޠ4#r!NO)Hr51^Pk8SOjM\_}jq YOt{o0툁Eff:7NʖF.qp[e U-<ɾoofѨAwp)f׍206wDZc YFv`dp9@&oJ4EX\^iV5Q4;Kۻ.ottk{FWRgmgl5`?> stream xXmo_0`*L_EP傻9' 0V2ҊZGwfvd0 [<<3O]4OO,gWѰ֋~ |-ڀ!KrnAyYaqc_o`d௥& oG^,غ\8߾rA}mNbb$΃TWQEJ0v(=풝;-A.[z#BH@UqL5g8-in0ϥڢmQLÚ"/c[w9Ϧ871 =x?>Rx.+y+>yLyg7b6ʠH4`*?{=:JuL"?}ZdS>%zY~>- e6^~>©A~9A{yV޾~#Ft8/Rc/N1J*-Fe)bZp YB?ֳa"ٓ®1&-rXWi!YZf^|#l^i˧h> stream xYn}Wt@e7€c8Nh [&rH; əHCfKwթ:ZY}nvW>2a͎a}te}e,,/c^ly/`}"ovD?ǽ~)%yT JKpMOOR1?&mb-.'`bm;yjs @|2PSdQF`JH_T fKg(q̱(Z/13=y$7Ʀɧl^… pi hU;[Mp 0ؾQ bppwMcbMYbui >Lo)!jh~a;>aK ΖNƎF ЮV7 fa PA4Y@uӑ1no~ץȸ?N#~e4Yx[D.{6?2^&rXK[ւ n6kF,7O?2RzL#‘vF;4Mx %- ¯W‰zvDcw-=NZ5d Ic; go2zUy`S~՞Jh3|^L$>ZK(6^nb @Dq7Sϔ\mEiQAm1ssW?lGCۻK[ؘ-pKOc؆n(!93uZX!-O9(H*x@۾;;Ҿ֎aSЃ)g!- Kpk?R%-|2_Pw i;FIuhC=Zt!&qMOai<= v]cu`$Qn=ה47SwSe[N s,'c7C@Q(B%)8-W0tӎ;COB R6oLȤ8DDʗ%0N?'^f,Z%!iD=}M9Ǯ2.`/4O,,T0=3~2KqD݃9:"D^ܼԨM5LPYqZ߹¦n u<XWb,1mtq0\2)k嶻Cw!7ʒKT.> stream xXnF}W,܇PEry5ik.DZԢkreܕ ѝY^LNMQAww̙3C2_ aYd1|2_Nڽ. cN̋ #>o& +Y5.{6]߱^r%r2,M dNBD v+uCN!Fx=(^{A*.A+MD-.!Pf4QUFВ~/Vjs|Fbаۖ0BJ%иlׁ-ˋe1ia]x|#q=^Xr|zIUcKIAYphԋ`+A#XP*gP 3릺KSSD2vGsWkp,Q WzX+ǃ}*"FCJg3T<&tcdlTɤkT\M[9,L6m FnɡGcñv-)^ܧ͔V{.[0>sq@]a#(P=|xq7Ob{-Y*?R⠮nWLn_2lަG)3ڽ?;Zg:|Hy%MM>@I67  k9WAo|\GxHxd1I6T}sZ|ƍȫ!m6,gsvGAendstream endobj 84 0 obj 1574 endobj 87 0 obj <> stream xYnFU Ɯ=( x֋vm&ۅ,"e}r@,ou~}&4d8k7k lDZ|>=ِ&Ve *~x )=ΚwGa RbZ.f˝$o}vW뀶ACg-tM'e͵.? lK'/fGsw Sޔ(2]5V^n]樵ܝ$VEߵ KA[ W&:@`x P ~l6Ad=orc|! UEKt(U^G( ۆ7rS>)`F4x`bd9GX&͍?3tjm\3rĢiw OʞJPBV>L g*vA1B9QDa lDNEe9/494V`oxq5I Fgi#ش[W-бOculqy{J/%VD*zֲ9O6+NWۛk"4XbKd!^=F ‡F|݁dL >-?81n8pVK0}@uzȌF {s)"j!ݏAJVlW2r2]c_3؍L*m)3uT8Q*UQP:Xջ[wu83tYQC,7jse0@,,I(-)Q;”@RRrYA RfXٺX:q7|a ovQX$ܦ1byg3RKy~MC'm.JѼ5.KRI1 #LCgWHnfCab}XWAGҍ]&c?K5m=54Ӈj5[#mSF}A_6N8ǏprSj+Vjmoxxr'8bhQal:izFB2%e-fPT2C#PET(~3{P1g7-gzb鋑Mh P-V@HZR,l'3Vj=[fKH y^BM|b(g:sPc)MӣV<ȩ,5sQ]g8DO5aJǚzlct/]{N) .| M>ewyMlN^Q-Ђl7X!z9uLP2gy,ލe6hzV>ͨJ *6qer]P Ϩu;Qbdulq:EX8 e$iW8⬷vrgL >gL`sddgvF,dț3AոXBjHNo..)d[^Sn>V(V4ϰɌ~u@81/4 i$ʏ 91i p>GH8RTI4tڶwFS4BMu%.QJ#=;K h58˶^eQA0#S7Ą79*S;MCG!؇,õ:? _endstream endobj 88 0 obj 2354 endobj 91 0 obj <> stream xX]oܶ}_A@Lw_ n4+#E^ZrCQߐᇴ-y0;93<3sP_WWDWC%Iqpk)JJg9*v f8KcT/S͗~9B1I{)Aë.ÿb`!ŧEbD ^욍yaF!aμ"18~űY v[.V@I{I?ߺ])6,2$^ `TlvXv-mR!n3Bp2tL;*E{UkMp6Ň $8Lx^Ƈ}'O:̄h@f9GFi4씪EٸĮv+tq!P8 q2hD*5ŔRUo'Yd >=z1lY`l1q׎[.*Ɂǘئ혒g1hu4XI!x<0^E@ fm]-nc9l.d'1]r6Q܋Fq3 Kj7)룕BעK\r-ޗwǝjޟ_s='zܱjy>9/}ohh3]&\V>q[Ӂ[c. 1CXrp>Ev URu-`]DS_חɣq2k[>/E]kUGThod'<#XYvZt<;3a^u2) %KdڲVi7!83!0tUi#v]?Bf]Vw@~ԕ˙dS;OIuDL8ѹg ;Զ/ާ@327n80kxzJd|_r-pفs!Fkj.8,:ry+C,p:؎cLYxdo!*2#ؚ[}2P/F zWc_/\`^8=ƣ K?vַխgބ[q93ȩ: ~R"#XB`Y؃7Оn1lbMo\lk.u;T[787CWNH[ ^8xV@ k}6]#36s{ـ9)7korkۊHi2V|'5$s5Z1qmW+f~ŕ>ӁCmk9Ϋh.rRFݪo0(]wn=JM^PԀPokW[(Wd?ލ])?R{`h.@>`x3"tj維DbSvnh?1yєiؘ;?c)u:c:ytgPЍF~IVRيINMH#jD_6pwP3Iuwv)d4YnҲ {;$}Mw}Ð۳KxBuy; ڗzכo=J/J@孨qG͓CmVTXd0L 2V>͞>H2 dW~}zn"&!p}˸tb8 `Pqs`&O`"\{)3x(8h'W8zi#7ly45M5ni)4Rh# R7>”7`W\a'#}ݨn l> stream xePN0+F"# TQ%((6Q~oh%ۚٙJT]4 G*w$عWVmƂkN =(c & #y5T5hS23pK<2TX;~_vx*yaxUuUSϕ}4dhIOub~h8 vJ#ljZoK=I ʒ9(ԠAI ,#(!ґL,*=5=rendstream endobj 96 0 obj 279 endobj 7 0 obj <> /Contents 8 0 R >> endobj 18 0 obj <> /Contents 19 0 R >> endobj 22 0 obj <> /Contents 23 0 R >> endobj 26 0 obj <> /Contents 27 0 R >> endobj 30 0 obj <> /Contents 31 0 R >> endobj 34 0 obj <> /Contents 35 0 R >> endobj 38 0 obj <> /Contents 39 0 R >> endobj 42 0 obj <> /Contents 43 0 R >> endobj 46 0 obj <> /Contents 47 0 R >> endobj 50 0 obj <> /Contents 51 0 R >> endobj 54 0 obj <> /Contents 55 0 R >> endobj 58 0 obj <> /Contents 59 0 R >> endobj 62 0 obj <> /Contents 63 0 R >> endobj 66 0 obj <> /Contents 67 0 R >> endobj 70 0 obj <> /Contents 71 0 R >> endobj 74 0 obj <> /Contents 75 0 R >> endobj 78 0 obj <> /Contents 79 0 R >> endobj 82 0 obj <> /Contents 83 0 R >> endobj 86 0 obj <> /Contents 87 0 R >> endobj 90 0 obj <> /Contents 91 0 R >> endobj 94 0 obj <> /Contents 95 0 R >> endobj 3 0 obj << /Type /Pages /Kids [ 7 0 R 18 0 R 22 0 R 26 0 R 30 0 R 34 0 R 38 0 R 42 0 R 46 0 R 50 0 R 54 0 R 58 0 R 62 0 R 66 0 R 70 0 R 74 0 R 78 0 R 82 0 R 86 0 R 90 0 R 94 0 R ] /Count 21 /Rotate 0>> endobj 1 0 obj <> endobj 6 0 obj <> endobj 16 0 obj <> endobj 17 0 obj <> endobj 5 0 obj <>stream xkhD endstream endobj 4 0 obj <>stream xc` endstream endobj 21 0 obj <> endobj 25 0 obj <> endobj 29 0 obj <> endobj 33 0 obj <> endobj 37 0 obj <> endobj 41 0 obj <> endobj 45 0 obj <> endobj 49 0 obj <> endobj 53 0 obj <> endobj 57 0 obj <> endobj 61 0 obj <> endobj 65 0 obj <> endobj 69 0 obj <> endobj 73 0 obj <> endobj 77 0 obj <> endobj 81 0 obj <> endobj 85 0 obj <> endobj 89 0 obj <> endobj 93 0 obj <> endobj 97 0 obj <> endobj 98 0 obj <>stream xuXtSW}±Ȁ)@ ɤ;$;` lȒd~%YM-W\0L0B @0$ $L2$_?kf_#z_;{}~ 1:)L͟ QvQ4!h&Ju{LϘOD!jߐ#*L(oܹ+VD$㟈3TAH]*b^-ǍH2#SRRSMfEldD96̎XheLa8?"&G;gEΈt 1/ⷫ Xs]QvrNQjܴ1[GfI{wHIEX/8rYrOL$"DXIDEkD Cl%3Xb#bIA'v7yb7xXM0!'&kiDb, a@21Y=2+] jcfvԎȘ̓j}~Kkoq@y4 IoPr|OI}SNg$" hޅov޳QM`xƫfhCqO_mȿ~ yCMv#$ Z03~]txG^ƓI!A(8NLm3`y(KEgIa2lnR^ETX\jn1Vj0EE_AS9SJj0$ %E0\腛k!C,v+X*R trff+3DObww 6΀ jޑ3Zol1[&K(Aao^A ġЋa3h-]Q#S[n\<;`Eߨc=!%01i]oE@DGa4c|~])feH|;g_zrm<hRC2 ` G# k0 ICmL#qNM;jDܖ-Q+2^ZXi]qNRp =vré,)= a3@a,RYϔ%$E:ډm<Ε[ݐ e'Sz cIidw42oA/oE|@f[9C]緵uT"6Ci-ͼK/IG3>].8 mlv~R dWXHdvN}u/p v(d0`ݷYkfQ7MzCTv5<">HsɅp ppdݎ6pr~@ڤLOJLK9PhMz 8Y[**_N˝T ǫj'_:z*Z@ffުqb) YfZp.?*Hܥ)'7_W8:5< o ;f]8CqD' ęL7zk|Laƨ2%B`; Yp 3Zao(4wXѺBbcaj*fM\);EwJqn6뭯j쒕sD'I7\PXvn`6a P;y;>\yO< g_g=s W:aE;G\lC)5]!O[Eju1vvoXsMZp8nGI:OϹ Ewh{;']]:6߬f"``:2d; `4ty2P ~ ^m҅=_䧞@tX3΃ִH/Dc(ZJxkWJM[(akV /|/d N=3A3GBT%(5];ocPORo܆^[X=Zrea*G}1v1%V*:k٫?ZumzѬR:huf`; ٤6jZR;“;( p:WE`6afHf$A&;?KQ)e*5 s<>ٜVi X3cA٘#B8TN$dW`WHI Y5-uu-`+z8uao(EmA= pn/vaѽC7,ҥtസȁ=HIȶkip@3(8.ȡEc,WL}#p=<DL}e%Z@|><jB])V\'PVw<]%Kz]{B^mf"2Zykaj3($Eg=Tug^&~ fzh]B\) _ůJ/R&l@9GJkpYG(?#ѥpi/(#;cx3-fkʙZS1ݶt)ǚbո1:"N *eeMK_oޅUU\+X9T@2TfSnFFChxS&WɥUWi7ʤ0m ^FH l?YRYFzgVa-6bs_K:~znO~Oמ%ZAǰe2^ MpgZb6nѨ<$<3 dSO՛';/rOfW({jUc1Sm>o@o^/,dFAKO~x7#`Q`4k 1vSj4h JB4gi;XUٕ :*lHk5Ф/85Lz,|Mފ:Kcj_M 4bf*lȏ[ ͛m^@z}TpfYa;jheVp>G)IU@e%Y&Hz4MxfCg9!́͒(|6FשBJvf0~PϩSe &%O P?|/\1T( RYmunp"[ 4V")WT6CT4d\?V~ wBF71RhTFCNza F(z+>[nW^STf%ڌ4 !s&lY.Tuа\ƥ+2et0ɠ,t;?ťc8K8Ք: ߉Y8w썁S8ĔUJI/GbuA T\axTǝA4:zYFCE3:ab6*tb֤5MZz)V0"sJ.yp`}IhFѸu[5\MGnPï@V^w;S#{ 櫇-h+NĹ!zp k\*!zSslg% +q "{0q\4iĠ_v6uLtP05vJ|lt{|F\Omt§4{['HA{hH(HSL_||'N=?]}廅rQk0P4_( k$-]#C<ʭuhn:쀓WFc-z-NOZo{v fYdD8sa5N`WT8> |քK| -{bS2x%IeLmV? V&P h&6l .zlVC{;r%;C;@g r ymg}#xj<7VX C?e Ao.`? emm&>6GSYp3}120ؕX~$ ["ATU$kraGA&$ 9>'gA6;@9̡JROh8ɿ?|>FX8LgǍY#/ڼ+yQ^(Kv+OkÐgݐ{8h z~Wrw*wV+EXъªT_S lY4^7j]]!.0Ϭ{*,U endstream endobj 99 0 obj 5708 endobj 100 0 obj <>stream xXyXWASBGM2Q}ø%↬ K4;FP6A%g\]L$j47:y|_Nw~w~EJ$7sWh\5{""h< ?YOÿeZ75N8xH@وD:ZEt2PHG;fΜ;.]urU(iC VĻusyo޼=Ȁ8EbVyPh\~@QxIV\-߶.&kЇ;7QBn /rY6S (7j7AyS[EʃZC-<R%שU&5ZMM&P)G5j5eK^)]k6KmRlO͵+|sĦՍO{dqW_qwǏ>}8e9ljŷߘFΎq\ &-3'7P(vEe8VGH谕 !;V!3OG0~mͣւR27r=H"#B{Ԛ5ZVɈ5,+].B)0Fg#9q|"ƫ$ 5r3+8V!+ ȇhY\6|,*/: &_UnׂGr  ͸X4tb4V){ccDY^Q e=2G}z.t6FcOwƿ\wu 3(2B/SEgUd 2?S{P˪ Q FUVV44YSsN %f&8`ym> `vYmp 6<q1i]LʰAJv!D卧So]aƒ.^ejkqK8\+ QqAO~?%3#6\2f8ˏ-?(cy5awkqLdJ7[b KD`lc -%'kr@]*ᩅ -LocΟ0^ub-_N-0ƺnDǠi髳ț0++3mdn)j >0vXfțQ0h:}e&yOma=ct]3hQh:80b)vwNJfno#Ӱl@boH,h~?ϹK=C(-<3#`2~_h+?9~o;a <>O9jnK`I)a刍!n40Y&.X= V~e+atm<ٻ󗄼.3_bNV]߅9 ۽>ieyy.v$'iBYUT/Pn#wڵitZ%a_Uֱ"CO.wXoÿea9A@t$ L#+`U: c0A,>v/;|O5NsW=_ICK:@ `Sd:|QI_ͮO%9qD>6]Y ݌؃ꚁ:;Om7:v[2'x6CpF3S@=,aۓTfN;={'Is!}ә 4f+CqT[Wz!i[oVm]B?d&'$̬/JFX80 s3\ `#T]K%UҸK;@;͝pg٨|s0DX"`g(WҷkSzvē#ulVܙ25qxdaVT|xQc]uښ.²!7w u8?}G)o4A@ؘ8+[{9 PoP5f&xCb: YHek*aP,H-fSQBm'V%JGA@Wz3Y^.nk/JoFMZ+x@&X6pq!⌶ձ88x ĈS_.p2_iVhMXB֠W&#op8j,+EU xsP*}=S e-G[zdȢ0JMgD=G-쪑ylSrϮ}MeU-27ϙxcO.[N?rru4'B{gN`-IFXHc~ %[౒NtHt$/'CZ ʪڭdA6ŷK㌎/@IO/x LcSsQ6(J)eUa%qmXG?ٍ% g"cx/UvTteW6Ѵ s=!pDaAl{Y 5%T%}_yE8^1H,TImY& `G^PZ/xQ;8atT &ŷ܉[}-\R2jt;_ԴX4zK4qHş Ux/6X)4`O3OvOl琮D_#kT Oْ/Ir/`߆_Ew_$0V*iυ7bfs_=G*)iHw"x "k+тL2LHiz-fBBwv 2Γf5"{ +8db23IwǕ%[~z-pUZN˥]iɷ(:Ky䮬>BR>z,'I;B QDIBE$i:BY̠}i<ڊtI  7T1,8[%s=p*y"־Tz!Z5ɵdHfsd]\\rrwEDX>*f(:Q 6 `/ӛY&R!/; CZ6tD>h ja4S730>wا۳G|>vG:> JH!I~vJv97)mt¸&֢Q\M{?+;9T"6k">ܔx ͪ!+,EEᱨpp! hXK^͂5N+ yUYHI ~̯TLG^m2~PjRX+(ѡAh Y,KG( j3A9jL/~i:|i"m6]5\|(mL@k]w~SA=}muT }LhU&37Ӿ? tC>EO^Ai9YEwVeXXћW/fV @bZ-,ߤKtހUWZ▦ ՐT1M9%͛udp'|ŮTCWyyDV,.6@*3ϐG1 NN Ӱ”zb   !.O$~G^22 r$UaA- ?v{V=-tL[GHšZ =klh_B?{s 'CU{O>je.:"!]枋'N|f)upP%};GQJ^z/(q %Q_MfB0{d*2-bs3 W˵5dd#o\Pԯ ;w]pj^9,A85p }Gg4{\mhyHRBZԫR!n4[ פ˅P *T -+!h+o#խԳHZ2;O!B$2Ȏfrd!$ӗUϱ`ۺ>[7b'8K#7on=%u55dXD KnVg(SsҰ-~)&-W*$Ȭ/."]^'|MUΙx,#S9r!HuŰ٠9]!#?8ǀHFSyOS_q9~rkQn%vP߅ap$,ACv6Sw''q* Q9OAX6M-W-P&A,7$t}z۳473;&vꣁRȚQ ,^/|E2yUDRcvkQK8Yn9YUWڱ7@M\YYHgau$zĹ{cU^a ?xBp )?c:<.W)_~ӎ87b*3dwStYw\W[RK(E[">F h_Wͦs11g47r^z ܶ7,lR*I Pbʵjyjo?O ^ڴa7Xv>_]G7S/]N~z8Y5`bM ˟/Y`.ar}ǂO vw{dhM4Y^#|kьX%-"3G oF|ֆ8;2K{N 9'1!̕hMTJZ,b&^W$10F<]*lu&z TEv1LEqyqqQsAK]I̼d=>qu3 X4#̡yN\7/qL?y9 Hklon#oo#>\ǍqSowB endstream endobj 101 0 obj 5759 endobj 102 0 obj <>stream xzXYDl5;knªuu+vtiREDB' IH-%B7Qc]]u{qΰ~w~sy3̙ b$0l_ Aq\%
 K;v$m-(/1Ge漺i7Xk }͒hYlXHh-\~{BAhqPTjȰCv!8@iAv["â%v7g|e$b%ۅEE>؉8cev+E{&n5($!2 Quk&${ cĆl u=!}Gbޤ]RA+۰r rzL"k(:Go_z를m_۔)O͞%]}7lyfgG*xޔy9|?k%v<sg욱g͜;so{gBGd'Z& )Eg;Qdsm<^:;wvesbͩSY󴟞OE7&FWCeNnR:D7ƇuH;Zlǝ)^آTlʠ>< 7q3cߩy;(O"Qx.47%7[ >f7Xo,4K\h"EcRbi9Q*X@ 6B5rY(9{a%f(mVhjBiP*&@mBT}fHIO3CBNr2&AZ)r@'%Ņ_=z9) %|}`bmOq>y ۔]~In)>"KW+VPU(4l.kpm Jm=(DaʨOo&|HΚ[,Sw߆2[B\t'GupHP$Y\szˑU>^I!Em` z-o6ԚS%M2OYƜ0(UJ.O@E .y7TԖۘ7SRrVG$Ӫ4S."PL! ٵTY&,Y2:':#fC(90a΅;/?*T `l@ [fC3M ;f6*&:c wtClHO3 )`=sR{->/L+׀_hv ƏpԱ%]uI 9x:*pq25hE>بRgYq?'֪(F6v7XJj-4g '/EKTм3q lCi;,n-bpyk=0@3ka?3Y[ T/@#! &3^VŷMsB*)F]i t!΅B8}MJ<>m MI'ȅBXYFNS>0pqn9%YI+<_yf\L@5Eh)]z9mz 8twՑv. r&Z'5s>'q c `cڊ F0P&f?wtG(BYrL-S{4|xccjziVP~08we [Cs%]fX]ORYLSj8W8Jhƴ}n'OIQ`XbP*Y{ t`#0Dn"MLNI@{>rA764-| {x^akIbI[iV\!.s> OLq]'xSvr\U)HeTGxod.|}˗ cSڼ*w.43g}B+]QC{w]h:#No>OdeMSl >YPؾюw­YH >S<8j%UϺ9M4I qJLd?* ֓EU+abN:OBG);i$61{h[Ժh/p&~?E=q?'rs!C`Hqҧe@g$Xyl||h~+C[<s7>?B W`.~{Β3W0`sj0G. /<_vq: T#%bj{"[J^N;*|o%@@/\>(>EWII٪启.wixNx{^8ba~8gWԃd@ WvG7\ѸWwJ4`3=4_(Ԛ|ܦɸ2z}qaߜވJR _.8w 얾cr;ވ8f:RPACS`O@E<~0SV䒴}ċa,٨5 b]Glx#rqpr.Gν6z֖18_)+.Dm˗&P# M\Y5TؖX#ӿGBY*pog:S8Fgp<Ć|g-IPď..7n^t%\$ڌ(UHe)}I49zFz<V .ߘ#/}N>0grt ZM`4e([i>n˴mK`?"B-sc^..V@-*?q?-c"1Ճ~Y1{Jf9'^0{gw {Znq_[ZU:}56 !iGIօqww"H~hooes_  ZX.Vpy#^=,Vd+ #P(_NN˪Tӎ]70#k*{?L MPQBBǍ5^Z=w$UāH+,P-&֥֨$ -5P2\cvmlȬq荑;E$)WԁAoKЙ5}Ipfe#u![Dȇ4* 㾷D[З=Gq *#?,%6-YM rA!#p'iS]&E)OJW+<UV>9<6'DPǿjh.kkh7#`@D/;ݴ5p|Q{MUhƵ/TNTt WSw1z`wb@T]m e/X m,pA/#͘7AE2r ,,͔h!'z3Z5pw_ /4\'YR]!`7JeD2~_~}{CkpYtuApx 42h!=`j+"Ls1ktMLu6dl:Ij>pvxPU+$AB!D_|msvrvجQoD(L+R^0HjkڝPY;oͧPt0놅>̌Wqn, 6E_) `|+bUa"y~;S$or\s0gӻi1P_>SˈS4k4`Ow_8/ DcʝqÃ9<A` nc3")Nn1StF7ixFi5X(c"FL8cǍ0{~Ż YeM H2JutBdЁ"aURG GBjQ]= =U=RYz(>xs ӽr* ,#(ƙTߑOkWQ/?Ot@S|7]l`|e~̆KH|ElyJ= L:Q}%(kAMJ0DGEЃpʅ"X P=9@ R)Y{*3/(%*%Y N0Ӄ옙s 2Gd]q{X)j1^726>r nǵamoĉ*_UVP%@8u2_CTqTWfj^dK/>4fdࣶ+"M痉:Ez_#1@=(,.a'~e~a ƌEGZi+{* <3jTRNw VZ(˯/Gy߲{0reJ7@qPqhR&t0;cuFZKUuANa^]StCkupC^ --O;DMHR: ?/,L;iȌĔ8$5СQN8ecSָ̜ %OeU$GѼq>ZVL`6XziRj0g|o"a,;h_K?aMgrJ@h.KV1!^|u 2?UbML.ݦTY6tqTKr2L,Z)\egH :_\^tP`F&E{ٛ8-g"#ARy zz?&\A5ghqG$FfhSd$e_/k`4s1)fPjG$rԤg ]%I)4&C!|kdW3íowqb Ed_YAp5QyRC u5IZjUx嚫hXH5ULeP5-%$1Q1yIB=G:?Y"]kSr|20A6F#Aoo.LZfƵ5%'૒RgrJRW9Pþ^9TmLJdKc&Y"w݊jb|5D>ƒFȁGKO`uNl\ϖol`gJVv: :l}[_\K?TR[QQkԖ)*D)ƌbPD5;O.h|r%;q|\DTuBskMusslU޲νĮ6l$.$:ps mĠtXƠSnsk9T{$?qjmPt=fH!]-RW-H?SnSzmo3kCT۱[\o;;sV4<|66?[5<;bT}naNt[IMPB40z|4n'2͆o} OWЍ3Z:0٦l_s>iHTB4ێi5vTfOH'9p ~@/뻿D @A$ MN6قtUR'v=&baDM| &(eJlБo5 -k zb.ԚmQ0A,StRl4[tY PՑލ{WO鳪S-pA]dEJ%-FSu_/ EŔA}P EyB cű )z K[trPJ[˓.QX^ idw&զa%U$'U)қ5fUi:`l/u< FUuyqBVXX/)vT[]ZZ7V\ <3+ `h~UB> CH\ e#;y-,ʆuۀõE  -Xwɸ B?뛛!?1=Ib &zD=ӑ͸'cEU&fyWl`ad+0J ANI;9vn ~ئ]\CHKrDm TFӧY"Ta513Pmhh@5;Oʲ./ `~Kaq0hfUm9`]沘*׭w Z88@[H$j}}fao{13W6pp D>r/0tl;ն9z$gh\|XDS ybkӦEHLɁ.Б9q)FqicXxx_|Cfa:z "VzĢ 6p~y ۴2*S5NYh tFSGiե 4%8>2rԙ)Z4U#&_Q()Ł}/N(> v$wo!o겴JYbHBSWX ޳i!cgQHS\*{TE ':6q{[@u{y_±l?|n|}NsK/vm _ahWBgmpw߿s痪G㱖 =wڀVW~ aFY{9=q9yOpg}osIP-MU,o{`'7rl&0poAC%%ĠWE3[ATy A ءchx1 )3U* Vz]ʙszQEU]i??ʇöcc"bZZb.SYa#`-3O- ~ )FH@LlDZ7^vDdEd8䎒m0 m~FuC"!taْn[71~fC@oqtR1~W@+}vckpOmX |QRcF5o{??3P0"L!wd{lg\W[jmE.w?-_. FG F[c˘j1@#Uػ I`?!AUF+ʦJSFǍʚUp$\+:5 [+k񷕈sେANE3,ɮMy =[mW +z߮( 7?;":W? cGZefwv^/1 2}]N!XX,QlQѣ}1~+BMp /O8QV_}Q}7nB[֧9<9Y P.R%(R3d2!s&UUнl~+E)!i endstream endobj 103 0 obj 9003 endobj 15 0 obj <> endobj 104 0 obj <> endobj 13 0 obj <> endobj 11 0 obj <> endobj 105 0 obj <> endobj 14 0 obj <> endobj 12 0 obj <> endobj 10 0 obj <> endobj 2 0 obj <>endobj xref 0 106 0000000000 65535 f 0000051771 00000 n 0000077482 00000 n 0000051562 00000 n 0000052125 00000 n 0000051977 00000 n 0000051819 00000 n 0000048522 00000 n 0000000015 00000 n 0000002539 00000 n 0000076855 00000 n 0000075196 00000 n 0000076417 00000 n 0000074657 00000 n 0000076016 00000 n 0000074017 00000 n 0000051893 00000 n 0000051923 00000 n 0000048682 00000 n 0000002559 00000 n 0000005282 00000 n 0000052272 00000 n 0000048826 00000 n 0000005303 00000 n 0000008059 00000 n 0000052326 00000 n 0000048970 00000 n 0000008080 00000 n 0000010795 00000 n 0000052380 00000 n 0000049114 00000 n 0000010816 00000 n 0000013329 00000 n 0000052423 00000 n 0000049258 00000 n 0000013350 00000 n 0000015562 00000 n 0000052466 00000 n 0000049402 00000 n 0000015583 00000 n 0000017928 00000 n 0000052520 00000 n 0000049546 00000 n 0000017949 00000 n 0000020524 00000 n 0000052563 00000 n 0000049690 00000 n 0000020545 00000 n 0000023333 00000 n 0000052606 00000 n 0000049834 00000 n 0000023354 00000 n 0000026010 00000 n 0000052649 00000 n 0000049978 00000 n 0000026031 00000 n 0000028095 00000 n 0000052703 00000 n 0000050122 00000 n 0000028116 00000 n 0000030572 00000 n 0000052746 00000 n 0000050266 00000 n 0000030593 00000 n 0000033079 00000 n 0000052800 00000 n 0000050410 00000 n 0000033100 00000 n 0000035136 00000 n 0000052843 00000 n 0000050554 00000 n 0000035157 00000 n 0000037200 00000 n 0000052886 00000 n 0000050698 00000 n 0000037221 00000 n 0000039445 00000 n 0000052929 00000 n 0000050842 00000 n 0000039466 00000 n 0000041874 00000 n 0000052972 00000 n 0000050986 00000 n 0000041895 00000 n 0000043541 00000 n 0000053026 00000 n 0000051130 00000 n 0000043562 00000 n 0000045988 00000 n 0000053080 00000 n 0000051274 00000 n 0000046009 00000 n 0000048130 00000 n 0000053134 00000 n 0000051418 00000 n 0000048151 00000 n 0000048502 00000 n 0000053177 00000 n 0000053220 00000 n 0000059014 00000 n 0000059035 00000 n 0000064882 00000 n 0000064904 00000 n 0000073995 00000 n 0000074561 00000 n 0000075903 00000 n trailer << /Size 106 /Root 1 0 R /Info 2 0 R >> startxref 77622 %%EOF criticalmass-1.0.0.orig/curl/docs/curl.10000644000175000017500000015551110265631023017331 0ustar danieldaniel.\" ************************************************************************** .\" * _ _ ____ _ .\" * Project ___| | | | _ \| | .\" * / __| | | | |_) | | .\" * | (__| |_| | _ <| |___ .\" * \___|\___/|_| \_\_____| .\" * .\" * Copyright (C) 1998 - 2005, Daniel Stenberg, , et al. .\" * .\" * This software is licensed as described in the file COPYING, which .\" * you should have received as part of this distribution. The terms .\" * are also available at http://curl.haxx.se/docs/copyright.html. .\" * .\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell .\" * copies of the Software, and permit persons to whom the Software is .\" * furnished to do so, under the terms of the COPYING file. .\" * .\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY .\" * KIND, either express or implied. .\" * .\" * $Id: curl.1,v 1.155 2005/05/02 09:38:19 bagder Exp $ .\" ************************************************************************** .\" .TH curl 1 "28 Apr 2005" "Curl 7.14.0" "Curl Manual" .SH NAME curl \- transfer a URL .SH SYNOPSIS .B curl [options] .I [URL...] .SH DESCRIPTION .B curl is a tool to transfer data from or to a server, using one of the supported protocols (HTTP, HTTPS, FTP, FTPS, GOPHER, DICT, TELNET, LDAP or FILE). The command is designed to work without user interaction. curl offers a busload of useful tricks like proxy support, user authentication, ftp upload, HTTP post, SSL (https:) connections, cookies, file transfer resume and more. As you will see below, the amount of features will make your head spin! curl is powered by libcurl for all transfer-related features. See .BR libcurl (3) for details. .SH URL The URL syntax is protocol dependent. You'll find a detailed description in RFC 2396. You can specify multiple URLs or parts of URLs by writing part sets within braces as in: http://site.{one,two,three}.com or you can get sequences of alphanumeric series by using [] as in: ftp://ftp.numericals.com/file[1-100].txt ftp://ftp.numericals.com/file[001-100].txt (with leading zeros) ftp://ftp.letters.com/file[a-z].txt No nesting of the sequences is supported at the moment, but you can use several ones next to each other: http://any.org/archive[1996-1999]/vol[1-4]/part{a,b,c}.html You can specify any amount of URLs on the command line. They will be fetched in a sequential manner in the specified order. Curl will attempt to re-use connections for multiple file transfers, so that getting many files from the same server will not do multiple connects / handshakes. This improves speed. Of course this is only done on files specified on a single command line and cannot be used between separate curl invokes. .SH OPTIONS .IP "-a/--append" (FTP) When used in an FTP upload, this will tell curl to append to the target file instead of overwriting it. If the file doesn't exist, it will be created. If this option is used twice, the second one will disable append mode again. .IP "-A/--user-agent " (HTTP) Specify the User-Agent string to send to the HTTP server. Some badly done CGIs fail if its not set to "Mozilla/4.0". To encode blanks in the string, surround the string with single quote marks. This can also be set with the \fI-H/--header\fP option of course. If this option is set more than once, the last one will be the one that's used. .IP "--anyauth" (HTTP) Tells curl to figure out authentication method by itself, and use the most secure one the remote site claims it supports. This is done by first doing a request and checking the response-headers, thus inducing an extra network round-trip. This is used instead of setting a specific authentication method, which you can do with \fI--basic\fP, \fI--digest\fP, \fI--ntlm\fP, and \fI--negotiate\fP. (Added in 7.10.6) Note that using --anyauth is not recommended if you do uploads from stdin, since it may require data to be sent twice and then the client must be able to rewind. If the need should arise when uploading from stdin, the upload operation will fail. If this option is used several times, the following occurrences make no difference. .IP "-b/--cookie " (HTTP) Pass the data to the HTTP server as a cookie. It is supposedly the data previously received from the server in a "Set-Cookie:" line. The data should be in the format "NAME1=VALUE1; NAME2=VALUE2". If no '=' letter is used in the line, it is treated as a filename to use to read previously stored cookie lines from, which should be used in this session if they match. Using this method also activates the "cookie parser" which will make curl record incoming cookies too, which may be handy if you're using this in combination with the \fI-L/--location\fP option. The file format of the file to read cookies from should be plain HTTP headers or the Netscape/Mozilla cookie file format. \fBNOTE\fP that the file specified with \fI-b/--cookie\fP is only used as input. No cookies will be stored in the file. To store cookies, use the \fI-c/--cookie-jar\fP option or you could even save the HTTP headers to a file using \fI-D/--dump-header\fP! If this option is set more than once, the last one will be the one that's used. .IP "-B/--use-ascii" Enable ASCII transfer when using FTP or LDAP. For FTP, this can also be enforced by using an URL that ends with ";type=A". This option causes data sent to stdout to be in text mode for win32 systems. If this option is used twice, the second one will disable ASCII usage. .IP "--basic" (HTTP) Tells curl to use HTTP Basic authentication. This is the default and this option is usually pointless, unless you use it to override a previously set option that sets a different authentication method (such as \fI--ntlm\fP, \fI--digest\fP and \fI--negotiate\fP). (Added in 7.10.6) If this option is used several times, the following occurrences make no difference. .IP "--ciphers " (SSL) Specifies which ciphers to use in the connection. The list of ciphers must be using valid ciphers. Read up on SSL cipher list details on this URL: \fIhttp://www.openssl.org/docs/apps/ciphers.html\fP If this option is used several times, the last one will override the others. .IP "--compressed" (HTTP) Request a compressed response using one of the algorithms libcurl supports, and return the uncompressed document. If this option is used and the server sends an unsupported encoding, Curl will report an error. If this option is used several times, each occurrence will toggle it on/off. .IP "--connect-timeout " Maximum time in seconds that you allow the connection to the server to take. This only limits the connection phase, once curl has connected this option is of no more use. See also the \fI-m/--max-time\fP option. If this option is used several times, the last one will be used. .IP "-c/--cookie-jar " Specify to which file you want curl to write all cookies after a completed operation. Curl writes all cookies previously read from a specified file as well as all cookies received from remote server(s). If no cookies are known, no file will be written. The file will be written using the Netscape cookie file format. If you set the file name to a single dash, "-", the cookies will be written to stdout. .B NOTE If the cookie jar can't be created or written to, the whole curl operation won't fail or even report an error clearly. Using -v will get a warning displayed, but that is the only visible feedback you get about this possibly lethal situation. If this option is used several times, the last specified file name will be used. .IP "-C/--continue-at " Continue/Resume a previous file transfer at the given offset. The given offset is the exact number of bytes that will be skipped counted from the beginning of the source file before it is transferred to the destination. If used with uploads, the ftp server command SIZE will not be used by curl. Use "-C -" to tell curl to automatically find out where/how to resume the transfer. It then uses the given output/input files to figure that out. If this option is used several times, the last one will be used. .IP "--create-dirs" When used in conjunction with the -o option, curl will create the necessary local directory hierarchy as needed. This option creates the dirs mentioned with the -o option, nothing else. If the -o file name uses no dir or if the dirs it mentions already exist, no dir will be created. To create remote directories when using FTP, try \fI--ftp-create-dirs\fP. .IP "--crlf" (FTP) Convert LF to CRLF in upload. Useful for MVS (OS/390). If this option is used twice, the second will again disable crlf converting. .IP "-d/--data " (HTTP) Sends the specified data in a POST request to the HTTP server, in a way that can emulate as if a user has filled in a HTML form and pressed the submit button. Note that the data is sent exactly as specified with no extra processing (with all newlines cut off). The data is expected to be \&"url-encoded". This will cause curl to pass the data to the server using the content-type application/x-www-form-urlencoded. Compare to \fI-F/--form\fP. If this option is used more than once on the same command line, the data pieces specified will be merged together with a separating &-letter. Thus, using '-d name=daniel -d skill=lousy' would generate a post chunk that looks like \&'name=daniel&skill=lousy'. If you start the data with the letter @, the rest should be a file name to read the data from, or - if you want curl to read the data from stdin. The contents of the file must already be url-encoded. Multiple files can also be specified. Posting data from a file named 'foobar' would thus be done with \fI--data\fP @foobar". To post data purely binary, you should instead use the \fI--data-binary\fP option. \fI-d/--data\fP is the same as \fI--data-ascii\fP. If this option is used several times, the ones following the first will append data. .IP "--data-ascii " (HTTP) This is an alias for the \fI-d/--data\fP option. If this option is used several times, the ones following the first will append data. .IP "--data-binary " (HTTP) This posts data in a similar manner as \fI--data-ascii\fP does, although when using this option the entire context of the posted data is kept as-is. If you want to post a binary file without the strip-newlines feature of the \fI--data-ascii\fP option, this is for you. If this option is used several times, the ones following the first will append data. .IP "--digest" (HTTP) Enables HTTP Digest authentication. This is a authentication that prevents the password from being sent over the wire in clear text. Use this in combination with the normal \fI-u/--user\fP option to set user name and password. See also \fI--ntlm\fP, \fI--negotiate\fP and \fI--anyauth\fP for related options. (Added in curl 7.10.6) If this option is used several times, the following occurrences make no difference. .IP "--disable-eprt" (FTP) Tell curl to disable the use of the EPRT and LPRT commands when doing active FTP transfers. Curl will normally always first attempt to use EPRT, then LPRT before using PORT, but with this option, it will use PORT right away. EPRT and LPRT are extensions to the original FTP protocol, may not work on all servers but enable more functionality in a better way than the traditional PORT command. (Added in 7.10.5) If this option is used several times, each occurrence will toggle this on/off. .IP "--disable-epsv" (FTP) Tell curl to disable the use of the EPSV command when doing passive FTP transfers. Curl will normally always first attempt to use EPSV before PASV, but with this option, it will not try using EPSV. If this option is used several times, each occurrence will toggle this on/off. .IP "-D/--dump-header " Write the protocol headers to the specified file. This option is handy to use when you want to store the headers that a HTTP site sends to you. Cookies from the headers could then be read in a second curl invoke by using the \fI-b/--cookie\fP option! The \fI-c/--cookie-jar\fP option is however a better way to store cookies. When used on FTP, the ftp server response lines are considered being "headers" and thus are saved there. If this option is used several times, the last one will be used. .IP "-e/--referer " (HTTP) Sends the "Referer Page" information to the HTTP server. This can also be set with the \fI-H/--header\fP flag of course. When used with \fI-L/--location\fP you can append ";auto" to the referer URL to make curl automatically set the previous URL when it follows a Location: header. The \&";auto" string can be used alone, even if you don't set an initial referer. If this option is used several times, the last one will be used. .IP "--engine " Select the OpenSSL crypto engine to use for cipher operations. Use \fI--engine list\fP to print a list of build-time supported engines. Note that not all (or none) of the engines may be available at run-time. .IP "--environment" (RISC OS ONLY) Sets a range of environment variables, using the names the -w option supports, to easier allow extraction of useful information after having run curl. If this option is used several times, each occurrence will toggle this on/off. .IP "--egd-file " (HTTPS) Specify the path name to the Entropy Gathering Daemon socket. The socket is used to seed the random engine for SSL connections. See also the \fI--random-file\fP option. .IP "-E/--cert " (HTTPS) Tells curl to use the specified certificate file when getting a file with HTTPS. The certificate must be in PEM format. If the optional password isn't specified, it will be queried for on the terminal. Note that this certificate is the private key and the private certificate concatenated! If this option is used several times, the last one will be used. .IP "--cert-type " (SSL) Tells curl what certificate type the provided certificate is in. PEM, DER and ENG are recognized types. If this option is used several times, the last one will be used. .IP "--cacert " (HTTPS) Tells curl to use the specified certificate file to verify the peer. The file may contain multiple CA certificates. The certificate(s) must be in PEM format. curl recognizes the environment variable named 'CURL_CA_BUNDLE' if that is set, and uses the given path as a path to a CA cert bundle. This option overrides that variable. The windows version of curl will automatically look for a CA certs file named \'curl-ca-bundle.crt\', either in the same directory as curl.exe, or in the Current Working Directory, or in any folder along your PATH. If this option is used several times, the last one will be used. .IP "--capath " (HTTPS) Tells curl to use the specified certificate directory to verify the peer. The certificates must be in PEM format, and the directory must have been processed using the c_rehash utility supplied with openssl. Using \fI--capath\fP can allow curl to make https connections much more efficiently than using \fI--cacert\fP if the \fI--cacert\fP file contains many CA certificates. If this option is used several times, the last one will be used. .IP "-f/--fail" (HTTP) Fail silently (no output at all) on server errors. This is mostly done like this to better enable scripts etc to better deal with failed attempts. In normal cases when a HTTP server fails to deliver a document, it returns a HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and fail silently instead. If this option is used twice, the second will again disable silent failure. .IP "--ftp-account [data]" (FTP) When an FTP server asks for "account data" after user name and password has been provided, this data is sent off using the ACCT command. (Added in 7.13.0) If this option is used twice, the second will override the previous use. .IP "--ftp-create-dirs" (FTP) When an FTP URL/operation uses a path that doesn't currently exist on the server, the standard behavior of curl is to fail. Using this option, curl will instead attempt to create missing directories. (Added in 7.10.7) If this option is used twice, the second will again disable silent failure. .IP "--ftp-pasv" (FTP) Use PASV when transferring. PASV is the internal default behavior, but using this option can be used to override a previous --ftp-port option. (Added in 7.11.0) If this option is used twice, the second will again disable silent failure. .IP "--ftp-ssl" (FTP) Make the FTP connection switch to use SSL/TLS. (Added in 7.11.0) If this option is used twice, the second will again disable this. .IP "-F/--form " (HTTP) This lets curl emulate a filled in form in which a user has pressed the submit button. This causes curl to POST data using the Content-Type multipart/form-data according to RFC1867. This enables uploading of binary files etc. To force the 'content' part to be a file, prefix the file name with an @ sign. To just get the content part from a file, prefix the file name with the letter <. The difference between @ and < is then that @ makes a file get attached in the post as a file upload, while the < makes a text field and just get the contents for that text field from a file. Example, to send your password file to the server, where \&'password' is the name of the form-field to which /etc/passwd will be the input: \fBcurl\fP -F password=@/etc/passwd www.mypasswords.com To read the file's content from stdin instead of a file, use - where the file name should've been. This goes for both @ and < constructs. You can also tell curl what Content-Type to use by using 'type=', in a manner similar to: \fBcurl\fP -F "web=@index.html;type=text/html" url.com or \fBcurl\fP -F "name=daniel;type=text/foo" url.com You can also explicitly change the name field of an file upload part by setting filename=, like this: \fBcurl\fP -F "file=@localfile;filename=nameinpost" url.com See further examples and details in the MANUAL. This option can be used multiple times. .IP "--form-string " (HTTP) Similar to \fI--form\fP except that the value string for the named parameter is used literally. Leading \&'@' and \&'<' characters, and the \&';type=' string in the value have no special meaning. Use this in preference to \fI--form\fP if there's any possibility that the string value may accidentally trigger the \&'@' or \&'<' features of \fI--form\fP. .IP "-g/--globoff" This option switches off the "URL globbing parser". When you set this option, you can specify URLs that contain the letters {}[] without having them being interpreted by curl itself. Note that these letters are not normal legal URL contents but they should be encoded according to the URI standard. .IP "-G/--get" When used, this option will make all data specified with \fI-d/--data\fP or \fI--data-binary\fP to be used in a HTTP GET request instead of the POST request that otherwise would be used. The data will be appended to the URL with a '?' separator. If used in combination with -I, the POST data will instead be appended to the URL with a HEAD request. If used multiple times, nothing special happens. .IP "-h/--help" Usage help. .IP "-H/--header
" (HTTP) Extra header to use when getting a web page. You may specify any number of extra headers. Note that if you should add a custom header that has the same name as one of the internal ones curl would use, your externally set header will be used instead of the internal one. This allows you to make even trickier stuff than curl would normally do. You should not replace internally set headers without knowing perfectly well what you're doing. Replacing an internal header with one without content on the right side of the colon will prevent that header from appearing. See also the \fI-A/--user-agent\fP and \fI-e/--referer\fP options. This option can be used multiple times to add/replace/remove multiple headers. .IP "-i/--include" (HTTP) Include the HTTP-header in the output. The HTTP-header includes things like server-name, date of the document, HTTP-version and more... If this option is used twice, the second will again disable header include. .IP "--interface " Perform an operation using a specified interface. You can enter interface name, IP address or host name. An example could look like: curl --interface eth0:1 http://www.netscape.com/ If this option is used several times, the last one will be used. .IP "-I/--head" (HTTP/FTP/FILE) Fetch the HTTP-header only! HTTP-servers feature the command HEAD which this uses to get nothing but the header of a document. When used on a FTP or FILE file, curl displays the file size and last modification time only. If this option is used twice, the second will again disable header only. .IP "-j/--junk-session-cookies" (HTTP) When curl is told to read cookies from a given file, this option will make it discard all "session cookies". This will basically have the same effect as if a new session is started. Typical browsers always discard session cookies when they're closed down. (Added in 7.9.7) If this option is used several times, each occurrence will toggle this on/off. .IP "-k/--insecure" (SSL) This option explicitly allows curl to perform "insecure" SSL connections and transfers. Starting with curl 7.10, all SSL connections will be attempted to be made secure by using the CA certificate bundle installed by default. This makes all connections considered "insecure" to fail unless \fI-k/--insecure\fP is used. If this option is used twice, the second time will again disable it. .IP "--key " (SSL) Private key file name. Allows you to provide your private key in this separate file. If this option is used several times, the last one will be used. .IP "--key-type " (SSL) Private key file type. Specify which type your \fI--key\fP provided private key is. DER, PEM and ENG are supported. If this option is used several times, the last one will be used. .IP "--krb4 " (FTP) Enable kerberos4 authentication and use. The level must be entered and should be one of 'clear', 'safe', 'confidential' or 'private'. Should you use a level that is not one of these, 'private' will instead be used. This option requires that the library was built with kerberos4 support. This is not very common. Use \fI-V/--version\fP to see if your curl supports it. If this option is used several times, the last one will be used. .IP "-K/--config " Specify which config file to read curl arguments from. The config file is a text file in which command line arguments can be written which then will be used as if they were written on the actual command line. Options and their parameters must be specified on the same config file line. If the parameter is to contain white spaces, the parameter must be inclosed within quotes. If the first column of a config line is a '#' character, the rest of the line will be treated as a comment. Specify the filename as '-' to make curl read the file from stdin. Note that to be able to specify a URL in the config file, you need to specify it using the \fI--url\fP option, and not by simply writing the URL on its own line. So, it could look similar to this: url = "http://curl.haxx.se/docs/" This option can be used multiple times. When curl is invoked, it always (unless \fI-q\fP is used) checks for a default config file and uses it if found. The default config file is checked for in the following places in this order: 1) curl tries to find the "home dir": It first checks for the CURL_HOME and then the HOME environment variables. Failing that, it uses getpwuid() on unix-like systems (which returns the home dir given the current user in your system). On Windows, it then checks for the APPDATA variable, or as a last resort the '%USERPROFILE%\Application Data'. 2) On windows, if there is no _curlrc file in the home dir, it checks for one in the same dir the executable curl is placed. On unix-like systems, it will simply try to load .curlrc from the determined home dir. .IP "--limit-rate " Specify the maximum transfer rate you want curl to use. This feature is useful if you have a limited pipe and you'd like your transfer not use your entire bandwidth. The given speed is measured in bytes/second, unless a suffix is appended. Appending 'k' or 'K' will count the number as kilobytes, 'm' or M' makes it megabytes while 'g' or 'G' makes it gigabytes. Examples: 200K, 3m and 1G. If you are also using the \fI-Y/--speed-limit\fP option, that option will take precedence and might cripple the rate-limiting slightly, to help keeping the speed-limit logic working. This option was introduced in curl 7.10. If this option is used several times, the last one will be used. .IP "-l/--list-only" (FTP) When listing an FTP directory, this switch forces a name-only view. Especially useful if you want to machine-parse the contents of an FTP directory since the normal directory view doesn't use a standard look or format. This option causes an FTP NLST command to be sent. Some FTP servers list only files in their response to NLST; they do not include subdirectories and symbolic links. If this option is used twice, the second will again disable list only. .IP "-L/--location" (HTTP/HTTPS) If the server reports that the requested page has a different location (indicated with the header line Location:) this flag will let curl attempt to reattempt the get on the new place. If used together with \fI-i/--include\fP or \fI-I/--head\fP, headers from all requested pages will be shown. If authentication is used, curl will only send its credentials to the initial host, so if a redirect takes curl to a different host, it won't intercept the user+password. See also \fI--location-trusted\fP on how to change this. If this option is used twice, the second will again disable location following. .IP "--location-trusted" (HTTP/HTTPS) Like \fI-L/--location\fP, but will allow sending the name + password to all hosts that the site may redirect to. This may or may not introduce a security breach if the site redirects you do a site to which you'll send your authentication info (which is plaintext in the case of HTTP Basic authentication). If this option is used twice, the second will again disable location following. .IP "--max-filesize " Specify the maximum size (in bytes) of a file to download. If the file requested is larger than this value, the transfer will not start and curl will return with exit code 63. NOTE: The file size is not always known prior to download, and for such files this option has no effect even if the file transfer ends up being larger than this given limit. This concerns both FTP and HTTP transfers. .IP "-m/--max-time " Maximum time in seconds that you allow the whole operation to take. This is useful for preventing your batch jobs from hanging for hours due to slow networks or links going down. This doesn't work fully in win32 systems. See also the \fI--connect-timeout\fP option. If this option is used several times, the last one will be used. .IP "-M/--manual" Manual. Display the huge help text. .IP "-n/--netrc" Makes curl scan the \fI.netrc\fP file in the user's home directory for login name and password. This is typically used for ftp on unix. If used with http, curl will enable user authentication. See .BR netrc(4) or .BR ftp(1) for details on the file format. Curl will not complain if that file hasn't the right permissions (it should not be world nor group readable). The environment variable "HOME" is used to find the home directory. A quick and very simple example of how to setup a \fI.netrc\fP to allow curl to ftp to the machine host.domain.com with user name \&'myself' and password 'secret' should look similar to: .B "machine host.domain.com login myself password secret" If this option is used twice, the second will again disable netrc usage. .IP "--netrc-optional" Very similar to \fI--netrc\fP, but this option makes the .netrc usage \fBoptional\fP and not mandatory as the \fI--netrc\fP does. .IP "--negotiate" (HTTP) Enables GSS-Negotiate authentication. The GSS-Negotiate method was designed by Microsoft and is used in their web applications. It is primarily meant as a support for Kerberos5 authentication but may be also used along with another authentication methods. For more information see IETF draft draft-brezak-spnego-http-04.txt. (Added in 7.10.6) This option requires that the library was built with GSSAPI support. This is not very common. Use \fI-V/--version\fP to see if your version supports GSS-Negotiate. If this option is used several times, the following occurrences make no difference. .IP "-N/--no-buffer" Disables the buffering of the output stream. In normal work situations, curl will use a standard buffered output stream that will have the effect that it will output the data in chunks, not necessarily exactly when the data arrives. Using this option will disable that buffering. If this option is used twice, the second will again switch on buffering. .IP "--ntlm" (HTTP) Enables NTLM authentication. The NTLM authentication method was designed by Microsoft and is used by IIS web servers. It is a proprietary protocol, reversed engineered by clever people and implemented in curl based on their efforts. This kind of behavior should not be endorsed, you should encourage everyone who uses NTLM to switch to a public and documented authentication method instead. Such as Digest. (Added in 7.10.6) If you want to enable NTLM for your proxy authentication, then use \fI--proxy-ntlm\fP. This option requires that the library was built with SSL support. Use \fI-V/--version\fP to see if your curl supports NTLM. If this option is used several times, the following occurrences make no difference. .IP "-o/--output " Write output to instead of stdout. If you are using {} or [] to fetch multiple documents, you can use '#' followed by a number in the specifier. That variable will be replaced with the current string for the URL being fetched. Like in: curl http://{one,two}.site.com -o "file_#1.txt" or use several variables like: curl http://{site,host}.host[1-5].com -o "#1_#2" You may use this option as many times as you have number of URLs. See also the \fI--create-dirs\fP option to create the local directories dynamically. .IP "-O/--remote-name" Write output to a local file named like the remote file we get. (Only the file part of the remote file is used, the path is cut off.) The remote file name to use for saving is extracted from the given URL. Nothing else You may use this option as many times as you have number of URLs. .IP "--pass " (SSL) Pass phrase for the private key If this option is used several times, the last one will be used. .IP "--proxy-anyauth" Tells curl to pick a suitable authentication method when communicating with the given proxy. This will cause an extra request/response round-trip. Added in curl 7.13.2. If this option is used twice, the second will again disable the proxy use-any authentication. .IP "--proxy-basic" Tells curl to use HTTP Basic authentication when communicating with the given proxy. Use \fI--basic\fP for enabling HTTP Basic with a remote host. Basic is the default authentication method curl uses with proxies. If this option is used twice, the second will again disable proxy HTTP Basic authentication. .IP "--proxy-digest" Tells curl to use HTTP Digest authentication when communicating with the given proxy. Use \fI--digest\fP for enabling HTTP Digest with a remote host. If this option is used twice, the second will again disable proxy HTTP Digest. .IP "--proxy-ntlm" Tells curl to use HTTP NTLM authentication when communicating with the given proxy. Use \fI--ntlm\fP for enabling NTLM with a remote host. If this option is used twice, the second will again disable proxy HTTP NTLM. .IP "-p/--proxytunnel" When an HTTP proxy is used (\fI-x/--proxy\fP), this option will cause non-HTTP protocols to attempt to tunnel through the proxy instead of merely using it to do HTTP-like operations. The tunnel approach is made with the HTTP proxy CONNECT request and requires that the proxy allows direct connect to the remote port number curl wants to tunnel through to. If this option is used twice, the second will again disable proxy tunnel. .IP "-P/--ftp-port
" (FTP) Reverses the initiator/listener roles when connecting with ftp. This switch makes Curl use the PORT command instead of PASV. In practice, PORT tells the server to connect to the client's specified address and port, while PASV asks the server for an ip address and port to connect to.
should be one of: .RS .IP interface i.e "eth0" to specify which interface's IP address you want to use (Unix only) .IP "IP address" i.e "192.168.10.1" to specify exact IP number .IP "host name" i.e "my.host.domain" to specify machine .IP "-" (any single-letter string) to make it pick the machine's default .RE If this option is used several times, the last one will be used. Disable the use of PORT with \fI--ftp-pasv\fP. Disable the attempt to use the EPRT command instead of PORT by using \fI--disable-eprt\fP. EPRT is really PORT++. .IP "-q" If used as the first parameter on the command line, the \fIcurlrc\fP config file will not be read and used. See the \fI-K/--config\fP for details on the default config file search path. .IP "-Q/--quote " (FTP) Send an arbitrary command to the remote FTP server. Quote commands are sent BEFORE the transfer is taking place (just after the initial PWD command to be exact). To make commands take place after a successful transfer, prefix them with a dash '-'. To make commands get sent after libcurl has changed working directory, just before the transfer command(s), prefix the command with '+'. You may specify any amount of commands. If the server returns failure for one of the commands, the entire operation will be aborted. You must send syntactically correct FTP commands as RFC959 defines. This option can be used multiple times. .IP "--random-file " (HTTPS) Specify the path name to file containing what will be considered as random data. The data is used to seed the random engine for SSL connections. See also the \fI--egd-file\fP option. .IP "-r/--range " (HTTP/FTP) Retrieve a byte range (i.e a partial document) from a HTTP/1.1 or FTP server. Ranges can be specified in a number of ways. .RS .TP 10 .B 0-499 specifies the first 500 bytes .TP .B 500-999 specifies the second 500 bytes .TP .B -500 specifies the last 500 bytes .TP .B 9500 specifies the bytes from offset 9500 and forward .TP .B 0-0,-1 specifies the first and last byte only(*)(H) .TP .B 500-700,600-799 specifies 300 bytes from offset 500(H) .TP .B 100-199,500-599 specifies two separate 100 bytes ranges(*)(H) .RE (*) = NOTE that this will cause the server to reply with a multipart response! You should also be aware that many HTTP/1.1 servers do not have this feature enabled, so that when you attempt to get a range, you'll instead get the whole document. FTP range downloads only support the simple syntax 'start-stop' (optionally with one of the numbers omitted). It depends on the non-RFC command SIZE. If this option is used several times, the last one will be used. .IP "-R/--remote-time" When used, this will make libcurl attempt to figure out the timestamp of the remote file, and if that is available make the local file get that same timestamp. If this option is used twice, the second time disables this again. .IP "--retry " If a transient error is returned when curl tries to perform a transfer, it will retry this number of times before giving up. Setting the number to 0 makes curl do no retries (which is the default). Transient error means either: a timeout, an FTP 5xx response code or an HTTP 5xx response code. When curl is about to retry a transfer, it will first wait one second and then for all forthcoming retries it will double the waiting time until it reaches 10 minutes which then will be the delay between the rest of the retries. By using \fI--retry-delay\fP you disable this exponential backoff algorithm. See also \fI--retry-max-time\fP to limit the total time allowed for retries. (Option added in 7.12.3) If this option is used multiple times, the last occurrence decide the amount. .IP "--retry-delay " Make curl sleep this amount of time between each retry when a transfer has failed with a transient error (it changes the default backoff time algorithm between retries). This option is only interesting if \fI--retry\fP is also used. Setting this delay to zero will make curl use the default backoff time. (Option added in 7.12.3) If this option is used multiple times, the last occurrence decide the amount. .IP "--retry-max-time " The retry timer is reset before the first transfer attempt. Retries will be done as usual (see \fI--retry\fP) as long as the timer hasn't reached this given limit. Notice that if the timer hasn't reached the limit, the request will be made and while performing, it may take longer than this given time period. To limit a single request\'s maximum time, use \fI-m/--max-time\fP. Set this option to zero to not timeout retries. (Option added in 7.12.3) If this option is used multiple times, the last occurrence decide the amount. .IP "-s/--silent" Silent mode. Don't show progress meter or error messages. Makes Curl mute. If this option is used twice, the second will again disable mute. .IP "-S/--show-error" When used with -s it makes curl show error message if it fails. If this option is used twice, the second will again disable show error. .IP "--socks " Use the specified SOCKS5 proxy. If the port number is not specified, it is assumed at port 1080. (Option added in 7.11.1) This option overrides any previous use of \fI-x/--proxy\fP, as they are mutually exclusive. If this option is used several times, the last one will be used. .IP "--stderr " Redirect all writes to stderr to the specified file instead. If the file name is a plain '-', it is instead written to stdout. This option has no point when you're using a shell with decent redirecting capabilities. If this option is used several times, the last one will be used. .IP "--tcp-nodelay" Turn on the TCP_NODELAY option. See the \fIcurl_easy_setopt(3)\fP man page for details about this option. (Added in 7.11.2) If this option is used several times, each occurrence toggles this on/off. .IP "-t/--telnet-option " Pass options to the telnet protocol. Supported options are: TTYPE= Sets the terminal type. XDISPLOC= Sets the X display location. NEW_ENV= Sets an environment variable. .IP "-T/--upload-file " This transfers the specified local file to the remote URL. If there is no file part in the specified URL, Curl will append the local file name. NOTE that you must use a trailing / on the last directory to really prove to Curl that there is no file name or curl will think that your last directory name is the remote file name to use. That will most likely cause the upload operation to fail. If this is used on a http(s) server, the PUT command will be used. Use the file name "-" (a single dash) to use stdin instead of a given file. Before 7.10.8, when this option was used several times, the last one was used. In curl 7.10.8 and later, you can specify one -T for each URL on the command line. Each -T + URL pair specifies what to upload and to where. curl also supports "globbing" of the -T argument, meaning that you can upload multiple files to a single URL by using the same URL globbing style supported in the URL, like this: curl -T "{file1,file2}" http://www.uploadtothissite.com or even curl -T "img[1-1000].png" ftp://ftp.picturemania.com/upload/ .IP "--trace " Enables a full trace dump of all incoming and outgoing data, including descriptive information, to the given output file. Use "-" as filename to have the output sent to stdout. If this option is used several times, the last one will be used. (Added in 7.9.7) .IP "--trace-ascii " Enables a full trace dump of all incoming and outgoing data, including descriptive information, to the given output file. Use "-" as filename to have the output sent to stdout. This is very similar to \fI--trace\fP, but leaves out the hex part and only shows the ASCII part of the dump. It makes smaller output that might be easier to read for untrained humans. If this option is used several times, the last one will be used. (Added in 7.9.7) .IP "--trace-time" Prepends a time stamp to each trace or verbose line that curl displays. If this option is used several times, each occurrence will toggle it on/off. (Added in 7.14.0 ) .IP "-u/--user " Specify user and password to use for server authentication. Overrides \fI-n/--netrc\fP and \fI--netrc-optional\fP. If this option is used several times, the last one will be used. .IP "-U/--proxy-user " Specify user and password to use for proxy authentication. If this option is used several times, the last one will be used. .IP "--url " Specify a URL to fetch. This option is mostly handy when you want to specify URL(s) in a config file. This option may be used any number of times. To control where this URL is written, use the \fI-o/--output\fP or the \fI-O/--remote-name\fP options. .IP "-v/--verbose" Makes the fetching more verbose/talkative. Mostly usable for debugging. Lines starting with '>' means "header data" sent by curl, '<' means "header data" received by curl that is hidden in normal cases and lines starting with '*' means additional info provided by curl. Note that if you only want HTTP headers in the output, \fI-i/--include\fP might be option you're looking for. If you think this option still doesn't give you enough details, consider using \fI--trace\fP or \fI--trace-ascii\fP instead. If this option is used twice, the second will again disable verbose. .IP "-V/--version" Displays information about curl and the libcurl version it uses. The first line includes the full version of curl, libcurl and other 3rd party libraries linked with the executable. The second line (starts with "Protocols:") shows all protocols that libcurl reports to support. The third line (starts with "Features:") shows specific features libcurl reports to offer. Available features include: .RS .IP "IPv6" You can use IPv6 with this. .IP "krb4" Krb4 for ftp is supported. .IP "SSL" HTTPS and FTPS are supported. .IP "libz" Automatic decompression of compressed files over HTTP is supported. .IP "NTLM" NTLM authentication is supported. .IP "GSS-Negotiate" Negotiate authentication is supported. .IP "Debug" This curl uses a libcurl built with Debug. This enables more error-tracking and memory debugging etc. For curl-developers only! .IP "AsynchDNS" This curl uses asynchronous name resolves. .IP "SPNEGO" SPNEGO Negotiate authentication is supported. .IP "Largefile" This curl supports transfers of large files, files larger than 2GB. .IP "IDN" This curl supports IDN - international domain names. .IP "SSPI" SSPI is supported. If you use NTLM and set a blank user name, curl will authenticate with your current user and password. .RE .IP "-w/--write-out " Defines what to display after a completed and successful operation. The format is a string that may contain plain text mixed with any number of variables. The string can be specified as "string", to get read from a particular file you specify it "@filename" and to tell curl to read the format from stdin you write "@-". The variables present in the output format will be substituted by the value or text that curl thinks fit, as described below. All variables are specified like %{variable_name} and to output a normal % you just write them like %%. You can output a newline by using \\n, a carriage return with \\r and a tab space with \\t. .B NOTE: The %-letter is a special letter in the win32-environment, where all occurrences of % must be doubled when using this option. Available variables are at this point: .RS .TP 15 .B url_effective The URL that was fetched last. This is mostly meaningful if you've told curl to follow location: headers. .TP .B http_code The numerical code that was found in the last retrieved HTTP(S) page. .TP .B http_connect The numerical code that was found in the last response (from a proxy) to a curl CONNECT request. (Added in 7.12.4) .TP .B time_total The total time, in seconds, that the full operation lasted. The time will be displayed with millisecond resolution. .TP .B time_namelookup The time, in seconds, it took from the start until the name resolving was completed. .TP .B time_connect The time, in seconds, it took from the start until the connect to the remote host (or proxy) was completed. .TP .B time_pretransfer The time, in seconds, it took from the start until the file transfer is just about to begin. This includes all pre-transfer commands and negotiations that are specific to the particular protocol(s) involved. .TP .B time_redirect The time, in seconds, it took for all redirection steps include name lookup, connect, pretransfer and transfer before final transaction was started. time_redirect shows the complete execution time for multiple redirections. (Added in 7.12.3) .TP .B time_starttransfer The time, in seconds, it took from the start until the first byte is just about to be transferred. This includes time_pretransfer and also the time the server needs to calculate the result. .TP .B size_download The total amount of bytes that were downloaded. .TP .B size_upload The total amount of bytes that were uploaded. .TP .B size_header The total amount of bytes of the downloaded headers. .TP .B size_request The total amount of bytes that were sent in the HTTP request. .TP .B speed_download The average download speed that curl measured for the complete download. .TP .B speed_upload The average upload speed that curl measured for the complete upload. .TP .B content_type The Content-Type of the requested document, if there was any. (Added in 7.9.5) .TP .B num_connects Number of new connects made in the recent transfer. (Added in 7.12.3) .TP .B num_redirects Number of redirects that were followed in the request. (Added in 7.12.3) .RE If this option is used several times, the last one will be used. .IP "-x/--proxy " Use specified HTTP proxy. If the port number is not specified, it is assumed at port 1080. This option overrides existing environment variables that sets proxy to use. If there's an environment variable setting a proxy, you can set proxy to \&"" to override it. \fBNote\fP that all operations that are performed over a HTTP proxy will transparently be converted to HTTP. It means that certain protocol specific operations might not be available. This is not the case if you can tunnel through the proxy, as done with the \fI-p/--proxytunnel\fP option. If this option is used several times, the last one will be used. .IP "-X/--request " (HTTP) Specifies a custom request to use when communicating with the HTTP server. The specified request will be used instead of the standard GET. Read the HTTP 1.1 specification for details and explanations. (FTP) Specifies a custom FTP command to use instead of LIST when doing file lists with ftp. If this option is used several times, the last one will be used. .IP "-y/--speed-time