Changes to 'refs/tags/rhnlib-2.5.47-1'
by Jan Pazdziora
Tag 'rhnlib-2.5.47-1' created by Jan Pazdziora <jpazdziora(a)redhat.com> at 2011-10-28 10:16 +0000
Tagging package [rhnlib] version [2.5.47-1] in directory [client/rhel/rhnlib/].
Changes since rhn-virtualization-5.4.29-1:
Jan Pazdziora (3):
600527 - for kickstart session (re)activation keys, always set the deployConfigs to false.
600527 - during kickstart, check if at least one activation key allows config files to be deployed upon registration.
Automatic commit of package [rhnlib] release [2.5.47-1].
---
backend/server/rhnServer/server_kickstart.py | 14 ++++++++++
client/rhel/rhnlib/rhnlib.spec | 6 +++-
java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java | 11 -------
java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java | 5 +--
rel-eng/packages/rhnlib | 2 -
5 files changed, 23 insertions(+), 15 deletions(-)
---
12 years, 6 months
client/rhel rel-eng/packages
by Jan Pazdziora
client/rhel/rhnlib/rhnlib.spec | 6 +++++-
rel-eng/packages/rhnlib | 2 +-
2 files changed, 6 insertions(+), 2 deletions(-)
New commits:
commit df365d76aeaa06221121c8437e32566168e7b6c2
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 28 12:16:14 2011 +0200
Automatic commit of package [rhnlib] release [2.5.47-1].
diff --git a/client/rhel/rhnlib/rhnlib.spec b/client/rhel/rhnlib/rhnlib.spec
index 327d119..12db525 100644
--- a/client/rhel/rhnlib/rhnlib.spec
+++ b/client/rhel/rhnlib/rhnlib.spec
@@ -4,7 +4,7 @@ Summary: Python libraries for the RHN project
Name: rhnlib
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 2.5.46
+Version: 2.5.47
Release: 1%{?dist}
Group: Development/Libraries
@@ -61,6 +61,10 @@ rm -rf $RPM_BUILD_ROOT
%{python_sitelib}/*
%changelog
+* Fri Oct 28 2011 Jan Pazdziora 2.5.47-1
+- Do not rely on exact amount of memomory when determinig PASS/FAIL
+ (jhutar(a)redhat.com)
+
* Mon Oct 24 2011 Martin Minar <mminar(a)redhat.com> 2.5.46-1
- simplify code (msuchy(a)redhat.com)
- move imports to beginning of file (msuchy(a)redhat.com)
diff --git a/rel-eng/packages/rhnlib b/rel-eng/packages/rhnlib
index a7aed51..9816c82 100644
--- a/rel-eng/packages/rhnlib
+++ b/rel-eng/packages/rhnlib
@@ -1 +1 @@
-2.5.46-1 client/rhel/rhnlib/
+2.5.47-1 client/rhel/rhnlib/
12 years, 6 months
2 commits - backend/server java/code
by Jan Pazdziora
backend/server/rhnServer/server_kickstart.py | 14 ++++++++++
java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java | 11 -------
java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java | 5 +--
3 files changed, 17 insertions(+), 13 deletions(-)
New commits:
commit 197126b6b6aaeac65c51253523a5180d08361e9d
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Thu Oct 27 14:07:42 2011 +0200
600527 - during kickstart, check if at least one activation key allows config files to be deployed upon registration.
diff --git a/backend/server/rhnServer/server_kickstart.py b/backend/server/rhnServer/server_kickstart.py
index 91be103..b878032 100644
--- a/backend/server/rhnServer/server_kickstart.py
+++ b/backend/server/rhnServer/server_kickstart.py
@@ -349,6 +349,20 @@ def schedule_config_deploy(server_id, action_id, kickstart_session_id,
else:
aid = action_id
+ tokens_obj = rhnFlags.get("registration_token")
+ if not tokens_obj:
+ log_debug(3, "Failed to get the registration_token")
+ return aid
+ else:
+ tokens_obj = rhnFlags.get("registration_token")
+ deployment = false
+ for token in tokens_obj.tokens:
+ if token['deploy_configs'] == 'Y':
+ deployment = true
+ break
+ if not deployment:
+ return aid
+
next_action_id = rhnAction.schedule_server_action(
server_id,
action_type='configfiles.deploy',
commit 0e4e633f225466f45cb48d2d6db3458c135d1c76
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 16:55:58 2011 +0200
600527 - for kickstart session (re)activation keys, always set the deployConfigs to false.
After a change for bug 557581, only one activation key with
rhnregtoken.deploy_configs set to Y is enough for configuration to
start deploying. We need to give the user a chance to check the
Configuration File Deployment
in user activation key explicitly.
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
index 4278e89..5ccd2ab 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
@@ -684,12 +684,6 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
note = "Automatically generated activation key.";
}
- boolean cfgMgmtFlag =
- this.getKsdata()
- .getKickstartDefaults()
- .getCfgManagementFlag()
- .booleanValue();
-
RegistrationType regType = getKsdata().getRegistrationType(user);
if (regType.equals(RegistrationType.REACTIVATION)) {
@@ -698,7 +692,6 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
this.ksdata,
RegistrationType.REACTIVATION.equals(regType) ? getTargetServer() : null,
this.kickstartSession,
- cfgMgmtFlag,
1L,
note);
}
@@ -853,7 +846,6 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
* @param ksdata associated with the key
* @param server being kickstarted (can be null)
* @param session associated with the kickstart (NOT NULL)
- * @param deployConfigs if you want to or not
* @param note to add to key
* @param usageLimit to apply to the key. null for unlimited.
* @return ActivationKey that has been saved to the DB.
@@ -862,7 +854,6 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
KickstartData ksdata,
Server server,
KickstartSession session,
- boolean deployConfigs,
Long usageLimit,
String note) {
@@ -870,7 +861,7 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
ActivationKey key = ActivationKeyManager.getInstance().
createNewReActivationKey(creator, server, note, session);
key.addEntitlement(ServerConstants.getServerGroupTypeProvisioningEntitled());
- key.setDeployConfigs(deployConfigs);
+ key.setDeployConfigs(false);
key.setUsageLimit(usageLimit);
if (KickstartVirtualizationType.paraHost().
equals(ksdata.getKickstartDefaults().getVirtualizationType())) {
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
index 7b0e909..22022a5 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
@@ -27,7 +27,6 @@ import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.domain.user.UserFactory;
import com.redhat.rhn.manager.profile.ProfileManager;
-import org.apache.commons.lang.BooleanUtils;
import org.apache.log4j.Logger;
import java.util.Date;
@@ -94,8 +93,8 @@ public class KickstartSessionCreateCommand {
log.debug("creating one-time-activation key: " + user.getLogin());
ActivationKey key = KickstartScheduleCommand.createKickstartActivationKey(user,
ksdata, null,
- this.ksession, BooleanUtils.toBoolean(
- ksdata.getKickstartDefaults().getCfgManagementFlag()), null, note);
+ this.ksession,
+ null, note);
log.debug("added key: " + key.getKey());
// Need to add child channels to the key so when kickstarting the
12 years, 6 months
Branch 'ipv6' - 99 commits - backend/satellite_tools backend/server backend/spacewalk-backend.spec client/rhel client/tools java/buildconf java/code java/conf java/spacewalk-java.spec monitoring/PerlModules proxy/installer proxy/proxy rel-eng/packages rel-eng/releasers.conf search-server/spacewalk-search spacecmd/spacecmd.spec spacecmd/src spacewalk/spacewalk-setup-jabberd
by Milan Zazrivec
backend/satellite_tools/satsync.py | 24
backend/server/rhnServer/server_hardware.py | 2
backend/spacewalk-backend.spec | 5
client/rhel/rhn-client-tools/rhn-client-tools.spec | 10
client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py | 9
client/rhel/rhn-client-tools/src/up2date_client/hardware.py | 2
client/rhel/rhn-client-tools/src/up2date_client/hardware_hal.py | 4
client/rhel/rhnlib/rhnlib.spec | 6
client/rhel/rhnlib/test/24-ssl-memleak.py | 16
client/rhel/yum-rhn-plugin/actions/packages.py | 10
client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec | 6
client/tools/osad/osad.spec | 5
client/tools/osad/src/osad.py | 2
client/tools/rhn-virtualization/rhn-virtualization.spec | 11
client/tools/rhn-virtualization/virtualization/domain_control.py | 2
client/tools/rhn-virtualization/virtualization/domain_directory.py | 2
client/tools/rhn-virtualization/virtualization/poller.py | 6
client/tools/rhn-virtualization/virtualization/support.py | 4
client/tools/rhncfg/actions/configfiles.py | 11
client/tools/rhncfg/rhncfg.spec | 6
dev/null |binary
java/buildconf/build-props.xml | 2
java/buildconf/build-taskdefs.xml | 2
java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml | 2
java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java | 2
java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java | 28
java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml | 6
java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java | 6
java/code/src/com/redhat/rhn/domain/server/Device.java | 1
java/code/src/com/redhat/rhn/frontend/action/channel/manage/RepositoriesAction.java | 2
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 7
java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java | 125
java/code/src/com/redhat/rhn/frontend/xmlrpc/configchannel/ConfigChannelHandler.java | 6
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java | 6
java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java | 3
java/code/src/com/redhat/rhn/manager/channel/repo/BaseRepoCommand.java | 2
java/code/src/com/redhat/rhn/manager/kickstart/KickstartCloneCommand.java | 2
java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java | 6
java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java | 2
java/code/src/com/redhat/rhn/taskomatic/TaskomaticApi.java | 9
java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp | 2
java/code/webapp/WEB-INF/pages/systems/systemsearch.jsp | 2
java/conf/rhn.xml | 3
java/conf/rhn6.xml | 22
java/spacewalk-java.spec | 35
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/BUILD | 53
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.c | 117
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.pm | 207
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.xs | 79
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/COPYRIGHT | 67
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Changes | 48
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/MANIFEST | 11
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile | 759 ---
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile.PL | 13
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/README | 173
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/_blowfish.c | 478 --
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/Crypt/Blowfish.pm | 207
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/man3/Crypt::Blowfish.3 | 330 -
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blowfish.h | 6
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/files.txt | 4
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/test.pl | 281 -
monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/typemap | 1
monitoring/PerlModules/CPAN/Crypt-DES-2.03/BUILD | 52
monitoring/PerlModules/CPAN/Crypt-DES-2.03/COPYRIGHT | 50
monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.pm | 172
monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.xs | 90
monitoring/PerlModules/CPAN/Crypt-DES-2.03/MANIFEST | 10
monitoring/PerlModules/CPAN/Crypt-DES-2.03/Makefile.PL | 16
monitoring/PerlModules/CPAN/Crypt-DES-2.03/README | 83
monitoring/PerlModules/CPAN/Crypt-DES-2.03/_des.c | 591 --
monitoring/PerlModules/CPAN/Crypt-DES-2.03/des.h | 7
monitoring/PerlModules/CPAN/Crypt-DES-2.03/test.pl | 370 -
monitoring/PerlModules/CPAN/Crypt-DES-2.03/typemap | 1
monitoring/PerlModules/CPAN/DBD-Pg-0.95/BUILD | 47
monitoring/PerlModules/CPAN/DBD-Pg-0.95/Changes | 238 -
monitoring/PerlModules/CPAN/DBD-Pg-0.95/MANIFEST | 13
monitoring/PerlModules/CPAN/DBD-Pg-0.95/Makefile.PL | 63
monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.h | 46
monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.pm | 1162 -----
monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.xs | 592 --
monitoring/PerlModules/CPAN/DBD-Pg-0.95/README | 158
monitoring/PerlModules/CPAN/DBD-Pg-0.95/README.win32 | 75
monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbd-pg.pod | 411 -
monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.c | 1725 -------
monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.h | 73
monitoring/PerlModules/CPAN/DBD-Pg-0.95/eg/ApacheDBI.pl | 70
monitoring/PerlModules/CPAN/DBD-Pg-0.95/test.pl | 462 --
monitoring/PerlModules/CPAN/Error-0.15/BUILD | 44
monitoring/PerlModules/CPAN/Error-0.15/ChangeLog | 73
monitoring/PerlModules/CPAN/Error-0.15/Error.pm | 750 ---
monitoring/PerlModules/CPAN/Error-0.15/Error.ppd | 10
monitoring/PerlModules/CPAN/Error-0.15/MANIFEST | 9
monitoring/PerlModules/CPAN/Error-0.15/Makefile.PL | 29
monitoring/PerlModules/CPAN/Error-0.15/README | 91
monitoring/PerlModules/CPAN/Error-0.15/example | 51
monitoring/PerlModules/CPAN/Error-0.15/t/01throw.t | 25
monitoring/PerlModules/CPAN/Error-0.15/t/02order.t | 47
monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/BUILD | 46
monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Changes | 59
monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/MANIFEST | 6
monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Makefile.PL | 9
monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/README | 64
monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/lib/HTML/TableExtract.pm | 1902 --------
monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/test.pl | 607 --
monitoring/PerlModules/CPAN/IO-stringy-1.219/BUILD | 42
monitoring/PerlModules/CPAN/IO-stringy-1.219/MANIFEST | 32
monitoring/PerlModules/CPAN/IO-stringy-1.219/Makefile.PL | 22
monitoring/PerlModules/CPAN/IO-stringy-1.219/README | 183
monitoring/PerlModules/CPAN/IO-stringy-1.219/README.system | 8
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/AtomicFile.pm.html | 101
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/InnerFile.pm.html | 126
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Lines.pm.html | 103
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Scalar.pm.html | 387 -
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/ScalarArray.pm.html | 338 -
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Stringy.pm.html | 315 -
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Wrap.pm.html | 169
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/WrapTie.pm.html | 418 -
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index-menu.html | 31
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.html | 13
monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.menu | 30
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/AtomicFile.pm | 190
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/InnerFile.pm | 274 -
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Lines.pm | 148
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Scalar.pm | 674 ---
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/ScalarArray.pm | 598 --
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Stringy.pm | 290 -
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Wrap.pm | 211
monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/WrapTie.pm | 480 --
monitoring/PerlModules/CPAN/IO-stringy-1.219/t/Common.pm | 255 -
monitoring/PerlModules/CPAN/IO-stringy-1.219/t/ExtUtils/TBone.pm | 534 --
monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Lines.t | 43
monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Scalar.t | 121
monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_ScalarArray.t | 49
monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_WrapTie.t | 66
monitoring/PerlModules/CPAN/MIME-tools-5.410/BUILD | 46
monitoring/PerlModules/CPAN/MIME-tools-5.410/COPYING | 40
monitoring/PerlModules/CPAN/MIME-tools-5.410/INSTALLING | 26
monitoring/PerlModules/CPAN/MIME-tools-5.410/MANIFEST | 202
monitoring/PerlModules/CPAN/MIME-tools-5.410/Makefile.PL | 26
monitoring/PerlModules/CPAN/MIME-tools-5.410/README | 1434 ------
monitoring/PerlModules/CPAN/MIME-tools-5.410/README-OR-DIE | 75
monitoring/PerlModules/CPAN/MIME-tools-5.410/README.system | 8
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Body.pm.html | 492 --
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder.pm.html | 514 --
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Base64.pm.html | 84
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Binary.pm.html | 77
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Gzip64.pm.html | 89
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/NBit.pm.html | 147
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/QuotedPrint.pm.html | 85
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/UU.pm.html | 78
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Entity.pm.html | 1501 ------
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ConTraEnc.pm.html | 66
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContDisp.pm.html | 66
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContType.pm.html | 167
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ParamVal.pm.html | 181
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Head.pm.html | 709 ---
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser.pm.html | 1051 ----
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Filer.pm.html | 540 --
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Reader.pm.html | 62
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Results.pm.html | 125
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Tools.pm.html | 2038 ---------
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/WordDecoder.pm.html | 274 -
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Words.pm.html | 240 -
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index-menu.html | 81
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.html | 13
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.menu | 101
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeabuse.html | 52
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimedump.html | 53
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeencode.html | 60
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeexplode.html | 86
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimepostcard.html | 60
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeprint.html | 63
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeref.html | 64
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesend.html | 61
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesender.html | 56
monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimetour.html | 53
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/README | 10
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeabuse | 53
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimedump | 99
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeencode | 57
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeexplode | 133
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimepostcard | 113
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeprint | 85
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeref | 145
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesend | 150
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesender | 48
monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimetour | 56
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Body.pm | 680 ---
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder.pm | 640 --
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Base64.pm | 134
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Binary.pm | 85
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Gzip64.pm | 112
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/NBit.pm | 160
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/QuotedPrint.pm | 109
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/UU.pm | 151
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Entity.pm | 2242 ----------
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ConTraEnc.pm | 59
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContDisp.pm | 64
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContType.pm | 202
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ParamVal.pm | 307 -
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Head.pm | 907 ----
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser.pm | 1937 --------
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Filer.pm | 922 ----
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Reader.pm | 306 -
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Results.pm | 198
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Tools.pm | 2002 --------
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/WordDecoder.pm | 618 --
monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Words.pm | 406 -
monitoring/PerlModules/CPAN/MIME-tools-5.410/patch | 16
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Body.t | 105
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Decoder.t | 88
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Entity.t | 339 -
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/ExtUtils/TBone.pm | 534 --
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Gauntlet.t | 122
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Globby.pm | 32
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Head.t | 167
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Misc.t | 119
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Parser.t | 134
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Ref.t | 275 -
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Tmpfile.topt | 32
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/WordDecoder.t | 45
monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Words.t | 44
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/ak-0696.msg | 112
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.txt | 173
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.uu | 139
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badbound.msg | 160
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badfile.msg | 8
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/crlf.hdr | 17
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/encoded.hdr | 7
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/first.hdr | 7
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/fun.txt | 24
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/german.msg | 79
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/infinite.msg | 92
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/intl.msg | 12
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/jt-0498.msg | 107
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/lennie.msg | 81
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-lg.b64 | 548 --
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-sm.b64 | 222
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mp-msg-rfc822.msg | 112
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-2gifs.msg | 58
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-bad.msg | 181
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-badnames.msg | 30
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-clen.msg | 38
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-digest.msg | 23
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor.msg | 198
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor2.msg | 198
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested.msg | 89
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested2.msg | 89
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested3.msg | 89
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-simple.msg | 23
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/not-mime.msg | 17
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil.b64 | 8
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil2.b64 | 4
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/quot-print.body | 41
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/second.hdr | 15
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/short.txt | 6
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig | 5
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig-uu.msg | 29
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig2 | 6
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig3 | 6
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msg | 20
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgb | 13
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgh | 7
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/third.hdr | 16
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/up.gif.uu | 6
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/words.txt | 44
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.body | 5
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.msg | 13
monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/zeegee.gif.uu | 111
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-nest.ref | 34
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-none.ref | 26
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-replace.ref | 29
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696.msg | 112
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.msg | 138
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.ref | 39
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.msg | 100
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.ref | 15
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.msg | 78
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.ref | 45
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/frag.msg | 1230 -----
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.msg | 79
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.ref | 16
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.msg | 15
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.ref | 12
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.msg | 58
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.ref | 36
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.msg | 57
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.ref | 39
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.msg | 40
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.ref | 33
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.msg | 30
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.ref | 39
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-frag.msg | 90
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.msg | 198
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.ref | 43
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.msg | 198
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.ref | 43
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.msg | 89
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.ref | 68
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.msg | 89
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.ref | 68
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.msg | 89
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.ref | 68
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.msg | 23
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.ref | 27
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.msg | 56
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.ref | 35
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.msg | 33
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.ref | 33
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.msg | 7
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.ref | 12
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.msg | 20
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.ref | 16
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-extracted.ref | 45
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-target.msg | 182
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.msg | 168
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.ref | 26
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.msg | 125
monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.ref | 34
proxy/installer/rhn-proxy-activate.sgml | 1
proxy/installer/spacewalk-proxy-installer.spec | 9
proxy/installer/squid.conf | 12
proxy/proxy/pm/rhn_package_manager.sgml | 1
proxy/proxy/rhn-proxy.sgml | 1
proxy/proxy/spacewalk-proxy.spec | 5
rel-eng/packages/osad | 2
rel-eng/packages/rhn-client-tools | 2
rel-eng/packages/rhn-virtualization | 2
rel-eng/packages/rhncfg | 2
rel-eng/packages/rhnlib | 2
rel-eng/packages/spacecmd | 2
rel-eng/packages/spacewalk-backend | 2
rel-eng/packages/spacewalk-java | 2
rel-eng/packages/spacewalk-proxy | 2
rel-eng/packages/spacewalk-proxy-installer | 2
rel-eng/packages/spacewalk-search | 2
rel-eng/packages/spacewalk-setup-jabberd | 2
rel-eng/packages/yum-rhn-plugin | 2
rel-eng/releasers.conf | 3
search-server/spacewalk-search/spacewalk-search.spec | 5
search-server/spacewalk-search/src/config/com/redhat/satellite/search/db/server.xml | 2
spacecmd/spacecmd.spec | 5
spacecmd/src/lib/system.py | 2
spacewalk/spacewalk-setup-jabberd/share/jabberd/s2s.xsl | 19
spacewalk/spacewalk-setup-jabberd/spacewalk-setup-jabberd.spec | 5
345 files changed, 303 insertions(+), 53664 deletions(-)
New commits:
commit 26f8a75351599245919db1ce1cd4b821068bc5b9
Merge: 115a7ec 679dee4
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 17:09:10 2011 +0200
Merge branch 'master' into ipv6
commit 679dee4c73727db3ee0c14a9e6aa1e3cbd1c3cb0
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 16:19:27 2011 +0200
Automatic commit of package [rhn-virtualization] release [5.4.29-1].
diff --git a/client/tools/rhn-virtualization/rhn-virtualization.spec b/client/tools/rhn-virtualization/rhn-virtualization.spec
index 2aebabd..4feddff 100644
--- a/client/tools/rhn-virtualization/rhn-virtualization.spec
+++ b/client/tools/rhn-virtualization/rhn-virtualization.spec
@@ -10,7 +10,7 @@ License: GPLv2
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 5.4.28
+Version: 5.4.29
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -134,6 +134,9 @@ rm -rf $RPM_BUILD_ROOT
%doc LICENSE
%changelog
+* Thu Oct 27 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.4.29-1
+- 742811 - domain_directory: R/O access to libvirtd is sufficient
+
* Wed Oct 26 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.4.28-1
- 742811 - don't open RW connection to libvirt unless necessary
diff --git a/rel-eng/packages/rhn-virtualization b/rel-eng/packages/rhn-virtualization
index 0905e4c..3efa35e 100644
--- a/rel-eng/packages/rhn-virtualization
+++ b/rel-eng/packages/rhn-virtualization
@@ -1 +1 @@
-5.4.28-1 client/tools/rhn-virtualization/
+5.4.29-1 client/tools/rhn-virtualization/
commit 1afa65491cda208e3078a3ba4864584c4be7856c
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 15:50:25 2011 +0200
add missing import
diff --git a/client/rhel/rhn-client-tools/src/up2date_client/hardware.py b/client/rhel/rhn-client-tools/src/up2date_client/hardware.py
index 0ccc99e..f2e68d8 100644
--- a/client/rhel/rhn-client-tools/src/up2date_client/hardware.py
+++ b/client/rhel/rhn-client-tools/src/up2date_client/hardware.py
@@ -15,7 +15,7 @@
# This thing gets the hardware configuraion out of a system
"""Used to read hardware info from kudzu, /proc, etc"""
-from socket import gethostname, AF_INET, AF_INET6
+from socket import gethostname, getaddrinfo, AF_INET, AF_INET6
import socket
import re
import os
commit fc890e3d54f21cf0498677d31e7bd672e71334b8
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 14:56:14 2011 +0200
typo fix
diff --git a/backend/server/rhnServer/server_hardware.py b/backend/server/rhnServer/server_hardware.py
index dd044e1..82a18ce 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -690,7 +690,7 @@ class Hardware:
return 0
def save_hardware_byid(self, sysid):
- """ ave the hardware list """
+ """Save the hardware list """
log_debug(3, sysid, "changed = %s" % self.__changed)
hardware = self.__hardware
if hardware == {}: # nothing loaded
commit 8ef8022f01ad030b0650d802fa7687977b25827b
Merge: 40fba98 6f9a0a2
Author: Jan Hutar <jhutar(a)redhat.com>
Date: Thu Oct 27 13:16:38 2011 +0200
Merge branch 'master' of ssh://git.fedorahosted.org/git/spacewalk
commit 40fba986fc41301a45fa8862e0567ad3ec66b171
Author: Jan Hutar <jhutar(a)redhat.com>
Date: Thu Oct 27 13:15:43 2011 +0200
Do not rely on exact amount of memomory when determinig PASS/FAIL
diff --git a/client/rhel/rhnlib/test/24-ssl-memleak.py b/client/rhel/rhnlib/test/24-ssl-memleak.py
index 387c740..88f9fed 100755
--- a/client/rhel/rhnlib/test/24-ssl-memleak.py
+++ b/client/rhel/rhnlib/test/24-ssl-memleak.py
@@ -20,24 +20,30 @@ def main():
except:
pass
server_url = "https://" + server_name + "/APPLET"
- diff_count = 0
mem_usage = None
+ mem_usage_VmSize_max = None
+ mem_usage_VmSize_first = None
+ mem_usage_VmSize_allowed_percent = 0.1 # [%] allowed gain of first -> max
for i in range(10000):
run_test(server_url, ca_cert)
if i % 100 == 0:
new_mem_usage = mem_usage_int()
if mem_usage is not None:
- if mem_usage[1] != new_mem_usage[1]:
- diff_count = diff_count + 1
+ if new_mem_usage[1] > mem_usage_VmSize_max:
+ mem_usage_VmSize_max = new_mem_usage[1]
+ else:
+ mem_usage_VmSize_max = new_mem_usage[1]
+ mem_usage_VmSize_first = new_mem_usage[1]
mem_usage = new_mem_usage
print "memory usage: %s %s %s" % mem_usage[1:4]
- if diff_count > 4:
+ percent = float((mem_usage_VmSize_max - mem_usage_VmSize_first)) / (float(mem_usage_VmSize_first) / 100)
+ if percent >= mem_usage_VmSize_allowed_percent:
# Failure
print "Test FAILS"
- return diff_count
+ return 1
print "Test PASSES"
return 0
commit 6f9a0a2692973012cb8dfefcbfb60ded810da409
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 16:47:09 2011 +0200
The KickstartSessionCreateCommand is duplicated in KickstartWizardHelper.
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java
index 18e370a..9bfa4ec 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java
@@ -28,7 +28,6 @@ import com.redhat.rhn.domain.token.ActivationKeyFactory;
import com.redhat.rhn.domain.token.Token;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.manager.kickstart.KickstartFormatter;
-import com.redhat.rhn.manager.kickstart.KickstartSessionCreateCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper;
@@ -1171,11 +1170,6 @@ public class KickstartData {
cloned.setNoBase(this.getNoBase());
cloned.setIgnoreMissing(this.getIgnoreMissing());
- //create a new session one
- KickstartSessionCreateCommand cmd = new KickstartSessionCreateCommand(
- user.getOrg(), cloned);
- cmd.store();
-
}
// Helper method to copy KickstartCommands
commit edcae0f1385122767616df7c98bdf67e7a69200d
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 15:23:38 2011 +0200
For the default_session, use better note in rhnregtoken table.
Instead of
Kickstart re-activation key for .
say
Default session activation key for profile rhel-5-7.
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 8ce44ad..fda871a 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -6627,6 +6627,13 @@ Follow this url to see the full list of inactive systems:
</context-group>
</trans-unit>
+ <trans-unit id="kickstart.profile.default_session">
+ <source>Default session activation key for profile {0}.</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/kickstart/CreateProfileWizard.do</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="kickstart.session.newprofile">
<source>Profile for kickstart session {0}.</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
index baf55a0..7b0e909 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
@@ -89,7 +89,7 @@ public class KickstartSessionCreateCommand {
User user = UserFactory.findRandomOrgAdmin(owner);
log.debug("Got random orgadmin: " + user.getLogin());
String note = LocalizationService.getInstance().
- getMessage("kickstart.session.newtokennote", " ");
+ getMessage("kickstart.profile.default_session", ksdata.getLabel());
log.debug("creating one-time-activation key: " + user.getLogin());
ActivationKey key = KickstartScheduleCommand.createKickstartActivationKey(user,
commit 6be24fcf6d83540542dc003060985e119ba15f69
Author: Christian Berendt <berendt(a)b1-systems.de>
Date: Thu Oct 27 11:42:47 2011 +0200
declare net.sf.antcontrib.logic.For task to fix create-webapp-dir
diff --git a/java/buildconf/build-taskdefs.xml b/java/buildconf/build-taskdefs.xml
index bca9305..a4d16b5 100644
--- a/java/buildconf/build-taskdefs.xml
+++ b/java/buildconf/build-taskdefs.xml
@@ -35,6 +35,8 @@
<taskdef resource="net/sf/antcontrib/antcontrib.properties"
classpathref="buildjars"/>
+ <taskdef name="for" classname="net.sf.antcontrib.logic.For" onerror="report"/>
+
<property name="init-taskdefs.notrequired" value="true" />
<!-- ======================= EMMA Tasks ========================== -->
commit 631fa35d6b642f9c6a687020ad31fa975e969741
Author: Christian Berendt <berendt(a)b1-systems.de>
Date: Thu Oct 27 11:35:16 2011 +0200
adding xalan-j2 to the build.jar.dependencies property
diff --git a/java/buildconf/build-props.xml b/java/buildconf/build-props.xml
index 03cfc8e..5b81131 100644
--- a/java/buildconf/build-props.xml
+++ b/java/buildconf/build-props.xml
@@ -80,7 +80,7 @@
<property name="build.jar.dependencies"
value="ant ant-junit ${ant-contrib.path} antlr
${common.jar.dependencies} tanukiwrapper ${tomcat-jars} ${jasper-jars}
- concurrent" />
+ concurrent xalan-j2" />
<property name="run.jar.dependencies"
value="antlr ${asm} cglib c3p0 commons-discovery dom4j jaf jta
commit e86ed29355375fa9d90366732980e8a9e3cf9276
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:56 2011 +0200
Revert "schema change"
This reverts commit 780ba79c8d5edb50c312b522c6b8972db0d812a3.
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
deleted file mode 100644
index 6db6d3b..0000000
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ /dev/null
@@ -1,38 +0,0 @@
---
--- Copyright (c) 2011 Red Hat, Inc.
---
--- This software is licensed to you under the GNU General Public License,
--- version 2 (GPLv2). There is NO WARRANTY for this software, express or
--- implied, including the implied warranties of MERCHANTABILITY or FITNESS
--- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
--- along with this software; if not, see
--- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
---
--- Red Hat trademarks are not licensed under GPLv2. No permission is
--- granted to use or replicate Red Hat trademarks that are incorporated
--- in this software or its documentation.
---
-
-
-CREATE TABLE rhnServerNetAddress4
-(
- interface_id NUMBER NOT NULL
- CONSTRAINT rhn_srv_net_iaddress4_iid_fk
- REFERENCES rhnServerNetInterface (id),
- address VARCHAR2(64),
- netmask VARCHAR2(64),
- broadcast VARCHAR2(64),
- created DATE
- DEFAULT (sysdate) NOT NULL,
- modified DATE
- DEFAULT (sysdate) NOT NULL
-)
-ENABLE ROW MOVEMENT
-;
-
-CREATE INDEX rhn_srv_net_address4_iid_address_idx
- ON rhnServerNetAddress4 (interface_id, address)
- TABLESPACE [[8m_tbs]];
-
-ALTER TABLE rhnServerNetAddress4
- ADD CONSTRAINT rhn_srv_net_address4_iid_address_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
deleted file mode 100644
index dce721d..0000000
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ /dev/null
@@ -1,38 +0,0 @@
---
--- Copyright (c) 2011 Red Hat, Inc.
---
--- This software is licensed to you under the GNU General Public License,
--- version 2 (GPLv2). There is NO WARRANTY for this software, express or
--- implied, including the implied warranties of MERCHANTABILITY or FITNESS
--- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
--- along with this software; if not, see
--- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
---
--- Red Hat trademarks are not licensed under GPLv2. No permission is
--- granted to use or replicate Red Hat trademarks that are incorporated
--- in this software or its documentation.
---
-
-
-CREATE TABLE rhnServerNetAddress6
-(
- interface_id NUMBER NOT NULL
- CONSTRAINT rhn_srv_net_iaddress6_iid_fk
- REFERENCES rhnServerNetInterface (id),
- address VARCHAR2(45),
- netmask VARCHAR2(49),
- scope VARCHAR2(64),
- created DATE
- DEFAULT (sysdate) NOT NULL,
- modified DATE
- DEFAULT (sysdate) NOT NULL
-)
-ENABLE ROW MOVEMENT
-;
-
-CREATE INDEX rhn_srv_net_address6_iid_scope_address_idx
- ON rhnServerNetAddress4 (interface_id, scope, address)
- TABLESPACE [[8m_tbs]];
-
-ALTER TABLE rhnServerNetAddress6
- ADD CONSTRAINT rhn_srv_net_address6_iid_scope_address_uq UNIQUE (interface_id, scope, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetInterface.sql b/schema/spacewalk/common/tables/rhnServerNetInterface.sql
index 6d73c23..f115885 100644
--- a/schema/spacewalk/common/tables/rhnServerNetInterface.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetInterface.sql
@@ -1,5 +1,5 @@
--
--- Copyright (c) 2008 -- 2011 Red Hat, Inc.
+-- Copyright (c) 2008 Red Hat, Inc.
--
-- This software is licensed to you under the GNU General Public License,
-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
@@ -16,13 +16,13 @@
CREATE TABLE rhnServerNetInterface
(
- id NUMBER NOT NULL
- CONSTRAINT rhn_srv_net_iface_id_pk PRIMARY KEY
- USING INDEX TABLESPACE [[4m_tbs]],
server_id NUMBER NOT NULL
CONSTRAINT rhn_srv_net_iface_sid_fk
REFERENCES rhnServer (id),
name VARCHAR2(32) NOT NULL,
+ ip_addr VARCHAR2(64),
+ netmask VARCHAR2(64),
+ broadcast VARCHAR2(64),
hw_addr VARCHAR2(18),
module VARCHAR2(128),
created DATE
@@ -40,4 +40,3 @@ CREATE INDEX rhn_srv_net_iface_sid_name_idx
ALTER TABLE rhnServerNetInterface
ADD CONSTRAINT rhn_srv_net_iface_sid_name_uq UNIQUE (server_id, name);
-CREATE SEQUENCE rhn_srv_net_iface_id_seq;
commit 592902bad18cbc1a8c872ef9f222245683f92fe4
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:51 2011 +0200
Revert "Fix table dependencies"
This reverts commit 4c6f241a4cfe99cac08d18a63b969e815d10cbba.
diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps
index 692e4b4..53fc6c7 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -105,8 +105,6 @@ rhnKickstartSessionHistory :: rhnKickstartSession rhnKickstartSessionState
rhnKSTreeFile :: rhnKickstartableTree rhnChannelErrata rhnErrata \
rhnChecksum
rhnKickstartTimezone :: rhnKSInstallType
-rhnServerNetAddress4 :: rhnServerNetInterface
-rhnServerNetAddress6 :: rhnServerNetInterface
rhnOrgChannelSettings :: web_customer rhnChannel rhnOrgChannelSettingsType
rhnOrgEntitlements :: rhnOrgEntitlementType
rhnOrgErrataCacheQueue :: web_customer
commit 91f3c5ca6d6969ef73f6cad1352e95658a60888a
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:46 2011 +0200
Revert "shorten constraint identifiers to fit into given limits"
This reverts commit 72ab8d4d2e7516036ace9604eac51da399d6d1d1.
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
index edf90ce..6db6d3b 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -30,10 +30,9 @@ CREATE TABLE rhnServerNetAddress4
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_net_addr4_iid_addr_idx
+CREATE INDEX rhn_srv_net_address4_iid_address_idx
ON rhnServerNetAddress4 (interface_id, address)
TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress4
- ADD CONSTRAINT rhn_net_add4_iid_addr_uq UNIQUE (interface_id, address);
-
+ ADD CONSTRAINT rhn_srv_net_address4_iid_address_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index 7dbde6c..dce721d 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -30,10 +30,9 @@ CREATE TABLE rhnServerNetAddress6
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
+CREATE INDEX rhn_srv_net_address6_iid_scope_address_idx
ON rhnServerNetAddress4 (interface_id, scope, address)
TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress6
- ADD CONSTRAINT rhn_net_addr6_iid_sc_addr_uq UNIQUE (interface_id, scope, address);
-
+ ADD CONSTRAINT rhn_srv_net_address6_iid_scope_address_uq UNIQUE (interface_id, scope, address);
commit d6efd7c83469ae9aad804bc2e38f1393a346d556
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:40 2011 +0200
Revert "correct index creation"
This reverts commit deb1ff2107ca7db37389e85bfdb39a79bad8e2b9.
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index 6413ba5..7dbde6c 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -31,7 +31,7 @@ ENABLE ROW MOVEMENT
;
CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
- ON rhnServerNetAddress6 (interface_id, scope, address)
+ ON rhnServerNetAddress4 (interface_id, scope, address)
TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress6
commit f58d2f93f07b60fdf96fcfb138cd7dd8b165f0a5
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:35 2011 +0200
Revert "delete from rhnServerNetInterface: add on delete cascade"
This reverts commit 7be1ad0da7a79a3a445437770540cfe0824850f5.
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
index 7042fb2..edf90ce 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -18,8 +18,7 @@ CREATE TABLE rhnServerNetAddress4
(
interface_id NUMBER NOT NULL
CONSTRAINT rhn_srv_net_iaddress4_iid_fk
- REFERENCES rhnServerNetInterface (id)
- ON DELETE CASCADE,
+ REFERENCES rhnServerNetInterface (id),
address VARCHAR2(64),
netmask VARCHAR2(64),
broadcast VARCHAR2(64),
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index ee04fe5..6413ba5 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -18,8 +18,7 @@ CREATE TABLE rhnServerNetAddress6
(
interface_id NUMBER NOT NULL
CONSTRAINT rhn_srv_net_iaddress6_iid_fk
- REFERENCES rhnServerNetInterface (id)
- ON DELETE CASCADE,
+ REFERENCES rhnServerNetInterface (id),
address VARCHAR2(45),
netmask VARCHAR2(49),
scope VARCHAR2(64),
commit 46e8fe27e393fe995595c79dfbc7a4bc6dc8f63f
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:29 2011 +0200
Revert "update rhn_server.get_ip_address() to reflect IPv6 changes"
This reverts commit c8d1e52a302aaea688b049804bec6f441577d6e1.
diff --git a/schema/spacewalk/oracle/packages/rhn_server.pkb b/schema/spacewalk/oracle/packages/rhn_server.pkb
index 8e3c640..72392fd 100644
--- a/schema/spacewalk/oracle/packages/rhn_server.pkb
+++ b/schema/spacewalk/oracle/packages/rhn_server.pkb
@@ -712,12 +712,10 @@ is
server_id_in in number
) return varchar2 is
cursor interfaces is
- select ni.name as name, na4.address as address
- from rhnServerNetInterface ni,
- rhnServerNetAddress4 na4
- where ni.server_id = server_id_in
- and ni.id = na4.interface_id
- and na4.address != '127.0.0.1';
+ select name, ip_addr
+ from rhnServerNetInterface
+ where server_id = server_id_in
+ and ip_addr != '127.0.0.1';
cursor addresses is
select ipaddr ip_addr
from rhnServerNetwork
@@ -728,7 +726,7 @@ is
return addr.ip_addr;
end loop;
for iface in interfaces loop
- return iface.address;
+ return iface.ip_addr;
end loop;
return NULL;
end get_ip_address;
diff --git a/schema/spacewalk/postgres/packages/rhn_server.pkb b/schema/spacewalk/postgres/packages/rhn_server.pkb
index a1f7aca..3533094 100644
--- a/schema/spacewalk/postgres/packages/rhn_server.pkb
+++ b/schema/spacewalk/postgres/packages/rhn_server.pkb
@@ -764,12 +764,10 @@ update pg_settings set setting = 'rhn_server,' || setting where name = 'search_p
) returns varchar as $$
declare
interfaces cursor is
- select ni.name as name, na4.address as address
- from rhnServerNetInterface ni,
- rhnServerNetAddress4 na4
+ select name, ip_addr
+ from rhnServerNetInterface
where server_id = server_id_in
- and ni.id = na4.interface_id
- and na4.address != '127.0.0.1';
+ and ip_addr != '127.0.0.1';
addresses cursor is
select ipaddr ip_addr
from rhnServerNetwork
@@ -780,7 +778,7 @@ update pg_settings set setting = 'rhn_server,' || setting where name = 'search_p
return addr.ip_addr;
end loop;
for iface in interfaces loop
- return iface.address;
+ return iface.ip_addr;
end loop;
return NULL;
end$$ language plpgsql;
commit 5fac4e23c3a26784c0ba8a2d9c9e30b3be5dca93
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:23 2011 +0200
Revert "get_hw_info_as_clob: adapt to IPv6 changes"
This reverts commit 08ea44500d91d22877f0f361735df518ae601bd7.
diff --git a/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql b/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
index d6fea07..ce1b580 100644
--- a/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
+++ b/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
@@ -15,11 +15,9 @@ begin
select 1 n, sum(nrcpu) || ' CPUs' m
from rhncpu where rhncpu.server_id = sid
union all
- select 2, ni.name||' '||na4.address||'/'||na4.netmask||' '||ni.hw_addr val
- from rhnservernetinterface ni,
- rhnServerNetAddress4 na4
- where ni.server_id = sid
- and ni.id = na4.interface_id
+ select 2, name||' '||ip_addr||'/'||netmask||' '||hw_addr val
+ from rhnservernetinterface
+ where rhnservernetinterface.server_id = sid
)
order by n, m
) loop
diff --git a/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql b/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
index 6cc1982..9d899f3 100644
--- a/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
+++ b/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
@@ -1,4 +1,4 @@
--- oracle equivalent source sha1 6a538f3b05d412810baec118fbb7860348c60cd4
+-- oracle equivalent source sha1 4a627f5b31efb66c684dd14f0514e25a5ace94f2
create or replace function get_hw_info_as_clob(
sid in rhnserver.id%TYPE,
@@ -17,11 +17,9 @@ begin
select 1 n, sum(nrcpu) || ' CPUs' m
from rhncpu where rhncpu.server_id = sid
union all
- select 2, ni.name||' '||coalesce(na4.address,'')||'/'||coalesce(na4.netmask,'')||' '||ni.hw_addr val
- from rhnservernetinterface,
- rhnServerNetAddress4 na4
- where ni.server_id = sid
- and ni.id = na4.interface_id
+ select 2, name||' '||coalesce(ip_addr,'')||'/'||coalesce(netmask,'')||' '||hw_addr val
+ from rhnservernetinterface
+ where rhnservernetinterface.server_id = sid
) X
order by n, m
) loop
commit ece6447ff83de66444d7e939135c231c37419ce4
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:59:06 2011 +0200
Revert "schema upgrade"
This reverts commit cee165a5cdd26112f2cc2cbb9774f894c10675b2.
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
index b451aa3..7042fb2 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -31,10 +31,10 @@ CREATE TABLE rhnServerNetAddress4
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_srv_net_addr4_iid_addr_idx
+CREATE INDEX rhn_net_addr4_iid_addr_idx
ON rhnServerNetAddress4 (interface_id, address)
- TABLESPACE [[64k_tbs]];
+ TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress4
- ADD CONSTRAINT rhn_srv_net_addr4_iid_addr_uq UNIQUE (interface_id, address);
+ ADD CONSTRAINT rhn_net_add4_iid_addr_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index 79b10e4..ee04fe5 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -31,10 +31,10 @@ CREATE TABLE rhnServerNetAddress6
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_srv_net_ad6_iid_sc_ad_idx
+CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
ON rhnServerNetAddress6 (interface_id, scope, address)
- TABLESPACE [[64_tbs]];
+ TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress6
- ADD CONSTRAINT rhn_srv_net_ad6_iid_sc_ad_uq UNIQUE (interface_id, scope, address);
+ ADD CONSTRAINT rhn_net_addr6_iid_sc_addr_uq UNIQUE (interface_id, scope, address);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
deleted file mode 100644
index 1f0ab2a..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
+++ /dev/null
@@ -1,9 +0,0 @@
-alter table rhnServerNetInterface add id number;
-
-create sequence rhn_srv_net_iface_id_seq;
-
-update rhnServerNetInterface set id = rhn_srv_net_iface_id_seq.nextval;
-
-alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_nn check (id is not null);
-
-alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_pk primary key ( id );
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
deleted file mode 100644
index c2b448d..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
+++ /dev/null
@@ -1,11 +0,0 @@
--- oracle equivalent source sha1 f5872e029cf1b053c88bd876afc8f253461772ac
-
-alter table rhnServerNetInterface add id numeric;
-
-create sequence rhn_srv_net_iface_id_seq;
-
-update rhnServerNetInterface set id = nextval('rhn_srv_net_iface_id_seq');
-
-alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_nn check (id is not null);
-
-alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_pk primary key ( id );
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
deleted file mode 100644
index 7922fdf..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
+++ /dev/null
@@ -1,39 +0,0 @@
---
--- Copyright (c) 2011 Red Hat, Inc.
---
--- This software is licensed to you under the GNU General Public License,
--- version 2 (GPLv2). There is NO WARRANTY for this software, express or
--- implied, including the implied warranties of MERCHANTABILITY or FITNESS
--- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
--- along with this software; if not, see
--- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
---
--- Red Hat trademarks are not licensed under GPLv2. No permission is
--- granted to use or replicate Red Hat trademarks that are incorporated
--- in this software or its documentation.
---
-
-
-CREATE TABLE rhnServerNetAddress4
-(
- interface_id NUMBER NOT NULL
- CONSTRAINT rhn_srv_net_iaddress4_iid_fk
- REFERENCES rhnServerNetInterface (id)
- ON DELETE CASCADE,
- address VARCHAR2(64),
- netmask VARCHAR2(64),
- broadcast VARCHAR2(64),
- created DATE
- DEFAULT (sysdate) NOT NULL,
- modified DATE
- DEFAULT (sysdate) NOT NULL
-)
-ENABLE ROW MOVEMENT
-;
-
-CREATE INDEX rhn_srv_net_addr4_iid_addr_idx
- ON rhnServerNetAddress4 (interface_id, address)
- TABLESPACE [[64k_tbs]];
-
-ALTER TABLE rhnServerNetAddress4
- ADD CONSTRAINT rhn_srv_net_addr4_iid_addr_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
deleted file mode 100644
index 7b8a6b7..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
+++ /dev/null
@@ -1,18 +0,0 @@
--- oracle equivalent source sha1 af31dbcccd3799c2cd577137f6f7fd608288b2c4
-
-CREATE TABLE rhnServerNetAddress4
-(
- interface_id NUMERIC NOT NULL
- CONSTRAINT rhn_srv_net_iaddress4_iid_fk
- REFERENCES rhnServerNetInterface (id)
- ON DELETE CASCADE,
- address VARCHAR(64),
- netmask VARCHAR(64),
- broadcast VARCHAR(64),
- created timestamptz default current_timestamp NOT NULL,
- modified timestamptz default current_timestamp NOT NULL
-);
-
-CREATE UNIQUE INDEX rhn_srv_net_addr4_iid_addr_uq
- ON rhnServerNetAddress4 (interface_id, address)
- ;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
deleted file mode 100644
index bda4fb8..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
+++ /dev/null
@@ -1,6 +0,0 @@
-INSERT INTO rhnServerNetAddress4
- (interface_id, address, netmask, broadcast, created)
- SELECT id, ip_addr, netmask, broadcast, created
- FROM rhnServerNetInterface;
-
-COMMIT;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
deleted file mode 100644
index 64e42e1..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
+++ /dev/null
@@ -1,3 +0,0 @@
-ALTER TABLE rhnServerNetInterface DROP COLUMN ip_addr;
-ALTER TABLE rhnServerNetInterface DROP COLUMN netmask;
-ALTER TABLE rhnServerNetInterface DROP COLUMN broadcast;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
deleted file mode 100644
index 42c78b2..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
+++ /dev/null
@@ -1,39 +0,0 @@
---
--- Copyright (c) 2011 Red Hat, Inc.
---
--- This software is licensed to you under the GNU General Public License,
--- version 2 (GPLv2). There is NO WARRANTY for this software, express or
--- implied, including the implied warranties of MERCHANTABILITY or FITNESS
--- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
--- along with this software; if not, see
--- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
---
--- Red Hat trademarks are not licensed under GPLv2. No permission is
--- granted to use or replicate Red Hat trademarks that are incorporated
--- in this software or its documentation.
---
-
-
-CREATE TABLE rhnServerNetAddress6
-(
- interface_id NUMBER NOT NULL
- CONSTRAINT rhn_srv_net_iaddress6_iid_fk
- REFERENCES rhnServerNetInterface (id)
- ON DELETE CASCADE,
- address VARCHAR2(45),
- netmask VARCHAR2(49),
- scope VARCHAR2(64),
- created DATE
- DEFAULT (sysdate) NOT NULL,
- modified DATE
- DEFAULT (sysdate) NOT NULL
-)
-ENABLE ROW MOVEMENT
-;
-
-CREATE INDEX rhn_srv_net_ad6_iid_sc_ad_idx
- ON rhnServerNetAddress6 (interface_id, scope, address)
- TABLESPACE [[64k_tbs]];
-
-ALTER TABLE rhnServerNetAddress6
- ADD CONSTRAINT rhn_srv_net_ad6_iid_sc_ad_uq UNIQUE (interface_id, scope, address);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
deleted file mode 100644
index 844c601..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
+++ /dev/null
@@ -1,17 +0,0 @@
--- oracle equivalent source sha1 7c11068302cdb144f446828d4db0f244dbf12293
-
-CREATE TABLE rhnServerNetAddress6
-(
- interface_id NUMERIC NOT NULL
- CONSTRAINT rhn_srv_net_iaddress6_iid_fk
- REFERENCES rhnServerNetInterface (id)
- ON DELETE CASCADE,
- address VARCHAR(45),
- netmask VARCHAR(49),
- scope VARCHAR(64),
- created timestamptz default current_timestamp NOT NULL,
- modified timestamptz default current_timestamp NOT NULL
-);
-
-CREATE UNIQUE INDEX rhn_srv_net_ad6_iid_sc_ad_uq
- ON rhnServerNetAddress6 (interface_id, scope, address);
commit ad7c7f9205397e99007de90b14c7be5ad39f9500
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:58:07 2011 +0200
Revert "upgrade script for rhn_server.pkb"
This reverts commit aa6a12287e103d424ebf882cf0dc003ea9c93e91.
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
deleted file mode 100644
index 87600df..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
+++ /dev/null
@@ -1,750 +0,0 @@
---
--- Copyright (c) 2008--2010 Red Hat, Inc.
---
--- This software is licensed to you under the GNU General Public License,
--- version 2 (GPLv2). There is NO WARRANTY for this software, express or
--- implied, including the implied warranties of MERCHANTABILITY or FITNESS
--- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
--- along with this software; if not, see
--- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
---
--- Red Hat trademarks are not licensed under GPLv2. No permission is
--- granted to use or replicate Red Hat trademarks that are incorporated
--- in this software or its documentation.
---
---
---
---
-
-create or replace
-package body rhn_server
-is
- function system_service_level(
- server_id_in in number,
- service_level_in in varchar2
- ) return number is
-
- cursor ents is
- select label from rhnServerEntitlementView
- where server_id = server_id_in;
-
- retval number := 0;
-
- begin
- for ent in ents loop
- retval := rhn_entitlements.entitlement_grants_service (ent.label, service_level_in);
- if retval = 1 then
- return retval;
- end if;
- end loop;
-
- return retval;
-
- end system_service_level;
-
-
- function can_change_base_channel(server_id_in IN NUMBER)
- return number
- is
- throwaway number;
- begin
- -- the idea: if we get past this query, the server is
- -- neither sat nor proxy, so base channel is changeable
-
- select 1 into throwaway
- from rhnServer S
- where S.id = server_id_in
- and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id)
- and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id);
-
- return 1;
- exception
- when no_data_found
- then
- return 0;
- end can_change_base_channel;
-
- procedure set_custom_value(
- server_id_in in number,
- user_id_in in number,
- key_label_in in varchar2,
- value_in in varchar2
- ) is
- key_id_val number;
- begin
- select CDK.id into key_id_val
- from rhnCustomDataKey CDK,
- rhnServer S
- where S.id = server_id_in
- and S.org_id = CDK.org_id
- and CDK.label = key_label_in;
-
- begin
- insert into rhnServerCustomDataValue (server_id, key_id, value, created_by, last_modified_by)
- values (server_id_in, key_id_val, value_in, user_id_in, user_id_in);
- exception
- when DUP_VAL_ON_INDEX
- then
- update rhnServerCustomDataValue
- set value = value_in,
- last_modified_by = user_id_in
- where server_id = server_id_in
- and key_id = key_id_val;
- end;
-
- end set_custom_value;
-
- function bulk_set_custom_value(
- key_label_in in varchar2,
- value_in in varchar2,
- set_label_in in varchar2,
- set_uid_in in number
- )
- return integer
- is
- i integer := 0;
- begin
- i := 0;
- for server in rhn_set.set_iterator(set_label_in, set_uid_in)
- loop
- if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
- rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in);
- i := i + 1;
- end if;
- end loop server;
- return i;
- end bulk_set_custom_value;
-
- procedure bulk_snapshot_tag(
- org_id_in in number,
- tagname_in in varchar2,
- set_label_in in varchar2,
- set_uid_in in number
- ) is
- snapshot_id number;
- begin
- for server in rhn_set.set_iterator(set_label_in, set_uid_in)
- loop
- if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
- begin
- select max(id) into snapshot_id
- from rhnSnapshot
- where server_id = server.element;
- exception
- when NO_DATA_FOUND then
- rhn_server.snapshot_server(server.element, 'tagging system: ' || tagname_in);
-
- select max(id) into snapshot_id
- from rhnSnapshot
- where server_id = server.element;
- end;
-
- -- now have a snapshot_id to work with...
- begin
- rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in);
- exception
- when DUP_VAL_ON_INDEX
- then
- -- do nothing, be forgiving...
- null;
- end;
- end if;
- end loop server;
- end bulk_snapshot_tag;
-
- procedure tag_delete(
- server_id_in in number,
- tag_id_in in number
- ) is
- cursor snapshots is
- select snapshot_id
- from rhnSnapshotTag
- where tag_id = tag_id_in;
- tag_id_tmp number;
- begin
- select id into tag_id_tmp
- from rhnTag
- where id = tag_id_in
- for update;
-
- delete
- from rhnSnapshotTag
- where server_id = server_id_in
- and tag_id = tag_id_in;
- for snapshot in snapshots loop
- return;
- end loop;
- delete
- from rhnTag
- where id = tag_id_in;
- end tag_delete;
-
- procedure tag_snapshot(
- snapshot_id_in in number,
- org_id_in in number,
- tagname_in in varchar2
- ) is
- begin
- insert into rhnSnapshotTag (snapshot_id, server_id, tag_id)
- select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in)
- from rhnSnapshot
- where id = snapshot_id_in;
- end tag_snapshot;
-
- procedure bulk_snapshot(
- reason_in in varchar2,
- set_label_in in varchar2,
- set_uid_in in number
- ) is
- begin
- for server in rhn_set.set_iterator(set_label_in, set_uid_in)
- loop
- if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
- rhn_server.snapshot_server(server.element, reason_in);
- end if;
- end loop server;
- end bulk_snapshot;
-
- procedure snapshot_server(
- server_id_in in number,
- reason_in in varchar2
- ) is
- snapshot_id number;
- cursor revisions is
- select distinct
- cr.id
- from rhnConfigRevision cr,
- rhnConfigFileName cfn,
- rhnConfigFile cf,
- rhnConfigChannel cc,
- rhnServerConfigChannel scc
- where 1=1
- and scc.server_id = server_id_in
- and scc.config_channel_id = cc.id
- and cc.id = cf.config_channel_id
- and cf.id = cr.config_file_id
- and cr.id = cf.latest_config_revision_id
- and cf.config_file_name_id = cfn.id
- and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path);
- locked integer;
- begin
- select rhn_snapshot_id_seq.nextval into snapshot_id from dual;
-
- insert into rhnSnapshot (id, org_id, server_id, reason) (
- select snapshot_id,
- s.org_id,
- server_id_in,
- reason_in
- from rhnServer s
- where s.id = server_id_in
- );
- insert into rhnSnapshotChannel (snapshot_id, channel_id) (
- select snapshot_id, sc.channel_id
- from rhnServerChannel sc
- where sc.server_id = server_id_in
- );
- insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) (
- select snapshot_id, sgm.server_group_id
- from rhnServerGroupMembers sgm
- where sgm.server_id = server_id_in
- );
- locked := 0;
- while true loop
- begin
- insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id)
- select rhn_pkgnevra_id_seq.nextval, sp.name_id, sp.evr_id, sp.package_arch_id
- from rhnServerPackage sp
- where sp.server_id = server_id_in
- and not exists
- (select 1
- from rhnPackageNEVRA nevra
- where nevra.name_id = sp.name_id
- and nevra.evr_id = sp.evr_id
- and (nevra.package_arch_id = sp.package_arch_id
- or (nevra.package_arch_id is null
- and sp.package_arch_id is null)));
- exit;
- exception when dup_val_on_index then
- if locked = 1 then
- raise;
- else
- lock table rhnPackageNEVRA in exclusive mode;
- locked := 1;
- end if;
- end;
- end loop;
- insert into rhnSnapshotPackage (snapshot_id, nevra_id) (
- select distinct snapshot_id, nevra.id
- from rhnServerPackage sp, rhnPackageNEVRA nevra
- where sp.server_id = server_id_in
- and nevra.name_id = sp.name_id
- and nevra.evr_id = sp.evr_id
- and (nevra.package_arch_id = sp.package_arch_id
- or (nevra.package_arch_id is null
- and sp.package_arch_id is null))
- );
-
- insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) (
- select snapshot_id, scc.config_channel_id
- from rhnServerConfigChannel scc
- where server_id = server_id_in
- );
-
- for revision in revisions loop
- insert into rhnSnapshotConfigRevision (
- snapshot_id, config_revision_id
- ) values (
- snapshot_id, revision.id
- );
- end loop;
- end snapshot_server;
-
- procedure remove_action(
- server_id_in in number,
- action_id_in in number
- ) is
- -- this really wants "nulls last", but 8.1.7.3.0 sucks ass.
- -- instead, we make a local table that holds our
- -- list of ids with null prereqs. There's surely a better way
- -- (an array instead of a table maybe? who knows...)
- -- but I've got code to do this handy that I can look at ;)
- cursor chained_actions is
- select id, prerequisite
- from rhnAction
- start with id = action_id_in
- connect by prior id = prerequisite
- order by prerequisite desc;
- cursor sessions is
- select s.id
- from rhnKickstartSession s
- where server_id_in in (s.old_server_id, s.new_server_id)
- and s.action_id = action_id_in
- and not exists (
- select 1
- from rhnKickstartSessionState ss
- where ss.id = s.state_id
- and ss.label in ('failed','complete')
- );
- type chain_end_type is table of number index by binary_integer;
- chain_ends chain_end_type;
- i number;
- prereq number := 1;
- begin
- select prerequisite
- into prereq
- from rhnAction
- where id = action_id_in;
-
- if prereq is not null then
- rhn_exception.raise_exception('action_is_child');
- end if;
-
- i := 0;
- for action in chained_actions loop
- if action.prerequisite is null then
- chain_ends(i) := action.id;
- i := i + 1;
- else
- delete from rhnServerAction
- where server_id = server_id_in
- and action_id = action.id;
- end if;
- end loop;
- i := chain_ends.first;
- while i is not null loop
- delete from rhnServerAction
- where server_id = server_id_in
- and action_id = chain_ends(i);
- i := chain_ends.next(i);
- end loop;
- for s in sessions loop
- update rhnKickstartSession
- set state_id = (
- select id
- from rhnKickstartSessionState
- where label = 'failed'
- ),
- action_id = null
- where id = s.id;
- set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to action removal');
- end loop;
- end remove_action;
-
- function check_user_access(server_id_in in number, user_id_in in number)
- return number
- is
- has_access number;
- begin
- -- first check; if this returns no rows, then the server/user are in different orgs, and we bail
- select 1 into has_access
- from rhnServer S,
- web_contact wc
- where wc.org_id = s.org_id
- and s.id = server_id_in
- and wc.id = user_id_in;
-
- -- okay, so they're in the same org. if we have an org admin, they get a free pass
- if rhn_user.check_role(user_id_in, 'org_admin') = 1
- then
- return 1;
- end if;
-
- select 1 into has_access
- from rhnServerGroupMembers SGM,
- rhnUserServerGroupPerms USG
- where SGM.server_group_id = USG.server_group_id
- and SGM.server_id = server_id_in
- and USG.user_id = user_id_in
- and rownum = 1;
-
- return 1;
- exception
- when no_data_found
- then
- return 0;
- end check_user_access;
-
- -- *******************************************************************
- -- FUNCTION: can_server_consume_virt_slot
- -- Returns 1 if the server id is eligible to consume a virtual slot,
- -- else returns 0.
- -- Called by: insert_into_servergroup, delete_from_servergroup
- -- *******************************************************************
- function can_server_consume_virt_slot(server_id_in in number,
- group_type_in in
- rhnServerGroupType.label%TYPE)
- return number
- is
-
- cursor server_virt_slots is
- select vi.VIRTUAL_SYSTEM_ID
- from
- rhnVirtualInstance vi
- where
- -- server id is a virtual instance
- vi.VIRTUAL_SYSTEM_ID = server_id_in
- -- server id's host is virt entitled
- and exists ( select 1
- from rhnServerEntitlementView sev
- where vi.HOST_SYSTEM_ID = sev.server_id
- and sev.label in ('virtualization_host',
- 'virtualization_host_platform') )
- -- server id's host also has the ent we want
- and exists ( select 1
- from rhnServerEntitlementView sev2
- where vi.HOST_SYSTEM_ID = sev2.server_id
- and sev2.label = group_type_in );
-
- begin
- for server_virt_slot in server_virt_slots loop
- return 1;
- end loop;
- return 0;
- end can_server_consume_virt_slot;
-
-
- procedure insert_into_servergroup (
- server_id_in in number,
- server_group_id_in in number
- ) is
- used_slots number;
- max_slots number;
- org_id number;
- mgmt_available number;
- mgmt_upgrade number;
- mgmt_sgid number;
- prov_available number;
- prov_upgrade number;
- prov_sgid number;
- group_label rhnServerGroupType.label%TYPE;
- group_type number;
- begin
- -- frist, group_type = null, because it's easy...
-
- -- this will rowlock the servergroup we're trying to change;
- -- we probably need to lock the other one, but I think the chances
- -- of it being a real issue are very small for now...
- select sg.group_type, sg.org_id, sg.current_members, sg.max_members
- into group_type, org_id, used_slots, max_slots
- from rhnServerGroup sg
- where sg.id = server_group_id_in
- for update of sg.current_members;
-
- if group_type is null then
- if used_slots >= max_slots then
- rhn_exception.raise_exception('servergroup_max_members');
- end if;
-
- insert into rhnServerGroupMembers(
- server_id, server_group_id
- ) values (
- server_id_in, server_group_id_in
- );
- update rhnServerGroup
- set current_members = current_members + 1
- where id = server_group_id_in;
-
- rhn_cache.update_perms_for_server_group(server_group_id_in);
- return;
- end if;
-
- -- now for group_type != null
- --
- select label
- into group_label
- from rhnServerGroupType sgt
- where sgt.id = group_type;
-
- -- the naive easy path that gets hit most often and has to be quickest.
- if group_label in ('sw_mgr_entitled',
- 'enterprise_entitled',
- 'monitoring_entitled',
- 'provisioning_entitled',
- 'virtualization_host',
- 'virtualization_host_platform') then
- if used_slots >= max_slots and
- (can_server_consume_virt_slot(server_id_in, group_label) != 1)
- then
- rhn_exception.raise_exception('servergroup_max_members');
- end if;
-
- insert into rhnServerGroupMembers(
- server_id, server_group_id
- ) values (
- server_id_in, server_group_id_in
- );
-
- -- Only update current members if the system in consuming a
- -- physical slot.
- if can_server_consume_virt_slot(server_id_in, group_label) = 0 then
- update rhnServerGroup
- set current_members = current_members + 1
- where id = server_group_id_in;
- end if;
-
- return;
- end if;
- end;
-
- function insert_into_servergroup_maybe (
- server_id_in in number,
- server_group_id_in in number
- ) return number is
- retval number := 0;
- cursor servergroups is
- select s.id server_id,
- sg.id server_group_id
- from rhnServerGroup sg,
- rhnServer s
- where s.id = server_id_in
- and sg.id = server_group_id_in
- and s.org_id = sg.org_id
- and not exists (
- select 1
- from rhnServerGroupMembers sgm
- where sgm.server_id = s.id
- and sgm.server_group_id = sg.id
- );
- begin
- for sgm in servergroups loop
- rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id);
- retval := retval + 1;
- end loop;
- return retval;
- end insert_into_servergroup_maybe;
-
- procedure insert_set_into_servergroup (
- server_group_id_in in number,
- user_id_in in number,
- set_label_in in varchar2
- ) is
- cursor servers is
- select st.element id
- from rhnSet st
- where st.user_id = user_id_in
- and st.label = set_label_in
- and exists (
- select 1
- from rhnUserManagedServerGroups umsg
- where umsg.server_group_id = server_group_id_in
- and umsg.user_id = user_id_in
- )
- and not exists (
- select 1
- from rhnServerGroupMembers sgm
- where sgm.server_id = st.element
- and sgm.server_group_id = server_group_id_in
- );
- begin
- for s in servers loop
- rhn_server.insert_into_servergroup(s.id, server_group_id_in);
- end loop;
- end insert_set_into_servergroup;
-
- procedure delete_from_servergroup (
- server_id_in in number,
- server_group_id_in in number
- ) is
- cursor server_virt_groups is
- select 1
- from rhnServerEntitlementVirtual sev
- where sev.server_id = server_id_in
- and sev.server_group_id = server_group_id_in;
-
- oid number;
- mgmt_sgid number;
- label rhnServerGroupType.label%TYPE;
- group_type number;
- begin
- begin
- select sg.group_type, sg.org_id
- into group_type, oid
- from rhnServerGroupMembers sgm,
- rhnServerGroup sg
- where sg.id = server_group_id_in
- and sg.id = sgm.server_group_id
- and sgm.server_id = server_id_in
- for update of sg.current_members;
- exception
- when no_data_found then
- rhn_exception.raise_exception('server_not_in_group');
- end;
-
- -- do group_type is null first
- if group_type is null then
- delete from rhnServerGroupMembers
- where server_group_id = server_group_id_in
- and server_id = server_id_in;
- update rhnServerGroup
- set current_members = current_members - 1
- where id = server_group_id_in;
- rhn_cache.update_perms_for_server_group(server_group_id_in);
- return;
- end if;
-
- select sgt.label
- into label
- from rhnServerGroupType sgt
- where sgt.id = group_type;
-
- if label in ('sw_mgr_entitled',
- 'enterprise_entitled',
- 'provisioning_entitled',
- 'monitoring_entitled',
- 'virtualization_host',
- 'virtualization_host_platform') then
-
- -- Only update current members if the system is consuming
- -- a physical slot.
- for server_virt_group in server_virt_groups loop
- delete from rhnServerGroupMembers
- where server_group_id = server_group_id_in
- and server_id = server_id_in;
- return;
- end loop;
-
- delete from rhnServerGroupMembers
- where server_group_id = server_group_id_in
- and server_id = server_id_in;
-
- update rhnServerGroup
- set current_members = current_members - 1
- where id = server_group_id_in;
-
- end if;
- end;
-
- procedure delete_set_from_servergroup (
- server_group_id_in in number,
- user_id_in in number,
- set_label_in in varchar2
- ) is
- cursor servergroups is
- select sgm.server_id, sgm.server_group_id
- from rhnSet st,
- rhnServerGroupMembers sgm
- where sgm.server_group_id = server_group_id_in
- and st.user_id = user_id_in
- and st.label = set_label_in
- and sgm.server_id = st.element
- and exists (
- select 1
- from rhnUserManagedServerGroups usgp
- where usgp.server_group_id = server_group_id_in
- and usgp.user_id = user_id_in
- );
- begin
- for sgm in servergroups loop
- rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in);
- end loop;
- end delete_set_from_servergroup;
-
- procedure clear_servergroup (
- server_group_id_in in number
- ) is
- cursor servers is
- select sgm.server_id id
- from rhnServerGroupMembers sgm
- where sgm.server_group_id = server_group_id_in;
- begin
- for s in servers loop
- rhn_server.delete_from_servergroup(s.id, server_group_id_in);
- end loop;
- end clear_servergroup;
-
- procedure delete_from_org_servergroups (
- server_id_in in number
- ) is
- cursor servergroups is
- select sgm.server_group_id id
- from rhnServerGroup sg,
- rhnServerGroupMembers sgm
- where sgm.server_id = server_id_in
- and sgm.server_group_id = sg.id
- and sg.group_type is null;
- begin
- for sg in servergroups loop
- rhn_server.delete_from_servergroup(server_id_in, sg.id);
- end loop;
- end delete_from_org_servergroups;
-
- function get_ip_address (
- server_id_in in number
- ) return varchar2 is
- cursor interfaces is
- select ni.name as name, na4.address as address
- from rhnServerNetInterface ni,
- rhnServerNetAddress4 na4
- where ni.server_id = server_id_in
- and ni.id = na4.interface_id
- and na4.address != '127.0.0.1';
- cursor addresses is
- select ipaddr ip_addr
- from rhnServerNetwork
- where server_id = server_id_in
- and ipaddr != '127.0.0.1';
- begin
- for addr in addresses loop
- return addr.ip_addr;
- end loop;
- for iface in interfaces loop
- return iface.address;
- end loop;
- return NULL;
- end get_ip_address;
-
- procedure update_needed_cache(server_id_in in number)
- is
- begin
- delete from rhnServerNeededCache
- where server_id = server_id_in;
- insert into rhnServerNeededCache
- (server_id, errata_id, package_id)
- (select distinct server_id, errata_id, package_id
- from rhnServerNeededView
- where server_id = server_id_in);
- end update_needed_cache;
-
-end rhn_server;
-/
-SHOW ERRORS
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
deleted file mode 100644
index d103a65..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
+++ /dev/null
@@ -1,802 +0,0 @@
---
--- Copyright (c) 2008--2010 Red Hat, Inc.
---
--- This software is licensed to you under the GNU General Public License,
--- version 2 (GPLv2). There is NO WARRANTY for this software, express or
--- implied, including the implied warranties of MERCHANTABILITY or FITNESS
--- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
--- along with this software; if not, see
--- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
---
--- Red Hat trademarks are not licensed under GPLv2. No permission is
--- granted to use or replicate Red Hat trademarks that are incorporated
--- in this software or its documentation.
---
---
---
---
-
-create schema rhn_server;
-
---update pg_setting
-update pg_settings set setting = 'rhn_server,' || setting where name = 'search_path';
-
- create or replace function system_service_level(
- server_id_in in numeric,
- service_level_in in varchar
- ) returns numeric as $$
- declare
- ents cursor is
- select label from rhnServerEntitlementView
- where server_id = server_id_in;
-
- retval numeric := 0;
-
- begin
- for ent in ents loop
- retval := rhn_entitlements.entitlement_grants_service (ent.label, service_level_in);
- if retval = 1 then
- return retval;
- end if;
- end loop;
-
- return retval;
-
- end$$ language plpgsql;
-
-
- create or replace function can_change_base_channel(server_id_in IN NUMERIC)
- returns numeric
- as $$
- declare
- throwaway numeric;
- begin
- -- the idea: if we get past this query, the server is
- -- neither sat nor proxy, so base channel is changeable
-
- select 1 into throwaway
- from rhnServer S
- where S.id = server_id_in
- and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id)
- and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id);
-
- if not found then
- return 0;
- end if;
-
- return 1;
- end$$ language plpgsql;
-
- create or replace function set_custom_value(
- server_id_in in numeric,
- user_id_in in numeric,
- key_label_in in varchar,
- value_in in varchar
- ) returns void
- as $$
- declare
- key_id_val numeric;
- begin
- select CDK.id into strict key_id_val
- from rhnCustomDataKey CDK,
- rhnServer S
- where S.id = server_id_in
- and S.org_id = CDK.org_id
- and CDK.label = key_label_in;
-
- begin
- insert into rhnServerCustomDataValue (server_id, key_id, value, created_by, last_modified_by)
- values (server_id_in, key_id_val, value_in, user_id_in, user_id_in);
- exception
- when UNIQUE_VIOLATION
- then
- update rhnServerCustomDataValue
- set value = value_in,
- last_modified_by = user_id_in
- where server_id = server_id_in
- and key_id = key_id_val;
- end;
-
- end$$ language plpgsql;
-
- create or replace function bulk_set_custom_value(
- key_label_in in varchar,
- value_in in varchar,
- set_label_in in varchar,
- set_uid_in in numeric
- )
- returns integer
- as $$
- declare
- i integer;
- server record;
- begin
- i := 0;
- for server in
- SELECT user_id, label, element, element_two
- FROM rhnSet
- WHERE label = set_label_in
- AND user_id = set_uid_in
- loop
- if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
- perform rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in);
- i := i + 1;
- end if;
- end loop;
- return i;
- end$$ language plpgsql;
-
- create or replace function bulk_snapshot_tag(
- org_id_in in numeric,
- tagname_in in varchar,
- set_label_in in varchar,
- set_uid_in in numeric
- ) returns void
- as $$
- declare
- server record;
- snapshot_id numeric;
- begin
- for server in
- SELECT user_id, label, element, element_two
- FROM rhnSet
- WHERE label = set_label_in
- AND user_id = set_uid_in
- loop
- if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
- select max(id) into snapshot_id
- from rhnSnapshot
- where server_id = server.element;
-
- if snapshot_id is null then
- perform rhn_server.snapshot_server(server.element, 'tagging system: ' || tagname_in);
-
- select max(id) into snapshot_id
- from rhnSnapshot
- where server_id = server.element;
- end if;
-
- -- now have a snapshot_id to work with...
- begin
- perform rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in);
- exception
- when UNIQUE_VIOLATION
- then
- -- do nothing, be forgiving...
- null;
- end;
- end if;
- end loop;
- end$$ language plpgsql;
-
- create or replace function tag_delete(
- server_id_in in numeric,
- tag_id_in in numeric
- ) returns void
- as $$
- declare
- snapshots cursor is
- select snapshot_id
- from rhnSnapshotTag
- where tag_id = tag_id_in;
- tag_id_tmp numeric;
- begin
- select id into tag_id_tmp
- from rhnTag
- where id = tag_id_in
- for update;
-
- delete
- from rhnSnapshotTag
- where server_id = server_id_in
- and tag_id = tag_id_in;
- for snapshot in snapshots loop
- return;
- end loop;
- delete
- from rhnTag
- where id = tag_id_in;
- end$$ language plpgsql;
-
- create or replace function tag_snapshot(
- snapshot_id_in in numeric,
- org_id_in in numeric,
- tagname_in in varchar
- ) returns void
- as $$
- begin
- insert into rhnSnapshotTag (snapshot_id, server_id, tag_id)
- select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in)
- from rhnSnapshot
- where id = snapshot_id_in;
- end$$ language plpgsql;
-
- create or replace function bulk_snapshot(
- reason_in in varchar,
- set_label_in in varchar,
- set_uid_in in numeric
- ) returns void
- as $$
- declare
- server record;
- begin
- for server in
- SELECT user_id, label, element, element_two
- FROM rhnSet
- WHERE label = set_label_in
- AND user_id = set_uid_in
- loop
- if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
- perform rhn_server.snapshot_server(server.element, reason_in);
- end if;
- end loop;
- end$$ language plpgsql;
-
- create or replace function snapshot_server(
- server_id_in in numeric,
- reason_in in varchar
- ) returns void
- as $$
- declare
- snapshot_id_v numeric;
- revisions cursor is
- select distinct
- cr.id
- from rhnConfigRevision cr,
- rhnConfigFileName cfn,
- rhnConfigFile cf,
- rhnConfigChannel cc,
- rhnServerConfigChannel scc
- where 1=1
- and scc.server_id = server_id_in
- and scc.config_channel_id = cc.id
- and cc.id = cf.config_channel_id
- and cf.id = cr.config_file_id
- and cr.id = cf.latest_config_revision_id
- and cf.config_file_name_id = cfn.id
- and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path);
- locked integer;
- begin
- select nextval('rhn_snapshot_id_seq') into snapshot_id_v;
-
- insert into rhnSnapshot (id, org_id, server_id, reason) (
- select snapshot_id_v,
- s.org_id,
- server_id_in,
- reason_in
- from rhnServer s
- where s.id = server_id_in
- );
- insert into rhnSnapshotChannel (snapshot_id, channel_id) (
- select snapshot_id_v, sc.channel_id
- from rhnServerChannel sc
- where sc.server_id = server_id_in
- );
- insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) (
- select snapshot_id_v, sgm.server_group_id
- from rhnServerGroupMembers sgm
- where sgm.server_id = server_id_in
- );
- locked := 0;
- <<iloop>>
- while true loop
- begin
- insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id)
- select nextval('rhn_pkgnevra_id_seq'), sp.name_id, sp.evr_id, sp.package_arch_id
- from rhnServerPackage sp
- where sp.server_id = server_id_in
- and not exists
- (select 1
- from rhnPackageNEVRA nevra
- where nevra.name_id = sp.name_id
- and nevra.evr_id = sp.evr_id
- and (nevra.package_arch_id = sp.package_arch_id
- or (nevra.package_arch_id is null
- and sp.package_arch_id is null)));
- exit iloop;
- exception when unique_violation then
- if locked = 1 then
- raise;
- else
- lock table rhnPackageNEVRA in exclusive mode;
- locked := 1;
- end if;
- end;
- end loop;
- insert into rhnSnapshotPackage (snapshot_id, nevra_id) (
- select distinct snapshot_id_v, nevra.id
- from rhnServerPackage sp, rhnPackageNEVRA nevra
- where sp.server_id = server_id_in
- and nevra.name_id = sp.name_id
- and nevra.evr_id = sp.evr_id
- and (nevra.package_arch_id = sp.package_arch_id
- or (nevra.package_arch_id is null
- and sp.package_arch_id is null))
- );
-
- insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) (
- select snapshot_id_v, scc.config_channel_id
- from rhnServerConfigChannel scc
- where server_id = server_id_in
- );
-
- for revision in revisions loop
- insert into rhnSnapshotConfigRevision (
- snapshot_id, config_revision_id
- ) values (
- snapshot_id_v, revision.id
- );
- end loop;
- end$$ language plpgsql;
-
- create or replace function remove_action(
- server_id_in in numeric,
- action_id_in in numeric
- ) returns void
- as $$
- declare
- -- this really wants "nulls last", but 8.1.7.3.0 sucks ass.
- -- instead, we make a local table that holds our
- -- list of ids with null prereqs. There's surely a better way
- -- (an array instead of a table maybe? who knows...)
- -- but I've got code to do this handy that I can look at ;)
- chained_actions cursor is
- with recursive r(id, prerequisite) as (
- select id, prerequisite
- from rhnAction
- where id = action_id_in
- union all
- select r1.id, r1.prerequisite
- from rhnAction r1, r
- where r.id = r1.prerequisite
- )
- select * from r
- order by prerequisite desc;
- sessions cursor is
- select s.id
- from rhnKickstartSession s
- where server_id_in in (s.old_server_id, s.new_server_id)
- and s.action_id = action_id_in
- and not exists (
- select 1
- from rhnKickstartSessionState ss
- where ss.id = s.state_id
- and ss.label in ('failed','complete')
- );
- chain_ends numeric[];
- i numeric;
- prereq numeric := 1;
- begin
- select prerequisite
- into prereq
- from rhnAction
- where id = action_id_in;
-
- if prereq is not null then
- perform rhn_exception.raise_exception('action_is_child');
- end if;
-
- chain_ends := '{}';
- i := 1;
- for action in chained_actions loop
- if action.prerequisite is null then
- chain_ends[i] := action.id;
- i := i + 1;
- else
- delete from rhnServerAction
- where server_id = server_id_in
- and action_id = action.id;
- end if;
- end loop;
-
- delete from rhnServerAction
- where server_id = server_id_in
- and action_id = any(chain_ends);
-
- for s in sessions loop
- update rhnKickstartSession
- set state_id = (
- select id
- from rhnKickstartSessionState
- where label = 'failed'
- ),
- action_id = null
- where id = s.id;
- perform set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to action removal');
- end loop;
- end$$ language plpgsql;
-
- create or replace function check_user_access(server_id_in in numeric, user_id_in in numeric)
- returns numeric
- as $$
- declare
- has_access numeric;
- begin
- -- first check; if this returns no rows, then the server/user are in different orgs, and we bail
- select 1 into has_access
- from rhnServer S,
- web_contact wc
- where wc.org_id = s.org_id
- and s.id = server_id_in
- and wc.id = user_id_in;
-
- if not found then
- return 0;
- end if;
-
- -- okay, so they're in the same org. if we have an org admin, they get a free pass
- if rhn_user.check_role(user_id_in, 'org_admin') = 1
- then
- return 1;
- end if;
-
- select 1 into has_access
- from rhnServerGroupMembers SGM,
- rhnUserServerGroupPerms USG
- where SGM.server_group_id = USG.server_group_id
- and SGM.server_id = server_id_in
- and USG.user_id = user_id_in;
-
- if not found then
- return 0;
- end if;
-
- return 1;
- end$$ language plpgsql;
-
- -- *******************************************************************
- -- FUNCTION: can_server_consume_virt_slot
- -- Returns 1 if the server id is eligible to consume a virtual slot,
- -- else returns 0.
- -- Called by: insert_into_servergroup, delete_from_servergroup
- -- *******************************************************************
- create or replace function can_server_consume_virt_slot(server_id_in in numeric,
- group_type_in in varchar)
- returns numeric
- as $$
- declare
- server_virt_slots cursor is
- select vi.VIRTUAL_SYSTEM_ID
- from
- rhnVirtualInstance vi
- where
- -- server id is a virtual instance
- vi.VIRTUAL_SYSTEM_ID = server_id_in
- -- server id's host is virt entitled
- and exists ( select 1
- from rhnServerEntitlementView sev
- where vi.HOST_SYSTEM_ID = sev.server_id
- and sev.label in ('virtualization_host',
- 'virtualization_host_platform') )
- -- server id's host also has the ent we want
- and exists ( select 1
- from rhnServerEntitlementView sev2
- where vi.HOST_SYSTEM_ID = sev2.server_id
- and sev2.label = group_type_in );
-
- begin
- for server_virt_slot in server_virt_slots loop
- return 1;
- end loop;
- return 0;
- end$$ language plpgsql;
-
-
- create or replace function insert_into_servergroup (
- server_id_in in numeric,
- server_group_id_in in numeric
- ) returns void
- as $$
- declare
- used_slots numeric;
- max_slots numeric;
- org_id numeric;
- mgmt_available numeric;
- mgmt_upgrade numeric;
- mgmt_sgid numeric;
- prov_available numeric;
- prov_upgrade numeric;
- prov_sgid numeric;
- group_label varchar;
- group_type numeric;
- begin
- -- first, group_type = null, because it's easy...
-
- -- this will rowlock the servergroup we're trying to change;
- -- we probably need to lock the other one, but I think the chances
- -- of it being a real issue are very small for now...
- select sg.group_type, sg.org_id, sg.current_members, sg.max_members
- into group_type, org_id, used_slots, max_slots
- from rhnServerGroup sg
- where sg.id = server_group_id_in
- for update of sg;
-
- if group_type is null then
- if used_slots >= max_slots then
- perform rhn_exception.raise_exception('servergroup_max_members');
- end if;
-
- insert into rhnServerGroupMembers(
- server_id, server_group_id
- ) values (
- server_id_in, server_group_id_in
- );
- update rhnServerGroup
- set current_members = current_members + 1
- where id = server_group_id_in;
-
- perform rhn_cache.update_perms_for_server_group(server_group_id_in);
- return;
- end if;
-
- -- now for group_type != null
- --
- select label
- into group_label
- from rhnServerGroupType sgt
- where sgt.id = group_type;
-
- -- the naive easy path that gets hit most often and has to be quickest.
- if group_label in ('sw_mgr_entitled',
- 'enterprise_entitled',
- 'monitoring_entitled',
- 'provisioning_entitled',
- 'virtualization_host',
- 'virtualization_host_platform') then
- if used_slots >= max_slots and
- (rhn_server.can_server_consume_virt_slot(server_id_in, group_label) != 1)
- then
- perform rhn_exception.raise_exception('servergroup_max_members');
- end if;
-
- insert into rhnServerGroupMembers(
- server_id, server_group_id
- ) values (
- server_id_in, server_group_id_in
- );
-
- -- Only update current members if the system in consuming a
- -- physical slot.
- if rhn_server.can_server_consume_virt_slot(server_id_in, group_label) = 0 then
- update rhnServerGroup
- set current_members = current_members + 1
- where id = server_group_id_in;
- end if;
-
- return;
- end if;
- end$$ language plpgsql;
-
- create or replace function insert_into_servergroup_maybe (
- server_id_in in numeric,
- server_group_id_in in numeric
- ) returns numeric as $$
- declare
- retval numeric := 0;
- servergroups cursor is
- select s.id server_id,
- sg.id server_group_id
- from rhnServerGroup sg,
- rhnServer s
- where s.id = server_id_in
- and sg.id = server_group_id_in
- and s.org_id = sg.org_id
- and not exists (
- select 1
- from rhnServerGroupMembers sgm
- where sgm.server_id = s.id
- and sgm.server_group_id = sg.id
- );
- begin
- for sgm in servergroups loop
- perform rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id);
- retval := retval + 1;
- end loop;
- return retval;
- end$$ language plpgsql;
-
- create or replace function insert_set_into_servergroup (
- server_group_id_in in numeric,
- user_id_in in numeric,
- set_label_in in varchar
- ) returns void
- as $$
- declare
- servers cursor is
- select st.element id
- from rhnSet st
- where st.user_id = user_id_in
- and st.label = set_label_in
- and exists (
- select 1
- from rhnUserManagedServerGroups umsg
- where umsg.server_group_id = server_group_id_in
- and umsg.user_id = user_id_in
- )
- and not exists (
- select 1
- from rhnServerGroupMembers sgm
- where sgm.server_id = st.element
- and sgm.server_group_id = server_group_id_in
- );
- begin
- for s in servers loop
- perform rhn_server.insert_into_servergroup(s.id, server_group_id_in);
- end loop;
- end$$ language plpgsql;
-
- create or replace function delete_from_servergroup (
- server_id_in in numeric,
- server_group_id_in in numeric
- ) returns void
- as $$
- declare
- server_virt_groups cursor is
- select 1
- from rhnServerEntitlementVirtual sev
- where sev.server_id = server_id_in
- and sev.server_group_id = server_group_id_in;
-
- oid numeric;
- mgmt_sgid numeric;
- label varchar;
- group_type numeric;
- begin
- select sg.group_type, sg.org_id
- into group_type, oid
- from rhnServerGroupMembers sgm,
- rhnServerGroup sg
- where sg.id = server_group_id_in
- and sg.id = sgm.server_group_id
- and sgm.server_id = server_id_in
- for update of sg;
-
- if not found then
- perform rhn_exception.raise_exception('server_not_in_group');
- end if;
-
- -- do group_type is null first
- if group_type is null then
- delete from rhnServerGroupMembers
- where server_group_id = server_group_id_in
- and server_id = server_id_in;
- update rhnServerGroup
- set current_members = current_members - 1
- where id = server_group_id_in;
- perform rhn_cache.update_perms_for_server_group(server_group_id_in);
- return;
- end if;
-
- select sgt.label
- into label
- from rhnServerGroupType sgt
- where sgt.id = group_type;
-
- if label in ('sw_mgr_entitled',
- 'enterprise_entitled',
- 'provisioning_entitled',
- 'monitoring_entitled',
- 'virtualization_host',
- 'virtualization_host_platform') then
-
- -- Only update current members if the system is consuming
- -- a physical slot.
- for server_virt_group in server_virt_groups loop
- delete from rhnServerGroupMembers
- where server_group_id = server_group_id_in
- and server_id = server_id_in;
- return;
- end loop;
-
- delete from rhnServerGroupMembers
- where server_group_id = server_group_id_in
- and server_id = server_id_in;
-
- update rhnServerGroup
- set current_members = current_members - 1
- where id = server_group_id_in;
-
- end if;
- end$$ language plpgsql;
-
- create or replace function delete_set_from_servergroup (
- server_group_id_in in numeric,
- user_id_in in numeric,
- set_label_in in varchar
- ) returns void
- as $$
- declare
- servergroups cursor is
- select sgm.server_id, sgm.server_group_id
- from rhnSet st,
- rhnServerGroupMembers sgm
- where sgm.server_group_id = server_group_id_in
- and st.user_id = user_id_in
- and st.label = set_label_in
- and sgm.server_id = st.element
- and exists (
- select 1
- from rhnUserManagedServerGroups usgp
- where usgp.server_group_id = server_group_id_in
- and usgp.user_id = user_id_in
- );
- begin
- for sgm in servergroups loop
- perform rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in);
- end loop;
- end$$ language plpgsql;
-
- create or replace function clear_servergroup (
- server_group_id_in in numeric
- ) returns void
- as $$
- declare
- servers cursor is
- select sgm.server_id id
- from rhnServerGroupMembers sgm
- where sgm.server_group_id = server_group_id_in;
- begin
- for s in servers loop
- perform rhn_server.delete_from_servergroup(s.id, server_group_id_in);
- end loop;
- end$$ language plpgsql;
-
- create or replace function delete_from_org_servergroups (
- server_id_in in numeric
- ) returns void
- as $$
- declare
- servergroups cursor is
- select sgm.server_group_id id
- from rhnServerGroup sg,
- rhnServerGroupMembers sgm
- where sgm.server_id = server_id_in
- and sgm.server_group_id = sg.id
- and sg.group_type is null;
- begin
- for sg in servergroups loop
- perform rhn_server.delete_from_servergroup(server_id_in, sg.id);
- end loop;
- end$$ language plpgsql;
-
- create or replace function get_ip_address (
- server_id_in in numeric
- ) returns varchar as $$
- declare
- interfaces cursor is
- select ni.name as name, na4.address as address
- from rhnServerNetInterface ni,
- rhnServerNetAddress4 na4
- where server_id = server_id_in
- and ni.id = na4.interface_id
- and na4.address != '127.0.0.1';
- addresses cursor is
- select ipaddr ip_addr
- from rhnServerNetwork
- where server_id = server_id_in
- and ipaddr != '127.0.0.1';
- begin
- for addr in addresses loop
- return addr.ip_addr;
- end loop;
- for iface in interfaces loop
- return iface.address;
- end loop;
- return NULL;
- end$$ language plpgsql;
-
- create or replace function update_needed_cache(
- server_id_in in numeric
- ) returns void as $$
- begin
- delete from rhnServerNeededCache
- where server_id = server_id_in;
- insert into rhnServerNeededCache
- (server_id, errata_id, package_id)
- (select distinct server_id, errata_id, package_id
- from rhnServerNeededView
- where server_id = server_id_in);
- end$$ language plpgsql;
-
--- restore the original setting
-update pg_settings set setting = overlay( setting placing '' from 1 for (length('rhn_server')+1) ) where name = 'search_path';
commit 7dcc23a410119cd9d346a502e73b62536344a279
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:57:55 2011 +0200
Revert "get_hw_info_as_clob schema upgrade script"
This reverts commit 5b060db239ed2f43106b7e16378c2cabd44e89f6.
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
deleted file mode 100644
index 819c4ca..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
+++ /dev/null
@@ -1,33 +0,0 @@
-
-create or replace function get_hw_info_as_clob(
- sid in rhnserver.id%TYPE,
- separator in varchar
-)
-return clob
-is
- ret clob;
- tmp varchar2(4000);
-begin
- dbms_lob.createtemporary(ret, true);
- for rec in (
- select m
- from (
- select 1 n, sum(nrcpu) || ' CPUs' m
- from rhncpu where rhncpu.server_id = sid
- union all
- select 2, ni.name||' '||na4.address||'/'||na4.netmask||' '||ni.hw_addr val
- from rhnservernetinterface ni,
- rhnServerNetAddress4 na4
- where ni.server_id = sid
- and ni.id = na4.interface_id
- )
- order by n, m
- ) loop
- if dbms_lob.getlength(ret) > 0 then
- dbms_lob.writeappend(ret, length(separator), separator);
- end if;
- dbms_lob.writeappend(ret, length(rec.m), rec.m);
- end loop;
- return ret;
-end;
-/
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
deleted file mode 100644
index 26ef11e..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
+++ /dev/null
@@ -1,36 +0,0 @@
--- oracle equivalent source sha1 6a538f3b05d412810baec118fbb7860348c60cd4
-
-create or replace function get_hw_info_as_clob(
- sid in rhnserver.id%TYPE,
- separator in varchar
-)
-returns text
-as
-$$
-declare
- ret text;
- rec record;
-begin
- for rec in (
- select m
- from (
- select 1 n, sum(nrcpu) || ' CPUs' m
- from rhncpu where rhncpu.server_id = sid
- union all
- select 2, ni.name||' '||coalesce(na4.address,'')||'/'||coalesce(na4.netmask,'')||' '||ni.hw_addr val
- from rhnservernetinterface,
- rhnServerNetAddress4 na4
- where ni.server_id = sid
- and ni.id = na4.interface_id
- ) X
- order by n, m
- ) loop
- if ret is null then
- ret := rec.m;
- else
- ret := ret || separator || rec.m;
- end if;
- end loop;
- return ret;
-end;
-$$ language plpgsql;
commit 2a8bb2a4e4a106a69d611664b1e018dcfc338f53
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:57:48 2011 +0200
Revert "code cleanup - tag rhn-server-network-interfaces is not used anywhere"
This reverts commit 9cb74604757119a7702f1e50ea5a941cdd209698.
diff --git a/web/modules/sniglets/Sniglets/Servers.pm b/web/modules/sniglets/Sniglets/Servers.pm
index 270b9fa..1407073 100644
--- a/web/modules/sniglets/Sniglets/Servers.pm
+++ b/web/modules/sniglets/Sniglets/Servers.pm
@@ -61,6 +61,10 @@ sub register_tags {
# has to run after server_details
$pxt->register_tag('rhn-server-network-details' => \&server_network_details, 2);
+ # slightly different than the rhn-server-network-details, this gives access to
+ # more detailed info about the network interfaces, as opposed to just hostname/ipaddy
+ $pxt->register_tag('rhn-server-network-interfaces' => \&server_network_interfaces, 2);
+
$pxt->register_tag('rhn-server-history-event-details' => \&server_history_event_details);
commit aa56e8ff2a499b98ae13af805e15991414b59a39
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:57:36 2011 +0200
Revert "code cleanup - function server_network_interfaces is not used anymore"
This reverts commit 685cf4cc094cbfd72a77644010bb19393d012ae0.
diff --git a/web/modules/sniglets/Sniglets/Servers.pm b/web/modules/sniglets/Sniglets/Servers.pm
index 155a69b..270b9fa 100644
--- a/web/modules/sniglets/Sniglets/Servers.pm
+++ b/web/modules/sniglets/Sniglets/Servers.pm
@@ -690,6 +690,64 @@ sub server_network_details {
return $ret;
}
+
+sub server_network_interfaces {
+ my $pxt = shift;
+ my %params = @_;
+ my $ret = '';
+ my $current;
+
+ my $server = $pxt->pnotes('server');
+
+ throw "No server." unless $server;
+
+ my @net_interfaces = $server->get_net_interfaces;
+
+ my %subst;
+
+ if (not @net_interfaces) {
+ return '';
+ }
+
+ PXT::Debug->log(7, "got net_interfaces...");
+
+ my $block = $params{__block__};
+ $block =~ m/<rhn-interface-data>(.*?)<\/rhn-interface-data>/gism;
+ my $device_data_block = $1;
+
+
+ my $unknown = '<span class="no-details">(unknown)</span>';
+ my $html = '';
+ my $counter = 1;
+ foreach my $interface (@net_interfaces) {
+
+ my %subst;
+ if ($counter % 2) {
+ $subst{row_class} = 'list-row-odd';
+ }
+ else {
+ $subst{row_class} = 'list-row-even';
+ }
+
+
+ $subst{interface_name} = $interface->name; # NOT NULL
+ $subst{interface_ip_addr} = defined $interface->ip_addr ? PXT::Utils->escapeHTML($interface->ip_addr) : $unknown;
+ $subst{interface_netmask} = defined $interface->netmask ? PXT::Utils->escapeHTML($interface->netmask) : $unknown;
+ $subst{interface_broadcast} = defined $interface->broadcast ? PXT::Utils->escapeHTML($interface->broadcast) : $unknown;
+ $subst{interface_hw_addr} = defined $interface->hw_addr ? PXT::Utils->escapeHTML($interface->hw_addr) : $unknown;
+ $subst{interface_module} = defined $interface->module ? PXT::Utils->escapeHTML($interface->module) : $unknown;
+
+ $html .= PXT::Utils->perform_substitutions($device_data_block, \%subst);
+ $counter++;
+ }
+
+ PXT::Debug->log(7, "html: $html");
+
+ $block =~ s{<rhn-interface-data>.*?<\/rhn-interface-data>}{$html}ism;
+
+ return $block;
+}
+
# must happen *after* server_hardware_profile... so use tags
# correctly!
sub server_device {
commit 7c2545a8a7956e20eef1d334ca80c7c3080f1e73
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:57:27 2011 +0200
Revert "code cleanup - function get_net_interfaces is not used anymore"
This reverts commit 38b10e49fbc8d858997219ddaf5514ce81367783.
diff --git a/web/modules/rhn/RHN/DB/Server.pm b/web/modules/rhn/RHN/DB/Server.pm
index 1eef958..36e5283 100644
--- a/web/modules/rhn/RHN/DB/Server.pm
+++ b/web/modules/rhn/RHN/DB/Server.pm
@@ -1383,6 +1383,14 @@ sub get_net_infos {
return @net_infos;
}
+# returns an array of all the net info objects related to a server
+sub get_net_interfaces {
+ my $self = shift;
+
+ my @net_interfaces = RHN::DB::Server::NetInterface->lookup_net_interface_by_server($self->id);
+ return @net_interfaces;
+}
+
#
# build some accessors
commit 2ea40592bf2e19a84dfc784eab195b62995ce843
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:57:12 2011 +0200
Revert "code cleanup - package RHN::DB::Server::NetInterface is not used anymore"
This reverts commit f7ae084b3cb319fce99e38e776f68529f7439ebe.
diff --git a/web/modules/rhn/RHN/DB/Server.pm b/web/modules/rhn/RHN/DB/Server.pm
index 22269cb..1eef958 100644
--- a/web/modules/rhn/RHN/DB/Server.pm
+++ b/web/modules/rhn/RHN/DB/Server.pm
@@ -25,6 +25,7 @@ use RHN::DB::Server::CdDevice;
use RHN::DB::Server::HwDevice;
use RHN::DB::Server::StorageDevice;
use RHN::DB::Server::NetInfo;
+use RHN::DB::Server::NetInterface;
use RHN::DB::TableClass;
use RHN::DataSource::Errata;
diff --git a/web/modules/rhn/RHN/DB/Server/NetInterface.pm b/web/modules/rhn/RHN/DB/Server/NetInterface.pm
new file mode 100644
index 0000000..238b75c
--- /dev/null
+++ b/web/modules/rhn/RHN/DB/Server/NetInterface.pm
@@ -0,0 +1,86 @@
+#
+# Copyright (c) 2008--2010 Red Hat, Inc.
+#
+# This software is licensed to you under the GNU General Public License,
+# version 2 (GPLv2). There is NO WARRANTY for this software, express or
+# implied, including the implied warranties of MERCHANTABILITY or FITNESS
+# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+# along with this software; if not, see
+# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+#
+# Red Hat trademarks are not licensed under GPLv2. No permission is
+# granted to use or replicate Red Hat trademarks that are incorporated
+# in this software or its documentation.
+#
+
+use strict;
+
+package RHN::DB::Server::NetInterface;
+
+use RHN::DB;
+use Carp;
+use RHN::DB::TableClass;
+
+# Corresponds to an entry in the rhnServerNetInterface table...
+
+my @net_interface_fields = qw/SERVER_ID NAME IP_ADDR NETMASK BROADCAST HW_ADDR MODULE/;
+
+my $n = new RHN::DB::TableClass("rhnServerNetInterface", "N", "", @net_interface_fields);
+
+# create a blank net info object
+sub _blank_net_interface {
+ my $class = shift;
+
+ my $self = bless {}, $class;
+
+ return $self;
+}
+
+# returns an array of net info objects given a server id
+sub lookup_net_interface_by_server {
+ my $class = shift;
+ my $server_id = shift;
+
+ my $dbh = RHN::DB->connect;
+
+ my $query;
+ my $sth;
+
+ $query = $n->select_query("N.SERVER_ID = ?");
+ $sth = $dbh->prepare($query);
+ $sth->execute($server_id);
+
+ my @ret;
+ my $count = 0;
+
+ while (my @columns = $sth->fetchrow) {
+ if ($columns[0]) {
+ $ret[$count] = $class->_blank_net_interface;
+ $ret[$count]->{"__".$_."__"} = shift @columns foreach $n->method_names;
+ }
+ $count++;
+ }
+
+ $sth->finish;
+ return @ret;
+}
+
+# build some read-only accessors
+foreach my $field ($n->method_names) {
+ my $sub = q {
+ sub RHN::DB::Server::NetInterface::[[field]] {
+ my $self = shift;
+ return $self->{__[[field]]__};
+ }
+ };
+
+ $sub =~ s/\[\[field\]\]/$field/g;
+ eval $sub;
+
+ if ($@) {
+ die $@;
+ }
+}
+
+
+return 1;
commit e5443ef04c88d56a385a527eaa3f54cf1f03ddee
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:56:34 2011 +0200
Revert "insert id from sequence using trigger"
This reverts commit f2f453196dd56c106eb451d8a5c431c93a846ba4.
diff --git a/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql b/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
index f31f4c4..da0bb65 100644
--- a/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
+++ b/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
@@ -19,9 +19,6 @@ rhn_srv_net_iface_mod_trig
before insert or update on rhnServerNetInterface
for each row
begin
- if :new.id is null then
- select rhn_srv_net_iface_id_seq.nextval into :new.id from dual;
- end if;
:new.modified := sysdate;
end;
/
diff --git a/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql b/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
index 192308f..349810c 100644
--- a/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
+++ b/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
@@ -1,10 +1,8 @@
--- oracle equivalent source sha1 1c9678fc0e82b0d0e1f659358120c971bc9bda20
+-- oracle equivalent source sha1 d37db54a176f593bd9727921ed20d00d6cd95f4b
+-- retrieved from ./1241102873/cdc6d42049bf86fbc9f1d3a5c54275eeacbd641d/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
create or replace function rhn_srv_net_iface_mod_trig_fun() returns trigger as
$$
begin
- if new.id is null then
- new.id := nextval('rhn_srv_net_iface_id_seq');
- end if;
new.modified := current_timestamp;
return new;
end;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
deleted file mode 100644
index 1387bff..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
+++ /dev/null
@@ -1,12 +0,0 @@
-create or replace trigger
-rhn_srv_net_iface_mod_trig
-before insert or update on rhnServerNetInterface
-for each row
-begin
- if :new.id is null then
- select rhn_srv_net_iface_id_seq.nextval into :new.id from dual;
- end if;
- :new.modified := sysdate;
-end;
-/
-show errors
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
deleted file mode 100644
index 588ece0..0000000
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
+++ /dev/null
@@ -1,11 +0,0 @@
--- oracle equivalent source sha1 a3c3cb4940f2e96320a833521f352b83ddddaed1
-create or replace function rhn_srv_net_iface_mod_trig_fun() returns trigger as
-$$
-begin
- if new.id is null then
- new.id := nextval('rhn_srv_net_iface_id_seq');
- end if;
- new.modified := current_timestamp;
- return new;
-end;
-$$ language plpgsql;
commit d8aefa93800f54b18b990bb40076d05a8ead3505
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:56:18 2011 +0200
Revert "add oracle equivalent"
This reverts commit 480c68154fce2eff3389b3e132fd28f96bc23859.
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
index 17fbb81..d103a65 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
@@ -1,4 +1,3 @@
--- oracle equivalent source sha1 6e90408fc4c3d072bf407d0eb18962e46cb6a860
--
-- Copyright (c) 2008--2010 Red Hat, Inc.
--
commit 26474e88d3cdc3ee3d833fcc78426bf562a7bac7
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:56:07 2011 +0200
Revert "__load_from_db: load devices using its method save()"
This reverts commit 70694d0bccdccfc3f00ba4cfc0b3dd6b52e9cc3d.
diff --git a/backend/server/rhnServer/server_hardware.py b/backend/server/rhnServer/server_hardware.py
index 2b44250..dd044e1 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -703,13 +703,29 @@ class Hardware:
self.__changed = 0
return 0
- def __load_from_db(self, DevClass, sysid):
+ def __load_from_db(self, db, DevClass, sysid):
""" Load a certain hardware class from the database """
if not self.__hardware.has_key(DevClass):
self.__hardware[DevClass] = []
- dev = DevClass()
- dev.reload(sysid)
- self.__hardware[DevClass].append(dev)
+
+ h = rhnSQL.prepare("select * from %s where server_id = :sysid" % db)
+ h.execute(sysid = sysid)
+ rows = h.fetchall_dict() or []
+
+ for device in rows:
+ dev_id = device['id']
+
+ # get rid of the keys we do not support
+ for k in ["server_id", "created", "modified", "id"]:
+ if device.has_key(k):
+ del device[k]
+ dev = DevClass(device)
+
+ # we know better
+ dev.id = dev_id
+ dev.status = 0
+ self.__hardware[DevClass].append(dev)
+ return 0
def reload_hardware_byid(self, sysid):
""" load all hardware devices for a server """
@@ -718,13 +734,18 @@ class Hardware:
return -1
self.__hardware = {} # discard what was already loaded
# load from all hardware databases
- self.__load_from_db(HardwareDevice, sysid)
- self.__load_from_db(CPUDevice, sysid)
- self.__load_from_db(DMIInformation, sysid)
- self.__load_from_db(NetworkInformation, sysid)
- self.__load_from_db(MemoryInformation, sysid)
- self.__load_from_db(InstallInformation, sysid)
- self.__load_from_db(NetIfaceInformation, sysid)
+ self.__load_from_db("rhnDevice", HardwareDevice, sysid)
+ self.__load_from_db("rhnCPU", CPUDevice, sysid)
+ self.__load_from_db("rhnServerDMI", DMIInformation, sysid)
+ self.__load_from_db("rhnServerNetwork", NetworkInformation, sysid)
+ self.__load_from_db("rhnRAM", MemoryInformation, sysid)
+ self.__load_from_db("rhnServerInstallInfo", InstallInformation, sysid)
+
+ net_iface_info = NetIfaceInformation()
+ net_iface_info.reload(sysid)
+
+ self.__hardware[NetIfaceInformation] = []
+ self.__hardware[NetIfaceInformation].append(net_iface_info)
# now set the flag
self.__changed = 0
commit 29544df9fb7d2c79db36b88548cee5f36f928d88
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 10:33:22 2011 +0200
742811 - domain_directory: R/O access to libvirtd is sufficient
diff --git a/client/tools/rhn-virtualization/virtualization/domain_directory.py b/client/tools/rhn-virtualization/virtualization/domain_directory.py
index ba069f4..6e438cc 100644
--- a/client/tools/rhn-virtualization/virtualization/domain_directory.py
+++ b/client/tools/rhn-virtualization/virtualization/domain_directory.py
@@ -67,7 +67,7 @@ class DomainDirectory:
def __init__(self):
self.__path = CONFIG_DIR
- self.conn = libvirt.open(None)
+ self.conn = libvirt.openReadOnly(None)
if not self.conn:
raise VirtualizationException, \
"Failed to open connection to hypervisor."
commit 70694d0bccdccfc3f00ba4cfc0b3dd6b52e9cc3d
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Tue Oct 25 16:33:51 2011 +0200
__load_from_db: load devices using its method save()
this will put _auto_null and other stuff in game
diff --git a/backend/server/rhnServer/server_hardware.py b/backend/server/rhnServer/server_hardware.py
index dd044e1..2b44250 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -703,29 +703,13 @@ class Hardware:
self.__changed = 0
return 0
- def __load_from_db(self, db, DevClass, sysid):
+ def __load_from_db(self, DevClass, sysid):
""" Load a certain hardware class from the database """
if not self.__hardware.has_key(DevClass):
self.__hardware[DevClass] = []
-
- h = rhnSQL.prepare("select * from %s where server_id = :sysid" % db)
- h.execute(sysid = sysid)
- rows = h.fetchall_dict() or []
-
- for device in rows:
- dev_id = device['id']
-
- # get rid of the keys we do not support
- for k in ["server_id", "created", "modified", "id"]:
- if device.has_key(k):
- del device[k]
- dev = DevClass(device)
-
- # we know better
- dev.id = dev_id
- dev.status = 0
- self.__hardware[DevClass].append(dev)
- return 0
+ dev = DevClass()
+ dev.reload(sysid)
+ self.__hardware[DevClass].append(dev)
def reload_hardware_byid(self, sysid):
""" load all hardware devices for a server """
@@ -734,18 +718,13 @@ class Hardware:
return -1
self.__hardware = {} # discard what was already loaded
# load from all hardware databases
- self.__load_from_db("rhnDevice", HardwareDevice, sysid)
- self.__load_from_db("rhnCPU", CPUDevice, sysid)
- self.__load_from_db("rhnServerDMI", DMIInformation, sysid)
- self.__load_from_db("rhnServerNetwork", NetworkInformation, sysid)
- self.__load_from_db("rhnRAM", MemoryInformation, sysid)
- self.__load_from_db("rhnServerInstallInfo", InstallInformation, sysid)
-
- net_iface_info = NetIfaceInformation()
- net_iface_info.reload(sysid)
-
- self.__hardware[NetIfaceInformation] = []
- self.__hardware[NetIfaceInformation].append(net_iface_info)
+ self.__load_from_db(HardwareDevice, sysid)
+ self.__load_from_db(CPUDevice, sysid)
+ self.__load_from_db(DMIInformation, sysid)
+ self.__load_from_db(NetworkInformation, sysid)
+ self.__load_from_db(MemoryInformation, sysid)
+ self.__load_from_db(InstallInformation, sysid)
+ self.__load_from_db(NetIfaceInformation, sysid)
# now set the flag
self.__changed = 0
commit 480c68154fce2eff3389b3e132fd28f96bc23859
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Tue Oct 25 15:42:12 2011 +0200
add oracle equivalent
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
index d103a65..17fbb81 100644
--- a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
@@ -1,3 +1,4 @@
+-- oracle equivalent source sha1 6e90408fc4c3d072bf407d0eb18962e46cb6a860
--
-- Copyright (c) 2008--2010 Red Hat, Inc.
--
commit f2f453196dd56c106eb451d8a5c431c93a846ba4
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 15:50:36 2011 +0200
insert id from sequence using trigger
diff --git a/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql b/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
index da0bb65..f31f4c4 100644
--- a/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
+++ b/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
@@ -19,6 +19,9 @@ rhn_srv_net_iface_mod_trig
before insert or update on rhnServerNetInterface
for each row
begin
+ if :new.id is null then
+ select rhn_srv_net_iface_id_seq.nextval into :new.id from dual;
+ end if;
:new.modified := sysdate;
end;
/
diff --git a/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql b/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
index 349810c..192308f 100644
--- a/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
+++ b/schema/spacewalk/postgres/triggers/rhnServerNetInterface.sql
@@ -1,8 +1,10 @@
--- oracle equivalent source sha1 d37db54a176f593bd9727921ed20d00d6cd95f4b
--- retrieved from ./1241102873/cdc6d42049bf86fbc9f1d3a5c54275eeacbd641d/schema/spacewalk/oracle/triggers/rhnServerNetInterface.sql
+-- oracle equivalent source sha1 1c9678fc0e82b0d0e1f659358120c971bc9bda20
create or replace function rhn_srv_net_iface_mod_trig_fun() returns trigger as
$$
begin
+ if new.id is null then
+ new.id := nextval('rhn_srv_net_iface_id_seq');
+ end if;
new.modified := current_timestamp;
return new;
end;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
new file mode 100644
index 0000000..1387bff
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.oracle
@@ -0,0 +1,12 @@
+create or replace trigger
+rhn_srv_net_iface_mod_trig
+before insert or update on rhnServerNetInterface
+for each row
+begin
+ if :new.id is null then
+ select rhn_srv_net_iface_id_seq.nextval into :new.id from dual;
+ end if;
+ :new.modified := sysdate;
+end;
+/
+show errors
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
new file mode 100644
index 0000000..588ece0
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/123-trigger-rhnServerNetInterface.sql.postgresql
@@ -0,0 +1,11 @@
+-- oracle equivalent source sha1 a3c3cb4940f2e96320a833521f352b83ddddaed1
+create or replace function rhn_srv_net_iface_mod_trig_fun() returns trigger as
+$$
+begin
+ if new.id is null then
+ new.id := nextval('rhn_srv_net_iface_id_seq');
+ end if;
+ new.modified := current_timestamp;
+ return new;
+end;
+$$ language plpgsql;
commit f7ae084b3cb319fce99e38e776f68529f7439ebe
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 11:07:54 2011 +0200
code cleanup - package RHN::DB::Server::NetInterface is not used anymore
diff --git a/web/modules/rhn/RHN/DB/Server.pm b/web/modules/rhn/RHN/DB/Server.pm
index 1eef958..22269cb 100644
--- a/web/modules/rhn/RHN/DB/Server.pm
+++ b/web/modules/rhn/RHN/DB/Server.pm
@@ -25,7 +25,6 @@ use RHN::DB::Server::CdDevice;
use RHN::DB::Server::HwDevice;
use RHN::DB::Server::StorageDevice;
use RHN::DB::Server::NetInfo;
-use RHN::DB::Server::NetInterface;
use RHN::DB::TableClass;
use RHN::DataSource::Errata;
diff --git a/web/modules/rhn/RHN/DB/Server/NetInterface.pm b/web/modules/rhn/RHN/DB/Server/NetInterface.pm
deleted file mode 100644
index 238b75c..0000000
--- a/web/modules/rhn/RHN/DB/Server/NetInterface.pm
+++ /dev/null
@@ -1,86 +0,0 @@
-#
-# Copyright (c) 2008--2010 Red Hat, Inc.
-#
-# This software is licensed to you under the GNU General Public License,
-# version 2 (GPLv2). There is NO WARRANTY for this software, express or
-# implied, including the implied warranties of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
-# along with this software; if not, see
-# http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
-#
-# Red Hat trademarks are not licensed under GPLv2. No permission is
-# granted to use or replicate Red Hat trademarks that are incorporated
-# in this software or its documentation.
-#
-
-use strict;
-
-package RHN::DB::Server::NetInterface;
-
-use RHN::DB;
-use Carp;
-use RHN::DB::TableClass;
-
-# Corresponds to an entry in the rhnServerNetInterface table...
-
-my @net_interface_fields = qw/SERVER_ID NAME IP_ADDR NETMASK BROADCAST HW_ADDR MODULE/;
-
-my $n = new RHN::DB::TableClass("rhnServerNetInterface", "N", "", @net_interface_fields);
-
-# create a blank net info object
-sub _blank_net_interface {
- my $class = shift;
-
- my $self = bless {}, $class;
-
- return $self;
-}
-
-# returns an array of net info objects given a server id
-sub lookup_net_interface_by_server {
- my $class = shift;
- my $server_id = shift;
-
- my $dbh = RHN::DB->connect;
-
- my $query;
- my $sth;
-
- $query = $n->select_query("N.SERVER_ID = ?");
- $sth = $dbh->prepare($query);
- $sth->execute($server_id);
-
- my @ret;
- my $count = 0;
-
- while (my @columns = $sth->fetchrow) {
- if ($columns[0]) {
- $ret[$count] = $class->_blank_net_interface;
- $ret[$count]->{"__".$_."__"} = shift @columns foreach $n->method_names;
- }
- $count++;
- }
-
- $sth->finish;
- return @ret;
-}
-
-# build some read-only accessors
-foreach my $field ($n->method_names) {
- my $sub = q {
- sub RHN::DB::Server::NetInterface::[[field]] {
- my $self = shift;
- return $self->{__[[field]]__};
- }
- };
-
- $sub =~ s/\[\[field\]\]/$field/g;
- eval $sub;
-
- if ($@) {
- die $@;
- }
-}
-
-
-return 1;
commit 38b10e49fbc8d858997219ddaf5514ce81367783
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 11:06:33 2011 +0200
code cleanup - function get_net_interfaces is not used anymore
diff --git a/web/modules/rhn/RHN/DB/Server.pm b/web/modules/rhn/RHN/DB/Server.pm
index 36e5283..1eef958 100644
--- a/web/modules/rhn/RHN/DB/Server.pm
+++ b/web/modules/rhn/RHN/DB/Server.pm
@@ -1383,14 +1383,6 @@ sub get_net_infos {
return @net_infos;
}
-# returns an array of all the net info objects related to a server
-sub get_net_interfaces {
- my $self = shift;
-
- my @net_interfaces = RHN::DB::Server::NetInterface->lookup_net_interface_by_server($self->id);
- return @net_interfaces;
-}
-
#
# build some accessors
commit 685cf4cc094cbfd72a77644010bb19393d012ae0
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 11:05:47 2011 +0200
code cleanup - function server_network_interfaces is not used anymore
diff --git a/web/modules/sniglets/Sniglets/Servers.pm b/web/modules/sniglets/Sniglets/Servers.pm
index 270b9fa..155a69b 100644
--- a/web/modules/sniglets/Sniglets/Servers.pm
+++ b/web/modules/sniglets/Sniglets/Servers.pm
@@ -690,64 +690,6 @@ sub server_network_details {
return $ret;
}
-
-sub server_network_interfaces {
- my $pxt = shift;
- my %params = @_;
- my $ret = '';
- my $current;
-
- my $server = $pxt->pnotes('server');
-
- throw "No server." unless $server;
-
- my @net_interfaces = $server->get_net_interfaces;
-
- my %subst;
-
- if (not @net_interfaces) {
- return '';
- }
-
- PXT::Debug->log(7, "got net_interfaces...");
-
- my $block = $params{__block__};
- $block =~ m/<rhn-interface-data>(.*?)<\/rhn-interface-data>/gism;
- my $device_data_block = $1;
-
-
- my $unknown = '<span class="no-details">(unknown)</span>';
- my $html = '';
- my $counter = 1;
- foreach my $interface (@net_interfaces) {
-
- my %subst;
- if ($counter % 2) {
- $subst{row_class} = 'list-row-odd';
- }
- else {
- $subst{row_class} = 'list-row-even';
- }
-
-
- $subst{interface_name} = $interface->name; # NOT NULL
- $subst{interface_ip_addr} = defined $interface->ip_addr ? PXT::Utils->escapeHTML($interface->ip_addr) : $unknown;
- $subst{interface_netmask} = defined $interface->netmask ? PXT::Utils->escapeHTML($interface->netmask) : $unknown;
- $subst{interface_broadcast} = defined $interface->broadcast ? PXT::Utils->escapeHTML($interface->broadcast) : $unknown;
- $subst{interface_hw_addr} = defined $interface->hw_addr ? PXT::Utils->escapeHTML($interface->hw_addr) : $unknown;
- $subst{interface_module} = defined $interface->module ? PXT::Utils->escapeHTML($interface->module) : $unknown;
-
- $html .= PXT::Utils->perform_substitutions($device_data_block, \%subst);
- $counter++;
- }
-
- PXT::Debug->log(7, "html: $html");
-
- $block =~ s{<rhn-interface-data>.*?<\/rhn-interface-data>}{$html}ism;
-
- return $block;
-}
-
# must happen *after* server_hardware_profile... so use tags
# correctly!
sub server_device {
commit 9cb74604757119a7702f1e50ea5a941cdd209698
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 11:04:27 2011 +0200
code cleanup - tag rhn-server-network-interfaces is not used anywhere
diff --git a/web/modules/sniglets/Sniglets/Servers.pm b/web/modules/sniglets/Sniglets/Servers.pm
index 1407073..270b9fa 100644
--- a/web/modules/sniglets/Sniglets/Servers.pm
+++ b/web/modules/sniglets/Sniglets/Servers.pm
@@ -61,10 +61,6 @@ sub register_tags {
# has to run after server_details
$pxt->register_tag('rhn-server-network-details' => \&server_network_details, 2);
- # slightly different than the rhn-server-network-details, this gives access to
- # more detailed info about the network interfaces, as opposed to just hostname/ipaddy
- $pxt->register_tag('rhn-server-network-interfaces' => \&server_network_interfaces, 2);
-
$pxt->register_tag('rhn-server-history-event-details' => \&server_history_event_details);
commit 5b060db239ed2f43106b7e16378c2cabd44e89f6
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Oct 21 10:03:49 2011 +0200
get_hw_info_as_clob schema upgrade script
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
new file mode 100644
index 0000000..819c4ca
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.oracle
@@ -0,0 +1,33 @@
+
+create or replace function get_hw_info_as_clob(
+ sid in rhnserver.id%TYPE,
+ separator in varchar
+)
+return clob
+is
+ ret clob;
+ tmp varchar2(4000);
+begin
+ dbms_lob.createtemporary(ret, true);
+ for rec in (
+ select m
+ from (
+ select 1 n, sum(nrcpu) || ' CPUs' m
+ from rhncpu where rhncpu.server_id = sid
+ union all
+ select 2, ni.name||' '||na4.address||'/'||na4.netmask||' '||ni.hw_addr val
+ from rhnservernetinterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
+ )
+ order by n, m
+ ) loop
+ if dbms_lob.getlength(ret) > 0 then
+ dbms_lob.writeappend(ret, length(separator), separator);
+ end if;
+ dbms_lob.writeappend(ret, length(rec.m), rec.m);
+ end loop;
+ return ret;
+end;
+/
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
new file mode 100644
index 0000000..26ef11e
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/122-get_hw_info_as_clob.sql.postgresql
@@ -0,0 +1,36 @@
+-- oracle equivalent source sha1 6a538f3b05d412810baec118fbb7860348c60cd4
+
+create or replace function get_hw_info_as_clob(
+ sid in rhnserver.id%TYPE,
+ separator in varchar
+)
+returns text
+as
+$$
+declare
+ ret text;
+ rec record;
+begin
+ for rec in (
+ select m
+ from (
+ select 1 n, sum(nrcpu) || ' CPUs' m
+ from rhncpu where rhncpu.server_id = sid
+ union all
+ select 2, ni.name||' '||coalesce(na4.address,'')||'/'||coalesce(na4.netmask,'')||' '||ni.hw_addr val
+ from rhnservernetinterface,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
+ ) X
+ order by n, m
+ ) loop
+ if ret is null then
+ ret := rec.m;
+ else
+ ret := ret || separator || rec.m;
+ end if;
+ end loop;
+ return ret;
+end;
+$$ language plpgsql;
commit aa6a12287e103d424ebf882cf0dc003ea9c93e91
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Oct 21 10:03:03 2011 +0200
upgrade script for rhn_server.pkb
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
new file mode 100644
index 0000000..87600df
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.oracle
@@ -0,0 +1,750 @@
+--
+-- Copyright (c) 2008--2010 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+--
+--
+--
+
+create or replace
+package body rhn_server
+is
+ function system_service_level(
+ server_id_in in number,
+ service_level_in in varchar2
+ ) return number is
+
+ cursor ents is
+ select label from rhnServerEntitlementView
+ where server_id = server_id_in;
+
+ retval number := 0;
+
+ begin
+ for ent in ents loop
+ retval := rhn_entitlements.entitlement_grants_service (ent.label, service_level_in);
+ if retval = 1 then
+ return retval;
+ end if;
+ end loop;
+
+ return retval;
+
+ end system_service_level;
+
+
+ function can_change_base_channel(server_id_in IN NUMBER)
+ return number
+ is
+ throwaway number;
+ begin
+ -- the idea: if we get past this query, the server is
+ -- neither sat nor proxy, so base channel is changeable
+
+ select 1 into throwaway
+ from rhnServer S
+ where S.id = server_id_in
+ and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id)
+ and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id);
+
+ return 1;
+ exception
+ when no_data_found
+ then
+ return 0;
+ end can_change_base_channel;
+
+ procedure set_custom_value(
+ server_id_in in number,
+ user_id_in in number,
+ key_label_in in varchar2,
+ value_in in varchar2
+ ) is
+ key_id_val number;
+ begin
+ select CDK.id into key_id_val
+ from rhnCustomDataKey CDK,
+ rhnServer S
+ where S.id = server_id_in
+ and S.org_id = CDK.org_id
+ and CDK.label = key_label_in;
+
+ begin
+ insert into rhnServerCustomDataValue (server_id, key_id, value, created_by, last_modified_by)
+ values (server_id_in, key_id_val, value_in, user_id_in, user_id_in);
+ exception
+ when DUP_VAL_ON_INDEX
+ then
+ update rhnServerCustomDataValue
+ set value = value_in,
+ last_modified_by = user_id_in
+ where server_id = server_id_in
+ and key_id = key_id_val;
+ end;
+
+ end set_custom_value;
+
+ function bulk_set_custom_value(
+ key_label_in in varchar2,
+ value_in in varchar2,
+ set_label_in in varchar2,
+ set_uid_in in number
+ )
+ return integer
+ is
+ i integer := 0;
+ begin
+ i := 0;
+ for server in rhn_set.set_iterator(set_label_in, set_uid_in)
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in);
+ i := i + 1;
+ end if;
+ end loop server;
+ return i;
+ end bulk_set_custom_value;
+
+ procedure bulk_snapshot_tag(
+ org_id_in in number,
+ tagname_in in varchar2,
+ set_label_in in varchar2,
+ set_uid_in in number
+ ) is
+ snapshot_id number;
+ begin
+ for server in rhn_set.set_iterator(set_label_in, set_uid_in)
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ begin
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+ exception
+ when NO_DATA_FOUND then
+ rhn_server.snapshot_server(server.element, 'tagging system: ' || tagname_in);
+
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+ end;
+
+ -- now have a snapshot_id to work with...
+ begin
+ rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in);
+ exception
+ when DUP_VAL_ON_INDEX
+ then
+ -- do nothing, be forgiving...
+ null;
+ end;
+ end if;
+ end loop server;
+ end bulk_snapshot_tag;
+
+ procedure tag_delete(
+ server_id_in in number,
+ tag_id_in in number
+ ) is
+ cursor snapshots is
+ select snapshot_id
+ from rhnSnapshotTag
+ where tag_id = tag_id_in;
+ tag_id_tmp number;
+ begin
+ select id into tag_id_tmp
+ from rhnTag
+ where id = tag_id_in
+ for update;
+
+ delete
+ from rhnSnapshotTag
+ where server_id = server_id_in
+ and tag_id = tag_id_in;
+ for snapshot in snapshots loop
+ return;
+ end loop;
+ delete
+ from rhnTag
+ where id = tag_id_in;
+ end tag_delete;
+
+ procedure tag_snapshot(
+ snapshot_id_in in number,
+ org_id_in in number,
+ tagname_in in varchar2
+ ) is
+ begin
+ insert into rhnSnapshotTag (snapshot_id, server_id, tag_id)
+ select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in)
+ from rhnSnapshot
+ where id = snapshot_id_in;
+ end tag_snapshot;
+
+ procedure bulk_snapshot(
+ reason_in in varchar2,
+ set_label_in in varchar2,
+ set_uid_in in number
+ ) is
+ begin
+ for server in rhn_set.set_iterator(set_label_in, set_uid_in)
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ rhn_server.snapshot_server(server.element, reason_in);
+ end if;
+ end loop server;
+ end bulk_snapshot;
+
+ procedure snapshot_server(
+ server_id_in in number,
+ reason_in in varchar2
+ ) is
+ snapshot_id number;
+ cursor revisions is
+ select distinct
+ cr.id
+ from rhnConfigRevision cr,
+ rhnConfigFileName cfn,
+ rhnConfigFile cf,
+ rhnConfigChannel cc,
+ rhnServerConfigChannel scc
+ where 1=1
+ and scc.server_id = server_id_in
+ and scc.config_channel_id = cc.id
+ and cc.id = cf.config_channel_id
+ and cf.id = cr.config_file_id
+ and cr.id = cf.latest_config_revision_id
+ and cf.config_file_name_id = cfn.id
+ and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path);
+ locked integer;
+ begin
+ select rhn_snapshot_id_seq.nextval into snapshot_id from dual;
+
+ insert into rhnSnapshot (id, org_id, server_id, reason) (
+ select snapshot_id,
+ s.org_id,
+ server_id_in,
+ reason_in
+ from rhnServer s
+ where s.id = server_id_in
+ );
+ insert into rhnSnapshotChannel (snapshot_id, channel_id) (
+ select snapshot_id, sc.channel_id
+ from rhnServerChannel sc
+ where sc.server_id = server_id_in
+ );
+ insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) (
+ select snapshot_id, sgm.server_group_id
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ );
+ locked := 0;
+ while true loop
+ begin
+ insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id)
+ select rhn_pkgnevra_id_seq.nextval, sp.name_id, sp.evr_id, sp.package_arch_id
+ from rhnServerPackage sp
+ where sp.server_id = server_id_in
+ and not exists
+ (select 1
+ from rhnPackageNEVRA nevra
+ where nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null)));
+ exit;
+ exception when dup_val_on_index then
+ if locked = 1 then
+ raise;
+ else
+ lock table rhnPackageNEVRA in exclusive mode;
+ locked := 1;
+ end if;
+ end;
+ end loop;
+ insert into rhnSnapshotPackage (snapshot_id, nevra_id) (
+ select distinct snapshot_id, nevra.id
+ from rhnServerPackage sp, rhnPackageNEVRA nevra
+ where sp.server_id = server_id_in
+ and nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null))
+ );
+
+ insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) (
+ select snapshot_id, scc.config_channel_id
+ from rhnServerConfigChannel scc
+ where server_id = server_id_in
+ );
+
+ for revision in revisions loop
+ insert into rhnSnapshotConfigRevision (
+ snapshot_id, config_revision_id
+ ) values (
+ snapshot_id, revision.id
+ );
+ end loop;
+ end snapshot_server;
+
+ procedure remove_action(
+ server_id_in in number,
+ action_id_in in number
+ ) is
+ -- this really wants "nulls last", but 8.1.7.3.0 sucks ass.
+ -- instead, we make a local table that holds our
+ -- list of ids with null prereqs. There's surely a better way
+ -- (an array instead of a table maybe? who knows...)
+ -- but I've got code to do this handy that I can look at ;)
+ cursor chained_actions is
+ select id, prerequisite
+ from rhnAction
+ start with id = action_id_in
+ connect by prior id = prerequisite
+ order by prerequisite desc;
+ cursor sessions is
+ select s.id
+ from rhnKickstartSession s
+ where server_id_in in (s.old_server_id, s.new_server_id)
+ and s.action_id = action_id_in
+ and not exists (
+ select 1
+ from rhnKickstartSessionState ss
+ where ss.id = s.state_id
+ and ss.label in ('failed','complete')
+ );
+ type chain_end_type is table of number index by binary_integer;
+ chain_ends chain_end_type;
+ i number;
+ prereq number := 1;
+ begin
+ select prerequisite
+ into prereq
+ from rhnAction
+ where id = action_id_in;
+
+ if prereq is not null then
+ rhn_exception.raise_exception('action_is_child');
+ end if;
+
+ i := 0;
+ for action in chained_actions loop
+ if action.prerequisite is null then
+ chain_ends(i) := action.id;
+ i := i + 1;
+ else
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = action.id;
+ end if;
+ end loop;
+ i := chain_ends.first;
+ while i is not null loop
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = chain_ends(i);
+ i := chain_ends.next(i);
+ end loop;
+ for s in sessions loop
+ update rhnKickstartSession
+ set state_id = (
+ select id
+ from rhnKickstartSessionState
+ where label = 'failed'
+ ),
+ action_id = null
+ where id = s.id;
+ set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to action removal');
+ end loop;
+ end remove_action;
+
+ function check_user_access(server_id_in in number, user_id_in in number)
+ return number
+ is
+ has_access number;
+ begin
+ -- first check; if this returns no rows, then the server/user are in different orgs, and we bail
+ select 1 into has_access
+ from rhnServer S,
+ web_contact wc
+ where wc.org_id = s.org_id
+ and s.id = server_id_in
+ and wc.id = user_id_in;
+
+ -- okay, so they're in the same org. if we have an org admin, they get a free pass
+ if rhn_user.check_role(user_id_in, 'org_admin') = 1
+ then
+ return 1;
+ end if;
+
+ select 1 into has_access
+ from rhnServerGroupMembers SGM,
+ rhnUserServerGroupPerms USG
+ where SGM.server_group_id = USG.server_group_id
+ and SGM.server_id = server_id_in
+ and USG.user_id = user_id_in
+ and rownum = 1;
+
+ return 1;
+ exception
+ when no_data_found
+ then
+ return 0;
+ end check_user_access;
+
+ -- *******************************************************************
+ -- FUNCTION: can_server_consume_virt_slot
+ -- Returns 1 if the server id is eligible to consume a virtual slot,
+ -- else returns 0.
+ -- Called by: insert_into_servergroup, delete_from_servergroup
+ -- *******************************************************************
+ function can_server_consume_virt_slot(server_id_in in number,
+ group_type_in in
+ rhnServerGroupType.label%TYPE)
+ return number
+ is
+
+ cursor server_virt_slots is
+ select vi.VIRTUAL_SYSTEM_ID
+ from
+ rhnVirtualInstance vi
+ where
+ -- server id is a virtual instance
+ vi.VIRTUAL_SYSTEM_ID = server_id_in
+ -- server id's host is virt entitled
+ and exists ( select 1
+ from rhnServerEntitlementView sev
+ where vi.HOST_SYSTEM_ID = sev.server_id
+ and sev.label in ('virtualization_host',
+ 'virtualization_host_platform') )
+ -- server id's host also has the ent we want
+ and exists ( select 1
+ from rhnServerEntitlementView sev2
+ where vi.HOST_SYSTEM_ID = sev2.server_id
+ and sev2.label = group_type_in );
+
+ begin
+ for server_virt_slot in server_virt_slots loop
+ return 1;
+ end loop;
+ return 0;
+ end can_server_consume_virt_slot;
+
+
+ procedure insert_into_servergroup (
+ server_id_in in number,
+ server_group_id_in in number
+ ) is
+ used_slots number;
+ max_slots number;
+ org_id number;
+ mgmt_available number;
+ mgmt_upgrade number;
+ mgmt_sgid number;
+ prov_available number;
+ prov_upgrade number;
+ prov_sgid number;
+ group_label rhnServerGroupType.label%TYPE;
+ group_type number;
+ begin
+ -- frist, group_type = null, because it's easy...
+
+ -- this will rowlock the servergroup we're trying to change;
+ -- we probably need to lock the other one, but I think the chances
+ -- of it being a real issue are very small for now...
+ select sg.group_type, sg.org_id, sg.current_members, sg.max_members
+ into group_type, org_id, used_slots, max_slots
+ from rhnServerGroup sg
+ where sg.id = server_group_id_in
+ for update of sg.current_members;
+
+ if group_type is null then
+ if used_slots >= max_slots then
+ rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+
+ rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ -- now for group_type != null
+ --
+ select label
+ into group_label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ -- the naive easy path that gets hit most often and has to be quickest.
+ if group_label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'monitoring_entitled',
+ 'provisioning_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+ if used_slots >= max_slots and
+ (can_server_consume_virt_slot(server_id_in, group_label) != 1)
+ then
+ rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+
+ -- Only update current members if the system in consuming a
+ -- physical slot.
+ if can_server_consume_virt_slot(server_id_in, group_label) = 0 then
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+ end if;
+
+ return;
+ end if;
+ end;
+
+ function insert_into_servergroup_maybe (
+ server_id_in in number,
+ server_group_id_in in number
+ ) return number is
+ retval number := 0;
+ cursor servergroups is
+ select s.id server_id,
+ sg.id server_group_id
+ from rhnServerGroup sg,
+ rhnServer s
+ where s.id = server_id_in
+ and sg.id = server_group_id_in
+ and s.org_id = sg.org_id
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = s.id
+ and sgm.server_group_id = sg.id
+ );
+ begin
+ for sgm in servergroups loop
+ rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id);
+ retval := retval + 1;
+ end loop;
+ return retval;
+ end insert_into_servergroup_maybe;
+
+ procedure insert_set_into_servergroup (
+ server_group_id_in in number,
+ user_id_in in number,
+ set_label_in in varchar2
+ ) is
+ cursor servers is
+ select st.element id
+ from rhnSet st
+ where st.user_id = user_id_in
+ and st.label = set_label_in
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups umsg
+ where umsg.server_group_id = server_group_id_in
+ and umsg.user_id = user_id_in
+ )
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = st.element
+ and sgm.server_group_id = server_group_id_in
+ );
+ begin
+ for s in servers loop
+ rhn_server.insert_into_servergroup(s.id, server_group_id_in);
+ end loop;
+ end insert_set_into_servergroup;
+
+ procedure delete_from_servergroup (
+ server_id_in in number,
+ server_group_id_in in number
+ ) is
+ cursor server_virt_groups is
+ select 1
+ from rhnServerEntitlementVirtual sev
+ where sev.server_id = server_id_in
+ and sev.server_group_id = server_group_id_in;
+
+ oid number;
+ mgmt_sgid number;
+ label rhnServerGroupType.label%TYPE;
+ group_type number;
+ begin
+ begin
+ select sg.group_type, sg.org_id
+ into group_type, oid
+ from rhnServerGroupMembers sgm,
+ rhnServerGroup sg
+ where sg.id = server_group_id_in
+ and sg.id = sgm.server_group_id
+ and sgm.server_id = server_id_in
+ for update of sg.current_members;
+ exception
+ when no_data_found then
+ rhn_exception.raise_exception('server_not_in_group');
+ end;
+
+ -- do group_type is null first
+ if group_type is null then
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+ rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ select sgt.label
+ into label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ if label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'provisioning_entitled',
+ 'monitoring_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+
+ -- Only update current members if the system is consuming
+ -- a physical slot.
+ for server_virt_group in server_virt_groups loop
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ return;
+ end loop;
+
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+
+ end if;
+ end;
+
+ procedure delete_set_from_servergroup (
+ server_group_id_in in number,
+ user_id_in in number,
+ set_label_in in varchar2
+ ) is
+ cursor servergroups is
+ select sgm.server_id, sgm.server_group_id
+ from rhnSet st,
+ rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in
+ and st.user_id = user_id_in
+ and st.label = set_label_in
+ and sgm.server_id = st.element
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups usgp
+ where usgp.server_group_id = server_group_id_in
+ and usgp.user_id = user_id_in
+ );
+ begin
+ for sgm in servergroups loop
+ rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in);
+ end loop;
+ end delete_set_from_servergroup;
+
+ procedure clear_servergroup (
+ server_group_id_in in number
+ ) is
+ cursor servers is
+ select sgm.server_id id
+ from rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in;
+ begin
+ for s in servers loop
+ rhn_server.delete_from_servergroup(s.id, server_group_id_in);
+ end loop;
+ end clear_servergroup;
+
+ procedure delete_from_org_servergroups (
+ server_id_in in number
+ ) is
+ cursor servergroups is
+ select sgm.server_group_id id
+ from rhnServerGroup sg,
+ rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ and sgm.server_group_id = sg.id
+ and sg.group_type is null;
+ begin
+ for sg in servergroups loop
+ rhn_server.delete_from_servergroup(server_id_in, sg.id);
+ end loop;
+ end delete_from_org_servergroups;
+
+ function get_ip_address (
+ server_id_in in number
+ ) return varchar2 is
+ cursor interfaces is
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = server_id_in
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
+ cursor addresses is
+ select ipaddr ip_addr
+ from rhnServerNetwork
+ where server_id = server_id_in
+ and ipaddr != '127.0.0.1';
+ begin
+ for addr in addresses loop
+ return addr.ip_addr;
+ end loop;
+ for iface in interfaces loop
+ return iface.address;
+ end loop;
+ return NULL;
+ end get_ip_address;
+
+ procedure update_needed_cache(server_id_in in number)
+ is
+ begin
+ delete from rhnServerNeededCache
+ where server_id = server_id_in;
+ insert into rhnServerNeededCache
+ (server_id, errata_id, package_id)
+ (select distinct server_id, errata_id, package_id
+ from rhnServerNeededView
+ where server_id = server_id_in);
+ end update_needed_cache;
+
+end rhn_server;
+/
+SHOW ERRORS
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
new file mode 100644
index 0000000..d103a65
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/121-rhn_server-get_ip_address.sql.postgresql
@@ -0,0 +1,802 @@
+--
+-- Copyright (c) 2008--2010 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+--
+--
+--
+
+create schema rhn_server;
+
+--update pg_setting
+update pg_settings set setting = 'rhn_server,' || setting where name = 'search_path';
+
+ create or replace function system_service_level(
+ server_id_in in numeric,
+ service_level_in in varchar
+ ) returns numeric as $$
+ declare
+ ents cursor is
+ select label from rhnServerEntitlementView
+ where server_id = server_id_in;
+
+ retval numeric := 0;
+
+ begin
+ for ent in ents loop
+ retval := rhn_entitlements.entitlement_grants_service (ent.label, service_level_in);
+ if retval = 1 then
+ return retval;
+ end if;
+ end loop;
+
+ return retval;
+
+ end$$ language plpgsql;
+
+
+ create or replace function can_change_base_channel(server_id_in IN NUMERIC)
+ returns numeric
+ as $$
+ declare
+ throwaway numeric;
+ begin
+ -- the idea: if we get past this query, the server is
+ -- neither sat nor proxy, so base channel is changeable
+
+ select 1 into throwaway
+ from rhnServer S
+ where S.id = server_id_in
+ and not exists (select 1 from rhnSatelliteInfo SI where SI.server_id = S.id)
+ and not exists (select 1 from rhnProxyInfo PI where PI.server_id = S.id);
+
+ if not found then
+ return 0;
+ end if;
+
+ return 1;
+ end$$ language plpgsql;
+
+ create or replace function set_custom_value(
+ server_id_in in numeric,
+ user_id_in in numeric,
+ key_label_in in varchar,
+ value_in in varchar
+ ) returns void
+ as $$
+ declare
+ key_id_val numeric;
+ begin
+ select CDK.id into strict key_id_val
+ from rhnCustomDataKey CDK,
+ rhnServer S
+ where S.id = server_id_in
+ and S.org_id = CDK.org_id
+ and CDK.label = key_label_in;
+
+ begin
+ insert into rhnServerCustomDataValue (server_id, key_id, value, created_by, last_modified_by)
+ values (server_id_in, key_id_val, value_in, user_id_in, user_id_in);
+ exception
+ when UNIQUE_VIOLATION
+ then
+ update rhnServerCustomDataValue
+ set value = value_in,
+ last_modified_by = user_id_in
+ where server_id = server_id_in
+ and key_id = key_id_val;
+ end;
+
+ end$$ language plpgsql;
+
+ create or replace function bulk_set_custom_value(
+ key_label_in in varchar,
+ value_in in varchar,
+ set_label_in in varchar,
+ set_uid_in in numeric
+ )
+ returns integer
+ as $$
+ declare
+ i integer;
+ server record;
+ begin
+ i := 0;
+ for server in
+ SELECT user_id, label, element, element_two
+ FROM rhnSet
+ WHERE label = set_label_in
+ AND user_id = set_uid_in
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ perform rhn_server.set_custom_value(server.element, set_uid_in, key_label_in, value_in);
+ i := i + 1;
+ end if;
+ end loop;
+ return i;
+ end$$ language plpgsql;
+
+ create or replace function bulk_snapshot_tag(
+ org_id_in in numeric,
+ tagname_in in varchar,
+ set_label_in in varchar,
+ set_uid_in in numeric
+ ) returns void
+ as $$
+ declare
+ server record;
+ snapshot_id numeric;
+ begin
+ for server in
+ SELECT user_id, label, element, element_two
+ FROM rhnSet
+ WHERE label = set_label_in
+ AND user_id = set_uid_in
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+
+ if snapshot_id is null then
+ perform rhn_server.snapshot_server(server.element, 'tagging system: ' || tagname_in);
+
+ select max(id) into snapshot_id
+ from rhnSnapshot
+ where server_id = server.element;
+ end if;
+
+ -- now have a snapshot_id to work with...
+ begin
+ perform rhn_server.tag_snapshot(snapshot_id, org_id_in, tagname_in);
+ exception
+ when UNIQUE_VIOLATION
+ then
+ -- do nothing, be forgiving...
+ null;
+ end;
+ end if;
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function tag_delete(
+ server_id_in in numeric,
+ tag_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ snapshots cursor is
+ select snapshot_id
+ from rhnSnapshotTag
+ where tag_id = tag_id_in;
+ tag_id_tmp numeric;
+ begin
+ select id into tag_id_tmp
+ from rhnTag
+ where id = tag_id_in
+ for update;
+
+ delete
+ from rhnSnapshotTag
+ where server_id = server_id_in
+ and tag_id = tag_id_in;
+ for snapshot in snapshots loop
+ return;
+ end loop;
+ delete
+ from rhnTag
+ where id = tag_id_in;
+ end$$ language plpgsql;
+
+ create or replace function tag_snapshot(
+ snapshot_id_in in numeric,
+ org_id_in in numeric,
+ tagname_in in varchar
+ ) returns void
+ as $$
+ begin
+ insert into rhnSnapshotTag (snapshot_id, server_id, tag_id)
+ select snapshot_id_in, server_id, lookup_tag(org_id_in, tagname_in)
+ from rhnSnapshot
+ where id = snapshot_id_in;
+ end$$ language plpgsql;
+
+ create or replace function bulk_snapshot(
+ reason_in in varchar,
+ set_label_in in varchar,
+ set_uid_in in numeric
+ ) returns void
+ as $$
+ declare
+ server record;
+ begin
+ for server in
+ SELECT user_id, label, element, element_two
+ FROM rhnSet
+ WHERE label = set_label_in
+ AND user_id = set_uid_in
+ loop
+ if rhn_server.system_service_level(server.element, 'provisioning') = 1 then
+ perform rhn_server.snapshot_server(server.element, reason_in);
+ end if;
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function snapshot_server(
+ server_id_in in numeric,
+ reason_in in varchar
+ ) returns void
+ as $$
+ declare
+ snapshot_id_v numeric;
+ revisions cursor is
+ select distinct
+ cr.id
+ from rhnConfigRevision cr,
+ rhnConfigFileName cfn,
+ rhnConfigFile cf,
+ rhnConfigChannel cc,
+ rhnServerConfigChannel scc
+ where 1=1
+ and scc.server_id = server_id_in
+ and scc.config_channel_id = cc.id
+ and cc.id = cf.config_channel_id
+ and cf.id = cr.config_file_id
+ and cr.id = cf.latest_config_revision_id
+ and cf.config_file_name_id = cfn.id
+ and cf.id = lookup_first_matching_cf(scc.server_id, cfn.path);
+ locked integer;
+ begin
+ select nextval('rhn_snapshot_id_seq') into snapshot_id_v;
+
+ insert into rhnSnapshot (id, org_id, server_id, reason) (
+ select snapshot_id_v,
+ s.org_id,
+ server_id_in,
+ reason_in
+ from rhnServer s
+ where s.id = server_id_in
+ );
+ insert into rhnSnapshotChannel (snapshot_id, channel_id) (
+ select snapshot_id_v, sc.channel_id
+ from rhnServerChannel sc
+ where sc.server_id = server_id_in
+ );
+ insert into rhnSnapshotServerGroup (snapshot_id, server_group_id) (
+ select snapshot_id_v, sgm.server_group_id
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ );
+ locked := 0;
+ <<iloop>>
+ while true loop
+ begin
+ insert into rhnPackageNEVRA (id, name_id, evr_id, package_arch_id)
+ select nextval('rhn_pkgnevra_id_seq'), sp.name_id, sp.evr_id, sp.package_arch_id
+ from rhnServerPackage sp
+ where sp.server_id = server_id_in
+ and not exists
+ (select 1
+ from rhnPackageNEVRA nevra
+ where nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null)));
+ exit iloop;
+ exception when unique_violation then
+ if locked = 1 then
+ raise;
+ else
+ lock table rhnPackageNEVRA in exclusive mode;
+ locked := 1;
+ end if;
+ end;
+ end loop;
+ insert into rhnSnapshotPackage (snapshot_id, nevra_id) (
+ select distinct snapshot_id_v, nevra.id
+ from rhnServerPackage sp, rhnPackageNEVRA nevra
+ where sp.server_id = server_id_in
+ and nevra.name_id = sp.name_id
+ and nevra.evr_id = sp.evr_id
+ and (nevra.package_arch_id = sp.package_arch_id
+ or (nevra.package_arch_id is null
+ and sp.package_arch_id is null))
+ );
+
+ insert into rhnSnapshotConfigChannel ( snapshot_id, config_channel_id ) (
+ select snapshot_id_v, scc.config_channel_id
+ from rhnServerConfigChannel scc
+ where server_id = server_id_in
+ );
+
+ for revision in revisions loop
+ insert into rhnSnapshotConfigRevision (
+ snapshot_id, config_revision_id
+ ) values (
+ snapshot_id_v, revision.id
+ );
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function remove_action(
+ server_id_in in numeric,
+ action_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ -- this really wants "nulls last", but 8.1.7.3.0 sucks ass.
+ -- instead, we make a local table that holds our
+ -- list of ids with null prereqs. There's surely a better way
+ -- (an array instead of a table maybe? who knows...)
+ -- but I've got code to do this handy that I can look at ;)
+ chained_actions cursor is
+ with recursive r(id, prerequisite) as (
+ select id, prerequisite
+ from rhnAction
+ where id = action_id_in
+ union all
+ select r1.id, r1.prerequisite
+ from rhnAction r1, r
+ where r.id = r1.prerequisite
+ )
+ select * from r
+ order by prerequisite desc;
+ sessions cursor is
+ select s.id
+ from rhnKickstartSession s
+ where server_id_in in (s.old_server_id, s.new_server_id)
+ and s.action_id = action_id_in
+ and not exists (
+ select 1
+ from rhnKickstartSessionState ss
+ where ss.id = s.state_id
+ and ss.label in ('failed','complete')
+ );
+ chain_ends numeric[];
+ i numeric;
+ prereq numeric := 1;
+ begin
+ select prerequisite
+ into prereq
+ from rhnAction
+ where id = action_id_in;
+
+ if prereq is not null then
+ perform rhn_exception.raise_exception('action_is_child');
+ end if;
+
+ chain_ends := '{}';
+ i := 1;
+ for action in chained_actions loop
+ if action.prerequisite is null then
+ chain_ends[i] := action.id;
+ i := i + 1;
+ else
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = action.id;
+ end if;
+ end loop;
+
+ delete from rhnServerAction
+ where server_id = server_id_in
+ and action_id = any(chain_ends);
+
+ for s in sessions loop
+ update rhnKickstartSession
+ set state_id = (
+ select id
+ from rhnKickstartSessionState
+ where label = 'failed'
+ ),
+ action_id = null
+ where id = s.id;
+ perform set_ks_session_history_message(s.id, 'failed', 'Kickstart cancelled due to action removal');
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function check_user_access(server_id_in in numeric, user_id_in in numeric)
+ returns numeric
+ as $$
+ declare
+ has_access numeric;
+ begin
+ -- first check; if this returns no rows, then the server/user are in different orgs, and we bail
+ select 1 into has_access
+ from rhnServer S,
+ web_contact wc
+ where wc.org_id = s.org_id
+ and s.id = server_id_in
+ and wc.id = user_id_in;
+
+ if not found then
+ return 0;
+ end if;
+
+ -- okay, so they're in the same org. if we have an org admin, they get a free pass
+ if rhn_user.check_role(user_id_in, 'org_admin') = 1
+ then
+ return 1;
+ end if;
+
+ select 1 into has_access
+ from rhnServerGroupMembers SGM,
+ rhnUserServerGroupPerms USG
+ where SGM.server_group_id = USG.server_group_id
+ and SGM.server_id = server_id_in
+ and USG.user_id = user_id_in;
+
+ if not found then
+ return 0;
+ end if;
+
+ return 1;
+ end$$ language plpgsql;
+
+ -- *******************************************************************
+ -- FUNCTION: can_server_consume_virt_slot
+ -- Returns 1 if the server id is eligible to consume a virtual slot,
+ -- else returns 0.
+ -- Called by: insert_into_servergroup, delete_from_servergroup
+ -- *******************************************************************
+ create or replace function can_server_consume_virt_slot(server_id_in in numeric,
+ group_type_in in varchar)
+ returns numeric
+ as $$
+ declare
+ server_virt_slots cursor is
+ select vi.VIRTUAL_SYSTEM_ID
+ from
+ rhnVirtualInstance vi
+ where
+ -- server id is a virtual instance
+ vi.VIRTUAL_SYSTEM_ID = server_id_in
+ -- server id's host is virt entitled
+ and exists ( select 1
+ from rhnServerEntitlementView sev
+ where vi.HOST_SYSTEM_ID = sev.server_id
+ and sev.label in ('virtualization_host',
+ 'virtualization_host_platform') )
+ -- server id's host also has the ent we want
+ and exists ( select 1
+ from rhnServerEntitlementView sev2
+ where vi.HOST_SYSTEM_ID = sev2.server_id
+ and sev2.label = group_type_in );
+
+ begin
+ for server_virt_slot in server_virt_slots loop
+ return 1;
+ end loop;
+ return 0;
+ end$$ language plpgsql;
+
+
+ create or replace function insert_into_servergroup (
+ server_id_in in numeric,
+ server_group_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ used_slots numeric;
+ max_slots numeric;
+ org_id numeric;
+ mgmt_available numeric;
+ mgmt_upgrade numeric;
+ mgmt_sgid numeric;
+ prov_available numeric;
+ prov_upgrade numeric;
+ prov_sgid numeric;
+ group_label varchar;
+ group_type numeric;
+ begin
+ -- first, group_type = null, because it's easy...
+
+ -- this will rowlock the servergroup we're trying to change;
+ -- we probably need to lock the other one, but I think the chances
+ -- of it being a real issue are very small for now...
+ select sg.group_type, sg.org_id, sg.current_members, sg.max_members
+ into group_type, org_id, used_slots, max_slots
+ from rhnServerGroup sg
+ where sg.id = server_group_id_in
+ for update of sg;
+
+ if group_type is null then
+ if used_slots >= max_slots then
+ perform rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+
+ perform rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ -- now for group_type != null
+ --
+ select label
+ into group_label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ -- the naive easy path that gets hit most often and has to be quickest.
+ if group_label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'monitoring_entitled',
+ 'provisioning_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+ if used_slots >= max_slots and
+ (rhn_server.can_server_consume_virt_slot(server_id_in, group_label) != 1)
+ then
+ perform rhn_exception.raise_exception('servergroup_max_members');
+ end if;
+
+ insert into rhnServerGroupMembers(
+ server_id, server_group_id
+ ) values (
+ server_id_in, server_group_id_in
+ );
+
+ -- Only update current members if the system in consuming a
+ -- physical slot.
+ if rhn_server.can_server_consume_virt_slot(server_id_in, group_label) = 0 then
+ update rhnServerGroup
+ set current_members = current_members + 1
+ where id = server_group_id_in;
+ end if;
+
+ return;
+ end if;
+ end$$ language plpgsql;
+
+ create or replace function insert_into_servergroup_maybe (
+ server_id_in in numeric,
+ server_group_id_in in numeric
+ ) returns numeric as $$
+ declare
+ retval numeric := 0;
+ servergroups cursor is
+ select s.id server_id,
+ sg.id server_group_id
+ from rhnServerGroup sg,
+ rhnServer s
+ where s.id = server_id_in
+ and sg.id = server_group_id_in
+ and s.org_id = sg.org_id
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = s.id
+ and sgm.server_group_id = sg.id
+ );
+ begin
+ for sgm in servergroups loop
+ perform rhn_server.insert_into_servergroup(sgm.server_id, sgm.server_group_id);
+ retval := retval + 1;
+ end loop;
+ return retval;
+ end$$ language plpgsql;
+
+ create or replace function insert_set_into_servergroup (
+ server_group_id_in in numeric,
+ user_id_in in numeric,
+ set_label_in in varchar
+ ) returns void
+ as $$
+ declare
+ servers cursor is
+ select st.element id
+ from rhnSet st
+ where st.user_id = user_id_in
+ and st.label = set_label_in
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups umsg
+ where umsg.server_group_id = server_group_id_in
+ and umsg.user_id = user_id_in
+ )
+ and not exists (
+ select 1
+ from rhnServerGroupMembers sgm
+ where sgm.server_id = st.element
+ and sgm.server_group_id = server_group_id_in
+ );
+ begin
+ for s in servers loop
+ perform rhn_server.insert_into_servergroup(s.id, server_group_id_in);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function delete_from_servergroup (
+ server_id_in in numeric,
+ server_group_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ server_virt_groups cursor is
+ select 1
+ from rhnServerEntitlementVirtual sev
+ where sev.server_id = server_id_in
+ and sev.server_group_id = server_group_id_in;
+
+ oid numeric;
+ mgmt_sgid numeric;
+ label varchar;
+ group_type numeric;
+ begin
+ select sg.group_type, sg.org_id
+ into group_type, oid
+ from rhnServerGroupMembers sgm,
+ rhnServerGroup sg
+ where sg.id = server_group_id_in
+ and sg.id = sgm.server_group_id
+ and sgm.server_id = server_id_in
+ for update of sg;
+
+ if not found then
+ perform rhn_exception.raise_exception('server_not_in_group');
+ end if;
+
+ -- do group_type is null first
+ if group_type is null then
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+ perform rhn_cache.update_perms_for_server_group(server_group_id_in);
+ return;
+ end if;
+
+ select sgt.label
+ into label
+ from rhnServerGroupType sgt
+ where sgt.id = group_type;
+
+ if label in ('sw_mgr_entitled',
+ 'enterprise_entitled',
+ 'provisioning_entitled',
+ 'monitoring_entitled',
+ 'virtualization_host',
+ 'virtualization_host_platform') then
+
+ -- Only update current members if the system is consuming
+ -- a physical slot.
+ for server_virt_group in server_virt_groups loop
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+ return;
+ end loop;
+
+ delete from rhnServerGroupMembers
+ where server_group_id = server_group_id_in
+ and server_id = server_id_in;
+
+ update rhnServerGroup
+ set current_members = current_members - 1
+ where id = server_group_id_in;
+
+ end if;
+ end$$ language plpgsql;
+
+ create or replace function delete_set_from_servergroup (
+ server_group_id_in in numeric,
+ user_id_in in numeric,
+ set_label_in in varchar
+ ) returns void
+ as $$
+ declare
+ servergroups cursor is
+ select sgm.server_id, sgm.server_group_id
+ from rhnSet st,
+ rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in
+ and st.user_id = user_id_in
+ and st.label = set_label_in
+ and sgm.server_id = st.element
+ and exists (
+ select 1
+ from rhnUserManagedServerGroups usgp
+ where usgp.server_group_id = server_group_id_in
+ and usgp.user_id = user_id_in
+ );
+ begin
+ for sgm in servergroups loop
+ perform rhn_server.delete_from_servergroup(sgm.server_id, server_group_id_in);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function clear_servergroup (
+ server_group_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ servers cursor is
+ select sgm.server_id id
+ from rhnServerGroupMembers sgm
+ where sgm.server_group_id = server_group_id_in;
+ begin
+ for s in servers loop
+ perform rhn_server.delete_from_servergroup(s.id, server_group_id_in);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function delete_from_org_servergroups (
+ server_id_in in numeric
+ ) returns void
+ as $$
+ declare
+ servergroups cursor is
+ select sgm.server_group_id id
+ from rhnServerGroup sg,
+ rhnServerGroupMembers sgm
+ where sgm.server_id = server_id_in
+ and sgm.server_group_id = sg.id
+ and sg.group_type is null;
+ begin
+ for sg in servergroups loop
+ perform rhn_server.delete_from_servergroup(server_id_in, sg.id);
+ end loop;
+ end$$ language plpgsql;
+
+ create or replace function get_ip_address (
+ server_id_in in numeric
+ ) returns varchar as $$
+ declare
+ interfaces cursor is
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
+ where server_id = server_id_in
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
+ addresses cursor is
+ select ipaddr ip_addr
+ from rhnServerNetwork
+ where server_id = server_id_in
+ and ipaddr != '127.0.0.1';
+ begin
+ for addr in addresses loop
+ return addr.ip_addr;
+ end loop;
+ for iface in interfaces loop
+ return iface.address;
+ end loop;
+ return NULL;
+ end$$ language plpgsql;
+
+ create or replace function update_needed_cache(
+ server_id_in in numeric
+ ) returns void as $$
+ begin
+ delete from rhnServerNeededCache
+ where server_id = server_id_in;
+ insert into rhnServerNeededCache
+ (server_id, errata_id, package_id)
+ (select distinct server_id, errata_id, package_id
+ from rhnServerNeededView
+ where server_id = server_id_in);
+ end$$ language plpgsql;
+
+-- restore the original setting
+update pg_settings set setting = overlay( setting placing '' from 1 for (length('rhn_server')+1) ) where name = 'search_path';
commit cee165a5cdd26112f2cc2cbb9774f894c10675b2
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Thu Oct 20 19:19:02 2011 +0200
schema upgrade
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
index 7042fb2..b451aa3 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -31,10 +31,10 @@ CREATE TABLE rhnServerNetAddress4
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_net_addr4_iid_addr_idx
+CREATE INDEX rhn_srv_net_addr4_iid_addr_idx
ON rhnServerNetAddress4 (interface_id, address)
- TABLESPACE [[8m_tbs]];
+ TABLESPACE [[64k_tbs]];
ALTER TABLE rhnServerNetAddress4
- ADD CONSTRAINT rhn_net_add4_iid_addr_uq UNIQUE (interface_id, address);
+ ADD CONSTRAINT rhn_srv_net_addr4_iid_addr_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index ee04fe5..79b10e4 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -31,10 +31,10 @@ CREATE TABLE rhnServerNetAddress6
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
+CREATE INDEX rhn_srv_net_ad6_iid_sc_ad_idx
ON rhnServerNetAddress6 (interface_id, scope, address)
- TABLESPACE [[8m_tbs]];
+ TABLESPACE [[64_tbs]];
ALTER TABLE rhnServerNetAddress6
- ADD CONSTRAINT rhn_net_addr6_iid_sc_addr_uq UNIQUE (interface_id, scope, address);
+ ADD CONSTRAINT rhn_srv_net_ad6_iid_sc_ad_uq UNIQUE (interface_id, scope, address);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
new file mode 100644
index 0000000..1f0ab2a
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.oracle
@@ -0,0 +1,9 @@
+alter table rhnServerNetInterface add id number;
+
+create sequence rhn_srv_net_iface_id_seq;
+
+update rhnServerNetInterface set id = rhn_srv_net_iface_id_seq.nextval;
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_nn check (id is not null);
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_pk primary key ( id );
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
new file mode 100644
index 0000000..c2b448d
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/105-alter_rhnServerNetInterface.sql.postgresql
@@ -0,0 +1,11 @@
+-- oracle equivalent source sha1 f5872e029cf1b053c88bd876afc8f253461772ac
+
+alter table rhnServerNetInterface add id numeric;
+
+create sequence rhn_srv_net_iface_id_seq;
+
+update rhnServerNetInterface set id = nextval('rhn_srv_net_iface_id_seq');
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_nn check (id is not null);
+
+alter table rhnServerNetInterface add constraint rhn_srv_net_iface_id_pk primary key ( id );
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
new file mode 100644
index 0000000..7922fdf
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.oracle
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress4
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress4_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR2(64),
+ netmask VARCHAR2(64),
+ broadcast VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_srv_net_addr4_iid_addr_idx
+ ON rhnServerNetAddress4 (interface_id, address)
+ TABLESPACE [[64k_tbs]];
+
+ALTER TABLE rhnServerNetAddress4
+ ADD CONSTRAINT rhn_srv_net_addr4_iid_addr_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
new file mode 100644
index 0000000..7b8a6b7
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/110-add_rhnServerNetAddress4.sql.postgresql
@@ -0,0 +1,18 @@
+-- oracle equivalent source sha1 af31dbcccd3799c2cd577137f6f7fd608288b2c4
+
+CREATE TABLE rhnServerNetAddress4
+(
+ interface_id NUMERIC NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress4_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR(64),
+ netmask VARCHAR(64),
+ broadcast VARCHAR(64),
+ created timestamptz default current_timestamp NOT NULL,
+ modified timestamptz default current_timestamp NOT NULL
+);
+
+CREATE UNIQUE INDEX rhn_srv_net_addr4_iid_addr_uq
+ ON rhnServerNetAddress4 (interface_id, address)
+ ;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
new file mode 100644
index 0000000..bda4fb8
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/111-add_rhnServerNetAddress4_data.sql
@@ -0,0 +1,6 @@
+INSERT INTO rhnServerNetAddress4
+ (interface_id, address, netmask, broadcast, created)
+ SELECT id, ip_addr, netmask, broadcast, created
+ FROM rhnServerNetInterface;
+
+COMMIT;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
new file mode 100644
index 0000000..64e42e1
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/115-drop_columns_rhnServerNetInterface.sql
@@ -0,0 +1,3 @@
+ALTER TABLE rhnServerNetInterface DROP COLUMN ip_addr;
+ALTER TABLE rhnServerNetInterface DROP COLUMN netmask;
+ALTER TABLE rhnServerNetInterface DROP COLUMN broadcast;
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
new file mode 100644
index 0000000..42c78b2
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.oracle
@@ -0,0 +1,39 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress6
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress6_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR2(45),
+ netmask VARCHAR2(49),
+ scope VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_srv_net_ad6_iid_sc_ad_idx
+ ON rhnServerNetAddress6 (interface_id, scope, address)
+ TABLESPACE [[64k_tbs]];
+
+ALTER TABLE rhnServerNetAddress6
+ ADD CONSTRAINT rhn_srv_net_ad6_iid_sc_ad_uq UNIQUE (interface_id, scope, address);
diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
new file mode 100644
index 0000000..844c601
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.5-to-spacewalk-schema-1.6/120-add_rhnServerNetAddress6.sql.postgresql
@@ -0,0 +1,17 @@
+-- oracle equivalent source sha1 7c11068302cdb144f446828d4db0f244dbf12293
+
+CREATE TABLE rhnServerNetAddress6
+(
+ interface_id NUMERIC NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress6_iid_fk
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
+ address VARCHAR(45),
+ netmask VARCHAR(49),
+ scope VARCHAR(64),
+ created timestamptz default current_timestamp NOT NULL,
+ modified timestamptz default current_timestamp NOT NULL
+);
+
+CREATE UNIQUE INDEX rhn_srv_net_ad6_iid_sc_ad_uq
+ ON rhnServerNetAddress6 (interface_id, scope, address);
commit 08ea44500d91d22877f0f361735df518ae601bd7
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 18:38:45 2011 +0200
get_hw_info_as_clob: adapt to IPv6 changes
diff --git a/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql b/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
index ce1b580..d6fea07 100644
--- a/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
+++ b/schema/spacewalk/oracle/procs/get_hw_info_as_clob.sql
@@ -15,9 +15,11 @@ begin
select 1 n, sum(nrcpu) || ' CPUs' m
from rhncpu where rhncpu.server_id = sid
union all
- select 2, name||' '||ip_addr||'/'||netmask||' '||hw_addr val
- from rhnservernetinterface
- where rhnservernetinterface.server_id = sid
+ select 2, ni.name||' '||na4.address||'/'||na4.netmask||' '||ni.hw_addr val
+ from rhnservernetinterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
)
order by n, m
) loop
diff --git a/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql b/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
index 9d899f3..6cc1982 100644
--- a/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
+++ b/schema/spacewalk/postgres/procs/get_hw_info_as_clob.sql
@@ -1,4 +1,4 @@
--- oracle equivalent source sha1 4a627f5b31efb66c684dd14f0514e25a5ace94f2
+-- oracle equivalent source sha1 6a538f3b05d412810baec118fbb7860348c60cd4
create or replace function get_hw_info_as_clob(
sid in rhnserver.id%TYPE,
@@ -17,9 +17,11 @@ begin
select 1 n, sum(nrcpu) || ' CPUs' m
from rhncpu where rhncpu.server_id = sid
union all
- select 2, name||' '||coalesce(ip_addr,'')||'/'||coalesce(netmask,'')||' '||hw_addr val
- from rhnservernetinterface
- where rhnservernetinterface.server_id = sid
+ select 2, ni.name||' '||coalesce(na4.address,'')||'/'||coalesce(na4.netmask,'')||' '||ni.hw_addr val
+ from rhnservernetinterface,
+ rhnServerNetAddress4 na4
+ where ni.server_id = sid
+ and ni.id = na4.interface_id
) X
order by n, m
) loop
commit c8d1e52a302aaea688b049804bec6f441577d6e1
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 17:48:58 2011 +0200
update rhn_server.get_ip_address() to reflect IPv6 changes
diff --git a/schema/spacewalk/oracle/packages/rhn_server.pkb b/schema/spacewalk/oracle/packages/rhn_server.pkb
index 72392fd..8e3c640 100644
--- a/schema/spacewalk/oracle/packages/rhn_server.pkb
+++ b/schema/spacewalk/oracle/packages/rhn_server.pkb
@@ -712,10 +712,12 @@ is
server_id_in in number
) return varchar2 is
cursor interfaces is
- select name, ip_addr
- from rhnServerNetInterface
- where server_id = server_id_in
- and ip_addr != '127.0.0.1';
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
+ where ni.server_id = server_id_in
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
cursor addresses is
select ipaddr ip_addr
from rhnServerNetwork
@@ -726,7 +728,7 @@ is
return addr.ip_addr;
end loop;
for iface in interfaces loop
- return iface.ip_addr;
+ return iface.address;
end loop;
return NULL;
end get_ip_address;
diff --git a/schema/spacewalk/postgres/packages/rhn_server.pkb b/schema/spacewalk/postgres/packages/rhn_server.pkb
index 3533094..a1f7aca 100644
--- a/schema/spacewalk/postgres/packages/rhn_server.pkb
+++ b/schema/spacewalk/postgres/packages/rhn_server.pkb
@@ -764,10 +764,12 @@ update pg_settings set setting = 'rhn_server,' || setting where name = 'search_p
) returns varchar as $$
declare
interfaces cursor is
- select name, ip_addr
- from rhnServerNetInterface
+ select ni.name as name, na4.address as address
+ from rhnServerNetInterface ni,
+ rhnServerNetAddress4 na4
where server_id = server_id_in
- and ip_addr != '127.0.0.1';
+ and ni.id = na4.interface_id
+ and na4.address != '127.0.0.1';
addresses cursor is
select ipaddr ip_addr
from rhnServerNetwork
@@ -778,7 +780,7 @@ update pg_settings set setting = 'rhn_server,' || setting where name = 'search_p
return addr.ip_addr;
end loop;
for iface in interfaces loop
- return iface.ip_addr;
+ return iface.address;
end loop;
return NULL;
end$$ language plpgsql;
commit 7be1ad0da7a79a3a445437770540cfe0824850f5
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 17:38:13 2011 +0200
delete from rhnServerNetInterface: add on delete cascade
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
index edf90ce..7042fb2 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -18,7 +18,8 @@ CREATE TABLE rhnServerNetAddress4
(
interface_id NUMBER NOT NULL
CONSTRAINT rhn_srv_net_iaddress4_iid_fk
- REFERENCES rhnServerNetInterface (id),
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
address VARCHAR2(64),
netmask VARCHAR2(64),
broadcast VARCHAR2(64),
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index 6413ba5..ee04fe5 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -18,7 +18,8 @@ CREATE TABLE rhnServerNetAddress6
(
interface_id NUMBER NOT NULL
CONSTRAINT rhn_srv_net_iaddress6_iid_fk
- REFERENCES rhnServerNetInterface (id),
+ REFERENCES rhnServerNetInterface (id)
+ ON DELETE CASCADE,
address VARCHAR2(45),
netmask VARCHAR2(49),
scope VARCHAR2(64),
commit deb1ff2107ca7db37389e85bfdb39a79bad8e2b9
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 17:12:56 2011 +0200
correct index creation
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index 7dbde6c..6413ba5 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -31,7 +31,7 @@ ENABLE ROW MOVEMENT
;
CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
- ON rhnServerNetAddress4 (interface_id, scope, address)
+ ON rhnServerNetAddress6 (interface_id, scope, address)
TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress6
commit 72ab8d4d2e7516036ace9604eac51da399d6d1d1
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 17:07:28 2011 +0200
shorten constraint identifiers to fit into given limits
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
index 6db6d3b..edf90ce 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -30,9 +30,10 @@ CREATE TABLE rhnServerNetAddress4
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_srv_net_address4_iid_address_idx
+CREATE INDEX rhn_net_addr4_iid_addr_idx
ON rhnServerNetAddress4 (interface_id, address)
TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress4
- ADD CONSTRAINT rhn_srv_net_address4_iid_address_uq UNIQUE (interface_id, address);
+ ADD CONSTRAINT rhn_net_add4_iid_addr_uq UNIQUE (interface_id, address);
+
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
index dce721d..7dbde6c 100644
--- a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -30,9 +30,10 @@ CREATE TABLE rhnServerNetAddress6
ENABLE ROW MOVEMENT
;
-CREATE INDEX rhn_srv_net_address6_iid_scope_address_idx
+CREATE INDEX rhn_net_addr6_iid_sc_addr_idx
ON rhnServerNetAddress4 (interface_id, scope, address)
TABLESPACE [[8m_tbs]];
ALTER TABLE rhnServerNetAddress6
- ADD CONSTRAINT rhn_srv_net_address6_iid_scope_address_uq UNIQUE (interface_id, scope, address);
+ ADD CONSTRAINT rhn_net_addr6_iid_sc_addr_uq UNIQUE (interface_id, scope, address);
+
commit 4c6f241a4cfe99cac08d18a63b969e815d10cbba
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 20 16:56:40 2011 +0200
Fix table dependencies
diff --git a/schema/spacewalk/common/tables/tables.deps b/schema/spacewalk/common/tables/tables.deps
index 53fc6c7..692e4b4 100644
--- a/schema/spacewalk/common/tables/tables.deps
+++ b/schema/spacewalk/common/tables/tables.deps
@@ -105,6 +105,8 @@ rhnKickstartSessionHistory :: rhnKickstartSession rhnKickstartSessionState
rhnKSTreeFile :: rhnKickstartableTree rhnChannelErrata rhnErrata \
rhnChecksum
rhnKickstartTimezone :: rhnKSInstallType
+rhnServerNetAddress4 :: rhnServerNetInterface
+rhnServerNetAddress6 :: rhnServerNetInterface
rhnOrgChannelSettings :: web_customer rhnChannel rhnOrgChannelSettingsType
rhnOrgEntitlements :: rhnOrgEntitlementType
rhnOrgErrataCacheQueue :: web_customer
commit 780ba79c8d5edb50c312b522c6b8972db0d812a3
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Thu Oct 20 12:55:30 2011 +0200
schema change
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress4.sql b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
new file mode 100644
index 0000000..6db6d3b
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress4.sql
@@ -0,0 +1,38 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress4
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress4_iid_fk
+ REFERENCES rhnServerNetInterface (id),
+ address VARCHAR2(64),
+ netmask VARCHAR2(64),
+ broadcast VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_srv_net_address4_iid_address_idx
+ ON rhnServerNetAddress4 (interface_id, address)
+ TABLESPACE [[8m_tbs]];
+
+ALTER TABLE rhnServerNetAddress4
+ ADD CONSTRAINT rhn_srv_net_address4_iid_address_uq UNIQUE (interface_id, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetAddress6.sql b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
new file mode 100644
index 0000000..dce721d
--- /dev/null
+++ b/schema/spacewalk/common/tables/rhnServerNetAddress6.sql
@@ -0,0 +1,38 @@
+--
+-- Copyright (c) 2011 Red Hat, Inc.
+--
+-- This software is licensed to you under the GNU General Public License,
+-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
+-- implied, including the implied warranties of MERCHANTABILITY or FITNESS
+-- FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
+-- along with this software; if not, see
+-- http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
+--
+-- Red Hat trademarks are not licensed under GPLv2. No permission is
+-- granted to use or replicate Red Hat trademarks that are incorporated
+-- in this software or its documentation.
+--
+
+
+CREATE TABLE rhnServerNetAddress6
+(
+ interface_id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iaddress6_iid_fk
+ REFERENCES rhnServerNetInterface (id),
+ address VARCHAR2(45),
+ netmask VARCHAR2(49),
+ scope VARCHAR2(64),
+ created DATE
+ DEFAULT (sysdate) NOT NULL,
+ modified DATE
+ DEFAULT (sysdate) NOT NULL
+)
+ENABLE ROW MOVEMENT
+;
+
+CREATE INDEX rhn_srv_net_address6_iid_scope_address_idx
+ ON rhnServerNetAddress4 (interface_id, scope, address)
+ TABLESPACE [[8m_tbs]];
+
+ALTER TABLE rhnServerNetAddress6
+ ADD CONSTRAINT rhn_srv_net_address6_iid_scope_address_uq UNIQUE (interface_id, scope, address);
diff --git a/schema/spacewalk/common/tables/rhnServerNetInterface.sql b/schema/spacewalk/common/tables/rhnServerNetInterface.sql
index f115885..6d73c23 100644
--- a/schema/spacewalk/common/tables/rhnServerNetInterface.sql
+++ b/schema/spacewalk/common/tables/rhnServerNetInterface.sql
@@ -1,5 +1,5 @@
--
--- Copyright (c) 2008 Red Hat, Inc.
+-- Copyright (c) 2008 -- 2011 Red Hat, Inc.
--
-- This software is licensed to you under the GNU General Public License,
-- version 2 (GPLv2). There is NO WARRANTY for this software, express or
@@ -16,13 +16,13 @@
CREATE TABLE rhnServerNetInterface
(
+ id NUMBER NOT NULL
+ CONSTRAINT rhn_srv_net_iface_id_pk PRIMARY KEY
+ USING INDEX TABLESPACE [[4m_tbs]],
server_id NUMBER NOT NULL
CONSTRAINT rhn_srv_net_iface_sid_fk
REFERENCES rhnServer (id),
name VARCHAR2(32) NOT NULL,
- ip_addr VARCHAR2(64),
- netmask VARCHAR2(64),
- broadcast VARCHAR2(64),
hw_addr VARCHAR2(18),
module VARCHAR2(128),
created DATE
@@ -40,3 +40,4 @@ CREATE INDEX rhn_srv_net_iface_sid_name_idx
ALTER TABLE rhnServerNetInterface
ADD CONSTRAINT rhn_srv_net_iface_sid_name_uq UNIQUE (server_id, name);
+CREATE SEQUENCE rhn_srv_net_iface_id_seq;
commit 4c035e6b60993d4589643ad41b7146dee7b2390d
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Oct 26 17:56:11 2011 +0200
Automatic commit of package [rhn-virtualization] release [5.4.28-1].
diff --git a/client/tools/rhn-virtualization/rhn-virtualization.spec b/client/tools/rhn-virtualization/rhn-virtualization.spec
index 8dfb9c5..2aebabd 100644
--- a/client/tools/rhn-virtualization/rhn-virtualization.spec
+++ b/client/tools/rhn-virtualization/rhn-virtualization.spec
@@ -10,7 +10,7 @@ License: GPLv2
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 5.4.27
+Version: 5.4.28
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -134,6 +134,9 @@ rm -rf $RPM_BUILD_ROOT
%doc LICENSE
%changelog
+* Wed Oct 26 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.4.28-1
+- 742811 - don't open RW connection to libvirt unless necessary
+
* Wed Oct 26 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.4.27-1
- 742811 - RHEV: handle no-guests situation correctly
diff --git a/rel-eng/packages/rhn-virtualization b/rel-eng/packages/rhn-virtualization
index d3ff2bb..0905e4c 100644
--- a/rel-eng/packages/rhn-virtualization
+++ b/rel-eng/packages/rhn-virtualization
@@ -1 +1 @@
-5.4.27-1 client/tools/rhn-virtualization/
+5.4.28-1 client/tools/rhn-virtualization/
commit ef1a8f4565d0460c3d58cd268ee989585571ae8a
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Oct 26 17:55:02 2011 +0200
742811 - don't open RW connection to libvirt unless necessary
diff --git a/client/tools/rhn-virtualization/virtualization/domain_control.py b/client/tools/rhn-virtualization/virtualization/domain_control.py
index 535ec22..f9103d8 100755
--- a/client/tools/rhn-virtualization/virtualization/domain_control.py
+++ b/client/tools/rhn-virtualization/virtualization/domain_control.py
@@ -110,7 +110,7 @@ def _get_domain(uuid):
"""
Lookup the domain by its UUID. If not found, raise an exception.
"""
- conn = libvirt.open(None)
+ conn = libvirt.openReadOnly(None)
domain = None
hyphenized_uuid = hyphenize_uuid(uuid)
try:
diff --git a/client/tools/rhn-virtualization/virtualization/poller.py b/client/tools/rhn-virtualization/virtualization/poller.py
index 9a7eea5..f94e122 100644
--- a/client/tools/rhn-virtualization/virtualization/poller.py
+++ b/client/tools/rhn-virtualization/virtualization/poller.py
@@ -72,7 +72,7 @@ def poll_hypervisor():
return {}
try:
- conn = libvirt.open(None)
+ conn = libvirt.openReadOnly(None)
except libvirt.libvirtError, lve:
# virConnectOpen() failed
sys.stderr.write(_("Warning: Could not retrieve virtualization information!\n\tlibvirtd service needs to be running.\n"))
@@ -193,7 +193,7 @@ def poll_state(uuid):
Polls just the state of the guest with the provided UUID. This state is
returned.
"""
- conn = libvirt.open(None)
+ conn = libvirt.openReadOnly(None)
if not conn:
raise VirtualizationException, \
"Failed to open connection to hypervisor."
diff --git a/client/tools/rhn-virtualization/virtualization/support.py b/client/tools/rhn-virtualization/virtualization/support.py
index 160693c..547ca72 100755
--- a/client/tools/rhn-virtualization/virtualization/support.py
+++ b/client/tools/rhn-virtualization/virtualization/support.py
@@ -82,7 +82,7 @@ def refresh():
else:
domains = poller.poll_hypervisor()
- if not len(domains) and libvirt.open(None).getType() == 'Xen':
+ if not len(domains) and libvirt.openReadOnly(None).getType() == 'Xen':
# On a KVM/QEMU host, libvirt reports no domain entry for host itself
# On a Xen host, either there were no domains or xend might not be
# running. Don't proceed further.
@@ -184,7 +184,7 @@ def _is_host_domain():
# No libvirt, dont bother with the rest
return False
try:
- conn = libvirt.open(None)
+ conn = libvirt.openReadOnly(None)
except libvirt.libvirtError: # libvirtd is not running
sys.stderr.write(_("Warning: Could not retrieve virtualization information!\n\tlibvirtd service needs to be running.\n"))
return False
commit d15c5cbfe65430e14059085092e20ff846bbd90a
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Oct 26 17:29:48 2011 +0200
Automatic commit of package [rhn-virtualization] release [5.4.27-1].
diff --git a/client/tools/rhn-virtualization/rhn-virtualization.spec b/client/tools/rhn-virtualization/rhn-virtualization.spec
index 560d516..8dfb9c5 100644
--- a/client/tools/rhn-virtualization/rhn-virtualization.spec
+++ b/client/tools/rhn-virtualization/rhn-virtualization.spec
@@ -10,7 +10,7 @@ License: GPLv2
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 5.4.26
+Version: 5.4.27
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -134,6 +134,9 @@ rm -rf $RPM_BUILD_ROOT
%doc LICENSE
%changelog
+* Wed Oct 26 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.4.27-1
+- 742811 - RHEV: handle no-guests situation correctly
+
* Wed Oct 05 2011 Martin Minar <mminar(a)redhat.com> 5.4.26-1
- 742811 - check for running vdsm only (colin.coe(a)gmail.com)
diff --git a/rel-eng/packages/rhn-virtualization b/rel-eng/packages/rhn-virtualization
index 8578002..d3ff2bb 100644
--- a/rel-eng/packages/rhn-virtualization
+++ b/rel-eng/packages/rhn-virtualization
@@ -1 +1 @@
-5.4.26-1 client/tools/rhn-virtualization/
+5.4.27-1 client/tools/rhn-virtualization/
commit 7c9386db278b848c317b1718d2331cb3078f0d51
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Oct 26 17:24:16 2011 +0200
742811 - RHEV: handle no-guests situation correctly
This fix is to avoid traceback:
File "/usr/share/rhn/virtualization/support.py", line 95, in refresh
domain_list = domains.values()
AttributeError: 'NoneType' object has no attribute 'values'
diff --git a/client/tools/rhn-virtualization/virtualization/poller.py b/client/tools/rhn-virtualization/virtualization/poller.py
index 8b96f0d..9a7eea5 100644
--- a/client/tools/rhn-virtualization/virtualization/poller.py
+++ b/client/tools/rhn-virtualization/virtualization/poller.py
@@ -151,7 +151,7 @@ def poll_through_vdsm():
if not len(domains['vmList']):
# No domains, exit.
- return
+ return {}
state = {}
for domain in domains['vmList']:
commit 72dac51c8bb9141e34fcfca89f528fdb7bbc7e2e
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Wed Oct 26 17:19:26 2011 +0200
Automatic commit of package [spacewalk-proxy] release [1.6.5-1].
diff --git a/proxy/proxy/spacewalk-proxy.spec b/proxy/proxy/spacewalk-proxy.spec
index 990795f..ed155f5 100644
--- a/proxy/proxy/spacewalk-proxy.spec
+++ b/proxy/proxy/spacewalk-proxy.spec
@@ -4,7 +4,7 @@ Group: Applications/Internet
License: GPLv2
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 1.6.4
+Version: 1.6.5
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires: python
@@ -320,6 +320,9 @@ fi
%changelog
+* Wed Oct 26 2011 Miroslav SuchÜ 1.6.5-1
+- there is no rhn-proxy-debug for some time
+
* Mon Oct 17 2011 Miroslav SuchÜ 1.6.4-1
- 719659 - correctly handle getpeername() on IPv6
diff --git a/rel-eng/packages/spacewalk-proxy b/rel-eng/packages/spacewalk-proxy
index 58fbc09..aafbeb1 100644
--- a/rel-eng/packages/spacewalk-proxy
+++ b/rel-eng/packages/spacewalk-proxy
@@ -1 +1 @@
-1.6.4-1 proxy/proxy/
+1.6.5-1 proxy/proxy/
commit 25b92434dd42c2311b9970fd6abd9256d21b8cb9
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Wed Oct 26 17:19:13 2011 +0200
Automatic commit of package [spacewalk-proxy-installer] release [1.6.7-1].
diff --git a/proxy/installer/spacewalk-proxy-installer.spec b/proxy/installer/spacewalk-proxy-installer.spec
index a56a807..c81b408 100644
--- a/proxy/installer/spacewalk-proxy-installer.spec
+++ b/proxy/installer/spacewalk-proxy-installer.spec
@@ -2,7 +2,7 @@ Name: spacewalk-proxy-installer
Summary: Spacewalk Proxy Server Installer
Group: Applications/Internet
License: GPLv2
-Version: 1.6.6
+Version: 1.6.7
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -84,6 +84,9 @@ rm -rf $RPM_BUILD_ROOT
%doc LICENSE answers.txt
%changelog
+* Wed Oct 26 2011 Miroslav SuchÜ 1.6.7-1
+- there is no rhn-proxy-debug for some time
+
* Mon Oct 24 2011 Miroslav SuchÜ 1.6.6-1
- increase maximum_object_size_in_memory
- comment some squid directives
diff --git a/rel-eng/packages/spacewalk-proxy-installer b/rel-eng/packages/spacewalk-proxy-installer
index e6adfab..34cfc7e 100644
--- a/rel-eng/packages/spacewalk-proxy-installer
+++ b/rel-eng/packages/spacewalk-proxy-installer
@@ -1 +1 @@
-1.6.6-1 proxy/installer/
+1.6.7-1 proxy/installer/
commit a2eadd8cefe399452a4ad41884806b67bf7a7abc
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Wed Oct 26 17:18:42 2011 +0200
there is no rhn-proxy-debug for some time
diff --git a/proxy/installer/rhn-proxy-activate.sgml b/proxy/installer/rhn-proxy-activate.sgml
index d01e04c..2ab1b0d 100644
--- a/proxy/installer/rhn-proxy-activate.sgml
+++ b/proxy/installer/rhn-proxy-activate.sgml
@@ -166,7 +166,6 @@
<simplelist>
<member>rhn_package_manager(8)</member>
<member>rhn-proxy(8)</member>
- <member>rhn-proxy-debug(8)</member>
<member>configure-proxy.sh(8)</member>
</simplelist>
</RefSect1>
diff --git a/proxy/proxy/pm/rhn_package_manager.sgml b/proxy/proxy/pm/rhn_package_manager.sgml
index 4c010d7..2ba0711 100644
--- a/proxy/proxy/pm/rhn_package_manager.sgml
+++ b/proxy/proxy/pm/rhn_package_manager.sgml
@@ -193,7 +193,6 @@ Manages RPM packages for the RHN proxy
<simplelist>
<member>rhn-proxy(8)</member>
<member>rhn-proxy-activate(8)</member>
- <member>rhn-proxy-debug(8)</member>
</simplelist>
</RefSect1>
diff --git a/proxy/proxy/rhn-proxy.sgml b/proxy/proxy/rhn-proxy.sgml
index b63bf2b..1c3177a 100644
--- a/proxy/proxy/rhn-proxy.sgml
+++ b/proxy/proxy/rhn-proxy.sgml
@@ -41,7 +41,6 @@
<simplelist>
<member>rhn_package_manager(8)</member>
<member>rhn-proxy-activate(8)</member>
- <member>rhn-proxy-debug(8)</member>
</simplelist>
</RefSect1>
commit 7192bfb40384503cba9818d05827438cfc354270
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Oct 26 13:23:10 2011 +0200
When there are not ks-pre.log files, do not return error.
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
index 6725be1..8f170f0 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
@@ -134,7 +134,7 @@ public class KickstartFormatter {
"cp -fa /tmp/ks-tree-shadow/* /mnt/sysimage/tmp/ks-tree-copy" + NEWLINE +
"fi" + NEWLINE +
"cp /etc/resolv.conf /mnt/sysimage/etc/resolv.conf" + NEWLINE +
- "cp -f /tmp/ks-pre.log* /mnt/sysimage/root/" + NEWLINE;
+ "cp -f /tmp/ks-pre.log* /mnt/sysimage/root/ || :" + NEWLINE;
private static final String RHN_TRACE = "set -x" + NEWLINE;
private static final String XMLRPC_HOST =
Config.get().getString(ConfigDefaults.KICKSTART_HOST, "xmlrpc.rhn.redhat.com");
commit 502ccf36baae45950825ed75141837a25570d7b3
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Oct 26 13:18:52 2011 +0200
Doing replacement on all files is not nice.
Addressing
Can't do inplace edit: /etc/sysconfig/rhn/allowed-actions is not a regular file.
Can't do inplace edit: /etc/sysconfig/rhn/clientCaps.d is not a regular file.
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
index 8dbd68e..6725be1 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
@@ -924,7 +924,7 @@ public class KickstartFormatter {
retval.append("cat /tmp/ssl-key-* > /usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT" +
NEWLINE);
retval.append("perl -pe 's/RHNS-CA-CERT/RHN-ORG-TRUSTED-SSL-CERT/g' " +
- "-i /etc/sysconfig/rhn/*" + NEWLINE);
+ "-i /etc/sysconfig/rhn/up2date" + NEWLINE);
return retval.toString();
}
commit 53ce9f6790b14578235b43a7a28bb9f6ba7a7925
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Wed Oct 26 13:16:45 2011 +0200
The -n and -p are exclusive in perl, let us just settle on -p.
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
index 4dcc559..8dbd68e 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java
@@ -923,7 +923,7 @@ public class KickstartFormatter {
retval.append("cat /tmp/ssl-key-* > /usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT" +
NEWLINE);
- retval.append("perl -npe 's/RHNS-CA-CERT/RHN-ORG-TRUSTED-SSL-CERT/g' " +
+ retval.append("perl -pe 's/RHNS-CA-CERT/RHN-ORG-TRUSTED-SSL-CERT/g' " +
"-i /etc/sysconfig/rhn/*" + NEWLINE);
return retval.toString();
commit 2df5137ea5be18beb58f75d30864bb5f215cffb5
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Wed Oct 26 11:04:48 2011 +0200
748903 - extend search_string maxlenght
diff --git a/java/code/webapp/WEB-INF/pages/systems/systemsearch.jsp b/java/code/webapp/WEB-INF/pages/systems/systemsearch.jsp
index 8faf9e5..6fa59d2 100644
--- a/java/code/webapp/WEB-INF/pages/systems/systemsearch.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/systemsearch.jsp
@@ -26,7 +26,7 @@
<tr><th><label for="searchfor"><bean:message key="erratasearch.jsp.searchfor"/></label></th>
<td>
<html:text property="search_string" name="search_string" styleId="searchfor"
- value="${search_string}" maxlength="36" accesskey="4"/>
+ value="${search_string}" maxlength="100" accesskey="4"/>
<html:submit>
<bean:message key="button.search" />
</html:submit>
commit 967768b088f56f323f4d80c9ce29202264b85e28
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Oct 26 11:23:20 2011 +0200
Automatic commit of package [spacewalk-setup-jabberd] release [1.6.4-1].
diff --git a/rel-eng/packages/spacewalk-setup-jabberd b/rel-eng/packages/spacewalk-setup-jabberd
index 097446d..9b50ab1 100644
--- a/rel-eng/packages/spacewalk-setup-jabberd
+++ b/rel-eng/packages/spacewalk-setup-jabberd
@@ -1 +1 @@
-1.6.3-1 spacewalk/spacewalk-setup-jabberd/
+1.6.4-1 spacewalk/spacewalk-setup-jabberd/
diff --git a/spacewalk/spacewalk-setup-jabberd/spacewalk-setup-jabberd.spec b/spacewalk/spacewalk-setup-jabberd/spacewalk-setup-jabberd.spec
index 3fee8a8..683099d 100644
--- a/spacewalk/spacewalk-setup-jabberd/spacewalk-setup-jabberd.spec
+++ b/spacewalk/spacewalk-setup-jabberd/spacewalk-setup-jabberd.spec
@@ -1,5 +1,5 @@
Name: spacewalk-setup-jabberd
-Version: 1.6.3
+Version: 1.6.4
Release: 1%{?dist}
Summary: Tools to setup jabberd for Spacewalk
Group: Applications/System
@@ -59,6 +59,9 @@ rm -rf %{buildroot}
%dir %{_sysconfdir}/pki/spacewalk/jabberd
%changelog
+* Wed Oct 26 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 1.6.4-1
+- s2s.xml: no need to setup /s2s/local/resolver
+
* Wed Oct 19 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 1.6.3-1
- spacewalk-setup-jabberd: update router.xml configuration
commit 337e28fa8abb225c4cdba01a818fce56a6634dce
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Wed Oct 26 11:18:32 2011 +0200
s2s.xml: no need to setup /s2s/local/resolver
resolver component is not used in jabberd infrastructure anymore.
diff --git a/spacewalk/spacewalk-setup-jabberd/share/jabberd/s2s.xsl b/spacewalk/spacewalk-setup-jabberd/share/jabberd/s2s.xsl
index 5195fa6..ef9f4bc 100644
--- a/spacewalk/spacewalk-setup-jabberd/share/jabberd/s2s.xsl
+++ b/spacewalk/spacewalk-setup-jabberd/share/jabberd/s2s.xsl
@@ -20,25 +20,6 @@
</xsl:copy>
</xsl:template>
-<xsl:template match="/s2s/local">
- <xsl:copy>
- <xsl:if test="not(resolver)">
- <xsl:text>
- </xsl:text>
- <xsl:comment>
- Helper DNS resolver component - if this component is not
- connected, dialback connections will fail
- (default: resolver) </xsl:comment>
- <xsl:text>
- </xsl:text>
- <resolver>resolver</resolver>
- <xsl:text>
- </xsl:text>
- </xsl:if>
- <xsl:apply-templates select="@*|node()" />
- </xsl:copy>
-</xsl:template>
-
<xsl:template match="/s2s/check/interval">
<xsl:copy>3</xsl:copy>
</xsl:template>
commit 61b9fc4ea2d1b7c901d63810603e691d1e64398b
Author: Martin Minar <mminar(a)redhat.com>
Date: Wed Oct 26 10:25:53 2011 +0200
Automatic commit of package [spacewalk-java] release [1.6.66-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index b7cce5f..cc8f5dc 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -17,7 +17,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.6.65
+Version: 1.6.66
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -557,6 +557,15 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Wed Oct 26 2011 Martin Minar <mminar(a)redhat.com> 1.6.66-1
+- 737838 - allow org admins to unschedule repo sync (org tasks)
+ (tlestach(a)redhat.com)
+- 692357 - clone also kernel and kernel post options when cloning a ks profile
+ (tlestach(a)redhat.com)
+- DISTINCT is equivalent to UNIQUE. (jpazdziora(a)redhat.com)
+- 726114 - allow macro delimiters in configchannel.createOrUpdatePath for
+ directories (tlestach(a)redhat.com)
+
* Tue Oct 25 2011 Jan Pazdziora 1.6.65-1
- 682845 - get rid of ChannelFactory.lookupContentSource(id) method without org
param (tlestach(a)redhat.com)
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 094d9a6..df7ac70 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.6.65-1 java/
+1.6.66-1 java/
commit 902c2b06339ca736c68223c4af8a4db6688e3031
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Oct 25 16:01:11 2011 +0200
737838 - allow org admins to unschedule repo sync (org tasks)
diff --git a/java/code/src/com/redhat/rhn/taskomatic/TaskomaticApi.java b/java/code/src/com/redhat/rhn/taskomatic/TaskomaticApi.java
index 036f8b1..865d5b9 100644
--- a/java/code/src/com/redhat/rhn/taskomatic/TaskomaticApi.java
+++ b/java/code/src/com/redhat/rhn/taskomatic/TaskomaticApi.java
@@ -15,6 +15,7 @@
package com.redhat.rhn.taskomatic;
import com.redhat.rhn.common.conf.ConfigDefaults;
+import com.redhat.rhn.common.security.PermissionException;
import com.redhat.rhn.common.validator.ValidatorException;
import com.redhat.rhn.domain.channel.Channel;
import com.redhat.rhn.domain.role.RoleFactory;
@@ -137,6 +138,12 @@ public class TaskomaticApi {
}
}
+ private void ensureOrgAdminRole(User user) {
+ if (!user.hasRole(RoleFactory.ORG_ADMIN)) {
+ throw new PermissionException(RoleFactory.ORG_ADMIN);
+ }
+ }
+
/**
* Creates a new schedule, unschedules, if en existing is defined
* @param user shall be sat admin
@@ -167,7 +174,7 @@ public class TaskomaticApi {
}
private void unscheduleTask(String jobLabel, User user) {
- ensureSatAdminRole(user);
+ ensureOrgAdminRole(user);
invoke("tasko.unscheduleBunch", user.getOrg().getId(), jobLabel);
}
commit db2a5b89b1e425f7bae5958c46a9440f18b78224
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Oct 25 15:34:18 2011 +0200
692357 - clone also kernel and kernel post options when cloning a ks profile
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartCloneCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartCloneCommand.java
index 684614c..d91a93f 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartCloneCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartCloneCommand.java
@@ -67,6 +67,8 @@ public class KickstartCloneCommand extends BaseKickstartCommand {
cloned.setVirtFileSize(((Integer) original.getVirtFileSize()));
cloned.setVirtBridge(original.getVirtBridge());
cloned.setVirtPath(original.getVirtBridge());
+ cloned.setKernelOptions(original.getKernelOptions());
+ cloned.setKernelPostOptions(original.getKernelPostOptions());
cloned.save();
return null;
commit 0005d41368a0770c4539fb9c46aa818121ea0a5c
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 13:55:51 2011 +0200
DISTINCT is equivalent to UNIQUE.
Addressing
ERROR com.redhat.rhn.common.db.datasource.CachedStatement - Error while processing cached statement sql: select unique c.id,
c.label,
c.name,
[...]
and rhn_channel.loose_user_role_check(c.id, ?,
'subscribe') = 1
com.redhat.rhn.common.db.WrappedSQLException: ERROR: syntax error at or near "c"
diff --git a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
index 28c0613..d04f5f5 100644
--- a/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
+++ b/java/code/src/com/redhat/rhn/common/db/datasource/xml/Channel_queries.xml
@@ -767,7 +767,7 @@ SELECT C.id, C.name, C.label, 1 AS IS_CUSTOM
<mode name="base_eus_channels_by_version_channel_arch"
class="com.redhat.rhn.frontend.dto.EssentialChannelDto">
<query params="product_name_label, version, channel_arch_id, user_id, org_id">
- select unique c.id,
+ select distinct c.id,
c.label,
c.name,
rcm.release,
commit b2d853d936282ff228b8a9d2edff60523275d2ae
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 10:58:27 2011 +0200
Adding releasers.conf for the upcoming tito version.
diff --git a/rel-eng/releasers.conf b/rel-eng/releasers.conf
new file mode 100644
index 0000000..be89eee
--- /dev/null
+++ b/rel-eng/releasers.conf
@@ -0,0 +1,3 @@
+[koji]
+releaser = spacewalkx.releasex.KojiReleaserGit
+autobuild_tags = dist-5E-sw-1.6-candidate dist-6E-sw-1.6-candidate dist-f14-sw-1.6-candidate dist-f15-sw-1.6-candidate
commit 6d89779cf6bdc69a8480e39efe7fd58624b3558a
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Tue Oct 25 10:50:28 2011 +0200
726114 - allow macro delimiters in configchannel.createOrUpdatePath for directories
to behave according to the documentation: (ignored if working with a directory)
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/configchannel/ConfigChannelHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/configchannel/ConfigChannelHandler.java
index d4ddae9..4a388eb 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/configchannel/ConfigChannelHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/configchannel/ConfigChannelHandler.java
@@ -382,10 +382,8 @@ public class ConfigChannelHandler extends BaseHandler {
validKeys.add(ConfigRevisionSerializer.PERMISSIONS);
validKeys.add(ConfigRevisionSerializer.REVISION);
validKeys.add(ConfigRevisionSerializer.SELINUX_CTX);
- if (!isDir) {
- validKeys.add(ConfigRevisionSerializer.MACRO_START);
- validKeys.add(ConfigRevisionSerializer.MACRO_END);
- }
+ validKeys.add(ConfigRevisionSerializer.MACRO_START);
+ validKeys.add(ConfigRevisionSerializer.MACRO_END);
validateMap(validKeys, data);
if (data.get(ConfigRevisionSerializer.SELINUX_CTX) == null) {
commit 606a9ee62d0c3d7b773dae3edf33d3d6435040ba
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 10:41:46 2011 +0200
Automatic commit of package [spacewalk-java] release [1.6.65-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index a0ef9af..b7cce5f 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -17,7 +17,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.6.64
+Version: 1.6.65
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -557,6 +557,16 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Tue Oct 25 2011 Jan Pazdziora 1.6.65-1
+- 682845 - get rid of ChannelFactory.lookupContentSource(id) method without org
+ param (tlestach(a)redhat.com)
+- 682845 - get rid of ChannelFactory.lookupContentSource(label) method without
+ org param (tlestach(a)redhat.com)
+- Amending incorrect substitution from ee3623222bf. (slukasik(a)redhat.com)
+- 682845 - fix apidoc of repository related APIs (tlestach(a)redhat.com)
+- Do not hardcode config identifier, use defaults instead.
+ (slukasik(a)redhat.com)
+
* Mon Oct 24 2011 Simon Lukasik <slukasik(a)redhat.com> 1.6.64-1
- No need to have separate configuration per Tomcat's version
(slukasik(a)redhat.com)
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index fa499c0..094d9a6 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.6.64-1 java/
+1.6.65-1 java/
commit 9c96ce0392c8ffe76b768e188cb458c7b4d40b3c
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 21:03:27 2011 +0200
Automatic commit of package [spacewalk-proxy-installer] release [1.6.6-1].
diff --git a/proxy/installer/spacewalk-proxy-installer.spec b/proxy/installer/spacewalk-proxy-installer.spec
index ae956a1..a56a807 100644
--- a/proxy/installer/spacewalk-proxy-installer.spec
+++ b/proxy/installer/spacewalk-proxy-installer.spec
@@ -2,7 +2,7 @@ Name: spacewalk-proxy-installer
Summary: Spacewalk Proxy Server Installer
Group: Applications/Internet
License: GPLv2
-Version: 1.6.5
+Version: 1.6.6
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -84,6 +84,10 @@ rm -rf $RPM_BUILD_ROOT
%doc LICENSE answers.txt
%changelog
+* Mon Oct 24 2011 Miroslav SuchÜ 1.6.6-1
+- increase maximum_object_size_in_memory
+- comment some squid directives
+
* Wed Sep 21 2011 Miroslav SuchÜ 1.6.5-1
- 737853 - if rhn-ca-openssl.cnf does not exist, then check should succeed
- 737853 - do not print output of awk, we care just about exit code
diff --git a/rel-eng/packages/spacewalk-proxy-installer b/rel-eng/packages/spacewalk-proxy-installer
index ca088ae..e6adfab 100644
--- a/rel-eng/packages/spacewalk-proxy-installer
+++ b/rel-eng/packages/spacewalk-proxy-installer
@@ -1 +1 @@
-1.6.5-1 proxy/installer/
+1.6.6-1 proxy/installer/
commit 0f1387292fec752e7eba8ff46d3cc998ec626dd0
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 21:00:33 2011 +0200
increase maximum_object_size_in_memory
it is old value, squid now has default 512 kB, we can allow even more as everybody has probably now lots of memory
diff --git a/proxy/installer/squid.conf b/proxy/installer/squid.conf
index a0fabab..baa755f 100644
--- a/proxy/installer/squid.conf
+++ b/proxy/installer/squid.conf
@@ -7,7 +7,7 @@ http_port 8080
cache_mem 400 MB
maximum_object_size 200 MB
-maximum_object_size_in_memory 128 KB
+maximum_object_size_in_memory 1024 KB
access_log /var/log/squid/access.log squid
commit 89691aa73b5adf2c24616189289b8300c03af89d
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Mon Oct 24 20:56:10 2011 +0200
comment some squid directives
diff --git a/proxy/installer/squid.conf b/proxy/installer/squid.conf
index ed5d889..a0fabab 100644
--- a/proxy/installer/squid.conf
+++ b/proxy/installer/squid.conf
@@ -18,13 +18,19 @@ cache_dir ufs /var/spool/squid 15000 16 256
# cache can hold. The default is 13 KB.
store_avg_object_size 817 KB
+# We want to keep the largest objects around longer, and just download the smaller objects if we can.
cache_replacement_policy heap LFUDA
+
memory_replacement_policy heap GDSF
+# cache repodata only few minutes and then query parent whether it is fresh
refresh_pattern /XMLRPC/GET-REQ/.*/repodata/.*\.xml.*$ 0 1% 525960
+# rpm will hardly ever change, force to chache it for very long time
refresh_pattern \.rpm$ 10080 100% 525960 override-expire override-lastmod ignore-reload reload-into-ims
refresh_pattern . 0 100% 525960
+# secure squid
+# allow request only from localhost and to http and https ports
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/32
acl SSL_ports port 443
@@ -39,9 +45,13 @@ http_access deny all
icp_access allow all
miss_access allow all
+# if transport is canceled, finish downloading anyway
quick_abort_pct -1
quick_abort_min -1 KB
+# when range is required, download whole file anyway
+# when we request rpm header, we will nearly always get
+# request for the rest of the file
range_offset_limit -1 KB
# we download only from 1 server, default is 1024
commit 33483a84114e64936203a538580896d919a704b6
Author: Aron Parsons <parsonsa(a)bit-sys.com>
Date: Mon Oct 24 13:43:43 2011 -0400
Automatic commit of package [spacecmd] release [1.6.6-1].
diff --git a/rel-eng/packages/spacecmd b/rel-eng/packages/spacecmd
index b88d0ba..197304b 100644
--- a/rel-eng/packages/spacecmd
+++ b/rel-eng/packages/spacecmd
@@ -1 +1 @@
-1.6.5-1 spacecmd/
+1.6.6-1 spacecmd/
diff --git a/spacecmd/spacecmd.spec b/spacecmd/spacecmd.spec
index 84427a4..3a908cd 100644
--- a/spacecmd/spacecmd.spec
+++ b/spacecmd/spacecmd.spec
@@ -4,7 +4,7 @@
%endif
Name: spacecmd
-Version: 1.6.5
+Version: 1.6.6
Release: 1%{?dist}
Summary: Command-line interface to Spacewalk and Satellite servers
@@ -61,6 +61,9 @@ touch %{buildroot}/%{python_sitelib}/spacecmd/__init__.py
%doc %{_mandir}/man1/spacecmd.1.gz
%changelog
+* Mon Oct 24 2011 Aron Parsons <parsonsa(a)bit-sys.com> 1.6.6-1
+- spacecmd: use correct variable in system_reboot (parsonsa(a)bit-sys.com)
+
* Wed Sep 28 2011 Aron Parsons <parsonsa(a)bit-sys.com> 1.6.5-1
- spacecmd: wrong argument in distribution_create help message (parsonsa@bit-
sys.com)
commit 5c3e0cfba3738ad02b758751524a11c1008e2f9a
Author: Aron Parsons <parsonsa(a)bit-sys.com>
Date: Mon Oct 24 13:43:14 2011 -0400
spacecmd: use correct variable in system_reboot
diff --git a/spacecmd/src/lib/system.py b/spacecmd/src/lib/system.py
index cd54c54..ccc00b7 100644
--- a/spacecmd/src/lib/system.py
+++ b/spacecmd/src/lib/system.py
@@ -175,7 +175,7 @@ def do_system_reboot(self, args):
system_id = self.get_system_id(system)
if not system_id: continue
- self.client.system.scheduleReboot(self.session, id, action_time)
+ self.client.system.scheduleReboot(self.session, system_id, action_time)
####################
commit da076f44e18e1e446966df03788d3806f335f23b
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Oct 24 15:30:12 2011 +0200
682845 - get rid of ChannelFactory.lookupContentSource(id) method without org param
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
index a551e53..7c338ca 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
@@ -118,18 +118,6 @@ public class ChannelFactory extends HibernateFactory {
}
/**
- * Lookup a content source by id
- * @param id the id to lookup
- * @return the ContentSource
- */
- public static ContentSource lookupContentSource(Long id) {
- Map params = new HashMap();
- params.put("id", id);
- return (ContentSource) singleton.lookupObjectByNamedQuery(
- "ContentSource.findById", params);
- }
-
- /**
* Lookup a content source by org
* @param org the org to lookup
* @return the ContentSource(s)
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml b/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml
index 6c36fc6..c4bd583 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml
@@ -41,9 +41,6 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<query name="ContentSource.findByIdandOrg">
<![CDATA[from com.redhat.rhn.domain.channel.ContentSource as c where c.id = :id and c.org = :org]]>
</query>
- <query name="ContentSource.findById">
- <![CDATA[from com.redhat.rhn.domain.channel.ContentSource as c where c.id = :id]]>
- </query>
<query name="ContentSource.findByOrg">
<![CDATA[from com.redhat.rhn.domain.channel.ContentSource as c where c.org = :org]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/frontend/action/channel/manage/RepositoriesAction.java b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/RepositoriesAction.java
index e707762..18a6056 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/channel/manage/RepositoriesAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/channel/manage/RepositoriesAction.java
@@ -88,7 +88,7 @@ public class RepositoriesAction extends RhnAction implements Listable {
Set <String> set = helper.getSet();
for (String id : set) {
Long sgid = Long.valueOf(id);
- ContentSource tmp = ChannelFactory.lookupContentSource(sgid);
+ ContentSource tmp = ChannelFactory.lookupContentSource(sgid, user.getOrg());
foo.add(tmp);
}
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
index 9fd893b..48aaff8 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
@@ -2390,7 +2390,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
**/
public Integer removeRepo(String sessionKey, Integer id) {
User user = getLoggedInUser(sessionKey);
- ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()));
+ ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()),
+ user.getOrg());
ChannelFactory.remove(repo);
return 1;
@@ -2485,7 +2486,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
**/
public ContentSource updateRepoUrl(String sessionKey, Integer id, String url) {
User user = getLoggedInUser(sessionKey);
- ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()));
+ ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()),
+ user.getOrg());
repo.setSourceUrl(url);
ChannelFactory.save(repo);
return repo;
@@ -2528,7 +2530,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
**/
public ContentSource updateRepoLabel(String sessionKey, Integer id, String label) {
User user = getLoggedInUser(sessionKey);
- ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()));
+ ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()),
+ user.getOrg());
repo.setLabel(label);
ChannelFactory.save(repo);
return repo;
@@ -2552,7 +2555,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
public ContentSource updateRepo(String sessionKey, Integer id, String label,
String url) {
User user = getLoggedInUser(sessionKey);
- ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()));
+ ContentSource repo = ChannelFactory.lookupContentSource(new Long(id.longValue()),
+ user.getOrg());
repo.setLabel(label);
repo.setSourceUrl(url);
ChannelFactory.save(repo);
@@ -2589,7 +2593,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
* $ContentSourceSerializer
*/
public ContentSource getRepoDetails(String sessionKey, Integer id) {
- return ChannelFactory.lookupContentSource(new Long(id.longValue()));
+ User user = getLoggedInUser(sessionKey);
+ return ChannelFactory.lookupContentSource(new Long(id.longValue()), user.getOrg());
}
/**
commit 2d9649abe87b899e976992491e1faa6e4c39b5f5
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Oct 24 14:55:36 2011 +0200
682845 - get rid of ChannelFactory.lookupContentSource(label) method without org param
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
index 24467c3..a551e53 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
+++ b/java/code/src/com/redhat/rhn/domain/channel/ChannelFactory.java
@@ -130,18 +130,6 @@ public class ChannelFactory extends HibernateFactory {
}
/**
- * Lookup a content source by label
- * @param label the label to lookup
- * @return the ContentSource
- */
- public static ContentSource lookupContentSource(String label) {
- Map params = new HashMap();
- params.put("label", label);
- return (ContentSource) singleton.lookupObjectByNamedQuery(
- "ContentSource.findByLabel", params);
- }
-
- /**
* Lookup a content source by org
* @param org the org to lookup
* @return the ContentSource(s)
@@ -173,12 +161,12 @@ public class ChannelFactory extends HibernateFactory {
* @param label repo label
* @return the ContentSource(s)
*/
- public static List<ContentSource> lookupContentSourceByOrgAndLabel(Org org,
+ public static ContentSource lookupContentSourceByOrgAndLabel(Org org,
String label) {
Map params = new HashMap();
params.put("org", org);
params.put("label", label);
- return singleton.listObjectsByNamedQuery(
+ return (ContentSource) singleton.lookupObjectByNamedQuery(
"ContentSource.findByOrgAndLabel", params);
}
diff --git a/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml b/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml
index 79ad517..6c36fc6 100644
--- a/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml
+++ b/java/code/src/com/redhat/rhn/domain/channel/ContentSource.hbm.xml
@@ -44,9 +44,6 @@ PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
<query name="ContentSource.findById">
<![CDATA[from com.redhat.rhn.domain.channel.ContentSource as c where c.id = :id]]>
</query>
- <query name="ContentSource.findByLabel">
- <![CDATA[from com.redhat.rhn.domain.channel.ContentSource as c where c.label = :label]]>
- </query>
<query name="ContentSource.findByOrg">
<![CDATA[from com.redhat.rhn.domain.channel.ContentSource as c where c.org = :org]]>
</query>
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
index 4076167..9fd893b 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
@@ -2372,7 +2372,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
repoCmd.store();
- ContentSource repo = ChannelFactory.lookupContentSource(label);
+ ContentSource repo = ChannelFactory.lookupContentSourceByOrgAndLabel(
+ user.getOrg(), label);
return repo;
}
@@ -2408,7 +2409,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
**/
public Integer removeRepo(String sessionKey, String label) {
User user = getLoggedInUser(sessionKey);
- ContentSource repo = ChannelFactory.lookupContentSource(label);
+ ContentSource repo = ChannelFactory.lookupContentSourceByOrgAndLabel(user.getOrg(),
+ label);
ChannelFactory.remove(repo);
return 1;
@@ -2430,7 +2432,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
public Channel associateRepo(String sessionKey, String chanLabel, String repoLabel) {
User user = getLoggedInUser(sessionKey);
Channel channel = lookupChannelByLabel(user, chanLabel);
- ContentSource repo = ChannelFactory.lookupContentSource(repoLabel);
+ ContentSource repo = ChannelFactory.lookupContentSourceByOrgAndLabel(user.getOrg(),
+ repoLabel);
Set<ContentSource> set = channel.getSources();
set.add(repo);
@@ -2455,7 +2458,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
public Channel disassociateRepo(String sessionKey, String chanLabel, String repoLabel) {
User user = getLoggedInUser(sessionKey);
Channel channel = lookupChannelByLabel(user, chanLabel);
- ContentSource repo = ChannelFactory.lookupContentSource(repoLabel);
+ ContentSource repo = ChannelFactory.lookupContentSourceByOrgAndLabel(user.getOrg(),
+ repoLabel);
Set<ContentSource> set = channel.getSources();
set.remove(repo);
@@ -2502,7 +2506,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
**/
public ContentSource updateRepoUrl(String sessionKey, String label, String url) {
User user = getLoggedInUser(sessionKey);
- ContentSource repo = ChannelFactory.lookupContentSource(label);
+ ContentSource repo = ChannelFactory.lookupContentSourceByOrgAndLabel(user.getOrg(),
+ label);
repo.setSourceUrl(url);
ChannelFactory.save(repo);
return repo;
@@ -2567,7 +2572,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
* $ContentSourceSerializer
*/
public ContentSource getRepoDetails(String sessionKey, String repoLabel) {
- return ChannelFactory.lookupContentSource(repoLabel);
+ User user = getLoggedInUser(sessionKey);
+ return ChannelFactory.lookupContentSourceByOrgAndLabel(user.getOrg(), repoLabel);
}
/**
diff --git a/java/code/src/com/redhat/rhn/manager/channel/repo/BaseRepoCommand.java b/java/code/src/com/redhat/rhn/manager/channel/repo/BaseRepoCommand.java
index 849459e..b0b9050 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/repo/BaseRepoCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/repo/BaseRepoCommand.java
@@ -102,7 +102,7 @@ public class BaseRepoCommand {
repo.setType(ChannelFactory.CONTENT_SOURCE_TYPE_YUM);
if (!this.label.equals(repo.getLabel())) {
- if (!ChannelFactory.lookupContentSourceByOrgAndLabel(org, label).isEmpty()) {
+ if (ChannelFactory.lookupContentSourceByOrgAndLabel(org, label) != null) {
throw new InvalidRepoLabelException(label);
}
repo.setLabel(this.label);
commit 14d4904104d39eee51cc2093ec32e56eaee5d2e7
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Mon Oct 24 16:16:09 2011 +0200
Automatic commit of package [spacewalk-backend] release [1.6.35-1].
diff --git a/backend/spacewalk-backend.spec b/backend/spacewalk-backend.spec
index 21006be..6bfc9d6 100644
--- a/backend/spacewalk-backend.spec
+++ b/backend/spacewalk-backend.spec
@@ -12,7 +12,7 @@ Name: spacewalk-backend
Summary: Common programs needed to be installed on the Spacewalk servers/proxies
Group: Applications/Internet
License: GPLv2 and Python
-Version: 1.6.34
+Version: 1.6.35
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -675,6 +675,9 @@ rm -f %{rhnconf}/rhnSecret.py*
# $Id$
%changelog
+* Mon Oct 24 2011 Michael Mraka <michael.mraka(a)redhat.com> 1.6.35-1
+- 731692 - make number formating consistent across all units
+
* Tue Oct 18 2011 Miroslav SuchÜ 1.6.34-1
- 745102 - unify handlers of nullable columns
diff --git a/rel-eng/packages/spacewalk-backend b/rel-eng/packages/spacewalk-backend
index 672d321..681cdfe 100644
--- a/rel-eng/packages/spacewalk-backend
+++ b/rel-eng/packages/spacewalk-backend
@@ -1 +1 @@
-1.6.34-1 backend/
+1.6.35-1 backend/
commit 17655a026da3c251857ed2da575f5b137ee5aee0
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Mon Oct 24 13:56:18 2011 +0200
731692 - make number formating consistent across all units
diff --git a/backend/satellite_tools/satsync.py b/backend/satellite_tools/satsync.py
index f41ff45..e93d0c5 100644
--- a/backend/satellite_tools/satsync.py
+++ b/backend/satellite_tools/satsync.py
@@ -1807,19 +1807,17 @@ Please contact your RHN representative""") % (generation, sat_cert.generation))
# Translate x bytes to string "x MB", "x GB" or "x kB"
def _bytes_to_fuzzy(self, bytes):
- kilo=1024
- mega=kilo*1024
- giga=mega*1024
- if (bytes/kilo == 0):
- return "%d bytes" %(bytes)
- elif (bytes/mega == 0):
- return "%d kiB" %(bytes / 1024)
- elif (bytes/giga == 0):
- mega_value=float(bytes) / mega
- return "%.3f MiB" %(mega_value)
- else:
- giga_value=float(bytes) / giga
- return "%.3f GiB" %(giga_value)
+ units = [ 'bytes', 'kiB', 'MiB', 'GiB', 'TiB', 'PiB']
+ base = 1024
+ fuzzy = bytes
+ for unit in units:
+ if fuzzy >= base:
+ fuzzy = float(fuzzy)/base
+ else:
+ break
+ int_len = len("%d" % fuzzy)
+ fract_len = 3 - int_len
+ return "%*.*f %s" % (int_len, fract_len, fuzzy, unit)
def _get_package_stream(self, channel, package_id, nvrea, sources):
""" returns (filepath, stream), so in the case of a "wire source",
commit f59861774f13cd6703b9c781b0e9a911108bf5bb
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Mon Oct 24 12:55:36 2011 +0200
731692 - do the decimal part math properly
diff --git a/backend/satellite_tools/satsync.py b/backend/satellite_tools/satsync.py
index 972ed2f..f41ff45 100644
--- a/backend/satellite_tools/satsync.py
+++ b/backend/satellite_tools/satsync.py
@@ -1815,11 +1815,11 @@ Please contact your RHN representative""") % (generation, sat_cert.generation))
elif (bytes/mega == 0):
return "%d kiB" %(bytes / 1024)
elif (bytes/giga == 0):
- mega_value=bytes / mega
- return "%d.%03d MiB" %(mega_value, (bytes % mega) / kilo)
+ mega_value=float(bytes) / mega
+ return "%.3f MiB" %(mega_value)
else:
- giga_value=bytes / giga
- return "%d.%03d GiB" %(giga_value, (bytes % giga) / mega)
+ giga_value=float(bytes) / giga
+ return "%.3f GiB" %(giga_value)
def _get_package_stream(self, channel, package_id, nvrea, sources):
""" returns (filepath, stream), so in the case of a "wire source",
commit f7119227dbb956bfe080c70d138827497ad58784
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Oct 24 15:24:15 2011 +0200
Removing Perl modulex that are (in newer versions) on CPAN.
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/BUILD b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/BUILD
deleted file mode 100644
index 5b87bf0..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/BUILD
+++ /dev/null
@@ -1,53 +0,0 @@
-# Macros
-
-%define cvs_package PerlModules/CPAN/Crypt-Blowfish-2.09
-
-# Package specific stuff
-Name: Crypt-Blowfish
-Version: 2.11.1
-Release: 1
-Packager: Nick Hansen <nhansen(a)redhat.com>
-Summary: Perl Blowfish encryption
-Source: %name-%PACKAGE_VERSION.tar.gz
-BuildArch: i386
-Requires: perl
-Requires: %(perl -MConfig -le 'if (defined $Config{useithreads}) { print "perl(:WITH_ITHREADS)" } else { print "perl(:WITHOUT_ITHREADS)" }')
-Requires: %(perl -MConfig -le 'if (defined $Config{usethreads}) { print "perl(:WITH_THREADS)" } else { print "perl(:WITHOUT_THREADS)" }')
-Requires: %(perl -MConfig -le 'if (defined $Config{uselargefiles}) { print "perl(:WITH_LARGEFILES)" } else { print "perl(:WITHOUT_LARGEFILES)" }')
-Group: Development/Libraries
-Vendor: Red Hat, Inc.
-Copyright: This perl extension includes software developed by, and copyright of, A.M. Kuchling. Other parts of the library are covered by the following licence: Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/) Modifications and Current Implimentation Copyright (C) 2000 W3Works, LLC. All rights reserved.
-
-BuildRoot: %{_tmppath}/%name
-Prefix: %{_our_prefix}
-
-
-%description
-
-This is Crypt::Blowfish version 2.09, an XS-based implementation of the
-Blowfish cryptography algorithm designed by Bruce Schneier. It's designed
-to take full advantage of Crypt::CBC when desired. Blowfish keys may be
-up to 448 bits (56 bytes) long. This module builds on nearly every platform
-that Perl itself does (see Notes for exceptions).
-
-
-%prep
-%entirely_abstract_build_step
-
-%build
-%makefile_build
-
-%install
-rm -rf $RPM_BUILD_ROOT
-cd $RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
-
-%cpan_doc_install
-%makefile_install
-%point_scripts_to_correct_perl
-%make_file_list
-
-%files -f %{name}-%{version}-%{release}-filelist
-
-%clean
-%abstract_clean_script
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.bs b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.bs
deleted file mode 100644
index e69de29..0000000
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.c b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.c
deleted file mode 100644
index 5b67485..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.c
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- * This file was generated automatically by xsubpp version 1.9507 from the
- * contents of Blowfish.xs. Do not edit this file, edit Blowfish.xs instead.
- *
- * ANY CHANGES MADE HERE WILL BE LOST!
- *
- */
-
-#line 1 "Blowfish.xs"
-/*
- * Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
- *
- * Code Modfifications Copyright (C) 2000 W3Works, LLC (http://www.w3works.co/)
- * All rights reserved.
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "blowfish.h"
-
-/* thanks to LDS */
-#ifndef sv_undef
-#define sv_undef PL_sv_undef
-#endif
-
-#line 29 "Blowfish.c"
-XS(XS_Crypt__Blowfish_init)
-{
- dXSARGS;
- if (items != 1)
- croak("Usage: Crypt::Blowfish::init(key)");
- {
- unsigned char * key;
- STRLEN key_len;
- char * RETVAL;
-#line 29 "Blowfish.xs"
- {
- /*
- * What should this length be???
- */
- char ks[8192];
-
- key = (unsigned char *) SvPV(ST(0), key_len);
- if (key_len < 8 || key_len > 56)
- croak("Invalid length key");
-
- if (blowfish_make_bfkey(key, key_len, ks))
- croak("Error creating key schedule");
-
- ST(0) = sv_2mortal(newSVpv(ks, sizeof(ks)));
- }
-#line 55 "Blowfish.c"
- }
- XSRETURN(1);
-}
-
-XS(XS_Crypt__Blowfish_crypt)
-{
- dXSARGS;
- if (items != 4)
- croak("Usage: Crypt::Blowfish::crypt(input, output, ks, dir)");
- {
- char * input;
- SV * output = ST(1);
- char * ks;
- STRLEN input_len;
- STRLEN output_len;
- STRLEN ks_len;
- int dir = (int)SvIV(ST(3));
-#line 55 "Blowfish.xs"
- {
- input = (char *) SvPV(ST(0), input_len);
- if (input_len != 8)
- croak("input must be 8 bytes long");
-
- ks = (char *) SvPV(ST(2), ks_len);
-
- if (output == &sv_undef)
- output = sv_newmortal();
- output_len = 8;
-
- if (!SvUPGRADE(output, SVt_PV))
- croak("cannot use output argument as lvalue");
-
- /* blowfish_crypt_8bytes(input, SvGROW(output, 8), ks, dir); */
- /* HP-UX (HP cc) fix below, thanks Addi! */
- blowfish_crypt_8bytes( (unsigned char*)input, (unsigned char*)SvGROW(output, 8), ks, (short)dir);
-
- SvCUR_set(output, output_len);
- *SvEND(output) = '\0';
- (void) SvPOK_only(output);
- SvTAINT(output);
-
- ST(0) = output;
- }
-#line 99 "Blowfish.c"
- }
- XSRETURN(1);
-}
-
-#ifdef __cplusplus
-extern "C"
-#endif
-XS(boot_Crypt__Blowfish)
-{
- dXSARGS;
- char* file = __FILE__;
-
- XS_VERSION_BOOTCHECK ;
-
- newXS("Crypt::Blowfish::init", XS_Crypt__Blowfish_init, file);
- newXS("Crypt::Blowfish::crypt", XS_Crypt__Blowfish_crypt, file);
- XSRETURN_YES;
-}
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.pm b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.pm
deleted file mode 100644
index 9295a5a..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.pm
+++ /dev/null
@@ -1,207 +0,0 @@
-package Crypt::Blowfish;
-
-require Exporter;
-require DynaLoader;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-
-@ISA = qw(Exporter DynaLoader);
-# @ISA = qw(Exporter DynaLoader Crypt::BlockCipher);
-
-# Items to export into callers namespace by default
-@EXPORT = qw();
-
-# Other items we are prepared to export if requested
-@EXPORT_OK = qw(
- blocksize keysize min_keysize max_keysize
- new encrypt decrypt
-);
-
-$VERSION = '2.09';
-bootstrap Crypt::Blowfish $VERSION;
-
-use strict;
-use Carp;
-
-sub usage
-{
- my ($package, $filename, $line, $subr) = caller(1);
- $Carp::CarpLevel = 2;
- croak "Usage: $subr(@_)";
-}
-
-
-sub blocksize { 8; } # /* byte my shiny metal.. */
-sub keysize { 0; } # /* we'll leave this at 8 .. for now. expect change. */
-sub min_keysize { 8; }
-sub max_keysize { 56; }
-
-sub new
-{
- usage("new Blowfish key") unless @_ == 2;
-
- my $type = shift; my $self = {}; bless $self, $type;
-
- $self->{'ks'} = Crypt::Blowfish::init(shift);
-
- $self;
-}
-
-sub encrypt
-{
- usage("encrypt data[8 bytes]") unless @_ == 2;
-
- my $self = shift;
- my $data = shift;
-
- Crypt::Blowfish::crypt($data, $data, $self->{'ks'}, 0);
-
- $data;
-}
-
-sub decrypt
-{
- usage("decrypt data[8 bytes]") unless @_ == 2;
-
- my $self = shift;
- my $data = shift;
-
- Crypt::Blowfish::crypt($data, $data, $self->{'ks'}, 1);
-
- $data;
-}
-
-1;
-
-__END__
-#
-# Parts Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
-# New Parts Copyright (C) 2000, 2001 W3Works, LLC (http://www.w3works.com/)
-# All rights reserved.
-#
-
-=head1 NAME
-
-Crypt::Blowfish - Perl Blowfish encryption module
-
-=head1 SYNOPSIS
-
- use Crypt::Blowfish;
- my $cipher = new Crypt::Blowfish $key;
- my $ciphertext = $cipher->encrypt($plaintext);
- my $plaintext = $cipher->decrypt($ciphertext);
-
-=head1 DESCRIPTION
-
-Blowfish is capable of strong encryption and can use key sizes up
-to 56 bytes (a 448 bit key). You're encouraged to take advantage
-of the full key size to ensure the strongest encryption possible
-from this module.
-
-Crypt::Blowfish has the following methods:
-
-=over 4
-
- blocksize()
- keysize()
- encrypt()
- decrypt()
-
-=back
-
-=head1 FUNCTIONS
-
-=over 4
-
-=item blocksize
-
-Returns the size (in bytes) of the block cipher.
-
-Crypt::Blowfish doesn't return a key size due to its ability
-to use variable-length keys. (well, more accurately, it won't
-as of 2.09 .. for now, it does. expect that to change)
-
-=item new
-
- my $cipher = new Crypt::Blowfish $key;
-
-This creates a new Crypt::Blowfish BlockCipher object, using $key,
-where $key is a key of C<keysize()> bytes (minimum of eight bytes).
-
-=item encrypt
-
- my $cipher = new Crypt::Blowfish $key;
- my $ciphertext = $cipher->encrypt($plaintext);
-
-This function encrypts $plaintext and returns the $ciphertext
-where $plaintext and $ciphertext must be of C<blocksize()> bytes.
-(hint: Blowfish is an 8 byte block cipher)
-
-=item decrypt
-
- my $cipher = new Crypt::Blowfish $key;
- my $plaintext = $cipher->decrypt($ciphertext);
-
-This function decrypts $ciphertext and returns the $plaintext
-where $plaintext and $ciphertext must be of C<blocksize()> bytes.
-(hint: see previous hint)
-
-=back
-
-=head1 EXAMPLE
-
- my $key = pack("H16", "0123456789ABCDEF"); # min. 8 bytes
- my $cipher = new Crypt::Blowfish $key;
- my $ciphertext = $cipher->encrypt("plaintex"); # SEE NOTES
- print unpack("H16", $ciphertext), "\n";
-
-=head1 PLATFORMS
-
- Please see the README document for platforms and performance
- tests.
-
-=head1 NOTES
-
-The module is capable of being used with Crypt::CBC. You're
-encouraged to read the perldoc for Crypt::CBC if you intend to
-use this module for Cipher Block Chaining modes. In fact, if
-you have any intentions of encrypting more than eight bytes of
-data with this, or any other block cipher, you're going to need
-B<some> type of block chaining help. Crypt::CBC tends to be
-very good at this. If you're not going to encrypt more than
-eight bytes, your data B<must> be B<exactly> eight bytes long.
-If need be, do your own padding. "\0" as a null byte is perfectly
-valid to use for this. Additionally, the current maintainer for
-Crypt::Blowfish may or may not release Crypt::CBC_R which
-replaces the default 'RandomIV' initialization vector in
-Crypt::CBC with a random initialization vector. (to the limits
-of /dev/urandom and associates) In either case, please email
-amused(a)pobox.com for Crypt::CBC_R.
-
-=head1 SEE ALSO
-
-Crypt::CBC,
-Crypt::DES,
-Crypt::IDEA
-
-Bruce Schneier, I<Applied Cryptography>, 1995, Second Edition,
-published by John Wiley & Sons, Inc.
-
-=head1 COPYRIGHT
-
-The implementation of the Blowfish algorithm was developed by,
-and is copyright of, A.M. Kuchling.
-
-Other parts of the perl extension and module are
-copyright of Systemics Ltd ( http://www.systemics.com/ ).
-
-Code revisions, updates, and standalone release are copyright
-1999-2001 W3Works, LLC.
-
-=head1 AUTHOR
-
-Original algorithm, Bruce Shneier. Original implementation, A.M.
-Kuchling. Original Perl implementation, Systemics Ltd. Current
-maintenance by W3Works, LLC.
-
-Current revision and maintainer: Dave Paris <amused(a)pobox.com>
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.xs b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.xs
deleted file mode 100644
index 336ac75..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Blowfish.xs
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
- *
- * Code Modfifications Copyright (C) 2000 W3Works, LLC (http://www.w3works.co/)
- * All rights reserved.
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-#include "blowfish.h"
-
-/* thanks to LDS */
-#ifndef sv_undef
-#define sv_undef PL_sv_undef
-#endif
-
-MODULE = Crypt::Blowfish PACKAGE = Crypt::Blowfish PREFIX = blowfish_
-
-PROTOTYPES: DISABLE
-
-
-char *
-blowfish_init(key)
- unsigned char * key = NO_INIT
- STRLEN key_len = NO_INIT
- CODE:
- {
- /*
- * What should this length be???
- */
- char ks[8192];
-
- key = (unsigned char *) SvPV(ST(0), key_len);
- if (key_len < 8 || key_len > 56)
- croak("Invalid length key");
-
- if (blowfish_make_bfkey(key, key_len, ks))
- croak("Error creating key schedule");
-
- ST(0) = sv_2mortal(newSVpv(ks, sizeof(ks)));
- }
-
-void
-blowfish_crypt(input, output, ks, dir)
- char * input = NO_INIT
- SV * output
- char * ks = NO_INIT
- STRLEN input_len = NO_INIT
- STRLEN output_len = NO_INIT
- STRLEN ks_len = NO_INIT
- int dir
- CODE:
- {
- input = (char *) SvPV(ST(0), input_len);
- if (input_len != 8)
- croak("input must be 8 bytes long");
-
- ks = (char *) SvPV(ST(2), ks_len);
-
- if (output == &sv_undef)
- output = sv_newmortal();
- output_len = 8;
-
- if (!SvUPGRADE(output, SVt_PV))
- croak("cannot use output argument as lvalue");
-
- /* blowfish_crypt_8bytes(input, SvGROW(output, 8), ks, dir); */
- /* HP-UX (HP cc) fix below, thanks Addi! */
- blowfish_crypt_8bytes( (unsigned char*)input, (unsigned char*)SvGROW(output, 8), ks, (short)dir);
-
- SvCUR_set(output, output_len);
- *SvEND(output) = '\0';
- (void) SvPOK_only(output);
- SvTAINT(output);
-
- ST(0) = output;
- }
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/COPYRIGHT b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/COPYRIGHT
deleted file mode 100644
index 4eed66c..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/COPYRIGHT
+++ /dev/null
@@ -1,67 +0,0 @@
-This perl extension includes software developed by, and copyright of, A.M. Kuchling.
-
-Other parts of the library are covered by the following licence:
-
-Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
-
-Modifications and Current Implimentation Copyright (C) 2000 W3Works, LLC.
-
-All rights reserved.
-
-Current implimentation contains modifications made by W3Works, LLC. The
-modifications remain copyright of W3Works, LLC and attribution for these
-modification should be made to W3Works, LLC. These modifications and
-this copyright must remain with this package.
-
-Additions to the Restrictions set out below are:
-1. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product inculdes software developed by W3Works, LLC (http://www.w3works.com)
-
- NO ADDITIONAL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
- THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE EXTENDED BY THIS DISTRIBUTION.
-
- Any subsequent derrivations of this package must retainl this copyright.
-
-
-Original Copyright Below
-
-This library and applications are FREE FOR COMMERCIAL AND NON-COMMERCIAL USE
-as long as the following conditions are adhered to.
-
-Copyright remains with Systemics Ltd, and as such any Copyright notices
-in the code are not to be removed. If this code is used in a product,
-Systemics should be given attribution as the author of the parts used.
-This can be in the form of a textual message at program startup or
-in documentation (online or textual) provided with the package.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by Systemics Ltd (http://www.systemics.com/)
-
- THIS SOFTWARE IS PROVIDED BY SYSTEMICS LTD ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- The licence and distribution terms for any publically available version or
- derivative of this code cannot be changed. i.e. this code cannot simply be
- copied and put under another distribution licence
- [including the GNU Public Licence.]
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Changes b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Changes
deleted file mode 100644
index b2821b8..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Changes
+++ /dev/null
@@ -1,48 +0,0 @@
-Revision history for Perl extension Crypt::Blowfish.
-
-2.09 Tue Nov 13 01:28:26 EST 2001
- - changed keysize back to 0
- apparently setting keysize to 8 triggered a bad hack
- in Crypt::CBC which resulted in OpenSRS breaking.
- the "bad hack" in question is:
- $ks = $cipher =~ /blowfish/i ? 56 : 8 unless $ks > 0;
- ... anyway.. fixed.
-
-2.08 Tue Oct 30 23:29:25 EST 2001
- - added two new functions: min_keysize and max_keysize
- these allow modules like Crypt::CBC_IL and Crypt::CBC_R
- to use variable key lengths with CBC modes.
- - cleaned up test.pl
- - updated README
-
-2.07 Thu Nov 30 02:59:29 EST 2000
- - minor change in XS
- - additions to reported platforms
-
-2.06 Tue Jul 04 15:35:34 EST 2000
- - Win32 tested using VC++5.0, all tests passed on NT4/SP5
-
-2.05 Tue Jul 04 14:42:13 EST 2000
- - non-public
- - code-cleanup
- - initial Win32 support
-
-2.04 Wed May 17 21:42:54 EST 2000
- - non-public
- - code cleanup
-
-2.03 Tue Feb 29 17:19:48 EST 2000
- - added small patch from LDS to Blowfish.xs
-
-2.02 Sun Feb 13 21:49:58 EST 2000
- - added speed tests, fixed HP-UX functionality
- - cleaned up code
- - added README
-
-2.01 Fri Feb 11 19:35:27 EST 2000
- - solidified XS support and extracted
- from original package.
-
-2.00 Sun Sep 5 21:07:48 EST 1999
- - original version; created by h2xs 1.19
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/MANIFEST b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/MANIFEST
deleted file mode 100644
index 6381a76..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/MANIFEST
+++ /dev/null
@@ -1,11 +0,0 @@
-COPYRIGHT
-Blowfish.pm
-Blowfish.xs
-MANIFEST
-README
-Changes
-Makefile.PL
-_blowfish.c
-blowfish.h
-test.pl
-typemap
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile
deleted file mode 100644
index 101b597..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile
+++ /dev/null
@@ -1,759 +0,0 @@
-# This Makefile is for the Crypt::Blowfish extension to perl.
-#
-# It was generated automatically by MakeMaker version
-# 5.4302 (Revision: 1.222) from the contents of
-# Makefile.PL. Don't edit this file, edit Makefile.PL instead.
-#
-# ANY CHANGES MADE HERE WILL BE LOST!
-#
-# MakeMaker ARGV: ()
-#
-# MakeMaker Parameters:
-
-# DISTNAME => q[Crypt-Blowfish]
-# NAME => q[Crypt::Blowfish]
-# OBJECT => q[Blowfish.o _blowfish.o]
-# VERSION_FROM => q[Blowfish.pm]
-# dist => { COMPRESS=>q[gzip], SUFFIX=>q[gz] }
-
-# --- MakeMaker post_initialize section:
-
-
-# --- MakeMaker const_config section:
-
-# These definitions are from config.sh (via /usr/lib/perl5/5.00503/i386-linux/Config.pm)
-
-# They may have been overridden via Makefile.PL or on the command line
-AR = ar
-CC = cc
-CCCDLFLAGS = -fpic
-CCDLFLAGS = -rdynamic
-DLEXT = so
-DLSRC = dl_dlopen.xs
-LD = cc
-LDDLFLAGS = -shared -L/usr/local/lib
-LDFLAGS = -L/usr/local/lib
-LIBC =
-LIB_EXT = .a
-OBJ_EXT = .o
-OSNAME = linux
-OSVERS = 2.2.5-22smp
-RANLIB = :
-SO = so
-EXE_EXT =
-
-
-# --- MakeMaker constants section:
-AR_STATIC_ARGS = cr
-NAME = Crypt::Blowfish
-DISTNAME = Crypt-Blowfish
-NAME_SYM = Crypt_Blowfish
-VERSION = 2.09
-VERSION_SYM = 2_09
-XS_VERSION = 2.09
-INST_BIN = blib/bin
-INST_EXE = blib/script
-INST_LIB = blib/lib
-INST_ARCHLIB = blib/arch
-INST_SCRIPT = blib/script
-PREFIX = /usr
-INSTALLDIRS = site
-INSTALLPRIVLIB = $(PREFIX)/lib/perl5/5.00503
-INSTALLARCHLIB = $(PREFIX)/lib/perl5/5.00503/i386-linux
-INSTALLSITELIB = $(PREFIX)/lib/perl5/site_perl/5.005
-INSTALLSITEARCH = $(PREFIX)/lib/perl5/site_perl/5.005/i386-linux
-INSTALLBIN = $(PREFIX)/bin
-INSTALLSCRIPT = $(PREFIX)/bin
-PERL_LIB = /usr/lib/perl5/5.00503
-PERL_ARCHLIB = /usr/lib/perl5/5.00503/i386-linux
-SITELIBEXP = /usr/lib/perl5/site_perl/5.005
-SITEARCHEXP = /usr/lib/perl5/site_perl/5.005/i386-linux
-LIBPERL_A = libperl.a
-FIRST_MAKEFILE = Makefile
-MAKE_APERL_FILE = Makefile.aperl
-PERLMAINCC = $(CC)
-PERL_INC = /usr/lib/perl5/5.00503/i386-linux/CORE
-PERL = /usr/bin/perl
-FULLPERL = /usr/bin/perl
-
-VERSION_MACRO = VERSION
-DEFINE_VERSION = -D$(VERSION_MACRO)=\"$(VERSION)\"
-XS_VERSION_MACRO = XS_VERSION
-XS_DEFINE_VERSION = -D$(XS_VERSION_MACRO)=\"$(XS_VERSION)\"
-
-MAKEMAKER = /usr/lib/perl5/5.00503/ExtUtils/MakeMaker.pm
-MM_VERSION = 5.4302
-
-# FULLEXT = Pathname for extension directory (eg Foo/Bar/Oracle).
-# BASEEXT = Basename part of FULLEXT. May be just equal FULLEXT. (eg Oracle)
-# ROOTEXT = Directory part of FULLEXT with leading slash (eg /DBD) !!! Deprecated from MM 5.32 !!!
-# PARENT_NAME = NAME without BASEEXT and no trailing :: (eg Foo::Bar)
-# DLBASE = Basename part of dynamic library. May be just equal BASEEXT.
-FULLEXT = Crypt/Blowfish
-BASEEXT = Blowfish
-PARENT_NAME = Crypt
-DLBASE = $(BASEEXT)
-VERSION_FROM = Blowfish.pm
-OBJECT = Blowfish$(OBJ_EXT) _blowfish$(OBJ_EXT)
-LDFROM = $(OBJECT)
-LINKTYPE = dynamic
-
-# Handy lists of source code files:
-XS_FILES= Blowfish.xs
-C_FILES = Blowfish.c \
- _blowfish.c
-O_FILES = Blowfish.o \
- _blowfish.o
-H_FILES = blowfish.h
-MAN1PODS =
-MAN3PODS = Blowfish.pm
-INST_MAN1DIR = blib/man1
-INSTALLMAN1DIR = $(PREFIX)/man/man1
-MAN1EXT = 1
-INST_MAN3DIR = blib/man3
-INSTALLMAN3DIR = $(PREFIX)/lib/perl5/man/man3
-MAN3EXT = 3
-PERM_RW = 644
-PERM_RWX = 755
-
-# work around a famous dec-osf make(1) feature(?):
-makemakerdflt: all
-
-.SUFFIXES: .xs .c .C .cpp .cxx .cc $(OBJ_EXT)
-
-# Nick wanted to get rid of .PRECIOUS. I don't remember why. I seem to recall, that
-# some make implementations will delete the Makefile when we rebuild it. Because
-# we call false(1) when we rebuild it. So make(1) is not completely wrong when it
-# does so. Our milage may vary.
-# .PRECIOUS: Makefile # seems to be not necessary anymore
-
-.PHONY: all config static dynamic test linkext manifest
-
-# Where is the Config information that we are using/depend on
-CONFIGDEP = $(PERL_ARCHLIB)/Config.pm $(PERL_INC)/config.h
-
-# Where to put things:
-INST_LIBDIR = $(INST_LIB)/Crypt
-INST_ARCHLIBDIR = $(INST_ARCHLIB)/Crypt
-
-INST_AUTODIR = $(INST_LIB)/auto/$(FULLEXT)
-INST_ARCHAUTODIR = $(INST_ARCHLIB)/auto/$(FULLEXT)
-
-INST_STATIC = $(INST_ARCHAUTODIR)/$(BASEEXT)$(LIB_EXT)
-INST_DYNAMIC = $(INST_ARCHAUTODIR)/$(DLBASE).$(DLEXT)
-INST_BOOT = $(INST_ARCHAUTODIR)/$(BASEEXT).bs
-
-EXPORT_LIST =
-
-PERL_ARCHIVE =
-
-TO_INST_PM = Blowfish.pm
-
-PM_TO_BLIB = Blowfish.pm \
- $(INST_LIBDIR)/Blowfish.pm
-
-
-# --- MakeMaker tool_autosplit section:
-
-# Usage: $(AUTOSPLITFILE) FileToSplit AutoDirToSplitInto
-AUTOSPLITFILE = $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -e 'use AutoSplit;autosplit($$ARGV[0], $$ARGV[1], 0, 1, 1) ;'
-
-
-# --- MakeMaker tool_xsubpp section:
-
-XSUBPPDIR = /usr/lib/perl5/5.00503/ExtUtils
-XSUBPP = $(XSUBPPDIR)/xsubpp
-XSPROTOARG =
-XSUBPPDEPS = $(XSUBPPDIR)/typemap typemap
-XSUBPPARGS = -typemap $(XSUBPPDIR)/typemap -typemap typemap
-
-
-# --- MakeMaker tools_other section:
-
-SHELL = /bin/sh
-CHMOD = chmod
-CP = cp
-LD = cc
-MV = mv
-NOOP = $(SHELL) -c true
-RM_F = rm -f
-RM_RF = rm -rf
-TEST_F = test -f
-TOUCH = touch
-UMASK_NULL = umask 0
-DEV_NULL = > /dev/null 2>&1
-
-# The following is a portable way to say mkdir -p
-# To see which directories are created, change the if 0 to if 1
-MKPATH = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e mkpath
-
-# This helps us to minimize the effect of the .exists files A yet
-# better solution would be to have a stable file in the perl
-# distribution with a timestamp of zero. But this solution doesn't
-# need any changes to the core distribution and works with older perls
-EQUALIZE_TIMESTAMP = $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Command -e eqtime
-
-# Here we warn users that an old packlist file was found somewhere,
-# and that they should call some uninstall routine
-WARN_IF_OLD_PACKLIST = $(PERL) -we 'exit unless -f $$ARGV[0];' \
--e 'print "WARNING: I have found an old package in\n";' \
--e 'print "\t$$ARGV[0].\n";' \
--e 'print "Please make sure the two installations are not conflicting\n";'
-
-UNINST=0
-VERBINST=1
-
-MOD_INSTALL = $(PERL) -I$(INST_LIB) -I$(PERL_LIB) -MExtUtils::Install \
--e "install({@ARGV},'$(VERBINST)',0,'$(UNINST)');"
-
-DOC_INSTALL = $(PERL) -e '$$\="\n\n";' \
--e 'print "=head2 ", scalar(localtime), ": C<", shift, ">", " L<", shift, ">";' \
--e 'print "=over 4";' \
--e 'while (defined($$key = shift) and defined($$val = shift)){print "=item *";print "C<$$key: $$val>";}' \
--e 'print "=back";'
-
-UNINSTALL = $(PERL) -MExtUtils::Install \
--e 'uninstall($$ARGV[0],1,1); print "\nUninstall is deprecated. Please check the";' \
--e 'print " packlist above carefully.\n There may be errors. Remove the";' \
--e 'print " appropriate files manually.\n Sorry for the inconveniences.\n"'
-
-
-# --- MakeMaker dist section:
-
-DISTVNAME = $(DISTNAME)-$(VERSION)
-TAR = tar
-TARFLAGS = cvf
-ZIP = zip
-ZIPFLAGS = -r
-COMPRESS = gzip
-SUFFIX = gz
-SHAR = shar
-PREOP = @$(NOOP)
-POSTOP = @$(NOOP)
-TO_UNIX = @$(NOOP)
-CI = ci -u
-RCS_LABEL = rcs -Nv$(VERSION_SYM): -q
-DIST_CP = best
-DIST_DEFAULT = tardist
-
-
-# --- MakeMaker macro section:
-
-
-# --- MakeMaker depend section:
-
-
-# --- MakeMaker cflags section:
-
-CCFLAGS = -Dbool=char -DHAS_BOOL -I/usr/local/include
-OPTIMIZE = -O2 -m486 -fno-strength-reduce
-PERLTYPE =
-LARGE =
-SPLIT =
-
-
-# --- MakeMaker const_loadlibs section:
-
-# Crypt::Blowfish might depend on some other libraries:
-# See ExtUtils::Liblist for details
-#
-LD_RUN_PATH =
-
-
-# --- MakeMaker const_cccmd section:
-CCCMD = $(CC) -c $(INC) $(CCFLAGS) $(OPTIMIZE) \
- $(PERLTYPE) $(LARGE) $(SPLIT) $(DEFINE_VERSION) \
- $(XS_DEFINE_VERSION)
-
-# --- MakeMaker post_constants section:
-
-
-# --- MakeMaker pasthru section:
-
-PASTHRU = LIB="$(LIB)"\
- LIBPERL_A="$(LIBPERL_A)"\
- LINKTYPE="$(LINKTYPE)"\
- PREFIX="$(PREFIX)"\
- OPTIMIZE="$(OPTIMIZE)"
-
-
-# --- MakeMaker c_o section:
-
-.c$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
-
-.C$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.C
-
-.cpp$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cpp
-
-.cxx$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cxx
-
-.cc$(OBJ_EXT):
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.cc
-
-
-# --- MakeMaker xs_c section:
-
-.xs.c:
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs >xstmp.c && $(MV) xstmp.c $*.c
-
-
-# --- MakeMaker xs_o section:
-
-.xs$(OBJ_EXT):
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(XSUBPP) $(XSPROTOARG) $(XSUBPPARGS) $*.xs >xstmp.c && $(MV) xstmp.c $*.c
- $(CCCMD) $(CCCDLFLAGS) -I$(PERL_INC) $(DEFINE) $*.c
-
-
-# --- MakeMaker top_targets section:
-
-#all :: config $(INST_PM) subdirs linkext manifypods
-
-all :: pure_all manifypods
- @$(NOOP)
-
-pure_all :: config pm_to_blib subdirs linkext
- @$(NOOP)
-
-subdirs :: $(MYEXTLIB)
- @$(NOOP)
-
-config :: Makefile $(INST_LIBDIR)/.exists
- @$(NOOP)
-
-config :: $(INST_ARCHAUTODIR)/.exists
- @$(NOOP)
-
-config :: $(INST_AUTODIR)/.exists
- @$(NOOP)
-
-config :: Version_check
- @$(NOOP)
-
-
-$(INST_AUTODIR)/.exists :: /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h
- @$(MKPATH) $(INST_AUTODIR)
- @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h $(INST_AUTODIR)/.exists
-
- -@$(CHMOD) $(PERM_RWX) $(INST_AUTODIR)
-
-$(INST_LIBDIR)/.exists :: /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h
- @$(MKPATH) $(INST_LIBDIR)
- @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h $(INST_LIBDIR)/.exists
-
- -@$(CHMOD) $(PERM_RWX) $(INST_LIBDIR)
-
-$(INST_ARCHAUTODIR)/.exists :: /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h
- @$(MKPATH) $(INST_ARCHAUTODIR)
- @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h $(INST_ARCHAUTODIR)/.exists
-
- -@$(CHMOD) $(PERM_RWX) $(INST_ARCHAUTODIR)
-
-config :: $(INST_MAN3DIR)/.exists
- @$(NOOP)
-
-
-$(INST_MAN3DIR)/.exists :: /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h
- @$(MKPATH) $(INST_MAN3DIR)
- @$(EQUALIZE_TIMESTAMP) /usr/lib/perl5/5.00503/i386-linux/CORE/perl.h $(INST_MAN3DIR)/.exists
-
- -@$(CHMOD) $(PERM_RWX) $(INST_MAN3DIR)
-
-$(O_FILES): $(H_FILES)
-
-help:
- perldoc ExtUtils::MakeMaker
-
-Version_check:
- @$(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
- -MExtUtils::MakeMaker=Version_check \
- -e "Version_check('$(MM_VERSION)')"
-
-
-# --- MakeMaker linkext section:
-
-linkext :: $(LINKTYPE)
- @$(NOOP)
-
-
-# --- MakeMaker dlsyms section:
-
-
-# --- MakeMaker dynamic section:
-
-## $(INST_PM) has been moved to the all: target.
-## It remains here for awhile to allow for old usage: "make dynamic"
-#dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT) $(INST_PM)
-dynamic :: Makefile $(INST_DYNAMIC) $(INST_BOOT)
- @$(NOOP)
-
-
-# --- MakeMaker dynamic_bs section:
-
-BOOTSTRAP = Blowfish.bs
-
-# As Mkbootstrap might not write a file (if none is required)
-# we use touch to prevent make continually trying to remake it.
-# The DynaLoader only reads a non-empty file.
-$(BOOTSTRAP): Makefile $(INST_ARCHAUTODIR)/.exists
- @echo "Running Mkbootstrap for $(NAME) ($(BSLOADLIBS))"
- @$(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" \
- -MExtUtils::Mkbootstrap \
- -e "Mkbootstrap('$(BASEEXT)','$(BSLOADLIBS)');"
- @$(TOUCH) $(BOOTSTRAP)
- $(CHMOD) $(PERM_RW) $@
-
-$(INST_BOOT): $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists
- @rm -rf $(INST_BOOT)
- -cp $(BOOTSTRAP) $(INST_BOOT)
- $(CHMOD) $(PERM_RW) $@
-
-
-# --- MakeMaker dynamic_lib section:
-
-# This section creates the dynamically loadable $(INST_DYNAMIC)
-# from $(OBJECT) and possibly $(MYEXTLIB).
-ARMAYBE = :
-OTHERLDFLAGS =
-INST_DYNAMIC_DEP =
-
-$(INST_DYNAMIC): $(OBJECT) $(MYEXTLIB) $(BOOTSTRAP) $(INST_ARCHAUTODIR)/.exists $(EXPORT_LIST) $(PERL_ARCHIVE) $(INST_DYNAMIC_DEP)
- LD_RUN_PATH="$(LD_RUN_PATH)" $(LD) -o $@ $(LDDLFLAGS) $(LDFROM) $(OTHERLDFLAGS) $(MYEXTLIB) $(PERL_ARCHIVE) $(LDLOADLIBS) $(EXPORT_LIST)
- $(CHMOD) $(PERM_RWX) $@
-
-
-# --- MakeMaker static section:
-
-## $(INST_PM) has been moved to the all: target.
-## It remains here for awhile to allow for old usage: "make static"
-#static :: Makefile $(INST_STATIC) $(INST_PM)
-static :: Makefile $(INST_STATIC)
- @$(NOOP)
-
-
-# --- MakeMaker static_lib section:
-
-$(INST_STATIC): $(OBJECT) $(MYEXTLIB) $(INST_ARCHAUTODIR)/.exists
- $(RM_RF) $@
- $(AR) $(AR_STATIC_ARGS) $@ $(OBJECT) && $(RANLIB) $@
- $(CHMOD) $(PERM_RWX) $@
- @echo "$(EXTRALIBS)" > $(INST_ARCHAUTODIR)/extralibs.ld
-
-
-
-# --- MakeMaker manifypods section:
-POD2MAN_EXE = /usr/bin/pod2man
-POD2MAN = $(PERL) -we '%m=@ARGV;for (keys %m){' \
--e 'next if -e $$m{$$_} && -M $$m{$$_} < -M $$_ && -M $$m{$$_} < -M "Makefile";' \
--e 'print "Manifying $$m{$$_}\n";' \
--e 'system(qq[$$^X ].q["-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" $(POD2MAN_EXE) ].qq[$$_>$$m{$$_}])==0 or warn "Couldn\047t install $$m{$$_}\n";' \
--e 'chmod(oct($(PERM_RW))), $$m{$$_} or warn "chmod $(PERM_RW) $$m{$$_}: $$!\n";}'
-
-manifypods : pure_all Blowfish.pm
- @$(POD2MAN) \
- Blowfish.pm \
- $(INST_MAN3DIR)/Crypt::Blowfish.$(MAN3EXT)
-
-# --- MakeMaker processPL section:
-
-
-# --- MakeMaker installbin section:
-
-
-# --- MakeMaker subdirs section:
-
-# none
-
-# --- MakeMaker clean section:
-
-# Delete temporary files but do not touch installed files. We don't delete
-# the Makefile here so a later make realclean still has a makefile to use.
-
-clean ::
- -rm -rf Blowfish.c ./blib $(MAKE_APERL_FILE) $(INST_ARCHAUTODIR)/extralibs.all perlmain.c mon.out core so_locations pm_to_blib *~ */*~ */*/*~ *$(OBJ_EXT) *$(LIB_EXT) perl.exe $(BOOTSTRAP) $(BASEEXT).bso $(BASEEXT).def $(BASEEXT).exp
- -mv Makefile Makefile.old $(DEV_NULL)
-
-
-# --- MakeMaker realclean section:
-
-# Delete temporary files (via clean) and also delete installed files
-realclean purge :: clean
- rm -rf $(INST_AUTODIR) $(INST_ARCHAUTODIR)
- rm -f $(INST_DYNAMIC) $(INST_BOOT)
- rm -f $(INST_STATIC)
- rm -f $(INST_LIBDIR)/Blowfish.pm
- rm -rf Makefile Makefile.old
-
-
-# --- MakeMaker dist_basics section:
-
-distclean :: realclean distcheck
-
-distcheck :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=fullcheck \
- -e fullcheck
-
-skipcheck :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=skipcheck \
- -e skipcheck
-
-manifest :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=mkmanifest \
- -e mkmanifest
-
-
-# --- MakeMaker dist_core section:
-
-dist : $(DIST_DEFAULT)
- @$(PERL) -le 'print "Warning: Makefile possibly out of date with $$vf" if ' \
- -e '-e ($$vf="$(VERSION_FROM)") and -M $$vf < -M "Makefile";'
-
-tardist : $(DISTVNAME).tar$(SUFFIX)
-
-zipdist : $(DISTVNAME).zip
-
-$(DISTVNAME).tar$(SUFFIX) : distdir
- $(PREOP)
- $(TO_UNIX)
- $(TAR) $(TARFLAGS) $(DISTVNAME).tar $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(COMPRESS) $(DISTVNAME).tar
- $(POSTOP)
-
-$(DISTVNAME).zip : distdir
- $(PREOP)
- $(ZIP) $(ZIPFLAGS) $(DISTVNAME).zip $(DISTVNAME)
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-
-uutardist : $(DISTVNAME).tar$(SUFFIX)
- uuencode $(DISTVNAME).tar$(SUFFIX) \
- $(DISTVNAME).tar$(SUFFIX) > \
- $(DISTVNAME).tar$(SUFFIX)_uu
-
-shdist : distdir
- $(PREOP)
- $(SHAR) $(DISTVNAME) > $(DISTVNAME).shar
- $(RM_RF) $(DISTVNAME)
- $(POSTOP)
-
-
-# --- MakeMaker dist_dir section:
-
-distdir :
- $(RM_RF) $(DISTVNAME)
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=manicopy,maniread \
- -e "manicopy(maniread(),'$(DISTVNAME)', '$(DIST_CP)');"
-
-
-# --- MakeMaker dist_test section:
-
-disttest : distdir
- cd $(DISTVNAME) && $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) Makefile.PL
- cd $(DISTVNAME) && $(MAKE)
- cd $(DISTVNAME) && $(MAKE) test
-
-
-# --- MakeMaker dist_ci section:
-
-ci :
- $(PERL) -I$(PERL_ARCHLIB) -I$(PERL_LIB) -MExtUtils::Manifest=maniread \
- -e "@all = keys %{ maniread() };" \
- -e 'print("Executing $(CI) @all\n"); system("$(CI) @all");' \
- -e 'print("Executing $(RCS_LABEL) ...\n"); system("$(RCS_LABEL) @all");'
-
-
-# --- MakeMaker install section:
-
-install :: all pure_install doc_install
-
-install_perl :: all pure_perl_install doc_perl_install
-
-install_site :: all pure_site_install doc_site_install
-
-install_ :: install_site
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-pure_install :: pure_$(INSTALLDIRS)_install
-
-doc_install :: doc_$(INSTALLDIRS)_install
- @echo Appending installation info to $(INSTALLARCHLIB)/perllocal.pod
-
-pure__install : pure_site_install
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-doc__install : doc_site_install
- @echo INSTALLDIRS not defined, defaulting to INSTALLDIRS=site
-
-pure_perl_install ::
- @$(MOD_INSTALL) \
- read $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist \
- write $(INSTALLARCHLIB)/auto/$(FULLEXT)/.packlist \
- $(INST_LIB) $(INSTALLPRIVLIB) \
- $(INST_ARCHLIB) $(INSTALLARCHLIB) \
- $(INST_BIN) $(INSTALLBIN) \
- $(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLMAN3DIR)
- @$(WARN_IF_OLD_PACKLIST) \
- $(SITEARCHEXP)/auto/$(FULLEXT)
-
-
-pure_site_install ::
- @$(MOD_INSTALL) \
- read $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist \
- write $(INSTALLSITEARCH)/auto/$(FULLEXT)/.packlist \
- $(INST_LIB) $(INSTALLSITELIB) \
- $(INST_ARCHLIB) $(INSTALLSITEARCH) \
- $(INST_BIN) $(INSTALLBIN) \
- $(INST_SCRIPT) $(INSTALLSCRIPT) \
- $(INST_MAN1DIR) $(INSTALLMAN1DIR) \
- $(INST_MAN3DIR) $(INSTALLMAN3DIR)
- @$(WARN_IF_OLD_PACKLIST) \
- $(PERL_ARCHLIB)/auto/$(FULLEXT)
-
-doc_perl_install ::
- -@$(DOC_INSTALL) \
- "Module" "$(NAME)" \
- "installed into" "$(INSTALLPRIVLIB)" \
- LINKTYPE "$(LINKTYPE)" \
- VERSION "$(VERSION)" \
- EXE_FILES "$(EXE_FILES)" \
- >> $(INSTALLARCHLIB)/perllocal.pod
-
-doc_site_install ::
- -@$(DOC_INSTALL) \
- "Module" "$(NAME)" \
- "installed into" "$(INSTALLSITELIB)" \
- LINKTYPE "$(LINKTYPE)" \
- VERSION "$(VERSION)" \
- EXE_FILES "$(EXE_FILES)" \
- >> $(INSTALLARCHLIB)/perllocal.pod
-
-
-uninstall :: uninstall_from_$(INSTALLDIRS)dirs
-
-uninstall_from_perldirs ::
- @$(UNINSTALL) $(PERL_ARCHLIB)/auto/$(FULLEXT)/.packlist
-
-uninstall_from_sitedirs ::
- @$(UNINSTALL) $(SITEARCHEXP)/auto/$(FULLEXT)/.packlist
-
-
-# --- MakeMaker force section:
-# Phony target to force checking subdirectories.
-FORCE:
- @$(NOOP)
-
-
-# --- MakeMaker perldepend section:
-
-PERL_HDRS = \
-$(PERL_INC)/EXTERN.h $(PERL_INC)/gv.h $(PERL_INC)/pp.h \
-$(PERL_INC)/INTERN.h $(PERL_INC)/handy.h $(PERL_INC)/proto.h \
-$(PERL_INC)/XSUB.h $(PERL_INC)/hv.h $(PERL_INC)/regcomp.h \
-$(PERL_INC)/av.h $(PERL_INC)/keywords.h $(PERL_INC)/regexp.h \
-$(PERL_INC)/config.h $(PERL_INC)/mg.h $(PERL_INC)/scope.h \
-$(PERL_INC)/cop.h $(PERL_INC)/op.h $(PERL_INC)/sv.h \
-$(PERL_INC)/cv.h $(PERL_INC)/opcode.h $(PERL_INC)/unixish.h \
-$(PERL_INC)/dosish.h $(PERL_INC)/patchlevel.h $(PERL_INC)/util.h \
-$(PERL_INC)/embed.h $(PERL_INC)/perl.h $(PERL_INC)/iperlsys.h \
-$(PERL_INC)/form.h $(PERL_INC)/perly.h
-
-$(OBJECT) : $(PERL_HDRS)
-
-Blowfish.c : $(XSUBPPDEPS)
-
-
-# --- MakeMaker makefile section:
-
-$(OBJECT) : $(FIRST_MAKEFILE)
-
-# We take a very conservative approach here, but it\'s worth it.
-# We move Makefile to Makefile.old here to avoid gnu make looping.
-Makefile : Makefile.PL $(CONFIGDEP)
- @echo "Makefile out-of-date with respect to $?"
- @echo "Cleaning current config before rebuilding Makefile..."
- -@$(RM_F) Makefile.old
- -@$(MV) Makefile Makefile.old
- -$(MAKE) -f Makefile.old clean $(DEV_NULL) || $(NOOP)
- $(PERL) "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" Makefile.PL
- @echo "==> Your Makefile has been rebuilt. <=="
- @echo "==> Please rerun the make command. <=="
- false
-
-# To change behavior to :: would be nice, but would break Tk b9.02
-# so you find such a warning below the dist target.
-#Makefile :: $(VERSION_FROM)
-# @echo "Warning: Makefile possibly out of date with $(VERSION_FROM)"
-
-
-# --- MakeMaker staticmake section:
-
-# --- MakeMaker makeaperl section ---
-MAP_TARGET = perl
-FULLPERL = /usr/bin/perl
-
-$(MAP_TARGET) :: static $(MAKE_APERL_FILE)
- $(MAKE) -f $(MAKE_APERL_FILE) $@
-
-$(MAKE_APERL_FILE) : $(FIRST_MAKEFILE)
- @echo Writing \"$(MAKE_APERL_FILE)\" for this $(MAP_TARGET)
- @$(PERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) \
- Makefile.PL DIR= \
- MAKEFILE=$(MAKE_APERL_FILE) LINKTYPE=static \
- MAKEAPERL=1 NORECURS=1 CCCDLFLAGS=
-
-
-# --- MakeMaker test section:
-
-TEST_VERBOSE=0
-TEST_TYPE=test_$(LINKTYPE)
-TEST_FILE = test.pl
-TEST_FILES =
-TESTDB_SW = -d
-
-testdb :: testdb_$(LINKTYPE)
-
-test :: $(TEST_TYPE)
-
-test_dynamic :: pure_all
- PERL_DL_NONLAZY=1 $(FULLPERL) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
-
-testdb_dynamic :: pure_all
- PERL_DL_NONLAZY=1 $(FULLPERL) $(TESTDB_SW) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
-
-test_ : test_dynamic
-
-test_static :: pure_all $(MAP_TARGET)
- PERL_DL_NONLAZY=1 ./$(MAP_TARGET) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
-
-testdb_static :: pure_all $(MAP_TARGET)
- PERL_DL_NONLAZY=1 ./$(MAP_TARGET) $(TESTDB_SW) -I$(INST_ARCHLIB) -I$(INST_LIB) -I$(PERL_ARCHLIB) -I$(PERL_LIB) $(TEST_FILE)
-
-
-
-# --- MakeMaker ppd section:
-# Creates a PPD (Perl Package Description) for a binary distribution.
-ppd:
- @$(PERL) -e "print qq{<SOFTPKG NAME=\"Crypt-Blowfish\" VERSION=\"2,09,0,0\">\n}. qq{\t<TITLE>Crypt-Blowfish</TITLE>\n}. qq{\t<ABSTRACT></ABSTRACT>\n}. qq{\t<AUTHOR></AUTHOR>\n}. qq{\t<IMPLEMENTATION>\n}. qq{\t\t<OS NAME=\"$(OSNAME)\" />\n}. qq{\t\t<ARCHITECTURE NAME=\"i386-linux\" />\n}. qq{\t\t<CODEBASE HREF=\"\" />\n}. qq{\t</IMPLEMENTATION>\n}. qq{</SOFTPKG>\n}" > Crypt-Blowfish.ppd
-
-# --- MakeMaker pm_to_blib section:
-
-pm_to_blib: $(TO_INST_PM)
- @$(PERL) "-I$(INST_ARCHLIB)" "-I$(INST_LIB)" \
- "-I$(PERL_ARCHLIB)" "-I$(PERL_LIB)" -MExtUtils::Install \
- -e "pm_to_blib({qw{$(PM_TO_BLIB)}},'$(INST_LIB)/auto')"
- @$(TOUCH) $@
-
-
-# --- MakeMaker selfdocument section:
-
-
-# --- MakeMaker postamble section:
-
-
-# End.
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile.PL b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile.PL
deleted file mode 100644
index 6acd3a8..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/Makefile.PL
+++ /dev/null
@@ -1,13 +0,0 @@
-#! /usr/local/bin/perl
-
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile being created.
-WriteMakefile(
- 'NAME' => 'Crypt::Blowfish',
- 'DISTNAME' => 'Crypt-Blowfish',
- 'VERSION_FROM' => 'Blowfish.pm',
- 'OBJECT' => 'Blowfish.o _blowfish.o',
- 'dist' => {COMPRESS=>'gzip', SUFFIX=>'gz'}
-);
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/README b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/README
deleted file mode 100644
index fdcc1dd..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/README
+++ /dev/null
@@ -1,173 +0,0 @@
-This is Crypt::Blowfish version 2.09, an XS-based implementation of the
-Blowfish cryptography algorithm designed by Bruce Schneier. It's designed
-to take full advantage of Crypt::CBC when desired. Blowfish keys may be
-up to 448 bits (56 bytes) long. This module builds on nearly every platform
-that Perl itself does (see Notes for exceptions).
-
-Prerequisites
--------------
-
-For the full test suite to run, Crypt::CBC, version 1.22 or higher
-is required (recommended is 1.25 or higher), however this module
-is not mandatory for standalone Blowfish use.
-
-Additionally, the author has Crypt::CBC_R available (email address
-below for details) which replaces the default 'RandomIV'
-initialization vector string that Crypt::CBC uses with a random
-string. (random to the limitations that /dev/urandom and friends are)
-
-Installing Crypt::Blowfish
---------------------------
-
-nothing unusual:
-
- 1. perl Makefile.PL
- 2. make
- 3. make test
- 4. make install
-
-Notes
------
-
-This module has been tested successfully against the following:
-Linux 2.0.X (x86)
-Linux 2.2.X (x86, PPC, Alpha, m68k)
-Linux 2.4.X (x86)
-Solaris 2.5.1 and 2.7 (SPARC)
-FreeBSD 3.3 and 3.4 (x86), 4.0 (alpha)
-HP-UX B.10.20
-DEC OSF 5.0
-AIX spbuild 3 4
-Win32 (NT4/SP5, using VC++5.0/VC++6.0)
-OpenVMS (DEC C V6.0-001 / Alpha V7.1-2 with MMK make utility)
-
-Perl 5.004_01, 5.004_04, 5.005_03, 5.6.0, and 5.6.1
-
-Please send other successful OS/platform combinations to:
-amused(a)pobox.com . Thanks.
-
-Patches for MacOS welcomed.
-
-Being an XS implimentation, Crypt::Blowfish is exceptionally faster
-than Blowfish_PP (a pure Perl implimentation). Internal testing
-displayed a difference of 400 times faster when doing complete
-cipher generation and encryption. Using a cached cipher resulted
-in 25 times faster than the pure Perl implimentation. (all machines
-idled prior to tests below)
-
-In the case where this module won't build for you, please try the
-Crypt::Blowfish_PP module - the Pure Perl implimentation.
-
-Thanks to Thomas Kratz for the Win32 fixup and VMS report.
-
-Performance
------------
-
-Typical results on a PII-400 Linux machine:
-Under Perl-5.005_03:
-Running standard mode speed tests.. encrypting with non-cached cipher
-5,000 cycles: 4 wallclock secs ( 3.92 usr + 0.03 sys = 3.95 CPU)
-
-Running standard mode speed tests.. decrypting with non-cached cipher
-5,000 cycles: 4 wallclock secs ( 3.96 usr + 0.01 sys = 3.97 CPU)
-
-Running standard mode speed tests.. encrypting with cached cipher
-10,000 cycles: 0 wallclock secs ( 0.22 usr + 0.00 sys = 0.22 CPU)
-
-Running standard mode speed tests.. decrypting with cached cipher
-10,000 cycles: 1 wallclock secs ( 0.21 usr + 0.00 sys = 0.21 CPU)
-
-
-Typical results from a 270Mhz UltraSPARC IIi (Ultra5 workstation)
-Under Perl-5.005_03
-Running standard mode speed tests.. encrypting with non-cached cipher
-5,000 cycles: 5 wallclock secs ( 4.05 usr + 0.11 sys = 4.16 CPU)
-
-Running standard mode speed tests.. decrypting with non-cached cipher
-5,000 cycles: 4 wallclock secs ( 4.06 usr + 0.12 sys = 4.18 CPU)
-
-Running standard mode speed tests.. encrypting with cached cipher
-10,000 cycles: 0 wallclock secs ( 0.60 usr + 0.00 sys = 0.60 CPU)
-
-Running standard mode speed tests.. decrypting with cached cipher
-10,000 cycles: 1 wallclock secs ( 0.63 usr + 0.00 sys = 0.63 CPU)
-
-
-Typical results from a PIII-550 Linux machine:
-Under Perl-5.005_03
-Running standard mode speed tests.. encrypting with non-cached cipher
-5,000 cycles: 3 wallclock secs ( 2.95 usr + 0.00 sys = 2.95 CPU)
-
-Running standard mode speed tests.. decrypting with non-cached cipher
-5,000 cycles: 3 wallclock secs ( 2.93 usr + 0.00 sys = 2.93 CPU)
-
-Running standard mode speed tests.. encrypting with cached cipher
-10,000 cycles: 0 wallclock secs ( 0.17 usr + 0.00 sys = 0.17 CPU)
-
-Running standard mode speed tests.. decrypting with cached cipher
-10,000 cycles: 0 wallclock secs ( 0.16 usr + 0.00 sys = 0.16 CPU)
-
-
-Typical results from AIX machine:
-Under Perl-5.004_01
-Running standard mode speed tests.. encrypting with non-cached cipher
-5,000 cycles: 13 secs (11.77 usr 0.08 sys = 11.85 cpu)
-
-Running standard mode speed tests.. decrypting with non-cached cipher
-5,000 cycles: 19 secs (11.98 usr 0.04 sys = 12.02 cpu)
-
-Running standard mode speed tests.. encrypting with cached cipher
-10,000 cycles: 2 secs ( 1.11 usr 0.00 sys = 1.11 cpu)
-
-Running standard mode speed tests.. decrypting with cached cipher
-10,000 cycles: 1 secs ( 1.04 usr 0.00 sys = 1.04 cpu)
-
-
-Typical results for Alpha PCA56 (533Mhz) Linux machine:
-Under Perl-5.005_03
-Running standard mode speed tests.. encrypting with non-cached cipher
-5,000 cycles: 3 wallclock secs ( 2.68 usr + 0.01 sys = 2.69 CPU)
-
-Running standard mode speed tests.. decrypting with non-cached cipher
-5,000 cycles: 3 wallclock secs ( 2.71 usr + 0.01 sys = 2.73 CPU)
-
-Running standard mode speed tests.. encrypting with cached cipher
-10,000 cycles: 0 wallclock secs ( 0.52 usr + 0.00 sys = 0.52 CPU)
-
-Running standard mode speed tests.. decrypting with cached cipher
-10,000 cycles: 1 wallclock secs ( 0.58 usr + 0.00 sys = 0.58 CPU)
-
-
-Typical results for m68k (33Mhz 68040) Linux machine:
-Under Perl-5.005_03
-Running standard mode speed tests.. encrypting with non-cached cipher
-5,000 cycles: 104 wallclock secs (97.26 usr + 2.50 sys = 99.76 CPU)
-
-Running standard mode speed tests.. decrypting with non-cached cipher
-5,000 cycles: 102 wallclock secs (97.37 usr + 1.77 sys = 99.14 CPU)
-
-Running standard mode speed tests.. encrypting with cached cipher
-10,000 cycles: 8 wallclock secs ( 7.20 usr + 0.09 sys = 7.29 CPU)
-
-Running standard mode speed tests.. decrypting with cached cipher
-10,000 cycles: 7 wallclock secs ( 7.37 usr + 0.04 sys = 7.41 CPU)
-
-
-Typical results for x86/PPro (dual 200Mhz PPro) Windows machine:
-Under Perl-5.005_02
-Running standard mode speed tests.. encrypting with non-cached cipher
-5,000 cycles: 8 wallclock secs ( 8.27 usr + 0.00 sys = 8.27 CPU)
-
-Running standard mode speed tests.. decrypting with non-cached cipher
-5,000 cycles: 9 wallclock secs ( 8.25 usr + 0.00 sys = 8.25 CPU)
-
-Running standard mode speed tests.. encrypting with cached cipher
-10,000 cycles: 0 wallclock secs ( 0.69 usr + 0.00 sys = 0.69 CPU)
-
-Running standard mode speed tests.. decrypting with cached cipher
-10,000 cycles: 1 wallclock secs ( 0.69 usr + 0.00 sys = 0.69 CPU)
-
-
-
-Dave Paris - W3Works, LLC
-<amused(a)pobox.com>
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/_blowfish.c b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/_blowfish.c
deleted file mode 100644
index 6ceb4cb..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/_blowfish.c
+++ /dev/null
@@ -1,478 +0,0 @@
-
-/*
- * blowfish.c : Source code for the Blowfish block cipher
- *
- * Part of the Python Cryptography Toolkit, version 1.0.0
- *
- * Copyright (C) 1995, A.M. Kuchling
- *
- * Distribute and use freely; there are no restrictions on further
- * dissemination and usage except those imposed by the laws of your
- * country of residence.
- *
- */
-
-/*************************************************************************/
-/* File: bf.c
- Blowfish cipher by Bruce Schneier,
- Code by Bryan Olson, based partly on Schneier's.
-*/
-
-
-/* Define IntU32 to be an unsigned in 32 bits long */
-typedef unsigned int IntU32 ;
-typedef unsigned char IntU8 ;
-#define NROUNDS 16
-
-
-
-/* Define IntP to be an integer which
- is the same size as a pointer. */
-typedef unsigned long IntP ;
-
-
-typedef struct
-{
- IntU32 p[2][NROUNDS+2],
- sbox[4][256] ;
-} BFkey_type ;
-
-/* File bfinit.h
- Data to initialize P and S in BlowFish.
-*/
-
-static IntU32 p_init[NROUNDS+2] =
-{
- 608135816UL, 2242054355UL, 320440878UL, 57701188UL,
- 2752067618UL, 698298832UL, 137296536UL, 3964562569UL,
- 1160258022UL, 953160567UL, 3193202383UL, 887688300UL,
- 3232508343UL, 3380367581UL, 1065670069UL, 3041331479UL,
- 2450970073UL, 2306472731UL
-} ;
-
-static IntU32 s_init[4][256] = {
- {3509652390UL, 2564797868UL, 805139163UL, 3491422135UL,
- 3101798381UL, 1780907670UL, 3128725573UL, 4046225305UL,
- 614570311UL, 3012652279UL, 134345442UL, 2240740374UL,
- 1667834072UL, 1901547113UL, 2757295779UL, 4103290238UL,
- 227898511UL, 1921955416UL, 1904987480UL, 2182433518UL,
- 2069144605UL, 3260701109UL, 2620446009UL, 720527379UL,
- 3318853667UL, 677414384UL, 3393288472UL, 3101374703UL,
- 2390351024UL, 1614419982UL, 1822297739UL, 2954791486UL,
- 3608508353UL, 3174124327UL, 2024746970UL, 1432378464UL,
- 3864339955UL, 2857741204UL, 1464375394UL, 1676153920UL,
- 1439316330UL, 715854006UL, 3033291828UL, 289532110UL,
- 2706671279UL, 2087905683UL, 3018724369UL, 1668267050UL,
- 732546397UL, 1947742710UL, 3462151702UL, 2609353502UL,
- 2950085171UL, 1814351708UL, 2050118529UL, 680887927UL,
- 999245976UL, 1800124847UL, 3300911131UL, 1713906067UL,
- 1641548236UL, 4213287313UL, 1216130144UL, 1575780402UL,
- 4018429277UL, 3917837745UL, 3693486850UL, 3949271944UL,
- 596196993UL, 3549867205UL, 258830323UL, 2213823033UL,
- 772490370UL, 2760122372UL, 1774776394UL, 2652871518UL,
- 566650946UL, 4142492826UL, 1728879713UL, 2882767088UL,
- 1783734482UL, 3629395816UL, 2517608232UL, 2874225571UL,
- 1861159788UL, 326777828UL, 3124490320UL, 2130389656UL,
- 2716951837UL, 967770486UL, 1724537150UL, 2185432712UL,
- 2364442137UL, 1164943284UL, 2105845187UL, 998989502UL,
- 3765401048UL, 2244026483UL, 1075463327UL, 1455516326UL,
- 1322494562UL, 910128902UL, 469688178UL, 1117454909UL,
- 936433444UL, 3490320968UL, 3675253459UL, 1240580251UL,
- 122909385UL, 2157517691UL, 634681816UL, 4142456567UL,
- 3825094682UL, 3061402683UL, 2540495037UL, 79693498UL,
- 3249098678UL, 1084186820UL, 1583128258UL, 426386531UL,
- 1761308591UL, 1047286709UL, 322548459UL, 995290223UL,
- 1845252383UL, 2603652396UL, 3431023940UL, 2942221577UL,
- 3202600964UL, 3727903485UL, 1712269319UL, 422464435UL,
- 3234572375UL, 1170764815UL, 3523960633UL, 3117677531UL,
- 1434042557UL, 442511882UL, 3600875718UL, 1076654713UL,
- 1738483198UL, 4213154764UL, 2393238008UL, 3677496056UL,
- 1014306527UL, 4251020053UL, 793779912UL, 2902807211UL,
- 842905082UL, 4246964064UL, 1395751752UL, 1040244610UL,
- 2656851899UL, 3396308128UL, 445077038UL, 3742853595UL,
- 3577915638UL, 679411651UL, 2892444358UL, 2354009459UL,
- 1767581616UL, 3150600392UL, 3791627101UL, 3102740896UL,
- 284835224UL, 4246832056UL, 1258075500UL, 768725851UL,
- 2589189241UL, 3069724005UL, 3532540348UL, 1274779536UL,
- 3789419226UL, 2764799539UL, 1660621633UL, 3471099624UL,
- 4011903706UL, 913787905UL, 3497959166UL, 737222580UL,
- 2514213453UL, 2928710040UL, 3937242737UL, 1804850592UL,
- 3499020752UL, 2949064160UL, 2386320175UL, 2390070455UL,
- 2415321851UL, 4061277028UL, 2290661394UL, 2416832540UL,
- 1336762016UL, 1754252060UL, 3520065937UL, 3014181293UL,
- 791618072UL, 3188594551UL, 3933548030UL, 2332172193UL,
- 3852520463UL, 3043980520UL, 413987798UL, 3465142937UL,
- 3030929376UL, 4245938359UL, 2093235073UL, 3534596313UL,
- 375366246UL, 2157278981UL, 2479649556UL, 555357303UL,
- 3870105701UL, 2008414854UL, 3344188149UL, 4221384143UL,
- 3956125452UL, 2067696032UL, 3594591187UL, 2921233993UL,
- 2428461UL, 544322398UL, 577241275UL, 1471733935UL,
- 610547355UL, 4027169054UL, 1432588573UL, 1507829418UL,
- 2025931657UL, 3646575487UL, 545086370UL, 48609733UL,
- 2200306550UL, 1653985193UL, 298326376UL, 1316178497UL,
- 3007786442UL, 2064951626UL, 458293330UL, 2589141269UL,
- 3591329599UL, 3164325604UL, 727753846UL, 2179363840UL,
- 146436021UL, 1461446943UL, 4069977195UL, 705550613UL,
- 3059967265UL, 3887724982UL, 4281599278UL, 3313849956UL,
- 1404054877UL, 2845806497UL, 146425753UL, 1854211946UL},
-
-{ 1266315497UL, 3048417604UL, 3681880366UL, 3289982499UL,
- 2909710000UL, 1235738493UL, 2632868024UL, 2414719590UL,
- 3970600049UL, 1771706367UL, 1449415276UL, 3266420449UL,
- 422970021UL, 1963543593UL, 2690192192UL, 3826793022UL,
- 1062508698UL, 1531092325UL, 1804592342UL, 2583117782UL,
- 2714934279UL, 4024971509UL, 1294809318UL, 4028980673UL,
- 1289560198UL, 2221992742UL, 1669523910UL, 35572830UL,
- 157838143UL, 1052438473UL, 1016535060UL, 1802137761UL,
- 1753167236UL, 1386275462UL, 3080475397UL, 2857371447UL,
- 1040679964UL, 2145300060UL, 2390574316UL, 1461121720UL,
- 2956646967UL, 4031777805UL, 4028374788UL, 33600511UL,
- 2920084762UL, 1018524850UL, 629373528UL, 3691585981UL,
- 3515945977UL, 2091462646UL, 2486323059UL, 586499841UL,
- 988145025UL, 935516892UL, 3367335476UL, 2599673255UL,
- 2839830854UL, 265290510UL, 3972581182UL, 2759138881UL,
- 3795373465UL, 1005194799UL, 847297441UL, 406762289UL,
- 1314163512UL, 1332590856UL, 1866599683UL, 4127851711UL,
- 750260880UL, 613907577UL, 1450815602UL, 3165620655UL,
- 3734664991UL, 3650291728UL, 3012275730UL, 3704569646UL,
- 1427272223UL, 778793252UL, 1343938022UL, 2676280711UL,
- 2052605720UL, 1946737175UL, 3164576444UL, 3914038668UL,
- 3967478842UL, 3682934266UL, 1661551462UL, 3294938066UL,
- 4011595847UL, 840292616UL, 3712170807UL, 616741398UL,
- 312560963UL, 711312465UL, 1351876610UL, 322626781UL,
- 1910503582UL, 271666773UL, 2175563734UL, 1594956187UL,
- 70604529UL, 3617834859UL, 1007753275UL, 1495573769UL,
- 4069517037UL, 2549218298UL, 2663038764UL, 504708206UL,
- 2263041392UL, 3941167025UL, 2249088522UL, 1514023603UL,
- 1998579484UL, 1312622330UL, 694541497UL, 2582060303UL,
- 2151582166UL, 1382467621UL, 776784248UL, 2618340202UL,
- 3323268794UL, 2497899128UL, 2784771155UL, 503983604UL,
- 4076293799UL, 907881277UL, 423175695UL, 432175456UL,
- 1378068232UL, 4145222326UL, 3954048622UL, 3938656102UL,
- 3820766613UL, 2793130115UL, 2977904593UL, 26017576UL,
- 3274890735UL, 3194772133UL, 1700274565UL, 1756076034UL,
- 4006520079UL, 3677328699UL, 720338349UL, 1533947780UL,
- 354530856UL, 688349552UL, 3973924725UL, 1637815568UL,
- 332179504UL, 3949051286UL, 53804574UL, 2852348879UL,
- 3044236432UL, 1282449977UL, 3583942155UL, 3416972820UL,
- 4006381244UL, 1617046695UL, 2628476075UL, 3002303598UL,
- 1686838959UL, 431878346UL, 2686675385UL, 1700445008UL,
- 1080580658UL, 1009431731UL, 832498133UL, 3223435511UL,
- 2605976345UL, 2271191193UL, 2516031870UL, 1648197032UL,
- 4164389018UL, 2548247927UL, 300782431UL, 375919233UL,
- 238389289UL, 3353747414UL, 2531188641UL, 2019080857UL,
- 1475708069UL, 455242339UL, 2609103871UL, 448939670UL,
- 3451063019UL, 1395535956UL, 2413381860UL, 1841049896UL,
- 1491858159UL, 885456874UL, 4264095073UL, 4001119347UL,
- 1565136089UL, 3898914787UL, 1108368660UL, 540939232UL,
- 1173283510UL, 2745871338UL, 3681308437UL, 4207628240UL,
- 3343053890UL, 4016749493UL, 1699691293UL, 1103962373UL,
- 3625875870UL, 2256883143UL, 3830138730UL, 1031889488UL,
- 3479347698UL, 1535977030UL, 4236805024UL, 3251091107UL,
- 2132092099UL, 1774941330UL, 1199868427UL, 1452454533UL,
- 157007616UL, 2904115357UL, 342012276UL, 595725824UL,
- 1480756522UL, 206960106UL, 497939518UL, 591360097UL,
- 863170706UL, 2375253569UL, 3596610801UL, 1814182875UL,
- 2094937945UL, 3421402208UL, 1082520231UL, 3463918190UL,
- 2785509508UL, 435703966UL, 3908032597UL, 1641649973UL,
- 2842273706UL, 3305899714UL, 1510255612UL, 2148256476UL,
- 2655287854UL, 3276092548UL, 4258621189UL, 236887753UL,
- 3681803219UL, 274041037UL, 1734335097UL, 3815195456UL,
- 3317970021UL, 1899903192UL, 1026095262UL, 4050517792UL,
- 356393447UL, 2410691914UL, 3873677099UL, 3682840055UL},
-
-{ 3913112168UL, 2491498743UL, 4132185628UL, 2489919796UL,
- 1091903735UL, 1979897079UL, 3170134830UL, 3567386728UL,
- 3557303409UL, 857797738UL, 1136121015UL, 1342202287UL,
- 507115054UL, 2535736646UL, 337727348UL, 3213592640UL,
- 1301675037UL, 2528481711UL, 1895095763UL, 1721773893UL,
- 3216771564UL, 62756741UL, 2142006736UL, 835421444UL,
- 2531993523UL, 1442658625UL, 3659876326UL, 2882144922UL,
- 676362277UL, 1392781812UL, 170690266UL, 3921047035UL,
- 1759253602UL, 3611846912UL, 1745797284UL, 664899054UL,
- 1329594018UL, 3901205900UL, 3045908486UL, 2062866102UL,
- 2865634940UL, 3543621612UL, 3464012697UL, 1080764994UL,
- 553557557UL, 3656615353UL, 3996768171UL, 991055499UL,
- 499776247UL, 1265440854UL, 648242737UL, 3940784050UL,
- 980351604UL, 3713745714UL, 1749149687UL, 3396870395UL,
- 4211799374UL, 3640570775UL, 1161844396UL, 3125318951UL,
- 1431517754UL, 545492359UL, 4268468663UL, 3499529547UL,
- 1437099964UL, 2702547544UL, 3433638243UL, 2581715763UL,
- 2787789398UL, 1060185593UL, 1593081372UL, 2418618748UL,
- 4260947970UL, 69676912UL, 2159744348UL, 86519011UL,
- 2512459080UL, 3838209314UL, 1220612927UL, 3339683548UL,
- 133810670UL, 1090789135UL, 1078426020UL, 1569222167UL,
- 845107691UL, 3583754449UL, 4072456591UL, 1091646820UL,
- 628848692UL, 1613405280UL, 3757631651UL, 526609435UL,
- 236106946UL, 48312990UL, 2942717905UL, 3402727701UL,
- 1797494240UL, 859738849UL, 992217954UL, 4005476642UL,
- 2243076622UL, 3870952857UL, 3732016268UL, 765654824UL,
- 3490871365UL, 2511836413UL, 1685915746UL, 3888969200UL,
- 1414112111UL, 2273134842UL, 3281911079UL, 4080962846UL,
- 172450625UL, 2569994100UL, 980381355UL, 4109958455UL,
- 2819808352UL, 2716589560UL, 2568741196UL, 3681446669UL,
- 3329971472UL, 1835478071UL, 660984891UL, 3704678404UL,
- 4045999559UL, 3422617507UL, 3040415634UL, 1762651403UL,
- 1719377915UL, 3470491036UL, 2693910283UL, 3642056355UL,
- 3138596744UL, 1364962596UL, 2073328063UL, 1983633131UL,
- 926494387UL, 3423689081UL, 2150032023UL, 4096667949UL,
- 1749200295UL, 3328846651UL, 309677260UL, 2016342300UL,
- 1779581495UL, 3079819751UL, 111262694UL, 1274766160UL,
- 443224088UL, 298511866UL, 1025883608UL, 3806446537UL,
- 1145181785UL, 168956806UL, 3641502830UL, 3584813610UL,
- 1689216846UL, 3666258015UL, 3200248200UL, 1692713982UL,
- 2646376535UL, 4042768518UL, 1618508792UL, 1610833997UL,
- 3523052358UL, 4130873264UL, 2001055236UL, 3610705100UL,
- 2202168115UL, 4028541809UL, 2961195399UL, 1006657119UL,
- 2006996926UL, 3186142756UL, 1430667929UL, 3210227297UL,
- 1314452623UL, 4074634658UL, 4101304120UL, 2273951170UL,
- 1399257539UL, 3367210612UL, 3027628629UL, 1190975929UL,
- 2062231137UL, 2333990788UL, 2221543033UL, 2438960610UL,
- 1181637006UL, 548689776UL, 2362791313UL, 3372408396UL,
- 3104550113UL, 3145860560UL, 296247880UL, 1970579870UL,
- 3078560182UL, 3769228297UL, 1714227617UL, 3291629107UL,
- 3898220290UL, 166772364UL, 1251581989UL, 493813264UL,
- 448347421UL, 195405023UL, 2709975567UL, 677966185UL,
- 3703036547UL, 1463355134UL, 2715995803UL, 1338867538UL,
- 1343315457UL, 2802222074UL, 2684532164UL, 233230375UL,
- 2599980071UL, 2000651841UL, 3277868038UL, 1638401717UL,
- 4028070440UL, 3237316320UL, 6314154UL, 819756386UL,
- 300326615UL, 590932579UL, 1405279636UL, 3267499572UL,
- 3150704214UL, 2428286686UL, 3959192993UL, 3461946742UL,
- 1862657033UL, 1266418056UL, 963775037UL, 2089974820UL,
- 2263052895UL, 1917689273UL, 448879540UL, 3550394620UL,
- 3981727096UL, 150775221UL, 3627908307UL, 1303187396UL,
- 508620638UL, 2975983352UL, 2726630617UL, 1817252668UL,
- 1876281319UL, 1457606340UL, 908771278UL, 3720792119UL,
- 3617206836UL, 2455994898UL, 1729034894UL, 1080033504UL},
-
-{ 976866871UL, 3556439503UL, 2881648439UL, 1522871579UL,
- 1555064734UL, 1336096578UL, 3548522304UL, 2579274686UL,
- 3574697629UL, 3205460757UL, 3593280638UL, 3338716283UL,
- 3079412587UL, 564236357UL, 2993598910UL, 1781952180UL,
- 1464380207UL, 3163844217UL, 3332601554UL, 1699332808UL,
- 1393555694UL, 1183702653UL, 3581086237UL, 1288719814UL,
- 691649499UL, 2847557200UL, 2895455976UL, 3193889540UL,
- 2717570544UL, 1781354906UL, 1676643554UL, 2592534050UL,
- 3230253752UL, 1126444790UL, 2770207658UL, 2633158820UL,
- 2210423226UL, 2615765581UL, 2414155088UL, 3127139286UL,
- 673620729UL, 2805611233UL, 1269405062UL, 4015350505UL,
- 3341807571UL, 4149409754UL, 1057255273UL, 2012875353UL,
- 2162469141UL, 2276492801UL, 2601117357UL, 993977747UL,
- 3918593370UL, 2654263191UL, 753973209UL, 36408145UL,
- 2530585658UL, 25011837UL, 3520020182UL, 2088578344UL,
- 530523599UL, 2918365339UL, 1524020338UL, 1518925132UL,
- 3760827505UL, 3759777254UL, 1202760957UL, 3985898139UL,
- 3906192525UL, 674977740UL, 4174734889UL, 2031300136UL,
- 2019492241UL, 3983892565UL, 4153806404UL, 3822280332UL,
- 352677332UL, 2297720250UL, 60907813UL, 90501309UL,
- 3286998549UL, 1016092578UL, 2535922412UL, 2839152426UL,
- 457141659UL, 509813237UL, 4120667899UL, 652014361UL,
- 1966332200UL, 2975202805UL, 55981186UL, 2327461051UL,
- 676427537UL, 3255491064UL, 2882294119UL, 3433927263UL,
- 1307055953UL, 942726286UL, 933058658UL, 2468411793UL,
- 3933900994UL, 4215176142UL, 1361170020UL, 2001714738UL,
- 2830558078UL, 3274259782UL, 1222529897UL, 1679025792UL,
- 2729314320UL, 3714953764UL, 1770335741UL, 151462246UL,
- 3013232138UL, 1682292957UL, 1483529935UL, 471910574UL,
- 1539241949UL, 458788160UL, 3436315007UL, 1807016891UL,
- 3718408830UL, 978976581UL, 1043663428UL, 3165965781UL,
- 1927990952UL, 4200891579UL, 2372276910UL, 3208408903UL,
- 3533431907UL, 1412390302UL, 2931980059UL, 4132332400UL,
- 1947078029UL, 3881505623UL, 4168226417UL, 2941484381UL,
- 1077988104UL, 1320477388UL, 886195818UL, 18198404UL,
- 3786409000UL, 2509781533UL, 112762804UL, 3463356488UL,
- 1866414978UL, 891333506UL, 18488651UL, 661792760UL,
- 1628790961UL, 3885187036UL, 3141171499UL, 876946877UL,
- 2693282273UL, 1372485963UL, 791857591UL, 2686433993UL,
- 3759982718UL, 3167212022UL, 3472953795UL, 2716379847UL,
- 445679433UL, 3561995674UL, 3504004811UL, 3574258232UL,
- 54117162UL, 3331405415UL, 2381918588UL, 3769707343UL,
- 4154350007UL, 1140177722UL, 4074052095UL, 668550556UL,
- 3214352940UL, 367459370UL, 261225585UL, 2610173221UL,
- 4209349473UL, 3468074219UL, 3265815641UL, 314222801UL,
- 3066103646UL, 3808782860UL, 282218597UL, 3406013506UL,
- 3773591054UL, 379116347UL, 1285071038UL, 846784868UL,
- 2669647154UL, 3771962079UL, 3550491691UL, 2305946142UL,
- 453669953UL, 1268987020UL, 3317592352UL, 3279303384UL,
- 3744833421UL, 2610507566UL, 3859509063UL, 266596637UL,
- 3847019092UL, 517658769UL, 3462560207UL, 3443424879UL,
- 370717030UL, 4247526661UL, 2224018117UL, 4143653529UL,
- 4112773975UL, 2788324899UL, 2477274417UL, 1456262402UL,
- 2901442914UL, 1517677493UL, 1846949527UL, 2295493580UL,
- 3734397586UL, 2176403920UL, 1280348187UL, 1908823572UL,
- 3871786941UL, 846861322UL, 1172426758UL, 3287448474UL,
- 3383383037UL, 1655181056UL, 3139813346UL, 901632758UL,
- 1897031941UL, 2986607138UL, 3066810236UL, 3447102507UL,
- 1393639104UL, 373351379UL, 950779232UL, 625454576UL,
- 3124240540UL, 4148612726UL, 2007998917UL, 544563296UL,
- 2244738638UL, 2330496472UL, 2058025392UL, 1291430526UL,
- 424198748UL, 50039436UL, 29584100UL, 3605783033UL,
- 2429876329UL, 2791104160UL, 1057563949UL, 3255363231UL,
- 3075367218UL, 3463963227UL, 1469046755UL, 985887462UL}
-} ;
-
-/* sLb(s,n) allows us to subsript s by byte offsets, which
- allows us to avoid a subscript scaling.
-*/
-#define sub(s,n) *((IntU32 *)((IntP)s+(n)))
-
-/* Below is one BlowFish round including the F function
-*/
-#define round(l,r,n) \
- l ^= P[n]; \
- r ^= ( (sub(S[0],l>>22 & 0x3fc) + sub(S[1],l>>14 & 0x3fc)) \
- ^ sub(S[2],l>>6 & 0x3fc) ) +S[3][l & 0xff]
-
-
-
-/* This function requires the block to be two 32 bit integers, in
-whatever endian form the machine uses. On little endian machines
-use crypt_8bytes() on user data. make_bfkey should call crypt_block
-on either endian machine. Pass direction 0 to encrypt, 1 to decrypt.
-*/
-static void crypt_block(block, bfkey, direction)
- IntU32 block[2];
- BFkey_type *bfkey;
- short direction;
-{
- register IntU32 left, right,
- (*S)[256],
- *P ;
-
- left = block[0] ; right = block[1] ;
-
- S = bfkey->sbox ;
- P = bfkey->p[direction] ;
-
- round( left, right, 0 ) ; round( right, left, 1 ) ;
- round( left, right, 2 ) ; round( right, left, 3 ) ;
- round( left, right, 4 ) ; round( right, left, 5 ) ;
- round( left, right, 6 ) ; round( right, left, 7 ) ;
- round( left, right, 8 ) ; round( right, left, 9 ) ;
- round( left, right, 10 ) ; round( right, left, 11 ) ;
- round( left, right, 12 ) ; round( right, left, 13 ) ;
- round( left, right, 14 ) ; round( right, left, 15 ) ;
-
- left = left ^ P[NROUNDS] ;
- right = right ^ P[NROUNDS+1] ;
- block[0] = right ;
- block[1] = left ;
-}
-
-/* The following should be allignment and endian independent.
- I have not tested it on a little-endian machine.
- It takes the input block from source, and puts the output
- in dest. They can be the same. It takes the same direction
- parameter as crypt_block().
-*/
-void
-blowfish_crypt_8bytes(source, dest, bfkey, direction)
- IntU8 *source, *dest;
- BFkey_type *bfkey;
- short direction;
-{
- IntU32 block[2] ;
-
- block[0] = source[3] | source[2]<<8 | source[1]<<16 | source[0]<<24 ;
- block[1] = source[7] | source[6]<<8 | source[5]<<16 | source[4]<<24 ;
-
- crypt_block( block, bfkey, direction ) ;
-
- dest[0]= block[0]>>24 ;
- dest[1]= block[0]>>16 & 0xff ;
- dest[2]= block[0]>>8 & 0xff ;
- dest[3]= block[0] & 0xff ;
- dest[4]= block[1]>>24 ;
- dest[5]= block[1]>>16 & 0xff ;
- dest[6]= block[1]>> 8 & 0xff ;
- dest[7]= block[1] & 0xff ;
-}
-
-/* make_bfkey() takes the address of the key data as a char*,
- and the length of the key in bytes. It generates and returns
- a pointer to an object of BFkey_type, which can be passed
- to the crypt functions. It does some simple testing of the
- init data and crypt routine, and returns 0 on error.
-*/
-int
-blowfish_make_bfkey(key_string, keylength, bfkey)
- unsigned char *key_string;
- int keylength;
- BFkey_type *bfkey;
-{
- int i, j, k ;
- IntU32 dspace[2],
- checksum=0 ;
-
- /* Copy constant initial data to P vector */
- for( i=0 ; i<NROUNDS+2 ; ++i )
- {
- bfkey->p[0][i] = p_init[i] ;
- bfkey->p[1][NROUNDS+1-i] = p_init[i] ;
- checksum = (checksum<<1 | checksum>>31)+p_init[i] ;
- }
-
- /* Copy constant initial data to sboxes */
- for( i=0 ; i<4 ; ++i )
- for( j=0 ; j<256 ; ++j )
- {
- bfkey->sbox[i][j] = s_init[i][j] ;
- checksum = ((checksum*13)<<11 | (checksum*13)>>21)
- + s_init[i][j] ;
- }
-
- /* Test init data. */
- if( checksum != 0x55861a61 )
- {
- strcpy((char *)bfkey, "Bad initialization data");
- return -1;
- }
-
- dspace[0] = 0 ;
- dspace[1] = 0 ;
-
- /* Test the crypt_block() routine. */
- for( i=0 ; i<10 ; ++i )
- crypt_block( dspace, bfkey, 0 ) ;
- checksum = dspace[0] ;
- for( i=0 ; i<10 ; ++i )
- crypt_block( dspace, bfkey, 1 ) ;
- if( (checksum!=0xaafe4ebd) || dspace[0] || dspace[1] )
- {
- strcpy((char *)bfkey, "Error in crypt_block routine");
- return -1;
- }
-
-
- /* Xor key string into encryption key vector */
- j = 0 ;
- for (i=0 ; i<NROUNDS+2 ; ++i)
- {
- IntU32 data;
- data = 0 ;
- for (k=0 ; k<4 ; ++k )
- data = (data << 8) | key_string[j++ % keylength];
- (bfkey->p)[0][i] ^= data;
- }
-
-
- for (i = 0 ; i<NROUNDS+2 ; i+=2)
- {
- crypt_block( dspace, bfkey, 0 ) ;
- bfkey->p[0][i] = dspace[0] ;
- bfkey->p[1][NROUNDS+1-i] = dspace[0] ;
- bfkey->p[0][i+1] = dspace[1] ;
- bfkey->p[1][NROUNDS-i] = dspace[1] ;
- }
-
- for ( i=0 ; i<4 ; ++i )
- for ( j=0 ; j<256 ; j+=2 )
- {
- crypt_block( dspace, bfkey, 0 ) ;
- bfkey->sbox[i][j] = dspace[0] ;
- bfkey->sbox[i][j+1] = dspace[1] ;
- }
-
- return 0;
-}
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/arch/auto/Crypt/Blowfish/.exists b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/arch/auto/Crypt/Blowfish/.exists
deleted file mode 100644
index e69de29..0000000
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/arch/auto/Crypt/Blowfish/Blowfish.bs b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/arch/auto/Crypt/Blowfish/Blowfish.bs
deleted file mode 100644
index e69de29..0000000
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/Crypt/.exists b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/Crypt/.exists
deleted file mode 100644
index e69de29..0000000
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/Crypt/Blowfish.pm b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/Crypt/Blowfish.pm
deleted file mode 100644
index 9295a5a..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/Crypt/Blowfish.pm
+++ /dev/null
@@ -1,207 +0,0 @@
-package Crypt::Blowfish;
-
-require Exporter;
-require DynaLoader;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-
-@ISA = qw(Exporter DynaLoader);
-# @ISA = qw(Exporter DynaLoader Crypt::BlockCipher);
-
-# Items to export into callers namespace by default
-@EXPORT = qw();
-
-# Other items we are prepared to export if requested
-@EXPORT_OK = qw(
- blocksize keysize min_keysize max_keysize
- new encrypt decrypt
-);
-
-$VERSION = '2.09';
-bootstrap Crypt::Blowfish $VERSION;
-
-use strict;
-use Carp;
-
-sub usage
-{
- my ($package, $filename, $line, $subr) = caller(1);
- $Carp::CarpLevel = 2;
- croak "Usage: $subr(@_)";
-}
-
-
-sub blocksize { 8; } # /* byte my shiny metal.. */
-sub keysize { 0; } # /* we'll leave this at 8 .. for now. expect change. */
-sub min_keysize { 8; }
-sub max_keysize { 56; }
-
-sub new
-{
- usage("new Blowfish key") unless @_ == 2;
-
- my $type = shift; my $self = {}; bless $self, $type;
-
- $self->{'ks'} = Crypt::Blowfish::init(shift);
-
- $self;
-}
-
-sub encrypt
-{
- usage("encrypt data[8 bytes]") unless @_ == 2;
-
- my $self = shift;
- my $data = shift;
-
- Crypt::Blowfish::crypt($data, $data, $self->{'ks'}, 0);
-
- $data;
-}
-
-sub decrypt
-{
- usage("decrypt data[8 bytes]") unless @_ == 2;
-
- my $self = shift;
- my $data = shift;
-
- Crypt::Blowfish::crypt($data, $data, $self->{'ks'}, 1);
-
- $data;
-}
-
-1;
-
-__END__
-#
-# Parts Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
-# New Parts Copyright (C) 2000, 2001 W3Works, LLC (http://www.w3works.com/)
-# All rights reserved.
-#
-
-=head1 NAME
-
-Crypt::Blowfish - Perl Blowfish encryption module
-
-=head1 SYNOPSIS
-
- use Crypt::Blowfish;
- my $cipher = new Crypt::Blowfish $key;
- my $ciphertext = $cipher->encrypt($plaintext);
- my $plaintext = $cipher->decrypt($ciphertext);
-
-=head1 DESCRIPTION
-
-Blowfish is capable of strong encryption and can use key sizes up
-to 56 bytes (a 448 bit key). You're encouraged to take advantage
-of the full key size to ensure the strongest encryption possible
-from this module.
-
-Crypt::Blowfish has the following methods:
-
-=over 4
-
- blocksize()
- keysize()
- encrypt()
- decrypt()
-
-=back
-
-=head1 FUNCTIONS
-
-=over 4
-
-=item blocksize
-
-Returns the size (in bytes) of the block cipher.
-
-Crypt::Blowfish doesn't return a key size due to its ability
-to use variable-length keys. (well, more accurately, it won't
-as of 2.09 .. for now, it does. expect that to change)
-
-=item new
-
- my $cipher = new Crypt::Blowfish $key;
-
-This creates a new Crypt::Blowfish BlockCipher object, using $key,
-where $key is a key of C<keysize()> bytes (minimum of eight bytes).
-
-=item encrypt
-
- my $cipher = new Crypt::Blowfish $key;
- my $ciphertext = $cipher->encrypt($plaintext);
-
-This function encrypts $plaintext and returns the $ciphertext
-where $plaintext and $ciphertext must be of C<blocksize()> bytes.
-(hint: Blowfish is an 8 byte block cipher)
-
-=item decrypt
-
- my $cipher = new Crypt::Blowfish $key;
- my $plaintext = $cipher->decrypt($ciphertext);
-
-This function decrypts $ciphertext and returns the $plaintext
-where $plaintext and $ciphertext must be of C<blocksize()> bytes.
-(hint: see previous hint)
-
-=back
-
-=head1 EXAMPLE
-
- my $key = pack("H16", "0123456789ABCDEF"); # min. 8 bytes
- my $cipher = new Crypt::Blowfish $key;
- my $ciphertext = $cipher->encrypt("plaintex"); # SEE NOTES
- print unpack("H16", $ciphertext), "\n";
-
-=head1 PLATFORMS
-
- Please see the README document for platforms and performance
- tests.
-
-=head1 NOTES
-
-The module is capable of being used with Crypt::CBC. You're
-encouraged to read the perldoc for Crypt::CBC if you intend to
-use this module for Cipher Block Chaining modes. In fact, if
-you have any intentions of encrypting more than eight bytes of
-data with this, or any other block cipher, you're going to need
-B<some> type of block chaining help. Crypt::CBC tends to be
-very good at this. If you're not going to encrypt more than
-eight bytes, your data B<must> be B<exactly> eight bytes long.
-If need be, do your own padding. "\0" as a null byte is perfectly
-valid to use for this. Additionally, the current maintainer for
-Crypt::Blowfish may or may not release Crypt::CBC_R which
-replaces the default 'RandomIV' initialization vector in
-Crypt::CBC with a random initialization vector. (to the limits
-of /dev/urandom and associates) In either case, please email
-amused(a)pobox.com for Crypt::CBC_R.
-
-=head1 SEE ALSO
-
-Crypt::CBC,
-Crypt::DES,
-Crypt::IDEA
-
-Bruce Schneier, I<Applied Cryptography>, 1995, Second Edition,
-published by John Wiley & Sons, Inc.
-
-=head1 COPYRIGHT
-
-The implementation of the Blowfish algorithm was developed by,
-and is copyright of, A.M. Kuchling.
-
-Other parts of the perl extension and module are
-copyright of Systemics Ltd ( http://www.systemics.com/ ).
-
-Code revisions, updates, and standalone release are copyright
-1999-2001 W3Works, LLC.
-
-=head1 AUTHOR
-
-Original algorithm, Bruce Shneier. Original implementation, A.M.
-Kuchling. Original Perl implementation, Systemics Ltd. Current
-maintenance by W3Works, LLC.
-
-Current revision and maintainer: Dave Paris <amused(a)pobox.com>
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/auto/Crypt/Blowfish/.exists b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/lib/auto/Crypt/Blowfish/.exists
deleted file mode 100644
index e69de29..0000000
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/man3/.exists b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/man3/.exists
deleted file mode 100644
index e69de29..0000000
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/man3/Crypt::Blowfish.3 b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/man3/Crypt::Blowfish.3
deleted file mode 100644
index 84ca903..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blib/man3/Crypt::Blowfish.3
+++ /dev/null
@@ -1,330 +0,0 @@
-.rn '' }`
-''' $RCSfile: Crypt::Blowfish.3,v $$Revision: 1.1.1.1 $$Date: 2002-03-08 21:12:33 $
-'''
-''' $Log: not supported by cvs2svn $
-'''
-.de Sh
-.br
-.if t .Sp
-.ne 5
-.PP
-\fB\\$1\fR
-.PP
-..
-.de Sp
-.if t .sp .5v
-.if n .sp
-..
-.de Ip
-.br
-.ie \\n(.$>=3 .ne \\$3
-.el .ne 3
-.IP "\\$1" \\$2
-..
-.de Vb
-.ft CW
-.nf
-.ne \\$1
-..
-.de Ve
-.ft R
-
-.fi
-..
-'''
-'''
-''' Set up \*(-- to give an unbreakable dash;
-''' string Tr holds user defined translation string.
-''' Bell System Logo is used as a dummy character.
-'''
-.tr \(*W-|\(bv\*(Tr
-.ie n \{\
-.ds -- \(*W-
-.ds PI pi
-.if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-.if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
-.ds L" ""
-.ds R" ""
-''' \*(M", \*(S", \*(N" and \*(T" are the equivalent of
-''' \*(L" and \*(R", except that they are used on ".xx" lines,
-''' such as .IP and .SH, which do another additional levels of
-''' double-quote interpretation
-.ds M" """
-.ds S" """
-.ds N" """""
-.ds T" """""
-.ds L' '
-.ds R' '
-.ds M' '
-.ds S' '
-.ds N' '
-.ds T' '
-'br\}
-.el\{\
-.ds -- \(em\|
-.tr \*(Tr
-.ds L" ``
-.ds R" ''
-.ds M" ``
-.ds S" ''
-.ds N" ``
-.ds T" ''
-.ds L' `
-.ds R' '
-.ds M' `
-.ds S' '
-.ds N' `
-.ds T' '
-.ds PI \(*p
-'br\}
-.\" If the F register is turned on, we'll generate
-.\" index entries out stderr for the following things:
-.\" TH Title
-.\" SH Header
-.\" Sh Subsection
-.\" Ip Item
-.\" X<> Xref (embedded
-.\" Of course, you have to process the output yourself
-.\" in some meaninful fashion.
-.if \nF \{
-.de IX
-.tm Index:\\$1\t\\n%\t"\\$2"
-..
-.nr % 0
-.rr F
-.\}
-.TH Blowfish 3 "perl 5.005, patch 03" "12/Nov/2001" "User Contributed Perl Documentation"
-.UC
-.if n .hy 0
-.if n .na
-.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
-.de CQ \" put $1 in typewriter font
-.ft CW
-'if n "\c
-'if t \\&\\$1\c
-'if n \\&\\$1\c
-'if n \&"
-\\&\\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-'.ft R
-..
-.\" @(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2
-. \" AM - accent mark definitions
-.bd B 3
-. \" fudge factors for nroff and troff
-.if n \{\
-. ds #H 0
-. ds #V .8m
-. ds #F .3m
-. ds #[ \f1
-. ds #] \fP
-.\}
-.if t \{\
-. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
-. ds #V .6m
-. ds #F 0
-. ds #[ \&
-. ds #] \&
-.\}
-. \" simple accents for nroff and troff
-.if n \{\
-. ds ' \&
-. ds ` \&
-. ds ^ \&
-. ds , \&
-. ds ~ ~
-. ds ? ?
-. ds ! !
-. ds /
-. ds q
-.\}
-.if t \{\
-. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
-. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
-. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
-. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
-. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
-. ds ? \s-2c\h'-\w'c'u*7/10'\u\h'\*(#H'\zi\d\s+2\h'\w'c'u*8/10'
-. ds ! \s-2\(or\s+2\h'-\w'\(or'u'\v'-.8m'.\v'.8m'
-. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
-. ds q o\h'-\w'o'u*8/10'\s-4\v'.4m'\z\(*i\v'-.4m'\s+4\h'\w'o'u*8/10'
-.\}
-. \" troff and (daisy-wheel) nroff accents
-.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
-.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
-.ds v \\k:\h'-(\\n(.wu*9/10-\*(#H)'\v'-\*(#V'\*(#[\s-4v\s0\v'\*(#V'\h'|\\n:u'\*(#]
-.ds _ \\k:\h'-(\\n(.wu*9/10-\*(#H+(\*(#F*2/3))'\v'-.4m'\z\(hy\v'.4m'\h'|\\n:u'
-.ds . \\k:\h'-(\\n(.wu*8/10)'\v'\*(#V*4/10'\z.\v'-\*(#V*4/10'\h'|\\n:u'
-.ds 3 \*(#[\v'.2m'\s-2\&3\s0\v'-.2m'\*(#]
-.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
-.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
-.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
-.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
-.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
-.ds ae a\h'-(\w'a'u*4/10)'e
-.ds Ae A\h'-(\w'A'u*4/10)'E
-.ds oe o\h'-(\w'o'u*4/10)'e
-.ds Oe O\h'-(\w'O'u*4/10)'E
-. \" corrections for vroff
-.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
-.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
-. \" for low resolution devices (crt and lpr)
-.if \n(.H>23 .if \n(.V>19 \
-\{\
-. ds : e
-. ds 8 ss
-. ds v \h'-1'\o'\(aa\(ga'
-. ds _ \h'-1'^
-. ds . \h'-1'.
-. ds 3 3
-. ds o a
-. ds d- d\h'-1'\(ga
-. ds D- D\h'-1'\(hy
-. ds th \o'bp'
-. ds Th \o'LP'
-. ds ae ae
-. ds Ae AE
-. ds oe oe
-. ds Oe OE
-.\}
-.rm #[ #] #H #V #F C
-.SH "NAME"
-Crypt::Blowfish \- Perl Blowfish encryption module
-.SH "SYNOPSIS"
-.PP
-.Vb 4
-\& use Crypt::Blowfish;
-\& my $cipher = new Crypt::Blowfish $key;
-\& my $ciphertext = $cipher->encrypt($plaintext);
-\& my $plaintext = $cipher->decrypt($ciphertext);
-.Ve
-.SH "DESCRIPTION"
-Blowfish is capable of strong encryption and can use key sizes up
-to 56 bytes (a 448 bit key). You're encouraged to take advantage
-of the full key size to ensure the strongest encryption possible
-from this module.
-.PP
-Crypt::Blowfish has the following methods:
-.Sp
-.Vb 4
-\& blocksize()
-\& keysize()
-\& encrypt()
-\& decrypt()
-.Ve
-.SH "FUNCTIONS"
-.Ip "blocksize" 4
-Returns the size (in bytes) of the block cipher.
-.Sp
-Crypt::Blowfish doesn't return a key size due to its ability
-to use variable-length keys. (well, more accurately, it won't
-as of 2.09 .. for now, it does. expect that to change)
-.Ip "new" 4
-.Sp
-.Vb 1
-\& my $cipher = new Crypt::Blowfish $key;
-.Ve
-This creates a new Crypt::Blowfish BlockCipher object, using \f(CW$key\fR,
-where \f(CW$key\fR is a key of \f(CWkeysize()\fR bytes (minimum of eight bytes).
-.Ip "encrypt" 4
-.Sp
-.Vb 2
-\& my $cipher = new Crypt::Blowfish $key;
-\& my $ciphertext = $cipher->encrypt($plaintext);
-.Ve
-This function encrypts \f(CW$plaintext\fR and returns the \f(CW$ciphertext\fR
-where \f(CW$plaintext\fR and \f(CW$ciphertext\fR must be of \f(CWblocksize()\fR bytes.
-(hint: Blowfish is an 8 byte block cipher)
-.Ip "decrypt" 4
-.Sp
-.Vb 2
-\& my $cipher = new Crypt::Blowfish $key;
-\& my $plaintext = $cipher->decrypt($ciphertext);
-.Ve
-This function decrypts \f(CW$ciphertext\fR and returns the \f(CW$plaintext\fR
-where \f(CW$plaintext\fR and \f(CW$ciphertext\fR must be of \f(CWblocksize()\fR bytes.
-(hint: see previous hint)
-.SH "EXAMPLE"
-.PP
-.Vb 4
-\& my $key = pack("H16", "0123456789ABCDEF"); # min. 8 bytes
-\& my $cipher = new Crypt::Blowfish $key;
-\& my $ciphertext = $cipher->encrypt("plaintex"); # SEE NOTES
-\& print unpack("H16", $ciphertext), "\en";
-.Ve
-.SH "PLATFORMS"
-.PP
-.Vb 2
-\& Please see the README document for platforms and performance
-\& tests.
-.Ve
-.SH "NOTES"
-The module is capable of being used with Crypt::CBC. You're
-encouraged to read the perldoc for Crypt::CBC if you intend to
-use this module for Cipher Block Chaining modes. In fact, if
-you have any intentions of encrypting more than eight bytes of
-data with this, or any other block cipher, you're going to need
-\fBsome\fR type of block chaining help. Crypt::CBC tends to be
-very good at this. If you're not going to encrypt more than
-eight bytes, your data \fBmust\fR be \fBexactly\fR eight bytes long.
-If need be, do your own padding. \*(L"\e0\*(R" as a null byte is perfectly
-valid to use for this. Additionally, the current maintainer for
-Crypt::Blowfish may or may not release Crypt::CBC_R which
-replaces the default \*(L'RandomIV\*(R' initialization vector in
-Crypt::CBC with a random initialization vector. (to the limits
-of /dev/urandom and associates) In either case, please email
-amused(a)pobox.com for Crypt::CBC_R.
-.SH "SEE ALSO"
-Crypt::CBC,
-Crypt::DES,
-Crypt::IDEA
-.PP
-Bruce Schneier, \fIApplied Cryptography\fR, 1995, Second Edition,
-published by John Wiley & Sons, Inc.
-.SH "COPYRIGHT"
-The implementation of the Blowfish algorithm was developed by,
-and is copyright of, A.M. Kuchling.
-.PP
-Other parts of the perl extension and module are
-copyright of Systemics Ltd ( http://www.systemics.com/ ).
-.PP
-Code revisions, updates, and standalone release are copyright
-1999-2001 W3Works, LLC.
-.SH "AUTHOR"
-Original algorithm, Bruce Shneier. Original implementation, A.M.
-Kuchling. Original Perl implementation, Systemics Ltd. Current
-maintenance by W3Works, LLC.
-.PP
-Current revision and maintainer: Dave Paris <amused(a)pobox.com>
-
-.rn }` ''
-.IX Title "Blowfish 3"
-.IX Name "Crypt::Blowfish - Perl Blowfish encryption module"
-
-.IX Header "NAME"
-
-.IX Header "SYNOPSIS"
-
-.IX Header "DESCRIPTION"
-
-.IX Header "FUNCTIONS"
-
-.IX Item "blocksize"
-
-.IX Item "new"
-
-.IX Item "encrypt"
-
-.IX Item "decrypt"
-
-.IX Header "EXAMPLE"
-
-.IX Header "PLATFORMS"
-
-.IX Header "NOTES"
-
-.IX Header "SEE ALSO"
-
-.IX Header "COPYRIGHT"
-
-.IX Header "AUTHOR"
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blowfish.h b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blowfish.h
deleted file mode 100644
index e1b9f76..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/blowfish.h
+++ /dev/null
@@ -1,6 +0,0 @@
-#include <sys/types.h>
-
-typedef unsigned char bf_cblock[8];
-
-int blowfish_make_bfkey(char * key_string, int keylength, char * bfkey);
-void blowfish_crypt_8bytes(bf_cblock source, bf_cblock dest, char * bfkey, short direction);
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/files.txt b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/files.txt
deleted file mode 100644
index 5f6efcd..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/files.txt
+++ /dev/null
@@ -1,4 +0,0 @@
-/usr/lib/perl5/man/man3/Crypt::Blowfish.3
-/usr/lib/perl5/site_perl/5.005/i386-linux/Crypt/Blowfish.pm
-/usr/lib/perl5/site_perl/5.005/i386-linux/auto/Crypt/Blowfish/Blowfish.bs
-/usr/lib/perl5/site_perl/5.005/i386-linux/auto/Crypt/Blowfish/Blowfish.so
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/pm_to_blib b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/pm_to_blib
deleted file mode 100644
index e69de29..0000000
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/test.pl b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/test.pl
deleted file mode 100644
index 4c1b84d..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/test.pl
+++ /dev/null
@@ -1,281 +0,0 @@
-BEGIN { push @INC, qw(. .. ../lib ../../lib ../../../lib) }
-
-package Crypt::Blowfish;
-
-require Exporter;
-require DynaLoader;
-
-@ISA = (Exporter, DynaLoader);
-
-bootstrap Crypt::Blowfish;
-
-
-use Benchmark qw(timediff timestr);
-use strict;
-use Carp;
-
-sub usage
-{
- my ($package, $filename, $line, $subr) = caller(1);
- $Carp::CarpLevel = 2;
- croak "Usage: $subr(@_)";
-}
-
-
-sub blocksize { 8; }
-sub keysize { 56; }
-
-sub new
-{
- usage("new Blowfish key") unless @_ == 2;
-
- my $type = shift; my $self = {}; bless $self, $type;
-
- $self->{'ks'} = Crypt::Blowfish::init(shift);
-
- $self;
-}
-
-sub encrypt
-{
- usage("encrypt data[8 bytes]") unless @_ == 2;
-
- my $self = shift;
- my $data = shift;
-
- Crypt::Blowfish::crypt($data, $data, $self->{'ks'}, 0);
-
- $data;
-}
-
-sub decrypt
-{
- usage("decrypt data[8 bytes]") unless @_ == 2;
-
- my $self = shift;
- my $data = shift;
-
- Crypt::Blowfish::crypt($data, $data, $self->{'ks'}, 1);
-
- $data;
-}
-
-
-package main;
-
-
-#
-# '6162636465666768696a6b6c6d6e6f707172737475767778797a',
-# '424c4f5746495348', '324ed0fef413a203',
-#
-# '57686f206973204a6f686e2047616c743f', 'fedcba9876543210', 'cc91732b8022f684')
-#
-# "Ayn Rand" FEDCBA9876543210 e113f4102cfcce43
-#
-
-print "1..11\n";
-
-my $key = pack("H*", "6162636465666768696a6b6c6d6e6f707172737475767778797a");
-my $in = pack("H*", "424c4f5746495348");
-my $out = pack("H*", "324ed0fef413a203");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->encrypt($in) eq $out);
-print "ok 1\n";
-
-my $key = pack("H*", "57686f206973204a6f686e2047616c743f");
-my $in = pack("H*", "fedcba9876543210");
-my $out = pack("H*", "cc91732b8022f684");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->decrypt($out) eq $in);
-print "ok 2\n";
-
-my $key = "Ayn Rand";
-substr($key, 3, 1) = pack("C", ord(substr($key, 3, 1))+128);
-substr($key, 7, 1) = pack("C", ord(substr($key, 7, 1))+128);
-my $in = pack("H*", "fedcba9876543210");
-my $out = pack("H*", "e113f4102cfcce43");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->encrypt($in) eq $out);
-print "ok 3\n";
-
-my $key = pack("H*", "0000000000000000");
-my $in = pack("H*", "0000000000000000");
-my $out = pack("H*", "4EF997456198DD78");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless($cipher->encrypt($in) eq $out);
-print "ok 4\n";
-
-my $key = pack("H*", "FFFFFFFFFFFFFFFF");
-my $in = pack("H*", "0000000000000000");
-my $out = pack("H*", "F21E9A77B71C49BC");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->decrypt($out) eq $in);
-print "ok 5\n";
-
-my $key = pack("H*", "FFFFFFFFFFFFFFFF");
-my $in = pack("H*", "FFFFFFFFFFFFFFFF");
-my $out = pack("H*", "51866FD5B85ECB8A");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->encrypt($in) eq $out);
-print "ok 6\n";
-
-my $key = pack("H*", "3000000000000000");
-my $in = pack("H*", "1000000000000001");
-my $out = pack("H*", "7D856F9A613063F2");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->encrypt($in) eq $out);
-print "ok 7\n";
-
-my $key = pack("H*", "1111111111111111");
-my $in = pack("H*", "1111111111111111");
-my $out = pack("H*", "2466DD878B963C9D");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->encrypt($in) eq $out);
-print "ok 8\n";
-
-my $key = pack("H*", "584023641ABA6176");
-my $in = pack("H*", "004BD6EF09176062");
-my $out = pack("H*", "452031C1E4FADA8E");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->encrypt($in) eq $out);
-print "ok 9\n";
-
-my $key = pack("H*", "0101010101010101");
-my $in = pack("H*", "0123456789ABCDEF");
-my $out = pack("H*", "FA34EC4847B268B2");
-
-my $cipher = new Crypt::Blowfish $key;
-
-print "not " unless ($cipher->encrypt($in) eq $out);
-print "ok 10\n";
-
-{
- print "\nRunning standard mode speed tests.. encrypting with non-cached cipher\n";
- my $t0 = new Benchmark;
-
- for(1..5000){
- my $key = pack("H*", "0101010101010101");
- my $in = pack("H*", "0123456789ABCDEF");
- my $out = pack("H*", "FA34EC4847B268B2");
-
- my $cipher = new Crypt::Blowfish $key;
- $cipher->encrypt($in);
- }
-
- my $t1 = new Benchmark;
- my $td = Benchmark::timediff($t1,$t0);
- my $ts = Benchmark::timestr($td);
-
- print "5,000 cycles: $ts\n";
-
-}; # end standard mode (encrypt) speed test non-cached cipher
-
-{
- print "\nRunning standard mode speed tests.. decrypting with non-cached cipher\n";
- my $t0 = new Benchmark;
-
- for(1..5000){
- my $key = pack("H*", "0101010101010101");
- my $in = pack("H*", "0123456789ABCDEF");
- my $out = pack("H*", "FA34EC4847B268B2");
-
- my $cipher = new Crypt::Blowfish $key;
- $cipher->decrypt($out);
- }
-
- my $t1 = new Benchmark;
- my $td = Benchmark::timediff($t1,$t0);
- my $ts = Benchmark::timestr($td);
-
- print "5,000 cycles: $ts\n";
-
-}; # end standard mode (decrypt) speed test non-cached cipher
-
-
-my $key = pack("H*", "0101010101010101");
-my $cipher = new Crypt::Blowfish $key;
-{
- print "\nRunning standard mode speed tests.. encrypting with cached cipher\n";
- my $t0 = new Benchmark;
-
- for(1..10000){
- my $in = pack("H*", "0123456789ABCDEF");
- my $out = pack("H*", "FA34EC4847B268B2");
-
- $cipher->encrypt($in);
- }
-
- my $t1 = new Benchmark;
- my $td = Benchmark::timediff($t1,$t0);
- my $ts = Benchmark::timestr($td);
-
- print "10,000 cycles: $ts\n";
-
-
-}; # end standard mode (encrypt) speed test cached cipher
-
-{
- print "\nRunning standard mode speed tests.. decrypting with cached cipher\n";
- my $t0 = new Benchmark;
-
- for(1..10000){
- my $in = pack("H*", "0123456789ABCDEF");
- my $out = pack("H*", "FA34EC4847B268B2");
-
- $cipher->decrypt($out);
- }
-
- my $t1 = new Benchmark;
- my $td = Benchmark::timediff($t1,$t0);
- my $ts = Benchmark::timestr($td);
-
- print "10,000 cycles: $ts\n";
-
-
-}; # end standard mode (decrypt) speed test cached cipher
-
-
-print "\nTesting Cipher Block Chaining..\n";
-eval 'use Crypt::CBC';
-
-if(!$@) {
- if($Crypt::CBC::VERSION < 1.22) {
- $@ = "CBC mode requires Crypt::CBC version 1.22 or higher.";
- } else {
-
- my $cipher = new Crypt::CBC(pack("H*","0123456789ABCDEFF0E1D2C3B4A59687"),"Blowfish");
- my $ciphertext = $cipher->encrypt(pack("H*","37363534333231204E6F77206973207468652074696D6520666F722000"));
- my $plaintext = $cipher->decrypt($ciphertext);
-
- if($plaintext eq "7654321 Now is the time for \0") {
- print "ok 11 - CBC Mode\n";
- } else {
- print unpack("H*",$plaintext) . " :decrypted\n";
- print unpack("H*","7654321 Now is the time for \0") . " :orig\n";
- print "not ok 11 - CBC Mode failed\n";
- }
- }
-} # end no errors
-
-if($@) {
- print "Error (probably harmless):\n$@\n";
-}
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/typemap b/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/typemap
deleted file mode 100644
index 02522e8..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-Blowfish-2.09/typemap
+++ /dev/null
@@ -1 +0,0 @@
-TYPEMAP
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/BUILD b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/BUILD
deleted file mode 100644
index 74857ae..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/BUILD
+++ /dev/null
@@ -1,52 +0,0 @@
-# Macros
-
-%define cvs_package PerlModules/CPAN/Crypt-DES-2.03
-
-# Package specific stuff
-Name: perl-Crypt-DES
-Version: 2.5.0
-Release: 1
-Packager: Karen Jacqmin-Adams <kja(a)redhat.com>
-Summary: an XS-based DES implimentation for Perl.
-Source: %name-%PACKAGE_VERSION.tar.gz
-BuildArch: i386
-Requires: perl
-Requires: %(perl -MConfig -le 'if (defined $Config{useithreads}) { print "perl(:WITH_ITHREADS)" } else { print "perl(:WITHOUT_ITHREADS)" }')
-Requires: %(perl -MConfig -le 'if (defined $Config{usethreads}) { print "perl(:WITH_THREADS)" } else { print "perl(:WITHOUT_THREADS)" }')
-Requires: %(perl -MConfig -le 'if (defined $Config{uselargefiles}) { print "perl(:WITH_LARGEFILES)" } else { print "perl(:WITHOUT_LARGEFILES)" }')
-Group: Development/Libraries
-URL: http://search.cpan.org/dist/Crypt-DES/
-Copyright: Modifications, including cross-platform fixups, and single-algorithm distribution packaging are Copyright (C) 2000 W3Works, LLC. All Rights Reserved. Mail questions and comments to Dave Paris <amused(a)pobox.com>. Original distribution license (below) applies. Other parts of the library are covered by the following licence: Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/) All rights reserved.
-Vendor: Red Hat, Inc.
-BuildRoot: %{_tmppath}/%name
-Prefix: /usr
-
-%description
-
-The module implements the Crypt::CBC interface, which has the following methods
-blocksize =item keysize =item encrypt =item decrypt
-
-
-%prep
-%entirely_abstract_build_step
-
-
-%build
-%makefile_build
-
-
-%install
-rm -rf $RPM_BUILD_ROOT
-cd $RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
-
-%cpan_doc_install
-%makefile_install
-%point_scripts_to_correct_perl
-%make_file_list
-
-
-%files -f %{name}-%{version}-%{release}-filelist
-
-
-%clean
-%abstract_clean_script
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/COPYRIGHT b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/COPYRIGHT
deleted file mode 100644
index fdc9031..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/COPYRIGHT
+++ /dev/null
@@ -1,50 +0,0 @@
-This perl extension includes software developed by Eric Young (eay(a)mincom.oz.au)
-
-Modifications, including cross-platform fixups, and single-algorithm distribution
-packaging are Copyright (C) 2000 W3Works, LLC. All Rights Reserved. Mail
-questions and comments to Dave Paris <amused(a)pobox.com>. Original distribution
-license (below) applies.
-
-Other parts of the library are covered by the following licence:
-
-Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
-All rights reserved.
-
-This library and applications are FREE FOR COMMERCIAL AND NON-COMMERCIAL USE
-as long as the following conditions are adhered to.
-
-Copyright remains with Systemics Ltd, and as such any Copyright notices
-in the code are not to be removed. If this code is used in a product,
-Systemics should be given attribution as the author of the parts used.
-This can be in the form of a textual message at program startup or
-in documentation (online or textual) provided with the package.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-1. Redistributions of source code must retain the copyright
- notice, this list of conditions and the following disclaimer.
-2. Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-3. All advertising materials mentioning features or use of this software
- must display the following acknowledgement:
- This product includes software developed by Systemics Ltd (http://www.systemics.com/)
-
- THIS SOFTWARE IS PROVIDED BY SYSTEMICS LTD ``AS IS'' AND
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- SUCH DAMAGE.
-
- The licence and distribution terms for any publically available version or
- derivative of this code cannot be changed. i.e. this code cannot simply be
- copied and put under another distribution licence
- [including the GNU Public Licence.]
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.pm b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.pm
deleted file mode 100644
index 635bf50..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.pm
+++ /dev/null
@@ -1,172 +0,0 @@
-#
-# Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
-# All rights reserved.
-#
-# Modifications are Copyright (c) 2000, W3Works, LLC
-# All Rights Reserved.
-
-package Crypt::DES;
-
-require Exporter;
-require DynaLoader;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-
-@ISA = qw(Exporter DynaLoader);
-
-# Items to export into callers namespace by default
-@EXPORT = qw();
-
-# Other items we are prepared to export if requested
-@EXPORT_OK = qw();
-
-$VERSION = '2.03';
-bootstrap Crypt::DES $VERSION;
-
-use strict;
-use Carp;
-
-sub usage
-{
- my ($package, $filename, $line, $subr) = caller(1);
- $Carp::CarpLevel = 2;
- croak "Usage: $subr(@_)";
-}
-
-
-sub blocksize { 8; }
-sub keysize { 8; }
-
-sub new
-{
- usage("new DES key") unless @_ == 2;
-
- my $type = shift;
- my $self = {};
- bless $self, $type;
-
- $self->{'ks'} = Crypt::DES::expand_key(shift);
-
- return $self;
-}
-
-sub encrypt
-{
- usage("encrypt data[8 bytes]") unless @_ == 2;
-
- my ($self,$data) = @_;
- return Crypt::DES::crypt($data, $data, $self->{'ks'}, 1);
-}
-
-sub decrypt
-{
- usage("decrypt data[8 bytes]") unless @_ == 2;
-
- my ($self,$data) = @_;
- return Crypt::DES::crypt($data, $data, $self->{'ks'}, 0);
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-Crypt::DES - Perl DES encryption module
-
-=head1 SYNOPSIS
-
- use Crypt::DES;
-
-
-=head1 DESCRIPTION
-
-The module implements the Crypt::CBC interface,
-which has the following methods
-
-=over 4
-
-=item blocksize
-=item keysize
-=item encrypt
-=item decrypt
-
-=back
-
-=head1 FUNCTIONS
-
-=over 4
-
-=item blocksize
-
-Returns the size (in bytes) of the block cipher.
-
-=item keysize
-
-Returns the size (in bytes) of the key. Optimal size is 8 bytes.
-
-=item new
-
- my $cipher = new Crypt::DES $key;
-
-This creates a new Crypt::DES BlockCipher object, using $key,
-where $key is a key of C<keysize()> bytes.
-
-=item encrypt
-
- my $cipher = new Crypt::DES $key;
- my $ciphertext = $cipher->encrypt($plaintext);
-
-This function encrypts $plaintext and returns the $ciphertext
-where $plaintext and $ciphertext should be of C<blocksize()> bytes.
-
-=item decrypt
-
- my $cipher = new Crypt::DES $key;
- my $plaintext = $cipher->decrypt($ciphertext);
-
-This function decrypts $ciphertext and returns the $plaintext
-where $plaintext and $ciphertext should be of C<blocksize()> bytes.
-
-=back
-
-=head1 EXAMPLE
-
- my $key = pack("H16", "0123456789ABCDEF");
- my $cipher = new Crypt::DES $key;
- my $ciphertext = $cipher->encrypt("plaintex"); # NB - 8 bytes
- print unpack("H16", $ciphertext), "\n";
-
-=head1 NOTES
-
-Do note that DES only uses 8 byte keys and only works on 8 byte data
-blocks. If you're intending to encrypt larger blocks or entire files,
-please use Crypt::CBC in conjunction with this module. See the
-Crypt::CBC documentation for proper syntax and use.
-
-Also note that the DES algorithm is, by today's standard, weak
-encryption. Crypt::Blowfish is highly recommended if you're
-interested in using strong encryption and a faster algorithm.
-
-=head1 SEE ALSO
-
-Crypt::Blowfish
-Crypt::IDEA
-
-Bruce Schneier, I<Applied Cryptography>, 1995, Second Edition,
-published by John Wiley & Sons, Inc.
-
-=head1 COPYRIGHT
-
-The implementation of the DES algorithm was developed by,
-and is copyright of, Eric Young (eay(a)mincom.oz.au).
-Other parts of the perl extension and module are
-copyright of Systemics Ltd ( http://www.systemics.com/ ).
-Cross-platform work and packaging for single algorithm
-distribution is copyright of W3Works, LLC.
-
-=head1 MAINTAINER
-
-This single-algorithm package and cross-platform code is
-maintained by Dave Paris <amused(a)pobox.com>.
-
-=cut
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.xs b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.xs
deleted file mode 100644
index c8f3c0e..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/DES.xs
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-* cross-platform and mod_ssl-safe code modifications are Copyright (C)
-* 2000 W3Works, LLC. All rights reserved.
-*/
-
-/*
- * Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
- * All rights reserved.
- */
-
-#include "EXTERN.h"
-#include "perl.h"
-#include "XSUB.h"
-
-typedef unsigned char i8;
-typedef unsigned long i32;
-
-#include "des.h"
-
-#ifndef sv_undef
-#define sv_undef PL_sv_undef
-#endif
-
-MODULE = Crypt::DES PACKAGE = Crypt::DES PREFIX = des_
-PROTOTYPES: DISABLE
-
-char *
-des_expand_key(key)
- char * key = NO_INIT
- STRLEN key_len = NO_INIT
- CODE:
- {
- des_ks ks;
-
- key = (char *) SvPV(ST(0), key_len);
- if (key_len != sizeof(des_user_key))
- croak("Invalid key");
-
- perl_des_expand_key((i8 *)key, ks);
-
- ST(0) = sv_2mortal(newSVpv((char *)ks, sizeof(ks)));
- }
-
-void
-des_crypt(input, output, ks, enc_flag)
- char * input = NO_INIT
- SV * output
- char * ks = NO_INIT
- int enc_flag
- STRLEN input_len = NO_INIT
- STRLEN output_len = NO_INIT
- STRLEN ks_len = NO_INIT
- CODE:
- {
- input = (char *) SvPV(ST(0), input_len);
- if (input_len != 8)
- croak("input must be 8 bytes long");
-
- ks = (char *) SvPV(ST(2), ks_len);
- if (ks_len != sizeof(des_ks))
- croak("Invalid key schedule");
-
- if (output == &sv_undef)
- output = sv_newmortal();
- output_len = 8;
-
- if (!SvUPGRADE(output, SVt_PV))
- croak("cannot use output argument as lvalue");
-
- perl_des_crypt(input, SvGROW(output, output_len), (i32 *)ks, enc_flag);
-
- SvCUR_set(output, output_len);
- *SvEND(output) = '\0';
- (void) SvPOK_only(output);
- SvTAINT(output);
-
- ST(0) = output;
- }
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/MANIFEST b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/MANIFEST
deleted file mode 100644
index b2cf6d9..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/MANIFEST
+++ /dev/null
@@ -1,10 +0,0 @@
-COPYRIGHT
-DES.pm
-DES.xs
-MANIFEST
-README
-Makefile.PL
-_des.c
-des.h
-test.pl
-typemap
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/Makefile.PL b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/Makefile.PL
deleted file mode 100755
index e136c37..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/Makefile.PL
+++ /dev/null
@@ -1,16 +0,0 @@
-#! /usr/local/bin/perl
-
-use ExtUtils::MakeMaker;
-# See lib/ExtUtils/MakeMaker.pm for details of how to influence
-# the contents of the Makefile being created.
-
-require 5.004;
-
-WriteMakefile(
- 'NAME' => 'Crypt::DES',
- 'DISTNAME' => 'Crypt-DES',
- 'VERSION_FROM' => 'DES.pm',,
- 'OBJECT' => 'DES.o _des.o',
- 'dist' => {COMPRESS=>'gzip', SUFFIX=>'gz'}
-);
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/README b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/README
deleted file mode 100644
index 2a99fb0..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/README
+++ /dev/null
@@ -1,83 +0,0 @@
-Crypt::DES - an XS-based DES implimentation for Perl.
-
-The 2.XX tree represents a major improvement over the
-1.XX tree. This package builds on big-endian
-machines and many more x86 platforms than before.
-(with a few rare exceptions, like gcc on DUX against
-5.004).
-
-mod_ssl conflicts have also been resolved. Thank you
-to Jan 'Kozo' Vajda for pointing out the des_SPtrans
-overlap between these two packages.
-
-Prerequisites
--------------
-
-For the full test suite to run, Crypt::CBC, version 1.22 or higher
-is required (recommended is 1.25 or higher), however this module
-is not mandatory for standalone DES use, and all other tests
-will run to completion.
-
-Installing Crypt::DES
----------------------
-
-nothing unusual:
-
- 1. perl Makefile.PL
- 2. make
- 3. make test
- 4. make install
-
-Notes
------
-
-The following is a list of known good platforms:
-FreeBSD 3.5-RELEASE / x86 / 5.005
-OpenBSD 2.7 / x86 / 5.6
-Linux / x86 / 5.005 & 5.6
-Linux / PPC / 5.005 & 5.6
-Solaris7 / SPARC / 5.005
-Solaris / x86 / 5.005
-DUX / Alpha / 5.005 (using DEC cc)
-Win32 / x86 / 5.005 (using VC++5)
-OS/2 / x86 / 5.6
-
-Reports of builds against 5.004 have been equally
-positive. Building on Win32 with VC++6 may prove
-problematic. Complaints about build problems on
-Win32 will be sent to /dev/null.
-
-Please report any other successful OS/Platform
-combinations to amused(a)pobox.com. Thank you.
-
-What you can expect in the way of speed:
-
-Linux/x86 dual PII400
-non-cached cipher speed test. 5000 encrypt iterations
- 0 wallclock secs ( 0.52 usr + 0.01 sys = 0.53 CPU)
-non-cached cipher speed test. 5000 decrypt iterations
- 1 wallclock secs ( 0.52 usr + 0.01 sys = 0.53 CPU)
-cached cipher speed test. 10000 encrypt iterations
- 0 wallclock secs ( 0.20 usr + 0.00 sys = 0.20 CPU)
-cached cipher speed test. 10000 decrypt iterations
- 0 wallclock secs ( 0.22 usr + 0.00 sys = 0.22 CPU)
-
-Windows NT4(SP6)/x86 dual PPro 200
-non-cached cipher speed test. 5000 encrypt iterations
- 1 wallclock secs ( 1.25 usr + 0.00 sys = 1.25 CPU)
-non-cached cipher speed test. 5000 decrypt iterations
- 2 wallclock secs ( 1.22 usr + 0.00 sys = 1.22 CPU)
-cached cipher speed test. 10000 encrypt iterations
- 0 wallclock secs ( 0.58 usr + 0.00 sys = 0.58 CPU)
-cached cipher speed test. 10000 decrypt iterations
- 1 wallclock secs ( 0.59 usr + 0.00 sys = 0.59 CPU)
-
-Solaris7/SPARC UltraSPARCIIi 277Mhz
-non-cached cipher speed test. 5000 encrypt iterations
- 1 wallclock secs ( 1.08 usr + 0.20 sys = 1.28 CPU)
-non-cached cipher speed test. 5000 decrypt iterations
- 2 wallclock secs ( 1.14 usr + 0.12 sys = 1.26 CPU)
-cached cipher speed test. 10000 encrypt iterations
- 0 wallclock secs ( 0.52 usr + 0.00 sys = 0.52 CPU)
-cached cipher speed test. 10000 decrypt iterations
- 1 wallclock secs ( 0.50 usr + 0.00 sys = 0.50 CPU)
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/_des.c b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/_des.c
deleted file mode 100644
index 1c5ca84..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/_des.c
+++ /dev/null
@@ -1,591 +0,0 @@
-/*
-* cross-platform and mod_ssl-safe code modifications are Copyright (C)
-* 2000 W3Works, LLC. All rights reserved.
-*/
-
-/*
-* The modifications found herein are Copyright (C) W3Works, LLC.
-# All rights reserved.
-*/
-
-/*
- * NB - This file is a modified version of one by Eric Young.
- * It was modifed by Systemics Ltd (http://www.systemics.com/)
- */
-
-/* Copyright (C) 1995 Eric Young (eay(a)mincom.oz.au)
-* All rights reserved.
-*
-* This file is part of an SSL implementation written
-* by Eric Young (eay(a)mincom.oz.au).
-* The implementation was written so as to conform with Netscapes SSL
-* specification. This library and applications are
-* FREE FOR COMMERCIAL AND NON-COMMERCIAL USE
-* as long as the following conditions are aheared to.
-*
-* Copyright remains Eric Young's, and as such any Copyright notices in
-* the code are not to be removed. If this code is used in a product,
-* Eric Young should be given attribution as the author of the parts used.
-* This can be in the form of a textual message at program startup or
-* in documentation (online or textual) provided with the package.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the copyright
-* notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-* 3. All advertising materials mentioning features or use of this software
-* must display the following acknowledgement:
-* This product includes software developed by Eric Young (eay(a)mincom.oz.au)
-*
-* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
-* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-* SUCH DAMAGE.
-*
-* The licence and distribution terms for any publically available version or
-* derivative of this code cannot be changed. i.e. this code cannot simply be
-* copied and put under another distribution licence
-* [including the GNU Public Licence.]
-*/
-
-#include "des.h"
-
-#define c2l(c,l) (l =((unsigned long)(*((c)++))), \
- l|=((unsigned long)(*((c)++)))<< 8, \
- l|=((unsigned long)(*((c)++)))<<16, \
- l|=((unsigned long)(*((c)++)))<<24)
-
-#define l2c(l,c) (*((c)++)=(unsigned char)(((l) )&0xff), \
- *((c)++)=(unsigned char)(((l)>> 8)&0xff), \
- *((c)++)=(unsigned char)(((l)>>16)&0xff), \
- *((c)++)=(unsigned char)(((l)>>24)&0xff))
-
-#define ITERATIONS 16
-#define HPERM_OP(a,t,n,m) ((t)=((((a)<<(16-(n)))^(a))&(m)),\
- (a)=(a)^(t)^(t>>(16-(n))))
-
-
-unsigned long des_SPtrans_x[8][64]={
-/* nibble 0 */
-0x00820200, 0x00020000, 0x80800000, 0x80820200,
-0x00800000, 0x80020200, 0x80020000, 0x80800000,
-0x80020200, 0x00820200, 0x00820000, 0x80000200,
-0x80800200, 0x00800000, 0x00000000, 0x80020000,
-0x00020000, 0x80000000, 0x00800200, 0x00020200,
-0x80820200, 0x00820000, 0x80000200, 0x00800200,
-0x80000000, 0x00000200, 0x00020200, 0x80820000,
-0x00000200, 0x80800200, 0x80820000, 0x00000000,
-0x00000000, 0x80820200, 0x00800200, 0x80020000,
-0x00820200, 0x00020000, 0x80000200, 0x00800200,
-0x80820000, 0x00000200, 0x00020200, 0x80800000,
-0x80020200, 0x80000000, 0x80800000, 0x00820000,
-0x80820200, 0x00020200, 0x00820000, 0x80800200,
-0x00800000, 0x80000200, 0x80020000, 0x00000000,
-0x00020000, 0x00800000, 0x80800200, 0x00820200,
-0x80000000, 0x80820000, 0x00000200, 0x80020200,
-
-/* nibble 1 */
-0x10042004, 0x00000000, 0x00042000, 0x10040000,
-0x10000004, 0x00002004, 0x10002000, 0x00042000,
-0x00002000, 0x10040004, 0x00000004, 0x10002000,
-0x00040004, 0x10042000, 0x10040000, 0x00000004,
-0x00040000, 0x10002004, 0x10040004, 0x00002000,
-0x00042004, 0x10000000, 0x00000000, 0x00040004,
-0x10002004, 0x00042004, 0x10042000, 0x10000004,
-0x10000000, 0x00040000, 0x00002004, 0x10042004,
-0x00040004, 0x10042000, 0x10002000, 0x00042004,
-0x10042004, 0x00040004, 0x10000004, 0x00000000,
-0x10000000, 0x00002004, 0x00040000, 0x10040004,
-0x00002000, 0x10000000, 0x00042004, 0x10002004,
-0x10042000, 0x00002000, 0x00000000, 0x10000004,
-0x00000004, 0x10042004, 0x00042000, 0x10040000,
-0x10040004, 0x00040000, 0x00002004, 0x10002000,
-0x10002004, 0x00000004, 0x10040000, 0x00042000,
-
-/* nibble 2 */
-0x41000000, 0x01010040, 0x00000040, 0x41000040,
-0x40010000, 0x01000000, 0x41000040, 0x00010040,
-0x01000040, 0x00010000, 0x01010000, 0x40000000,
-0x41010040, 0x40000040, 0x40000000, 0x41010000,
-0x00000000, 0x40010000, 0x01010040, 0x00000040,
-0x40000040, 0x41010040, 0x00010000, 0x41000000,
-0x41010000, 0x01000040, 0x40010040, 0x01010000,
-0x00010040, 0x00000000, 0x01000000, 0x40010040,
-0x01010040, 0x00000040, 0x40000000, 0x00010000,
-0x40000040, 0x40010000, 0x01010000, 0x41000040,
-0x00000000, 0x01010040, 0x00010040, 0x41010000,
-0x40010000, 0x01000000, 0x41010040, 0x40000000,
-0x40010040, 0x41000000, 0x01000000, 0x41010040,
-0x00010000, 0x01000040, 0x41000040, 0x00010040,
-0x01000040, 0x00000000, 0x41010000, 0x40000040,
-0x41000000, 0x40010040, 0x00000040, 0x01010000,
-
-/* nibble 3 */
-0x00100402, 0x04000400, 0x00000002, 0x04100402,
-0x00000000, 0x04100000, 0x04000402, 0x00100002,
-0x04100400, 0x04000002, 0x04000000, 0x00000402,
-0x04000002, 0x00100402, 0x00100000, 0x04000000,
-0x04100002, 0x00100400, 0x00000400, 0x00000002,
-0x00100400, 0x04000402, 0x04100000, 0x00000400,
-0x00000402, 0x00000000, 0x00100002, 0x04100400,
-0x04000400, 0x04100002, 0x04100402, 0x00100000,
-0x04100002, 0x00000402, 0x00100000, 0x04000002,
-0x00100400, 0x04000400, 0x00000002, 0x04100000,
-0x04000402, 0x00000000, 0x00000400, 0x00100002,
-0x00000000, 0x04100002, 0x04100400, 0x00000400,
-0x04000000, 0x04100402, 0x00100402, 0x00100000,
-0x04100402, 0x00000002, 0x04000400, 0x00100402,
-0x00100002, 0x00100400, 0x04100000, 0x04000402,
-0x00000402, 0x04000000, 0x04000002, 0x04100400,
-
-/* nibble 4 */
-0x02000000, 0x00004000, 0x00000100, 0x02004108,
-0x02004008, 0x02000100, 0x00004108, 0x02004000,
-0x00004000, 0x00000008, 0x02000008, 0x00004100,
-0x02000108, 0x02004008, 0x02004100, 0x00000000,
-0x00004100, 0x02000000, 0x00004008, 0x00000108,
-0x02000100, 0x00004108, 0x00000000, 0x02000008,
-0x00000008, 0x02000108, 0x02004108, 0x00004008,
-0x02004000, 0x00000100, 0x00000108, 0x02004100,
-0x02004100, 0x02000108, 0x00004008, 0x02004000,
-0x00004000, 0x00000008, 0x02000008, 0x02000100,
-0x02000000, 0x00004100, 0x02004108, 0x00000000,
-0x00004108, 0x02000000, 0x00000100, 0x00004008,
-0x02000108, 0x00000100, 0x00000000, 0x02004108,
-0x02004008, 0x02004100, 0x00000108, 0x00004000,
-0x00004100, 0x02004008, 0x02000100, 0x00000108,
-0x00000008, 0x00004108, 0x02004000, 0x02000008,
-
-/* nibble 5 */
-0x20000010, 0x00080010, 0x00000000, 0x20080800,
-0x00080010, 0x00000800, 0x20000810, 0x00080000,
-0x00000810, 0x20080810, 0x00080800, 0x20000000,
-0x20000800, 0x20000010, 0x20080000, 0x00080810,
-0x00080000, 0x20000810, 0x20080010, 0x00000000,
-0x00000800, 0x00000010, 0x20080800, 0x20080010,
-0x20080810, 0x20080000, 0x20000000, 0x00000810,
-0x00000010, 0x00080800, 0x00080810, 0x20000800,
-0x00000810, 0x20000000, 0x20000800, 0x00080810,
-0x20080800, 0x00080010, 0x00000000, 0x20000800,
-0x20000000, 0x00000800, 0x20080010, 0x00080000,
-0x00080010, 0x20080810, 0x00080800, 0x00000010,
-0x20080810, 0x00080800, 0x00080000, 0x20000810,
-0x20000010, 0x20080000, 0x00080810, 0x00000000,
-0x00000800, 0x20000010, 0x20000810, 0x20080800,
-0x20080000, 0x00000810, 0x00000010, 0x20080010,
-
-/* nibble 6 */
-0x00001000, 0x00000080, 0x00400080, 0x00400001,
-0x00401081, 0x00001001, 0x00001080, 0x00000000,
-0x00400000, 0x00400081, 0x00000081, 0x00401000,
-0x00000001, 0x00401080, 0x00401000, 0x00000081,
-0x00400081, 0x00001000, 0x00001001, 0x00401081,
-0x00000000, 0x00400080, 0x00400001, 0x00001080,
-0x00401001, 0x00001081, 0x00401080, 0x00000001,
-0x00001081, 0x00401001, 0x00000080, 0x00400000,
-0x00001081, 0x00401000, 0x00401001, 0x00000081,
-0x00001000, 0x00000080, 0x00400000, 0x00401001,
-0x00400081, 0x00001081, 0x00001080, 0x00000000,
-0x00000080, 0x00400001, 0x00000001, 0x00400080,
-0x00000000, 0x00400081, 0x00400080, 0x00001080,
-0x00000081, 0x00001000, 0x00401081, 0x00400000,
-0x00401080, 0x00000001, 0x00001001, 0x00401081,
-0x00400001, 0x00401080, 0x00401000, 0x00001001,
-
-/* nibble 7 */
-0x08200020, 0x08208000, 0x00008020, 0x00000000,
-0x08008000, 0x00200020, 0x08200000, 0x08208020,
-0x00000020, 0x08000000, 0x00208000, 0x00008020,
-0x00208020, 0x08008020, 0x08000020, 0x08200000,
-0x00008000, 0x00208020, 0x00200020, 0x08008000,
-0x08208020, 0x08000020, 0x00000000, 0x00208000,
-0x08000000, 0x00200000, 0x08008020, 0x08200020,
-0x00200000, 0x00008000, 0x08208000, 0x00000020,
-0x00200000, 0x00008000, 0x08000020, 0x08208020,
-0x00008020, 0x08000000, 0x00000000, 0x00208000,
-0x08200020, 0x08008020, 0x08008000, 0x00200020,
-0x08208000, 0x00000020, 0x00200020, 0x08008000,
-0x08208020, 0x00200000, 0x08200000, 0x08000020,
-0x00208000, 0x00008020, 0x08008020, 0x08200000,
-0x00000020, 0x08208000, 0x00208020, 0x00000000,
-0x08000000, 0x08200020, 0x00008000, 0x00208020};
-
-unsigned long des_skb[8][64]={
-/* for C bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
-0x00000000,0x00000010,0x20000000,0x20000010,
-0x00010000,0x00010010,0x20010000,0x20010010,
-0x00000800,0x00000810,0x20000800,0x20000810,
-0x00010800,0x00010810,0x20010800,0x20010810,
-0x00000020,0x00000030,0x20000020,0x20000030,
-0x00010020,0x00010030,0x20010020,0x20010030,
-0x00000820,0x00000830,0x20000820,0x20000830,
-0x00010820,0x00010830,0x20010820,0x20010830,
-0x00080000,0x00080010,0x20080000,0x20080010,
-0x00090000,0x00090010,0x20090000,0x20090010,
-0x00080800,0x00080810,0x20080800,0x20080810,
-0x00090800,0x00090810,0x20090800,0x20090810,
-0x00080020,0x00080030,0x20080020,0x20080030,
-0x00090020,0x00090030,0x20090020,0x20090030,
-0x00080820,0x00080830,0x20080820,0x20080830,
-0x00090820,0x00090830,0x20090820,0x20090830,
-/* for C bits (numbered as per FIPS 46) 7 8 10 11 12 13 */
-0x00000000,0x02000000,0x00002000,0x02002000,
-0x00200000,0x02200000,0x00202000,0x02202000,
-0x00000004,0x02000004,0x00002004,0x02002004,
-0x00200004,0x02200004,0x00202004,0x02202004,
-0x00000400,0x02000400,0x00002400,0x02002400,
-0x00200400,0x02200400,0x00202400,0x02202400,
-0x00000404,0x02000404,0x00002404,0x02002404,
-0x00200404,0x02200404,0x00202404,0x02202404,
-0x10000000,0x12000000,0x10002000,0x12002000,
-0x10200000,0x12200000,0x10202000,0x12202000,
-0x10000004,0x12000004,0x10002004,0x12002004,
-0x10200004,0x12200004,0x10202004,0x12202004,
-0x10000400,0x12000400,0x10002400,0x12002400,
-0x10200400,0x12200400,0x10202400,0x12202400,
-0x10000404,0x12000404,0x10002404,0x12002404,
-0x10200404,0x12200404,0x10202404,0x12202404,
-/* for C bits (numbered as per FIPS 46) 14 15 16 17 19 20 */
-0x00000000,0x00000001,0x00040000,0x00040001,
-0x01000000,0x01000001,0x01040000,0x01040001,
-0x00000002,0x00000003,0x00040002,0x00040003,
-0x01000002,0x01000003,0x01040002,0x01040003,
-0x00000200,0x00000201,0x00040200,0x00040201,
-0x01000200,0x01000201,0x01040200,0x01040201,
-0x00000202,0x00000203,0x00040202,0x00040203,
-0x01000202,0x01000203,0x01040202,0x01040203,
-0x08000000,0x08000001,0x08040000,0x08040001,
-0x09000000,0x09000001,0x09040000,0x09040001,
-0x08000002,0x08000003,0x08040002,0x08040003,
-0x09000002,0x09000003,0x09040002,0x09040003,
-0x08000200,0x08000201,0x08040200,0x08040201,
-0x09000200,0x09000201,0x09040200,0x09040201,
-0x08000202,0x08000203,0x08040202,0x08040203,
-0x09000202,0x09000203,0x09040202,0x09040203,
-/* for C bits (numbered as per FIPS 46) 21 23 24 26 27 28 */
-0x00000000,0x00100000,0x00000100,0x00100100,
-0x00000008,0x00100008,0x00000108,0x00100108,
-0x00001000,0x00101000,0x00001100,0x00101100,
-0x00001008,0x00101008,0x00001108,0x00101108,
-0x04000000,0x04100000,0x04000100,0x04100100,
-0x04000008,0x04100008,0x04000108,0x04100108,
-0x04001000,0x04101000,0x04001100,0x04101100,
-0x04001008,0x04101008,0x04001108,0x04101108,
-0x00020000,0x00120000,0x00020100,0x00120100,
-0x00020008,0x00120008,0x00020108,0x00120108,
-0x00021000,0x00121000,0x00021100,0x00121100,
-0x00021008,0x00121008,0x00021108,0x00121108,
-0x04020000,0x04120000,0x04020100,0x04120100,
-0x04020008,0x04120008,0x04020108,0x04120108,
-0x04021000,0x04121000,0x04021100,0x04121100,
-0x04021008,0x04121008,0x04021108,0x04121108,
-/* for D bits (numbered as per FIPS 46) 1 2 3 4 5 6 */
-0x00000000,0x10000000,0x00010000,0x10010000,
-0x00000004,0x10000004,0x00010004,0x10010004,
-0x20000000,0x30000000,0x20010000,0x30010000,
-0x20000004,0x30000004,0x20010004,0x30010004,
-0x00100000,0x10100000,0x00110000,0x10110000,
-0x00100004,0x10100004,0x00110004,0x10110004,
-0x20100000,0x30100000,0x20110000,0x30110000,
-0x20100004,0x30100004,0x20110004,0x30110004,
-0x00001000,0x10001000,0x00011000,0x10011000,
-0x00001004,0x10001004,0x00011004,0x10011004,
-0x20001000,0x30001000,0x20011000,0x30011000,
-0x20001004,0x30001004,0x20011004,0x30011004,
-0x00101000,0x10101000,0x00111000,0x10111000,
-0x00101004,0x10101004,0x00111004,0x10111004,
-0x20101000,0x30101000,0x20111000,0x30111000,
-0x20101004,0x30101004,0x20111004,0x30111004,
-/* for D bits (numbered as per FIPS 46) 8 9 11 12 13 14 */
-0x00000000,0x08000000,0x00000008,0x08000008,
-0x00000400,0x08000400,0x00000408,0x08000408,
-0x00020000,0x08020000,0x00020008,0x08020008,
-0x00020400,0x08020400,0x00020408,0x08020408,
-0x00000001,0x08000001,0x00000009,0x08000009,
-0x00000401,0x08000401,0x00000409,0x08000409,
-0x00020001,0x08020001,0x00020009,0x08020009,
-0x00020401,0x08020401,0x00020409,0x08020409,
-0x02000000,0x0A000000,0x02000008,0x0A000008,
-0x02000400,0x0A000400,0x02000408,0x0A000408,
-0x02020000,0x0A020000,0x02020008,0x0A020008,
-0x02020400,0x0A020400,0x02020408,0x0A020408,
-0x02000001,0x0A000001,0x02000009,0x0A000009,
-0x02000401,0x0A000401,0x02000409,0x0A000409,
-0x02020001,0x0A020001,0x02020009,0x0A020009,
-0x02020401,0x0A020401,0x02020409,0x0A020409,
-/* for D bits (numbered as per FIPS 46) 16 17 18 19 20 21 */
-0x00000000,0x00000100,0x00080000,0x00080100,
-0x01000000,0x01000100,0x01080000,0x01080100,
-0x00000010,0x00000110,0x00080010,0x00080110,
-0x01000010,0x01000110,0x01080010,0x01080110,
-0x00200000,0x00200100,0x00280000,0x00280100,
-0x01200000,0x01200100,0x01280000,0x01280100,
-0x00200010,0x00200110,0x00280010,0x00280110,
-0x01200010,0x01200110,0x01280010,0x01280110,
-0x00000200,0x00000300,0x00080200,0x00080300,
-0x01000200,0x01000300,0x01080200,0x01080300,
-0x00000210,0x00000310,0x00080210,0x00080310,
-0x01000210,0x01000310,0x01080210,0x01080310,
-0x00200200,0x00200300,0x00280200,0x00280300,
-0x01200200,0x01200300,0x01280200,0x01280300,
-0x00200210,0x00200310,0x00280210,0x00280310,
-0x01200210,0x01200310,0x01280210,0x01280310,
-/* for D bits (numbered as per FIPS 46) 22 23 24 25 27 28 */
-0x00000000,0x04000000,0x00040000,0x04040000,
-0x00000002,0x04000002,0x00040002,0x04040002,
-0x00002000,0x04002000,0x00042000,0x04042000,
-0x00002002,0x04002002,0x00042002,0x04042002,
-0x00000020,0x04000020,0x00040020,0x04040020,
-0x00000022,0x04000022,0x00040022,0x04040022,
-0x00002020,0x04002020,0x00042020,0x04042020,
-0x00002022,0x04002022,0x00042022,0x04042022,
-0x00000800,0x04000800,0x00040800,0x04040800,
-0x00000802,0x04000802,0x00040802,0x04040802,
-0x00002800,0x04002800,0x00042800,0x04042800,
-0x00002802,0x04002802,0x00042802,0x04042802,
-0x00000820,0x04000820,0x00040820,0x04040820,
-0x00000822,0x04000822,0x00040822,0x04040822,
-0x00002820,0x04002820,0x00042820,0x04042820,
-0x00002822,0x04002822,0x00042822,0x04042822,
-};
-
-
-
-
-
-
-
-/* The changes to this macro may help or hinder, depending on the
- * compiler and the achitecture. gcc2 always seems to do well :-).
- * Inspired by Dana How <how(a)isl.stanford.edu>
- * DO NOT use the alternative version on machines with 8 byte longs. */
-
-#ifdef ALT_ECB
-#define D_ENCRYPT(L,R,S) \
- u=((R^s[S ])<<2); \
- t= R^s[S+1]; \
- t=((t>>2)+(t<<30)); \
- L^= \
- *(unsigned long *)(des_SP+0x0100+((t )&0xfc))+ \
- *(unsigned long *)(des_SP+0x0300+((t>> 8)&0xfc))+ \
- *(unsigned long *)(des_SP+0x0500+((t>>16)&0xfc))+ \
- *(unsigned long *)(des_SP+0x0700+((t>>24)&0xfc))+ \
- *(unsigned long *)(des_SP+ ((u )&0xfc))+ \
- *(unsigned long *)(des_SP+0x0200+((u>> 8)&0xfc))+ \
- *(unsigned long *)(des_SP+0x0400+((u>>16)&0xfc))+ \
- *(unsigned long *)(des_SP+0x0600+((u>>24)&0xfc));
-#else /* original version */
-#define D_ENCRYPT(L,R,S) \
- u=(R^s[S ]); \
- t=R^s[S+1]; \
- t=((t>>4)+(t<<28)); \
- L^= des_SPtrans_x[1][(t )&0x3f]| \
- des_SPtrans_x[3][(t>> 8)&0x3f]| \
- des_SPtrans_x[5][(t>>16)&0x3f]| \
- des_SPtrans_x[7][(t>>24)&0x3f]| \
- des_SPtrans_x[0][(u )&0x3f]| \
- des_SPtrans_x[2][(u>> 8)&0x3f]| \
- des_SPtrans_x[4][(u>>16)&0x3f]| \
- des_SPtrans_x[6][(u>>24)&0x3f];
-#endif
-
- /* IP and FP
- * The problem is more of a geometric problem that random bit fiddling.
- 0 1 2 3 4 5 6 7 62 54 46 38 30 22 14 6
- 8 9 10 11 12 13 14 15 60 52 44 36 28 20 12 4
- 16 17 18 19 20 21 22 23 58 50 42 34 26 18 10 2
- 24 25 26 27 28 29 30 31 to 56 48 40 32 24 16 8 0
-
- 32 33 34 35 36 37 38 39 63 55 47 39 31 23 15 7
- 40 41 42 43 44 45 46 47 61 53 45 37 29 21 13 5
- 48 49 50 51 52 53 54 55 59 51 43 35 27 19 11 3
- 56 57 58 59 60 61 62 63 57 49 41 33 25 17 9 1
-
- The output has been subject to swaps of the form
- 0 1 -> 3 1 but the odd and even bits have been put into
- 2 3 2 0
- different words. The main trick is to remember that
- t=((l>>size)^r)&(mask);
- r^=t;
- l^=(t<<size);
- can be used to swap and move bits between words.
-
- So l = 0 1 2 3 r = 16 17 18 19
- 4 5 6 7 20 21 22 23
- 8 9 10 11 24 25 26 27
- 12 13 14 15 28 29 30 31
- becomes (for size == 2 and mask == 0x3333)
- t = 2^16 3^17 -- -- l = 0 1 16 17 r = 2 3 18 19
- 6^20 7^21 -- -- 4 5 20 21 6 7 22 23
- 10^24 11^25 -- -- 8 9 24 25 10 11 24 25
- 14^28 15^29 -- -- 12 13 28 29 14 15 28 29
-
- Thanks for hints from Richard Outerbridge - he told me IP&FP
- could be done in 15 xor, 10 shifts and 5 ands.
- When I finally started to think of the problem in 2D
- I first got ~42 operations without xors. When I remembered
- how to use xors :-) I got it to its final state.
- */
-#define PERM_OP(a,b,t,n,m) ((t)=((((a)>>(n))^(b))&(m)),\
- (b)^=(t),\
- (a)^=((t)<<(n)))
-
-
-void
-perl_des_crypt( des_cblock input, des_cblock output, des_ks ks, int encrypt )
-{
- unsigned long l,r,t,u;
-#ifdef ALT_ECB
- unsigned char *des_SP=(unsigned char *)des_SPtrans_x;
-#endif
- static int i;
- static unsigned long * s;
- unsigned char * ptr;
-
- c2l( input, l ); /* get endian free long from input block */
- c2l( input, r ); /* get endian free long from input block */
-
- /* do IP */
- PERM_OP(r,l,t, 4,0x0f0f0f0f);
- PERM_OP(l,r,t,16,0x0000ffff);
- PERM_OP(r,l,t, 2,0x33333333);
- PERM_OP(l,r,t, 8,0x00ff00ff);
- PERM_OP(r,l,t, 1,0x55555555);
- /* r and l are reversed - remember that :-) - fix
- * it in the next step */
-
- /* Things have been modified so that the initial rotate is
- * done outside the loop. This required the
- * des_SPtrans_x values in sp.h to be rotated 1 bit to the right.
- * One perl script later and things have a 5% speed up on a sparc2.
- * Thanks to Richard Outerbridge <71755.204(a)CompuServe.COM>
- * for pointing this out. */
- t=(r<<1)|(r>>31);
- r=(l<<1)|(l>>31);
- l=t;
-
- /* clear the top bits on machines with 8byte longs */
- l&=0xffffffff;
- r&=0xffffffff;
-
- s=(unsigned long *)ks;
- /* I don't know if it is worth the effort of loop unrolling the
- * inner loop */
- if (encrypt)
- {
- for (i=0; i<32; i+=4)
- {
- D_ENCRYPT(l,r,i+0); /* 1 */
- D_ENCRYPT(r,l,i+2); /* 2 */
- }
- }
- else
- {
- for (i=30; i>0; i-=4)
- {
- D_ENCRYPT(l,r,i-0); /* 16 */
- D_ENCRYPT(r,l,i-2); /* 15 */
- }
- }
- l=(l>>1)|(l<<31);
- r=(r>>1)|(r<<31);
- /* clear the top bits on machines with 8byte longs */
- l&=0xffffffff;
- r&=0xffffffff;
-
- /* swap l and r
- * we will not do the swap so just remember they are
- * reversed for the rest of the subroutine
- * luckily FP fixes this problem :-) */
-
- PERM_OP(r,l,t, 1,0x55555555);
- PERM_OP(l,r,t, 8,0x00ff00ff);
- PERM_OP(r,l,t, 2,0x33333333);
- PERM_OP(l,r,t,16,0x0000ffff);
- PERM_OP(r,l,t, 4,0x0f0f0f0f);
-
- l2c( l, output ); /* get endian free long from input block */
- l2c( r, output ); /* get endian free long from input block */
-}
-
-void
-perl_des_expand_key(des_user_key userKey, des_ks ks)
-{
- unsigned long c,d,t,s;
- unsigned char * in;
- unsigned long * k;
- int i;
- static unsigned char shifts2[16]={0,0,1,1,1,1,1,1,0,1,1,1,1,1,1,0};
-
- k=(unsigned long *)ks;
- in=(unsigned char *)userKey;
-
- c2l(in,c);
- c2l(in,d);
-
-/* do PC1 in 60 simple operations */
-/* PERM_OP(d,c,t,4,0x0f0f0f0f);
- HPERM_OP(c,t,-2, 0xcccc0000);
- HPERM_OP(c,t,-1, 0xaaaa0000);
- HPERM_OP(c,t, 8, 0x00ff0000);
- HPERM_OP(c,t,-1, 0xaaaa0000);
- HPERM_OP(d,t,-8, 0xff000000);
- HPERM_OP(d,t, 8, 0x00ff0000);
- HPERM_OP(d,t, 2, 0x33330000);
- d=((d&0x00aa00aa)<<7)|((d&0x55005500)>>7)|(d&0xaa55aa55);
- d=(d>>8)|((c&0xf0000000)>>4);
- c&=0x0fffffff; */
-
- /* I now do it in 47 simple operations :-)
- * Thanks to John Fletcher (john_fletcher(a)lccmail.ocf.llnl.gov)
- * for the inspiration. :-) */
- PERM_OP (d,c,t,4,0x0f0f0f0f);
- HPERM_OP(c,t,-2,0xcccc0000);
- HPERM_OP(d,t,-2,0xcccc0000);
- PERM_OP (d,c,t,1,0x55555555);
- PERM_OP (c,d,t,8,0x00ff00ff);
- PERM_OP (d,c,t,1,0x55555555);
- d= (((d&0x000000ff)<<16)| (d&0x0000ff00) |
- ((d&0x00ff0000)>>16)|((c&0xf0000000)>>4));
- c&=0x0fffffff;
-
- for (i=0; i<ITERATIONS; i++)
- {
- if (shifts2[i])
- { c=((c>>2)|(c<<26)); d=((d>>2)|(d<<26)); }
- else
- { c=((c>>1)|(c<<27)); d=((d>>1)|(d<<27)); }
- c&=0x0fffffff;
- d&=0x0fffffff;
- /* could be a few less shifts but I am to lazy at this
- * point in time to investigate */
- s=des_skb[0][ (c )&0x3f ]|
- des_skb[1][((c>> 6)&0x03)|((c>> 7)&0x3c)]|
- des_skb[2][((c>>13)&0x0f)|((c>>14)&0x30)]|
- des_skb[3][((c>>20)&0x01)|((c>>21)&0x06) |
- ((c>>22)&0x38)];
-
- t=des_skb[4][ (d )&0x3f ]|
- des_skb[5][((d>> 7)&0x03)|((d>> 8)&0x3c)]|
- des_skb[6][ (d>>15)&0x3f ]|
- des_skb[7][((d>>21)&0x0f)|((d>>22)&0x30)];
-
- /* table contained 0213 4657 */
- *(k++)=((t<<16)|(s&0x0000ffff))&0xffffffff;
- s= ((s>>16)|(t&0xffff0000));
-
- s=(s<<4)|(s>>28);
- *(k++)=s&0xffffffff;
- }
-}
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/des.h b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/des.h
deleted file mode 100644
index bb6ad3c..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/des.h
+++ /dev/null
@@ -1,7 +0,0 @@
-typedef unsigned char des_user_key[8];
-typedef unsigned char des_cblock[8];
-typedef unsigned long des_ks[32];
-
-void des_crypt( des_cblock in, des_cblock out, des_ks key, int encrypt );
-void des_expand_key( des_user_key userKey, des_ks key );
-
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/test.pl b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/test.pl
deleted file mode 100644
index cb4b2bd..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/test.pl
+++ /dev/null
@@ -1,370 +0,0 @@
-BEGIN { push @INC, qw(. .. ../lib ../../lib ../../../lib) }
-
-#
-# Extended testing is Copyright (C) 2000 W3Works, LLC
-# All rights reserved.
-#
-#
-# Copyright (C) 1995, 1996 Systemics Ltd (http://www.systemics.com/)
-# All rights reserved.
-#
-
-package Crypt::DES;
-
-require Exporter;
-require DynaLoader;
-use vars qw($VERSION @ISA @EXPORT @EXPORT_OK);
-
-@ISA = (Exporter, DynaLoader);
-
-# Items to export into callers namespace by default
-@EXPORT = qw();
-
-# Other items we are prepared to export if requested
-@EXPORT_OK = qw();
-
-$VERSION = '2.03';
-bootstrap Crypt::DES;
-
-use strict;
-use Carp;
-
-sub usage
-{
- my ($package, $filename, $line, $subr) = caller(1);
- $Carp::CarpLevel = 2;
- croak "Usage: $subr(@_)";
-}
-
-sub blocksize { 8; }
-sub keysize { 8; }
-
-sub new
-{
- usage("new DES key") unless @_ == 2;
- my($type,$key) = @_;
-
- my $self = {};
- bless $self, $type;
-
- $self->{'ks'} = Crypt::DES::expand_key($key);
-
- return $self;
-}
-
-sub encrypt
-{
- usage("encrypt data[8 bytes]") unless @_ == 2;
-
- my ($self,$data) = @_;
- return Crypt::DES::crypt($data, $data, $self->{'ks'}, 1);
-}
-
-sub decrypt
-{
- usage("decrypt data[8 bytes]") unless @_ == 2;
-
- my ($self,$data) = @_;
- return Crypt::DES::crypt($data, $data, $self->{'ks'}, 0);
-}
-
-
-
-
-package main;
-
-use Data::Dumper;
-use Benchmark;
-
-#
-# Adding the above tests into this program is
-# left as an exercise for the reader
-#
-
-#
-# Some test values...
-#
-# KEY PLAINTEXT CIPHERTEXT
-my $testval = [
- ['0101010101010101', '95f8a5e5dd31d900', '8000000000000000'],
- ['0101010101010101', 'dd7f121ca5015619', '4000000000000000'],
- ['0101010101010101', '2e8653104f3834ea', '2000000000000000'],
- ['0101010101010101', '4bd388ff6cd81d4f', '1000000000000000'],
- ['0101010101010101', '20b9e767b2fb1456', '0800000000000000'],
- ['0101010101010101', '55579380d77138ef', '0400000000000000'],
- ['0101010101010101', '6cc5defaaf04512f', '0200000000000000'],
- ['0101010101010101', '0d9f279ba5d87260', '0100000000000000'],
- ['0101010101010101', 'd9031b0271bd5a0a', '0080000000000000'],
- ['0101010101010101', '424250b37c3dd951', '0040000000000000'],
- ['0101010101010101', 'b8061b7ecd9a21e5', '0020000000000000'],
- ['0101010101010101', 'f15d0f286b65bd28', '0010000000000000'],
- ['0101010101010101', 'add0cc8d6e5deba1', '0008000000000000'],
- ['0101010101010101', 'e6d5f82752ad63d1', '0004000000000000'],
- ['0101010101010101', 'ecbfe3bd3f591a5e', '0002000000000000'],
- ['0101010101010101', 'f356834379d165cd', '0001000000000000'],
- ['0101010101010101', '2b9f982f20037fa9', '0000800000000000'],
- ['0101010101010101', '889de068a16f0be6', '0000400000000000'],
- ['0101010101010101', 'e19e275d846a1298', '0000200000000000'],
- ['0101010101010101', '329a8ed523d71aec', '0000100000000000'],
- ['0101010101010101', 'e7fce22557d23c97', '0000080000000000'],
- ['0101010101010101', '12a9f5817ff2d65d', '0000040000000000'],
- ['0101010101010101', 'a484c3ad38dc9c19', '0000020000000000'],
- ['0101010101010101', 'fbe00a8a1ef8ad72', '0000010000000000'],
- ['0101010101010101', '750d079407521363', '0000008000000000'],
- ['0101010101010101', '64feed9c724c2faf', '0000004000000000'],
- ['0101010101010101', 'f02b263b328e2b60', '0000002000000000'],
- ['0101010101010101', '9d64555a9a10b852', '0000001000000000'],
- ['0101010101010101', 'd106ff0bed5255d7', '0000000800000000'],
- ['0101010101010101', 'e1652c6b138c64a5', '0000000400000000'],
- ['0101010101010101', 'e428581186ec8f46', '0000000200000000'],
- ['0101010101010101', 'aeb5f5ede22d1a36', '0000000100000000'],
- ['0101010101010101', 'e943d7568aec0c5c', '0000000080000000'],
- ['0101010101010101', 'df98c8276f54b04b', '0000000040000000'],
- ['0101010101010101', 'b160e4680f6c696f', '0000000020000000'],
- ['0101010101010101', 'fa0752b07d9c4ab8', '0000000010000000'],
- ['0101010101010101', 'ca3a2b036dbc8502', '0000000008000000'],
- ['0101010101010101', '5e0905517bb59bcf', '0000000004000000'],
- ['0101010101010101', '814eeb3b91d90726', '0000000002000000'],
- ['0101010101010101', '4d49db1532919c9f', '0000000001000000'],
- ['0101010101010101', '25eb5fc3f8cf0621', '0000000000800000'],
- ['0101010101010101', 'ab6a20c0620d1c6f', '0000000000400000'],
- ['0101010101010101', '79e90dbc98f92cca', '0000000000200000'],
- ['0101010101010101', '866ecedd8072bb0e', '0000000000100000'],
- ['0101010101010101', '8b54536f2f3e64a8', '0000000000080000'],
- ['0101010101010101', 'ea51d3975595b86b', '0000000000040000'],
- ['0101010101010101', 'caffc6ac4542de31', '0000000000020000'],
- ['0101010101010101', '8dd45a2ddf90796c', '0000000000010000'],
- ['0101010101010101', '1029d55e880ec2d0', '0000000000008000'],
- ['0101010101010101', '5d86cb23639dbea9', '0000000000004000'],
- ['0101010101010101', '1d1ca853ae7c0c5f', '0000000000002000'],
- ['0101010101010101', 'ce332329248f3228', '0000000000001000'],
- ['0101010101010101', '8405d1abe24fb942', '0000000000000800'],
- ['0101010101010101', 'e643d78090ca4207', '0000000000000400'],
- ['0101010101010101', '48221b9937748a23', '0000000000000200'],
- ['0101010101010101', 'dd7c0bbd61fafd54', '0000000000000100'],
- ['0101010101010101', '2fbc291a570db5c4', '0000000000000080'],
- ['0101010101010101', 'e07c30d7e4e26e12', '0000000000000040'],
- ['0101010101010101', '0953e2258e8e90a1', '0000000000000020'],
- ['0101010101010101', '5b711bc4ceebf2ee', '0000000000000010'],
- ['0101010101010101', 'cc083f1e6d9e85f6', '0000000000000008'],
- ['0101010101010101', 'd2fd8867d50d2dfe', '0000000000000004'],
- ['0101010101010101', '06e7ea22ce92708f', '0000000000000002'],
- ['0101010101010101', '166b40b44aba4bd6', '0000000000000001'],
- ['8001010101010101', '0000000000000000', '95a8d72813daa94d'],
- ['4001010101010101', '0000000000000000', '0eec1487dd8c26d5'],
- ['2001010101010101', '0000000000000000', '7ad16ffb79c45926'],
- ['1001010101010101', '0000000000000000', 'd3746294ca6a6cf3'],
- ['0801010101010101', '0000000000000000', '809f5f873c1fd761'],
- ['0401010101010101', '0000000000000000', 'c02faffec989d1fc'],
- ['0201010101010101', '0000000000000000', '4615aa1d33e72f10'],
- ['0180010101010101', '0000000000000000', '2055123350c00858'],
- ['0140010101010101', '0000000000000000', 'df3b99d6577397c8'],
- ['0120010101010101', '0000000000000000', '31fe17369b5288c9'],
- ['0110010101010101', '0000000000000000', 'dfdd3cc64dae1642'],
- ['0108010101010101', '0000000000000000', '178c83ce2b399d94'],
- ['0104010101010101', '0000000000000000', '50f636324a9b7f80'],
- ['0102010101010101', '0000000000000000', 'a8468ee3bc18f06d'],
- ['0101800101010101', '0000000000000000', 'a2dc9e92fd3cde92'],
- ['0101400101010101', '0000000000000000', 'cac09f797d031287'],
- ['0101200101010101', '0000000000000000', '90ba680b22aeb525'],
- ['0101100101010101', '0000000000000000', 'ce7a24f350e280b6'],
- ['0101080101010101', '0000000000000000', '882bff0aa01a0b87'],
- ['0101040101010101', '0000000000000000', '25610288924511c2'],
- ['0101020101010101', '0000000000000000', 'c71516c29c75d170'],
- ['0101018001010101', '0000000000000000', '5199c29a52c9f059'],
- ['0101014001010101', '0000000000000000', 'c22f0a294a71f29f'],
- ['0101012001010101', '0000000000000000', 'ee371483714c02ea'],
- ['0101011001010101', '0000000000000000', 'a81fbd448f9e522f'],
- ['0101010801010101', '0000000000000000', '4f644c92e192dfed'],
- ['0101010401010101', '0000000000000000', '1afa9a66a6df92ae'],
- ['0101010201010101', '0000000000000000', 'b3c1cc715cb879d8'],
- ['0101010180010101', '0000000000000000', '19d032e64ab0bd8b'],
- ['0101010140010101', '0000000000000000', '3cfaa7a7dc8720dc'],
- ['0101010120010101', '0000000000000000', 'b7265f7f447ac6f3'],
- ['0101010110010101', '0000000000000000', '9db73b3c0d163f54'],
- ['0101010108010101', '0000000000000000', '8181b65babf4a975'],
- ['0101010104010101', '0000000000000000', '93c9b64042eaa240'],
- ['0101010102010101', '0000000000000000', '5570530829705592'],
- ['0101010101800101', '0000000000000000', '8638809e878787a0'],
- ['0101010101400101', '0000000000000000', '41b9a79af79ac208'],
- ['0101010101200101', '0000000000000000', '7a9be42f2009a892'],
- ['0101010101100101', '0000000000000000', '29038d56ba6d2745'],
- ['0101010101080101', '0000000000000000', '5495c6abf1e5df51'],
- ['0101010101040101', '0000000000000000', 'ae13dbd561488933'],
- ['0101010101020101', '0000000000000000', '024d1ffa8904e389'],
- ['0101010101018001', '0000000000000000', 'd1399712f99bf02e'],
- ['0101010101014001', '0000000000000000', '14c1d7c1cffec79e'],
- ['0101010101012001', '0000000000000000', '1de5279dae3bed6f'],
- ['0101010101011001', '0000000000000000', 'e941a33f85501303'],
- ['0101010101010801', '0000000000000000', 'da99dbbc9a03f379'],
- ['0101010101010401', '0000000000000000', 'b7fc92f91d8e92e9'],
- ['0101010101010201', '0000000000000000', 'ae8e5caa3ca04e85'],
- ['0101010101010180', '0000000000000000', '9cc62df43b6eed74'],
- ['0101010101010140', '0000000000000000', 'd863dbb5c59a91a0'],
- ['0101010101010120', '0000000000000000', 'a1ab2190545b91d7'],
- ['0101010101010110', '0000000000000000', '0875041e64c570f7'],
- ['0101010101010108', '0000000000000000', '5a594528bebef1cc'],
- ['0101010101010104', '0000000000000000', 'fcdb3291de21f0c0'],
- ['0101010101010102', '0000000000000000', '869efd7f9f265a09'],
- ['1046913489980131', '0000000000000000', '88d55e54f54c97b4'],
- ['1007103489988020', '0000000000000000', '0c0cc00c83ea48fd'],
- ['10071034c8980120', '0000000000000000', '83bc8ef3a6570183'],
- ['1046103489988020', '0000000000000000', 'df725dcad94ea2e9'],
- ['1086911519190101', '0000000000000000', 'e652b53b550be8b0'],
- ['1086911519580101', '0000000000000000', 'af527120c485cbb0'],
- ['5107b01519580101', '0000000000000000', '0f04ce393db926d5'],
- ['1007b01519190101', '0000000000000000', 'c9f00ffc74079067'],
- ['3107915498080101', '0000000000000000', '7cfd82a593252b4e'],
- ['3107919498080101', '0000000000000000', 'cb49a2f9e91363e3'],
- ['10079115b9080140', '0000000000000000', '00b588be70d23f56'],
- ['3107911598090140', '0000000000000000', '406a9a6ab43399ae'],
- ['1007d01589980101', '0000000000000000', '6cb773611dca9ada'],
- ['9107911589980101', '0000000000000000', '67fd21c17dbb5d70'],
- ['9107d01589190101', '0000000000000000', '9592cb4110430787'],
- ['1007d01598980120', '0000000000000000', 'a6b7ff68a318ddd3'],
- ['1007940498190101', '0000000000000000', '4d102196c914ca16'],
- ['0107910491190401', '0000000000000000', '2dfa9f4573594965'],
- ['0107910491190101', '0000000000000000', 'b46604816c0e0774'],
- ['0107940491190401', '0000000000000000', '6e7e6221a4f34e87'],
- ['19079210981a0101', '0000000000000000', 'aa85e74643233199'],
- ['1007911998190801', '0000000000000000', '2e5a19db4d1962d6'],
- ['10079119981a0801', '0000000000000000', '23a866a809d30894'],
- ['1007921098190101', '0000000000000000', 'd812d961f017d320'],
- ['100791159819010b', '0000000000000000', '055605816e58608f'],
- ['1004801598190101', '0000000000000000', 'abd88e8b1b7716f1'],
- ['1004801598190102', '0000000000000000', '537ac95be69da1e1'],
- ['1004801598190108', '0000000000000000', 'aed0f6ae3c25cdd8'],
- ['1002911598100104', '0000000000000000', 'b3e35a5ee53e7b8d'],
- ['1002911598190104', '0000000000000000', '61c79c71921a2ef8'],
- ['1002911598100201', '0000000000000000', 'e2f5728f0995013c'],
- ['1002911698100101', '0000000000000000', '1aeac39a61f0a464'],
- ['7ca110454a1a6e57', '01a1d6d039776742', '690f5b0d9a26939b'],
- ['0131d9619dc1376e', '5cd54ca83def57da', '7a389d10354bd271'],
- ['07a1133e4a0b2686', '0248d43806f67172', '868ebb51cab4599a'],
- ['3849674c2602319e', '51454b582ddf440a', '7178876e01f19b2a'],
- ['04b915ba43feb5b6', '42fd443059577fa2', 'af37fb421f8c4095'],
- ['0113b970fd34f2ce', '059b5e0851cf143a', '86a560f10ec6d85b'],
- ['0170f175468fb5e6', '0756d8e0774761d2', '0cd3da020021dc09'],
- ['43297fad38e373fe', '762514b829bf486a', 'ea676b2cb7db2b7a'],
- ['07a7137045da2a16', '3bdd119049372802', 'dfd64a815caf1a0f'],
- ['04689104c2fd3b2f', '26955f6835af609a', '5c513c9c4886c088'],
- ['37d06bb516cb7546', '164d5e404f275232', '0a2aeeae3ff4ab77'],
- ['1f08260d1ac2465e', '6b056e18759f5cca', 'ef1bf03e5dfa575a'],
- ['584023641aba6176', '004bd6ef09176062', '88bf0db6d70dee56'],
- ['025816164629b007', '480d39006ee762f2', 'a1f9915541020b56'],
- ['49793ebc79b3258f', '437540c8698f3cfa', '6fbf1cafcffd0556'],
- ['4fb05e1515ab73a7', '072d43a077075292', '2f22e49bab7ca1ac'],
- ['49e95d6d4ca229bf', '02fe55778117f12a', '5a6b612cc26cce4a'],
- ['018310dc409b26d6', '1d9d5c5018f728c2', '5f4c038ed12b2e41'],
- ['1c587f1c13924fef', '305532286d6f295a', '63fac0d034d9f793'],
- ];
-
-my $i = 1;
-my $fail = 0;
-my $tt = (scalar(@{$testval}) *2);
-print "1..$tt\n";
-my $t0 = new Benchmark;
-foreach my $tst (@{$testval}) {
- my ($anot,$bnot) = (0,0);
- foreach(@{$tst}) { $_ = pack("H*",$_) }
-
- my $cipher = new Crypt::DES($tst->[0]);
- $anot = 1 unless ($cipher->encrypt($tst->[1]) eq $tst->[2]);
- if($anot) {
- #print "not ";
- $fail++;
- }
- $i++;
-
- $bnot = 1 unless ($cipher->decrypt($tst->[2]) eq $tst->[1]);
- if($bnot) {
- #print "not ";
- $fail++;
- }
-;
- $i++;
-}
-my $t1 = new Benchmark;
-
-my $suc = $tt - $fail;
-my $fp = sprintf("%0.2f",(($tt / $suc) * 100)) unless $suc == 0;
-if($suc == 0) { $fp = '0.00' }
-my $td0 = timediff($t1,$t0);
-my $ts0 = timestr($td0);
-print "$tt basic tests ran in $ts0\n";
-print "$suc of $tt tests passed ($fp\%)\n";
-if($fail > 0) {
- print "Not all tests successful. Please attempt to rebuild the package\n";
-} else {
- print "\nRunning speed tests...\n";
- print "\nnon-cached cipher speed test. 5000 encrypt iterations\n";
- my $t2 = new Benchmark;
- for(1..5000) {
- my $cipher = new Crypt::DES(pack("H*",'1c587f1c13924fef'));
- $cipher->encrypt(pack("H*",'305532286d6f295a'));
- }
- my $t3 = new Benchmark;
- my $td1 = timediff($t3,$t2);
- my $ts1 = timestr($td1);
- print "$ts1\nok 343\n";
-
- print "\nnon-cached cipher speed test. 5000 decrypt iterations\n";
- my $t4 = new Benchmark;
- for(1..5000) {
- my $cipher = new Crypt::DES(pack("H*",'1c587f1c13924fef'));
- $cipher->decrypt(pack("H*",'63fac0d034d9f793'));
- }
- my $t5 = new Benchmark;
- my $td2 = timediff($t5,$t4);
- my $ts2 = timestr($td2);
- print "$ts2\nok 344\n";
-
- print "\ncached cipher speed test. 10000 encrypt iterations\n";
- {
- my $t6 = new Benchmark;
- my $cipher = new Crypt::DES(pack("H*",'1c587f1c13924fef'));
- for(1..10000) {
- $cipher->encrypt(pack("H*",'305532286d6f295a'));
- }
- my $t7 = new Benchmark;
- my $td3 = timediff($t7,$t6);
- my $ts3 = timestr($td3);
- print "$ts3\nok 345\n";
- }
-
- print "\ncached cipher speed test. 10000 decrypt iterations\n";
- {
- my $t8 = new Benchmark;
- my $cipher = new Crypt::DES(pack("H*",'1c587f1c13924fef'));
- for(1..10000) {
- $cipher->decrypt(pack("H*",'63fac0d034d9f793'));
- }
- my $t9 = new Benchmark;
- my $td4 = timediff($t9,$t8);
- my $ts4 = timestr($td4);
- print "$ts4\nok 346\n";
- }
-}
-
-print "\nTesting Cipher Block Chaining..\n";
-eval 'use Crypt::CBC';
-
-if(!$@) {
- if($Crypt::CBC::VERSION < 1.22) {
- $@ = "CBC mode requires Crypt::CBC version 1.22 or higher.";
- } else {
-
- my $cipher = new Crypt::CBC(pack("H*","0123456789ABCDEF"),"DES");
- my $ciphertext = $cipher->encrypt(pack("H*","37363534333231204E6F77206973207468652074696D6520666F722000"));
- my $plaintext = $cipher->decrypt($ciphertext);
-
- if($plaintext ne "7654321 Now is the time for \0") { print "not "; }
- print "ok 347 - CBC Mode\n";
- }
-} # end no errors
-
-if($@) {
- print "Error (probably harmless):\n$@\n";
-}
-
-print "\nFinished with tests\n\n";
diff --git a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/typemap b/monitoring/PerlModules/CPAN/Crypt-DES-2.03/typemap
deleted file mode 100644
index 02522e8..0000000
--- a/monitoring/PerlModules/CPAN/Crypt-DES-2.03/typemap
+++ /dev/null
@@ -1 +0,0 @@
-TYPEMAP
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/BUILD b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/BUILD
deleted file mode 100644
index e28839a..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/BUILD
+++ /dev/null
@@ -1,47 +0,0 @@
-# Macros
-
-#control upversion
-%define external_package 1
-
-%define cvs_package PerlModules/CPAN/DBD-Pg-0.95
-
-
-# Package specific stuff
-Name: DBD-Pg
-Version: 1.1.0
-Release: 2
-Packager: Dave Parker <dparker(a)nocpulse.com>
-Summary: Perl DBD-Pg library (postgresql)
-Source: %name-%PACKAGE_VERSION.tar.gz
-BuildArch: i386
-Requires: perl
-Group: unsorted
-License: GPL or Artistic
-Vendor: Red Hat, Inc.
-BuildRoot: %{_tmppath}/%cvs_package
-Prefix: %{_our_prefix}
-
-%description
-
-Provides DBD-Pg library
-
-
-
-%prep
-%entirely_abstract_build_step
-
-%build
-export POSTGRES_INCLUDE="/usr/include/pgsql/"
-export POSTGRES_LIB="/usr/lib/pgsql/"
-%makefile_build
-
-%install
-cd $RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
-%makefile_install
-%point_scripts_to_correct_perl
-%make_file_list
-
-%files -f %{name}-%{version}-%{release}-filelist
-
-%clean
-%abstract_clean_script
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Changes b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Changes
deleted file mode 100644
index b9ac365..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Changes
+++ /dev/null
@@ -1,238 +0,0 @@
-Revision history for Perl extension DBD-Pg.
-
-0.95 Jul 10, 2000
- - add Win32 port from Bob Kline <bkline(a)rksystems.com>.
-
-0.94 Jul 07, 2000
- - applied patch from Rudy Lippan <almighty(a)randomc.com>
- which fixes a memory-leak with failed connections.
- - applied patch from Hein Roehrig <hein(a)acm.org>
- which fixes a bug with escaping a backslash except for
- octal presentation
- - applied patch from Francis J. Lacoste <francis.lacoste(a)iNsu.COM
- which fixes a segmentation fault when all binded parameters are NULL
- - adapt test.pl to avoid warnings with postgresql-7.0
- - added support for 'COPY FROM STDIN' and 'COPY TO STDOUT'
- - added patch from Mark Stosberg <mark(a)summersault.com>
- to enhance the table_attributes subroutine
-
-0.93 Sep 29, 1999
- - it is required now to set the environment variables POSTGRES_INCLUDE
- and POSTGRES_LIB for compiling the module.
- - add Win32 port from Bob Kline <bkline(a)rksystems.com>.
- - support for all large-object functions via the func
- interface.
- - fixed bug with placeholders and casts spotted by
- mschout(a)gkg.net
- - replaced the method attributes by the method table_attributes,
- from Scott Williams <scott(a)james.com>.
- - fix type definitions for type_info_all().
- bug spotted by "carlos" <emarcet(a)intramed.net.ar>.
- - now the Pg-specific quote() method also evaluates the
- data-type paramater.
-
-0.92 Jun 16, 1999
- - proposal from Philip Warner <pjw(a)rhyme.com.au>:
- increase BUFSIZE from 1024 to 32768 in order to improve
- I/O performance.
- - bug-fix in Makefile.PL for $POSTGRES_HOME not defined
- spotted by mdalphin(a)amgen.com (Mark Dalphin)
- - bug-fix for data-type datetime in type_info_all
- spotted by Alan Grover <awgrover(a)iconnect-inc.com>
- - bug-fix for escaped 's spotted by Hankin <hankin(a)consultco.com>
- - removed 'large objects' related tests from test.pl
-
-0.91 Feb 14, 1999
- - removed restriction for commercial use in copyright
- - corrected DATA_TYPE in type_info_all()
-
-0.90 Jan 15, 1998
- - discard parameter authtype from connect string
- - remove work-around for bug in the large object
- interface of postgresql
-
-0.89 Nov 05, 1998
- - bug-fix from Jan Iven <j.iven(a)rz.uni-sb.de>:
- fix problem with quoting Null in bind variables.
-
-0.88 Oct 10, 1998
- - fixed blob_read
- - suppressed warning when testing DBI::errstr
-
-0.87 Sep 05, 1998
- - Pg.xs adapted to Driver.xst from DBI-1.0
- - major rewrite of module documentation
- - major rewrite of the test script
- - use built-in DBI method for $dbh->do
- - add macro dHTR in order to avoid compile errors
- with threaded perl5.005
- - renamed attribute AutoEscape to pg_auto_escape
- - renamed attribute SIZE to pg_size
- - new attribute pg_type
- - added support for DBI->data_sources($driver)
- - added support for $dbh->table_info
- - blob_read documented and added to test.pl
- - added support for attr parameter in bind_param()
-
-0.86 Aug 21, 1998
- - added /usr/lib/ to search path for libpq.
- - added ChopBlanks, patch from
- Victor Krasinsky <victor(a)rdovira.lviv.ua>
- - changed test.pl to test multiple database handles
-
-0.85 July 19, 1998
- - non-printable characters in parameters will not be
- converted to '.'. They are passed unchanged to the
- database.
-
-0.84 July 18, 1998
- - bug-fix from Max Cohan <mcohan(a)adnc.net>:
- check for \xxx presentation before escaping backslash
- in parameters.
- - introduce new database handle attribute AutoEscape, which
- controls escaping of quotes and backslashes in parameters.
- When set to on, all quotes except at the beginning and
- at the end of a line will be escaped and all backslashes
- except when used to indicate an octal presentation (\xxx)
- will be escaped. Default of AutoEscape is on.
-
-0.83 July 10, 1998
- - bug-fix from Max Cohan <mcohan(a)adnc.net>:
- using traces together with undef in place-holders dumped
- core.
-
-0.82 June 20, 1998
- - bug-fix from Matthew Lenz <matthew(a)nocturnal.org>:
- corrected include path in Makefile.PL .
- - added 'use strict;' to test.pl
-
-0.81 June 13, 1998
- - bug-fix from Rolf Grossmann <grossman(a)securitas.net>:
- undefined parameters in an execute statement will be
- translated from 'undef' to 'NULL'. Also every parameter
- for bind_param() will be quoted by default (escape quote
- and backslash). Appropriate tests have been added to test.pl.
- - change ping method to use libpq-interface.
-
-0.80 June 07, 1998
- - adapted to postgresql-6.4:
- the backend protocol has changed, which needs an adapted
- ping method. A ping-test has been added to the test-script.
- Also some type identifiers have changed.
-
-0.73 June 03, 1998
- - changed include directives in Makefile.PL from
- archlib to installarchlib and from sitearch to
- installsitearch (Tony.Curtis(a)vcpc.univie.ac.at).
- - applied patch from Junio Hamano <junio(a)twinsun.com>
- quote method also doubles backslash.
-
-0.72 April 20, 1998
- - applied patch from Michael J Schout <mschout(a)gkg.net>
- which fixed the bug with queries containing the cast
- operator.
- - applied patch from "Irving Reid" <irving(a)tor.securecomputing.com>
- which fixed a memory leak.
-
-0.71 April 04, 1998
- - applied patch from "Irving Reid"
- <irving(a)tor.securecomputing.com> which fixed the
- the problem with the InactiveDestroy message.
-
-0.70 March 28, 1998
- - linking again with the shared version of libpq
- due to problems on several operating systems.
-
-0.69 March 6, 1998
- - expanded the search path for include files
- - module is now linked with static libpq.a
-
-0.68 March 3, 1998
- - return to UNIX domain sockets in test-scripts
-
-0.67 February 21, 1998
- - remove part of Driver.xst due to compile
- error on some systems.
-
-0.66 February 19, 1998
- - remove defines in Pg.h so that
- it compiles also with postgresql-6.2.1
- - changed ping method: set RaiseError=0
-
-0.65 February 14, 1998
- - adapted to changes in DBI-0.91, so that the
- default setting for AutoCommit and PrintError is
- again conformant to the DBI specs.
-
-0.64 February 01, 1998
- - changed syntax of data_source (ODBC-conformant):
- 'dbi:Pg:dbname=dbname;host=host;port=port'
- !!! PLEASE ADAPT YOUR SCRIPTS !!!
- - implemented place-holders
- - implemented ping-method
- - added support for $dbh->{RaiseError} and $dbh->{PrintError},
- note: DBI-default for PrintError is on !
- - allow commit and rollback only if AutoCommit = off
- - added documentation for $dbh->tables;
- - new method to get meta-information about a given table:
- $dbh->DBD::Pg::db::attributes($table);
- - host-parameter in test.pl is set explicitly to localhost
-
-0.63 October 05, 1997
- - adapted to PostgreSQL-6.2:
- o $sth->rows as well as $sth->execute
- and $sth->do return the number of
- affected rows even for non-Select
- statements.
- o support for password authorization added,
- please check the man-page for pg_passwd.
- - the data_source parameter of the connect
- method accepts two additional parameters
- which are treated as host and port:
- DBI->connect("dbi:Pg:dbname:host:port", "uid", "pwd")
- - support for AutoCommit, please read the
- module documentation for impacts on your
- scripts !
- - more perl-ish handling of data type bool,
- please read the module documentation for
- impacts on your scripts !
-
-0.62 August 26, 1997
- - added blobs/README
-
-0.61 August 23, 1997
- - adapted to DBI-0.89/Driver.xst
- - added support for blob_read
-
-0.52 August 15, 1997
- - added support for literal $sth->{'TYPE'},
- pg_type.pl / pg_type.pm.
-
-0.51 August 12, 1997
- - changed attributes to be DBI conformant:
- o OID_STATUS to pg_oid_status
- o CMD_STATUS to pg_cmd_status
-
-0.5 August 05, 1997
- - support for user authentication
- - support for bind_columns
- - added $dbh->tables
-
-0.4 Jun 24, 1997
- - adapted to DBI-0.84:
- o new syntax for DBI->connect !
- o execute returns 0E0 -> n for SELECT stmt
- -1 for non SELECT stmt
- -2 on error
- - new attribute $sth->{'OID_STATUS'}
- - new attribute $sth->{'CMD_STATUS'}
-
-0.3 Apr 24, 1997
- - bug fix release, ( still alpha ! )
-
-0.2 Mar 13, 1997
- - complete rewrite, ( still alpha ! )
-
-0.1 Feb 15, 1997
- - creation, ( totally pre-alpha ! )
-
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/MANIFEST b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/MANIFEST
deleted file mode 100644
index d035279..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/MANIFEST
+++ /dev/null
@@ -1,13 +0,0 @@
-Changes
-MANIFEST
-Makefile.PL
-Pg.h
-Pg.pm
-Pg.xs
-README
-README.win32
-dbd-pg.pod
-dbdimp.c
-dbdimp.h
-eg/ApacheDBI.pl
-test.pl
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Makefile.PL b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Makefile.PL
deleted file mode 100644
index 5b37df8..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Makefile.PL
+++ /dev/null
@@ -1,63 +0,0 @@
-
-# $Id: Makefile.PL,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
-use ExtUtils::MakeMaker;
-use Config;
-use strict;
-use DBI 1.00;
-use DBI::DBD;
-
-print "Configuring Pg\n";
-print "Remember to actually read the README file !\n";
-
-my $POSTGRES_INCLUDE;
-my $POSTGRES_LIB;
-
-if ((!$ENV{POSTGRES_INCLUDE} or !$ENV{POSTGRES_LIB}) and !$ENV{POSTGRES_HOME}) {
- die "please set environment variables POSTGRES_INCLUDE and POSTGRES_LIB !\n";
-} elsif ((!$ENV{POSTGRES_INCLUDE} or !$ENV{POSTGRES_LIB}) and $ENV{POSTGRES_HOME}) {
- $POSTGRES_INCLUDE = "$ENV{POSTGRES_HOME}/include";
- $POSTGRES_LIB = "$ENV{POSTGRES_HOME}/lib";
-} else {
- $POSTGRES_INCLUDE = "$ENV{POSTGRES_INCLUDE}";
- $POSTGRES_LIB = "$ENV{POSTGRES_LIB}";
-}
-
-my $os = $^O;
-print "OS: $os\n";
-
-my $dbi_arch_dir;
-if ($os eq 'MSWin32') {
- $dbi_arch_dir = "\$(INSTALLSITEARCH)/auto/DBI";
-} else {
- $dbi_arch_dir = dbd_dbi_arch_dir();
-}
-
-my %opts = (
- NAME => 'DBD::Pg',
- VERSION_FROM => 'Pg.pm',
- INC => "-I$POSTGRES_INCLUDE -I$dbi_arch_dir",
- OBJECT => "Pg\$(OBJ_EXT) dbdimp\$(OBJ_EXT)",
- LIBS => ["-L$POSTGRES_LIB -lpq"],
- AUTHOR => 'Edmund Mergl (E.Mergl(a)bawue.de)',
- ABSTRACT => 'PostgreSQL database driver for the DBI module',
-);
-
-if ($os eq 'hpux') {
- my $osvers = $Config{osvers};
- if ($osvers < 10) {
- print "Warning: Forced to build static not dynamic on $os $osvers.\a\n";
- $opts{LINKTYPE} = 'static';
- }
-}
-
-if ($Config{dlsrc} =~ /dl_none/) {
- $opts{LINKTYPE} = 'static';
-}
-
-
-WriteMakefile(%opts);
-
-exit(0);
-
-# end of Makefile.PL
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.h b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.h
deleted file mode 100644
index 3d573a9..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- $Id: Pg.h,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
- Copyright (c) 1997,1998,1999,2000 Edmund Mergl
- Portions Copyright (c) 1994,1995,1996,1997 Tim Bunce
-
- You may distribute under the terms of either the GNU General Public
- License or the Artistic License, as specified in the Perl README file.
-
-*/
-
-
-#ifdef WIN32
-static int errno;
-#endif
-
-#include "libpq-fe.h"
-
-#ifdef NEVER
-#include<sys/stat.h>
-#include "libpq/libpq-fs.h"
-#endif
-#ifndef INV_READ
-#define INV_READ 0x00040000
-#endif
-#ifndef INV_WRITE
-#define INV_WRITE 0x00020000
-#endif
-
-#ifdef BUFSIZ
-#undef BUFSIZ
-#endif
-/* this should improve I/O performance for large objects */
-#define BUFSIZ 32768
-
-
-#define NEED_DBIXS_VERSION 93
-
-#include <DBIXS.h> /* installed by the DBI module */
-
-#include "dbdimp.h" /* read in our implementation details */
-
-#include <dbd_xsh.h> /* installed by the DBI module */
-
-
-/* end of Pg.h */
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.pm b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.pm
deleted file mode 100644
index cb5bbad..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.pm
+++ /dev/null
@@ -1,1162 +0,0 @@
-
-# $Id: Pg.pm,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-#
-# Copyright (c) 1997,1998,1999,2000 Edmund Mergl
-# Portions Copyright (c) 1994,1995,1996,1997 Tim Bunce
-#
-# You may distribute under the terms of either the GNU General Public
-# License or the Artistic License, as specified in the Perl README file.
-
-
-require 5.003;
-
-$DBD::Pg::VERSION = '0.95';
-
-{
- package DBD::Pg;
-
- use DBI ();
- use DynaLoader ();
- use Exporter ();
- @ISA = qw(DynaLoader Exporter);
-
- require_version DBI 1.00;
-
- bootstrap DBD::Pg $VERSION;
-
- $err = 0; # holds error code for DBI::err
- $errstr = ""; # holds error string for DBI::errstr
- $drh = undef; # holds driver handle once initialized
-
- sub driver{
- return $drh if $drh;
- my($class, $attr) = @_;
-
- $class .= "::dr";
-
- # not a 'my' since we use it above to prevent multiple drivers
-
- $drh = DBI::_new_drh($class, {
- 'Name' => 'Pg',
- 'Version' => $VERSION,
- 'Err' => \$DBD::Pg::err,
- 'Errstr' => \$DBD::Pg::errstr,
- 'Attribution' => 'PostgreSQL DBD by Edmund Mergl',
- });
-
- $drh;
- }
-
- 1;
-}
-
-
-{ package DBD::Pg::dr; # ====== DRIVER ======
- use strict;
-
- sub data_sources {
- my $drh = shift;
- my $dbh = DBD::Pg::dr::connect($drh, 'dbname=template1') or return undef;
- $dbh->{AutoCommit} = 1;
- my $sth = $dbh->prepare("SELECT datname FROM pg_database ORDER BY datname") or return undef;
- $sth->execute or return undef;
- my (@sources, @datname);
- while (@datname = $sth->fetchrow_array) {
- push @sources, "dbi:Pg:dbname=$datname[0]";
- }
- $sth->finish;
- $dbh->disconnect;
- return @sources;
- }
-
-
- sub connect {
- my($drh, $dbname, $user, $auth)= @_;
-
- # create a 'blank' dbh
-
- my $Name = $dbname;
- $Name =~ s/^.*dbname\s*=\s*//;
- $Name =~ s/\s*;.*$//;
-
- $user = '' unless defined($user);
- $auth = '' unless defined($auth);
-
- $user = $ENV{DBI_USER} unless defined($user);
- $auth = $ENV{DBI_PASS} unless defined($auth);
-
- my($dbh) = DBI::_new_dbh($drh, {
- 'Name' => $Name,
- 'User' => $user, 'CURRENT_USER' => $user,
- });
-
- # Connect to the database..
- DBD::Pg::db::_login($dbh, $dbname, $user, $auth) or return undef;
-
- $dbh;
- }
-
-}
-
-
-{ package DBD::Pg::db; # ====== DATABASE ======
- use strict;
-
- sub prepare {
- my($dbh, $statement, @attribs)= @_;
-
- # create a 'blank' sth
-
- my $sth = DBI::_new_sth($dbh, {
- 'Statement' => $statement,
- });
-
- DBD::Pg::st::_prepare($sth, $statement, @attribs) or return undef;
-
- $sth;
- }
-
-
- sub ping {
- my($dbh) = @_;
-
- local $SIG{__WARN__} = sub { } if $dbh->{PrintError};
- local $dbh->{RaiseError} = 0 if $dbh->{RaiseError};
- my $ret = DBD::Pg::db::_ping($dbh);
-
- return $ret;
- }
-
-
- sub table_info { # DBI spec: TABLE_CAT, TABLE_SCHEM, TABLE_NAME, TABLE_TYPE, REMARKS
- my($dbh) = @_;
-
- my $sth = $dbh->prepare("
- SELECT c.reltype, u.usename, c.relname, 'TABLE', ''
- FROM pg_class c, pg_user u
- WHERE c.relkind = 'r'
- AND c.relhasrules = FALSE
- AND c.relname !~ '^pg_'
- AND c.relname !~ '^xin[vx][0-9]+'
- AND c.relowner = u.usesysid
- UNION
- SELECT c.reltype, u.usename, c.relname, 'VIEW', ''
- FROM pg_class c, pg_user u
- WHERE c.relkind = 'r'
- AND c.relhasrules = TRUE
- AND c.relname !~ '^pg_'
- AND c.relname !~ '^xin[vx][0-9]+'
- AND c.relowner = u.usesysid
- ORDER BY 1, 2, 3
- ") or return undef;
- $sth->execute or return undef;
-
- $sth;
- }
-
-
- sub tables {
- my($dbh) = @_;
-
- my $sth = $dbh->prepare("
- select relname
- from pg_class
- where relkind = 'r'
- and relname !~ '^pg_'
- and relname !~ '^xin[vx][0-9]+'
- order by 1
- ") or return undef;
- $sth->execute or return undef;
- my (@tables, @relname);
- while (@relname = $sth->fetchrow_array) {
- push @tables, $relname[0];
- }
- $sth->finish;
-
- return @tables;
- }
-
-
- sub table_attributes {
- my ($dbh, $table) = @_;
- my $result = [];
- my $attrs = $dbh->selectall_arrayref(
- "select a.attname, t.typname, a.attlen, a.atttypmod, a.attnotnull, a.atthasdef, a.attnum
- from pg_attribute a,
- pg_class c,
- pg_type t
- where c.relname = '$table'
- and a.attrelid = c.oid
- and a.attnum >= 0
- and t.oid = a.atttypid
- order by 1
- ");
-
- return $result unless scalar(@$attrs);
-
- # Get the primary key
- my ($pri_key) = $dbh->selectrow_array("SELECT pg_attribute.attname
- FROM pg_class, pg_attribute, pg_index
- WHERE pg_class.oid = pg_attribute.attrelid
- AND pg_class.oid = pg_index.indrelid
- AND pg_index.indkey[0] = pg_attribute.attnum
- AND pg_index.indisprimary = 't'
- AND pg_class.relname = '$table'");
- $pri_key = '' unless $pri_key;
-
- foreach my $attr (reverse @$attrs) {
- my ($col_name, $col_type, $size, $mod, $notnull, $hasdef, $attnum) = @$attr;
- my $col_size = do {
- if ($size > 0) {
- $size;
- } elsif ($mod > 0xffff) {
- my $prec = ($mod & 0xffff) - 4;
- $mod >>= 16;
- my $dig = $mod;
- $dig;
- } elsif ($mod >= 4) {
- $mod - 4;
- } else {
- $mod;
- }
- };
-
- # Get the default value, if any
- my ($default) = $dbh->selectrow_array("SELECT adsrc FROM pg_attrdef WHERE adnum = $attnum") if -1 == $attnum;
- $default = '' unless $default;
-
- # Test for any constraints
- my ($constraint) = $dbh->selectrow_array("select rcsrc from pg_relcheck where rcname = '${table}_$col_name'");
- $constraint = '' unless $constraint;
-
- # Check to see if this is the primary key
- my $is_primary_key;
- ($pri_key eq $col_name) ? $is_primary_key = 1 : $is_primary_key = 0;
-
- push @$result,
- { NAME => $col_name,
- TYPE => $col_type,
- SIZE => $col_size,
- NOTNULL => $notnull,
- DEFAULT => $default,
- CONSTRAINT => $constraint,
- PRIMARY_KEY => $is_primary_key,
- };
- }
-
- return $result;
- }
-
-
- sub type_info_all {
- my ($dbh) = @_;
- my $names = {
- TYPE_NAME => 0,
- DATA_TYPE => 1,
- PRECISION => 2,
- LITERAL_PREFIX => 3,
- LITERAL_SUFFIX => 4,
- CREATE_PARAMS => 5,
- NULLABLE => 6,
- CASE_SENSITIVE => 7,
- SEARCHABLE => 8,
- UNSIGNED_ATTRIBUTE => 9,
- MONEY =>10,
- AUTO_INCREMENT =>11,
- LOCAL_TYPE_NAME =>12,
- MINIMUM_SCALE =>13,
- MAXIMUM_SCALE =>14,
- };
-
- # typname |typlen|typprtlen| SQL92
- # --------------+------+---------+ -------
- # bool | 1| 1| BOOLEAN
- # text | -1| -1| like VARCHAR, but automatic storage allocation
- # bpchar | -1| -1| CHARACTER(n) bp=blank padded
- # varchar | -1| -1| VARCHAR(n)
- # int2 | 2| 5| SMALLINT
- # int4 | 4| 10| INTEGER
- # int8 | 8| 20| /
- # money | 4| 24| /
- # float4 | 4| 12| FLOAT(p) for p<7=float4, for p<16=float8
- # float8 | 8| 24| REAL
- # abstime | 4| 20| /
- # reltime | 4| 20| /
- # tinterval | 12| 47| /
- # date | 4| 10| /
- # time | 8| 16| /
- # datetime | 8| 47| /
- # timespan | 12| 47| INTERVAL
- # timestamp | 4| 19| TIMESTAMP
- # --------------+------+---------+
-
- # DBI type definitions / PostgreSQL definitions # type needs to be DBI-specific (not pg_type)
- #
- # SQL_ALL_TYPES 0
- # SQL_CHAR 1 1042 bpchar
- # SQL_NUMERIC 2 700 float4
- # SQL_DECIMAL 3 700 float4
- # SQL_INTEGER 4 23 int4
- # SQL_SMALLINT 5 21 int2
- # SQL_FLOAT 6 700 float4
- # SQL_REAL 7 701 float8
- # SQL_DOUBLE 8 20 int8
- # SQL_DATE 9 1082 date
- # SQL_TIME 10 1083 time
- # SQL_TIMESTAMP 11 1296 timestamp
- # SQL_VARCHAR 12 1043 varchar
-
- my $ti = [
- $names,
- # name type prec prefix suffix create params null case se unsign mon incr local min max
- #
- [ 'bool', 0, 1, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'BOOLEAN', undef, undef ],
- [ 'int8', 8, 20, undef, undef, undef, 1, '0', 2, '0', '0', '0', 'LONGINT', undef, undef ],
- [ 'int2', 5, 5, undef, undef, undef, 1, '0', 2, '0', '0', '0', 'SMALLINT', undef, undef ],
- [ 'int4', 4, 10, undef, undef, undef, 1, '0', 2, '0', '0', '0', 'INTEGER', undef, undef ],
- [ 'text', 12, 4096, '\'', '\'', undef, 1, '1', 3, undef, '0', '0', 'TEXT', undef, undef ],
- [ 'float4', 6, 12, undef, undef, 'precision', 1, '0', 2, '0', '0', '0', 'FLOAT', undef, undef ],
- [ 'float8', 7, 24, undef, undef, 'precision', 1, '0', 2, '0', '0', '0', 'REAL', undef, undef ],
- [ 'abstime', 10, 20, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'ABSTIME', undef, undef ],
- [ 'reltime', 10, 20, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'RELTIME', undef, undef ],
- [ 'tinterval', 11, 47, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'TINTERVAL', undef, undef ],
- [ 'money', 0, 24, undef, undef, undef, 1, '0', 2, undef, '1', '0', 'MONEY', undef, undef ],
- [ 'bpchar', 12, 4096, '\'', '\'', 'max length', 1, '1', 3, undef, '0', '0', 'CHARACTER', undef, undef ],
- [ 'varchar', 12, 4096, '\'', '\'', 'max length', 1, '1', 3, undef, '0', '0', 'VARCHAR', undef, undef ],
- [ 'date', 9, 10, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'DATE', undef, undef ],
- [ 'time', 10, 16, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'TIME', undef, undef ],
- [ 'datetime', 11, 47, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'DATETIME', undef, undef ],
- [ 'timespan', 11, 47, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'INTERVAL', undef, undef ],
- [ 'timestamp', 10, 19, '\'', '\'', undef, 1, '0', 2, undef, '0', '0', 'TIMESTAMP', undef, undef ]
- #
- # intentionally omitted: char, bytea, all geometric types, all array types
- ];
- return $ti;
- }
-
-
- sub quote {
- my ($dbh, $str, $data_type) = @_;
-
- return "NULL" unless defined $str;
-
- unless ($data_type) {
- $str =~ s/'/''/g; # ISO SQL2
- # In addition to the DBI method it doubles also the
- # backslash, because PostgreSQL treats a backslash as an
- # escape character.
- $str =~ s/\\/\\\\/g;
- return "'$str'";
- }
-
- # Optimise for standard numerics which need no quotes
- return $str if $data_type == DBI::SQL_INTEGER
- || $data_type == DBI::SQL_SMALLINT
- || $data_type == DBI::SQL_DECIMAL
- || $data_type == DBI::SQL_FLOAT
- || $data_type == DBI::SQL_REAL
- || $data_type == DBI::SQL_DOUBLE
- || $data_type == DBI::SQL_NUMERIC;
- my $ti = $dbh->type_info($data_type);
- # XXX needs checking
- my $lp = $ti ? $ti->{LITERAL_PREFIX} || "" : "'";
- my $ls = $ti ? $ti->{LITERAL_SUFFIX} || "" : "'";
- # XXX don't know what the standard says about escaping
- # in the 'general case' (where $lp != "'").
- # So we just do this and hope:
- $str =~ s/$lp/$lp$lp/g
- if $lp && $lp eq $ls && ($lp eq "'" || $lp eq '"');
- return "$lp$str$ls";
- }
-}
-
-
-{ package DBD::Pg::st; # ====== STATEMENT ======
-
- # all done in XS
-
-}
-
-1;
-
-__END__
-
-
-=head1 NAME
-
-DBD::Pg - PostgreSQL database driver for the DBI module
-
-
-=head1 SYNOPSIS
-
- use DBI;
-
- $dbh = DBI->connect("dbi:Pg:dbname=$dbname", "", "");
-
- # See the DBI module documentation for full details
-
-
-=head1 DESCRIPTION
-
-DBD::Pg is a Perl module which works with the DBI module to provide
-access to PostgreSQL databases.
-
-
-=head1 MODULE DOCUMENTATION
-
-This documentation describes driver specific behavior and restrictions.
-It is not supposed to be used as the only reference for the user. In any
-case consult the DBI documentation first !
-
-
-=head1 THE DBI CLASS
-
-=head2 DBI Class Methods
-
-=over 4
-
-=item B<connect>
-
-To connect to a database with a minimum of parameters, use the
-following syntax:
-
- $dbh = DBI->connect("dbi:Pg:dbname=$dbname", "", "");
-
-This connects to the database $dbname at localhost without any user
-authentication. This is sufficient for the defaults of PostgreSQL.
-
-The following connect statement shows all possible parameters:
-
- $dbh = DBI->connect("dbi:Pg:dbname=$dbname;host=$host;port=$port;options=$options;tty=$tty", "$username", "$password");
-
-If a parameter is undefined PostgreSQL first looks for specific environment
-variables and then it uses hard coded defaults:
-
- parameter environment variable hard coded default
- --------------------------------------------------
- dbname PGDATABASE current userid
- host PGHOST localhost
- port PGPORT 5432
- options PGOPTIONS ""
- tty PGTTY ""
- username PGUSER current userid
- password PGPASSWORD ""
-
-If a host is specified, the postmaster on this host needs to be
-started with the C<-i> option (TCP/IP sockets).
-
-The options parameter specifies runtime options for the Postgres
-backend. Common usage is to increase the number of buffers with
-the C<-B> option. Also important is the C<-F> option, which disables
-automatiic fsync() call after each transaction. For further details
-please refer to the L<postgres>.
-
-For authentication with username and password appropriate entries have
-to be made in pg_hba.conf. Please refer to the L<pg_hba.conf> and the
-L<pg_passwd> for the different types of authentication. Note that for
-these two parameters DBI distinguishes between empty and undefined. If
-these parameters are undefined DBI substitutes the values of the environment
-variables DBI_USER and DBI_PASS if present.
-
-=item B<available_drivers>
-
- @driver_names = DBI->available_drivers;
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<data_sources>
-
- @data_sources = DBI->data_sources('Pg');
-
-The driver supports this method. Note, that the necessary database
-connect to the database template1 will be done on the localhost
-without any user-authentication. Other preferences can only be set
-with the environment variables PGHOST, DBI_USER and DBI_PASS.
-
-=item B<trace>
-
- DBI->trace($trace_level, $trace_file)
-
-Implemented by DBI, no driver-specific impact.
-
-=back
-
-
-=head2 DBI Dynamic Attributes
-
-See Common Methods.
-
-
-=head1 METHODS COMMON TO ALL HANDLES
-
-=over 4
-
-=item B<err>
-
- $rv = $h->err;
-
-Supported by the driver as proposed by DBI. For the connect
-method it returns PQstatus. In all other cases it returns
-PQresultStatus of the current handle.
-
-=item B<errstr>
-
- $str = $h->errstr;
-
-Supported by the driver as proposed by DBI. It returns the
-PQerrorMessage related to the current handle.
-
-=item B<state>
-
- $str = $h->state;
-
-This driver does not (yet) support the state method.
-
-=item B<trace>
-
- $h->trace($trace_level, $trace_filename);
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<trace_msg>
-
- $h->trace_msg($message_text);
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<func>
-
-This driver supports a variety of driver specific functions
-accessible via the func interface:
-
- $attrs = $dbh->func($table, 'table_attributes');
-
-This method returns for the given table a reference to an
-array of hashes:
-
- NAME attribute name
- TYPE attribute type
- SIZE attribute size (-1 for variable size)
- NULLABLE flag nullable
- DEFAULT default value
- CONSTRAINT constraint
- PRIMARY_KEY flag is_primary_key
-
- $lobjId = $dbh->func($mode, 'lo_creat');
-
-Creates a new large object and returns the object-id. $mode is a
-bit-mask describing different attributes of the new object. Use
-the following constants:
-
- $dbh->{pg_INV_WRITE}
- $dbh->{pg_INV_READ}
-
-Upon failure it returns undef.
-
- $lobj_fd = $dbh->func($lobjId, $mode, 'lo_open');
-
-Opens an existing large object and returns an object-descriptor
-for use in subsequent lo_* calls.
-For the mode bits see lo_create. Returns undef upon failure.
-Note, that 0 is a perfectly correct object descriptor !
-
- $nbytes = $dbh->func($lobj_fd, $buf, $len, 'lo_write');
-
-Writes $len bytes of $buf into the large object $lobj_fd.
-Returns the number of bytes written and undef upon failure.
-
- $nbytes = $dbh->func($lobj_fd, $buf, $len, 'lo_read');
-
-Reads $len bytes into $buf from large object $lobj_fd.
-Returns the number of bytes read and undef upon failure.
-
- $loc = $dbh->func($lobj_fd, $offset, $whence, 'lo_lseek');
-
-Change the current read or write location on the large
-object $obj_id. Currently $whence can only be 0 (L_SET).
-Returns the current location and undef upon failure.
-
- $loc = $dbh->func($lobj_fd, 'lo_tell');
-
-Returns the current read or write location on the large
-object $lobj_fd and undef upon failure.
-
- $lobj_fd = $dbh->func($lobj_fd, 'lo_close');
-
-Closes an existing large object. Returns true upon success
-and false upon failure.
-
- $lobjId = $dbh->func($filename, 'lo_import');
-
-Imports a Unix file as large object and returns the object
-id of the new object or undef upon failure.
-
- $ret = $dbh->func($lobjId, 'lo_export');
-
-Exports a large object into a Unix file. Returns false upon
-failure, true otherwise.
-
- $ret = $dbh->func($line, 'putline');
-
-Used together with the SQL-command 'COPY table FROM STDIN' to
-copy large amount of data into a table avoiding the overhead
-of using single insert-comands. The application must explicitly
-send the two characters "\." to indicate to the backend that
-it has finished sending its data. See test.pl for an example
-on how to use this function.
-
- $ret = $dbh->func($buffer, length, 'getline');
-
-Used together with the SQL-command 'COPY table TO STDOUT' to
-dump a complete table. See test.pl for an example on how to use
-this function.
-
-
-=back
-
-
-=head1 ATTRIBUTES COMMON TO ALL HANDLES
-
-=over 4
-
-=item B<Warn> (boolean, inherited)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<Active> (boolean, read-only)
-
-Supported by the driver as proposed by DBI. A database
-handle is active while it is connected and statement
-handle is active until it is finished.
-
-=item B<Kids> (integer, read-only)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<ActiveKids> (integer, read-only)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<CachedKids> (hash ref)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<CompatMode> (boolean, inherited)
-
-Not used by this driver.
-
-=item B<InactiveDestroy> (boolean)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<PrintError> (boolean, inherited)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<RaiseError> (boolean, inherited)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<ChopBlanks> (boolean, inherited)
-
-Supported by the driver as proposed by DBI. This
-method is similar to the SQL-function RTRIM.
-
-=item B<LongReadLen> (integer, inherited)
-
-Implemented by DBI, not used by the driver.
-
-=item B<LongTruncOk> (boolean, inherited)
-
-Implemented by DBI, not used by the driver.
-
-=item B<Taint> (boolean, inherited)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<private_*>
-
-Implemented by DBI, no driver-specific impact.
-
-=back
-
-
-=head1 DBI DATABASE HANDLE OBJECTS
-
-=head2 Database Handle Methods
-
-=over 4
-
-=item B<selectrow_array>
-
- @row_ary = $dbh->selectrow_array($statement, \%attr, @bind_values);
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<selectall_arrayref>
-
- $ary_ref = $dbh->selectall_arrayref($statement, \%attr, @bind_values);
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<selectcol_arrayref>
-
- $ary_ref = $dbh->selectcol_arrayref($statement, \%attr, @bind_values);
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<prepare>
-
- $sth = $dbh->prepare($statement, \%attr);
-
-PostgreSQL does not have the concept of preparing
-a statement. Hence the prepare method just stores
-the statement after checking for place-holders.
-No information about the statement is available
-after preparing it.
-
-=item B<prepare_cached>
-
- $sth = $dbh->prepare_cached($statement, \%attr);
-
-Implemented by DBI, no driver-specific impact.
-This method is not useful for this driver, because
-preparing a statement has no database interaction.
-
-=item B<do>
-
- $rv = $dbh->do($statement, \%attr, @bind_values);
-
-Implemented by DBI, no driver-specific impact. See the
-notes for the execute method elsewhere in this document.
-
-=item B<commit>
-
- $rc = $dbh->commit;
-
-Supported by the driver as proposed by DBI. See also the
-notes about B<Transactions> elsewhere in this document.
-
-=item B<rollback>
-
- $rc = $dbh->rollback;
-
-Supported by the driver as proposed by DBI. See also the
-notes about B<Transactions> elsewhere in this document.
-
-=item B<disconnect>
-
- $rc = $dbh->disconnect;
-
-Supported by the driver as proposed by DBI.
-
-=item B<ping>
-
- $rc = $dbh->ping;
-
-This driver supports the ping-method, which can be used to check the
-validity of a database-handle. The ping method issues an empty query
-and checks the result status.
-
-=item B<table_info>
-
- $sth = $dbh->table_info;
-
-Supported by the driver as proposed by DBI. This
-method returns all tables and views which are owned by the
-current user. It does not select any indices and sequences.
-Also System tables are not selected. As TABLE_QUALIFIER the
-reltype attribute is returned and the REMARKS are undefined.
-
-=item B<tables>
-
- @names = $dbh->tables;
-
-Supported by the driver as proposed by DBI. This
-method returns all tables and views which are owned by the
-current user. It does not select any indices and sequences.
-Also system tables are not selected.
-
-=item B<type_info_all>
-
- $type_info_all = $dbh->type_info_all;
-
-Supported by the driver as proposed by DBI.
-Only for SQL data-types and for frequently used data-types
-information is provided. The mapping between the PostgreSQL typename
-and the SQL92 data-type (if possible) has been done according to the
-following table:
-
- +---------------+------------------------------------+
- | typname | SQL92 |
- |---------------+------------------------------------|
- | bool | BOOL |
- | text | / |
- | bpchar | CHAR(n) |
- | varchar | VARCHAR(n) |
- | int2 | SMALLINT |
- | int4 | INT |
- | int8 | / |
- | money | / |
- | float4 | FLOAT(p) p<7=float4, p<16=float8 |
- | float8 | REAL |
- | abstime | / |
- | reltime | / |
- | tinterval | / |
- | date | / |
- | time | / |
- | datetime | / |
- | timespan | TINTERVAL |
- | timestamp | TIMESTAMP |
- +---------------+------------------------------------+
-
-For further details concerning the PostgreSQL specific data-types
-please read the L<pgbuiltin>.
-
-=item B<type_info>
-
- @type_info = $dbh->type_info($data_type);
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<quote>
-
- $sql = $dbh->quote($value, $data_type);
-
-This module implements it's own quote method. In addition to the
-DBI method it doubles also the backslash, because PostgreSQL treats
-a backslash as an escape character.
-
-=back
-
-
-=head2 Database Handle Attributes
-
-=over 4
-
-=item B<AutoCommit> (boolean)
-
-Supported by the driver as proposed by DBI. According to the
-classification of DBI, PostgreSQL is a database, in which a
-transaction must be explicitly started. Without starting a
-transaction, every change to the database becomes immediately
-permanent. The default of AutoCommit is on, which corresponds
-to the default behavior of PostgreSQL. When setting AutoCommit
-to off, a transaction will be started and every commit or rollback
-will automatically start a new transaction. For details see the
-notes about B<Transactions> elsewhere in this document.
-
-=item B<Driver> (handle)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<Name> (string, read-only)
-
-The default method of DBI is overridden by a driver specific
-method, which returns only the database name. Anything else
-from the connection string is stripped off. Note, that here
-the method is read-only in contrast to the DBI specs.
-
-=item B<RowCacheSize> (integer)
-
-Implemented by DBI, not used by the driver.
-
-=item B<pg_auto_escape> (boolean)
-
-PostgreSQL specific attribute. If true, then quotes and backslashes in all
-parameters will be escaped in the following way:
-
- escape quote with a quote (SQL)
- escape backslash with a backslash except for octal presentation
-
-The default is on. Note, that PostgreSQL also accepts quotes, which
-are escaped by a backslash. Any other ASCII character can be used
-directly in a string constant.
-
-=item B<pg_INV_READ> (integer, read-only)
-
-Constant to be used for the mode in lo_creat and lo_open.
-
-=item B<pg_INV_WRITE> (integer, read-only)
-
-Constant to be used for the mode in lo_creat and lo_open.
-
-=back
-
-
-=head1 DBI STATEMENT HANDLE OBJECTS
-
-=head2 Statement Handle Methods
-
-=over 4
-
-=item B<bind_param>
-
- $rv = $sth->bind_param($param_num, $bind_value, \%attr);
-
-Supported by the driver as proposed by DBI.
-
-=item B<bind_param_inout>
-
-Not supported by this driver.
-
-=item B<execute>
-
- $rv = $sth->execute(@bind_values);
-
-Supported by the driver as proposed by DBI.
-In addition to 'UPDATE', 'DELETE', 'INSERT' statements, for
-which it returns always the number of affected rows, the execute
-method can also be used for 'SELECT ... INTO table' statements.
-
-=item B<fetchrow_arrayref>
-
- $ary_ref = $sth->fetchrow_arrayref;
-
-Supported by the driver as proposed by DBI.
-
-=item B<fetchrow_array>
-
- @ary = $sth->fetchrow_array;
-
-Supported by the driver as proposed by DBI.
-
-=item B<fetchrow_hashref>
-
- $hash_ref = $sth->fetchrow_hashref;
-
-Supported by the driver as proposed by DBI.
-
-=item B<fetchall_arrayref>
-
- $tbl_ary_ref = $sth->fetchall_arrayref;
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<finish>
-
- $rc = $sth->finish;
-
-Supported by the driver as proposed by DBI.
-
-=item B<rows>
-
- $rv = $sth->rows;
-
-Supported by the driver as proposed by DBI.
-In contrast to many other drivers the number of rows is
-available immediately after executing the statement.
-
-=item B<bind_col>
-
- $rc = $sth->bind_col($column_number, \$var_to_bind, \%attr);
-
-Supported by the driver as proposed by DBI.
-
-=item B<bind_columns>
-
- $rc = $sth->bind_columns(\%attr, @list_of_refs_to_vars_to_bind);
-
-Supported by the driver as proposed by DBI.
-
-=item B<dump_results>
-
- $rows = $sth->dump_results($maxlen, $lsep, $fsep, $fh);
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<blob_read>
-
- $blob = $sth->blob_read($id, $offset, $len);
-
-Supported by this driver as proposed by DBI. Implemented by DBI
-but not documented, so this method might change.
-
-This method seems to be heavily influenced by the current implementation
-of blobs in Oracle. Nevertheless we try to be as compatible as possible.
-Whereas Oracle suffers from the limitation that blobs are related to tables
-and every table can have only one blob (data-type LONG), PostgreSQL handles
-its blobs independent of any table by using so called object identifiers.
-This explains why the blob_read method is blessed into the STATEMENT package
-and not part of the DATABASE package. Here the field parameter has been used
-to handle this object identifier. The offset and len parameter may be set to
-zero, in which case the driver fetches the whole blob at once.
-
-Starting with PostgreSQL-6.5 every access to a blob has to be put into a
-transaction. This holds even for a read-only access.
-
-See also the PostgreSQL-specific functions concerning blobs which are
-available via the func-interface.
-
-For further information and examples about blobs, please read the chapter
-about Large Objects in the PostgreSQL Programmer's Guide.
-
-=back
-
-
-=head2 Statement Handle Attributes
-
-=over 4
-
-=item B<NUM_OF_FIELDS> (integer, read-only)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<NUM_OF_PARAMS> (integer, read-only)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<NAME> (array-ref, read-only)
-
-Supported by the driver as proposed by DBI.
-
-=item B<NAME_lc> (array-ref, read-only)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<NAME_uc> (array-ref, read-only)
-
-Implemented by DBI, no driver-specific impact.
-
-=item B<TYPE> (array-ref, read-only)
-
-Supported by the driver as proposed by DBI, with
-the restriction, that the types are PostgreSQL
-specific data-types which do not correspond to
-international standards.
-
-=item B<PRECISION> (array-ref, read-only)
-
-Not supported by the driver.
-
-=item B<SCALE> (array-ref, read-only)
-
-Not supported by the driver.
-
-=item B<NULLABLE> (array-ref, read-only)
-
-Not supported by the driver.
-
-=item B<CursorName> (string, read-only)
-
-Not supported by the driver. See the note about
-B<Cursors> elsewhere in this document.
-
-=item B<Statement> (string, read-only)
-
-Supported by the driver as proposed by DBI.
-
-=item B<RowCache> (integer, read-only)
-
-Not supported by the driver.
-
-=item B<pg_size> (array-ref, read-only)
-
-PostgreSQL specific attribute. It returns a reference to an
-array of integer values for each column. The integer shows
-the size of the column in bytes. Variable length columns
-are indicated by -1.
-
-=item B<pg_type> (hash-ref, read-only)
-
-PostgreSQL specific attribute. It returns a reference to an
-array of strings for each column. The string shows the name
-of the data_type.
-
-=item B<pg_oid_status> (integer, read-only)
-
-PostgreSQL specific attribute. It returns the OID of the last
-INSERT command.
-
-=item B<pg_cmd_status> (integer, read-only)
-
-PostgreSQL specific attribute. It returns the type of the last
-command. Possible types are: INSERT, DELETE, UPDATE, SELECT.
-
-=back
-
-
-=head1 FURTHER INFORMATION
-
-=head2 Transactions
-
-The transaction behavior is now controlled with the attribute AutoCommit.
-For a complete definition of AutoCommit please refer to the DBI documentation.
-
-According to the DBI specification the default for AutoCommit is TRUE.
-In this mode, any change to the database becomes valid immediately. Any
-'begin', 'commit' or 'rollback' statement will be rejected.
-
-If AutoCommit is switched-off, immediately a transaction will be started by
-issuing a 'begin' statement. Any 'commit' or 'rollback' will start a new
-transaction. A disconnect will issue a 'rollback' statement.
-
-
-=head2 Large Objects
-
-The driver supports all large-objects related functions provided by
-libpq via the func-interface. Please note, that starting with
-PoostgreSQL-65. any access to a large object - even read-only -
-has to be put into a transaction !
-
-
-=head2 Cursors
-
-Although PostgreSQL has a cursor concept, it has not
-been used in the current implementation. Cursors in
-PostgreSQL can only be used inside a transaction block.
-Because only one transaction block at a time is allowed,
-this would have implied the restriction, not to use
-any nested SELECT statements. Hence the execute method
-fetches all data at once into data structures located
-in the frontend application. This has to be considered
-when selecting large amounts of data !
-
-
-=head2 Data-Type bool
-
-The current implementation of PostgreSQL returns 't' for true and 'f' for
-false. From the perl point of view a rather unfortunate choice. The DBD-Pg
-module translates the result for the data-type bool in a perl-ish like manner:
-'f' -> '0' and 't' -> '1'. This way the application does not have to check
-the database-specific returned values for the data-type bool, because perl
-treats '0' as false and '1' as true.
-
-PostgreSQL Version 6.2 considers the input 't' as true
-and anything else as false.
-PostgreSQL Version 6.3 considers the input 't', '1' and 1 as true
-and anything else as false.
-PostgreSQL Version 6.4 considers the input 't', '1' and 'y' as true
-and any other character as false.
-
-
-=head1 SEE ALSO
-
-L<DBI>
-
-
-=head1 AUTHORS
-
-=item *
-DBI and DBD-Oracle by Tim Bunce (Tim.Bunce(a)ig.co.uk)
-
-=item *
-DBD-Pg by Edmund Mergl (E.Mergl(a)bawue.de)
-
- Major parts of this package have been copied from DBI and DBD-Oracle.
-
-
-=head1 COPYRIGHT
-
-The DBD::Pg module is free software.
-You may distribute under the terms of either the GNU General Public
-License or the Artistic License, as specified in the Perl README file,
-with the exception that it cannot be placed on a CD-ROM or similar media
-for commercial distribution without the prior approval of the author.
-
-
-=head1 ACKNOWLEDGMENTS
-
-See also B<DBI/ACKNOWLEDGMENTS>.
-
-=cut
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.xs b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.xs
deleted file mode 100644
index c84f987..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/Pg.xs
+++ /dev/null
@@ -1,592 +0,0 @@
-/*
- $Id: Pg.xs,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
- Copyright (c) 1997,1998,1999,2000 Edmund Mergl
- Portions Copyright (c) 1994,1995,1996,1997 Tim Bunce
-
- You may distribute under the terms of either the GNU General Public
- License or the Artistic License, as specified in the Perl README file.
-
-*/
-
-
-#include "Pg.h"
-
-
-#ifdef _MSC_VER
-#define strncasecmp(a,b,c) _strnicmp((a),(b),(c))
-#endif
-
-
-
-DBISTATE_DECLARE;
-
-
-MODULE = DBD::Pg PACKAGE = DBD::Pg
-
-PROTOTYPES: DISABLE
-
-BOOT:
- items = 0; /* avoid 'unused variable' warning */
- DBISTATE_INIT;
- /* XXX this interface will change: */
- DBI_IMP_SIZE("DBD::Pg::dr::imp_data_size", sizeof(imp_drh_t));
- DBI_IMP_SIZE("DBD::Pg::db::imp_data_size", sizeof(imp_dbh_t));
- DBI_IMP_SIZE("DBD::Pg::st::imp_data_size", sizeof(imp_sth_t));
- dbd_init(DBIS);
-
-
-# ------------------------------------------------------------
-# driver level interface
-# ------------------------------------------------------------
-MODULE = DBD::Pg PACKAGE = DBD::Pg::dr
-
-# disconnect_all renamed and ALIAS'd to avoid length clash on VMS :-(
-void
-discon_all_(drh)
- SV * drh
- ALIAS:
- disconnect_all = 1
- CODE:
- D_imp_drh(drh);
- ST(0) = dbd_discon_all(drh, imp_drh) ? &sv_yes : &sv_no;
-
-
-
-# ------------------------------------------------------------
-# database level interface
-# ------------------------------------------------------------
-MODULE = DBD::Pg PACKAGE = DBD::Pg::db
-
-void
-_login(dbh, dbname, username, pwd)
- SV * dbh
- char * dbname
- char * username
- char * pwd
- CODE:
- D_imp_dbh(dbh);
- ST(0) = pg_db_login(dbh, imp_dbh, dbname, username, pwd) ? &sv_yes : &sv_no;
-
-
-int
-_ping(dbh)
- SV * dbh
- CODE:
- int ret;
- ret = dbd_db_ping(dbh);
- if (ret == 0) {
- XST_mUNDEF(0);
- }
- else {
- XST_mIV(0, ret);
- }
-
-void
-commit(dbh)
- SV * dbh
- CODE:
- D_imp_dbh(dbh);
- if (DBIc_has(imp_dbh, DBIcf_AutoCommit)) {
- warn("commit ineffective with AutoCommit enabled");
- }
- ST(0) = dbd_db_commit(dbh, imp_dbh) ? &sv_yes : &sv_no;
-
-
-void
-rollback(dbh)
- SV * dbh
- CODE:
- D_imp_dbh(dbh);
- if (DBIc_has(imp_dbh, DBIcf_AutoCommit)) {
- warn("rollback ineffective with AutoCommit enabled");
- }
- ST(0) = dbd_db_rollback(dbh, imp_dbh) ? &sv_yes : &sv_no;
-
-
-void
-disconnect(dbh)
- SV * dbh
- CODE:
- D_imp_dbh(dbh);
- if ( !DBIc_ACTIVE(imp_dbh) ) {
- XSRETURN_YES;
- }
- /* pre-disconnect checks and tidy-ups */
- if (DBIc_CACHED_KIDS(imp_dbh)) {
- SvREFCNT_dec(DBIc_CACHED_KIDS(imp_dbh));
- DBIc_CACHED_KIDS(imp_dbh) = Nullhv;
- }
- /* Check for disconnect() being called whilst refs to cursors */
- /* still exists. This possibly needs some more thought. */
- if (DBIc_ACTIVE_KIDS(imp_dbh) && DBIc_WARN(imp_dbh) && !dirty) {
- char *plural = (DBIc_ACTIVE_KIDS(imp_dbh)==1) ? "" : "s";
- warn("disconnect(%s) invalidates %d active statement%s. %s",
- SvPV(dbh,na), (int)DBIc_ACTIVE_KIDS(imp_dbh), plural,
- "Either destroy statement handles or call finish on them before disconnecting.");
- }
- ST(0) = dbd_db_disconnect(dbh, imp_dbh) ? &sv_yes : &sv_no;
-
-
-void
-STORE(dbh, keysv, valuesv)
- SV * dbh
- SV * keysv
- SV * valuesv
- CODE:
- D_imp_dbh(dbh);
- ST(0) = &sv_yes;
- if (!dbd_db_STORE_attrib(dbh, imp_dbh, keysv, valuesv)) {
- if (!DBIS->set_attr(dbh, keysv, valuesv)) {
- ST(0) = &sv_no;
- }
- }
-
-
-void
-FETCH(dbh, keysv)
- SV * dbh
- SV * keysv
- CODE:
- D_imp_dbh(dbh);
- SV *valuesv = dbd_db_FETCH_attrib(dbh, imp_dbh, keysv);
- if (!valuesv) {
- valuesv = DBIS->get_attr(dbh, keysv);
- }
- ST(0) = valuesv; /* dbd_db_FETCH_attrib did sv_2mortal */
-
-
-void
-DESTROY(dbh)
- SV * dbh
- PPCODE:
- D_imp_dbh(dbh);
- ST(0) = &sv_yes;
- if (!DBIc_IMPSET(imp_dbh)) { /* was never fully set up */
- if (DBIc_WARN(imp_dbh) && !dirty && dbis->debug >= 2) {
- warn("Database handle %s DESTROY ignored - never set up", SvPV(dbh,na));
- }
- }
- else {
- /* pre-disconnect checks and tidy-ups */
- if (DBIc_CACHED_KIDS(imp_dbh)) {
- SvREFCNT_dec(DBIc_CACHED_KIDS(imp_dbh));
- DBIc_CACHED_KIDS(imp_dbh) = Nullhv;
- }
- if (DBIc_IADESTROY(imp_dbh)) { /* want's ineffective destroy */
- DBIc_ACTIVE_off(imp_dbh);
- }
- if (DBIc_ACTIVE(imp_dbh)) {
- if (DBIc_WARN(imp_dbh) && (!dirty || dbis->debug >= 3)) {
- warn("Database handle destroyed without explicit disconnect");
- }
- /* The application has not explicitly disconnected. That's bad. */
- /* To ensure integrity we *must* issue a rollback. This will be */
- /* harmless if the application has issued a commit. If it hasn't */
- /* then it'll ensure integrity. Consider a Ctrl-C killing perl */
- /* between two statements that must be executed as a transaction. */
- /* Perl will call DESTROY on the dbh and, if we don't rollback, */
- /* the server will automatically commit! Bham! Corrupt database! */
- if (!DBIc_has(imp_dbh,DBIcf_AutoCommit)) {
- dbd_db_rollback(dbh, imp_dbh); /* ROLLBACK! */
- }
- dbd_db_disconnect(dbh, imp_dbh);
- }
- dbd_db_destroy(dbh, imp_dbh);
- }
-
-
-# driver specific functions
-
-
-void
-lo_open(dbh, lobjId, mode)
- SV * dbh
- unsigned int lobjId
- int mode
- CODE:
- int ret = pg_db_lo_open(dbh, lobjId, mode);
- ST(0) = (-1 != ret) ? sv_2mortal(newSViv(ret)) : &sv_undef;
-
-void
-lo_close(dbh, fd)
- SV * dbh
- int fd
- CODE:
- ST(0) = (-1 != pg_db_lo_close(dbh, fd)) ? &sv_yes : &sv_no;
-
-
-void
-lo_read(dbh, fd, buf, len)
- SV * dbh
- int fd
- char * buf
- int len
- PREINIT:
- SV *bufsv = SvROK(ST(2)) ? SvRV(ST(2)) : ST(2);
- int ret;
- CODE:
- buf = SvGROW(bufsv, len + 1);
- ret = pg_db_lo_read(dbh, fd, buf, len);
- if (ret > 0) {
- SvCUR_set(bufsv, ret);
- *SvEND(bufsv) = '\0';
- sv_setpvn(ST(2), buf, ret);
- SvSETMAGIC(ST(2));
- }
- ST(0) = (-1 != ret) ? sv_2mortal(newSViv(ret)) : &sv_undef;
-
-
-void
-lo_write(dbh, fd, buf, len)
- SV * dbh
- int fd
- char * buf
- int len
- CODE:
- int ret = pg_db_lo_write(dbh, fd, buf, len);
- ST(0) = (-1 != ret) ? sv_2mortal(newSViv(ret)) : &sv_undef;
-
-
-void
-lo_lseek(dbh, fd, offset, whence)
- SV * dbh
- int fd
- int offset
- int whence
- CODE:
- int ret = pg_db_lo_lseek(dbh, fd, offset, whence);
- ST(0) = (-1 != ret) ? sv_2mortal(newSViv(ret)) : &sv_undef;
-
-
-void
-lo_creat(dbh, mode)
- SV * dbh
- int mode
- CODE:
- int ret = pg_db_lo_creat(dbh, mode);
- ST(0) = (-1 != ret) ? sv_2mortal(newSViv(ret)) : &sv_undef;
-
-
-void
-lo_tell(dbh, fd)
- SV * dbh
- int fd
- CODE:
- int ret = pg_db_lo_tell(dbh, fd);
- ST(0) = (-1 != ret) ? sv_2mortal(newSViv(ret)) : &sv_undef;
-
-
-void
-lo_unlink(dbh, lobjId)
- SV * dbh
- unsigned int lobjId
- CODE:
- ST(0) = (-1 != pg_db_lo_unlink(dbh, lobjId)) ? &sv_yes : &sv_no;
-
-
-void
-lo_import(dbh, filename)
- SV * dbh
- char * filename
- CODE:
- unsigned int ret = pg_db_lo_import(dbh, filename);
- ST(0) = (ret) ? sv_2mortal(newSViv(ret)) : &sv_undef;
-
-
-void
-lo_export(dbh, lobjId, filename)
- SV * dbh
- unsigned int lobjId
- char * filename
- CODE:
- ST(0) = (-1 != pg_db_lo_export(dbh, lobjId, filename)) ? &sv_yes : &sv_no;
-
-
-void
-putline(dbh, buf)
- SV * dbh
- char * buf
- CODE:
- int ret = pg_db_putline(dbh, buf);
- ST(0) = (-1 != ret) ? &sv_yes : &sv_no;
-
-
-void
-getline(dbh, buf, len)
- PREINIT:
- SV *bufsv = SvROK(ST(1)) ? SvRV(ST(1)) : ST(1);
- INPUT:
- SV * dbh
- int len
- char * buf = sv_grow(bufsv, len);
- CODE:
- int ret = pg_db_getline(dbh, buf, len);
- if (*buf == '\\' && *(buf+1) == '.') {
- ret = -1;
- }
- sv_setpv((SV*)ST(1), buf);
- SvSETMAGIC(ST(1));
- ST(0) = (-1 != ret) ? &sv_yes : &sv_no;
-
-
-void
-endcopy(dbh)
- SV * dbh
- CODE:
- ST(0) = (-1 != pg_db_endcopy(dbh)) ? &sv_yes : &sv_no;
-
-
-# -- end of DBD::Pg::db
-
-
-# ------------------------------------------------------------
-# statement interface
-# ------------------------------------------------------------
-MODULE = DBD::Pg PACKAGE = DBD::Pg::st
-
-void
-_prepare(sth, statement, attribs=Nullsv)
- SV * sth
- char * statement
- SV * attribs
- CODE:
- {
- D_imp_sth(sth);
- D_imp_dbh_from_sth;
- DBD_ATTRIBS_CHECK("_prepare", sth, attribs);
- if (!strncasecmp(statement, "begin", 5) ||
- !strncasecmp(statement, "end", 4) ||
- !strncasecmp(statement, "commit", 6) ||
- !strncasecmp(statement, "abort", 5) ||
- !strncasecmp(statement, "rollback", 8) ) {
- warn("please use DBI functions for transaction handling");
- ST(0) = &sv_no;
- } else {
- ST(0) = dbd_st_prepare(sth, imp_sth, statement, attribs) ? &sv_yes : &sv_no;
- }
- }
-
-
-void
-rows(sth)
- SV * sth
- CODE:
- D_imp_sth(sth);
- XST_mIV(0, dbd_st_rows(sth, imp_sth));
-
-
-void
-bind_param(sth, param, value, attribs=Nullsv)
- SV * sth
- SV * param
- SV * value
- SV * attribs
- CODE:
- {
- IV sql_type = 0;
- D_imp_sth(sth);
- if (attribs) {
- if (SvNIOK(attribs)) {
- sql_type = SvIV(attribs);
- attribs = Nullsv;
- }
- else {
- SV **svp;
- DBD_ATTRIBS_CHECK("bind_param", sth, attribs);
- /* XXX we should perhaps complain if TYPE is not SvNIOK */
- DBD_ATTRIB_GET_IV(attribs, "TYPE", 4, svp, sql_type);
- }
- }
- ST(0) = dbd_bind_ph(sth, imp_sth, param, value, sql_type, attribs, FALSE, 0) ? &sv_yes : &sv_no;
- }
-
-
-void
-bind_param_inout(sth, param, value_ref, maxlen, attribs=Nullsv)
- SV * sth
- SV * param
- SV * value_ref
- IV maxlen
- SV * attribs
- CODE:
- {
- IV sql_type = 0;
- D_imp_sth(sth);
- if (!SvROK(value_ref) || SvTYPE(SvRV(value_ref)) > SVt_PVMG) {
- croak("bind_param_inout needs a reference to a scalar value");
- }
- if (SvREADONLY(SvRV(value_ref))) {
- croak(no_modify);
- }
- if (attribs) {
- if (SvNIOK(attribs)) {
- sql_type = SvIV(attribs);
- attribs = Nullsv;
- }
- else {
- SV **svp;
- DBD_ATTRIBS_CHECK("bind_param", sth, attribs);
- DBD_ATTRIB_GET_IV(attribs, "TYPE", 4, svp, sql_type);
- }
- }
- ST(0) = dbd_bind_ph(sth, imp_sth, param, SvRV(value_ref), sql_type, attribs, TRUE, maxlen) ? &sv_yes : &sv_no;
- }
-
-
-void
-execute(sth, ...)
- SV * sth
- CODE:
- D_imp_sth(sth);
- int ret;
- if (items > 1) {
- /* Handle binding supplied values to placeholders */
- int i;
- SV *idx;
- imp_sth->all_params_len = 0; /* used for malloc of statement string in case we have placeholders */
- if (items-1 != DBIc_NUM_PARAMS(imp_sth)) {
- croak("execute called with %ld bind variables, %d needed", items-1, DBIc_NUM_PARAMS(imp_sth));
- XSRETURN_UNDEF;
- }
- idx = sv_2mortal(newSViv(0));
- for(i=1; i < items ; ++i) {
- sv_setiv(idx, i);
- if (!dbd_bind_ph(sth, imp_sth, idx, ST(i), 0, Nullsv, FALSE, 0)) {
- XSRETURN_UNDEF; /* dbd_bind_ph already registered error */
- }
- }
- }
- ret = dbd_st_execute(sth, imp_sth);
- /* remember that dbd_st_execute must return <= -2 for error */
- if (ret == 0) { /* ok with no rows affected */
- XST_mPV(0, "0E0"); /* (true but zero) */
- }
- else if (ret < -1) { /* -1 == unknown number of rows */
- XST_mUNDEF(0); /* <= -2 means error */
- }
- else {
- XST_mIV(0, ret); /* typically 1, rowcount or -1 */
- }
-
-
-void
-fetchrow_arrayref(sth)
- SV * sth
- ALIAS:
- fetch = 1
- CODE:
- D_imp_sth(sth);
- AV *av = dbd_st_fetch(sth, imp_sth);
- ST(0) = (av) ? sv_2mortal(newRV_inc((SV *)av)) : &sv_undef;
-
-
-void
-fetchrow_array(sth)
- SV * sth
- ALIAS:
- fetchrow = 1
- PPCODE:
- D_imp_sth(sth);
- AV *av;
- av = dbd_st_fetch(sth, imp_sth);
- if (av) {
- int num_fields = AvFILL(av)+1;
- int i;
- EXTEND(sp, num_fields);
- for(i=0; i < num_fields; ++i) {
- PUSHs(AvARRAY(av)[i]);
- }
- }
-
-
-void
-finish(sth)
- SV * sth
- CODE:
- D_imp_sth(sth);
- D_imp_dbh_from_sth;
- if (!DBIc_ACTIVE(imp_dbh)) {
- /* Either an explicit disconnect() or global destruction */
- /* has disconnected us from the database. Finish is meaningless */
- /* XXX warn */
- XSRETURN_YES;
- }
- if (!DBIc_ACTIVE(imp_sth)) {
- /* No active statement to finish */
- XSRETURN_YES;
- }
- ST(0) = dbd_st_finish(sth, imp_sth) ? &sv_yes : &sv_no;
-
-
-void
-blob_read(sth, field, offset, len, destrv=Nullsv, destoffset=0)
- SV * sth
- int field
- long offset
- long len
- SV * destrv
- long destoffset
- CODE:
- {
- D_imp_sth(sth);
- if (!destrv) {
- destrv = sv_2mortal(newRV_inc(sv_2mortal(newSViv(0))));
- }
- ST(0) = dbd_st_blob_read(sth, imp_sth, field, offset, len, destrv, destoffset) ? SvRV(destrv) : &sv_undef;
- }
-
-void
-STORE(sth, keysv, valuesv)
- SV * sth
- SV * keysv
- SV * valuesv
- CODE:
- D_imp_sth(sth);
- ST(0) = &sv_yes;
- if (!dbd_st_STORE_attrib(sth, imp_sth, keysv, valuesv)) {
- if (!DBIS->set_attr(sth, keysv, valuesv)) {
- ST(0) = &sv_no;
- }
- }
-
-
-# FETCH renamed and ALIAS'd to avoid case clash on VMS :-(
-void
-FETCH_attrib(sth, keysv)
- SV * sth
- SV * keysv
- ALIAS:
- FETCH = 1
- CODE:
- D_imp_sth(sth);
- SV *valuesv = dbd_st_FETCH_attrib(sth, imp_sth, keysv);
- if (!valuesv) {
- valuesv = DBIS->get_attr(sth, keysv);
- }
- ST(0) = valuesv; /* dbd_st_FETCH_attrib did sv_2mortal */
-
-
-void
-DESTROY(sth)
- SV * sth
- PPCODE:
- D_imp_sth(sth);
- ST(0) = &sv_yes;
- if (!DBIc_IMPSET(imp_sth)) { /* was never fully set up */
- if (DBIc_WARN(imp_sth) && !dirty && dbis->debug >= 2) {
- warn("Statement handle %s DESTROY ignored - never set up", SvPV(sth,na));
- }
- }
- else {
- if (DBIc_IADESTROY(imp_sth)) { /* want's ineffective destroy */
- DBIc_ACTIVE_off(imp_sth);
- }
- if (DBIc_ACTIVE(imp_sth)) {
- dbd_st_finish(sth, imp_sth);
- }
- dbd_st_destroy(sth, imp_sth);
- }
-
-
-# end of Pg.xs
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/README b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/README
deleted file mode 100644
index ed6a00b..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/README
+++ /dev/null
@@ -1,158 +0,0 @@
-
-DBD::Pg -- a PostgreSQL interface for Perl 5.
-
- $Id: README,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
- Copyright (c) 1997,1998,1999,2000 Edmund Mergl
- Portions Copyright (c) 1994,1995,1996,1997 Tim Bunce
-
- You may distribute under the terms of either the GNU General Public
- License or the Artistic License, as specified in the Perl README file.
-
-
-DESCRIPTION:
-------------
-
-This is version 0.95 of DBD-Pg.
-DBD-Pg is a PostgreSQL interface for Perl5 using DBI.
-
-For further information about DBI look at:
-
- http://www.isc.org/services/public/lists/dbi-lists.html
-
-
-RECENT CHANGES:
----------------
-
-- add Win32 port
-
-
-COPYRIGHT:
-----------
-
-You may distribute under the terms of either the GNU General Public
-License or the Artistic License, as specified in the Perl README file.
-
-
-HOW TO GET THE LATEST VERSION:
-------------------------------
-
-Use the following URL to look for new versions of this module:
-
- http://www.perl.com/CPAN/modules/by-module/DBD/
-
-Note, that this request will be redirected automatically to the
-nearest CPAN site.
-
-A precompiled package for Windows-NT is available at:
-
- http://www.edmund-mergl.de/export/DBD-Pg.zip
-
-
-IF YOU HAVE PROBLEMS:
----------------------
-
-Please send comments and bug-reports to <dbi-users(a)fugue.com>>
-
-Please include the output of perl -v,
- and perl -V,
- the version of PostgreSQL,
- the version of DBD-Pg,
- and the version of DBI
-in your bug-report.
-
-
-REQUIREMENTS:
--------------
-
- - build, test and install Perl 5 (at least 5.003)
- - build, test and install the DBI module (at least 1.00)
- - build, test and install PostgreSQL (at least 6.5)
-
-
-PLATFORMS:
-----------
-
- This release of DBD-Pg has been developed using Linux 2.2 with
- dynamic loading for the perl extensions. Let me know, if there
- are any problems with other platforms.
-
-
-INSTALLATION:
--------------
-
-The Makefile checks the environment variables POSTGRES_INCLUDE and
-POSTGRES_LIB, to find the library lipq.so and the proper include files.
-
-1. perl Makefile.PL
-2. make
-3. make test
-4. make install
-
-( 1. to 3. as normal user, not as root ! )
-
-For Windows-NT use the pre-compiled package DBD-Pg.zip.
-Unzip the package and follow the instructions in the
-README.
-
-
-TESTING:
---------
-
-Run 'make test'.
-Note, that the user running this script must have been created with
-the access rights to create databases *AND* users ! Do not run this
-script as root !
-
-If testing fails with the message 'login failed', please check if access
-to the database template1 as well as pgperltest is not protected in pg_hba.conf.
-
-If you are using the shared library libpq.so check if your dynamic loader
-finds libpq.so. With Linux the command /sbin/ldconfig -v should tell you,
-where it finds libpq.so. If ldconfig does not find libpq.so, either add an
-appropriate entry to /etc/ld.so.conf and re-run ldconfig or add the path to
-the environment variable LD_LIBRARY_PATH.
-A typical error message resulting from not finding libpq.so is:
- install_driver(Pg) failed: Can't load './blib/arch/auto/DBD/Pg/Pg.so'
- for module DBD::Pg: File not found at
-
-Some linux distributions have an incomplete perl installation.
-If you have compile errors like "XS_VERSION_BOOTCHECK undeclared", make a
- 'find .../lib/perl5 -name XSUB.h -print'
-If this file is not present, you need to recompile and reinstall perl.
-
-SGI users: if you get segmentation faults make sure, you use the malloc which
- comes with perl when compiling perl (the default is not to).
- "David R. Noble" <drnoble(a)engsci.sandia.gov>
-
-HP users: if you get error messages like:
- can't open shared library: .../lib/libpq.sl
- No such file or directory
- when running the test script, try to replace the
- 'shared' option in the LDDFLAGS with 'archive'.
- Dan Lauterbach <danla(a)dimensional.com>
-
-FreeBSD users: if you get during make test the error message:
- 'DBD driver has not implemented the AutoCommit attribute'
- recompile the DBI module and the DBD-Pg module and disable
- optimization. This error message is due to the broken
- optimization in gcc-2.7.2.1.
-
-Sun Users: if you get compile errors like:
- /usr/include/string.h:57: parse error before `]'
- then you need to remove from pgsql/include/libpq-fe.h
- the define for strerror, which clashes with the definition
- in the standard include file.
-
-
-Win32 Users: Running DBD-Pg scripts on Win32 needs some configuration work
- on the server side:
- - add a postgres user with the same name as the NT-User (eg Administrator)
- - make sure, that your pg_hba.conf on the server is configured,
- such that a connection from another host will be accepted
-
----------------------------------------------------------------------------
-
- Edmund Mergl <E.Mergl(a)bawue.de> July 10, 2000
-
----------------------------------------------------------------------------
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/README.win32 b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/README.win32
deleted file mode 100644
index bb4c060..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/README.win32
+++ /dev/null
@@ -1,75 +0,0 @@
-
-$Id: README.win32,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
-
-######################################################################
-# #
-# a pre-compiled package is available at: #
-# #
-# http://www.edmund-mergl.de/export/DBD-Pg.zip #
-# #
-######################################################################
-
-
-Here is a step-by-step procedure for getting DBD-Pg to work on Windows NT.
-This Port has been done by Bob Kline <bkline(a)rksystems.com>.
-
-
-prerequisites: (older versions might also work, but these are the versions I used)
---------------
-
- - Windows NT4 SP4
- - Visual Studio 6.0
- - ActivePerl-5_6_0_613 with DBI-1.13
- - postgresql-7.0.2
- - DBD-Pg-0.95
-
-Here we assume, that perl and postgresql have been installed in C:\
-Now perform the following steps:
-
-
-1. compile libpq
-----------------
-
-set POSTGRES_HOME=C:\postgresql-7.0.2
-cd postgresql-7.0.2
-mkdir lib
-mkdir include
-cd src
-copy include\port\win32.h include\os.h
-edit interfaces\libpq\fe-connect.c and add as first statement in connectDBStart() the following code:
- #ifdef WIN32
- static int WeHaveCalledWSAStartup;
- if (!WeHaveCalledWSAStartup) {
- WSADATA wsaData;
- if (WSAStartup(MAKEWORD(1, 1), &wsaData)) {
- printfPQExpBuffer(&conn->errorMessage, "WSAStartup failed: errno=%d\n", h_errno);
- goto connect_errReturn;
- }
- WeHaveCalledWSAStartup = 1;
- }
- #endif
-edit interfaces\libpq\win32.mak and change the flag /ML to /MD: CPP_PROJ=/nologo /MD ...
-nmake /f win32.mak
-cd ..
-copy src\interfaces\libpq\Release\libpq.lib lib
-copy src\interfaces\libpq\libpq-fe.h include
-copy src\include\postgres_ext.h include
-cd ..
-
-
-2. build DBD-Pg
----------------
-
-cd DBD-Pg
-perl Makefile.PL CAPI=TRUE
-nmake
-set the environment variable PGHOST to the name of the postgresql server: set PGHOST=myserver
-add on the server a postgres user with the same name as the NT-User (eg Administrator)
-make sure, that your pg_hba.conf on the server is configured, such that a connection from another host will be accepted
-mkdir C:\tmp
-nmake test (expect to get errors concerning blobs)
-nmake install
-
-
-# EOF
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbd-pg.pod b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbd-pg.pod
deleted file mode 100644
index d25cec2..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbd-pg.pod
+++ /dev/null
@@ -1,411 +0,0 @@
-
-# $Id: dbd-pg.pod,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
-=head1 NAME
-
-DBD::Pg - PostgreSQL database driver for the DBI module
-
-=head1 DESCRIPTION
-
-DBD::Pg is a Perl module which works with the DBI module to provide
-access to PostgreSQL databases.
-
-=head1 DBD::Pg
-
-=begin docbook
-<!-- The following blank =head1 is to allow us to use purely =head2 headings -->
-<!-- This keeps the POD fairly simple with regards to Pod::DocBook -->
-
-=end docbook
-
-=head1
-
-=head2 Version
-
-Version 0.91.
-
-=head2 Author and Contact Details
-
-The driver author is Edmund Mergl. He can be contacted via the
-I<dbi-users> mailing list.
-
-
-=head2 Supported Database Versions and Options
-
-The DBD-Pg-0.92 module supports Postgresql 6.5.
-
-
-=head2 Connect Syntax
-
-The C<DBI-E<gt>connect()> Data Source Name, or I<DSN>, can be one of the
-following:
-
- dbi:Pg:dbname=$dbname
- dbi:Pg:dbname=$dbname;host=$host;port=$port;options=$options;tty=$tty
-
-All parameters, including the userid and password parameter of the
-connect command, have a hard-coded default which can be overridden
-by setting appropriate environment variables:
-
- Parameter Environment Variable Default
- --------- -------------------- --------------
- dbname PGDATABASE current userid
- host PGHOST localhost
- port PGPORT 5432
- options PGOPTIONS ""
- tty PGTTY ""
- username PGUSER current userid
- password PGPASSWORD ""
-
-There are no driver specific attributes for the C<DBI->connect()> method.
-
-
-=head2 Numeric Data Handling
-
-Postgresql supports the following numeric types:
-
- Postgresql Range
- ---------- --------------------------
- int2 -32768 to +32767
- int4 -2147483648 to +2147483647
- float4 6 decimal places
- float8 15 decimal places
-
-Some platforms also support the int8 type.
-C<DBD::Pg> always returns all numbers as strings.
-
-
-=head2 String Data Handling
-
-Postgresql supports the following string data types:
-
- CHAR single character
- CHAR(size) fixed length blank-padded
- VARCHAR(size) variable length with limit
- TEXT variable length
-
-All string data types have a limit of 4096 bytes.
-The CHAR type is fixed length and blank padded.
-
-There is no special handling for data with the 8th bit set. They
-are stored unchanged in the database.
-None of the character types can store embedded nulls and Unicode is
-not formally supported.
-
-Strings can be concatenated using the C<||> operator.
-
-
-=head2 Date Data Handling
-
-Postgresql supports the following date time data types:
-
- Type Storage Recommendation Description
- --------- -------- -------------------------- ----------------------------
- abstime 4 bytes original date and time limited range
- date 4 bytes SQL92 type wide range
- datetime 8 bytes best general date and time wide range, high precision
- interval 12 bytes SQL92 type equivalent to timespan
- reltime 4 bytes original time interval limited range, low precision
- time 4 bytes SQL92 type wide range
- timespan 12 bytes best general time interval wide range, high precision
- timestamp 4 bytes SQL92 type limited range
-
- Data Type Range Resolution
- ---------- ---------------------------------- -----------
- abstime 1901-12-14 2038-01-19 1 sec
- timestamp 1901-12-14 2038-01-19 1 sec
- reltime -68 years +68 years 1 sec
- tinterval -178000000 years +178000000 years 1 microsec
- timespan -178000000 years 178000000 years 1 microsec
- date 4713 BC 32767 AD 1 day
- datetime 4713 BC 1465001 AD 1 microsec
- time 00:00:00:00 23:59:59:99 1 microsec
-
-Postgresql supports a range of date formats:
-
- Name Example
- ----------- ----------------------
- ISO 1997-12-17 0:37:16-08
- SQL 12/17/1997 07:37:16.00 PST
- Postgres Wed Dec 17 07:37:16 1997 PST
- European 17/12/1997 15:37:16.00 MET
- NonEuropean 12/17/1997 15:37:16.00 MET
- US 12/17/1997 07:37:16.00 MET
-
-The default output format does not depend on the client/server locale.
-It depends on, in increasing priority: the PGDATESTYLE environment
-variable at the server, the PGDATESTYLE environment variable at the client, and
-the C<SET DATESTYLE> SQL command.
-
-All of the formats described above can be used for input. A great many
-others can also be used. There is no specific default input format.
-If the format of a date input is ambiguous then the current DATESTYLE
-is used to help disambiguate.
-
-If you specify a date/time value without a time component, the default
-time is 00:00:00 (midnight). To specify a date/time value without a date
-is not allowed.
-If a date with a two digit year is input then if the year was less than
-70, add 2000; otherwise, add 1900.
-
-The currect date/time is returned by the keyword C<'now'> or C<'current'>,
-which has to be casted to a valid data type. For example:
-
- SELECT 'now'::datetime
-
-Postgresql supports a range of date time functions for converting
-between types, extracting parts of a date time value, truncating to a
-given unit, etc. The usual arithmetic can be performed on date and
-interval values, e.g., date-date=interval, etc.
-
-The following SQL expression can be used to convert an integer "seconds
-since 1-jan-1970 GMT" value to the corresponding database date time:
-
- DATETIME(unixtime_field)
-
-and to do the reverse:
-
- DATE_PART('epoch', datetime_field)
-
-The server stores all dates internally in GMT. Times are converted to
-local time on the database server before being sent to the client
-frontend, hence by default are in the server time zone.
-
-The TZ environment variable is used by the server as default time
-zone. The PGTZ environment variable on the client side is used to send
-the time zone information to the backend upon connection. The SQL C<SET
-TIME ZONE> command can set the time zone for the current session.
-
-
-=head2 LONG/BLOB Data Handling
-
-Postgresql handles BLOBS using a so called "large objects" type. The
-handling of this type differs from all other data types. The data are
-broken into chunks, which are stored in tuples in the database. Access
-to large objects is given by an interface which is modelled closely
-after the UNIX file system. The maximum size is limited by the file
-size of the operating system.
-
-
-If you just select the field, you get a "large object identifier" and
-not the data itself. The I<LongReadLen> and I<LongTruncOk> attributes are
-not implemented because they don't make sense in this case. The only
-method implemented by the driver is the undocumented DBI method
-C<blob_read()>.
-
-
-=head2 Other Data Handling issues
-
-The C<DBD::Pg> driver supports the C<type_info()> method.
-
-Postgresql supports automatic conversions between data types wherever
-it's reasonable.
-
-=head2 Transactions, Isolation and Locking
-
-Postgresql supports transactions.
-The current default isolation transaction level is "Serializable" and
-is currently implemented using table level locks. Both may change.
-No other isolation levels for transactions are supported.
-
-With AutoCommit on, a query never places a lock on a table. Readers
-never block writers and writers never block readers. This behavior
-changes whenever a transaction is started (AutoCommit off). Then a
-query induces a shared lock on a table and blocks anyone else
-until the transaction has been finished.
-
-The C<LOCK TABLE table_name> statement can be used to apply an explicit
-lock on a table. This only works inside a transaction (AutoCommit off).
-
-To ensure that a table being selected does not change before you make
-an update later in the transaction, you must explicitly lock it with a
-C<LOCK TABLE> statement before executing the select.
-
-
-=head2 No-Table Expression Select Syntax
-
-To select a constant expression, that is, an expression that doesn't involve
-data from a database table or view, just omit the "from" clause.
-Here's an example that selects the current time as a datetime:
-
- SELECT 'now'::datetime;
-
-=head2 Table Join Syntax
-
-Outer joins are not supported. Inner joins use the traditional syntax.
-
-=head2 Table and Column Names
-
-The max size of table and column names cannot exceed 31 charaters in
-length.
-Only alphanumeric characters can be used; the first character must
-be a letter.
-
-If an identifier is enclosed by double quotation marks (C<">), it can
-contain any combination of characters except double quotation marks.
-
-Postgresql converts all identifiers to lower-case unless enclosed in
-double quotation marks.
-National character set characters can be used, if enclosed in quotation
-marks.
-
-
-=head2 Case Sensitivity of LIKE Operator
-
-Postgresql has the following string matching operators:
-
- Glyph Description Example
- ----- ---------------------------------------- -----------------------------
- ~~ Same as SQL "LIKE" operator 'scrappy,marc' ~~ '%scrappy%'
- !~~ Same as SQL "NOT LIKE" operator 'bruce' !~~ '%al%'
- ~ Match (regex), case sensitive 'thomas' ~ '.*thomas.*'
- ~* Match (regex), case insensitive 'thomas' ~* '.*Thomas.*'
- !~ Does not match (regex), case sensitive 'thomas' !~ '.*Thomas.*'
- !~* Does not match (regex), case insensitive 'thomas' !~ '.*vadim.*'
-
-
-=head2 Row ID
-
-The Postgresql "row id" pseudocolumn is called I<oid>, object identifier.
-It can be treated as a string and used to rapidly (re)select rows.
-
-
-=head2 Automatic Key or Sequence Generation
-
-Postgresql does not support automatic key generation such as "auto
-increment" or "system generated" keys.
-
-However, Postgresql does support "sequence generators". Any number of
-named sequence generators can be created in a database. Sequences
-are used via functions called C<NEXTVAL> and C<CURRVAL>. Typical usage:
-
- INSERT INTO table (k, v) VALUES (nextval('seq_name'), ?);
-
-To get the value just inserted, you can use the corresponding C<currval()>
-SQL function in the same session, or
-
- SELECT last_value FROM seq_name
-
-
-=head2 Automatic Row Numbering and Row Count Limiting
-
-Postgresql does not support any way of automatically numbering returned rows.
-
-
-=head2 Parameter Binding
-
-Parameter binding is emulated by the driver.
-Both the C<?> and C<:1> style of placeholders are supported.
-
-The TYPE attribute of the C<bind_param()> method may be used to
-influence how parameters are treated. These SQL types are bound as
-VARCHAR: SQL_NUMERIC, SQL_DECIMAL, SQL_INTEGER, SQL_SMALLINT,
-SQL_FLOAT, SQL_REAL, SQL_DOUBLE, SQL_VARCHAR.
-
-The SQL_CHAR type is bound as a CHAR thus enabling fixed-width blank
-padded comparison semantics.
-
-Unsupported values of the TYPE attribute generate a warning.
-
-
-=head2 Stored Procedures
-
-C<DBD::Pg> does not support stored procedures.
-
-
-=head2 Table Metadata
-
-C<DBD::Pg> supports the C<table_info()> method.
-
-The I<pg_attribute> table contains detailed information about all columns
-of all the tables in the database, one row per table.
-
-The I<pg_index> table contains detailed information about all indexes in
-the database, one row per index.
-
-Primary keys are implemented as unique indexes. See I<pg_index> above.
-
-
-=head2 Driver-specific Attributes and Methods
-
-There are no significant C<DBD::Pg> driver-specific database handle attributes.
-
-C<DBD::Pg> has the following driver-specific statement handle attributes:
-
-=over 8
-
-=item I<pg_size>
-
-Returns a reference to an array of integer values for each column. The
-integer shows the storage (not display) size of the column in bytes.
-Variable length columns are indicated by -1.
-
-=item I<pg_type>
-
-Returns a reference to an array of strings for each column. The string
-shows the name of the data type.
-
-=item I<pg_oid_status>
-
-Returns the OID of the last INSERT command.
-
-=item I<pg_cmd_status>
-
-Returns the name of the last command type. Possible types are: INSERT,
-DELETE, UPDATE, SELECT.
-
-=back
-
-
-C<DBD::Pg> has no private methods.
-
-
-=head2 Positioned updates and deletes
-
-Postgresql does not support positioned updates or deletes.
-
-
-=head2 Differences from the DBI Specification
-
-C<DBD::Pg> has no significant differences in behavior from the
-current DBI specification.
-
-Note that C<DBD::Pg> does not fully parse the statement until
-it's executed. Thus attributes like I<$sth-E<gt>{NUM_OF_FIELDS}> are not
-available until after C<$sth-E<gt>execute> has been called. This is valid
-behaviour but is important to note when porting applications
-originally written for other drivers.
-
-
-=head2 URLs to More Database/Driver Specific Information
-
- http://www.postgresql.org
-
-
-=head2 Concurrent use of Multiple Handles
-
-C<DBD::Pg> supports an unlimited number of concurrent database
-connections to one or more databases.
-
-It also supports the preparation and execution of a new statement
-handle while still fetching data from another statement handle,
-provided it is
-associated with the same database handle.
-
-
-=head2 Other Significant Database or Driver Features
-
-Postgres offers substantial additional power by incorporating the
-following four additional basic concepts in such a way that users can
-easily extend the system: classes, inheritance, types, and functions.
-
-Other features provide additional power and flexibility: constraints,
-triggers, rules, transaction integrity, procedural languages, and large objects.
-
-It's also free Open Source Software with an active community of developers.
-
-=cut
-
-# This driver summary for DBD::Pg is Copyright (c) 1999 Tim Bunce
-# and Edmund Mergl.
-# $Id: dbd-pg.pod,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.c b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.c
deleted file mode 100644
index 467d168..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.c
+++ /dev/null
@@ -1,1725 +0,0 @@
-
-/*
- $Id: dbdimp.c,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
- Copyright (c) 1997,1998,1999,2000 Edmund Mergl
- Portions Copyright (c) 1994,1995,1996,1997 Tim Bunce
-
- You may distribute under the terms of either the GNU General Public
- License or the Artistic License, as specified in the Perl README file.
-
-*/
-
-
-/*
- hard-coded OIDs: (here we need the postgresql types)
- pg_sql_type() 1042 (bpchar), 1043 (varchar)
- ddb_st_fetch() 1042 (bpchar), 16 (bool)
- ddb_preparse() 1043 (varchar)
- pgtype_bind_ok()
-*/
-
-#include "Pg.h"
-
-/* XXX DBI should provide a better version of this */
-#define IS_DBI_HANDLE(h) (SvROK(h) && SvTYPE(SvRV(h)) == SVt_PVHV && SvRMAGICAL(SvRV(h)) && (SvMAGIC(SvRV(h)))->mg_type == 'P')
-
-DBISTATE_DECLARE;
-
-
-static void dbd_preparse (imp_sth_t *imp_sth, char *statement);
-
-
-void
-dbd_init (dbistate)
- dbistate_t *dbistate;
-{
- DBIS = dbistate;
-}
-
-
-int
-dbd_discon_all (drh, imp_drh)
- SV *drh;
- imp_drh_t *imp_drh;
-{
- dTHR;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_discon_all\n"); }
-
- /* The disconnect_all concept is flawed and needs more work */
- if (!dirty && !SvTRUE(perl_get_sv("DBI::PERL_ENDING",0))) {
- sv_setiv(DBIc_ERR(imp_drh), (IV)1);
- sv_setpv(DBIc_ERRSTR(imp_drh),
- (char*)"disconnect_all not implemented");
- DBIh_EVENT2(drh, ERROR_event,
- DBIc_ERR(imp_drh), DBIc_ERRSTR(imp_drh));
- return FALSE;
- }
- if (perl_destruct_level) {
- perl_destruct_level = 0;
- }
- return FALSE;
-}
-
-
-/* Database specific error handling. */
-
-void
-pg_error (h, error_num, error_msg)
- SV *h;
- int error_num;
- char *error_msg;
-{
- D_imp_xxh(h);
-
- sv_setiv(DBIc_ERR(imp_xxh), (IV)error_num); /* set err early */
- sv_setpv(DBIc_ERRSTR(imp_xxh), (char*)error_msg);
- DBIh_EVENT2(h, ERROR_event, DBIc_ERR(imp_xxh), DBIc_ERRSTR(imp_xxh));
- if (dbis->debug >= 2) { fprintf(DBILOGFP, "%s error %d recorded: %s\n", error_msg, error_num, SvPV(DBIc_ERRSTR(imp_xxh),na)); }
-}
-
-static int
-pgtype_bind_ok (dbtype)
- int dbtype;
-{
- /* basically we support types that can be returned as strings */
- switch(dbtype) {
- case 16: /* bool */
- case 18: /* char */
- case 20: /* int8 */
- case 21: /* int2 */
- case 23: /* int4 */
- case 25: /* text */
- case 26: /* oid */
- case 700: /* float4 */
- case 701: /* float8 */
- case 702: /* abstime */
- case 703: /* reltime */
- case 704: /* tinterval */
- case 1042: /* bpchar */
- case 1043: /* varchar */
- case 1082: /* date */
- case 1083: /* time */
- case 1184: /* datetime */
- case 1186: /* timespan */
- case 1296: /* timestamp */
- return 1;
- }
- return 0;
-}
-
-
-/* ================================================================== */
-
-int
-pg_db_login (dbh, imp_dbh, dbname, uid, pwd)
- SV *dbh;
- imp_dbh_t *imp_dbh;
- char *dbname;
- char *uid;
- char *pwd;
-{
- dTHR;
-
- char *conn_str;
- char *src;
- char *dest;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "pg_db_login\n"); }
-
- /* build connect string */
- /* DBD-Pg syntax: 'dbname=dbname;host=host;port=port' */
- /* pgsql syntax: 'dbname=dbname host=host port=port user=uid password=pwd' */
-
- conn_str = (char *)malloc(strlen(dbname) + strlen(uid) + strlen(pwd) + 16 + 1);
- if (! conn_str) {
- return 0;
- }
-
- src = dbname;
- dest = conn_str;
- while (*src) {
- if (*src != ';') {
- *dest++ = *src++;
- continue;
- }
- *dest++ = ' ';
- src++;
- }
- *dest = '\0';
-
- if (strlen(uid)) {
- strcat(conn_str, " user=");
- strcat(conn_str, uid);
- }
- if (strlen(uid) && strlen(pwd)) {
- strcat(conn_str, " password=");
- strcat(conn_str, pwd);
- }
-
- if (dbis->debug >= 2) { fprintf(DBILOGFP, "pg_db_login: conn_str = >%s<\n", conn_str); }
-
- /* make a connection to the database */
- imp_dbh->conn = PQconnectdb(conn_str);
- free(conn_str);
-
- /* check to see that the backend connection was successfully made */
- if (PQstatus(imp_dbh->conn) != CONNECTION_OK) {
- pg_error(dbh, PQstatus(imp_dbh->conn), PQerrorMessage(imp_dbh->conn));
- PQfinish(imp_dbh->conn);
- return 0;
- }
-
- imp_dbh->init_commit = 1; /* initialize AutoCommit */
- imp_dbh->pg_auto_escape = 1; /* initialize pg_auto_escape */
-
- DBIc_IMPSET_on(imp_dbh); /* imp_dbh set up now */
- DBIc_ACTIVE_on(imp_dbh); /* call disconnect before freeing */
- return 1;
-}
-
-
-int
-dbd_db_ping (dbh)
- SV *dbh;
-{
- char id;
- D_imp_dbh(dbh);
- PGresult* result;
- ExecStatusType status;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_db_ping\n"); }
-
- result = PQexec(imp_dbh->conn, " ");
- status = result ? PQresultStatus(result) : -1;
-
- if (PGRES_EMPTY_QUERY != status) {
- return 0;
- }
-
- return 1;
-}
-
-
-int
-dbd_db_commit (dbh, imp_dbh)
- SV *dbh;
- imp_dbh_t *imp_dbh;
-{
- PGresult* result = 0;
- ExecStatusType status;
- int retval = 1;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_db_commit\n"); }
-
- /* no commit if AutoCommit = on */
- if (DBIc_has(imp_dbh, DBIcf_AutoCommit) != FALSE) {
- return 0;
- }
-
- /* execute commit */
- result = PQexec(imp_dbh->conn, "commit");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
-
- /* check result */
- if (status != PGRES_COMMAND_OK) {
- pg_error(dbh, status, "commit failed\n");
- return 0;
- }
-
- /* start new transaction if AutoCommit = off */
- if (DBIc_has(imp_dbh, DBIcf_AutoCommit) == FALSE) {
- result = PQexec(imp_dbh->conn, "begin");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
- if (status != PGRES_COMMAND_OK) {
- pg_error(dbh, status, "begin failed\n");
- return 0;
- }
- }
-
- return retval;
-}
-
-
-int
-dbd_db_rollback (dbh, imp_dbh)
- SV *dbh;
- imp_dbh_t *imp_dbh;
-{
- PGresult* result = 0;
- ExecStatusType status;
- int retval = 1;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_db_rollback\n"); }
-
- /* no rollback if AutoCommit = on */
- if (DBIc_has(imp_dbh, DBIcf_AutoCommit) != FALSE) {
- return 0;
- }
-
- /* execute rollback */
- result = PQexec(imp_dbh->conn, "rollback");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
-
- /* check result */
- if (status != PGRES_COMMAND_OK) {
- pg_error(dbh, status, "rollback failed\n");
- return 0;
- }
-
- /* start new transaction if AutoCommit = off */
- if (DBIc_has(imp_dbh, DBIcf_AutoCommit) == FALSE) {
- result = PQexec(imp_dbh->conn, "begin");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
- if (status != PGRES_COMMAND_OK) {
- pg_error(dbh, status, "begin failed\n");
- return 0;
- }
- }
-
- return retval;
-}
-
-
-int
-dbd_db_disconnect (dbh, imp_dbh)
- SV *dbh;
- imp_dbh_t *imp_dbh;
-{
- dTHR;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_db_disconnect\n"); }
-
- /* We assume that disconnect will always work */
- /* since most errors imply already disconnected. */
- DBIc_ACTIVE_off(imp_dbh);
-
- /* rollback if AutoCommit = off */
- if (DBIc_has(imp_dbh, DBIcf_AutoCommit) == FALSE) {
- PGresult* result = 0;
- ExecStatusType status;
- result = PQexec(imp_dbh->conn, "rollback");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
- if (status != PGRES_COMMAND_OK) {
- pg_error(dbh, status, "rollback failed\n");
- return 0;
- }
- if (dbis->debug >= 2) { fprintf(DBILOGFP, "dbd_db_disconnect: AutoCommit=off -> rollback\n"); }
- }
-
- PQfinish(imp_dbh->conn);
-
- /* We don't free imp_dbh since a reference still exists */
- /* The DESTROY method is the only one to 'free' memory. */
- /* Note that statement objects may still exists for this dbh! */
- return 1;
-}
-
-
-void
-dbd_db_destroy (dbh, imp_dbh)
- SV *dbh;
- imp_dbh_t *imp_dbh;
-{
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_db_destroy\n"); }
-
- if (DBIc_ACTIVE(imp_dbh)) {
- dbd_db_disconnect(dbh, imp_dbh);
- }
-
- /* Nothing in imp_dbh to be freed */
- DBIc_IMPSET_off(imp_dbh);
-}
-
-
-int
-dbd_db_STORE_attrib (dbh, imp_dbh, keysv, valuesv)
- SV *dbh;
- imp_dbh_t *imp_dbh;
- SV *keysv;
- SV *valuesv;
-{
- STRLEN kl;
- char *key = SvPV(keysv,kl);
- int newval = SvTRUE(valuesv);
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_db_STORE\n"); }
-
- if (kl==10 && strEQ(key, "AutoCommit")) {
- int oldval = DBIc_has(imp_dbh, DBIcf_AutoCommit);
- DBIc_set(imp_dbh, DBIcf_AutoCommit, newval);
- if (oldval == FALSE && newval != FALSE && imp_dbh->init_commit) {
- /* do nothing, fall through */
- if (dbis->debug >= 2) { fprintf(DBILOGFP, "dbd_db_STORE: initialize AutoCommit to on\n"); }
- } else if (oldval == FALSE && newval != FALSE) {
- /* commit any outstanding changes */
- PGresult* result = 0;
- ExecStatusType status;
- result = PQexec(imp_dbh->conn, "commit");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
- if (status != PGRES_COMMAND_OK) {
- pg_error(dbh, status, "commit failed\n");
- return 0;
- }
- if (dbis->debug >= 2) { fprintf(DBILOGFP, "dbd_db_STORE: switch AutoCommit to on: commit\n"); }
- } else if ((oldval != FALSE && newval == FALSE) || (oldval == FALSE && newval == FALSE && imp_dbh->init_commit)) {
- /* start new transaction */
- PGresult* result = 0;
- ExecStatusType status;
- result = PQexec(imp_dbh->conn, "begin");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
- if (status != PGRES_COMMAND_OK) {
- pg_error(dbh, status, "begin failed\n");
- return 0;
- }
- if (dbis->debug >= 2) { fprintf(DBILOGFP, "dbd_db_STORE: switch AutoCommit to off: begin\n"); }
- }
- /* only needed once */
- imp_dbh->init_commit = 0;
- return 1;
- } else if (kl==14 && strEQ(key, "pg_auto_escape")) {
- imp_dbh->pg_auto_escape = newval;
- } else {
- return 0;
- }
-}
-
-
-SV *
-dbd_db_FETCH_attrib (dbh, imp_dbh, keysv)
- SV *dbh;
- imp_dbh_t *imp_dbh;
- SV *keysv;
-{
- STRLEN kl;
- char *key = SvPV(keysv,kl);
- SV *retsv = Nullsv;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_db_FETCH\n"); }
-
- if (kl==10 && strEQ(key, "AutoCommit")) {
- retsv = boolSV(DBIc_has(imp_dbh, DBIcf_AutoCommit));
- } else if (kl==14 && strEQ(key, "pg_auto_escape")) {
- retsv = newSViv((IV)imp_dbh->pg_auto_escape);
- } else if (kl==11 && strEQ(key, "pg_INV_READ")) {
- retsv = newSViv((IV)INV_READ);
- } else if (kl==12 && strEQ(key, "pg_INV_WRITE")) {
- retsv = newSViv((IV)INV_WRITE);
- }
-
- if (!retsv) {
- return Nullsv;
- }
- if (retsv == &sv_yes || retsv == &sv_no) {
- return retsv; /* no need to mortalize yes or no */
- }
- return sv_2mortal(retsv);
-}
-
-
-/* driver specific functins */
-
-
-int
-pg_db_lo_open (dbh, lobjId, mode)
- SV *dbh;
- unsigned int lobjId;
- int mode;
-{
- D_imp_dbh(dbh);
- return lo_open(imp_dbh->conn, lobjId, mode);
-}
-
-
-int
-pg_db_lo_close (dbh, fd)
- SV *dbh;
- int fd;
-{
- D_imp_dbh(dbh);
- return lo_close(imp_dbh->conn, fd);
-}
-
-
-int
-pg_db_lo_read (dbh, fd, buf, len)
- SV *dbh;
- int fd;
- char *buf;
- int len;
-{
- D_imp_dbh(dbh);
- return lo_read(imp_dbh->conn, fd, buf, len);
-}
-
-
-int
-pg_db_lo_write (dbh, fd, buf, len)
- SV *dbh;
- int fd;
- char *buf;
- int len;
-{
- D_imp_dbh(dbh);
- return lo_write(imp_dbh->conn, fd, buf, len);
-}
-
-
-int
-pg_db_lo_lseek (dbh, fd, offset, whence)
- SV *dbh;
- int fd;
- int offset;
- int whence;
-{
- D_imp_dbh(dbh);
- return lo_lseek(imp_dbh->conn, fd, offset, whence);
-}
-
-
-unsigned int
-pg_db_lo_creat (dbh, mode)
- SV *dbh;
- int mode;
-{
- D_imp_dbh(dbh);
- return lo_creat(imp_dbh->conn, mode);
-}
-
-
-int
-pg_db_lo_tell (dbh, fd)
- SV *dbh;
- int fd;
-{
- D_imp_dbh(dbh);
- return lo_tell(imp_dbh->conn, fd);
-}
-
-
-int
-pg_db_lo_unlink (dbh, lobjId)
- SV *dbh;
- unsigned int lobjId;
-{
- D_imp_dbh(dbh);
- return lo_unlink(imp_dbh->conn, lobjId);
-}
-
-
-unsigned int
-pg_db_lo_import (dbh, filename)
- SV *dbh;
- char *filename;
-{
- D_imp_dbh(dbh);
- return lo_import(imp_dbh->conn, filename);
-}
-
-
-int
-pg_db_lo_export (dbh, lobjId, filename)
- SV *dbh;
- unsigned int lobjId;
- char *filename;
-{
- D_imp_dbh(dbh);
- return lo_export(imp_dbh->conn, lobjId, filename);
-}
-
-
-int
-pg_db_putline (dbh, buffer)
- SV *dbh;
- char *buffer;
-{
- D_imp_dbh(dbh);
- return PQputline(imp_dbh->conn, buffer);
-}
-
-
-int
-pg_db_getline (dbh, buffer, length)
- SV *dbh;
- char *buffer;
- int length;
-{
- D_imp_dbh(dbh);
- return PQgetline(imp_dbh->conn, buffer, length);
-}
-
-
-int
-pg_db_endcopy (dbh)
- SV *dbh;
-{
- D_imp_dbh(dbh);
- return PQendcopy(imp_dbh->conn);
-}
-
-
-/* ================================================================== */
-
-
-int
-dbd_st_prepare (sth, imp_sth, statement, attribs)
- SV *sth;
- imp_sth_t *imp_sth;
- char *statement;
- SV *attribs;
-{
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_prepare: statement = >%s<\n", statement); }
-
- /* scan statement for '?', ':1' and/or ':foo' style placeholders */
- dbd_preparse(imp_sth, statement);
-
- /* initialize new statement handle */
- imp_sth->result = 0;
- imp_sth->cur_tuple = 0;
-
- DBIc_IMPSET_on(imp_sth);
- return 1;
-}
-
-
-static void
-dbd_preparse (imp_sth, statement)
- imp_sth_t *imp_sth;
- char *statement;
-{
- bool in_literal = FALSE;
- char in_comment = '\0';
- char *src, *start, *dest;
- phs_t phs_tpl;
- SV *phs_sv;
- int idx=0;
- char *style="", *laststyle=Nullch;
- STRLEN namelen;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_preparse: statement = >%s<\n", statement); }
-
- /* allocate room for copy of statement with spare capacity */
- /* for editing '?' or ':1' into ':p1'. */
- imp_sth->statement = (char*)safemalloc(strlen(statement) * 3 + 1);
-
- /* initialise phs ready to be cloned per placeholder */
- memset(&phs_tpl, 0, sizeof(phs_tpl));
- phs_tpl.ftype = 1043; /* VARCHAR */
-
- src = statement;
- dest = imp_sth->statement;
- while(*src) {
-
- if (in_comment) {
- /* SQL-style and C++-style */
- if ((in_comment == '-' || in_comment == '/') && *src == '\n') {
- in_comment = '\0';
- }
- /* C-style */
- else if (in_comment == '*' && *src == '*' && *(src+1) == '/') {
- *dest++ = *src++; /* avoids asterisk-slash-asterisk issues */
- in_comment = '\0';
- }
- *dest++ = *src++;
- continue;
- }
-
- if (in_literal) {
- /* check if literal ends but keep quotes in literal */
- if (*src == in_literal && *(src-1) != '\\') {
- in_literal = 0;
- }
- *dest++ = *src++;
- continue;
- }
-
- /* Look for comments: SQL-style or C++-style or C-style */
- if ((*src == '-' && *(src+1) == '-') ||
- (*src == '/' && *(src+1) == '/') ||
- (*src == '/' && *(src+1) == '*'))
- {
- in_comment = *(src+1);
- /* We know *src & the next char are to be copied, so do */
- /* it. In the case of C-style comments, it happens to */
- /* help us avoid slash-asterisk-slash oddities. */
- *dest++ = *src++;
- *dest++ = *src++;
- continue;
- }
-
- /* check if no placeholders */
- if (*src != ':' && *src != '?') {
- if (*src == '\'' || *src == '"') {
- in_literal = *src;
- }
- *dest++ = *src++;
- continue;
- }
-
- /* check for cast operator */
- if (*src == ':' && (*(src-1) == ':' || *(src+1) == ':')) {
- *dest++ = *src++;
- continue;
- }
-
- /* only here for : or ? outside of a comment or literal and no cast */
-
- start = dest; /* save name inc colon */
- *dest++ = *src++;
- if (*start == '?') { /* X/Open standard */
- sprintf(start,":p%d", ++idx); /* '?' -> ':p1' (etc) */
- dest = start+strlen(start);
- style = "?";
-
- } else if (isDIGIT(*src)) { /* ':1' */
- idx = atoi(src);
- *dest++ = 'p'; /* ':1'->':p1' */
- if (idx <= 0) {
- croak("Placeholder :%d invalid, placeholders must be >= 1", idx);
- }
- while(isDIGIT(*src)) {
- *dest++ = *src++;
- }
- style = ":1";
-
- } else if (isALNUM(*src)) { /* ':foo' */
- while(isALNUM(*src)) { /* includes '_' */
- *dest++ = *src++;
- }
- style = ":foo";
- } else { /* perhaps ':=' PL/SQL construct */
- continue;
- }
- *dest = '\0'; /* handy for debugging */
- namelen = (dest-start);
- if (laststyle && style != laststyle) {
- croak("Can't mix placeholder styles (%s/%s)",style,laststyle);
- }
- laststyle = style;
- if (imp_sth->all_params_hv == NULL) {
- imp_sth->all_params_hv = newHV();
- }
- phs_tpl.sv = &sv_undef;
- phs_sv = newSVpv((char*)&phs_tpl, sizeof(phs_tpl)+namelen+1);
- hv_store(imp_sth->all_params_hv, start, namelen, phs_sv, 0);
- strcpy( ((phs_t*)(void*)SvPVX(phs_sv))->name, start);
- }
- *dest = '\0';
- if (imp_sth->all_params_hv) {
- DBIc_NUM_PARAMS(imp_sth) = (int)HvKEYS(imp_sth->all_params_hv);
- if (dbis->debug >= 2) { fprintf(DBILOGFP, " dbd_preparse scanned %d distinct placeholders\n", (int)DBIc_NUM_PARAMS(imp_sth)); }
- }
-}
-
-
-static int
-pg_sql_type (imp_sth, name, sql_type)
- imp_sth_t *imp_sth;
- char *name;
- int sql_type;
-{
- switch (sql_type) {
- case SQL_CHAR:
- return 1042; /* bpchar */
- case SQL_NUMERIC:
- return 700; /* float4 */
- case SQL_DECIMAL:
- return 700; /* float4 */
- case SQL_INTEGER:
- return 23; /* int4 */
- case SQL_SMALLINT:
- return 21; /* int2 */
- case SQL_FLOAT:
- return 700; /* float4 */
- case SQL_REAL:
- return 701; /* float8 */
- case SQL_DOUBLE:
- return 20; /* int8 */
- case SQL_VARCHAR:
- return 1043; /* varchar */
- default:
- if (DBIc_WARN(imp_sth) && imp_sth && name) {
- warn("SQL type %d for '%s' is not fully supported, bound as VARCHAR instead");
- }
- return pg_sql_type(imp_sth, name, SQL_VARCHAR);
- }
-}
-
-
-static int
-dbd_rebind_ph (sth, imp_sth, phs)
- SV *sth;
- imp_sth_t *imp_sth;
- phs_t *phs;
-{
- STRLEN value_len;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_rebind\n"); }
-
- /* convert to a string ASAP */
- if (!SvPOK(phs->sv) && SvOK(phs->sv)) {
- sv_2pv(phs->sv, &na);
- }
-
- if (dbis->debug >= 2) {
- char *val = neatsvpv(phs->sv,0);
- fprintf(DBILOGFP, " bind %s <== %.1000s (", phs->name, val);
- if (SvOK(phs->sv)) {
- fprintf(DBILOGFP, "size %ld/%ld/%ld, ", (long)SvCUR(phs->sv),(long)SvLEN(phs->sv),phs->maxlen);
- } else {
- fprintf(DBILOGFP, "NULL, ");
- }
- fprintf(DBILOGFP, "ptype %d, otype %d%s)\n", (int)SvTYPE(phs->sv), phs->ftype, (phs->is_inout) ? ", inout" : "");
- }
-
- /* At the moment we always do sv_setsv() and rebind. */
- /* Later we may optimise this so that more often we can */
- /* just copy the value & length over and not rebind. */
-
- if (phs->is_inout) { /* XXX */
- if (SvREADONLY(phs->sv)) {
- croak(no_modify);
- }
- /* phs->sv _is_ the real live variable, it may 'mutate' later */
- /* pre-upgrade high to reduce risk of SvPVX realloc/move */
- (void)SvUPGRADE(phs->sv, SVt_PVNV);
- /* ensure room for result, 28 is magic number (see sv_2pv) */
- SvGROW(phs->sv, (phs->maxlen < 28) ? 28 : phs->maxlen+1);
- }
- else {
- /* phs->sv is copy of real variable, upgrade to at least string */
- (void)SvUPGRADE(phs->sv, SVt_PV);
- }
-
- /* At this point phs->sv must be at least a PV with a valid buffer, */
- /* even if it's undef (null) */
- /* Here we set phs->progv, phs->indp, and value_len. */
- if (SvOK(phs->sv)) {
- phs->progv = SvPV(phs->sv, value_len);
- phs->indp = 0;
- }
- else { /* it's null but point to buffer in case it's an out var */
- phs->progv = SvPVX(phs->sv);
- phs->indp = -1;
- value_len = 0;
- }
- phs->sv_type = SvTYPE(phs->sv); /* part of mutation check */
- phs->maxlen = SvLEN(phs->sv)-1; /* avail buffer space */
- if (phs->maxlen < 0) { /* can happen with nulls */
- phs->maxlen = 0;
- }
-
- phs->alen = value_len + phs->alen_incnull;
-
- imp_sth->all_params_len += SvOK(phs->sv) ? phs->alen : 4; /* NULL */
-
- if (dbis->debug >= 3) {
- fprintf(DBILOGFP, " bind %s <== '%.*s' (size %ld/%ld, otype %d, indp %d)\n",
- phs->name,
- (int)(phs->alen>SvIV(DBIS->neatsvpvlen) ? SvIV(DBIS->neatsvpvlen) : phs->alen),
- (phs->progv) ? phs->progv : "",
- (long)phs->alen, (long)phs->maxlen, phs->ftype, phs->indp);
- }
-
- return 1;
-}
-
-
-int
-dbd_bind_ph (sth, imp_sth, ph_namesv, newvalue, sql_type, attribs, is_inout, maxlen)
- SV *sth;
- imp_sth_t *imp_sth;
- SV *ph_namesv;
- SV *newvalue;
- IV sql_type;
- SV *attribs;
- int is_inout;
- IV maxlen;
-{
- SV **phs_svp;
- STRLEN name_len;
- char *name;
- char namebuf[30];
- phs_t *phs;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_bind_ph\n"); }
-
- /* check if placeholder was passed as a number */
-
- if (SvGMAGICAL(ph_namesv)) { /* eg if from tainted expression */
- mg_get(ph_namesv);
- }
- if (!SvNIOKp(ph_namesv)) {
- name = SvPV(ph_namesv, name_len);
- }
- if (SvNIOKp(ph_namesv) || (name && isDIGIT(name[0]))) {
- sprintf(namebuf, ":p%d", (int)SvIV(ph_namesv));
- name = namebuf;
- name_len = strlen(name);
- }
- assert(name != Nullch);
-
- if (SvTYPE(newvalue) > SVt_PVLV) { /* hook for later array logic */
- croak("Can't bind a non-scalar value (%s)", neatsvpv(newvalue,0));
- }
- if (SvROK(newvalue) && !IS_DBI_HANDLE(newvalue)) {
- /* dbi handle allowed for cursor variables */
- croak("Can't bind a reference (%s)", neatsvpv(newvalue,0));
- }
- if (SvTYPE(newvalue) == SVt_PVLV && is_inout) { /* may allow later */
- croak("Can't bind ``lvalue'' mode scalar as inout parameter (currently)");
- }
-
- if (dbis->debug >= 2) {
- fprintf(DBILOGFP, " bind %s <== %s (type %ld", name, neatsvpv(newvalue,0), (long)sql_type);
- if (is_inout) {
- fprintf(DBILOGFP, ", inout 0x%lx, maxlen %ld", (long)newvalue, (long)maxlen);
- }
- if (attribs) {
- fprintf(DBILOGFP, ", attribs: %s", neatsvpv(attribs,0));
- }
- fprintf(DBILOGFP, ")\n");
- }
-
- phs_svp = hv_fetch(imp_sth->all_params_hv, name, name_len, 0);
- if (phs_svp == NULL) {
- croak("Can't bind unknown placeholder '%s' (%s)", name, neatsvpv(ph_namesv,0));
- }
- phs = (phs_t*)(void*)SvPVX(*phs_svp); /* placeholder struct */
-
- if (phs->sv == &sv_undef) { /* first bind for this placeholder */
- phs->ftype = 1043; /* our default type VARCHAR */
- phs->is_inout = is_inout;
- if (is_inout) {
- /* phs->sv assigned in the code below */
- ++imp_sth->has_inout_params;
- /* build array of phs's so we can deal with out vars fast */
- if (!imp_sth->out_params_av) {
- imp_sth->out_params_av = newAV();
- }
- av_push(imp_sth->out_params_av, SvREFCNT_inc(*phs_svp));
- }
-
- if (attribs) { /* only look for pg_type on first bind of var */
- SV **svp;
- /* Setup / Clear attributes as defined by attribs. */
- /* XXX If attribs is EMPTY then reset attribs to default? */
- if ( (svp = hv_fetch((HV*)SvRV(attribs), "pg_type", 7, 0)) != NULL) {
- int pg_type = SvIV(*svp);
- if (!pgtype_bind_ok(pg_type)) {
- croak("Can't bind %s, pg_type %d not supported by DBD::Pg", phs->name, pg_type);
- }
- if (sql_type) {
- croak("Can't specify both TYPE (%d) and pg_type (%d) for %s", sql_type, pg_type, phs->name);
- }
- phs->ftype = pg_type;
- }
- }
- if (sql_type) {
- phs->ftype = pg_sql_type(imp_sth, phs->name, sql_type);
- }
- } /* was first bind for this placeholder */
-
- /* check later rebinds for any changes */
- else if (is_inout || phs->is_inout) {
- croak("Can't rebind or change param %s in/out mode after first bind (%d => %d)", phs->name, phs->is_inout , is_inout);
- }
- else if (sql_type && phs->ftype != pg_sql_type(imp_sth, phs->name, sql_type)) {
- croak("Can't change TYPE of param %s to %d after initial bind", phs->name, sql_type);
- }
-
- phs->maxlen = maxlen; /* 0 if not inout */
-
- if (!is_inout) { /* normal bind to take a (new) copy of current value */
- if (phs->sv == &sv_undef) { /* (first time bind) */
- phs->sv = newSV(0);
- }
- sv_setsv(phs->sv, newvalue);
- } else if (newvalue != phs->sv) {
- if (phs->sv) {
- SvREFCNT_dec(phs->sv);
- }
- phs->sv = SvREFCNT_inc(newvalue); /* point to live var */
- }
-
- return dbd_rebind_ph(sth, imp_sth, phs);
-}
-
-
-int
-dbd_st_execute (sth, imp_sth) /* <= -2:error, >=0:ok row count, (-1=unknown count) */
- SV *sth;
- imp_sth_t *imp_sth;
-{
- dTHR;
-
- D_imp_dbh_from_sth;
- ExecStatusType status = -1;
- char *cmdStatus;
- char *cmdTuples;
- char *statement;
- int ret = -2;
- int num_fields;
- int i;
- int len;
- bool in_literal = FALSE;
- char in_comment = '\0';
- char *src;
- char *dest;
- char *val;
- char namebuf[30];
- phs_t *phs;
- SV **svp;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_execute\n"); }
-
- /*
- here we get the statement from the statement handle where
- it has been stored when creating a blank sth during prepare
- svp = hv_fetch((HV *)SvRV(sth), "Statement", 9, FALSE);
- statement = SvPV(*svp, na);
- */
-
- statement = imp_sth->statement;
- if (! statement) {
- /* are we prepared ? */
- pg_error(sth, -1, "statement not prepared\n");
- return -2;
- }
-
- /* do we have input parameters ? */
- if ((int)DBIc_NUM_PARAMS(imp_sth) > 0) {
- /* we have to allocate some additional memory for possible escaping quotes and backslashes */
- /* Worst case is all character must be escaped and must be quoted */
- int max_len = imp_sth->all_params_len * 2 + DBIc_NUM_PARAMS(imp_sth) * 2 + 1;
- statement = (char*)safemalloc(strlen(imp_sth->statement) + max_len );
- dest = statement;
- src = imp_sth->statement;
- /* scan statement for ':p1' style placeholders */
- while(*src) {
-
- if (in_comment) {
- /* SQL-style and C++-style */
- if ((in_comment == '-' || in_comment == '/') && *src == '\n') {
- in_comment = '\0';
- }
- /* C-style */
- else if (in_comment == '*' && *src == '*' && *(src+1) == '/') {
- *dest++ = *src++; /* avoids asterisk-slash-asterisk issues */
- in_comment = '\0';
- }
- *dest++ = *src++;
- continue;
- }
-
- if (in_literal) {
- /* check if literal ends but keep quotes in literal */
- if (*src == in_literal && *(src-1) != '\\') {
- in_literal = 0;
- }
- *dest++ = *src++;
- continue;
- }
-
- /* Look for comments: SQL-style or C++-style or C-style */
- if ((*src == '-' && *(src+1) == '-') ||
- (*src == '/' && *(src+1) == '/') ||
- (*src == '/' && *(src+1) == '*'))
- {
- in_comment = *(src+1);
- /* We know *src & the next char are to be copied, so do */
- /* it. In the case of C-style comments, it happens to */
- /* help us avoid slash-asterisk-slash oddities. */
- *dest++ = *src++;
- *dest++ = *src++;
- continue;
- }
-
- /* check if no placeholders */
- if (*src != ':' && *src != '?') {
- if (*src == '\'' || *src == '"') {
- in_literal = *src;
- }
- *dest++ = *src++;
- continue;
- }
-
- /* check for cast operator */
- if (*src == ':' && (*(src-1) == ':' || *(src+1) == ':')) {
- *dest++ = *src++;
- continue;
- }
-
-
- i = 0;
- namebuf[i++] = *src++; /* ':' */
- namebuf[i++] = *src++; /* 'p' */
-
- while (isDIGIT(*src) && i < (sizeof(namebuf)-1) ) {
- namebuf[i++] = *src++;
- }
- if ( i == (sizeof(namebuf) - 1)) {
- pg_error(sth, -1, "namebuf buffer overrun\n");
- return -2;
- }
- namebuf[i] = '\0';
- svp = hv_fetch(imp_sth->all_params_hv, namebuf, i, 0);
- if (svp == NULL) {
- pg_error(sth, -1, "parameter unknown\n");
- return -2;
- }
- /* get attribute */
- phs = (phs_t*)(void*)SvPVX(*svp);
- /* replace undef with NULL */
- if(!SvOK(phs->sv)) {
- val = "NULL";
- len = 4;
- } else {
- val = SvPV(phs->sv, len);
- }
- /* quote string attribute */
- if(!SvNIOK(phs->sv) && SvOK(phs->sv) && phs->ftype > 1000) { /* avoid quoting NULL, tpf: bind_param as numeric */
- *dest++ = '\'';
- }
- while (len--) {
- if (imp_dbh->pg_auto_escape) {
- /* escape quote */
- if (*val == '\'') {
- *dest++ = '\'';
- }
- /* escape backslash except for octal presentation */
- if (*val == '\\' && !(isdigit(*(val+1)) && isdigit(*(val+2)) && isdigit(*(val+3))) ) {
- *dest++ = '\\';
- }
- }
- /* copy attribute to statement */
- *dest++ = *val++;
- }
- /* quote string attribute */
- if(!SvNIOK(phs->sv) && SvOK(phs->sv) && phs->ftype > 1000) { /* avoid quoting NULL, tpf: bind_param as numeric */
- *dest++ = '\'';
- }
- }
- *dest = '\0';
- }
-
- if (dbis->debug >= 2) { fprintf(DBILOGFP, "dbd_st_execute: statement = >%s<\n", statement); }
-
- /* clear old result (if any) */
- if (imp_sth->result) {
- PQclear(imp_sth->result);
- }
-
- /* execute statement */
- imp_sth->result = PQexec(imp_dbh->conn, statement);
-
- /* free statement string in case of input parameters */
- if ((int)DBIc_NUM_PARAMS(imp_sth) > 0) {
- Safefree(statement);
- }
-
- /* check status */
- status = imp_sth->result ? PQresultStatus(imp_sth->result) : -1;
- cmdStatus = imp_sth->result ? (char *)PQcmdStatus(imp_sth->result) : "";
- cmdTuples = imp_sth->result ? (char *)PQcmdTuples(imp_sth->result) : "";
-
- if (PGRES_TUPLES_OK == status) {
- /* select statement */
- num_fields = PQnfields(imp_sth->result);
- imp_sth->cur_tuple = 0;
- DBIc_NUM_FIELDS(imp_sth) = num_fields;
- DBIc_ACTIVE_on(imp_sth);
- ret = PQntuples(imp_sth->result);
- } else if (PGRES_COMMAND_OK == status) {
- /* non-select statement */
- if (! strncmp(cmdStatus, "DELETE", 6) || ! strncmp(cmdStatus, "INSERT", 6) || ! strncmp(cmdStatus, "UPDATE", 6)) {
- ret = atoi(cmdTuples);
- } else {
- ret = -1;
- }
- } else if (PGRES_COPY_OUT == status || PGRES_COPY_IN == status) {
- /* Copy Out/In data transfer in progress */
- ret = -1;
- } else {
- pg_error(sth, status, PQerrorMessage(imp_dbh->conn));
- ret = -2;
- }
-
- /* store the number of affected rows */
- imp_sth->rows = ret;
-
- return ret;
-}
-
-
-AV *
-dbd_st_fetch (sth, imp_sth)
- SV *sth;
- imp_sth_t *imp_sth;
-{
- int num_fields;
- int i;
- AV *av;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_fetch\n"); }
-
- /* Check that execute() was executed sucessfully */
- if ( !DBIc_ACTIVE(imp_sth) ) {
- pg_error(sth, 1, "no statement executing\n");
- return Nullav;
- }
-
- if ( imp_sth->cur_tuple == PQntuples(imp_sth->result) ) {
- imp_sth->cur_tuple = 0;
- return Nullav; /* we reached the last tuple */
- }
-
- av = DBIS->get_fbav(imp_sth);
- num_fields = AvFILL(av)+1;
-
- for(i = 0; i < num_fields; ++i) {
-
- SV *sv = AvARRAY(av)[i];
- if (PQgetisnull(imp_sth->result, imp_sth->cur_tuple, i)) {
- sv_setsv(sv, &sv_undef);
- } else {
- char *val = (char*)PQgetvalue(imp_sth->result, imp_sth->cur_tuple, i);
- int type = PQftype(imp_sth->result, i); /* hopefully these hard coded values will not change */
- if (16 == type) {
- *val = (*val == 'f') ? '0' : '1'; /* bool: translate postgres into perl */
- }
- if (1042 == type && DBIc_has(imp_sth,DBIcf_ChopBlanks)) {
- int len = strlen(val);
- char *str = val;
- while((len > 0) && (str[len-1] == ' ')) {
- len--;
- }
- val[len] = '\0';
- }
- sv_setpv(sv, val);
- }
- }
-
- imp_sth->cur_tuple += 1;
-
- return av;
-}
-
-
-int
-dbd_st_blob_read (sth, imp_sth, lobjId, offset, len, destrv, destoffset)
- SV *sth;
- imp_sth_t *imp_sth;
- int lobjId;
- long offset;
- long len;
- SV *destrv;
- long destoffset;
-{
- D_imp_dbh_from_sth;
- int ret, lobj_fd, nbytes, nread;
- PGresult* result;
- ExecStatusType status;
- SV *bufsv;
- char *tmp;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_blob_read\n"); }
- /* safety check */
- if (lobjId <= 0) {
- pg_error(sth, -1, "dbd_st_blob_read: lobjId <= 0");
- return 0;
- }
- if (offset < 0) {
- pg_error(sth, -1, "dbd_st_blob_read: offset < 0");
- return 0;
- }
- if (len < 0) {
- pg_error(sth, -1, "dbd_st_blob_read: len < 0");
- return 0;
- }
- if (! SvROK(destrv)) {
- pg_error(sth, -1, "dbd_st_blob_read: destrv not a reference");
- return 0;
- }
- if (destoffset < 0) {
- pg_error(sth, -1, "dbd_st_blob_read: destoffset < 0");
- return 0;
- }
-
- /* dereference destination and ensure it's writable string */
- bufsv = SvRV(destrv);
- if (! destoffset) {
- sv_setpvn(bufsv, "", 0);
- }
-
- /* execute begin
- result = PQexec(imp_dbh->conn, "begin");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
- if (status != PGRES_COMMAND_OK) {
- pg_error(sth, status, PQerrorMessage(imp_dbh->conn));
- return 0;
- }
- */
-
- /* open large object */
- lobj_fd = lo_open(imp_dbh->conn, lobjId, INV_READ);
- if (lobj_fd < 0) {
- pg_error(sth, -1, PQerrorMessage(imp_dbh->conn));
- return 0;
- }
-
- /* seek on large object */
- if (offset > 0) {
- ret = lo_lseek(imp_dbh->conn, lobj_fd, offset, SEEK_SET);
- if (ret < 0) {
- pg_error(sth, -1, PQerrorMessage(imp_dbh->conn));
- return 0;
- }
- }
-
- /* read from large object */
- nread = 0;
- SvGROW(bufsv, destoffset + nread + BUFSIZ + 1);
- tmp = (SvPVX(bufsv)) + destoffset + nread;
- while ((nbytes = lo_read(imp_dbh->conn, lobj_fd, tmp, BUFSIZ)) > 0) {
- nread += nbytes;
- tmp = (SvPVX(bufsv)) + destoffset + nread;
- /* break if user wants only a specified chunk */
- if (len > 0 && nread > len) {
- nread = len;
- break;
- }
- SvGROW(bufsv, destoffset + nread + BUFSIZ + 1);
- }
-
- /* terminate string */
- SvCUR_set(bufsv, destoffset + nread);
- *SvEND(bufsv) = '\0';
-
- /* close large object */
- ret = lo_close(imp_dbh->conn, lobj_fd);
- if (ret < 0) {
- pg_error(sth, -1, PQerrorMessage(imp_dbh->conn));
- return 0;
- }
-
- /* execute end
- result = PQexec(imp_dbh->conn, "end");
- status = result ? PQresultStatus(result) : -1;
- PQclear(result);
- if (status != PGRES_COMMAND_OK) {
- pg_error(sth, status, PQerrorMessage(imp_dbh->conn));
- return 0;
- }
- */
-
- return nread;
-}
-
-
-int
-dbd_st_rows (sth, imp_sth)
- SV *sth;
- imp_sth_t *imp_sth;
-{
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_rows\n"); }
-
- return imp_sth->rows;
-}
-
-
-int
-dbd_st_finish (sth, imp_sth)
- SV *sth;
- imp_sth_t *imp_sth;
-{
- dTHR;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_finish\n"); }
-
- if (DBIc_ACTIVE(imp_sth) && imp_sth->result) {
- PQclear(imp_sth->result);
- imp_sth->result = 0;
- imp_sth->rows = 0;
- }
-
- DBIc_ACTIVE_off(imp_sth);
- return 1;
-}
-
-
-void
-dbd_st_destroy (sth, imp_sth)
- SV *sth;
- imp_sth_t *imp_sth;
-{
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_destroy\n"); }
-
- /* Free off contents of imp_sth */
-
- Safefree(imp_sth->statement);
- if (imp_sth->result) {
- PQclear(imp_sth->result);
- imp_sth->result = 0;
- }
-
- if (imp_sth->out_params_av)
- sv_free((SV*)imp_sth->out_params_av);
-
- if (imp_sth->all_params_hv) {
- HV *hv = imp_sth->all_params_hv;
- SV *sv;
- char *key;
- I32 retlen;
- hv_iterinit(hv);
- while( (sv = hv_iternextsv(hv, &key, &retlen)) != NULL ) {
- if (sv != &sv_undef) {
- phs_t *phs_tpl = (phs_t*)(void*)SvPVX(sv);
- sv_free(phs_tpl->sv);
- }
- }
- sv_free((SV*)imp_sth->all_params_hv);
- }
-
- DBIc_IMPSET_off(imp_sth); /* let DBI know we've done it */
-}
-
-
-int
-dbd_st_STORE_attrib (sth, imp_sth, keysv, valuesv)
- SV *sth;
- imp_sth_t *imp_sth;
- SV *keysv;
- SV *valuesv;
-{
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_STORE\n"); }
-
- return FALSE;
-}
-
-
-SV *
-dbd_st_FETCH_attrib (sth, imp_sth, keysv)
- SV *sth;
- imp_sth_t *imp_sth;
- SV *keysv;
-{
- STRLEN kl;
- char *key = SvPV(keysv,kl);
- int i;
- SV *retsv = Nullsv;
-
- if (dbis->debug >= 1) { fprintf(DBILOGFP, "dbd_st_FETCH\n"); }
-
- if (! imp_sth->result) {
- return Nullsv;
- }
-
- i = DBIc_NUM_FIELDS(imp_sth);
-
- if (kl == 4 && strEQ(key, "NAME")) {
- AV *av = newAV();
- retsv = newRV(sv_2mortal((SV*)av));
- while(--i >= 0) {
- av_store(av, i, newSVpv(PQfname(imp_sth->result, i),0));
- }
- } else if ( kl== 4 && strEQ(key, "TYPE")) {
- AV *av = newAV();
- retsv = newRV(sv_2mortal((SV*)av));
- while(--i >= 0) {
- av_store(av, i, newSViv(PQftype(imp_sth->result, i)));
- }
- } else if (kl==9 && strEQ(key, "PRECISION")) {
- AV *av = newAV();
- retsv = newRV(sv_2mortal((SV*)av));
- while(--i >= 0) {
- av_store(av, i, &sv_undef);
- }
- } else if (kl==5 && strEQ(key, "SCALE")) {
- AV *av = newAV();
- retsv = newRV(sv_2mortal((SV*)av));
- while(--i >= 0) {
- av_store(av, i, &sv_undef);
- }
- } else if (kl==8 && strEQ(key, "NULLABLE")) {
- AV *av = newAV();
- retsv = newRV(sv_2mortal((SV*)av));
- while(--i >= 0) {
- av_store(av, i, newSViv(2));
- }
- } else if (kl==10 && strEQ(key, "CursorName")) {
- retsv = &sv_undef;
- } else if (kl==7 && strEQ(key, "pg_size")) {
- AV *av = newAV();
- retsv = newRV(sv_2mortal((SV*)av));
- while(--i >= 0) {
- av_store(av, i, newSViv(PQfsize(imp_sth->result, i)));
- }
- } else if (kl==7 && strEQ(key, "pg_type")) {
- AV *av = newAV();
- char *type_nam;
- retsv = newRV(sv_2mortal((SV*)av));
- while(--i >= 0) {
- switch (PQftype(imp_sth->result, i)) {
- case 16:
- type_nam = "bool";
- break;
- case 17:
- type_nam = "bytea";
- break;
- case 18:
- type_nam = "char";
- break;
- case 19:
- type_nam = "name";
- break;
- case 20:
- type_nam = "int8";
- break;
- case 21:
- type_nam = "int2";
- break;
- case 22:
- type_nam = "int28";
- break;
- case 23:
- type_nam = "int4";
- break;
- case 24:
- type_nam = "regproc";
- break;
- case 25:
- type_nam = "text";
- break;
- case 26:
- type_nam = "oid";
- break;
- case 27:
- type_nam = "tid";
- break;
- case 28:
- type_nam = "xid";
- break;
- case 29:
- type_nam = "cid";
- break;
- case 30:
- type_nam = "oid8";
- break;
- case 32:
- type_nam = "SET";
- break;
- case 210:
- type_nam = "smgr";
- break;
- case 600:
- type_nam = "point";
- break;
- case 601:
- type_nam = "lseg";
- break;
- case 602:
- type_nam = "path";
- break;
- case 603:
- type_nam = "box";
- break;
- case 604:
- type_nam = "polygon";
- break;
- case 605:
- type_nam = "filename";
- break;
- case 628:
- type_nam = "line";
- break;
- case 629:
- type_nam = "_line";
- break;
- case 700:
- type_nam = "float4";
- break;
- case 701:
- type_nam = "float8";
- break;
- case 702:
- type_nam = "abstime";
- break;
- case 703:
- type_nam = "reltime";
- break;
- case 704:
- type_nam = "tinterval";
- break;
- case 705:
- type_nam = "unknown";
- break;
- case 718:
- type_nam = "circle";
- break;
- case 719:
- type_nam = "_circle";
- break;
- case 790:
- type_nam = "money";
- break;
- case 791:
- type_nam = "_money";
- break;
- case 810:
- type_nam = "oidint2";
- break;
- case 910:
- type_nam = "oidint4";
- break;
- case 911:
- type_nam = "oidname";
- break;
- case 1000:
- type_nam = "_bool";
- break;
- case 1001:
- type_nam = "_bytea";
- break;
- case 1002:
- type_nam = "_char";
- break;
- case 1003:
- type_nam = "_name";
- break;
- case 1005:
- type_nam = "_int2";
- break;
- case 1006:
- type_nam = "_int28";
- break;
- case 1007:
- type_nam = "_int4";
- break;
- case 1008:
- type_nam = "_regproc";
- break;
- case 1009:
- type_nam = "_text";
- break;
- case 1028:
- type_nam = "_oid";
- break;
- case 1010:
- type_nam = "_tid";
- break;
- case 1011:
- type_nam = "_xid";
- break;
- case 1012:
- type_nam = "_cid";
- break;
- case 1013:
- type_nam = "_oid8";
- break;
- case 1014:
- type_nam = "_lock";
- break;
- case 1015:
- type_nam = "_stub";
- break;
- case 1016:
- type_nam = "_ref";
- break;
- case 1017:
- type_nam = "_point";
- break;
- case 1018:
- type_nam = "_lseg";
- break;
- case 1019:
- type_nam = "_path";
- break;
- case 1020:
- type_nam = "_box";
- break;
- case 1021:
- type_nam = "_float4";
- break;
- case 1022:
- type_nam = "_float8";
- break;
- case 1023:
- type_nam = "_abstime";
- break;
- case 1024:
- type_nam = "_reltime";
- break;
- case 1025:
- type_nam = "_tinterval";
- break;
- case 1026:
- type_nam = "_filename";
- break;
- case 1027:
- type_nam = "_polygon";
- break;
- case 1033:
- type_nam = "aclitem";
- break;
- case 1034:
- type_nam = "_aclitem";
- break;
- case 1042:
- type_nam = "bpchar";
- break;
- case 1043:
- type_nam = "varchar";
- break;
- case 1082:
- type_nam = "date";
- break;
- case 1083:
- type_nam = "time";
- break;
- case 1182:
- type_nam = "_date";
- break;
- case 1183:
- type_nam = "_time";
- break;
- case 1184:
- type_nam = "datetime";
- break;
- case 1185:
- type_nam = "_datetime";
- break;
- case 1186:
- type_nam = "timespan";
- break;
- case 1187:
- type_nam = "_timespan";
- break;
- case 1296:
- type_nam = "timestamp";
- break;
- }
- av_store(av, i, newSVpv(type_nam, 0));
- }
- } else if (kl==13 && strEQ(key, "pg_oid_status")) {
- retsv = newSVpv((char *)PQoidStatus(imp_sth->result), 0);
- } else if (kl==13 && strEQ(key, "pg_cmd_status")) {
- retsv = newSVpv((char *)PQcmdStatus(imp_sth->result), 0);
- } else {
- return Nullsv;
- }
-
- return sv_2mortal(retsv);
-}
-
-
-/* end of dbdimp.c */
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.h b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.h
deleted file mode 100644
index a953c91..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/dbdimp.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- $Id: dbdimp.h,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
- Copyright (c) 1997,1998,1999,2000 Edmund Mergl
- Portions Copyright (c) 1994,1995,1996,1997 Tim Bunce
-
- You may distribute under the terms of either the GNU General Public
- License or the Artistic License, as specified in the Perl README file.
-
-*/
-
-
-/* Define drh implementor data structure */
-struct imp_drh_st {
- dbih_drc_t com; /* MUST be first element in structure */
-};
-
-/* Define dbh implementor data structure */
-struct imp_dbh_st {
- dbih_dbc_t com; /* MUST be first element in structure */
-
- PGconn * conn; /* connection structure */
- int init_commit; /* initialize AutoCommit */
- int pg_auto_escape; /* initialize AutoEscape */
-};
-
-/* Define sth implementor data structure */
-struct imp_sth_st {
- dbih_stc_t com; /* MUST be first element in structure */
-
- PGresult* result; /* result structure */
- int cur_tuple; /* current tuple */
- int rows; /* number of affected rows */
-
- /* Input Details */
- char *statement; /* sql (see sth_scan) */
- HV *all_params_hv; /* all params, keyed by name */
- AV *out_params_av; /* quick access to inout params */
- int pg_pad_empty; /* convert ""->" " when binding */
- int all_params_len; /* length-sum of all params */
-
- /* (In/)Out Parameter Details */
- bool has_inout_params;
-};
-
-
-#define sword signed int
-#define sb2 signed short
-#define ub2 unsigned short
-
-typedef struct phs_st phs_t; /* scalar placeholder */
-
-struct phs_st { /* scalar placeholder EXPERIMENTAL */
- sword ftype; /* external OCI field type */
-
- SV *sv; /* the scalar holding the value */
- int sv_type; /* original sv type at time of bind */
- bool is_inout;
-
- IV maxlen; /* max possible len (=allocated buffer) */
-
- /* these will become an array */
- sb2 indp; /* null indicator */
- char *progv;
- ub2 arcode;
- ub2 alen; /* effective length ( <= maxlen ) */
-
- int alen_incnull; /* 0 or 1 if alen should include null */
- char name[1]; /* struct is malloc'd bigger as needed */
-};
-
-
-/* end of dbdimp.h */
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/eg/ApacheDBI.pl b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/eg/ApacheDBI.pl
deleted file mode 100755
index 2971345..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/eg/ApacheDBI.pl
+++ /dev/null
@@ -1,70 +0,0 @@
-#!/usr/local/bin/perl
-
-# $Id: ApacheDBI.pl,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
-# don't forget to create in postgres the user who is running
-# the httpd, eg 'createuser nobody' !
-#
-# demo script, tested with:
-# - PostgreSQL-6.5.2
-# - apache_1.3.9
-# - mod_perl-1.21
-# - perl5.005_03
-# - DBI-1.13
-
-use CGI;
-use DBI;
-use strict;
-
-my $query = new CGI;
-
-print $query->header,
- $query->start_html(-title=>'A Simple Example'),
- $query->startform,
- "<CENTER><H3>Testing Module DBI</H3></CENTER>",
- "<P><CENTER><TABLE CELLPADDING=4 CELLSPACING=2 BORDER=1>",
- "<TR><TD>Enter the data source: </TD>",
- "<TD>", $query->textfield(-name=>'data_source', -size=>40, -default=>'dbi:Pg:dbname=template1'), "</TD>",
- "</TR>",
- "<TR><TD>Enter the user name: </TD>",
- "<TD>", $query->textfield(-name=>'username'), "</TD>",
- "</TR>",
- "<TR><TD>Enter the password: </TD>",
- "<TD>", $query->textfield(-name=>'auth'), "</TD>",
- "</TR>",
- "<TR><TD>Enter the select command: </TD>",
- "<TD>", $query->textfield(-name=>'cmd', -size=>40), "</TD>",
- "</TR>",
- "</TABLE></CENTER><P>",
- "<CENTER>", $query->submit(-value=>'Submit'), "</CENTER>",
- $query->endform;
-
-if ($query->param) {
-
- my $data_source = $query->param('data_source');
- my $username = $query->param('username');
- my $auth = $query->param('auth');
- my $cmd = $query->param('cmd');
- my $dbh = DBI->connect($data_source, $username, $auth);
- if ($dbh) {
- my $sth = $dbh->prepare($cmd);
- my $ret = $sth->execute;
- if ($ret) {
- my($i, $ary_ref);
- print "<P><CENTER><TABLE CELLPADDING=4 CELLSPACING=2 BORDER=1>\n";
- while ($ary_ref = $sth->fetchrow_arrayref) {
- print "<TR><TD>", join("</TD><TD>", @$ary_ref), "</TD></TR>\n";
- }
- print "</TABLE></CENTER><P>\n";
- $sth->finish;
- } else {
- print "<CENTER><H2>", $DBI::errstr, "</H2></CENTER>\n";
- }
- $dbh->disconnect;
- } else {
- print "<CENTER><H2>", $DBI::errstr, "</H2></CENTER>\n";
- }
-}
-
-print $query->end_html;
-
diff --git a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/test.pl b/monitoring/PerlModules/CPAN/DBD-Pg-0.95/test.pl
deleted file mode 100755
index c0cf466..0000000
--- a/monitoring/PerlModules/CPAN/DBD-Pg-0.95/test.pl
+++ /dev/null
@@ -1,462 +0,0 @@
-#!/usr/local/bin/perl -w
-
-# $Id: test.pl,v 1.1.1.1 2001-01-12 20:41:07 dparker Exp $
-
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl test.pl'
-
-######################### not tested explicitly
-#
-# AutoCommit
-# commit
-# rollback
-# Active
-# Statement
-# attributes
-# err
-# pg_auto_escape
-# quote
-# type_info_all
-#
-######################### We start with some black magic to print on failure.
-
-BEGIN { $| = 1; }
-END {print "test failed\n" unless $loaded;}
-use DBI;
-$loaded = 1;
-use Config;
-use strict;
-
-######################### End of black magic.
-
-my $os = $^O;
-print "OS: $os\n";
-
-my $dbmain = "template1";
-my $dbtest = "pgperltest";
-
-# optionally add ";host=$remotehost;port=$remoteport"
-# or set the environment variable PGHOST
-my $dsn_main = "dbi:Pg:dbname=$dbmain";
-my $dsn_test = "dbi:Pg:dbname=$dbtest";
-
-my ($dbh0, $dbh, $sth);
-
-#DBI->trace(3); # make your choice
-
-
-######################### drop, create and connect to test database
-
-if ($os eq "MSWin32") {
- print "DBI->data_sources .......... skipped on $os\n"
-} else {
- my $data_sources = join(" ", DBI->data_sources('Pg'));
- ( $data_sources =~ "$dsn_main" )
- and print "DBI->data_sources .......... ok\n"
- or print "DBI->data_sources .......... not ok: $data_sources\n";
-}
-
-( $dbh0 = DBI->connect("$dsn_main", "", "", { AutoCommit => 1 }) )
- and print "DBI->connect ............... ok\n"
- or die "DBI->connect ............... not ok: ", $DBI::errstr;
-
-my $Name = $dbh0->{Name};
-( "$dbmain" eq $Name )
- and print "\$dbh->{Name} ............... ok\n"
- or print "\$dbh->{Name} ............... not ok: $Name\n";
-
-( 1 == $dbh0->ping )
- and print "\$dbh->ping ................. ok\n"
- or die "\$dbh->ping ................. not ok: ", $DBI::errstr;
-
-$dbh0->{PrintError} = 0; # do not complain when dropping $dbtest
-$dbh0->do("DROP DATABASE $dbtest");
-
-( $dbh0->do("CREATE DATABASE $dbtest") )
- and print "\$dbh->do ................... ok\n"
- or die "\$dbh->do ................... not ok: ", $DBI::errstr;
-
-$dbh = DBI->connect("$dsn_test", "", "", { AutoCommit => 1 }) or die $DBI::errstr;
-
-$dbh->do("Set DateStyle = 'ISO'");
-
-
-######################### create table
-
-$dbh->do("CREATE TABLE builtin (
- bool_ bool,
- char_ char,
- char12_ char(12),
- char16_ char(16),
- varchar12_ varchar(12),
- text_ text,
- date_ date,
- int4_ int4,
- int4a_ int4[],
- float8_ float8,
- point_ point,
- lseg_ lseg,
- box_ box
- )");
-
-$sth = $dbh->table_info;
-my @infos = $sth->fetchrow_array;
-$sth->finish;
-( join(" ", @infos[2,3]) eq q{builtin TABLE} )
- and print "\$dbh->table_info ........... ok\n"
- or print "\$dbh->table_info ........... not ok: ", join(" ", @infos), "\n";
-
-my @names = $dbh->tables;
-( join(" ", @names) eq q{builtin} )
- and print "\$dbh->tables ............... ok\n"
- or print "\$dbh->tables ............... not ok: ", join(" ", @names), "\n";
-
-my $attrs = $dbh->func('builtin', 'table_attributes');
-( $$attrs[0]{NAME} eq q{varchar12_} )
- and print "\$dbh->pg_table_attributes .. ok\n"
- or print "\$dbh->pg_table_attributes .. not ok: ", $$attrs[0]{NAME}, "\n";
-#for (my $i=0; $i<=$#$attrs; $i++) {
-# print $$attrs[$i]{NAME}, "\t",
-# $$attrs[$i]{TYPE}, "\t",
-# $$attrs[$i]{SIZE}, "\t",
-# $$attrs[$i]{NOTNULL}, "\t",
-# $$attrs[$i]{DEFAULT}, "\t",
-# $$attrs[$i]{CONSTRAINT}, "\t",
-# $$attrs[$i]{PRIMARY_KEY}, "\n";
-#}
-
-######################### test various insert methods
-
-# insert into table with $dbh->do($stmt)
-
-$dbh->do("INSERT INTO builtin VALUES(
- 't',
- 'a',
- 'Edmund Mergl',
- 'quote \\\\ \'\' this',
- 'Edmund Mergl',
- 'Edmund Mergl',
- '1997-03-08',
- 1234,
- '{1,2,3}',
- 1.234,
- '(1.0,2.0)',
- '((1.0,2.0),(3.0,4.0))',
- '((1.0,2.0),(3.0,4.0))'
- )") or die $DBI::errstr;
-
-# insert into table with $dbh->prepare() with placeholders and $dbh->execute(@bind_values)
-
-( $sth = $dbh->prepare( "INSERT INTO builtin
- ( bool_, char_, char12_, char16_, varchar12_, text_, date_, int4_, int4a_, float8_, point_, lseg_, box_ )
- VALUES ( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )
- " ) )
- and print "\$dbh->prepare .............. ok\n"
- or die "\$dbh->prepare .............. not ok: ", $DBI::errstr;
-
-( $sth->execute (
- 'f',
- 'b',
- 'Halli Hallo',
- 'but not \164\150\151\163',
- 'Halli Hallo',
- 'Halli Hallo',
- '1995-01-06',
- 5678,
- '{5,6,7}',
- 5.678,
- '(4.0,5.0)',
- '((4.0,5.0),(6.0,7.0))',
- '((4.0,5.0),(6.0,7.0))'
- ) )
- and print "\$dbh->execute .............. ok\n"
- or die "\$dbh->execute .............. not ok: ", $DBI::errstr;
-
-$sth->execute (
- 'f',
- 'c',
- 'Potz Blitz',
- 'Potz Blitz',
- 'Potz Blitz',
- 'Potz Blitz',
- '1957-10-05',
- 1357,
- '{1,3,5}',
- 1.357,
- '(2.0,7.0)',
- '((2.0,7.0),(8.0,3.0))',
- '((2.0,7.0),(8.0,3.0))'
- ) or die $DBI::errstr;
-
-# insert into table with $dbh->do($stmt, @bind_values)
-
-$dbh->do( "INSERT INTO builtin
- VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ? )",
- {},
- 'y',
- 'z',
- 'Ene Mene Mu',
- 'Ene Mene Mu',
- 'Ene Mene Mu',
- 'Ene Mene Mu',
- '1957-10-14',
- 5432,
- '{6,7,8}',
- 6.789,
- '(5.0,6.0)',
- '((5.0,6.0),(7.0,8.0))',
- '((5.0,6.0),(7.0,8.0))'
- ) or die $DBI::errstr;
-
-my $pg_oid_status = $sth->{pg_oid_status};
-( $pg_oid_status ne '' )
- and print "\$sth->{pg_oid_status} ...... ok\n"
- or print "\$sth->{pg_oid_status} ...... not ok: $pg_oid_status\n";
-
-my $pg_cmd_status = $sth->{pg_cmd_status};
-( $pg_cmd_status =~ /^INSERT/ )
- and print "\$sth->{pg_cmd_status} ...... ok\n"
- or print "\$sth->{pg_cmd_status} ...... not ok: $pg_cmd_status\n";
-
-( $sth->finish )
- and print "\$sth->finish ............... ok\n"
- or die "\$sth->finish ............... not ok: ", $DBI::errstr;
-
-######################### test various select methods
-
-# select from table using input parameters and and various fetchrow methods
-
-$sth = $dbh->prepare("SELECT * FROM builtin where int4_ < ? + ?") or die $DBI::errstr;
-
-( $sth->bind_param(1, '4000', DBI::SQL_INTEGER) )
- and print "\$sth->bind_param ........... ok\n"
- or die "\$sth->bind_param ........... not ok: ", $DBI::errstr;
-$sth->bind_param(2, '6000', DBI::SQL_INTEGER);
-
-$sth->execute or die $DBI::errstr;
-
-my @row_ary = $sth->fetchrow_array;
-( join(" ", @row_ary) eq q{1 a Edmund Mergl quote \ ' this Edmund Mergl Edmund Mergl 1997-03-08 1234 {1,2,3} 1.234 (1,2) [(1,2),(3,4)] (3,4),(1,2)} )
- and print "\$sth->fetchrow_array ....... ok\n"
- or print "\$sth->fetchrow_array ....... not ok: ", join(" ", @row_ary), "\n";
-
-my $ary_ref = $sth->fetchrow_arrayref;
-( join(" ", @$ary_ref) eq q{0 b Halli Hallo but not this Halli Hallo Halli Hallo 1995-01-06 5678 {5,6,7} 5.678 (4,5) [(4,5),(6,7)] (6,7),(4,5)} )
- and print "\$sth->fetchrow_arrayref .... ok\n"
- or print "\$sth->fetchrow_arrayref .... not ok: ", join(" ", @$ary_ref), "\n";
-
-my ($key, $val);
-my $hash_ref = $sth->fetchrow_hashref;
-foreach $key (sort (keys %$hash_ref)) {
- $val .= " $$hash_ref{$key}";
-}
-($val eq q{ 0 (8,7),(2,3) Potz Blitz Potz Blitz c 1957-10-05 1.357 1357 {1,3,5} [(2,7),(8,3)] (2,7) Potz Blitz Potz Blitz} )
- and print "\$sth->fetchrow_hashref ..... ok\n"
- or print "\$sth->fetchrow_hashref ..... not ok: key = $key, val = $val\n";
-
-# test various attributes
-
-my @name = @{$sth->{NAME}};
-( join(" ", @name) eq q{bool_ char_ char12_ char16_ varchar12_ text_ date_ int4_ int4a_ float8_ point_ lseg_ box_} )
- and print "\$sth->{NAME} ............... ok\n"
- or print "\$sth->{NAME} ............... not ok: ", join(" ", @name), "\n";
-
-my @type = @{$sth->{TYPE}};
-( join(" ", @type) eq q{16 1042 1042 1042 1043 25 1082 23 1007 701 600 601 603} )
- and print "\$sth->{TYPE} ............... ok\n"
- or print "\$sth->{TYPE} ............... not ok: ", join(" ", @type), "\n";
-
-my @pg_size = @{$sth->{pg_size}};
-( join(" ", @pg_size) eq q{1 -1 -1 -1 -1 -1 4 4 -1 8 16 32 32} )
- and print "\$sth->{pg_size} ............ ok\n"
- or print "\$sth->{pg_size} ............ not ok: ", join(" ", @pg_size), "\n";
-
-my @pg_type = @{$sth->{pg_type}};
-( join(" ", @pg_type) eq q{bool bpchar bpchar bpchar varchar text date int4 _int4 float8 point lseg box} )
- and print "\$sth->{pg_type} ............ ok\n"
- or print "\$sth->{pg_type} ............ not ok: ", join(" ", @pg_type), "\n";
-
-# test binding of output columns
-
-$sth->execute or die $DBI::errstr;
-
-my ($bool, $char, $char12, $char16, $vchar12, $text, $date, $int4, $int4a, $float8, $point, $lseg, $box);
-( $sth->bind_columns(undef, \$bool, \$char, \$char12, \$char16, \$vchar12, \$text, \$date, \$int4, \$int4a, \$float8, \$point, \$lseg, \$box) )
- and print "\$sth->bind_columns ......... ok\n"
- or print "\$sth->bind_columns ......... not ok: ", $DBI::errstr;
-
-$sth->fetch or die $DBI::errstr;
-( "$bool, $char, $char12, $char16, $vchar12, $text, $date, $int4, $int4a, $float8, $point, $lseg, $box" eq
- q{1, a, Edmund Mergl, quote \ ' this , Edmund Mergl, Edmund Mergl, 1997-03-08, 1234, {1,2,3}, 1.234, (1,2), [(1,2),(3,4)], (3,4),(1,2)} )
- and print "\$sth->fetch ................ ok\n"
- or print "\$sth->fetch ................ not ok: $bool, $char, $char12, $char16, $vchar12, $text, $date, $int4, $int4a, $float8, $point, $lseg, $box\n";
-
-my $gaga;
-( $sth->bind_col(5, \$gaga) )
- and print "\$sth->bind_col ............. ok\n"
- or print "\$sth->bind_col ............. not ok: ", $DBI::errstr;
-
-$sth->fetch or die $DBI::errstr;
-( $gaga eq q{Halli Hallo} )
- and print "\$sth->fetch ................ ok\n"
- or print "\$sth->fetch ................ not ok: $gaga\n";
-
-$sth->finish or die $DBI::errstr;
-
-# select from table using input parameters
-
-$sth = $dbh->prepare( "SELECT * FROM builtin where char16_ = ?" ) or die $DBI::errstr;
-
-my $string = q{quote \ ' this};
-$sth->bind_param(1, $string) or die $DBI::errstr;
-
-# $dbh->{pg_auto_escape} = 1;
-# is needed for $string above and is on by default
-$sth->execute or die $DBI::errstr;
-
-$sth->{ChopBlanks} = 1;
-@row_ary = $sth->fetchrow_array;
-( join(" ", @row_ary) eq q{1 a Edmund Mergl quote \ ' this Edmund Mergl Edmund Mergl 1997-03-08 1234 {1,2,3} 1.234 (1,2) [(1,2),(3,4)] (3,4),(1,2)} )
- and print "\$sth->{ChopBlanks} ......... ok\n"
- or print "\$sth->{ChopBlanks} .......... not ok: ", join(" ", @row_ary), "\n";
-
-my $rows = $sth->rows;
-( 1 == $rows )
- and print "\$sth->rows ................. ok\n"
- or print "\$sth->rows ................. not ok: $rows\n";
-
-$sth->finish or die $DBI::errstr;
-
-######################### test copy to/from stdout/stdin
-
-$dbh->do( "DELETE FROM builtin" ) or die $DBI::errstr;
-
-$dbh->do( "COPY builtin FROM STDIN" ) or die $DBI::errstr;
-
-my $ret;
-for (1..3) {
- # watch the tabs and do not forget the newlines
- $ret = $dbh->func("t a Edmund Mergl Edmund Mergl Edmund Mergl Edmund Mergl 1997-03-08 1234 {1,2,3} 1.234 (1.0,2.0) ((1.0,2.0),(3.0,4.0)) ((1.0,2.0),(3.0,4.0))\n", 'putline');
-}
-$dbh->func("\\.\n", 'putline');
-$dbh->func('endcopy');
-
-( 1 == $ret )
- and print "\$dbh->func(putline) ........ ok\n"
- or print "\$dbh->func(putline) ........ not ok: ", $ret, "\n";
-
-$dbh->do( "COPY builtin TO STDOUT" ) or die $DBI::errstr;
-my $buf = '';
-$ret = 0;
-$rows = 0;
-while ($dbh->func($buf, 256, 'getline')) {
- #print "$buf\n";
- $rows++;
-}
-$dbh->func('endcopy');
-
-( 3 == $rows )
- and print "\$dbh->func(getline) ........ ok\n"
- or print "\$dbh->func(getline) ........ not ok: ", $rows, "\n";
-
-
-######################### test large objects
-
-# create large object from binary file
-
-my ($ascii, $pgin);
-foreach $ascii (0..255) {
- $pgin .= chr($ascii);
-};
-
-my $PGIN = '/tmp/pgin';
-open(PGIN, ">$PGIN") or die "can not open $PGIN";
-print PGIN $pgin;
-close PGIN;
-
-# begin transaction
-$dbh->{AutoCommit} = 0;
-
-my $lobjId;
-( $lobjId = $dbh->func($PGIN, 'lo_import') )
- and print "\$dbh->func(lo_import) ...... ok\n"
- or print "\$dbh->func(lo_import) ...... not ok\n";
-
-# end transaction
-$dbh->{AutoCommit} = 1;
-
-unlink $PGIN;
-
-
-# blob_read
-
-# begin transaction
-$dbh->{AutoCommit} = 0;
-
-$sth = $dbh->prepare( "" ) or die $DBI::errstr;
-
-my $blob;
-( $blob = $sth->blob_read($lobjId, 0, 0) )
- and print "\$sth->blob_read ............ ok\n"
- or print "\$sth->blob_read ............ not ok\n";
-
-$sth->finish or die $DBI::errstr;
-
-# end transaction
-$dbh->{AutoCommit} = 1;
-
-
-# read large object using lo-functions
-
-# begin transaction
-$dbh->{AutoCommit} = 0;
-
-my $lobj_fd; # may be 0
-( defined($lobj_fd = $dbh->func($lobjId, $dbh->{pg_INV_READ}, 'lo_open')) )
- and print "\$dbh->func(lo_open) ........ ok\n"
- or print "\$dbh->func(lo_open) ........ not ok\n";
-
-( 0 == $dbh->func($lobj_fd, 0, 0, 'lo_lseek') )
- and print "\$dbh->func(lo_lseek) ....... ok\n"
- or print "\$dbh->func(lo_lseek) ....... not ok\n";
-
-$buf = '';
-( 256 == $dbh->func($lobj_fd, $buf, 256, 'lo_read') )
- and print "\$dbh->func(lo_read) ........ ok\n"
- or print "\$dbh->func(lo_read) ........ not ok\n";
-
-( 256 == $dbh->func($lobj_fd, 'lo_tell') )
- and print "\$dbh->func(lo_tell) ........ ok\n"
- or print "\$dbh->func(lo_tell) ........ not ok\n";
-
-( $dbh->func($lobj_fd, 'lo_close') )
- and print "\$dbh->func(lo_close) ....... ok\n"
- or print "\$dbh->func(lo_close) ....... not ok\n";
-
-# end transaction
-$dbh->{AutoCommit} = 1;
-
-( $dbh->func($lobjId, 'lo_unlink') )
- and print "\$dbh->func(lo_unlink) ...... ok\n"
- or print "\$dbh->func(lo_unlink) ...... not ok\n";
-
-# compare large objects
-
-( $pgin cmp $buf and $pgin cmp $blob )
- and print "compare blobs .............. not ok\n"
- or print "compare blobs .............. ok\n";
-
-######################### disconnect and drop test database
-
-# disconnect
-
-( $dbh->disconnect )
- and print "\$dbh->disconnect ........... ok\n"
- or die "\$dbh->disconnect ........... not ok: ", $DBI::errstr;
-
-$dbh0->do("DROP DATABASE $dbtest");
-$dbh0->disconnect;
-
-print "test sequence finished.\n";
-
-######################### EOF
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/BUILD b/monitoring/PerlModules/CPAN/Error-0.15/BUILD
deleted file mode 100644
index d53f022..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/BUILD
+++ /dev/null
@@ -1,44 +0,0 @@
-# Macros
-
-#control upversion
-%define external_package 1
-
-%define name Error
-%define cvs_package PerlModules/CPAN/Error-0.15
-
-
-# Package specific stuff
-Name: Error
-Version: 1.2.0
-Release: 1
-Packager: Rod McChesney <rmcchesney(a)nocpulse.com>
-Summary: Try/catch/throw for Perl
-Source: %name-%PACKAGE_VERSION.tar.gz
-BuildArch: noarch
-Requires: perl
-Group: unsorted
-License: GPL or Artistic
-Vendor: Red Hat, Inc.
-Prefix: %{_our_prefix}
-BuildRoot: %{_tmppath}/%cvs_package
-
-%description
-
-Provides Perl try/catch/throw semantics by wrapping die.
-
-%prep
-%entirely_abstract_build_step
-
-%build
-%makefile_build
-
-%install
-cd $RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
-%makefile_install
-%point_scripts_to_correct_perl
-%make_file_list
-
-%files -f %{name}-%{version}-%{release}-filelist
-
-%clean
-%abstract_clean_script
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/ChangeLog b/monitoring/PerlModules/CPAN/Error-0.15/ChangeLog
deleted file mode 100644
index 2b8597d..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/ChangeLog
+++ /dev/null
@@ -1,73 +0,0 @@
-Oct 9 2001 <u_arunkumar(a)yahoo.com> (Arun Kumar U)
-
- Error.pm #0.15
-
- - Removed the run_clauses calls from the stack trace
-
-May 12 2001 <u_arunkumar(a)yahoo.com> (Arun Kumar U)
-
- Error.pm #0.14
-
- - Added overloading method for 'bool'. This was neccessary so that
- examining the value of $@ after a eval block, returns a true
- value
- - Applied the diffs from Graham's code base
- - Changed README with more information about the module
-
-Change 436 on 2000/03/29 by <gbarr(a)pobox.com> (Graham Barr)
-
- Added ppd stuff to MANIFEST and Makefile.PL
-
-Change 435 on 2000/03/29 by <gbarr(a)pobox.com> (Graham Barr)
-
- Changed README to contain examples from the POD
-
-Change 434 on 2000/03/29 by <gbarr(a)pobox.com> (Graham Barr)
-
- Documentation updates
- removed experimental warning, too many users now to change too much.
-
-Change 422 on 2000/03/28 by <gbarr(a)pobox.com> (Graham Barr)
-
- Some tidy-ups
-
-Change 145 on 1998/05/31 by <gbarr(a)pobox.com> (Graham Barr)
-
- Errno.pm
- - Separated run_clauses out into a sub
-
-Oct 28 1997 <gbarr(a)pobox.com>
-
- Error.pm #0.12
-
- - Removed proceed clause
-
-Oct 27 1997 <gbarr(a)pobox.com>
-
- Error.pm #0.11
-
- - Fixed calling of otherwise clause if there are no catch claues
-
-Oct 21 1997 <gbarr(a)pobox.com>
-
- Error.pm #0.10
-
- - Added proceed clause, the return value from the proceed block
- will be returned by throw.
- - try will now return the result from the try block
- or from the catch
- - Changed except clause handling so that block is only evaluated
- once, the first time the result is required.
- - Changed catch and proceed blocks to accept two arguments. The
- second argument is a reference to a scalar, which if set to true
- will cause Error to continue looking for a catch/proceed block
- when the block returns.
-
-Oct 19 1997 <gbarr(a)pobox.com>
-
- - Added associate method so that an existing error may be associated
- with an object.
-
-Oct 10 1997 <gbarr(a)pobox.com>
-
- - Initial release for private viewing
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/Error.pm b/monitoring/PerlModules/CPAN/Error-0.15/Error.pm
deleted file mode 100644
index c06819f..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/Error.pm
+++ /dev/null
@@ -1,750 +0,0 @@
-# Error.pm
-#
-# Copyright (c) 1997-8 Graham Barr <gbarr(a)ti.com>. All rights reserved.
-# This program is free software; you can redistribute it and/or
-# modify it under the same terms as Perl itself.
-#
-# Based on my original Error.pm, and Exceptions.pm by Peter Seibel
-# <peter(a)weblogic.com> and adapted by Jesse Glick <jglick(a)sig.bsh.com>.
-#
-# but modified ***significantly***
-
-package Error;
-
-use strict;
-use vars qw($VERSION);
-use 5.004;
-
-$VERSION = "0.15";
-
-use overload (
- '""' => 'stringify',
- '0+' => 'value',
- 'bool' => sub { return 1; },
- 'fallback' => 1
-);
-
-$Error::Depth = 0; # Depth to pass to caller()
-$Error::Debug = 0; # Generate verbose stack traces
-@Error::STACK = (); # Clause stack for try
-$Error::THROWN = undef; # last error thrown, a workaround until die $ref works
-
-my $LAST; # Last error created
-my %ERROR; # Last error associated with package
-
-# Exported subs are defined in Error::subs
-
-sub import {
- shift;
- local $Exporter::ExportLevel = $Exporter::ExportLevel + 1;
- Error::subs->import(@_);
-}
-
-# I really want to use last for the name of this method, but it is a keyword
-# which prevent the syntax last Error
-
-sub prior {
- shift; # ignore
-
- return $LAST unless @_;
-
- my $pkg = shift;
- return exists $ERROR{$pkg} ? $ERROR{$pkg} : undef
- unless ref($pkg);
-
- my $obj = $pkg;
- my $err = undef;
- if($obj->isa('HASH')) {
- $err = $obj->{'__Error__'}
- if exists $obj->{'__Error__'};
- }
- elsif($obj->isa('GLOB')) {
- $err = ${*$obj}{'__Error__'}
- if exists ${*$obj}{'__Error__'};
- }
-
- $err;
-}
-
-# Return as much information as possible about where the error
-# happened. The -stacktrace element only exists if $Error::DEBUG
-# was set when the error was created
-
-sub stacktrace {
- my $self = shift;
-
- return $self->{'-stacktrace'}
- if exists $self->{'-stacktrace'};
-
- my $text = exists $self->{'-text'} ? $self->{'-text'} : "Died";
-
- $text .= sprintf(" at %s line %d.\n", $self->file, $self->line)
- unless($text =~ /\n$/s);
-
- $text;
-}
-
-# Allow error propagation, ie
-#
-# $ber->encode(...) or
-# return Error->prior($ber)->associate($ldap);
-
-sub associate {
- my $err = shift;
- my $obj = shift;
-
- return unless ref($obj);
-
- if($obj->isa('HASH')) {
- $obj->{'__Error__'} = $err;
- }
- elsif($obj->isa('GLOB')) {
- ${*$obj}{'__Error__'} = $err;
- }
- $obj = ref($obj);
- $ERROR{ ref($obj) } = $err;
-
- return;
-}
-
-sub new {
- my $self = shift;
- my($pkg,$file,$line) = caller($Error::Depth);
-
- my $err = bless {
- '-package' => $pkg,
- '-file' => $file,
- '-line' => $line,
- @_
- }, $self;
-
- $err->associate($err->{'-object'})
- if(exists $err->{'-object'});
-
- # To always create a stacktrace would be very inefficient, so
- # we only do it if $Error::Debug is set
-
- if($Error::Debug) {
- require Carp;
- local $Carp::CarpLevel = $Error::Depth;
- my $text = defined($err->{'-text'}) ? $err->{'-text'} : "Error";
- my $trace = Carp::longmess($text);
- # Remove try calls from the trace
- $trace =~ s/(\n\s+\S+__ANON__[^\n]+)?\n\s+eval[^\n]+\n\s+Error::subs::try[^\n]+(?=\n)//sog;
- $trace =~ s/(\n\s+\S+__ANON__[^\n]+)?\n\s+eval[^\n]+\n\s+Error::subs::run_clauses[^\n]+\n\s+Error::subs::try[^\n]+(?=\n)//sog;
- $err->{'-stacktrace'} = $trace
- }
-
- $@ = $LAST = $ERROR{$pkg} = $err;
-}
-
-# Throw an error. this contains some very gory code.
-
-sub throw {
- my $self = shift;
- local $Error::Depth = $Error::Depth + 1;
-
- # if we are not rethrow-ing then create the object to throw
- $self = $self->new(@_) unless ref($self);
-
- die $Error::THROWN = $self;
-}
-
-# syntactic sugar for
-#
-# die with Error( ... );
-
-sub with {
- my $self = shift;
- local $Error::Depth = $Error::Depth + 1;
-
- $self->new(@_);
-}
-
-# syntactic sugar for
-#
-# record Error( ... ) and return;
-
-sub record {
- my $self = shift;
- local $Error::Depth = $Error::Depth + 1;
-
- $self->new(@_);
-}
-
-# catch clause for
-#
-# try { ... } catch CLASS with { ... }
-
-sub catch {
- my $pkg = shift;
- my $code = shift;
- my $clauses = shift || {};
- my $catch = $clauses->{'catch'} ||= [];
-
- unshift @$catch, $pkg, $code;
-
- $clauses;
-}
-
-# Object query methods
-
-sub object {
- my $self = shift;
- exists $self->{'-object'} ? $self->{'-object'} : undef;
-}
-
-sub file {
- my $self = shift;
- exists $self->{'-file'} ? $self->{'-file'} : undef;
-}
-
-sub line {
- my $self = shift;
- exists $self->{'-line'} ? $self->{'-line'} : undef;
-}
-
-sub text {
- my $self = shift;
- exists $self->{'-text'} ? $self->{'-text'} : undef;
-}
-
-# overload methods
-
-sub stringify {
- my $self = shift;
- defined $self->{'-text'} ? $self->{'-text'} : "Died";
-}
-
-sub value {
- my $self = shift;
- exists $self->{'-value'} ? $self->{'-value'} : undef;
-}
-
-package Error::Simple;
-
-@Error::Simple::ISA = qw(Error);
-
-sub new {
- my $self = shift;
- my $text = "" . shift;
- my $value = shift;
- my(@args) = ();
-
- local $Error::Depth = $Error::Depth + 1;
-
- @args = ( -file => $1, -line => $2)
- if($text =~ s/ at (\S+) line (\d+)(\.\n)?$//s);
-
- push(@args, '-value', 0 + $value)
- if defined($value);
-
- $self->SUPER::new(-text => $text, @args);
-}
-
-sub stringify {
- my $self = shift;
- my $text = $self->SUPER::stringify;
- $text .= sprintf(" at %s line %d.\n", $self->file, $self->line)
- unless($text =~ /\n$/s);
- $text;
-}
-
-##########################################################################
-##########################################################################
-
-# Inspired by code from Jesse Glick <jglick(a)sig.bsh.com> and
-# Peter Seibel <peter(a)weblogic.com>
-
-package Error::subs;
-
-use Exporter ();
-use vars qw(@EXPORT_OK @ISA %EXPORT_TAGS);
-
-@EXPORT_OK = qw(try with finally except otherwise);
-%EXPORT_TAGS = (try => \@EXPORT_OK);
-
-@ISA = qw(Exporter);
-
-sub run_clauses ($$$\@) {
- my($clauses,$err,$wantarray,$result) = @_;
- my $code = undef;
-
- $err = new Error::Simple($err) unless ref($err);
-
- CATCH: {
-
- # catch
- my $catch;
- if(defined($catch = $clauses->{'catch'})) {
- my $i = 0;
-
- CATCHLOOP:
- for( ; $i < @$catch ; $i += 2) {
- my $pkg = $catch->[$i];
- unless(defined $pkg) {
- #except
- splice(@$catch,$i,2,$catch->[$i+1]->());
- $i -= 2;
- next CATCHLOOP;
- }
- elsif($err->isa($pkg)) {
- $code = $catch->[$i+1];
- while(1) {
- my $more = 0;
- local($Error::THROWN);
- my $ok = eval {
- if($wantarray) {
- @{$result} = $code->($err,\$more);
- }
- elsif(defined($wantarray)) {
- @{$result} = ();
- $result->[0] = $code->($err,\$more);
- }
- else {
- $code->($err,\$more);
- }
- 1;
- };
- if( $ok ) {
- next CATCHLOOP if $more;
- undef $err;
- }
- else {
- $err = defined($Error::THROWN)
- ? $Error::THROWN : $@;
- $err = new Error::Simple($err)
- unless ref($err);
- }
- last CATCH;
- };
- }
- }
- }
-
- # otherwise
- my $owise;
- if(defined($owise = $clauses->{'otherwise'})) {
- my $code = $clauses->{'otherwise'};
- my $more = 0;
- my $ok = eval {
- if($wantarray) {
- @{$result} = $code->($err,\$more);
- }
- elsif(defined($wantarray)) {
- @{$result} = ();
- $result->[0] = $code->($err,\$more);
- }
- else {
- $code->($err,\$more);
- }
- 1;
- };
- if( $ok ) {
- undef $err;
- }
- else {
- $err = defined($Error::THROWN)
- ? $Error::THROWN : $@;
- $err = new Error::Simple($err)
- unless ref($err);
- }
- }
- }
- $err;
-}
-
-sub try (&;$) {
- my $try = shift;
- my $clauses = @_ ? shift : {};
- my $ok = 0;
- my $err = undef;
- my @result = ();
-
- unshift @Error::STACK, $clauses;
-
- my $wantarray = wantarray();
-
- do {
- local $Error::THROWN = undef;
-
- $ok = eval {
- if($wantarray) {
- @result = $try->();
- }
- elsif(defined $wantarray) {
- $result[0] = $try->();
- }
- else {
- $try->();
- }
- 1;
- };
-
- $err = defined($Error::THROWN) ? $Error::THROWN : $@
- unless $ok;
- };
-
- shift @Error::STACK;
-
- $err = run_clauses($clauses,$err,wantarray,@result)
- unless($ok);
-
- $clauses->{'finally'}->()
- if(defined($clauses->{'finally'}));
-
- # rmcchesney(a)nocpulse.com: Don't assume $err knows how to throw.
- if (defined($err)) {
- if ($err->can('throw')) {
- throw $err;
- } else {
- die $err;
- }
- }
- wantarray ? @result : $result[0];
-}
-
-# Each clause adds a sub to the list of clauses. The finally clause is
-# always the last, and the otherwise clause is always added just before
-# the finally clause.
-#
-# All clauses, except the finally clause, add a sub which takes one argument
-# this argument will be the error being thrown. The sub will return a code ref
-# if that clause can handle that error, otherwise undef is returned.
-#
-# The otherwise clause adds a sub which unconditionally returns the users
-# code reference, this is why it is forced to be last.
-#
-# The catch clause is defined in Error.pm, as the syntax causes it to
-# be called as a method
-
-sub with (&;$) {
- @_
-}
-
-sub finally (&) {
- my $code = shift;
- my $clauses = { 'finally' => $code };
- $clauses;
-}
-
-# The except clause is a block which returns a hashref or a list of
-# key-value pairs, where the keys are the classes and the values are subs.
-
-sub except (&;$) {
- my $code = shift;
- my $clauses = shift || {};
- my $catch = $clauses->{'catch'} ||= [];
-
- my $sub = sub {
- my $ref;
- my(@array) = $code->($_[0]);
- if(@array == 1 && ref($array[0])) {
- $ref = $array[0];
- $ref = [ %$ref ]
- if(UNIVERSAL::isa($ref,'HASH'));
- }
- else {
- $ref = \@array;
- }
- @$ref
- };
-
- unshift @{$catch}, undef, $sub;
-
- $clauses;
-}
-
-sub otherwise (&;$) {
- my $code = shift;
- my $clauses = shift || {};
-
- if(exists $clauses->{'otherwise'}) {
- require Carp;
- Carp::croak("Multiple otherwise clauses");
- }
-
- $clauses->{'otherwise'} = $code;
-
- $clauses;
-}
-
-1;
-__END__
-
-=head1 NAME
-
-Error - Error/exception handling in an OO-ish way
-
-=head1 SYNOPSIS
-
- use Error qw(:try);
-
- throw Error::Simple( "A simple error");
-
- sub xyz {
- ...
- record Error::Simple("A simple error")
- and return;
- }
-
- unlink($file) or throw Error::Simple("$file: $!",$!);
-
- try {
- do_some_stuff();
- die "error!" if $condition;
- throw Error::Simple -text => "Oops!" if $other_condition;
- }
- catch Error::IO with {
- my $E = shift;
- print STDERR "File ", $E->{'-file'}, " had a problem\n";
- }
- except {
- my $E = shift;
- my $general_handler=sub {send_message $E->{-description}};
- return {
- UserException1 => $general_handler,
- UserException2 => $general_handler
- };
- }
- otherwise {
- print STDERR "Well I don't know what to say\n";
- }
- finally {
- close_the_garage_door_already(); # Should be reliable
- }; # Don't forget the trailing ; or you might be surprised
-
-=head1 DESCRIPTION
-
-The C<Error> package provides two interfaces. Firstly C<Error> provides
-a procedural interface to exception handling. Secondly C<Error> is a
-base class for errors/exceptions that can either be thrown, for
-subsequent catch, or can simply be recorded.
-
-Errors in the class C<Error> should not be thrown directly, but the
-user should throw errors from a sub-class of C<Error>.
-
-=head1 PROCEDURAL INTERFACE
-
-C<Error> exports subroutines to perform exception handling. These will
-be exported if the C<:try> tag is used in the C<use> line.
-
-=over 4
-
-=item try BLOCK CLAUSES
-
-C<try> is the main subroutine called by the user. All other subroutines
-exported are clauses to the try subroutine.
-
-The BLOCK will be evaluated and, if no error is throw, try will return
-the result of the block.
-
-C<CLAUSES> are the subroutines below, which describe what to do in the
-event of an error being thrown within BLOCK.
-
-=item catch CLASS with BLOCK
-
-This clauses will cause all errors that satisfy C<$err-E<gt>isa(CLASS)>
-to be caught and handled by evaluating C<BLOCK>.
-
-C<BLOCK> will be passed two arguments. The first will be the error
-being thrown. The second is a reference to a scalar variable. If this
-variable is set by the catch block then, on return from the catch
-block, try will continue processing as if the catch block was never
-found.
-
-To propagate the error the catch block may call C<$err-E<gt>throw>
-
-If the scalar reference by the second argument is not set, and the
-error is not thrown. Then the current try block will return with the
-result from the catch block.
-
-=item except BLOCK
-
-When C<try> is looking for a handler, if an except clause is found
-C<BLOCK> is evaluated. The return value from this block should be a
-HASHREF or a list of key-value pairs, where the keys are class names
-and the values are CODE references for the handler of errors of that
-type.
-
-=item otherwise BLOCK
-
-Catch any error by executing the code in C<BLOCK>
-
-When evaluated C<BLOCK> will be passed one argument, which will be the
-error being processed.
-
-Only one otherwise block may be specified per try block
-
-=item finally BLOCK
-
-Execute the code in C<BLOCK> either after the code in the try block has
-successfully completed, or if the try block throws an error then
-C<BLOCK> will be executed after the handler has completed.
-
-If the handler throws an error then the error will be caught, the
-finally block will be executed and the error will be re-thrown.
-
-Only one finally block may be specified per try block
-
-=back
-
-=head1 CLASS INTERFACE
-
-=head2 CONSTRUCTORS
-
-The C<Error> object is implemented as a HASH. This HASH is initialized
-with the arguments that are passed to it's constructor. The elements
-that are used by, or are retrievable by the C<Error> class are listed
-below, other classes may add to these.
-
- -file
- -line
- -text
- -value
- -object
-
-If C<-file> or C<-line> are not specified in the constructor arguments
-then these will be initialized with the file name and line number where
-the constructor was called from.
-
-If the error is associated with an object then the object should be
-passed as the C<-object> argument. This will allow the C<Error> package
-to associate the error with the object.
-
-The C<Error> package remembers the last error created, and also the
-last error associated with a package. This could either be the last
-error created by a sub in that package, or the last error which passed
-an object blessed into that package as the C<-object> argument.
-
-=over 4
-
-=item throw ( [ ARGS ] )
-
-Create a new C<Error> object and throw an error, which will be caught
-by a surrounding C<try> block, if there is one. Otherwise it will cause
-the program to exit.
-
-C<throw> may also be called on an existing error to re-throw it.
-
-=item with ( [ ARGS ] )
-
-Create a new C<Error> object and returns it. This is defined for
-syntactic sugar, eg
-
- die with Some::Error ( ... );
-
-=item record ( [ ARGS ] )
-
-Create a new C<Error> object and returns it. This is defined for
-syntactic sugar, eg
-
- record Some::Error ( ... )
- and return;
-
-=back
-
-=head2 STATIC METHODS
-
-=over 4
-
-=item prior ( [ PACKAGE ] )
-
-Return the last error created, or the last error associated with
-C<PACKAGE>
-
-=back
-
-=head2 OBJECT METHODS
-
-=over 4
-
-=item stacktrace
-
-If the variable C<$Error::Debug> was non-zero when the error was
-created, then C<stacktrace> returns a string created by calling
-C<Carp::longmess>. If the variable was zero the C<stacktrace> returns
-the text of the error appended with the filename and line number of
-where the error was created, providing the text does not end with a
-newline.
-
-=item object
-
-The object this error was associated with
-
-=item file
-
-The file where the constructor of this error was called from
-
-=item line
-
-The line where the constructor of this error was called from
-
-=item text
-
-The text of the error
-
-=back
-
-=head2 OVERLOAD METHODS
-
-=over 4
-
-=item stringify
-
-A method that converts the object into a string. This method may simply
-return the same as the C<text> method, or it may append more
-information. For example the file name and line number.
-
-By default this method returns the C<-text> argument that was passed to
-the constructor, or the string C<"Died"> if none was given.
-
-=item value
-
-A method that will return a value that can be associated with the
-error. For example if an error was created due to the failure of a
-system call, then this may return the numeric value of C<$!> at the
-time.
-
-By default this method returns the C<-value> argument that was passed
-to the constructor.
-
-=back
-
-=head1 PRE-DEFINED ERROR CLASSES
-
-=over 4
-
-=item Error::Simple
-
-This class can be used to hold simple error strings and values. It's
-constructor takes two arguments. The first is a text value, the second
-is a numeric value. These values are what will be returned by the
-overload methods.
-
-If the text value ends with C<at file line 1> as $@ strings do, then
-this infomation will be used to set the C<-file> and C<-line> arguments
-of the error object.
-
-This class is used internally if an eval'd block die's with an error
-that is a plain string.
-
-=back
-
-=head1 KNOWN BUGS
-
-None, but that does not mean there are not any.
-
-=head1 AUTHORS
-
-Graham Barr <gbarr(a)pobox.com>
-
-The code that inspired me to write this was originally written by
-Peter Seibel <peter(a)weblogic.com> and adapted by Jesse Glick
-<jglick(a)sig.bsh.com>.
-
-=head1 MAINTAINER
-
-Arun Kumar U <u_arunkumar(a)yahoo.com>
-
-=cut
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/Error.ppd b/monitoring/PerlModules/CPAN/Error-0.15/Error.ppd
deleted file mode 100644
index 51e87d1..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/Error.ppd
+++ /dev/null
@@ -1,10 +0,0 @@
-<SOFTPKG NAME="Error" VERSION="0,15,0,0">
- <TITLE>Error</TITLE>
- <ABSTRACT>Error/exception handling in an OO-ish way</ABSTRACT>
- <AUTHOR>Graham Barr <gbarr(a)pobox.com></AUTHOR>
- <IMPLEMENTATION>
- <OS NAME="linux" />
- <ARCHITECTURE NAME="i586-linux" />
- <CODEBASE HREF="" />
- </IMPLEMENTATION>
-</SOFTPKG>
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/MANIFEST b/monitoring/PerlModules/CPAN/Error-0.15/MANIFEST
deleted file mode 100644
index 53b338b..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/MANIFEST
+++ /dev/null
@@ -1,9 +0,0 @@
-ChangeLog
-Error.pm
-Error.ppd
-MANIFEST
-Makefile.PL
-README
-example
-t/01throw.t
-t/02order.t
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/Makefile.PL b/monitoring/PerlModules/CPAN/Error-0.15/Makefile.PL
deleted file mode 100644
index b311fe0..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/Makefile.PL
+++ /dev/null
@@ -1,29 +0,0 @@
-use ExtUtils::MakeMaker;
-use 5.004;
-
-my @ppd;
-
-if ($] >= 5.00503) {
- @ppd = (
- AUTHOR => 'Graham Barr <gbarr(a)pobox.com>',
- ABSTRACT => 'Error/exception handling in an OO-ish way'
- );
-}
-
-WriteMakefile(
- NAME => 'Error',
- VERSION_FROM => 'Error.pm',
- @ppd
-);
-
-sub MY::postamble {
-
- return '' unless $] >= 5.00503;
-
-<<'ESQ';
-
-dist : ppd
-
-ESQ
-}
-
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/README b/monitoring/PerlModules/CPAN/Error-0.15/README
deleted file mode 100644
index 25e157a..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/README
+++ /dev/null
@@ -1,91 +0,0 @@
-
-NAME
- Error - Error/exception handling in an OO-ish way
-
-DESCRIPTION
- The Error package provides two interfaces. Firstly Error provides
- a procedural interface to exception handling. Secondly Error is a
- base class for errors/exceptions that can either be thrown, for
- subsequent catch, or can simply be recorded.
-
- Errors in the class Error should not be thrown directly, but the
- user should throw errors from a sub-class of Error
-
-SYNOPSIS
-
- use Error qw(:try);
-
- throw Error::Simple( "A simple error");
-
- sub xyz {
- ...
- record Error::Simple("A simple error")
- and return;
- }
-
- unlink($file) or throw Error::Simple("$file: $!",$!);
-
- try {
- do_some_stuff();
- die "error!" if $condition;
- throw Error::Simple -text => "Oops!" if $other_condition;
- }
- catch Error::IO with {
- my $E = shift;
- print STDERR "File ", $E->{'-file'}, " had a problem\n";
- }
- except {
- my $E = shift;
- my $general_handler=sub {send_message $E->{-description}};
- return {
- UserException1 => $general_handler,
- UserException2 => $general_handler
- };
- }
- otherwise {
- print STDERR "Well I don't know what to say\n";
- }
- finally {
- close_the_garage_door_already(); # Should be reliable
- }; # Don't forget the trailing ; or you might be surprised
-
-AUTHORS
-
- Graham Barr <gbarr(a)pobox.com>
-
- The code that inspired me to write this was originally written by
- Peter Seibel <peter(a)weblogic.com> and adapted by Jesse Glick
- <jglick(a)sig.bsh.com>.
-
-MAINTAINER
-
- Arun Kumar U <u_arunkumar(a)yahoo.com>
-
- =====================
-
-HOW TO INSTALL IT ?
-
-To install this module, cd to the directory that contains this README
-file and type the following:
-
- perl Makefile.PL
- make test
- make install
-
-To install this module into a specific directory, do:
-perl Makefile.PL PREFIX=/name/of/the/directory
-...the rest is the same...
-
-Please also read the perlmodinstall man page, if available.
-
-Share and Enjoy !!
-
-Arun Kumar U
-<u_arunkumar(a)yahoo.com>
-
--------------------------------------------------------------------------------
- Only wimps use tape backup: *real* men just upload their important
- stuff on ftp, and let the rest of the world mirror it.
- - Linus Torvalds
--------------------------------------------------------------------------------
-
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/example b/monitoring/PerlModules/CPAN/Error-0.15/example
deleted file mode 100644
index 59da597..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/example
+++ /dev/null
@@ -1,51 +0,0 @@
-
-use lib '.';
-use Error qw(:try);
-
-@Error::Bad::ISA = qw(Error);
-
-$Error::Debug = 1; # turn on verbose stacktrace
-
-sub abc {
- try {
- try {
- throw Error::Simple("a simple error");
- }
- catch Error::Simple with {
- my $err = shift;
- throw Error::Bad(-text => "some text");
- }
- except {
- return {
- Error::Simple => sub { warn "simple" }
- }
- }
- otherwise {
- 1;
- } finally {
- warn "finally\n";
- };
- }
- catch Error::Bad with {
- 1;
- };
-}
-
-sub def {
- unlink("not such file") or
- record Error::Simple("unlink: $!", $!) and return;
- 1;
-}
-
-abc();
-
-
-$x = prior Error;
-
-print "--\n",$x->stacktrace;
-
-unless(defined def()) {
- $x = prior Error 'main';
- print "--\n",0+$x,"\n",$x;
-}
-
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/t/01throw.t b/monitoring/PerlModules/CPAN/Error-0.15/t/01throw.t
deleted file mode 100644
index a1bdba2..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/t/01throw.t
+++ /dev/null
@@ -1,25 +0,0 @@
-
-use Error qw(:try);
-
-print "1..4\n";
-
-try {
- print "ok 1\n";
-};
-
-
-try {
- throw Error::Simple("ok 2\n",2);
- print "not ok 2\n";
-}
-catch Error::Simple with {
- my $err = shift;
- print "$err";
-}
-finally {
- print "ok 3\n";
-};
-
-$err = prior Error;
-
-print "ok ",2+$err,"\n";;
diff --git a/monitoring/PerlModules/CPAN/Error-0.15/t/02order.t b/monitoring/PerlModules/CPAN/Error-0.15/t/02order.t
deleted file mode 100644
index 7d1e59d..0000000
--- a/monitoring/PerlModules/CPAN/Error-0.15/t/02order.t
+++ /dev/null
@@ -1,47 +0,0 @@
-
-use Error qw(:try);
-
-@Error::Fatal::ISA = qw(Error);
-
-print "1..6\n";
-
-$num = try {
- try {
- try {
- throw Error::Simple("ok 1\n");
- }
- catch Error::Simple with {
- my $err = shift;
- print $err;
-
- throw Error::Fatal(-value => 4);
-
- print "not ok 3\n";
- }
- catch Error::Fatal with {
- exit(1);
- }
- finally {
- print "ok 2\n";
- };
- } finally {
- print "ok 3\n";
- };
-}
-catch Error::Fatal with {
- my $err = shift;
- my $more = shift;
- $$more = 1;
- print "ok ",0+$err,"\n";
-}
-catch Error::Fatal with {
- my $err = shift;
- print "ok ",1+$err,"\n";
- return 6;
-}
-catch Error::Fatal with {
- my $err = shift;
- print "not ok ",2+$err,"\n";
-};
-
-print "ok ",$num,"\n";
diff --git a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/BUILD b/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/BUILD
deleted file mode 100644
index e2be2b3..0000000
--- a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/BUILD
+++ /dev/null
@@ -1,46 +0,0 @@
-# Macros
-
-#control upversion
-%define external_package 1
-
-%define cvs_package PerlModules/CPAN/HTML-TableExtract-1.08
-
-# Package specific stuff
-Name: perl-HTML-TableExtract
-Version: 1.8.0
-Release: 4.2
-Packager: Nick Hansen <nhansen(a)redhat.com>
-Summary: HTML table extractor
-Source: %name-%PACKAGE_VERSION.tar.gz
-BuildArch: noarch
-Prereq: perl
-Group: unsorted
-URL: http://www.mojotoad.com/sisk/projects/HTML-TableExtract/
-License: GPL or Artistic
-Vendor: Red Hat, Inc.
-Prefix: %{_our_prefix}
-BuildRoot: %{_tmppath}/%cvs_package
-
-%description
-
-HTML::TableExtract is a subclass of HTML::Parser that serves to extract
-the textual information from tables of interest contained within an HTML document.
-The text from each extracted table is stored in tabe state objects which
-hold the information as an array of arrays that represent the rows and cells of that table.
-
-%prep
-%entirely_abstract_build_step
-
-%build
-%makefile_build
-
-%install
-cd $RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
-%makefile_install
-%point_scripts_to_correct_perl
-%make_file_list
-
-%files -f %{name}-%{version}-%{release}-filelist
-
-%clean
-%abstract_clean_script
diff --git a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Changes b/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Changes
deleted file mode 100644
index b9f837f..0000000
--- a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Changes
+++ /dev/null
@@ -1,59 +0,0 @@
-Revision history for Perl extension HTML::TableExtract.
-
-1.08 Thu Apr 4 11:26:27 CST 2002
- - Added some more crufty HTML tolerance -- not
- PC (puristicly correct) but HTML correctness
- is probably of no interest to those merely
- trying to extract information *out* of HTML.
- - Fixed a mapback problem with the legacy methods
-
-1.07 Wed Aug 22 06:14:24 CDT 2001
- - Added keep_html option for HTML retention
- - bug fix for depth/count targets
-
-1.06 Thu Nov 2 15:29:49 CST 2000
- - Added <br> translation to newlines (enabled by default)
- - cleaned up some warnings
-
-1.05 Sun Aug 6 06:38:14 CDT 2000
- - minor bug fix involving empty cells
-
-1.04 Sat Jul 15 02:18:04 CDT 2000
- - fixed gridmap bug involving skew calcs on unwanted
- columns
- - added example page reference in README
-
-1.03 Tue Jul 7 03:43:30 CDT 2000
- - gridmap option, columns are really columns regardless
- of cell span skew
- - Added chains for relative targeting
- * Terminus-matching by default
- * Elasticity option
- * Waypoint retention option
- * Lineage tracking (match record along chain)
- - Significant tests added to 'make test'
- - Documentation rewrite
-
-0.05 Tue Mar 21 08:11:54 CST 2000
- - Fixed -w init warnings for dangling columns in header mode
- - added 'decode' option to turn off text decoding when desired
- - internally stores real slices right now rather than sparse
- tables that later get massaged.
-
-0.03 Thu Mar 9 13:10:03 CST 2000
- - Fixed bug regarding incomplete defaults
- - Tables, rows, and cells that are either empty
- or contain no text are now properly noted
- - Header patterns now match across stripped tags
- - In some cases, mangled HTML tables are properly
- scanned by inferring missing <TR> tags.
- - Depth/Count votes are now properly honored.
- - Cleaned up some -w noise.
-
-0.02 Thu Feb 10 13:43:04 CST 2000
- - Fixed some problems tracking counts at revisited depths.
- - Minor doc fix, added mailing list
-
-0.01 Wed Feb 2 18:24:07 CST 2000
- - Initial version.
-
diff --git a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/MANIFEST b/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/MANIFEST
deleted file mode 100644
index 973e98c..0000000
--- a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/MANIFEST
+++ /dev/null
@@ -1,6 +0,0 @@
-README
-Changes
-MANIFEST
-Makefile.PL
-test.pl
-lib/HTML/TableExtract.pm
diff --git a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Makefile.PL b/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Makefile.PL
deleted file mode 100644
index 586ec0b..0000000
--- a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/Makefile.PL
+++ /dev/null
@@ -1,9 +0,0 @@
-use ExtUtils::MakeMaker;
-
-WriteMakefile(
- NAME => 'HTML-TableExtract',
- VERSION_FROM => 'lib/HTML/TableExtract.pm',
- PREREQ_PM => {
- HTML::Parser => 0,
- }
- );
diff --git a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/README b/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/README
deleted file mode 100644
index e3d25ec..0000000
--- a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/README
+++ /dev/null
@@ -1,64 +0,0 @@
-HTML-TableExtract
------------------
-
-HTML::TableExtract is a module that simplifies the extraction
-of information contained in tables within HTML documents.
-
-Tables of note may be specified using Headers, Depth, Count,
-or some combination of the three. See the module documentation
-for details.
-
-INSTALLATION
-
-You install HTML-TableExtract, as you would install any perl module
-library, by running these commands:
-
- perl Makefile.PL
- make
- make test
- make install
-
-DOCUMENTATION
-
-See HTML/TableExtract.pm for the code. See Changes for recent
-changes. POD style documentation is included in the module.
-This is normally converted to a manual page and installed as part
-of the "make install" process. You should also be able to use
-the 'perldoc' utility to extract and read documentation from the
-module directly.
-
-There is also an example page available:
-
- http://www.mojotoad.com/sisk/projects/HTML-TableExtract/tables.html
-
-SUPPORT
-
-There is a mailing list available. To register or examine archived
-messages, go here:
-
- http://lists.sourceforge.net/mailman/listinfo/table-extract-general
-
-Questions and comments may also be directed to Matt Sisk <sisk(a)mojotoad.com>
-
-AVAILABILITY
-
-The package is available from CPAN:
-
- http://www.cpan.org/authors/id/M/MS/MSISK/
-
-The latest version is also available at:
-
- http://www.mojotoad.com/sisk/projects/HTML-TableExtract/
-
-ACKNOWLEDGEMENTS
-
-Thanks to the following people for their generous bug catching and
-fault analysis: Celeste Suliin Burris, David Finberg, Robert Goff,
-Jeremy Howard, Patrick Naubert, Volker Stuerzl, and Steve Wong.
-
-COPYRIGHT
-
-Copyright (c) 1999-2002 Matthew P. Sisk. All rights reserved.
-All wrongs revenged. This program is free software; you can
-redistribute it and/or modify it under the same terms as
-Perl itself.
diff --git a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/lib/HTML/TableExtract.pm b/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/lib/HTML/TableExtract.pm
deleted file mode 100644
index 00c0eba..0000000
--- a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/lib/HTML/TableExtract.pm
+++ /dev/null
@@ -1,1902 +0,0 @@
-package HTML::TableExtract;
-
-# This package extracts tables from HTML. Tables of interest may be
-# specified using header information, depth, order in a depth, or some
-# combination of the three. See the POD for more information.
-#
-# Author: Matthew P. Sisk. See the POD for copyright information.
-
-use strict;
-use Carp;
-
-use vars qw($VERSION @ISA);
-
-$VERSION = '1.08';
-
-use HTML::Parser;
-@ISA = qw(HTML::Parser);
-
-use HTML::Entities;
-
-my %Defaults = (
- headers => undef,
- depth => undef,
- count => undef,
- chain => undef,
- subtables => undef,
- gridmap => 1,
- decode => 1,
- automap => 1,
- br_translate => 1,
- head_include => 0,
- elastic => 1,
- keep => 0,
- keepall => 0,
- debug => 0,
- keep_html => 0,
- );
-my $Dpat = join('|', keys %Defaults);
-
-### Constructor
-
-sub new {
- my $that = shift;
- my $class = ref($that) || $that;
-
- my(%pass, %parms, $k, $v);
- while (($k,$v) = splice(@_, 0, 2)) {
- if ($k eq 'headers' || $k eq 'chain') {
- ref $v eq 'ARRAY'
- or croak "Param '$k' must be passed in ref to array\n";
- if ($k eq 'chain') {
- # Filter out non-links (has refs...allows for extra commas, etc)
- @$v = grep(ref eq 'HASH', @$v);
- }
- $parms{$k} = $v;
- }
- elsif ($k =~ /^$Dpat$/) {
- $parms{$k} = $v;
- }
- else {
- $pass{$k} = $v;
- }
- }
-
- my $self = $class->SUPER::new(%pass);
- bless $self, $class;
- foreach (keys %parms, keys %Defaults) {
- $self->{$_} = exists $parms{$_} && defined $parms{$_} ?
- $parms{$_} : $Defaults{$_};
- }
- if ($self->{headers}) {
- print STDERR "TE here, headers: ", join(',', @{$self->{headers}}),"\n"
- if $self->{debug};
- $self->{gridmap} = 1;
- }
- # Initialize counts and containers
- $self->{_cdepth} = -1;
- $self->{_tablestack} = [];
- $self->{_tables} = {};
- $self->{_ts_sequential} = [];
- $self->{_table_mapback} = {};
- $self->{_counts} = {};
-
- $self;
-}
-
-### HTML::Parser overrides
-
-sub start {
- my $self = shift;
-
- # Create a new table state if entering a table.
- if ($_[0] eq 'table') {
- $self->_enter_table;
- }
-
- # Rows and cells are next. We obviously need not bother checking any
- # tags if we aren't in a table.
- if ($self->{_in_a_table}) {
- my $ts = $self->_current_table_state;
- my $skiptag = 0;
- if ($_[0] eq 'tr') {
- $ts->_enter_row;
- ++$skiptag;
- }
- elsif ($_[0] eq 'td' || $_[0] eq 'th') {
- $ts->_enter_cell;
- # Inspect rowspan/colspan attributes, record as necessary for
- # future column count transforms.
- if ($self->{gridmap}) {
- my %attrs = ref $_[1] ? %{$_[1]} : {};
- if (exists $attrs{rowspan} || exists $attrs{colspan}) {
- $ts->_skew($attrs{rowspan} || 1, $attrs{colspan} || 1);
- }
- }
- ++$skiptag;
- }
- if ($self->{keep_html} && !$skiptag) {
- $self->text($_[3]);
- }
- }
-
- # <br> patch. We like to dispense with HTML, but blindly zapping
- # <br> will sometimes make the resulting text hard to parse if there
- # is no newline. Therefore, when enabled, we replace <br> with
- # newline. Pointed out by Volker Stuerzl <Volker.Stuerzl(a)gmx.de>
- if ($_[0] eq 'br' && $self->{br_translate} && !$self->{keep_html}) {
- $self->text("\n");
- }
-
-
-} # end start
-
-sub end {
- my $self = shift;
- # Don't bother if we're not actually in a table.
- if ($self->{_in_a_table}) {
- my $ts = $self->_current_table_state;
- if ($_[0] eq 'td' || $_[0] eq 'th') {
- $ts->_exit_cell;
- }
- elsif ($_[0] eq 'tr') {
- $ts->_exit_row;
- }
- elsif ($_[0] eq 'table') {
- $self->_exit_table;
- }
- $self->text($_[1]) if $self->{keep_html} && $ts->{in_cell};
- }
-}
-
-sub text {
- my $self = shift;
- # Don't bother unless we are in a table
- if ($self->{_in_a_table}) {
- my $ts = $self->_current_table_state;
- # Don't bother unless we are in a row or cell
- return unless $ts->{in_cell};
- if ($ts->_text_hungry) {
- $ts->_taste_text($self->{decode} ? decode_entities($_[0]) : $_[0]);
- }
- }
-}
-
-### End HTML::Parser overrides
-
-### Report Methods
-
-sub depths {
- # Return all depths where valid tables were located.
- my $self = shift;
- return () unless ref $self->{_tables};
- sort { $a <=> $b } keys %{$self->{_tables}};
-}
-
-sub counts {
- # Given a depth, return the counts of all valid tables found therein.
- my($self, $depth) = @_;
- defined $depth or croak "Depth required\n";
- sort { $a <=> $b } keys %{$self->{_tables}{$depth}};
-}
-
-sub table {
- # Return the table content for a particular depth and count
- shift->table_state(@_)->{content};
-}
-
-sub table_state {
- # Return the table state for a particular depth and count
- my($self, $depth, $count) = @_;
- defined $depth or croak "Depth required\n";
- defined $count or croak "Count required\n";
- if (! $self->{_tables}{$depth} || ! $self->{_tables}{$depth}{$count}) {
- return undef;
- }
- $self->{_tables}{$depth}{$count};
-}
-
-sub rows {
- # Return the rows for a table. First table found if no table
- # specified.
- my($self, $table) = @_;
- my @tc;
- if (!$table) {
- $table = $self->first_table_found;
- }
- return () unless ref $table;
- my $ts = $self->{_table_mapback}{$table};
- $ts->rows;
-}
-
-sub first_table_found {
- shift->first_table_state_found(@_)->{content};
-}
-
-sub first_table_state_found {
- my $self = shift;
- ref $self->{_ts_sequential}[0] ? $self->{_ts_sequential}[0] : {};
-}
-
-sub tables {
- # Return content of all valid tables found, in the order that
- # they were seen.
- map($_->{content}, shift->table_states(@_));
-}
-
-sub table_states {
- # Return all valid table records found, in the order that
- # they were seen.
- my $self = shift;
- @{$self->{_ts_sequential}};
-}
-
-sub table_coords {
- # Return the depth and count of a table
- my($self, $table) = @_;
- ref $table or croak "Table reference required\n";
- my $ts = $self->{_table_mapback}{$table};
- return () unless ref $ts;
- $ts->coords;
-}
-
-sub column_map {
- # Return the column numbers of a particular table in the same order
- # as the provided headers.
- my($self, $table) = @_;
- if (! defined $table) {
- $table = $self->first_table_found;
- }
- my $ts = $self->{_table_mapback}{$table};
- return () unless ref $ts;
- $ts->column_map;
-}
-
-### Runtime
-
-sub _enter_table {
- my $self = shift;
-
- ++$self->{_cdepth};
- ++$self->{_in_a_table};
-
- my $depth = $self->{_cdepth};
-
- # Table states can come and go on the stack...here we retrieve the
- # table state for the table surrounding the current table tag
- # (parent table state). If the current table tag belongs to a top
- # level table, then this will be undef.
- my $pts = $self->_current_table_state;
-
- # Counts are tracked for each depth. Depth count hashes are
- # maintained for each of the table state objects; descendant
- # tables accumulate a list of these hashes, all of which track
- # counts relative to the point of view of that table state.
- my $counts = ref $pts ? $pts->{counts} : [$self->{_counts}];
- foreach (@{$counts}) {
- my $c = $_;
- if (exists $_->{$depth}) {
- ++$_->{$depth};
- }
- else {
- $_->{$depth} = 0;
- }
- }
- my $count = $self->{_counts}{$depth} || 0;
-
- print STDERR "TABLE: cdepth $depth, ccount $count, it: $self->{_in_a_table}\n"
- if $self->{debug} >= 2;
-
- # Umbrella status means that this current table and all of its
- # descendant tables will be harvested. This can happen when there
- # exist target conditions with no headers, depth, or count, or
- # when a particular table has been selected and the subtables
- # parameter was initially specified.
- my $umbrella = 0;
- if (ref $pts) {
- # If the subtables parameter was specified and the last table was
- # being harvested, the upcoming table (and therefore all of it's
- # descendants) is under an umbrella.
- ++$umbrella if $self->{subtables} && $pts->_active;
- }
- if (! defined $self->{depth} && !defined $self->{count}
- && !$self->{headers} && !$self->{chain}) {
- ++$umbrella;
- }
-
- # Basic parameters for the soon-to-be-created table state.
- my %tsparms = (
- depth => $depth,
- count => $count,
- umbrella => $umbrella,
- automap => $self->{automap},
- elastic => $self->{elastic},
- counts => $counts,
- keep => $self->{keep},
- keepall => $self->{keepall},
- debug => $self->{debug},
- keep_html => $self->{keep_html},
- );
-
- # Target constraints. There is no point in passing any of these
- # along if we are under an umbrella. Notice that with table states,
- # "depth" and "count" are absolute coordinates recording where this
- # table was created, whereas "tdepth" and "tcount" are the target
- # constraints. Headers and chain have no "absolute" meaning,
- # therefore are passed by the same name.
- if (!$umbrella) {
- $tsparms{tdepth} = $self->{depth} if defined $self->{depth};
- $tsparms{tcount} = $self->{count} if defined $self->{count};
- foreach (qw(headers chain head_include)) {
- $tsparms{$_} = $self->{$_} if defined $self->{$_};
- }
- }
-
- # Abracadabra
- my $ts = HTML::TableExtract::TableState->new(%tsparms);
-
- # Inherit lineage
- unshift(@{$ts->{lineage}}, @{$pts->{lineage}}) if ref $pts;
-
- # Chain evolution from parent table state. Once again, however,
- # there is no point in passing the chain info along if we are under
- # an umbrella. These frames are just *potential* matches from the
- # chain. If no match occurs for a particular frame, then that frame
- # will simply be passed along to the next generation of table states
- # unchanged (assuming elastic behavior has not been disabled). Note:
- # frames based on top level constraints, as opposed to chain
- # specifications, are formed during TableState instantiation above.
- $pts->_spawn_frames($ts) if ref $self->{chain} && !$umbrella && ref $pts;
-
- # Inform the new table state that there will be no more constraints
- # forthcoming.
- $ts->_pre_latch;
-
- # Push the newly created and configured table state onto the
- # stack. This will now be the _current_table_state().
- push(@{$self->{_tablestack}}, $ts);
-}
-
-sub _exit_table {
- my $self = shift;
- my $ts = $self->_current_table_state;
-
- # Last ditch fix for HTML mangle
- $ts->_exit_cell if $ts->{in_cell};
- $ts->_exit_row if $ts->{in_row};
-
- if ($ts->_active) {
- # Retain our newly captured table, assuming we bothered with it.
- $self->_add_table_state($ts);
- print STDERR "Captured table ($ts->{depth},$ts->{count})\n"
- if $self->{debug} >= 2;
- }
-
- # Restore last table state
- pop(@{$self->{_tablestack}});
- --$self->{_in_a_table};
- my $lts = $self->_current_table_state;
- if (ref $lts) {
- $self->{_cdepth} = $lts->{depth};
- }
- else {
- # Back to the top level
- $self->{_cdepth} = -1;
- }
- print STDERR "LEAVE: cdepth: $self->{_cdepth}, ccount: $ts->{count}, it: $self->{_in_a_table}\n" if $self->{debug} >= 2;
-}
-
-sub _add_table_state {
- my($self, $ts) = @_;
- croak "Table state ref required\n" unless ref $ts;
- # Preliminary init sweep to appease -w
- #
- # These undefs would exist for empty <TD> since text() never got
- # called. Don't want to blindly do this in a start('td') because
- # headers might have vetoed. Also track max row length in case we
- # need to pad the other rows in gridmap mode.
- my $cmax = 0;
- foreach my $r (@{$ts->{content}}) {
- $cmax = $#$r if $#$r > $cmax;
- foreach (0 .. $#$r) {
- $r->[$_] = '' unless defined $r->[$_];
- }
- }
- # Pad right side of columns if gridmap or header slicing
- if ($self->{gridmap}) {
- foreach my $r (@{$ts->{content}}) {
- grep($r->[$_] = '', $#$r + 1 .. $cmax) if $#$r < $cmax;
- }
- }
-
- $self->{_tables}{$ts->{depth}}{$ts->{count}} = $ts;
- $self->{_table_mapback}{$ts->{content}} = $ts;
- push(@{$self->{_ts_sequential}}, $ts);
-}
-
-sub _current_table_state {
- my $self = shift;
- $self->{_tablestack}[$#{$self->{_tablestack}}];
-}
-
-##########
-
-{
-
- package HTML::TableExtract::TableState;
-
- use strict;
- use Carp;
-
- sub new {
- my $that = shift;
- my $class = ref($that) || $that;
- # Note: 'depth' and 'count' are where this table were found.
- # 'tdepth' and 'tcount' are target constraints on which to trigger.
- # 'headers' represent a target constraint, location independent.
- my $self = {
- umbrella => 0,
- in_row => 0,
- in_cell => 0,
- rc => -1,
- cc => -1,
- frames => [],
- content => [],
- htxt => '',
- order => [],
- counts => [{}],
- debug => 0,
- };
- bless $self, $class;
-
- my %parms = @_;
-
- # Depth and Count -- this is the absolute address of the table.
- croak "Absolute depth required\n" unless defined $parms{depth};
- croak "Count required\n" unless defined $parms{count};
-
- # Inherit count contexts
- if ($parms{counts}) {
- push(@{$self->{counts}}, @{$parms{counts}});
- delete $parms{counts};
- }
-
- foreach (keys %parms) {
- $self->{$_} = $parms{$_};
- }
-
- # Register lineage
- $self->{lineage} = [ "$self->{depth},$self->{count}" ];
-
- # Umbrella is a short circuit. This table and all descendants will
- # be harvested if the umbrella parameter was asserted. If it was
- # not, then the initial conditions specified for the new table
- # state are passed along as the first frame in the chain.
- if (!$self->{umbrella}) {
- # Frames are designed to be used when chains are specified. With
- # no chains specified, there is only a single frame, the global
- # frame, so frames become a bit redundant. We use the mechanisms
- # anyway for consistency in the extraction engine. Each frame
- # contains information that might be relative to a chain
- # frame. Currently this means depth, count, and headers.
- my %frame;
- # Frame depth and count represent target depth and count, in
- # absolute terms. If present, our initial frame takes these from
- # the target values in the table state. Unlike frames generated
- # by chains, the counts hash for the initial frame comes from
- # the global level (this is necessary since the top-level HTML
- # document has no table state from which to inherit!). Counts
- # relative to this frame will be assigned and updated based on
- # chain links, assuming there are any.
- $frame{depth} = $self->{tdepth} if exists $self->{tdepth};
- $frame{count} = $self->{tcount} if exists $self->{tcount};
- $frame{headers} = $self->{headers} if exists $self->{headers};
- $frame{counts} = $self->{counts}[$#{$self->{counts}}];
- $frame{global} = 1;
- $frame{terminus} = 1 if $self->{keep};
- $frame{heritage} = "($self->{depth},$self->{count})";
- $self->_add_frame(\%frame);
- }
- else {
- # Short circuit since we are an umbrella. Activate table state.
- $self->{active} = 1;
- }
- $self;
- }
-
- sub _text_hungry {
- # Text hungry only means that we are interested in gathering the
- # text, whether it be for header scanning or harvesting.
- my $self = shift;
- return 1 if $self->{umbrella};
- return 0 if $self->{prune};
- $self->_any_dctrigger;
- }
-
- sub _taste_text {
- # Gather the provided text, either for header scanning or
- # harvesting.
- my($self, $text) = @_;
-
- # Calculate and track skew, regardless of whether we actually want
- # this column or not.
- my $sc = $self->_skew;
-
- # Harvest if trigger conditions have been met in a terminus
- # frame. If headers have been found, and we are not beneath a
- # header column, then ignore this text.
- if ($self->_terminus_trigger && $self->_column_wanted ||
- $self->{umbrella}) {
- if (defined $text) { # -w appeasement
- print STDERR "Add text '$text'\n" if $self->{debug} > 3;
- $self->_add_text($text, $sc);
- }
- }
- # Regardless of whether or not we are harvesting, we still try to
- # scan for headers in waypoint frames.
- if (defined $text && $self->_any_headers && !$self->_any_htrigger) {
- $self->_htxt($text);
- }
- 1;
- }
-
- ### Init
-
- sub _pre_latch {
- # This should be called at some point soon after object creation
- # to inform the table state that there will be no more constraints
- # added. This way latches can be pre-set if possible for
- # efficiency.
- my $self = shift;
-
- $self->_trigger_frames;
- return 0 if $self->{prune};
-
- if ($self->{umbrella}) {
- ++$self->{dc_trigger};
- ++$self->{head_trigger};
- ++$self->{trigger};
- ++$self->{active};
- return;
- }
- # The following latches are detectable immediately for a
- # particular table state.
- $self->_terminus_dctrigger;
- $self->_any_dctrigger;
- $self->_terminus_headers;
- $self->_any_headers;
-
- }
-
- ### Latch methods...'terminus' vs 'any' is an important distinction,
- ### because conditions might only be satisifed for a waypoint
- ### frame. In this case, the next frame in the chain will be
- ### created, but the table itself will not be captured.
-
- sub _terminus_dctrigger {
- my $self = shift;
- return $self->{terminus_dctrigger} if defined $self->{terminus_dctrigger};
- $self->{terminus_dctrigger} = $self->_check_dctrigger($self->_terminus_frames);
- }
-
- sub _any_dctrigger {
- my $self = shift;
- return $self->{any_dctrigger} if defined $self->{any_dctrigger};
- $self->{any_dctrigger} = $self->_check_dctrigger(@{$self->{frames}});
- }
-
- sub _terminus_headers {
- my $self = shift;
- return $self->{terminus_headers} if defined $self->{terminus_headers};
- $self->{terminus_headers} = $self->_check_headers($self->_terminus_frames);
- }
-
- sub _any_headers {
- my $self = shift;
- return $self->{any_headers} if defined $self->{any_headers};
- $self->{any_headers} = $self->_check_headers(@{$self->{frames}});
- }
-
- sub _terminus_htrigger {
- # Unlike depth and count, this trigger should only latch on
- # positive values since each row is to be examined.
- my $self = shift;
- return $self->{terminus_htrigger} if $self->{terminus_htrigger};
- $self->{terminus_htrigger} = $self->_check_htrigger($self->_terminus_frames);
- }
-
- sub _any_htrigger {
- my $self = shift;
- return $self->{any_htrigger} if defined $self->{any_htrigger};
- $self->{any_htrigger} = $self->_check_htrigger(@{$self->{frames}});
- }
-
- sub _terminus_trigger {
- # This has to be the same frame reporting on dc/header
- # success. First found is the hero.
- my $self = shift;
- return $self->{terminus_trigger} if $self->{terminus_trigger};
- $self->{terminus_trigger} = $self->_check_trigger($self->_terminus_frames);
- }
-
- sub _any_trigger {
- # This has to be the same frame reporting on dc/header
- # success. First found is the hero.
- my $self = shift;
- return $self->{any_trigger} if $self->{any_trigger};
- $self->{any_trigger} = $self->_check_trigger(@{$self->{frames}});
- }
-
- ### Latch engines
-
- sub _check_dctrigger {
- my($self, @frames) = @_;
- return @frames if $self->{umbrella};
- my @dctriggered;
- foreach my $f (@frames) {
- my $dc_hit = 1;
- if ($f->{null}) {
- # Special case...
- $dc_hit = 0;
- }
- else {
- if (defined $f->{depth} && $f->{depth} != $self->{depth}) {
- $dc_hit = 0;
- }
- elsif (defined $f->{count}) {
- $dc_hit = 0;
- if (exists $f->{counts}{$self->{depth}} &&
- $f->{count} == $f->{counts}{$self->{depth}}) {
- # Note: frame counts, though relative to chain genesis
- # depth, are recorded in terms of absolute depths. A
- # particular counts hash is shared among frames descended
- # from the same chain instance.
- $dc_hit = 1;
- }
- }
- }
- push(@dctriggered, $f) if $dc_hit;
- }
- return @dctriggered ? \@dctriggered : undef;
- }
-
- sub _check_htrigger {
- my($self, @frames) = @_;
- my @htriggered;
- foreach my $f (@frames) {
- if ($f->{headers}) {
- push(@htriggered, $f) if $f->{head_found};
- }
- else {
- push(@htriggered, $f);
- }
- }
- @htriggered ? \@htriggered : undef;
- }
-
- sub _check_trigger {
- # This has to be the same frame reporting on dc/header
- # success. First found is the hero.
- my($self, @frames) = @_;
- return () unless @frames;
- my $tdct = $self->_check_dctrigger(@frames);
- my $tht = $self->_check_htrigger(@frames);
- my %tframes;
- my %tdc_frames;
- foreach (ref $tdct ? @$tdct : ()) {
- $tdc_frames{$_} = $_;
- $tframes{$_} = $_ unless $tframes{$_};
- }
- my %th_frames;
- foreach (ref $tht ? @$tht : ()) {
- $th_frames{$_} = $_;
- $tframes{$_} = $_ unless $tframes{$_};
- }
- my @frame_order = grep($tframes{$_}, @frames);
- my @triggered;
- foreach (@frame_order) {
- if ($tdc_frames{$_} && $th_frames{$_}) {
- push(@triggered, $tframes{$_});
- }
- }
- @triggered ? \@triggered : undef;
- }
-
- sub _check_headers {
- my($self, @frames) = @_;
- foreach my $f (@frames) {
- return 1 if $f->{headers};
- }
- 0;
- }
-
- ###
-
- sub _terminus_frames {
- # Return all frames that are at the end of a chain, or specified
- # as a terminus.
- my $self = shift;
- my @res;
- foreach (@{$self->{frames}}) {
- push(@res, $_) if $_->{terminus};
- }
- @res;
- }
-
- ###
-
- sub _trigger_frames {
- # Trigger each frame whose conditions have been met (i.e., rather
- # than merely detect conditions, set state in the affected frame
- # as well).
- my $self = shift;
- if (!@{$self->{frames}}) {
- ++$self->{prune};
- return 0;
- }
- my $t = 0;
- foreach my $f (@{$self->{frames}}) {
- if ($f->{triggered}) {
- ++$t;
- next;
- }
- if ($self->_check_trigger($f)) {
- ++$t;
- $f->{triggered} = 1;
- }
- }
- $t;
- }
-
- ### Maintain table context
-
- sub _enter_row {
- my $self = shift;
- $self->_exit_cell if $self->{in_cell};
- $self->_exit_row if $self->{in_row};
- ++$self->{rc};
- ++$self->{in_row};
-
- # Reset next_col for gridmapping
- $self->{next_col} = 0;
- while ($self->{taken}{"$self->{rc},$self->{next_col}"}) {
- ++$self->{next_col};
- }
-
- ++$self->{active} if $self->_terminus_trigger;
- if ($self->{active}) {
- # Add the new row, unless we're using headers and are still in
- # the header row
- push(@{$self->{content}}, [])
- unless $self->_terminus_headers && $self->_still_in_header_row;
- }
- $self->_evolve_frames if $self->_trigger_frames;
- }
-
- sub _exit_row {
- my $self = shift;
- if ($self->{in_row}) {
- $self->_exit_cell if $self->{in_cell};
- $self->{in_row} = 0;
- $self->{cc} = -1;
- $self->_reset_header_scanners;
- if ($self->_terminus_headers && $self->_still_in_header_row) {
- ++$self->{hslurp};
- # Store header row number so that we can adjust later (we keep
- # it around for now in case of skew situations, which are in
- # absolute row terms)
- $self->{hrow} = $self->{rc};
- }
- }
- else {
- print STDERR "Mangled HTML in table ($self->{depth},$self->{count}), extraneous </TR> ignored after row $self->{rc}\n"
- if $self->{debug};
- }
- }
-
- sub _enter_cell {
- my $self = shift;
- $self->_exit_cell if $self->{in_cell};
- if (!$self->{in_row}) {
- # Go ahead and try to recover from mangled HTML, because we
- # care.
- print STDERR "Mangled HTML in table ($self->{depth},$self->{count}), inferring <TR> as row $self->{rc}\n"
- if $self->{debug};
- $self->_enter_row;
- }
- ++$self->{cc};
- ++$self->{in_cell};
- }
-
- sub _exit_cell {
- my $self = shift;
- if ($self->{in_cell}) {
- # Trigger taste_text just in case this was an empty cell.
- $self->_taste_text(undef) if $self->_text_hungry;
- $self->{in_cell} = 0;
- $self->_hmatch;
- }
- else {
- print STDERR "Mangled HTML in table ($self->{depth},$self->{count}), extraneous </TD> ignored in row $self->{rc}\n"
- if $self->{debug};
- }
- }
-
- ###
-
- sub _add_frame {
- # Add new frames to this table state.
- my($self, @frames) = @_;
- return 1 if $self->{umbrella};
- foreach my $f (@frames) {
- ref $f or croak "Hash ref required\n";
-
- if (! exists $f->{depth} && ! exists $f->{count} && ! $f->{headers}) {
- # Special case. If there were no constraints, then umbrella
- # gets set. Otherwise, with chains, we want all nodes to
- # trigger but not become active due to the potential chain
- # constraint. This is just a heads up.
- ++$f->{null};
- }
-
- # Take the opportunity to prune frames that are out of their
- # depth. Keep in mind, depths are specified in absolute terms
- # for frames, as opposed to relative terms in chains.
- if (defined $f->{depth} && $f->{depth} < $self->{depth}) {
- print STDERR "Pruning frame for depth $f->{depth} at depth $self->{depth}\n" if $self->{debug} > 2;
- next;
- }
-
- # If we are an intermediary in a chain, we will never trigger a
- # harvest (well, unless 'keep' was specified, anyway). Avoid
- # autovivifying here, because $self->{chain} is used as a test
- # many times.
- if (ref $self->{chain}) {
- if (defined $f->{chaindex} && $f->{chaindex} == $#{$self->{chain}}) {
- ++$f->{terminus};
- }
- }
- elsif ($f->{global}) {
- # If there is no chain, the global frame is a terminus.
- ++$f->{terminus};
- }
-
- # Scoop all triggers if keepall has been asserted.
- if ($self->{keepall}) {
- ++$f->{terminus};
- }
-
- # Set up header pattern if we have headers.
- if ($f->{headers}) {
- my $hstring = '(' . join('|', map("($_)", @{$f->{headers}})) . ')';
- print STDERR "HPAT: /$hstring/\n" if $self->{debug} >= 2;
- $f->{hpat} = $hstring;
- $self->_reset_hits($f);
- }
-
- if ($self->{debug} > 3) {
- print STDERR "Adding frame ($f):\n {\n";
- foreach (sort keys %$f) {
- next unless defined $f->{$_}; # appease -w
- print STDERR " $_ => $f->{$_}\n";
- }
- print STDERR " }\n";
- }
-
- push(@{$self->{frames}}, $f);
- }
- # Activate header state if there were any header conditions in the
- # frames.
- $self->_scan_state('headers');
- # Arbitrary true return value.
- scalar @{$self->{frames}};
- }
-
- # Header stuff
-
- sub _htxt {
- # Accumulate or reset header text. This is shared across all
- # frames.
- my $self = shift;
- if (@_) {
- if (defined $_[0]) {
- $self->{htxt} .= $_[0] if $_[0] !~ /^\s*$/;
- }
- else {
- $self->{htxt} = '';
- }
- }
- $self->{htxt};
- }
-
- sub _hmatch {
- # Given the current htxt, test all frames for matches. This *will*
- # set state in the frames in the event of a match.
- my $self = shift;
- my @hits;
- return 0 unless $self->_any_headers;
- foreach my $f (@{$self->{frames}}) {
- next unless $f->{hpat};
- if ($self->{htxt} =~ /$f->{hpat}/im) {
- my $hit = $1;
- print STDERR "HIT on '$hit' in $self->{htxt} ($self->{rc},$self->{cc})\n" if $self->{debug} >= 4;
- ++$f->{scanning};
- # Get rid of the header segment that matched so we can tell
- # when we're through with all header patterns.
- foreach (keys %{$f->{hits_left}}) {
- if ($hit =~ /$_/im) {
- delete $f->{hits_left}{$_};
- $hit = $_;
- last;
- }
- }
- push(@hits, $hit);
- #
- my $cc = $self->_skew;
- $f->{hits}{$cc} = $hit;
- push(@{$f->{order}}, $cc);
- if (!%{$f->{hits_left}}) {
- # We have found all headers for this frame, but we won't
- # start slurping until this row has ended
- ++$f->{head_found};
- $f->{scanning} = undef;
- }
- }
- }
- # Propogate relevant frame states to overall table state.
- foreach (qw(head_found scanning)) {
- $self->_scan_state($_);
- }
- # Reset htxt buffer
- $self->_htxt(undef);
-
- wantarray ? @hits : scalar @hits;
- }
-
- # Header and header state booleans
-
- sub _scan_state {
- # This just sets analagous flags on a table state basis
- # rather than a frame basis, for testing efficiency to
- # reduce the number of method calls involved.
- my($self, $state) = @_;
- foreach (@{$self->{frames}}) {
- ++$self->{$state} if $_->{state};
- }
- $self->{$state};
- }
-
- sub _headers { shift->_check_state('headers' ) }
- sub _head_found { shift->_check_state('head_found') }
- sub _scanning { shift->_check_state('scanning') }
-
- # End header stuff
-
- sub _check_state {
- my($self, $state) = @_;
- defined $state or croak "State name required\n";
- my @frames_with_state;
- foreach my $f (@{$self->{frames}}) {
- push(@frames_with_state, $f) if $f->{$state};
- }
- return () unless @frames_with_state;
- wantarray ? @frames_with_state : $frames_with_state[0];
- }
-
- # Misc
-
- sub _evolve_frames {
- # Retire frames that were triggered; integrate the next link in
- # the chain if available. If it was the global frame, or the frame
- # generated from the last in the chain sequence, then activate the
- # frame and start a new chain.
- my $self = shift;
- return if $self->{evolved};
- $self->{newframes} = [] unless $self->{newframes};
- foreach my $f (@{$self->{frames}}) {
- # We're only interested in newly triggered frames.
- next if !$f->{triggered} || $f->{retired};
- my %new;
- if ($self->{chain}) {
- if ($f->{global}) {
- # We are the global frame, and we have a chain. Spawn a new
- # chain.
- $new{chaindex} = 0;
- # Chain counts are always relative to the table state in
- # which frame genisis occurred. Table states inherit the
- # count contexts of parent table states, so that they can be
- # updated (and therefore descendant frames get updated as
- # well). Count contexts are represented as hashes with
- # depths as keys. This frame-specific hash is shared amongst
- # all frames descended from chains started in this table
- # state.
- $new{heritage} = "($self->{depth},$self->{count})";
- }
- elsif (defined $f->{chaindex}) {
- # Generate a new frame based on the next link in the chain
- # (unless we are the global frame, in which case we initialize
- # a new chain since there is no chain link for the global
- # frame).
- $new{chaindex} = $f->{chaindex} + 1;
- # Relative counts always are inherited from chain genesis. We
- # pass by reference so siblings can all update the depth
- # counts for that chain.
- $new{heritage} = $f->{heritage};
- }
- }
-
- if ($f->{terminus}) {
- # This is a hit since we matched either in the global frame,
- # the last link of the chain, or in a link specified as a
- # keeper.
- ++$f->{active} unless $f->{null};
- # If there is a chain, start a new one from this match if it
- # was the global frame (if we ever decided to have chains
- # spawn chains, this would be the place to do it. Currently
- # only the global frame spawns chains).
-
- }
-
- # Since we triggered, one way or the other this frame is retired.
- ++$f->{retired};
-
- # Frames always inherit the count context of the table state in
- # which they were created.
- $new{counts} = $self->{counts}[0];
-
- if (defined $new{chaindex}) {
- my $link = $self->{chain}[$new{chaindex}];
- # Tables immediately below the current table state are
- # considered depth 0 as specified in chains...hence actual
- # depth plus one forms the basis for depth 0 in relative
- # terms.
- $new{depth} = ($self->{depth} + 1) + $link->{depth}
- if exists $link->{depth};
- $new{count} = $link->{count} if exists $link->{count};
- $new{headers} = $link->{headers} if exists $link->{headers};
- ++$new{terminus} if $link->{keep};
- if ($self->{debug} > 3) {
- print STDERR "New proto frame (in ts $self->{depth},$self->{count}) for chain rule $new{chaindex}\n";
- print STDERR " {\n";
- foreach (sort keys %new) {
- print STDERR " $_ => $new{$_}";
- if ($_ eq 'counts') {
- print STDERR " ",join(' ', map("$_,$new{counts}{$_}",
- sort { $a <=> $b } keys %{$new{counts}}));
- }
- print STDERR "\n";
- }
- print STDERR " }\n";
- }
- push(@{$self->{newframes}}, \%new);
- }
-
- }
- # See if we're done evolving our frames.
- foreach my $f (@{$self->{frames}}) {
- return 0 unless $f->{retired};
- }
- # If we are, then flag the whole table state as evolved.
- ++$self->{evolved};
- }
-
- sub _spawn_frames {
- # Build and pass new frames to a child table state. This involves
- # retiring old frames and passing along untriggered and new
- # frames.
- my($self, $child) = @_;
- ref $child or croak "Child table state required\n";
- if ($self->{umbrella}) {
- # Don't mess with frames, just pass the umbrella.
- ++$child->{umbrella};
- return;
- }
-
- my @frames;
- my @fields = qw(chaindex depth count headers counts heritage terminus);
-
- foreach my $f (@{$self->{frames}}) {
- # Not interested in retired frames (which just matched), root
- # frames (which get regenerated each time a frame is created),
- # or in unmatched frames when not in elastic mode.
- next if !$self->{elastic} || $f->{retired};
- my %new;
- foreach (grep(exists $f->{$_}, @fields)) {
- $new{$_} = $f->{$_};
- }
- push(@frames, \%new);
- }
-
- # Always interested in newly created frames. Make sure and pass
- # copies, though, so that siblings don't update each others frame
- # sets.
- foreach my $f (@{$self->{newframes}}) {
- my %new;
- foreach (grep(exists $f->{$_}, @fields)) {
- $new{$_} = $f->{$_};
- }
- push(@frames, \%new);
- }
-
- $child->_add_frame(@frames) if @frames;
- }
-
- # Report methods
-
- sub depth { shift->{depth} }
- sub count { shift->{count} }
- sub coords {
- my $self = shift;
- ($self->depth, $self->count);
- }
-
- sub lineage {
- my $self = shift;
- map([split(',', $_)], @{$self->{lineage}});
- }
-
- sub rows {
- my $self = shift;
- if ($self->{automap} && $self->_map_makes_a_difference) {
- my @tc;
- my @cm = $self->column_map;
- foreach (@{$self->{content}}) {
- my $r = [@{$_}[@cm]];
- # since there could have been non-existent <TD> we need
- # to double check initilization to appease -w
- foreach (0 .. $#$r) {
- $r->[$_] = '' unless defined $r->[$_];
- }
- push(@tc, $r);
- }
- return @tc;
- }
- # No remapping
- @{$self->{content}};
- }
-
- sub column_map {
- # Return the column numbers of this table in the same order as the
- # provided headers.
- my $self = shift;
- my $tframes = $self->_terminus_trigger;
- my $tframe = ref $tframes ? $tframes->[0] : undef;
- if ($tframe && $tframe->{headers}) {
- # First we order the original column counts by taking a hash
- # slice based on the original header order. The resulting
- # original column numbers are mapped to the actual content
- # indicies since we could have a sparse slice.
- my %order;
- foreach (keys %{$tframe->{hits}}) {
- $order{$tframe->{hits}{$_}} = $_;
- }
- return @order{@{$tframe->{headers}}};
- }
- else {
- return 0 .. $#{$self->{content}[0]};
- }
- }
-
- sub _map_makes_a_difference {
- my $self = shift;
- my $diff = 0;
- my @order = $self->column_map;
- my @sorder = sort { $a <=> $b } @order;
- ++$diff if $#order != $#sorder;
- ++$diff if $#sorder != $#{$self->{content}[0]};
- foreach (0 .. $#order) {
- if ($order[$_] != $sorder[$_]) {
- ++$diff;
- last;
- }
- }
- $diff;
- }
-
- sub _add_text {
- my($self, $txt, $skew_column) = @_;
- # We don't check for $txt being defined, sometimes we want to
- # merely insert a placeholder in the content.
- my $row = $self->{content}[$#{$self->{content}}];
- if (! defined $row->[$skew_column]) {
- # Init to appease -w
- $row->[$skew_column] = '';
- }
- return unless defined $txt;
- $row->[$skew_column] .= $txt;
- $txt;
- }
-
- sub _skew {
- # Skew registers the effects of rowspan/colspan issues when
- # gridmap is enabled.
-
- my($self, $rspan, $cspan) = @_;
- my($r,$c) = ($self->{rc},$self->{cc});
-
- if ($self->{debug} > 5) {
- print STDERR "($self->{rc},$self->{cc}) Inspecting skew for ($r,$c)";
- print STDERR defined $rspan ? " (set with $rspan,$cspan)\n" : "\n";
- }
-
- my $sc = $c;
- if (! defined $self->{skew_cache}{"$r,$c"}) {
- $sc = $self->{next_col} if defined $self->{next_col};
- $self->{skew_cache}{"$r,$c"} = $sc;
- my $next_col = $sc + 1;
- while ($self->{taken}{"$r,$next_col"}) {
- ++$next_col;
- }
- $self->{next_col} = $next_col;
- }
- else {
- $sc = $self->{skew_cache}{"$r,$c"};
- }
-
- # If we have span arguments, set skews
- if (defined $rspan) {
- # Default span is always 1, even if not explicitly stated.
- $rspan = 1 unless $rspan;
- $cspan = 1 unless $cspan;
- --$rspan;
- --$cspan;
- # 1,1 is a degenerate case, there's nothing to do.
- if ($rspan || $cspan) {
- foreach my $rs (0 .. $rspan) {
- my $cr = $r + $rs;
- # If we in the same row as the skewer, the "span" is one less
- # because the skewer cell occupies the same row.
- my $start_col = $rs ? $sc : $sc + 1;
- my $fin_col = $sc + $cspan;
- foreach ($start_col .. $fin_col) {
- $self->{taken}{"$cr,$_"} = "$r,$sc" unless $self->{taken}{"$cr,$_"};
- }
- if (!$rs) {
- my $next_col = $fin_col + 1;
- while ($self->{taken}{"$cr,$next_col"}) {
- ++$next_col;
- }
- $self->{next_col} = $next_col;
- }
- }
- }
- }
-
- # Grid column number
- $sc;
- }
-
- sub _reset_header_scanners {
- # When a row ends, this should be called in order to reset frames
- # who are in the midst of header scans.
- my $self = shift;
- my @scanners;
- foreach my $f (@{$self->{frames}}) {
- next unless $f->{headers} && $f->{scanning};
- if ($self->{debug}) {
- my $str = "Incomplete header match in row $self->{rc}, resetting scan";
- $str .= " link $f->{chaindex}" if defined $f->{chaindex};
- $str .= "\n";
- print STDERR $str;
- }
- push(@scanners, $f);
- }
- $self->_reset_hits(@scanners) if @scanners;
- }
-
- sub _header_quest {
- # Loosely translated: "Should I even bother scanning for header
- # matches?"
- my $self = shift;
- return 0 unless $self->_any_headers && !$self->_head_found;
- foreach my $f (@{$self->{frames}}) {
- return 1 if $f->{headers} && $f->{dc_trigger};
- }
- 0;
- }
-
- sub _still_in_header_row {
- my $self = shift;
- return 0 unless $self->_terminus_headers;
- !$self->{hslurp} && $self->_terminus_htrigger;
- }
-
- # Non waypoint answers
-
- sub _active {
- my $self = shift;
- return 1 if $self->{active};
- my @active;
- foreach my $f (@{$self->{frames}}) {
- push(@active, $f) if $f->{active};
- }
- return () unless @active;
- ++$self->{active} if @active;
- wantarray ? @active : $active[0];
- }
-
- sub _column_wanted {
- my $self = shift;
- my $tframes = $self->_terminus_trigger;
- my $tframe = ref $tframes ? $tframes->[0] : undef;
- return 0 unless $tframe;
- my $wanted = 1;
- if ($self->_terminus_headers && $self->{hslurp}) {
- # If we are using headers, veto the grab unless we are in an
- # applicable column beneath one of the headers.
- $wanted = 0
- unless exists $tframe->{hits}{$self->_skew};
- }
- print STDERR "Want ($self->{rc},$self->{cc}): $wanted\n"
- if $self->{debug} > 7;
- $wanted;
- }
-
- sub _reset_hits {
- # Reset hits in provided frames. WARNING!!! If you do not provide
- # frames, all frames will be reset!
- my($self, @frames) = @_;
- foreach my $frame (@frames ? @frames : @{$self->{frames}}) {
- next unless $frame->{headers};
- $frame->{hits} = {};
- $frame->{order} = [];
- $frame->{scanning} = undef;
- foreach (@{$frame->{headers}}) {
- ++$frame->{hits_left}{$_};
- }
- }
- 1;
- }
-
-}
-
-1;
-
-__END__
-
-=head1 NAME
-
-HTML::TableExtract - Perl extension for extracting the text contained in tables within an HTML document.
-
-=head1 SYNOPSIS
-
- # Matched tables are returned as "table state" objects; tables can be
- # matched using column headers, depth, count within a depth, or some
- # combination of the three.
-
- # Using column header information. Assume an HTML document with
- # tables that have "Date", "Price", and "Cost" somewhere in a
- # row. The columns beneath those headings are what you want to
- # extract. They will be returned in the same order as you specified
- # the headers since 'automap' is enabled by default.
-
- use HTML::TableExtract;
- $te = new HTML::TableExtract( headers => [qw(Date Price Cost)] );
- $te->parse($html_string);
-
- # Examine all matching tables
- foreach $ts ($te->table_states) {
- print "Table (", join(',', $ts->coords), "):\n";
- foreach $row ($ts->rows) {
- print join(',', @$row), "\n";
- }
- }
-
- # Old style, using top level methods rather than table state objects.
- foreach $table ($te->tables) {
- print "Table (", join(',', $te->table_coords($table)), "):\n";
- foreach $row ($te->rows($table)) {
- print join(',', @$row), "\n";
- }
- }
-
- # Shorthand...top level rows() method assumes the first table found
- # in the document if no arguments are supplied.
- foreach $row ($te->rows) {
- print join(',', @$row), "\n";
- }
-
- # Using depth and count information. Every table in the document has
- # a unique depth and count tuple, so when both are specified it is a
- # unique table. Depth and count both begin with 0, so in this case we
- # are looking for a table (depth 2) within a table (depth 1) within a
- # table (depth 0, which is the top level HTML document). In addition,
- # it must be the third (count 2) such instance of a table at that
- # depth.
-
- $te = new HTML::TableExtract( depth => 2, count => 2 );
- $te->parse($html_string);
- foreach $ts ($te->table_states) {
- print "Table found at ", join(',', $ts->coords), ":\n";
- foreach $row ($ts->rows) {
- print " ", join(',', @$row), "\n";
- }
- }
-
-=head1 DESCRIPTION
-
-HTML::TableExtract is a subclass of HTML::Parser that serves to
-extract the textual information from tables of interest contained
-within an HTML document. The text from each extracted table is stored
-in tabe state objects which hold the information as an array of arrays
-that represent the rows and cells of that table.
-
-There are three constraints available to specify which tables you
-would like to extract from a document: I<Headers>, I<Depth>, and
-I<Count>.
-
-I<Headers>, the most flexible and adaptive of the techniques, involves
-specifying text in an array that you expect to appear above the data
-in the tables of interest. Once all headers have been located in a row
-of that table, all further cells beneath the columns that matched your
-headers are extracted. All other columns are ignored: think of it as
-vertical slices through a table. In addition, TableExtract
-automatically rearranges each row in the same order as the headers you
-provided. If you would like to disable this, set I<automap> to 0
-during object creation, and instead rely on the column_map() method to
-find out the order in which the headers were found. Furthermore,
-TableExtract will automatically compensate for cell span issues so
-that columns are really the same columns as you would visually see in
-a browser. This behavior can be disabled by setting the I<gridmap>
-parameter to 0. HTML is stripped from the entire textual content of a
-cell before header matches are attempted -- unless the I<keep_html>
-parameter was enabled.
-
-I<Depth> and I<Count> are more specific ways to specify tables in
-relation to one another. I<Depth> represents how deeply a table
-resides in other tables. The depth of a top-level table in the
-document is 0. A table within a top-level table has a depth of 1, and
-so on. Each depth can be thought of as a layer; tables sharing the
-same depth are on the same layer. Within each of these layers,
-I<Count> represents the order in which a table was seen at that depth,
-starting with 0. Providing both a I<depth> and a I<count> will
-uniquely specify a table within a document.
-
-Each of the I<Headers>, I<Depth>, and I<Count> specifications are
-cumulative in their effect on the overall extraction. For instance, if
-you specify only a I<Depth>, then you get all tables at that depth
-(note that these could very well reside in separate higher-level
-tables throughout the document since depth extends across tables). If
-you specify only a I<Count>, then the tables at that I<Count> from all
-depths are returned (i.e., the I<n>th occurrence of a table at each
-depth). If you only specify I<Headers>, then you get all tables in the
-document containing those column headers. If you have specified
-multiple constraints of I<Headers>, I<Depth>, and I<Count>, then each
-constraint has veto power over whether a particular table is
-extracted.
-
-If no I<Headers>, I<Depth>, or I<Count> are specified, then all
-tables match.
-
-Text that is gathered from the tables is decoded with HTML::Entities
-by default; this can be disabled by setting the I<decode> parameter to
-0.
-
-=head2 Chains
-
-Make sure you fully understand the notions of I<depth> and I<count>
-before proceeding, because it is about to become a bit more involved.
-
-Table matches using I<Headers>, I<Depth>, or I<Count> can be chained
-together in order to further specify tables relative to one
-another. Links in chains are successively applied to tables within
-tables. Top level constraints (i.e., I<header>, I<depth>, and I<count>
-parameters for the TableExtract object) behave as the first link in
-the chain. Additional links are specified using the I<chain>
-parameter. Each link in the chain has its own set of constraints. For
-example:
-
- $te = new HTML::TableExtract
- (
- headers => [qw(Summary Region)],
- chain => [
- { depth => 0, count => 2 },
- { headers => [qw(Part Qty Cost)] }
- ],
- );
-
-The matching process in this case will start with B<all> tables in the
-document that have "Summary" and "Region" in their headers. For now,
-assume that there was only one table that matched these headers. Each
-table contained within that table will be compared to the first link
-in the chain. Depth 0 means that a matching table must be immediately
-contained within the current table; count 2 means that the matching
-table must also be the third at that depth (counts and depths start at
-0). In other words, the next link of the chain will match on the
-third table immediately contained within our first matched table. Once
-this link matches, then B<all> further tables beneath that table that
-have "Part", "Qty", and "Cost" in their headers will match. By
-default, it is only tables at the end of the chains that are returned
-to the application, so these tables are returned.
-
-Each time a link in a chain matches a table, an additional context for
-I<depth> and I<count> is established. It is perhaps easiest to
-visualize a I<context> as a brand-new HTML document, with new depths
-and counts to compare to the remaining links in the chain. The top
-level HTML document is the first context. Each table in the document
-establishes a new context. I<Depth> in a chain link is relative to the
-context that the matching table creates (i.e., a link depth of 0 would
-be a table immediately contained within the table that matched the
-prior link in the chain). Likewise, that same context keeps track of
-I<counts> within the new depth scheme for comparison to the remaining
-links in the chain. Headers still apply if they are present in a link,
-but they are always independent of context.
-
-As it turns out, specifying a depth and count provides a unique
-address for a table within a context. For non-unique constraints, such
-as just a depth, or headers, there can be multiple matches for a given
-link. In these cases the chain "forks" and attempts to make further
-matches within each of these tables.
-
-By default, chains are I<elastic>. This means that when a particular
-link does not match on a table, it is passed down to subtables
-unchanged. For example:
-
- $te = new HTML::TableExtract
- (
- headers => [qw(Summary Region)],
- chain => [
- { headers => [qw(Part Qty Cost)] }
- ],
- );
-
-If there are intervening tables between the two header queries, they
-will be ignored; this query will extract all tables with "Part",
-"Qty", and "Cost" in the headers that are contained in any table with
-"Summary" and "Region" in its headers, regardless of how embedded the
-inner tables are. If you want a chain to be inelastic, you can set the
-I<elastic> parameter to 0 for the whole TableExtract object. Using the
-same example:
-
- $te = new HTML::TableExtract
- (
- headers => [qw(Summary Region)],
- chain => [
- { headers => [qw(Part Qty Cost)] }
- ],
- elastic => 0,
- );
-
-In this case, the inner table (Part, Qty, Cost) must be B<immediately>
-contained within the outer table (Summary, Region) in order for the
-match to take place. This is equivalent to specifying a depth of 0 for
-each link in the chain; if you only want particular links to be
-inelastic, then simply set their depths to 0.
-
-By default, only tables that match at the end of the chains are
-retained. The intermediate matches along the chain are referred to as
-I<waypoints>, and are not extracted by default. A waypoint may be
-retained, however, by specifiying the I<keep> parameter in that link
-of the chain. This parameter may be specified at the top level as well
-if you want to keep tables that match the first set of constraints in
-the object. If you want to keep all tables that match along the chain,
-the specify the I<keepall> parameter at the top level.
-
-Are chains overkill? Probably. In reality, nested HTML tables tend not
-to be very deep, so there will usually not be much need for lots of
-links in a chain. Theoretically, however, chains offer precise
-targeting of tables relative to one another, no matter how deeply
-nested they are.
-
-=head2 Pop Quiz
-
-What happens with the following table extraction?
-
- $te = new HTML::TableExtract(
- chain => [ { depth => 0 } ],
- );
-
-Answer: All tables that are contained in another table are extracted
-from the document. In this case, there were no top-level constraints
-specified, which if you recall means that B<all> tables match the
-first set of constraints (or non-constraints, in this case!). A depth
-of 0 in the next link of the chain means that the matching table must
-be immediately contained within the table from a prior match.
-
-The following is equivalent:
-
- $te = new HTML::TableExtract(
- depth => 1,
- subtables => 1,
- )
-
-The I<subtables> parameter tells TableExtract to scoop up all tables
-contained within the matching tables. In conjunction with a depth of
-1, this has the affect of discarding all top-level tables in the
-document, which is exactly what occurred in the prior example.
-
-=head2 Advice
-
-The main point of this module was to provide a flexible method of
-extracting tabular information from HTML documents without relying to
-heavily on the document layout. For that reason, I suggest using
-I<Headers> whenever possible -- that way, you are anchoring your
-extraction on what the document is trying to communicate rather than
-some feature of the HTML comprising the document (other than the fact
-that the data is contained in a table).
-
-HTML::TableExtract is a subclass of HTML::Parser, and as such inherits
-all of its basic methods. In particular, C<start()>, C<end()>, and
-C<text()> are utilized. Feel free to override them, but if you do not
-eventually invoke them in the SUPER class with some content, results
-are not guaranteed.
-
-=head1 METHODS
-
-The following are the top-level methods of the HTML::TableExtract
-object. Tables that have matched a query are actually returned as
-separate objects of type HTML::TableExtract::TableState. These table
-state objects have their own methods, documented further below. There
-are some top-level methods that are present for convenience and
-backwards compatibility that are nothing more than front-ends for
-equivalent table state methods.
-
-=over
-
-=head2 Constructor
-
-=item new()
-
-Return a new HTML::TableExtract object. Valid attributes are:
-
-=over
-
-=item headers
-
-Passed as an array reference, headers specify strings of interest at
-the top of columns within targeted tables. These header strings will
-eventually be passed through a non-anchored, case-insensitive regular
-expression, so regexp special characters are allowed. The table row
-containing the headers is B<not> returned. Columns that are not
-beneath one of the provided headers will be ignored. Columns will, by
-default, be rearranged into the same order as the headers you provide
-(see the I<automap> parameter for more information). Additionally, by
-default columns are considered what you would see visually beneath
-that header when the table is rendered in a browser. See the
-I<gridmap> parameter for more information. HTML within a header is
-stripped before the match is attempted, unless the B<keep_html>
-parameter was specified.
-
-=item depth
-
-Specify how embedded in other tables your tables of interest should
-be. Top-level tables in the HTML document have a depth of 0, tables
-within top-level tables have a depth of 1, and so on.
-
-=item count
-
-Specify which table within each depth you are interested in, beginning
-with 0.
-
-=item chain
-
-List of additional constraints to be matched sequentially from the top
-level constraints. This is a reference to an array of hash
-references. Each hash is a link in the chain, and can be specified in
-terms of I<depth>, I<count>, and I<headers>. Further modifiers include
-I<keep>, which means to retain the table if it would normally be
-dropped as a waypoint.
-
-=item automap
-
-Automatically applies the ordering reported by column_map() to the
-rows returned by rows(). This only makes a difference if you have
-specified I<Headers> and they turn out to be in a different order in
-the table than what you specified. Automap will rearrange the columns
-in the same order as the headers appear. To get the original ordering,
-you will need to take another slice of each row using
-column_map(). I<automap> is enabled by default.
-
-=item gridmap
-
-Controls whether the table contents are returned as a grid or a
-tree. ROWSPAN and COLSPAN issues are compensated for, and columns
-really are columns. Empty phantom cells are created where they would
-have been obscured by ROWSPAN or COLSPAN settings. This really becomes
-an issue when extracting columns beneath headers. Enabled by default.
-
-=item keepall
-
-Keep all tables that matched along a chain, including tables matched
-by top level contraints. By default, waypoints are dropped and only
-the matches at the end of the chain are retained. To retain a
-particular waypoint along a chain, use the I<keep> parameter in that
-link.
-
-=item elastic
-
-When set to 0, all links in chains will be treated as though they had
-a depth of 0 specified, which means there can be no intervening
-unmatched tables between matches on links.
-
-=item subtables
-
-Extract all tables within matched tables.
-
-=item decode
-
-Automatically decode retrieved text with
-HTML::Entities::decode_entities(). Enabled by default.
-
-=item br_translate
-
-Translate <br> tags into newlines. Sometimes the remaining text can be
-hard to parse if the <br> tag is simply dropped. Enabled by default.
-Has no effect if I<keep_html> is enabled.
-
-=item keep_html
-
-Return the raw HTML contained in the cell, rather than just the
-visible text. Embedded tables are B<not> retained in the HTML
-extracted from a cell. Patterns for header matches must take into
-account HTML in the string if this option is enabled.
-
-=item debug
-
-Prints some debugging information to STDOUT, more for higher values.
-
-=back
-
-=head2 Regular Methods
-
-=item depths()
-
-Returns all depths that contained matched tables in the document.
-
-=item counts($depth)
-
-For a particular depth, returns all counts that contained matched
-tables.
-
-=item table_state($depth, $count)
-
-For a particular depth and count, return the table state object for
-the table found, if any.
-
-=item table_states()
-
-Return table state objects for all tables that matched.
-
-=item first_table_state_found()
-
-Return the table state object for the first table matched in the
-document.
-
-=head2 TABLE STATE METHODS
-
-The following methods are invoked from an
-HTML::TableExtract::TableState object, such as those returned from the
-C<table_states()> method.
-
-=item rows()
-
-Return all rows within a matched table. Each row returned is a
-reference to an array containing the text of each cell.
-
-=item depth()
-
-Return the (absolute) depth at which this table was found.
-
-=item count()
-
-Return the count for this table within the depth it was found.
-
-=item coords()
-
-Return depth and count in a list.
-
-=item column_map()
-
-Return the order (via indices) in which the provided headers were
-found. These indices can be used as slices on rows to either order the
-rows in the same order as headers or restore the rows to their natural
-order, depending on whether the rows have been pre-adjusted using the
-I<automap> parameter.
-
-=item lineage()
-
-Returns the path of matched tables that led to matching this
-table. Lineage only makes sense if chains were used. Tables that were
-not matched by a link in the chain are not included in lineage. The
-lineage path is a list of array refs containing depth and count values
-for each table involved.
-
-=head2 Procedural Methods
-
-The following top level methods are alternatives to invoking methods
-in a table state object. If you do not want to deal with table state
-objects, then these methods are for you. The "tables" they deal in are
-actually just arrays of arrays, which happen to be the current
-internal data structure of the table state objects. They are here for
-backwards compatibility.
-
-=item table($depth, $count)
-
-Same as C<table_state()>, but returns the internal data structure
-rather than the table state object.
-
-=item tables()
-
-Same as C<table_states()>, but returns the data structures rather than
-the table state objects.
-
-=item first_table_found()
-
-Same as C<first_table_state_found()>, except returns the data
-structure for first table that matched.
-
-=item table_coords($table)
-
-Returns the depth and count for a particular table data structure. See
-the C<coords()> method provided by table state objects.
-
-=item rows()
-
-=item rows($table)
-
-Return a lsit of the rows for a particular table data structure (first
-table found by default). See the C<rows()> method provided by table
-state objects.
-
-=item column_map()
-
-=item column_map($table)
-
-Return the column map for a particular table data structure (first
-found by default). See the C<column_map()> method provided by table
-state objects.
-
-=back
-
-=head1 REQUIRES
-
-HTML::Parser(3), HTML::Entities(3)
-
-=head1 AUTHOR
-
-Matthew P. Sisk, E<lt>F<sisk(a)mojotoad.com>E<gt>
-
-=head1 COPYRIGHT
-
-Copyright (c) 2000-2002 Matthew P. Sisk.
-All rights reserved. All wrongs revenged. This program is free
-software; you can redistribute it and/or modify it under the
-same terms as Perl itself.
-
-=head1 SEE ALSO
-
-HTML::Parser(3), perl(1).
-
-=cut
-
-In honor of fragmented markup languages and sugar mining:
-
-The Good and The Bad
-Ted Hawkins (1936-1994)
-
-Living is good
- when you have someone to share it with
-Laughter is bad
- when there is no one there to share it with
-Talking is sad
- if you've got no one to talk to
-Dying is good
- when the one you love grows tired of you
-
-Sugar is no good
- once it's cast among the white sand
-What the point
- in pulling the gray hairs from among the black strands
-When you're old
- you shouldn't walk in the fast lane
-Oh ain't it useless
- to keep trying to draw true love from that man
-
-He'll hurt you,
- Yes just for the sake of hurting you
-and he'll hate you
- if you try to love him just the same
-He'll use you
- and everything you have to offer him
-On your way girl
- Get out and find you someone new
diff --git a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/test.pl b/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/test.pl
deleted file mode 100644
index db0b89c..0000000
--- a/monitoring/PerlModules/CPAN/HTML-TableExtract-1.08/test.pl
+++ /dev/null
@@ -1,607 +0,0 @@
-# Before `make install' is performed this script should be runnable with
-# `make test'. After `make install' it should work as `perl test.pl'
-
-######################### We start with some black magic to print on failure.
-
-# Change 1..1 below to 1..last_test_to_print .
-# (It may become useful if the test is moved to ./t subdirectory.)
-
-BEGIN { $| = 1; print "1..22\n"; }
-END {print "not ok 1\n" unless $loaded;}
-use HTML::TableExtract;
-$loaded = 1;
-print "ok 1 (load)\n";
-
-######################### End of black magic.
-
-# Init test count
-$tcount = 2;
-
-# For dataset 'chain'
-%CHAIN_DATA = (
- bulk => [ [3,0],[3,1],[2,0],[3,2],[3,3],[2,1],[1,0],
- [3,4],[3,5],[2,2],[3,6],[3,7],[2,3],[1,1],[0,0] ],
- d2cd1a => [ [3,0],[3,1],[3,2],[3,3],[3,4],[3,5],[3,6],[3,7] ],
- d2cd1b => [ [3,0],[3,1],[3,2],[3,3],[1,0],[3,4],[3,5],[3,6],[3,7],[1,1] ],
- c2cc1a => [ [3,3],[3,5],[2,3] ],
- c2cc1b => [ [3,1],[3,3],[2,1],[3,5],[2,3],[1,1] ],
- h2ch1a => [ [3,1],[2,1],[1,1] ],
- h2ch1b => [ [3,1],[2,1],[1,1],[0,0] ],
- d2cd2 => [ [3,0],[3,1],[3,2],[3,3],[1,0],[3,4],[3,5],[3,6],[3,7],[1,1] ],
- c2cc2 => [ [3,0],[2,0],[3,3],[1,0],[3,5],[2,3],[0,0] ],
- h2ch2 => [ [3,2],[3,3],[2,2],[2,3],[0,0] ],
- c2cc3 => [ [3,0],[2,0],[3,3],[1,0],[2,3],[0,0] ],
- h2ch3 => [ [2,2],[2,3],[0,0] ],
- h2ch4 => [ [3,1],[3,2],[3,3],[2,1],[2,2],[2,3],[1,1],[0,0] ],
- d2h2c => [ [3,3] ],
- );
-
-# For dataset 'chain'
-@LINEAGE_DATA = (
- [ "0,0", "1,0", "2,0", "3,0" ],
- [ "0,0", "1,0", "2,0", "3,1" ],
- [ "0,0", "1,0", "2,0" ],
- [ "0,0", "1,0", "2,1", "3,2" ],
- [ "0,0", "1,0", "2,1", "3,3" ],
- [ "0,0", "1,0", "2,1" ],
- [ "0,0", "1,0" ],
- [ "0,0", "1,1", "2,2", "3,4" ],
- [ "0,0", "1,1", "2,2", "3,5" ],
- [ "0,0", "1,1", "2,2" ],
- [ "0,0", "1,1", "2,3", "3,6" ],
- [ "0,0", "1,1", "2,3", "3,7" ],
- [ "0,0", "1,1", "2,3" ],
- [ "0,0", "1,1" ],
- [ "0,0" ]
- );
-
-# For data set 'basic'
-@headers = (
- 'Header Zero',
- 'Header One',
- 'Header Two',
- 'Header Three',
- 'Header Four',
- 'Header Five',
- 'Header Six',
- 'Header Seven',
- 'Header Eight',
- 'Header Nine',
- );
-
-# For data set 'skew'
-@SKEW_DATA = (
- [ 'THIS IS A WHOLE ROW-CELL OF JUNK','','','' ],
- [ 'JUNK','Tasty tidbit (1,1)','JUNK','Tasty tidbit (1,3)' ],
- [ '',"BIG\nJUNK",'','Tasty tidbit (2,3)' ],
- [ 'Tasty tidbit (3,0)','','','Tasty tidbit (3,3)' ],
- [ 'Tasty tidbit (4,0)','','','Tasty tidbit (4,3)' ],
- [ 'JUNK BUTTON','','Tasty tidbit (5,2)','Tasty tidbit (5,3)' ],
- );
-
-# Constructs array called @docs
-eval join('', <DATA>) or die $@;
-
-$html = $docs{chain};
-
-# By bulk, lineage integrity
-$pass = 1;
-$te = new HTML::TableExtract();
-$te->parse($html);
-$label = 'bulk';
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-foreach $tsc (0 .. $#tablestates) {
- $ts = $tablestates[$tsc];
- foreach (0 .. $#{$ts->{lineage}}) {
- $pass = 0 unless $ts->{lineage}[$_] eq $LINEAGE_DATA[$tsc][$_];
- }
-}
-print $pass ? "ok " : "not ok ";
-printf "%2d (by bulk with lineage check)\n", $tcount;
-++$tcount;
-
-$html = $docs{basic};
-
-# By count
-$pass = 1;
-$te = new HTML::TableExtract(
- count => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == 2;
-foreach (@tablestates) {
- $pass = 0 unless good_data($_);
-}
-print $pass ? "ok " : "not ok ";
-printf "%2d (by count)\n", $tcount;
-++$tcount;
-
-# By depth
-$pass = 1;
-$te = new HTML::TableExtract(
- depth => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == 2;
-foreach (@tablestates) {
- $pass = 0 unless good_data($_);
-}
-print $pass ? "ok " : "not ok ";
-printf "%2d (by depth)\n", $tcount;
-++$tcount;
-
-# By header
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [qw(Eight Six Four Two Zero)],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == 5;
-foreach (@tablestates) {
- $pass = 0 unless good_data($_);
-}
-
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header)\n", $tcount;
-++$tcount;
-
-# By depth and count
-$pass = 1;
-$te = new HTML::TableExtract(
- depth => 0,
- count => 2,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == 1;
-foreach (@tablestates) {
- $pass = 0 unless good_data($_);
-}
-
-print $pass ? "ok " : "not ok ";
-printf "%2d (by depth and count)\n", $tcount;
-++$tcount;
-
-# By subtable scoop
-$pass = 1;
-$te = new HTML::TableExtract(
- depth => 0,
- count => 2,
- subtables => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == 3;
-foreach (@tablestates) {
- $pass = 0 unless good_data($_);
-}
-
-print $pass ? "ok " : "not ok ";
-printf "%2d (by depth and count, subtable scoop)\n", $tcount;
-++$tcount;
-
-# Advanced header extraction. Test skew and column mapping.
-$html = $docs{skew};
-
-# Column skew
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [ qw(head0 head1 head2 head3) ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == 1;
-$pass = 0 unless good_skew_data($tablestates[0]);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header with span correction)\n", $tcount;
-++$tcount;
-
-# Column skew and column mapping
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [ qw(head3 head2 head1 head0) ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$pass = 0 unless @tablestates == 1;
-$pass = 0 unless good_skew_data($tablestates[0], 'reverse');
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header with column mapping)\n", $tcount;
-++$tcount;
-
-# Chaining tests
-$html = $docs{chain};
-
-# Depth to depth chaining
-$pass = 1;
-$te = new HTML::TableExtract(
- depth => 1,
- chain => [
- { depth => 1 }
- ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'd2cd1a';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by depth to chain depth)\n", $tcount;
-++$tcount;
-
-# Depth to depth chaining, keep global
-$pass = 1;
-$te = new HTML::TableExtract(
- depth => 1,
- keep => 1,
- chain => [
- { depth => 1 }
- ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'd2cd1b';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by depth to chain depth, retain global)\n", $tcount;
-++$tcount;
-
-# Count to count chaining
-$pass = 1;
-$te = new HTML::TableExtract(
- count => 1,
- chain => [
- { count => 1 }
- ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'c2cc1a';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by count to chain count)\n", $tcount;
-++$tcount;
-
-# Count to count chaining, keep global
-$pass = 1;
-$te = new HTML::TableExtract(
- count => 1,
- keep => 1,
- chain => [
- { count => 1 }
- ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'c2cc1b';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by count to chain count, retain global)\n", $tcount;
-++$tcount;
-
-# Header to header chaining
-# Note: this should demonstrate the "bug" of not matching subtables until
-# a complete header match is obtained...
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [ '0,0: \(0,0\)', '0,0: \(0,1\)' ],
- chain => [
- { headers => [ '1: \(0,0\)', '1: \(0,1\)' ] }
- ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'h2ch1a';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header to chain header)\n", $tcount;
-++$tcount;
-
-# Header to header chaining, keep global
-# Note: this should demonstrate the "bug" of not matching subtables until
-# a complete header match is obtained...
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [ '0,0: \(0,0\)', '0,0: \(0,1\)' ],
- chain => [
- { headers => [ '1: \(0,0\)', '1: \(0,1\)' ] }
- ],
- keep => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'h2ch1b';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header to chain header, retain global)\n", $tcount;
-++$tcount;
-
-# Depth to waypoint depth to terminus depth chaining
-$pass = 1;
-$te = new HTML::TableExtract(
- depth => 1,
- chain => [
- { depth => 0 },
- { depth => 0 }
- ],
- keep => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'd2cd2';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by depth to chain depth with depth waypoint, retain global)\n", $tcount;
-++$tcount;
-
-# Count to count waypoint to count terminus chaining
-$pass = 1;
-$te = new HTML::TableExtract(
- count => 0,
- chain => [
- { count => 1 },
- { count => 1 }
- ],
- keep => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'c2cc2';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by count to chain count with count waypoint, retain global)\n", $tcount;
-++$tcount;
-
-# Header to header waypoint to header terminus chaining
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [ '0,0: \(0,0\)', '0,0: \(0,1\)' ],
- chain => [
- { headers => [ '1: \(0,0\)', '1: \(0,1\)' ] },
- { headers => [ '\(0,0\)', '\(0,1\)' ] }
- ],
- keep => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'h2ch2';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header to chain header with header waypoint, retain global)\n", $tcount;
-++$tcount;
-
-# Count to count waypoint to count terminus chaining, non-elastic
-$pass = 1;
-$te = new HTML::TableExtract(
- count => 0,
- chain => [
- { count => 1 },
- { count => 1 }
- ],
- elastic => 0,
- keep => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'c2cc3';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by count to chain count with count waypoint, non-elastic, retain global)\n", $tcount;
-++$tcount;
-
-# Header to header waypoint to header terminus chaining, non-elastic
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [ '0,0: \(0,0\)', '0,0: \(0,1\)' ],
- chain => [
- { headers => [ '1: \(0,0\)', '1: \(0,1\)' ] },
- { headers => [ '\(0,0\)', '\(0,1\)' ] }
- ],
- elastic => 0,
- keep => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'h2ch3';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header to chain header with header waypoint, non-elastic, retain global)\n", $tcount;
-++$tcount;
-
-# Header to header waypoint to header terminus chaining, keep all waypoints
-$pass = 1;
-$te = new HTML::TableExtract(
- headers => [ '0,0: \(0,0\)', '0,0: \(0,1\)' ],
- chain => [
- { headers => [ '1: \(0,0\)', '1: \(0,1\)' ] },
- { headers => [ '\(0,0\)', '\(0,1\)' ] }
- ],
- keepall => 1,
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'h2ch4';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by header to chain header with header waypoint, retain all waypoints)\n", $tcount;
-++$tcount;
-
-# Depth to header waypoint to count terminus
-$pass = 1;
-$te = new HTML::TableExtract(
- depth => 1,
- chain => [
- { headers => [ '1: \(0,0\)', '1: \(0,1\)' ] },
- { count => 1 },
- ],
- );
-$te->parse($html);
-@tablestates = $te->table_states;
-$label = 'd2h2c';
-$pass = 0 unless @tablestates == @{$CHAIN_DATA{$label}};
-$pass = 0 unless good_chain_data($te, $label);
-print $pass ? "ok " : "not ok ";
-printf "%2d (by depth to count, header waypoint)\n", $tcount;
-++$tcount;
-
-exit;
-
-sub good_data {
- my $ts = shift;
- ref $ts or die "Oops: Table state ref required\n";
- my $t = $ts->{content};
- my $skew;
- if ($t->[0][0] =~ /^Header/) {
- $skew = 1;
- }
- else {
- $skew = 0;
- }
- my $row = 0 + $skew;
-
- # Must have rows
- return 0 unless @{$t};
-
- # See if we got the numbers.
- foreach my $r ($row .. $#$t) {
- # Must have columns
- return 0 unless @{$t->[$r]};
- foreach my $c (0 .. $#{$t->[$r]}) {
- my $rc = $skew ? $r : $r + 1;
- next if $ts->{headers} && !$ts->{hits}{$c};
- $t->[$r][$c] =~ /^ \($rc,$c\)$/ or return 0;
- }
- }
-
- # Header order check
- if ($skew) {
- foreach my $c (0 .. $#{$t->[0]}) {
- my $hs = $headers[$c];
- $t->[0][$c] =~ /^$hs$/ or return 0;
- }
- }
- 1;
-}
-
-sub good_skew_data {
- my($ts, $reverse) = @_;
- ref $ts or die "Oops: Table state ref required\n";
- my $t = $ts->{content};
- foreach my $r (0 .. $#$t) {
- my @cols = 0 .. $#{$t->[$r]};
- @cols = reverse @cols if $reverse;
- foreach my $c (@cols) {
- return 0 unless $t->[$r][$c] eq $SKEW_DATA[$r][$c];
- }
- }
- 1;
-}
-
-sub good_chain_data {
- my($te, $key) = @_;
- ref $te or die "Oops: TableExtract object required\n";
- $CHAIN_DATA{$key} or die "Oops: Valid CHAIN_DATA key required\n";
- my $coord_list = [map([$_->depth,$_->count], $te->table_states)];
- my $data = $CHAIN_DATA{$key};
-# print 'clist: ',join(',', map('[' . join(',', @$_) . ']', @$coord_list)),"\n";
-# print 'dlist: ',join(',', map('[' . join(',', @$_) . ']', @$data)),"\n";
- @$coord_list == @$data or return 0;
-# print scalar @$coord_list, " in both lists\n";
- foreach (0 .. $#{$coord_list}) {
-# print "comp cl[$_][0]:$coord_list->[$_][0] to dl[$_][0]:$data->[$_][0]\n";
- $coord_list->[$_][0] == $data->[$_][0] or return 0;
-# print "comp cl[$_][1]:$coord_list->[$_][1] to dl[$_][1]:$data->[$_][1]\n";
- $coord_list->[$_][1] == $data->[$_][1] or return 0;
- }
- 1;
-}
-
-__DATA__
-$doc1 = <<__DOC1;
-<html>
-<head><title>TableExtract Test HTML</title></head>
-<body>
-<h3>Here lies Table 1:</h3>
-<table border=1><tr><td>Header Zero</td><td>Header One</td><td>Header Two</td><td>Header Three</td><td>Header Four</td><td>Header Five</td><td>Header Six</td><td>Header Seven</td><td>Header Eight</td><td>Header Nine</td></tr><tr><td> (1,0)</td><td> (1,1)</td><td> (1,2)</td><td> (1,3)</td><td> (1,4)</td><td> (1,5)</td><td> (1,6)</td><td> (1,7)</td><td> (1,8)</td><td> (1,9)</td></tr><tr><td> (2,0)</td><td> (2,1)</td><td> (2,2)</td><td> (2,3)</td><td> (2,4)</td><td> (2,5)</td><td> (2,6)</td><td> (2,7)</td><td> (2,8)</td><td> (2,9)</td></tr><tr><td> (3,0)</td><td> (3,1)</td><td> (3,2)</td><td> (3,3)</td><td> (3,4)</td><td> (3,5)</td><td> (3,6)</td><td> (3,7)</td><td> (3,8)</td><td> (3,9)</td></tr><tr><td> (4,0)</td><td> (4,1)</td><td> (4,2)</td><td> (4,3)</td><td> (4,4)</td><td> (4,5)</td><td> (4,6)</td><td> (4,7)</td><td> (4,8)</td><td> (4,9)</td></tr><tr><td> (5,0)</td><td> (5,1)</td><td> (5,2)</td><td> (5,3)</td><td> (5,4)</td><td> (5,5)</td><td> (5,6)</td><td> (5,7)</td><td> (5,8)</td><td> (5,9)</td></tr><tr><td> (6,0)</td><td> (6,1)</td><td> (6,2)</td><td> (6,3)</td><td> (6,4)</td><td> (6,5)</td><td> (6,6)</td><td> (6,7)</td><td> (6,8)</td><td> (6,9)</td></tr><tr><td> (7,0)</td><td> (7,1)</td><td> (7,2)</td><td> (7,3)</td><td> (7,4)</td><td> (7,5)</td><td> (7,6)</td><td> (7,7)</td><td> (7,8)</td><td> (7,9)</td></tr><tr><td> (8,0)</td><td> (8,1)</td><td> (8,2)</td><td> (8,3)</td><td> (8,4)</td><td> (8,5)</td><td> (8,6)</td><td> (8,7)</td><td> (8,8)</td><td> (8,9)</td></tr><tr><td> (9,0)</td><td> (9,1)</td><td> (9,2)</td><td> (9,3)</td><td> (9,4)</td><td> (9,5)</td><td> (9,6)</td><td> (9,7)</td><td> (9,8)</td><td> (9,9)</td></tr></table>
-
-<h3>Here lies Table 2:</h3>
-<table border=1><tr><td>Header Zero</td><td>Header One</td><td>Header Two</td><td>Header Three</td><td>Header Four</td><td>Header Five</td><td>Header Six</td><td>Header Seven</td><td>Header Eight</td><td>Header Nine</td></tr><tr><td> (1,0)</td><td> (1,1)</td><td> (1,2)</td><td> (1,3)</td><td> (1,4)</td><td> (1,5)</td><td> (1,6)</td><td> (1,7)</td><td> (1,8)</td><td> (1,9)</td></tr><tr><td> (2,0)</td><td> (2,1)</td><td> (2,2)</td><td> (2,3)</td><td> (2,4)</td><td> (2,5)</td><td> (2,6)</td><td> (2,7)</td><td> (2,8)</td><td> (2,9)</td></tr><tr><td> (3,0)</td><td> (3,1)</td><td> (3,2)</td><td> (3,3)</td><td> (3,4)</td><td> (3,5)</td><td> (3,6)</td><td> (3,7)</td><td> (3,8)</td><td> (3,9)</td></tr><tr><td> (4,0)</td><td> (4,1)</td><td> (4,2)</td><td> (4,3)</td><td> (4,4)</td><td> (4,5)</td><td> (4,6)</td><td> (4,7)</td><td> (4,8)</td><td> (4,9)</td></tr><tr><td> (5,0)</td><td> (5,1)</td><td> (5,2)</td><td> (5,3)</td><td> (5,4)</td><td> (5,5)</td><td> (5,6)</td><td> (5,7)</td><td> (5,8)</td><td> (5,9)</td></tr><tr><td> (6,0)</td><td> (6,1)</td><td> (6,2)</td><td> (6,3)</td><td> (6,4)</td><td> (6,5)</td><td> (6,6)</td><td> (6,7)</td><td> (6,8)</td><td> (6,9)</td></tr><tr><td> (7,0)</td><td> (7,1)</td><td> (7,2)</td><td> (7,3)</td><td> (7,4)</td><td> (7,5)</td><td> (7,6)</td><td> (7,7)</td><td> (7,8)</td><td> (7,9)</td></tr><tr><td> (8,0)</td><td> (8,1)</td><td> (8,2)</td><td> (8,3)</td><td> (8,4)</td><td> (8,5)</td><td> (8,6)</td><td> (8,7)</td><td> (8,8)</td><td> (8,9)</td></tr><tr><td> (9,0)</td><td> (9,1)</td><td> (9,2)</td><td> (9,3)</td><td> (9,4)</td><td> (9,5)</td><td> (9,6)</td><td> (9,7)</td><td> (9,8)</td><td> (9,9)</td></tr></table>
-
-<h3>Here lies Table 3 with 4 and 5 inside:</h3>
-<table border=1><tr><td>Header Zero</td><td>Header One</td><td>Header Two</td><td>Header Three</td><td>Header Four</td><td>Header Five</td><td>Header Six</td><td>Header Seven</td><td>Header Eight</td><td>Header Nine</td></tr><tr><td> (1,0)</td><td> (1,1)</td><td> (1,2)</td><td> (1,3)</td><td> (1,4)</td><td> (1,5)</td><td> (1,6)</td><td> (1,7)</td><td> (1,8)</td><td> (1,9)</td></tr><tr><td> (2,0)</td><td> (2,1)</td><td> (2,2)</td><td> (2,3)</td><td> (2,4)</td><td> (2,5)</td><td> (2,6)</td><td> (2,7)</td><td> (2,8)</td><td> (2,9)</td></tr><tr><td> (3,0)</td><td> (3,1)</td><td> (3,2)</td><td> (3,3)</td><td> (3,4)</td><td> (3,5)</td><td> (3,6)</td><td> (3,7)</td><td> (3,8)</td><td> (3,9)</td></tr><tr><td> (4,0)</td><td> (4,1)</td><td> (4,2)</td><td> (4,3)</td><td> (4,4)</td><td> (4,5)</td><td> (4,6)</td><td> (4,7)</td><td> (4,8)</td><td> (4,9)</td></tr><tr><td> (5,0)</td><td> (5,1)</td><td> (5,2)</td><td> (5,3)</td><td> (5,4)</td><td> (5,5)<table border=1><tr><td>Header Zero</td><td>Header One</td><td>Header Two</td><td>Header Three</td><td>Header Four</td><td>Header Five</td><td>Header Six</td><td>Header Seven</td><td>Header Eight</td><td>Header Nine</td></tr><tr><td> (1,0)</td><td> (1,1)</td><td> (1,2)</td><td> (1,3)</td><td> (1,4)</td><td> (1,5)</td><td> (1,6)</td><td> (1,7)</td><td> (1,8)</td><td> (1,9)</td></tr><tr><td> (2,0)</td><td> (2,1)</td><td> (2,2)</td><td> (2,3)</td><td> (2,4)</td><td> (2,5)</td><td> (2,6)</td><td> (2,7)</td><td> (2,8)</td><td> (2,9)</td></tr><tr><td> (3,0)</td><td> (3,1)</td><td> (3,2)</td><td> (3,3)</td><td> (3,4)</td><td> (3,5)</td><td> (3,6)</td><td> (3,7)</td><td> (3,8)</td><td> (3,9)</td></tr><tr><td> (4,0)</td><td> (4,1)</td><td> (4,2)</td><td> (4,3)</td><td> (4,4)</td><td> (4,5)</td><td> (4,6)</td><td> (4,7)</td><td> (4,8)</td><td> (4,9)</td></tr><tr><td> (5,0)</td><td> (5,1)</td><td> (5,2)</td><td> (5,3)</td><td> (5,4)</td><td> (5,5)</td><td> (5,6)</td><td> (5,7)</td><td> (5,8)</td><td> (5,9)</td></tr><tr><td> (6,0)</td><td> (6,1)</td><td> (6,2)</td><td> (6,3)</td><td> (6,4)</td><td> (6,5)</td><td> (6,6)</td><td> (6,7)</td><td> (6,8)</td><td> (6,9)</td></tr><tr><td> (7,0)</td><td> (7,1)</td><td> (7,2)</td><td> (7,3)</td><td> (7,4)</td><td> (7,5)</td><td> (7,6)</td><td> (7,7)</td><td> (7,8)</td><td> (7,9)</td></tr><tr><td> (8,0)</td><td> (8,1)</td><td> (8,2)</td><td> (8,3)</td><td> (8,4)</td><td> (8,5)</td><td> (8,6)</td><td> (8,7)</td><td> (8,8)</td><td> (8,9)</td></tr><tr><td> (9,0)</td><td> (9,1)</td><td> (9,2)</td><td> (9,3)</td><td> (9,4)</td><td> (9,5)</td><td> (9,6)</td><td> (9,7)</td><td> (9,8)</td><td> (9,9)</td></tr></table></td><td> (5,6)</td><td> (5,7)</td><td> (5,8)</td><td> (5,9)</td></tr><tr><td> (6,0)</td><td> (6,1)</td><td> (6,2)</td><td> (6,3)</td><td> (6,4)</td><td> (6,5)</td><td> (6,6)</td><td> (6,7)</td><td> (6,8)</td><td> (6,9)</td></tr><tr><td> (7,0)</td><td> (7,1)</td><td> (7,2)</td><td> (7,3)</td><td> (7,4)</td><td> (7,5)</td><td> (7,6)</td><td> (7,7)<table border=1><tr><td>Header Zero</td><td>Header One</td><td>Header Two</td><td>Header Three</td><td>Header Four</td><td>Header Five</td><td>Header Six</td><td>Header Seven</td><td>Header Eight</td><td>Header Nine</td></tr><tr><td> (1,0)</td><td> (1,1)</td><td> (1,2)</td><td> (1,3)</td><td> (1,4)</td><td> (1,5)</td><td> (1,6)</td><td> (1,7)</td><td> (1,8)</td><td> (1,9)</td></tr><tr><td> (2,0)</td><td> (2,1)</td><td> (2,2)</td><td> (2,3)</td><td> (2,4)</td><td> (2,5)</td><td> (2,6)</td><td> (2,7)</td><td> (2,8)</td><td> (2,9)</td></tr><tr><td> (3,0)</td><td> (3,1)</td><td> (3,2)</td><td> (3,3)</td><td> (3,4)</td><td> (3,5)</td><td> (3,6)</td><td> (3,7)</td><td> (3,8)</td><td> (3,9)</td></tr><tr><td> (4,0)</td><td> (4,1)</td><td> (4,2)</td><td> (4,3)</td><td> (4,4)</td><td> (4,5)</td><td> (4,6)</td><td> (4,7)</td><td> (4,8)</td><td> (4,9)</td></tr><tr><td> (5,0)</td><td> (5,1)</td><td> (5,2)</td><td> (5,3)</td><td> (5,4)</td><td> (5,5)</td><td> (5,6)</td><td> (5,7)</td><td> (5,8)</td><td> (5,9)</td></tr><tr><td> (6,0)</td><td> (6,1)</td><td> (6,2)</td><td> (6,3)</td><td> (6,4)</td><td> (6,5)</td><td> (6,6)</td><td> (6,7)</td><td> (6,8)</td><td> (6,9)</td></tr><tr><td> (7,0)</td><td> (7,1)</td><td> (7,2)</td><td> (7,3)</td><td> (7,4)</td><td> (7,5)</td><td> (7,6)</td><td> (7,7)</td><td> (7,8)</td><td> (7,9)</td></tr><tr><td> (8,0)</td><td> (8,1)</td><td> (8,2)</td><td> (8,3)</td><td> (8,4)</td><td> (8,5)</td><td> (8,6)</td><td> (8,7)</td><td> (8,8)</td><td> (8,9)</td></tr><tr><td> (9,0)</td><td> (9,1)</td><td> (9,2)</td><td> (9,3)</td><td> (9,4)</td><td> (9,5)</td><td> (9,6)</td><td> (9,7)</td><td> (9,8)</td><td> (9,9)</td></tr></table></td><td> (7,8)</td><td> (7,9)</td></tr><tr><td> (8,0)</td><td> (8,1)</td><td> (8,2)</td><td> (8,3)</td><td> (8,4)</td><td> (8,5)</td><td> (8,6)</td><td> (8,7)</td><td> (8,8)</td><td> (8,9)</td></tr><tr><td> (9,0)</td><td> (9,1)</td><td> (9,2)</td><td> (9,3)</td><td> (9,4)</td><td> (9,5)</td><td> (9,6)</td><td> (9,7)</td><td> (9,8)</td><td> (9,9)</td></tr></table>
-
-</body>
-</html>
-__DOC1
-$docs{basic} = $doc1;
-
-$doc2 = <<__DOC2;
-<html><head><title>skew test</title></head>
-<body>
-<table border=1>
-<tr>
- <td>head0</td>
- <td>head1</td>
- <td>head2</td>
- <td>head3</td>
-</tr>
-<tr>
- <td colspan=4>THIS IS A WHOLE ROW-CELL OF JUNK</td>
-</tr>
-<tr>
- <td rowspan=2>JUNK</td>
- <td>Tasty tidbit (1,1)</td>
- <td>JUNK</td>
- <td>Tasty tidbit (1,3)</td>
-</tr>
-<tr>
- <td colspan=2 rowspan=3>BIG<BR>JUNK</td>
- <td>Tasty tidbit (2,3)</td>
-</tr>
-<tr>
- <td>Tasty tidbit (3,0)</td>
- <td>Tasty tidbit (3,3)</td>
-</tr>
-<tr>
- <td>Tasty tidbit (4,0)</td>
- <td>Tasty tidbit (4,3)</td>
-</tr>
-<tr>
- <td colspan=2>JUNK BUTTON</td>
- <td>Tasty tidbit (5,2)</td>
- <td>Tasty tidbit (5,3)</td>
-</tr>
-</table>
-</body>
-</html>
-__DOC2
-$docs{skew} = $doc2;
-
-$doc3 = <<__DOC3;
-<HTML>
-<HEAD><TITLE>Chain Test</TITLE></HEAD>
-<BODY>
-<H2>You like ugly? I'll show you <font color=blue>U</font><font color=green>G</font><font color=cyan>L</font><font color=red>Y</font>:</H2>
-<table bgcolor="blue" border=1><tr valign="top"><td valign="top"><font size="-2">0,0: (0,0)</font></td><td valign="top"><font size="-2">0,0: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">0,0: (1,0)</font><table bgcolor="green" border=1><tr valign="top"><td valign="top"><font size="-2">1,0: (0,0)</font></td><td valign="top"><font size="-2">1,0: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">1,0: (1,0)</font><table bgcolor="cyan" border=1><tr valign="top"><td valign="top"><font size="-2">2,0: (0,0)</font></td><td valign="top"><font size="-2">2,0: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">2,0: (1,0)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,0: (0,0)</font></td><td valign="top"><font size="-2">3,0: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,0: (1,0)</font></td><td valign="top"><font size="-2">3,0: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,0: (2,0)</font></td><td valign="top"><font size="-2">3,0: (2,1)</font></td></tr></table></td><td valign="top"><font size="-2">2,0: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">2,0: (2,0)</font></td><td valign="top"><font size="-2">2,0: (2,1)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,1: (0,0)</font></td><td valign="top"><font size="-2">3,1: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,1: (1,0)</font></td><td valign="top"><font size="-2">3,1: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,1: (2,0)</font></td><td valign="top"><font size="-2">3,1: (2,1)</font></td></tr></table></td></tr></table></td><td valign="top"><font size="-2">1,0: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">1,0: (2,0)</font></td><td valign="top"><font size="-2">1,0: (2,1)</font><table bgcolor="cyan" border=1><tr valign="top"><td valign="top"><font size="-2">2,1: (0,0)</font></td><td valign="top"><font size="-2">2,1: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">2,1: (1,0)</font></td><td valign="top"><font size="-2">2,1: (1,1)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,2: (0,0)</font></td><td valign="top"><font size="-2">3,2: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,2: (1,0)</font></td><td valign="top"><font size="-2">3,2: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,2: (2,0)</font></td><td valign="top"><font size="-2">3,2: (2,1)</font></td></tr></table></td></tr><tr valign="top"><td valign="top"><font size="-2">2,1: (2,0)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,3: (0,0)</font></td><td valign="top"><font size="-2">3,3: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,3: (1,0)</font></td><td valign="top"><font size="-2">3,3: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,3: (2,0)</font></td><td valign="top"><font size="-2">3,3: (2,1)</font></td></tr></table></td><td valign="top"><font size="-2">2,1: (2,1)</font></td></tr></table></td></tr></table></td><td valign="top"><font size="-2">0,0: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">0,0: (2,0)</font></td><td valign="top"><font size="-2">0,0: (2,1)</font><table bgcolor="green" border=1><tr valign="top"><td valign="top"><font size="-2">1,1: (0,0)</font></td><td valign="top"><font size="-2">1,1: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">1,1: (1,0)</font></td><td valign="top"><font size="-2">1,1: (1,1)</font><table bgcolor="cyan" border=1><tr valign="top"><td valign="top"><font size="-2">2,2: (0,0)</font></td><td valign="top"><font size="-2">2,2: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">2,2: (1,0)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,4: (0,0)</font></td><td valign="top"><font size="-2">3,4: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,4: (1,0)</font></td><td valign="top"><font size="-2">3,4: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,4: (2,0)</font></td><td valign="top"><font size="-2">3,4: (2,1)</font></td></tr></table></td><td valign="top"><font size="-2">2,2: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">2,2: (2,0)</font></td><td valign="top"><font size="-2">2,2: (2,1)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,5: (0,0)</font></td><td valign="top"><font size="-2">3,5: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,5: (1,0)</font></td><td valign="top"><font size="-2">3,5: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,5: (2,0)</font></td><td valign="top"><font size="-2">3,5: (2,1)</font></td></tr></table></td></tr></table></td></tr><tr valign="top"><td valign="top"><font size="-2">1,1: (2,0)</font><table bgcolor="cyan" border=1><tr valign="top"><td valign="top"><font size="-2">2,3: (0,0)</font></td><td valign="top"><font size="-2">2,3: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">2,3: (1,0)</font></td><td valign="top"><font size="-2">2,3: (1,1)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,6: (0,0)</font></td><td valign="top"><font size="-2">3,6: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,6: (1,0)</font></td><td valign="top"><font size="-2">3,6: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,6: (2,0)</font></td><td valign="top"><font size="-2">3,6: (2,1)</font></td></tr></table></td></tr><tr valign="top"><td valign="top"><font size="-2">2,3: (2,0)</font><table bgcolor="red" border=1><tr valign="top"><td valign="top"><font size="-2">3,7: (0,0)</font></td><td valign="top"><font size="-2">3,7: (0,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,7: (1,0)</font></td><td valign="top"><font size="-2">3,7: (1,1)</font></td></tr><tr valign="top"><td valign="top"><font size="-2">3,7: (2,0)</font></td><td valign="top"><font size="-2">3,7: (2,1)</font></td></tr></table></td><td valign="top"><font size="-2">2,3: (2,1)</font></td></tr></table></td><td valign="top"><font size="-2">1,1: (2,1)</font></td></tr></table></td></tr></table>
-</BODY>
-</HTML>
-__DOC3
-$docs{chain} = $doc3;
-
-1;
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/BUILD b/monitoring/PerlModules/CPAN/IO-stringy-1.219/BUILD
deleted file mode 100644
index 528b578..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/BUILD
+++ /dev/null
@@ -1,42 +0,0 @@
-# Macros
-
-#control upversion
-%define external_package 1
-
-%define cvs_package PerlModules/CPAN/IO-stringy-1.219
-
-# Package specific stuff
-Name: perl-IO-stringy
-Version: 2.2.0
-Release: 1.1
-Packager: Dave Parker <dparker(a)nocpulse.com>
-Summary: Perl persistency primitives
-Source: %name-%PACKAGE_VERSION.tar.gz
-BuildArch: noarch
-Requires: perl
-Group: unsorted
-License: GPL or Artistic
-Vendor: Red Hat, Inc.
-Prefix: %{_our_prefix}
-BuildRoot: %{_tmppath}/%cvs_package
-
-%description
-
-Provides primitives for perl object persistency
-
-%prep
-%entirely_abstract_build_step
-
-%build
-%makefile_build
-
-%install
-cd $RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
-%makefile_install
-%point_scripts_to_correct_perl
-%make_file_list
-
-%files -f %{name}-%{version}-%{release}-filelist
-
-%clean
-%abstract_clean_script
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/MANIFEST b/monitoring/PerlModules/CPAN/IO-stringy-1.219/MANIFEST
deleted file mode 100644
index 88f0554..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/MANIFEST
+++ /dev/null
@@ -1,32 +0,0 @@
-MANIFEST
-Makefile.PL
-README
-README.system
-docs/IO/AtomicFile.pm.html
-docs/IO/InnerFile.pm.html
-docs/IO/Lines.pm.html
-docs/IO/Scalar.pm.html
-docs/IO/ScalarArray.pm.html
-docs/IO/Stringy.pm.html
-docs/IO/Wrap.pm.html
-docs/IO/WrapTie.pm.html
-docs/IO/icons/h1bullet.gif
-docs/IO/icons/h2bullet.gif
-docs/IO/icons/zeegee.gif
-docs/index-menu.html
-docs/index.html
-docs/index.menu
-lib/IO/AtomicFile.pm
-lib/IO/InnerFile.pm
-lib/IO/Lines.pm
-lib/IO/Scalar.pm
-lib/IO/ScalarArray.pm
-lib/IO/Stringy.pm
-lib/IO/Wrap.pm
-lib/IO/WrapTie.pm
-t/Common.pm
-t/ExtUtils/TBone.pm
-t/IO_Lines.t
-t/IO_Scalar.t
-t/IO_ScalarArray.t
-t/IO_WrapTie.t
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/Makefile.PL b/monitoring/PerlModules/CPAN/IO-stringy-1.219/Makefile.PL
deleted file mode 100755
index aeecddc..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/Makefile.PL
+++ /dev/null
@@ -1,22 +0,0 @@
-#!/usr/bin/perl
-use ExtUtils::MakeMaker;
-
-#------------------------------------------------------------
-# Makefile:
-#------------------------------------------------------------
-
-# Ensure the test output directory:
-(-d "testout") or mkdir "testout", 0755 or die "please make dir ./testout\n";
-
-# Write the Makefile:
-WriteMakefile(
- NAME => "IO-stringy",
- VERSION_FROM => "lib/IO/Stringy.pm",
- DISTNAME => "IO-stringy",
- 'dist' => {
- PREOP => "cvu_perl_preop -m IO::Stringy -f",
- COMPRESS => 'gzip',
- SUFFIX => 'gz',
- }
- );
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/README b/monitoring/PerlModules/CPAN/IO-stringy-1.219/README
deleted file mode 100644
index a33220c..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/README
+++ /dev/null
@@ -1,183 +0,0 @@
-NAME
- IO-stringy - I/O on in-core objects like strings and arrays
-
-SYNOPSIS
- IO::
- ::AtomicFile adpO Write a file which is updated atomically ERYQ
- ::Lines bdpO I/O handle to read/write to array of lines ERYQ
- ::Scalar RdpO I/O handle to read/write to a string ERYQ
- ::ScalarArray RdpO I/O handle to read/write to array of scalars ERYQ
- ::Wrap RdpO Wrap old-style FHs in standard OO interface ERYQ
- ::WrapTie adpO Tie your handles & retain full OO interface ERYQ
-
-DESCRIPTION
- This toolkit primarily provides modules for performing both traditional and object-
- oriented i/o) on things *other* than normal filehandles; in particular, IO::Scalar,
- IO::ScalarArray, and IO::Lines.
-
- If you have access to tie(), these classes will make use of the IO::WrapTie module
- to inherit a convenient new_tie() constructor. It also exports a nice wraptie()
- function.
-
- In the more-traditional IO::Handle front, we have IO::AtomicFile which may be used
- to painlessly create files which are updated atomically.
-
- And in the "this-may-prove-useful" corner, we have IO::Wrap, whose exported
- wraphandle() function will clothe anything that's not a blessed object in an
- IO::Handle-like wrapper... so you can just use OO syntax and stop worrying about
- whether your function's caller handed you a string, a globref, or a FileHandle.
-
-INSTALLATION
- Most of you already know the drill...
-
- perl Makefile.PL
- make test
- make install
-
- For everyone else out there... if you've never installed Perl code before, or
- you're trying to use this in an environment where your sysadmin or ISP won't let
- you do interesting things, relax: since this module contains no binary extensions,
- you can cheat. That means copying the directory tree under my "./lib" directory
- into someplace where your script can "see" it. For example, under Linux:
-
- cp -r IO-stringy-1.234/lib/* /path/to/my/perl/
-
- Now, in your Perl code, do this:
-
- use lib "/path/to/my/perl";
- use IO::Scalar; ### or whatever
-
- Ok, now you've been told. At this point, anyone who whines about not being given
- enough information gets an unflattering haiku written about them in the next change
- log. I'll do it. Don't think I won't.
-
-VERSION
- $Id: README,v 1.1.1.1 2001-03-30 02:46:26 dparker Exp $
-
-TO DO
- (2000/08/02) Finalize $/ support
- Graham Barr submitted this patch half a *year* ago; Like a moron, I lost his
- message under a ton of others, and only now have the experimental
- implementation done.
-
- Will the sudden sensitivity to $/ hose anyone out there? I'm worried, so you
- have to enable it explicitly.
-
- (2000/09/28) Separate read/write cursors?
- Binkley sent me a very interesting variant of IO::Scalar which maintains two
- separate cursors on the data, one for reading and one for writing. Quoth he:
-
- Isn't it the case that real operating system file descriptors
- maintain an independent read and write file position (and
- seek(2) resets them both)?
-
- He also pointed out some issues with his implementation:
-
- For example, what does eof or tell return? The read position or
- the write position? (I assumed read position was more important).
-
- Your opinions on this are most welcome. (Me, I'm just squeamish that this will
- break some code which depends on the existing behavior, and that attempts to
- maintain backwards-compatibility will slow down the code. But I'll give it a
- shot.)
-
-CHANGE LOG
- Version 1.219 (2001/02/23)
- IO::Scalar objects can now be made sensitive to $/ . Pains were taken to keep
- the fast code fast while adding this feature. *Cheers to Graham Barr for
- submitting his patch; jeers to me for losing his email for 6 months.*
-
- Version 1.218 (2001/02/23)
- IO::Scalar has a new sysseek() method. *Thanks again to Richard Jones.*
-
- New "TO DO" section, because people who submit patches/ideas should at least
- know that they're in the system... and that I won't lose their stuff. Please
- read it.
-
- New entries in the section on "AUTHOR". Please read those too.
-
- Version 1.216 (2000/09/28)
- IO::Scalar and IO::ScalarArray now inherit from IO::Handle. I thought I'd
- remembered a problem with this ages ago, related to the fact that these IO::
- modules don't have "real" filehandles, but the problem apparently isn't
- surfacing now. If you suddenly encounter Perl warnings during global
- destruction (especially if you're using tied filehandles), then please let me
- know! *Thanks to B. K. Oxley (binkley) for this.*
-
- Nasty bug fixed in IO::Scalar::write(). Apparently, the offset and the number-
- of-bytes arguments were, for all practical purposes, *reversed.* You were okay
- if you did all your writing with print(), but boy was *this* a stupid bug!
- *Thanks to Richard Jones for finding this one. For you, Rich, a double-length
- haiku:*
-
- Newspaper headline
- typeset by dyslexic man
- loses urgency
-
- BABY EATS FISH is
- simply not equivalent
- to FISH EATS BABY
-
- New sysread and syswrite methods for IO::Scalar. *Thanks again to Richard Jones
- for this.*
-
- Version 1.215 (2000/09/05)
- Added 'bool' overload to '""' overload, so object always evaluates to true.
- (Whew. Glad I caught this before it went to CPAN.)
-
- Version 1.214 (2000/09/03)
- Evaluating an IO::Scalar in a string context now yields the underlying string.
- *Thanks to B. K. Oxley (binkley) for this.*
-
- Version 1.213 (2000/08/16)
- Minor documentation fixes.
-
- Version 1.212 (2000/06/02)
- Fixed IO::InnerFile incompatibility with Perl5.004. *Thanks to many folks for
- reporting this.*
-
- Version 1.210 (2000/04/17)
- Added flush() and other no-op methods. *Thanks to Doru Petrescu for suggesting
- this.*
-
- Version 1.209 (2000/03/17)
- Small bug fixes.
-
- Version 1.208 (2000/03/14)
- Incorporated a number of contributed patches and extensions, mostly related to
- speed hacks, support for "offset", and WRITE/CLOSE methods. *Thanks to Richard
- Jones, Doru Petrescu, and many others.*
-
- Version 1.206 (1999/04/18)
- Added creation of ./testout when Makefile.PL is run.
-
- Version 1.205 (1999/01/15)
- Verified for Perl5.005.
-
- Version 1.202 (1998/04/18)
- New IO::WrapTie and IO::AtomicFile added.
-
- Version 1.110
- Added IO::WrapTie.
-
- Version 1.107
- Added IO::Lines, and made some bug fixes to IO::ScalarArray. Also, added
- getc().
-
- Version 1.105
- No real changes; just upgraded IO::Wrap to have a $VERSION string.
-
-AUTHOR
- Primary Maintainer
- Eryq (eryq(a)zeegee.com). President, ZeeGee Software Inc (http://www.zeegee.com).
-
- Unofficial Co-Authors
- For all their bug reports and patch submissions, the following are officially
- recognized:
-
- Richard Jones
- B. K. Oxley (binkley)
- Doru Petrescu
-
- Enjoy. Yell if it breaks.
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/README.system b/monitoring/PerlModules/CPAN/IO-stringy-1.219/README.system
deleted file mode 100644
index 64dcd08..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/README.system
+++ /dev/null
@@ -1,8 +0,0 @@
-DEVELOPMENT SYSTEM:
-Linux eryq 2.0.34 #1 Fri May 8 16:05:57 EDT 1998 i586 unknown
-
-DEVELOPMENT PERL:
-This is perl, version 5.005_56 built for i586-linux
-
-DEVELOPMENT DATE:
-Fri Feb 23 04:47:17 EST 2001
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/AtomicFile.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/AtomicFile.pm.html
deleted file mode 100644
index acab65b..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/AtomicFile.pm.html
+++ /dev/null
@@ -1,101 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO::AtomicFile</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO::AtomicFile</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#REVISION">REVISION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO::AtomicFile - write a file which is updated atomically
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::AtomicFile;
-
- # Write a temp file, and have it install itself when closed:
- my $FH = IO::AtomicFile->open("bar.dat", "w");
- print $FH "Hello!\n";
- $FH->close || die "couldn't install atomic file: $!";
-
- # Write a temp file, but delete it before it gets installed:
- my $FH = IO::AtomicFile->open("bar.dat", "w");
- print $FH "Hello!\n";
- $FH->delete;
-
- # Write a temp file, but neither install it nor delete it:
- my $FH = IO::AtomicFile->open("bar.dat", "w");
- print $FH "Hello!\n";
- $FH->detach;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This module is intended for people who need to update files
-reliably in the face of unexpected program termination.
-
-
-<P>For example, you generally don't want to be halfway in the middle of
-writing <I>/etc/passwd</I> and have your program terminate! Even
-the act of writing a single scalar to a filehandle is <I>not</I> atomic.
-
-
-<P>But this module gives you true atomic updates, via rename().
-When you open a file <I>/foo/bar.dat</I> via this module, you are <I>actually</I>
-opening a temporary file <I>/foo/bar.dat..TMP</I>, and writing your
-output there. The act of closing this file (either explicitly
-via close(), or implicitly via the destruction of the object)
-will cause rename() to be called... therefore, from the point
-of view of the outside world, the file's contents are updated
-in a single time quantum.
-
-
-<P>To ensure that problems do not go undetected, the "close" method
-done by the destructor will raise a fatal exception if the rename()
-fails. The explicit close() just returns undef.
-
-
-<P>You can also decide at any point to trash the file you've been
-building.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>).
-President, ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-
-<P><HR>
-<A NAME="REVISION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> REVISION</H2></A>
-
-
-<P>$Revision$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:46:50 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/InnerFile.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/InnerFile.pm.html
deleted file mode 100644
index a090d9d..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/InnerFile.pm.html
+++ /dev/null
@@ -1,126 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO::InnerFile</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO::InnerFile</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO::InnerFile - define a file inside another file
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Read a subset of a file:
- $inner = IO::InnerFile->new($fh, $start, $length);
- while (<$inner>) {
- ...
- }
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>If you have a filehandle that can seek() and tell(), then you
-can open an IO::InnerFile on a range of the underlying file.
-
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new FILEHANDLE, [START, [LENGTH]]</A></B></DT>
-<DD>
-<I>Class method, constructor.</I>
-Create a new inner-file opened on the given FILEHANDLE,
-from bytes START to START+LENGTH. Both START and LENGTH
-default to 0; negative values are silently coerced to zero.
-
-
-<P>Note that FILEHANDLE must be able to seek() and tell(), in addition
-to whatever other methods you may desire for reading it.
-
-<P><DT><B><A NAME="item:set_length">set_length LENGTH</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:get_length">get_length</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:add_length">add_length NBYTES</A></B></DT>
-<DD>
-<I>Instance methods.</I>
-Get/set the virtual length of the inner file.
-
-<P><DT><B><A NAME="item:set_start">set_start START</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:get_start">get_start</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:add_start">add_start NBYTES</A></B></DT>
-<DD>
-<I>Instance methods.</I>
-Get/set the virtual start position of the inner file.
-
-<P><DT><B><A NAME="item:binmode">binmode</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:close">close</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:flush">flush</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:getc">getc</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:getline">getline</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:print">print LIST</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:printf">printf LIST</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:read">read BUF, NBYTES</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:readline">readline</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:seek">seek OFFFSET, WHENCE</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:tell">tell</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:write">write ARGS...</A></B></DT>
-<DD>
-<I>Instance methods.</I>
-Standard filehandle methods.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Original version by Doru Petrescu (pdoru(a)kappa.ro).
-
-
-<P>Documentation and current maintenance by Eryq (eryq(a)zeegee.com).
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:46:54 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Lines.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Lines.pm.html
deleted file mode 100644
index 1f2fef7..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Lines.pm.html
+++ /dev/null
@@ -1,103 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO::Lines</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO::Lines</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-<LI> <A HREF="#AUTHORS">AUTHORS</A>
-<UL>
-<LI> <A HREF="#Principal_author">Principal author</A>
-<LI> <A HREF="#Other_contributors">Other contributors</A>
-</UL>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO::Lines - IO:: interface for reading/writing an array of lines
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::Lines;
-
- # See IO::ScalarArray for details
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This class implements objects which behave just like FileHandle
-(or IO::Handle) objects, except that you may use them to write to
-(or read from) an array of lines. They can be tiehandle'd as well.
-
-
-<P>This is a subclass of <A HREF="../IO/ScalarArray.pm.html">IO::ScalarArray</A>
-in which the underlying
-array has its data stored in a line-oriented-format: that is,
-every element ends in a <CODE>"\n"</CODE>, with the possible exception of the
-final element. This makes <CODE>getline()</CODE> <I>much</I> more efficient;
-if you plan to do line-oriented reading/printing, you want this class.
-
-
-<P>The <CODE>print()</CODE> method will enforce this rule, so you can print
-arbitrary data to the line-array: it will break the data at
-newlines appropriately.
-
-
-<P>See <A HREF="../IO/ScalarArray.pm.html">IO::ScalarArray</A> for full usage.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Id$
-
-
-
-<P><HR>
-<A NAME="AUTHORS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHORS</H2></A>
-
-
-
-<P><HR>
-<A NAME="Principal_author"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Principal author</H3></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>).
-President, ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-
-<P><HR>
-<A NAME="Other_contributors"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Other contributors</H3></A>
-
-
-<P>Thanks to the following individuals for their invaluable contributions
-(if I've forgotten or misspelled your name, please email me!):
-
-
-<P><I>Morris M. Siegel,</I>
-for his $/ patch and the new <CODE>getlines()</CODE>.
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:46:56 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Scalar.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Scalar.pm.html
deleted file mode 100644
index 62dc174..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Scalar.pm.html
+++ /dev/null
@@ -1,387 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO::Scalar</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO::Scalar</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<UL>
-<LI> <A HREF="#Construction">Construction</A>
-<LI> <A HREF="#Input_and_output">Input and output</A>
-<LI> <A HREF="#Seeking_telling_and_other_attributes">Seeking/telling and other attributes</A>
-</UL>
-<LI> <A HREF="#VERSION">VERSION</A>
-<LI> <A HREF="#AUTHORS">AUTHORS</A>
-<UL>
-<LI> <A HREF="#Principal_author">Principal author</A>
-<LI> <A HREF="#Other_contributors">Other contributors</A>
-</UL>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO::Scalar - IO:: interface for reading/writing a scalar
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>If you have any Perl5, you can use the basic OO interface...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::Scalar;
-
- ### Open a handle on a string:
- $SH = new IO::Scalar;
- $SH->open(\$somestring);
-
- ### Open a handle on a string, read it line-by-line, then close it:
- $SH = new IO::Scalar \$somestring;
- while ($_ = $SH->getline) { print "Line: $_" }
- $SH->close;
-
- ### Open a handle on a string, and slurp in all the lines:
- $SH = new IO::Scalar \$somestring;
- print $SH->getlines;
-
- ### Open a handle on a string, and append to it:
- $SH = new IO::Scalar \$somestring
- $SH->print("bar\n"); ### will add "bar\n" to the end
-
- ### Get the current position:
- $pos = $SH->getpos; ### $SH->tell() also works
-
- ### Set the current position:
- $SH->setpos($pos); ### $SH->seek(POS,WHENCE) also works
-
- ### Open an anonymous temporary scalar:
- $SH = new IO::Scalar;
- $SH->print("Hi there!");
- print "I got: ", ${$SH->sref}, "\n"; ### get at value
-</PRE></FONT>
-
-<P>If your Perl is 5.004 or later, you can use the TIEHANDLE
-interface, and read/write scalars just like files:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::Scalar;
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Writing to a scalar...
- my $s;
- tie *OUT, 'IO::Scalar', \$s;
- print OUT "line 1\nline 2\n", "line 3\n";
- print "s is now... $s\n"
-
- ### Reading and writing an anonymous scalar...
- tie *OUT, 'IO::Scalar';
- print OUT "line 1\nline 2\n", "line 3\n";
- tied(OUT)->seek(0,0);
- while (<OUT>) { print "LINE: ", $_ }
-</PRE></FONT>
-
-<P>Stringification now works, too!
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $SH = new IO::Scalar \$somestring;
- $SH->print("Hello, ");
- $SH->print("world!");
- print "I've got: <$SH>\n";
-</PRE></FONT>
-
-<P>You can also make the objects sensitive to the $/ setting,
-just like IO::Handle wants them to be:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $SH = new IO::Scalar \$somestring;
- $SH->use_RS(1); ### perlvar's short name for $/
- ...
- local $/ = ""; ### read paragraph-at-a-time
- $nextpar = $SH->getline;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This class implements objects which behave just like FileHandle
-(or IO::Handle) objects, except that you may use them to write to
-(or read from) scalars. They can be tiehandle'd as well.
-
-
-<P>Basically, this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $s;
- $SH = new IO::Scalar \$s;
- $SH->print("Hel", "lo, "); # OO style
- $SH->print("world!\n"); # ditto
-</PRE></FONT>
-
-<P>Or this (if you have 5.004 or later):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $s;
- $SH = tie *OUT, 'IO::Scalar', \$s;
- print OUT "Hel", "lo, "; # non-OO style
- print OUT "world!\n"; # ditto
-</PRE></FONT>
-
-<P>Or this (if you have 5.004 or later):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $s;
- $SH = IO::Scalar->new_tie(\$s);
- $SH->print("Hel", "lo, "); # OO style...
- print $SH "world!\n"; # ...or non-OO style!
-</PRE></FONT>
-
-<P>Causes $s to be set to:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- "Hello, world!\n"
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<P><HR>
-<A NAME="Construction"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Construction</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new [ARGS...]</A></B></DT>
-<DD>
-<I>Class method.</I>
-Return a new, unattached scalar handle.
-If any arguments are given, they're sent to open().
-
-<P><DT><B><A NAME="item:open">open [SCALARREF]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Open the scalar handle on a new scalar, pointed to by SCALARREF.
-If no SCALARREF is given, a "private" scalar is created to hold
-the file data.
-
-
-<P>Returns the self object on success, undefined on error.
-
-<P><DT><B><A NAME="item:opened">opened</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Is the scalar handle opened on something?
-
-<P><DT><B><A NAME="item:close">close</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Disassociate the scalar handle from its underlying scalar.
-Done automatically on destroy.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Input_and_output"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Input and output</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:flush">flush</A></B></DT>
-<DD>
-<I>Instance method.</I>
-No-op, provided for OO compatibility.
-
-<P><DT><B><A NAME="item:getc">getc</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the next character, or undef if none remain.
-
-<P><DT><B><A NAME="item:getline">getline</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the next line, or undef on end of string.
-Can safely be called in an array context.
-Currently, lines are delimited by "\n".
-
-<P><DT><B><A NAME="item:getlines">getlines</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get all remaining lines.
-It will croak() if accidentally called in a scalar context.
-
-<P><DT><B><A NAME="item:print">print ARGS...</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Print ARGS to the underlying scalar.
-
-
-<P><B>Warning:</B> Currently, this always causes a "seek to the end of the string";
-this may change in the future.
-
-<P><DT><B><A NAME="item:read">read BUF, NBYTES, [OFFSET]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Read some bytes from the scalar.
-Returns the number of bytes actually read, 0 on end-of-file, undef on error.
-
-<P><DT><B><A NAME="item:write">write BUF, NBYTES, [OFFSET]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Write some bytes to the scalar.
-
-<P><DT><B><A NAME="item:sysread">sysread BUF, LEN, [OFFSET]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Read some bytes from the scalar.
-Returns the number of bytes actually read, 0 on end-of-file, undef on error.
-
-<P><DT><B><A NAME="item:syswrite">syswrite BUF, NBYTES, [OFFSET]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Write some bytes to the scalar.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Seeking_telling_and_other_attributes"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Seeking/telling and other attributes</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:autoflush">autoflush</A></B></DT>
-<DD>
-<I>Instance method.</I>
-No-op, provided for OO compatibility.
-
-<P><DT><B><A NAME="item:binmode">binmode</A></B></DT>
-<DD>
-<I>Instance method.</I>
-No-op, provided for OO compatibility.
-
-<P><DT><B><A NAME="item:clearerr">clearerr</A></B></DT>
-<DD>
-<I>Instance method.</I> Clear the error and EOF flags. A no-op.
-
-<P><DT><B><A NAME="item:eof">eof</A></B></DT>
-<DD>
-<I>Instance method.</I> Are we at end of file?
-
-<P><DT><B><A NAME="item:seek">seek OFFSET, WHENCE</A></B></DT>
-<DD>
-<I>Instance method.</I> Seek to a given position in the stream.
-
-<P><DT><B><A NAME="item:sysseek">sysseek OFFSET, WHENCE</A></B></DT>
-<DD>
-<I>Instance method.</I> Identical to <CODE>seek OFFSET, WHENCE</CODE>, <I>q.v.</I>
-
-<P><DT><B><A NAME="item:tell">tell</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the current position in the stream, as a numeric offset.
-
-<P><DT><B><A NAME="item:use_RS">use_RS [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Obey the curent setting of $/, like IO::Handle does?
-Default is false.
-
-<P><DT><B><A NAME="item:setpos">setpos POS</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Set the current position, using the opaque value returned by <CODE>getpos()</CODE>.
-
-<P><DT><B><A NAME="item:getpos">getpos</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the current position in the string, as an opaque object.
-
-<P><DT><B><A NAME="item:sref">sref</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return a reference to the underlying scalar.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Id$
-
-
-
-<P><HR>
-<A NAME="AUTHORS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHORS</H2></A>
-
-
-
-<P><HR>
-<A NAME="Principal_author"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Principal author</H3></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>).
-President, ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-
-<P><HR>
-<A NAME="Other_contributors"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Other contributors</H3></A>
-
-
-<P>The full set of contributors always includes the folks mentioned
-in <A HREF="../IO/Stringy.pm.html#CHANGE_LOG">CHANGE LOG</A>. But just the same, special
-thanks to the following individuals for their invaluable contributions
-(if I've forgotten or misspelled your name, please email me!):
-
-
-<P><I>Andy Glew,</I>
-for contributing <CODE>getc()</CODE>.
-
-
-<P><I>Brandon Browning,</I>
-for suggesting <CODE>opened()</CODE>.
-
-
-<P><I>David Richter,</I>
-for finding and fixing the bug in <CODE>PRINTF()</CODE>.
-
-
-<P><I>Eric L. Brine,</I>
-for his offset-using read() and write() implementations.
-
-
-<P><I>Richard Jones,</I>
-for his patches to massively improve the performance of <CODE>getline()</CODE>
-and add <CODE>sysread</CODE> and <CODE>syswrite</CODE>.
-
-
-<P><I>B. K. Oxley (binkley),</I>
-for stringification and inheritance improvements,
-and sundry good ideas.
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:46:59 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/ScalarArray.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/ScalarArray.pm.html
deleted file mode 100644
index 039896e..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/ScalarArray.pm.html
+++ /dev/null
@@ -1,338 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO::ScalarArray</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO::ScalarArray</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<UL>
-<LI> <A HREF="#Construction">Construction</A>
-<LI> <A HREF="#Input_and_output">Input and output</A>
-<LI> <A HREF="#Seeking_telling_and_other_attributes">Seeking/telling and other attributes</A>
-</UL>
-<LI> <A HREF="#VERSION">VERSION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<UL>
-<LI> <A HREF="#Principal_author">Principal author</A>
-<LI> <A HREF="#Other_contributors">Other contributors</A>
-</UL>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO::ScalarArray - IO:: interface for reading/writing an array of scalars
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>If you have any Perl5, you can use the basic OO interface...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::ScalarArray;
-
- # Open a handle on an array-of-scalars:
- $AH = new IO::ScalarArray;
- $AH->open(\@a);
-
- # Open a handle on an array-of-scalars, read it line-by-line,
- # then close it:
- $AH = new IO::ScalarArray \@a;
- while ($_ = $AH->getline) { print "Line: $_" }
- $AH->close;
-
- # Open a handle on an array-of-scalars, and slurp in all the lines:
- $AH = new IO::ScalarArray \@a;
- print $AH->getlines;
-
- # Open a handle on an array-of-scalars, and append to it:
- $AH = new IO::ScalarArray \@a;
- $AH->print("bar\n");
- print "some string is now: ", $somestring, "\n";
-
- # Get the current position:
- $pos = $AH->getpos; ### $AH->tell() also works
-
- # Set the current position:
- $AH->setpos($pos); ### $AH->seek(POS,WHENCE) also works
-
- # Open an anonymous temporary scalar array:
- $AH = new IO::ScalarArray;
- $AH->print("Hi there!\nHey there!\n");
- $AH->print("Ho there!\n");
- print "I got: ", @{$AH->aref}, "\n"; ### get at value
-</PRE></FONT>
-
-<P>If your Perl is 5.004 or later, you can use the TIEHANDLE
-interface, and read/write as array-of-scalars just like files:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::ScalarArray;
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- # Writing to a scalar array...
- my @a;
- tie *OUT, 'IO::ScalarArray', \@a;
- print OUT "line 1\nline 2\n", "line 3\n";
- print "s is now... [", join('', @a), "]\n";
-
- # Reading and writing an anonymous scalar array...
- tie *OUT, 'IO::ScalarArray';
- print OUT "line 1\nline 2\n", "line 3\n";
- tied(OUT)->seek(0,0);
- while (<OUT>) { print "LINE: ", $_ }
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This class implements objects which behave just like FileHandle
-(or IO::Handle) objects, except that you may use them to write to
-(or read from) scalars. They can be tiehandle'd as well.
-
-
-<P>For writing large amounts of data with individual print() statements,
-this is likely to be more efficient than IO::Scalar.
-
-
-<P>Basically, this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my @a;
- $AH = new IO::ScalarArray \@a;
- $AH->print("Hel", "lo, ");
- $AH->print("world!\n");
-</PRE></FONT>
-
-<P>Or this (if you have 5.004 or later):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my @a;
- $AH = tie *OUT, 'IO::ScalarArray', \@a;
- print OUT "Hel", "lo, ";
- print OUT "world!\n";
-</PRE></FONT>
-
-<P>Causes @a to be set to the following arrayt of 3 strings:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ( "Hel" ,
- "lo, " ,
- "world!\n" )
-</PRE></FONT>
-
-<P>Compare this with IO::Scalar.
-
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<P><HR>
-<A NAME="Construction"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Construction</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new [ARGS...]</A></B></DT>
-<DD>
-<I>Class method.</I>
-Return a new, unattached array handle.
-If any arguments are given, they're sent to open().
-
-<P><DT><B><A NAME="item:open">open [ARRAYREF]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Open the array handle on a new array, pointed to by ARRAYREF.
-If no ARRAYREF is given, a "private" array is created to hold
-the file data.
-
-
-<P>Returns the self object on success, undefined on error.
-
-<P><DT><B><A NAME="item:opened">opened</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Is the array handle opened on something?
-
-<P><DT><B><A NAME="item:close">close</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Disassociate the array handle from its underlying array.
-Done automatically on destroy.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Input_and_output"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Input and output</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:flush">flush</A></B></DT>
-<DD>
-<I>Instance method.</I>
-No-op, provided for OO compatibility.
-
-<P><DT><B><A NAME="item:getc">getc</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the next character, or undef if none remain.
-This does a read(1), which is somewhat costly.
-
-<P><DT><B><A NAME="item:getline">getline</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the next line, or undef on end of data.
-Can safely be called in an array context.
-Currently, lines are delimited by "\n".
-
-<P><DT><B><A NAME="item:getlines">getlines</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get all remaining lines.
-It will croak() if accidentally called in a scalar context.
-
-<P><DT><B><A NAME="item:print">print ARGS...</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Print ARGS to the underlying array.
-
-
-<P>Currently, this always causes a "seek to the end of the array"
-and generates a new array entry. This may change in the future.
-
-<P><DT><B><A NAME="item:read">read BUF, NBYTES, [OFFSET];</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Read some bytes from the array.
-Returns the number of bytes actually read, 0 on end-of-file, undef on error.
-
-<P><DT><B><A NAME="item:write">write BUF, NBYTES, [OFFSET];</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Write some bytes into the array.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Seeking_telling_and_other_attributes"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Seeking/telling and other attributes</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:autoflush">autoflush</A></B></DT>
-<DD>
-<I>Instance method.</I>
-No-op, provided for OO compatibility.
-
-<P><DT><B><A NAME="item:binmode">binmode</A></B></DT>
-<DD>
-<I>Instance method.</I>
-No-op, provided for OO compatibility.
-
-<P><DT><B><A NAME="item:clearerr">clearerr</A></B></DT>
-<DD>
-<I>Instance method.</I> Clear the error and EOF flags. A no-op.
-
-<P><DT><B><A NAME="item:eof">eof</A></B></DT>
-<DD>
-<I>Instance method.</I> Are we at end of file?
-
-<P><DT><B><A NAME="item:seek">seek POS,WHENCE</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Seek to a given position in the stream.
-Only a WHENCE of 0 (SEEK_SET) is supported.
-
-<P><DT><B><A NAME="item:tell">tell</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the current position in the stream, as a numeric offset.
-
-<P><DT><B><A NAME="item:setpos">setpos POS</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Seek to a given position in the array, using the opaque getpos() value.
-Don't expect this to be a number.
-
-<P><DT><B><A NAME="item:getpos">getpos</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the current position in the array, as an opaque value.
-Don't expect this to be a number.
-
-<P><DT><B><A NAME="item:aref">aref</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return a reference to the underlying array.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Id$
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-
-<P><HR>
-<A NAME="Principal_author"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Principal author</H3></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>).
-President, ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-
-<P><HR>
-<A NAME="Other_contributors"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Other contributors</H3></A>
-
-
-<P>Thanks to the following individuals for their invaluable contributions
-(if I've forgotten or misspelled your name, please email me!):
-
-
-<P><I>Andy Glew,</I>
-for suggesting <CODE>getc()</CODE>.
-
-
-<P><I>Brandon Browning,</I>
-for suggesting <CODE>opened()</CODE>.
-
-
-<P><I>Eric L. Brine,</I>
-for his offset-using read() and write() implementations.
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:47:01 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Stringy.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Stringy.pm.html
deleted file mode 100644
index fb14ddf..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Stringy.pm.html
+++ /dev/null
@@ -1,315 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO-stringy</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO-stringy</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#INSTALLATION">INSTALLATION</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-<LI> <A HREF="#TO_DO">TO DO</A>
-<LI> <A HREF="#CHANGE_LOG">CHANGE LOG</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO-stringy - I/O on in-core objects like strings and arrays
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- IO::
- ::AtomicFile adpO Write a file which is updated atomically ERYQ
- ::Lines bdpO I/O handle to read/write to array of lines ERYQ
- ::Scalar RdpO I/O handle to read/write to a string ERYQ
- ::ScalarArray RdpO I/O handle to read/write to array of scalars ERYQ
- ::Wrap RdpO Wrap old-style FHs in standard OO interface ERYQ
- ::WrapTie adpO Tie your handles & retain full OO interface ERYQ
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This toolkit primarily provides modules for performing both traditional
-and object-oriented i/o) on things <I>other</I> than normal filehandles;
-in particular, <A HREF="../IO/Scalar.pm.html">IO::Scalar</A>, <A HREF="../IO/ScalarArray.pm.html">IO::ScalarArray</A>,
-and <A HREF="../IO/Lines.pm.html">IO::Lines</A>.
-
-
-<P>If you have access to tie(), these classes will make use of the
-<A HREF="../IO/WrapTie.pm.html">IO::WrapTie</A> module to inherit a convenient new_tie()
-constructor. It also exports a nice wraptie() function.
-
-
-<P>In the more-traditional IO::Handle front, we
-have <A HREF="../IO/AtomicFile.pm.html">IO::AtomicFile</A>
-which may be used to painlessly create files which are updated
-atomically.
-
-
-<P>And in the "this-may-prove-useful" corner, we have <A HREF="../IO/Wrap.pm.html">IO::Wrap</A>,
-whose exported wraphandle() function will clothe anything that's not
-a blessed object in an IO::Handle-like wrapper... so you can just
-use OO syntax and stop worrying about whether your function's caller
-handed you a string, a globref, or a FileHandle.
-
-
-
-<P><HR>
-<A NAME="INSTALLATION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> INSTALLATION</H2></A>
-
-
-<P>Most of you already know the drill...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- perl Makefile.PL
- make test
- make install
-</PRE></FONT>
-
-<P>For everyone else out there...
-if you've never installed Perl code before, or you're trying to use
-this in an environment where your sysadmin or ISP won't let you do
-interesting things, <B>relax:</B> since this module contains no binary
-extensions, you can cheat. That means copying the directory tree
-under my "./lib" directory into someplace where your script can "see"
-it. For example, under Linux:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- cp -r IO-stringy-1.234/lib/* /path/to/my/perl/
-
-Now, in your Perl code, do this:
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- use lib "/path/to/my/perl";
- use IO::Scalar; ### or whatever
-</PRE></FONT>
-
-<P>Ok, now you've been told. At this point, anyone who whines about
-not being given enough information gets an unflattering haiku
-written about them in the next change log. I'll do it.
-Don't think I won't.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Id$
-
-
-
-<P><HR>
-<A NAME="TO_DO"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> TO DO</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:2000_08_02_Finalize_support">(2000/08/02) Finalize $/ support</A></B></DT>
-<DD>
-Graham Barr submitted this patch half a <I>year</I> ago;
-Like a moron, I lost his message under a ton of others,
-and only now have the experimental implementation done.
-
-
-<P>Will the sudden sensitivity to $/ hose anyone out there?
-I'm worried, so you have to enable it explicitly.
-
-<P><DT><B><A NAME="item:2000_09_28_Separate_read_write_cursors">(2000/09/28) Separate read/write cursors?</A></B></DT>
-<DD>
-Binkley sent me a very interesting variant of IO::Scalar which
-maintains two separate cursors on the data, one for reading
-and one for writing. Quoth he:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Isn't it the case that real operating system file descriptors
- maintain an independent read and write file position (and
- seek(2) resets them both)?
-</PRE></FONT>
-
-<P>He also pointed out some issues with his implementation:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- For example, what does eof or tell return? The read position or
- the write position? (I assumed read position was more important).
-</PRE></FONT>
-
-<P>Your opinions on this are most welcome.
-(Me, I'm just squeamish that this will break some code
-which depends on the existing behavior, and that attempts to
-maintain backwards-compatibility will slow down the code.
-But I'll give it a shot.)
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="CHANGE_LOG"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> CHANGE LOG</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Version">Version 1.219 (2001/02/23)</A></B></DT>
-<DD>
-IO::Scalar objects can now be made sensitive to $/ .
-Pains were taken to keep the fast code fast while adding this feature.
-<I>Cheers to Graham Barr for submitting his patch;
-jeers to me for losing his email for 6 months.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.218 (2001/02/23)</A></B></DT>
-<DD>
-IO::Scalar has a new sysseek() method.
-<I>Thanks again to Richard Jones.</I>
-
-
-<P>New "TO DO" section, because people who submit patches/ideas should
-at least know that they're in the system... and that I won't lose
-their stuff. Please read it.
-
-
-<P>New entries in <A HREF="#AUTHOR">AUTHOR</A>.
-Please read those too.
-
-<P><DT><B><A NAME="item:Version">Version 1.216 (2000/09/28)</A></B></DT>
-<DD>
-<B>IO::Scalar and IO::ScalarArray now inherit from IO::Handle.</B>
-I thought I'd remembered a problem with this ages ago, related to
-the fact that these IO:: modules don't have "real" filehandles,
-but the problem apparently isn't surfacing now.
-If you suddenly encounter Perl warnings during global destruction
-(especially if you're using tied filehandles), then please let me know!
-<I>Thanks to B. K. Oxley (binkley) for this.</I>
-
-
-<P><B>Nasty bug fixed in IO::Scalar::write().</B>
-Apparently, the offset and the number-of-bytes arguments were,
-for all practical purposes, <I>reversed.</I> You were okay if
-you did all your writing with print(), but boy was <I>this</I> a stupid bug!
-<I>Thanks to Richard Jones for finding this one.
-For you, Rich, a double-length haiku:</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Newspaper headline
- typeset by dyslexic man
- loses urgency
-
- BABY EATS FISH is
- simply not equivalent
- to FISH EATS BABY
-</PRE></FONT>
-
-<P><B>New sysread and syswrite methods for IO::Scalar.</B>
-<I>Thanks again to Richard Jones for this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.215 (2000/09/05)</A></B></DT>
-<DD>
-Added 'bool' overload to '""' overload, so object always evaluates
-to true. (Whew. Glad I caught this before it went to CPAN.)
-
-<P><DT><B><A NAME="item:Version">Version 1.214 (2000/09/03)</A></B></DT>
-<DD>
-Evaluating an IO::Scalar in a string context now yields
-the underlying string.
-<I>Thanks to B. K. Oxley (binkley) for this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.213 (2000/08/16)</A></B></DT>
-<DD>
-Minor documentation fixes.
-
-<P><DT><B><A NAME="item:Version">Version 1.212 (2000/06/02)</A></B></DT>
-<DD>
-Fixed IO::InnerFile incompatibility with Perl5.004.
-<I>Thanks to many folks for reporting this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.210 (2000/04/17)</A></B></DT>
-<DD>
-Added flush() and other no-op methods.
-<I>Thanks to Doru Petrescu for suggesting this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.209 (2000/03/17)</A></B></DT>
-<DD>
-Small bug fixes.
-
-<P><DT><B><A NAME="item:Version">Version 1.208 (2000/03/14)</A></B></DT>
-<DD>
-Incorporated a number of contributed patches and extensions,
-mostly related to speed hacks, support for "offset", and
-WRITE/CLOSE methods.
-<I>Thanks to Richard Jones, Doru Petrescu, and many others.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.206 (1999/04/18)</A></B></DT>
-<DD>
-Added creation of ./testout when Makefile.PL is run.
-
-<P><DT><B><A NAME="item:Version">Version 1.205 (1999/01/15)</A></B></DT>
-<DD>
-Verified for Perl5.005.
-
-<P><DT><B><A NAME="item:Version">Version 1.202 (1998/04/18)</A></B></DT>
-<DD>
-New IO::WrapTie and IO::AtomicFile added.
-
-<P><DT><B><A NAME="item:Version">Version 1.110</A></B></DT>
-<DD>
-Added IO::WrapTie.
-
-<P><DT><B><A NAME="item:Version">Version 1.107</A></B></DT>
-<DD>
-Added IO::Lines, and made some bug fixes to IO::ScalarArray.
-Also, added getc().
-
-<P><DT><B><A NAME="item:Version">Version 1.105</A></B></DT>
-<DD>
-No real changes; just upgraded IO::Wrap to have a $VERSION string.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Primary_Maintainer">Primary Maintainer</A></B></DT>
-<DD>
-Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>).
-President, ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-<P><DT><B><A NAME="item:Unofficial_Co-Authors">Unofficial Co-Authors</A></B></DT>
-<DD>
-For all their bug reports and patch submissions, the following
-are officially recognized:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Richard Jones
- B. K. Oxley (binkley)
- Doru Petrescu
-</PRE></FONT>
-</DL>
-
-
-<P>Enjoy. Yell if it breaks.
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:47:04 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Wrap.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Wrap.pm.html
deleted file mode 100644
index ff57b42..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/Wrap.pm.html
+++ /dev/null
@@ -1,169 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO::Wrap</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO::Wrap</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#NOTES">NOTES</A>
-<LI> <A HREF="#WARNINGS">WARNINGS</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO::Wrap - wrap raw filehandles in IO::Handle interface
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::Wrap;
-
- # Do stuff with any kind of filehandle (including a bare globref), or
- # any kind of blessed object that responds to a print() message.
- #
- sub do_stuff {
- my $fh = shift;
-
- ### At this point, we have no idea what the user gave us...
- ### a globref? a FileHandle? a scalar filehandle name?
-
- $fh = wraphandle($fh);
-
- ### At this point, we know we have an IO::Handle-like object!
-
- $fh->print("Hey there!");
- ...
- }
-
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Let's say you want to write some code which does I/O, but you don't
-want to force the caller to provide you with a FileHandle or IO::Handle
-object. You want them to be able to say:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- do_stuff(\*STDOUT);
- do_stuff('STDERR');
- do_stuff($some_FileHandle_object);
- do_stuff($some_IO_Handle_object);
-</PRE></FONT>
-
-<P>And even:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- do_stuff($any_object_with_a_print_method);
-</PRE></FONT>
-
-<P>Sure, one way to do it is to force the caller to use tiehandle().
-But that puts the burden on them. Another way to do it is to
-use <B>IO::Wrap</B>, which provides you with the following functions:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:wraphandle">wraphandle SCALAR</A></B></DT>
-<DD>
-This function will take a single argument, and "wrap" it based on
-what it seems to be...
-
-
-
-<UL>
-<P><LI>
-<P><B>A raw scalar filehandle name,</B> like <CODE>"STDOUT"</CODE> or <CODE>"Class::HANDLE"</CODE>.
-In this case, the filehandle name is wrapped in an IO::Wrap object,
-which is returned.
-
-<P><LI>
-<P><B>A raw filehandle glob,</B> like <CODE>\*STDOUT</CODE>.
-In this case, the filehandle glob is wrapped in an IO::Wrap object,
-which is returned.
-
-<P><LI>
-<P><B>A blessed FileHandle object.</B>
-In this case, the FileHandle is wrapped in an IO::Wrap object if and only
-if your FileHandle class does not support the <CODE>read()</CODE> method.
-
-<P><LI>
-<P><B>Any other kind of blessed object,</B> which is assumed to be already
-conformant to the IO::Handle interface.
-In this case, you just get back that object.
-
-</UL>
-
-</DL>
-
-
-<P>If you get back an IO::Wrap object, it will obey a basic subset of
-the IO:: interface. That is, the following methods (note: I said
-<I>methods</I>, not named operators) should work on the thing you get back:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- close
- getline
- getlines
- print ARGS...
- read BUFFER,NBYTES
- seek POS,WHENCE
- tell
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-<P>Clearly, when wrapping a raw external filehandle (like \*STDOUT),
-I didn't want to close the file descriptor when the "wrapper" object is
-destroyed... since the user might not appreciate that! Hence,
-there's no DESTROY method in this class.
-
-
-<P>When wrapping a FileHandle object, however, I believe that Perl will
-invoke the FileHandle::DESTROY when the last reference goes away,
-so in that case, the filehandle is closed if the wrapped FileHandle
-really was the last reference to it.
-
-
-
-<P><HR>
-<A NAME="WARNINGS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> WARNINGS</H2></A>
-
-
-<P>This module does not allow you to wrap filehandle names which are given
-as strings that lack the package they were opened in. That is, if a user
-opens FOO in package Foo, they must pass it to you either as <CODE>\*FOO</CODE>
-or as <CODE>"Foo::FOO"</CODE>. However, <CODE>"STDIN"</CODE> and friends will work just fine.
-
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>).
-President, ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:47:10 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/WrapTie.pm.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/WrapTie.pm.html
deleted file mode 100644
index 8101076..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/WrapTie.pm.html
+++ /dev/null
@@ -1,418 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>IO::WrapTie</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>IO::WrapTie</H1>
-</A><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#HOW_IT_ALL_WORKS">HOW IT ALL WORKS</A>
-<UL>
-<LI> <A HREF="#The_data_structures">The data structures</A>
-<LI> <A HREF="#How_wraptie_works">How wraptie() works</A>
-<LI> <A HREF="#How_I_O_operators_work_on_the_master">How I/O operators work (on the master)</A>
-<LI> <A HREF="#How_methods_work_on_the_master">How methods work (on the master)</A>
-</UL>
-<LI> <A HREF="#NOTES">NOTES</A>
-<LI> <A HREF="#WARNINGS">WARNINGS</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>IO::WrapTie - wrap tieable objects in IO::Handle interface
-
-
-<P><I>This is currently Alpha code, released for comments.
- Please give me your feedback!</I>
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>First of all, you'll need tie(), so:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- require 5.004;
-</PRE></FONT>
-
-<P><I>Function interface (experimental).</I>
-Use this with any existing class...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::WrapTie;
- use FooHandle; # implements TIEHANDLE interface
-
- # Suppose we want a "FooHandle->new(&FOO_RDWR, 2)".
- # We can instead say...
-
- $FH = wraptie('FooHandle', &FOO_RDWR, 2);
-
- # Now we can use...
- print $FH "Hello, "; # traditional operator syntax...
- $FH->print("world!\n"); # ...and OO syntax as well!
-</PRE></FONT>
-
-<P><I>OO interface (preferred).</I>
-You can inherit from the IO::WrapTie::Slave mixin to get a
-nifty <CODE>new_tie()</CODE> constructor...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- #------------------------------
- package FooHandle; # a class which can TIEHANDLE
-
- use IO::WrapTie;
- @ISA = qw(IO::WrapTie::Slave); # inherit new_tie()
- ...
-
-
- #------------------------------
- package main;
-
- $FH = FooHandle->new_tie(&FOO_RDWR, 2); # $FH is an IO::WrapTie::Master
- print $FH "Hello, "; # traditional operator syntax
- $FH->print("world!\n"); # OO syntax
-</PRE></FONT>
-
-<P>See IO::Scalar as an example. It also shows you how to create classes
-which work both with and without 5.004.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Suppose you have a class <CODE>FooHandle</CODE>, where...
-
-
-
-<UL>
-<P><LI>
-<P><B>FooHandle does not inherit from IO::Handle;</B> that is, it performs
-filehandle-like I/O, but to something other than an underlying
-file descriptor. Good examples are IO::Scalar (for printing to a
-string) and IO::Lines (for printing to an array of lines).
-
-<P><LI>
-<P><B>FooHandle implements the TIEHANDLE interface</B> (see <A HREF="perltie.pm.html">perltie</A>);
-that is, it provides methods TIEHANDLE, GETC, PRINT, PRINTF,
-READ, and READLINE.
-
-<P><LI>
-<P><B>FooHandle implements the traditional OO interface</B> of
-FileHandle and IO::Handle; i.e., it contains methods like getline(),
-read(), print(), seek(), tell(), eof(), etc.
-
-</UL>
-
-
-<P>Normally, users of your class would have two options:
-
-
-
-<UL>
-<P><LI>
-<P><B>Use only OO syntax,</B> and forsake named I/O operators like 'print'.
-
-<P><LI>
-<P><B>Use with tie,</B> and forsake treating it as a first-class object
-(i.e., class-specific methods can only be invoked through the underlying
-object via tied()... giving the object a "split personality").
-
-</UL>
-
-
-<P>But now with IO::WrapTie, you can say:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $WT = wraptie('FooHandle', &FOO_RDWR, 2);
- $WT->print("Hello, world\n"); # OO syntax
- print $WT "Yes!\n"; # Named operator syntax too!
- $WT->weird_stuff; # Other methods!
-</PRE></FONT>
-
-<P>And if you're authoring a class like FooHandle, just have it inherit
-from <CODE>IO::WrapTie::Slave</CODE> and that first line becomes even prettier:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $WT = FooHandle->new_tie(&FOO_RDWR, 2);
-</PRE></FONT>
-
-<P><B>The bottom line:</B> now, almost any class can look and work exactly like
-an IO::Handle... and be used both with OO and non-OO filehandle syntax.
-
-
-
-<P><HR>
-<A NAME="HOW_IT_ALL_WORKS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> HOW IT ALL WORKS</H2></A>
-
-
-
-<P><HR>
-<A NAME="The_data_structures"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> The data structures</H3></A>
-
-
-<P>Consider this example code, using classes in this distribution:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use IO::Scalar;
- use IO::WrapTie;
-
- $WT = wraptie('IO::Scalar',\$s);
- print $WT "Hello, ";
- $WT->print("world!\n");
-</PRE></FONT>
-
-<P>In it, the wraptie() function creates a data structure as follows:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- * $WT is a blessed reference to a tied filehandle
- $WT glob; that glob is tied to the "Slave" object.
- | * You would do all your i/o with $WT directly.
- |
- |
- | ,---isa--> IO::WrapTie::Master >--isa--> IO::Handle
- V /
- .-------------.
- | |
- | | * Perl i/o operators work on the tied object,
- | "Master" | invoking the TIEHANDLE methods.
- | | * Method invocations are delegated to the tied
- | | slave.
- `-------------'
- |
- tied(*$WT) | .---isa--> IO::WrapTie::Slave
- V /
- .-------------.
- | |
- | "Slave" | * Instance of FileHandle-like class which doesn't
- | | actually use file descriptors, like IO::Scalar.
- | IO::Scalar | * The slave can be any kind of object.
- | | * Must implement the TIEHANDLE interface.
- `-------------'
-</PRE></FONT>
-
-<P><I>NOTE:</I> just as an IO::Handle is really just a blessed reference to a
-<I>traditional</I> filehandle glob... so also, an IO::WrapTie::Master
-is really just a blessed reference to a filehandle
-glob <I>which has been tied to some "slave" class.</I>
-
-
-
-<P><HR>
-<A NAME="How_wraptie_works"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> How wraptie() works</H3></A>
-
-
-
-<OL>
-<P><LI>
-<P>The call to function <CODE>wraptie(SLAVECLASS, TIEARGS...)</CODE> is
-passed onto <CODE>IO::WrapTie::Master::new()</CODE>.
-Note that class IO::WrapTie::Master is a subclass of IO::Handle.
-
-<P><LI>
-<P>The <CODE>IO::WrapTie::Master::new</CODE> method creates a new IO::Handle object,
-reblessed into class IO::WrapTie::Master. This object is the <I>master</I>,
-which will be returned from the constructor. At the same time...
-
-<P><LI>
-<P>The <CODE>new</CODE> method also creates the <I>slave</I>: this is an instance
-of SLAVECLASS which is created by tying the master's IO::Handle
-to SLAVECLASS via <CODE>tie(HANDLE, SLAVECLASS, TIEARGS...)</CODE>.
-This call to <CODE>tie()</CODE> creates the slave in the following manner:
-
-<P><LI>
-<P>Class SLAVECLASS is sent the message <CODE>TIEHANDLE(TIEARGS...)</CODE>; it
-will usually delegate this to <CODE>SLAVECLASS::new(TIEARGS...)</CODE>, resulting
-in a new instance of SLAVECLASS being created and returned.
-
-<P><LI>
-<P>Once both master and slave have been created, the master is returned
-to the caller.
-
-</OL>
-
-
-
-<P><HR>
-<A NAME="How_I_O_operators_work_on_the_master"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> How I/O operators work (on the master)</H3></A>
-
-
-<P>Consider using an i/o operator on the master:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- print $WT "Hello, world!\n";
-</PRE></FONT>
-
-<P>Since the master ($WT) is really a [blessed] reference to a glob,
-the normal Perl i/o operators like <CODE>print</CODE> may be used on it.
-They will just operate on the symbol part of the glob.
-
-
-<P>Since the glob is tied to the slave, the slave's PRINT method
-(part of the TIEHANDLE interface) will be automatically invoked.
-
-
-<P>If the slave is an IO::Scalar, that means IO::Scalar::PRINT will be
-invoked, and that method happens to delegate to the <CODE>print()</CODE> method
-of the same class. So the <I>real</I> work is ultimately done by
-IO::Scalar::print().
-
-
-
-<P><HR>
-<A NAME="How_methods_work_on_the_master"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> How methods work (on the master)</H3></A>
-
-
-<P>Consider using a method on the master:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $WT->print("Hello, world!\n");
-</PRE></FONT>
-
-<P>Since the master ($WT) is blessed into the class IO::WrapTie::Master,
-Perl first attempts to find a <CODE>print()</CODE> method there. Failing that,
-Perl next attempts to find a <CODE>print()</CODE> method in the superclass,
-IO::Handle. It just so happens that there <I>is</I> such a method;
-that method merely invokes the <CODE>print</CODE> i/o operator on the self object...
-and for that, see above!
-
-
-<P>But let's suppose we're dealing with a method which <I>isn't</I> part
-of IO::Handle... for example:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $sref = $WT->sref;
-</PRE></FONT>
-
-<P>In this case, the intuitive behavior is to have the master delegate the
-method invocation to the slave (now do you see where the designations
-come from?). This is indeed what happens: IO::WrapTie::Master contains
-an AUTOLOAD method which performs the delegation.
-
-
-<P>So: when <CODE>sref()</CODE> can't be found in IO::Handle, the AUTOLOAD method
-of IO::WrapTie::Master is invoked, and the standard behavior of
-delegating the method to the underlying slave (here, an IO::Scalar)
-is done.
-
-
-<P>Sometimes, to get this to work properly, you may need to create
-a subclass of IO::WrapTie::Master which is an effective master for
-<I>your</I> class, and do the delegation there.
-
-
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-<P><B>Why not simply use the object's OO interface?</B>
- Because that means forsaking the use of named operators
-like print(), and you may need to pass the object to a subroutine
-which will attempt to use those operators:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $O = FooHandle->new(&FOO_RDWR, 2);
- $O->print("Hello, world\n"); # OO syntax is okay, BUT....
-
- sub nope { print $_[0] "Nope!\n" }
- X nope($O); # ERROR!!! (not a glob ref)
-
-</PRE></FONT>
-
-<P><B>Why not simply use tie()?</B>
- Because (1) you have to use tied() to invoke methods in the
-object's public interface (yuck), and (2) you may need to pass
-the tied symbol to another subroutine which will attempt to treat
-it in an OO-way... and that will break it:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- tie *T, 'FooHandle', &FOO_RDWR, 2;
- print T "Hello, world\n"; # Operator is okay, BUT...
-
- tied(*T)->other_stuff; # yuck! AND...
-
- sub nope { shift->print("Nope!\n") }
- X nope(\*T); # ERROR!!! (method "print" on unblessed ref)
-</PRE></FONT>
-
-<P><B>Why a master and slave?
- Why not simply write FooHandle to inherit from IO::Handle?</B>
- I tried this, with an implementation similar to that of IO::Socket.
-The problem is that <I>the whole point is to use this with objects
-that don't have an underlying file/socket descriptor.</I>.
-Subclassing IO::Handle will work fine for the OO stuff, and fine with
-named operators <I>if</I> you tie()... but if you just attempt to say:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $IO = FooHandle->new(&FOO_RDWR, 2);
- print $IO "Hello!\n";
-</PRE></FONT>
-
-<P>you get a warning from Perl like:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Filehandle GEN001 never opened
-</PRE></FONT>
-
-<P>because it's trying to do system-level i/o on an (unopened) file
-descriptor. To avoid this, you apparently have to tie() the handle...
-which brings us right back to where we started! At least the
-IO::WrapTie mixin lets us say:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $IO = FooHandle->new_tie(&FOO_RDWR, 2);
- print $IO "Hello!\n";
-</PRE></FONT>
-
-<P>and so is not <I>too</I> bad. <CODE>:-)</CODE>
-
-
-
-<P><HR>
-<A NAME="WARNINGS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> WARNINGS</H2></A>
-
-
-<P>Remember: this stuff is for doing FileHandle-like i/o on things
-<I>without underlying file descriptors</I>. If you have an underlying
-file descriptor, you're better off just inheriting from IO::Handle.
-
-
-<P><B>Be aware that new_tie() always returns an instance of a
-kind of IO::WrapTie::Master...</B> it does <B>not</B> return an instance
-of the i/o class you're tying to!
-
-
-<P>Invoking some methods on the master object causes AUTOLOAD to delegate
-them to the slave object... so it <I>looks</I> like you're manipulating a
-"FooHandle" object directly, but you're not.
-
-
-<P>I have not explored all the ramifications of this use of tie().
-<I>Here there be dragons</I>.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>).
-President, ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Fri Feb 23 04:47:13 2001 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/h1bullet.gif b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/h1bullet.gif
deleted file mode 100644
index 8698643..0000000
Binary files a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/h1bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/h2bullet.gif b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/h2bullet.gif
deleted file mode 100644
index d26510c..0000000
Binary files a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/h2bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/zeegee.gif b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/zeegee.gif
deleted file mode 100644
index f6001a5..0000000
Binary files a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/IO/icons/zeegee.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index-menu.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index-menu.html
deleted file mode 100644
index 890a1f6..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index-menu.html
+++ /dev/null
@@ -1,31 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>perlmod</TITLE>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF" LINK="#CC3366" ALINK="#FF6666" VLINK="#993366">
-<FONT FACE="sans-serif"><TABLE>
-
-<TR VALIGN="TOP"><TH ALIGN="LEFT"><FONT FACE="sans-serif"><B>Overview</B></FONT></TH>
-<TR VALIGN="TOP"><TD><A HREF="IO/Stringy.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::Stringy</FONT></A></TD></TR>
-</TABLE>
-<HR>
-<TABLE>
-
-<TR VALIGN="TOP"><TH ALIGN="LEFT"><FONT FACE="sans-serif"><B>Modules</B></FONT></TH>
-<TR VALIGN="TOP"><TD><A HREF="IO/AtomicFile.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::AtomicFile</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="IO/InnerFile.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::InnerFile</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="IO/Lines.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::Lines</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="IO/Scalar.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::Scalar</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="IO/ScalarArray.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::ScalarArray</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="IO/Wrap.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::Wrap</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="IO/WrapTie.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">IO::WrapTie</FONT></A></TD></TR>
-</TABLE>
-<HR>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.html b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.html
deleted file mode 100644
index bac53b8..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<HEAD>
-<TITLE>perlmod</TITLE>
-</HEAD>
-<FRAMESET COLS="20%,*" BORDER=1 FRAMEBORDER=1 FRAMESPACING=10>
- <FRAME NAME="perlmod.menu" SRC="index-menu.html">
- <FRAME NAME="perlmod.content" SRC="IO/Stringy.pm.html">
-</FRAMESET>
-
-<NOFRAMES>
- <BODY>
- Go <A HREF="menu.html">here</A>
- </BODY>
-</NOFRAMES>
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.menu b/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.menu
deleted file mode 100644
index 92466a8..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/docs/index.menu
+++ /dev/null
@@ -1,30 +0,0 @@
-MENU perlmod
-
-SECTION Overview
-
-ITEM IO::Stringy
-HREF IO/Stringy.pm.html
-
-SECTION Modules
-
-ITEM IO::AtomicFile
-HREF IO/AtomicFile.pm.html
-
-ITEM IO::InnerFile
-HREF IO/InnerFile.pm.html
-
-ITEM IO::Lines
-HREF IO/Lines.pm.html
-
-ITEM IO::Scalar
-HREF IO/Scalar.pm.html
-
-ITEM IO::ScalarArray
-HREF IO/ScalarArray.pm.html
-
-ITEM IO::Wrap
-HREF IO/Wrap.pm.html
-
-ITEM IO::WrapTie
-HREF IO/WrapTie.pm.html
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/AtomicFile.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/AtomicFile.pm
deleted file mode 100644
index b535d03..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/AtomicFile.pm
+++ /dev/null
@@ -1,190 +0,0 @@
-package IO::AtomicFile;
-
-### DOCUMENTATION AT BOTTOM OF FILE
-
-# Be strict:
-use strict;
-
-# External modules:
-use IO::File;
-
-
-#------------------------------
-#
-# GLOBALS...
-#
-#------------------------------
-use vars qw($VERSION @ISA);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-# Inheritance:
-@ISA = qw(IO::File);
-
-
-#------------------------------
-# new ARGS...
-#------------------------------
-# Class method, constructor.
-# Any arguments are sent to open().
-#
-sub new {
- my $class = shift;
- my $self = $class->SUPER::new();
- ${*$self}{'io_atomicfile_suffix'} = '';
- $self->open(@_) if @_;
- $self;
-}
-
-#------------------------------
-# DESTROY
-#------------------------------
-# Destructor.
-#
-sub DESTROY {
- shift->close(1); # like close, but raises fatal exception on failure
-}
-
-#------------------------------
-# open PATH, MODE
-#------------------------------
-# Class/instance method.
-#
-sub open {
- my ($self, $path, $mode) = @_;
- ref($self) or $self = $self->new; # now we have an instance!
-
- # Create tmp path, and remember this info:
- my $temp = "${path}..TMP" . ${*$self}{'io_atomicfile_suffix'};
- ${*$self}{'io_atomicfile_temp'} = $temp;
- ${*$self}{'io_atomicfile_path'} = $path;
-
- # Open the file! Returns filehandle on success, for use as a constructor:
- $self->SUPER::open($temp, $mode) ? $self : undef;
-}
-
-#------------------------------
-# _closed [YESNO]
-#------------------------------
-# Instance method, private.
-# Are we already closed? Argument sets new value, returns previous one.
-#
-sub _closed {
- my $self = shift;
- my $oldval = ${*$self}{'io_atomicfile_closed'};
- ${*$self}{'io_atomicfile_closed'} = shift if @_;
- $oldval;
-}
-
-#------------------------------
-# close
-#------------------------------
-# Instance method.
-# Close the handle, and rename the temp file to its final name.
-#
-sub close {
- my ($self, $die) = @_;
- unless ($self->_closed(1)) { # sentinel...
- $self->SUPER::close();
- rename(${*$self}{'io_atomicfile_temp'},
- ${*$self}{'io_atomicfile_path'})
- or ($die ? die "close atomic file: $!\n" : return undef);
- }
- 1;
-}
-
-#------------------------------
-# delete
-#------------------------------
-# Instance method.
-# Close the handle, and delete the temp file.
-#
-sub delete {
- my $self = shift;
- unless ($self->_closed(1)) { # sentinel...
- $self->SUPER::close();
- return unlink(${*$self}{'io_atomicfile_temp'});
- }
- 1;
-}
-
-#------------------------------
-# detach
-#------------------------------
-# Instance method.
-# Close the handle, but DO NOT delete the temp file.
-#
-sub detach {
- my $self = shift;
- $self->SUPER::close() unless ($self->_closed(1));
- 1;
-}
-
-#------------------------------
-1;
-__END__
-
-
-=head1 NAME
-
-IO::AtomicFile - write a file which is updated atomically
-
-
-=head1 SYNOPSIS
-
- use IO::AtomicFile;
-
- # Write a temp file, and have it install itself when closed:
- my $FH = IO::AtomicFile->open("bar.dat", "w");
- print $FH "Hello!\n";
- $FH->close || die "couldn't install atomic file: $!";
-
- # Write a temp file, but delete it before it gets installed:
- my $FH = IO::AtomicFile->open("bar.dat", "w");
- print $FH "Hello!\n";
- $FH->delete;
-
- # Write a temp file, but neither install it nor delete it:
- my $FH = IO::AtomicFile->open("bar.dat", "w");
- print $FH "Hello!\n";
- $FH->detach;
-
-
-=head1 DESCRIPTION
-
-This module is intended for people who need to update files
-reliably in the face of unexpected program termination.
-
-For example, you generally don't want to be halfway in the middle of
-writing I</etc/passwd> and have your program terminate! Even
-the act of writing a single scalar to a filehandle is I<not> atomic.
-
-But this module gives you true atomic updates, via rename().
-When you open a file I</foo/bar.dat> via this module, you are I<actually>
-opening a temporary file I</foo/bar.dat..TMP>, and writing your
-output there. The act of closing this file (either explicitly
-via close(), or implicitly via the destruction of the object)
-will cause rename() to be called... therefore, from the point
-of view of the outside world, the file's contents are updated
-in a single time quantum.
-
-To ensure that problems do not go undetected, the "close" method
-done by the destructor will raise a fatal exception if the rename()
-fails. The explicit close() just returns undef.
-
-You can also decide at any point to trash the file you've been
-building.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-
-=head1 REVISION
-
-$Revision: 1.999 $
-
-=cut
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/InnerFile.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/InnerFile.pm
deleted file mode 100644
index db7cd32..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/InnerFile.pm
+++ /dev/null
@@ -1,274 +0,0 @@
-package IO::InnerFile;
-
-=head1 NAME
-
-IO::InnerFile - define a file inside another file
-
-
-=head1 SYNOPSIS
-
-
- ### Read a subset of a file:
- $inner = IO::InnerFile->new($fh, $start, $length);
- while (<$inner>) {
- ...
- }
-
-
-=head1 DESCRIPTION
-
-If you have a filehandle that can seek() and tell(), then you
-can open an IO::InnerFile on a range of the underlying file.
-
-
-=head1 PUBLIC INTERFACE
-
-=over
-
-=cut
-
-use Symbol;
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-#------------------------------
-
-=item new FILEHANDLE, [START, [LENGTH]]
-
-I<Class method, constructor.>
-Create a new inner-file opened on the given FILEHANDLE,
-from bytes START to START+LENGTH. Both START and LENGTH
-default to 0; negative values are silently coerced to zero.
-
-Note that FILEHANDLE must be able to seek() and tell(), in addition
-to whatever other methods you may desire for reading it.
-
-=cut
-
-sub new {
- my ($class, $fh, $start, $lg) = @_;
- $start = 0 if (!$start or ($start < 0));
- $lg = 0 if (!$lg or ($lg < 0));
-
- ### Create the underlying "object":
- my $a = {
- FH => $fh,
- CRPOS => 0,
- START => $start,
- LG => $lg,
- };
-
- ### Create a new filehandle tied to this object:
- $fh = gensym;
- tie(*$fh, $class, $a);
- return bless($fh, $class);
-}
-
-sub TIEHANDLE {
- my ($class, $data) = @_;
- return bless($data, $class);
-}
-
-sub DESTROY {
- my ($self) = @_;
- $self->close() if (ref($self) eq 'SCALAR');
-}
-
-#------------------------------
-
-=item set_length LENGTH
-
-=item get_length
-
-=item add_length NBYTES
-
-I<Instance methods.>
-Get/set the virtual length of the inner file.
-
-=cut
-
-sub set_length { tied(${$_[0]})->{LG} = $_[1]; }
-sub get_length { tied(${$_[0]})->{LG}; }
-sub add_length { tied(${$_[0]})->{LG} += $_[1]; }
-
-#------------------------------
-
-=item set_start START
-
-=item get_start
-
-=item add_start NBYTES
-
-I<Instance methods.>
-Get/set the virtual start position of the inner file.
-
-=cut
-
-sub set_start { tied(${$_[0]})->{START} = $_[1]; }
-sub get_start { tied(${$_[0]})->{START}; }
-sub set_end { tied(${$_[0]})->{LG} = $_[1] - tied(${$_[0]})->{START}; }
-sub get_end { tied(${$_[0]})->{LG} + tied(${$_[0]})->{START}; }
-
-
-#------------------------------
-
-=item binmode
-
-=item close
-
-=item flush
-
-=item getc
-
-=item getline
-
-=item print LIST
-
-=item printf LIST
-
-=item read BUF, NBYTES
-
-=item readline
-
-=item seek OFFFSET, WHENCE
-
-=item tell
-
-=item write ARGS...
-
-I<Instance methods.>
-Standard filehandle methods.
-
-=cut
-
-sub write { shift->WRITE(@_) }
-sub print { shift->PRINT(@_) }
-sub printf { shift->PRINTF(@_) }
-sub flush { 1; }
-sub binmode { 1; }
-sub getc { return GETC(tied(${$_[0]}) ); }
-sub read { return READ( tied(${$_[0]}), @_[1,2,3] ); }
-sub readline { return READLINE( tied(${$_[0]}) ); }
-sub getline { return READLINE( tied(${$_[0]}) ); }
-sub close { return CLOSE(tied(${$_[0]}) ); }
-
-sub seek {
- my ($self, $ofs, $whence) = @_;
- $self = tied( $$self );
-
- $self->{CRPOS} = $ofs if ($whence == 0);
- $self->{CRPOS}+= $ofs if ($whence == 1);
- $self->{CRPOS} = $self->{LG} + $ofs if ($whence == 2);
-
- $self->{CRPOS} = 0 if ($self->{CRPOS} < 0);
- $self->{CRPOS} = $self->{LG} if ($self->{CRPOS} > $self->{LG});
-}
-
-sub tell {
- return tied(${$_[0]})->{CRPOS};
-}
-
-sub WRITE {
- die "inner files can only open for reading\n";
-}
-
-sub PRINT {
- die "inner files can only open for reading\n";
-}
-
-sub PRINTF {
- die "inner files can only open for reading\n";
-}
-
-sub GETC {
- my ($self) = @_;
- return 0 if ($self->{CRPOS} >= $self->{LG});
-
- my $data;
-
- ### Save and seek...
- my $old_pos = $self->{FH}->tell;
- $self->{FH}->seek($self->{CRPOS}+$self->{START}, 0);
-
- ### ...read...
- my $lg = $self->{FH}->read($data, 1);
- $self->{CRPOS} += $lg;
-
- ### ...and restore:
- $self->{FH}->seek($old_pos, 0);
-
- $self->{LG} = $self->{CRPOS} unless ($lg);
- return ($lg ? $data : undef);
-}
-
-sub READ {
- my ($self, $undefined, $lg, $ofs) = @_;
- $undefined = undef;
-
- return 0 if ($self->{CRPOS} >= $self->{LG});
- $lg = $self->{LG} - $self->{CRPOS} if ($self->{CRPOS} + $lg > $self->{LG});
- return 0 unless ($lg);
-
- ### Save and seek...
- my $old_pos = $self->{FH}->tell;
- $self->{FH}->seek($self->{CRPOS}+$self->{START}, 0);
-
- ### ...read...
- $lg = $self->{FH}->read($_[1], $lg, $_[3] );
- $self->{CRPOS} += $lg;
-
- ### ...and restore:
- $self->{FH}->seek($old_pos, 0);
-
- $self->{LG} = $self->{CRPOS} unless ($lg);
- return $lg;
-}
-
-sub READLINE {
- my ($self) = @_;
- return undef if ($self->{CRPOS} >= $self->{LG});
-
- ### Save and seek...
- my $old_pos = $self->{FH}->tell;
- $self->{FH}->seek($self->{CRPOS}+$self->{START}, 0);
-
- ### ...read...
- my $text = $self->{FH}->getline;
-
- ### ...and restore:
- $self->{FH}->seek($old_pos, 0);
-
- #### If we detected a new EOF ...
- unless (defined $text) {
- $self->{LG} = $self->{CRPOS};
- return undef;
- }
-
- my $lg=length($text);
-
- $lg = $self->{LG} - $self->{CRPOS} if ($self->{CRPOS} + $lg > $self->{LG});
- $self->{CRPOS} += $lg;
-
- return substr($text, 0,$lg);
-}
-
-sub CLOSE { %{$_[0]}=(); }
-
-
-
-1;
-__END__
-
-=back
-
-
-=head1 AUTHOR
-
-Original version by Doru Petrescu (pdoru(a)kappa.ro).
-
-Documentation and current maintenance by Eryq (eryq(a)zeegee.com).
-
-=cut
-
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Lines.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Lines.pm
deleted file mode 100644
index f2f2f91..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Lines.pm
+++ /dev/null
@@ -1,148 +0,0 @@
-package IO::Lines;
-
-
-=head1 NAME
-
-IO::Lines - IO:: interface for reading/writing an array of lines
-
-
-=head1 SYNOPSIS
-
- use IO::Lines;
-
- # See IO::ScalarArray for details
-
-
-=head1 DESCRIPTION
-
-This class implements objects which behave just like FileHandle
-(or IO::Handle) objects, except that you may use them to write to
-(or read from) an array of lines. They can be tiehandle'd as well.
-
-This is a subclass of L<IO::ScalarArray|IO::ScalarArray>
-in which the underlying
-array has its data stored in a line-oriented-format: that is,
-every element ends in a C<"\n">, with the possible exception of the
-final element. This makes C<getline()> I<much> more efficient;
-if you plan to do line-oriented reading/printing, you want this class.
-
-The C<print()> method will enforce this rule, so you can print
-arbitrary data to the line-array: it will break the data at
-newlines appropriately.
-
-See L<IO::ScalarArray> for full usage.
-
-=cut
-
-use Carp;
-use strict;
-use IO::ScalarArray;
-use vars qw($VERSION @ISA);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-# Inheritance:
-@ISA = qw(IO::ScalarArray); # also gets us new_tie :-)
-
-
-#------------------------------
-# getline
-#------------------------------
-# Instance method, override.
-# Return the next line, or undef on end of data.
-# Can safely be called in an array context.
-# Currently, lines are delimited by "\n".
-#
-sub getline {
- my $self = shift;
- if (!defined $/) {
- return join( '' => $self->getlines );
- }
- ($/ eq "\n")
- or croak '$/ must be "\n" or undef, not ', "'$/'.";
-
- if (!$self->{Pos}) { # full line...
- return $self->{AR}[$self->{Str}++];
- }
- else { # partial line...
- my $partial = substr($self->{AR}[$self->{Str}++], $self->{Pos});
- $self->{Pos} = 0;
- return $partial;
- }
-}
-
-#------------------------------
-# getlines
-#------------------------------
-# Instance method, override.
-# Return an array comprised of the remaining lines, or () on end of data.
-# Must be called in an array context.
-# Currently, lines are delimited by "\n".
-#
-sub getlines {
- my $self = shift;
- wantarray or croak("Can't call getlines in scalar context!");
-
- my ($rArray, $Str, $Pos) = @$self{ qw( AR Str Pos ) };
- my @partial = ();
-
- if ($Pos) { # partial line...
- @partial = (substr( $rArray->[ $Str++ ], $Pos ));
- $self->{Pos} = 0;
- }
- $self->{Str} = scalar @$rArray; # about to exhaust @$rArray
- return (@partial,
- @$rArray[ $Str .. $#$rArray ]); # remaining full lines...
-}
-
-#------------------------------
-# print ARGS...
-#------------------------------
-# Instance method, override.
-# Print ARGS to the underlying line array.
-#
-sub print {
- my $self = shift;
- ### print STDERR "\n[[ARRAY WAS...\n", @{$self->{AR}}, "<<EOF>>\n";
- my @lines = split /^/, join('', @_); @lines or return 1;
-
- # Did the previous print not end with a newline? If so, append first line:
- if (@{$self->{AR}} and ($self->{AR}[-1] !~ /\n\Z/)) {
- $self->{AR}[-1] .= shift @lines;
- }
- push @{$self->{AR}}, @lines; # add the remainder
- ### print STDERR "\n[[ARRAY IS NOW...\n", @{$self->{AR}}, "<<EOF>>\n";
- 1;
-}
-
-#------------------------------
-1;
-
-__END__
-
-
-=head1 VERSION
-
-$Id: Lines.pm,v 1.999 2001-03-30 03:13:03 dparker Exp $
-
-
-=head1 AUTHORS
-
-
-=head2 Principal author
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-
-=head2 Other contributors
-
-Thanks to the following individuals for their invaluable contributions
-(if I've forgotten or misspelled your name, please email me!):
-
-I<Morris M. Siegel,>
-for his $/ patch and the new C<getlines()>.
-
-=cut
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Scalar.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Scalar.pm
deleted file mode 100644
index ab33199..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Scalar.pm
+++ /dev/null
@@ -1,674 +0,0 @@
-package IO::Scalar;
-
-
-=head1 NAME
-
-IO::Scalar - IO:: interface for reading/writing a scalar
-
-
-=head1 SYNOPSIS
-
-If you have any Perl5, you can use the basic OO interface...
-
- use IO::Scalar;
-
- ### Open a handle on a string:
- $SH = new IO::Scalar;
- $SH->open(\$somestring);
-
- ### Open a handle on a string, read it line-by-line, then close it:
- $SH = new IO::Scalar \$somestring;
- while ($_ = $SH->getline) { print "Line: $_" }
- $SH->close;
-
- ### Open a handle on a string, and slurp in all the lines:
- $SH = new IO::Scalar \$somestring;
- print $SH->getlines;
-
- ### Open a handle on a string, and append to it:
- $SH = new IO::Scalar \$somestring
- $SH->print("bar\n"); ### will add "bar\n" to the end
-
- ### Get the current position:
- $pos = $SH->getpos; ### $SH->tell() also works
-
- ### Set the current position:
- $SH->setpos($pos); ### $SH->seek(POS,WHENCE) also works
-
- ### Open an anonymous temporary scalar:
- $SH = new IO::Scalar;
- $SH->print("Hi there!");
- print "I got: ", ${$SH->sref}, "\n"; ### get at value
-
-If your Perl is 5.004 or later, you can use the TIEHANDLE
-interface, and read/write scalars just like files:
-
- use IO::Scalar;
-
- ### Writing to a scalar...
- my $s;
- tie *OUT, 'IO::Scalar', \$s;
- print OUT "line 1\nline 2\n", "line 3\n";
- print "s is now... $s\n"
-
- ### Reading and writing an anonymous scalar...
- tie *OUT, 'IO::Scalar';
- print OUT "line 1\nline 2\n", "line 3\n";
- tied(OUT)->seek(0,0);
- while (<OUT>) { print "LINE: ", $_ }
-
-Stringification now works, too!
-
- my $SH = new IO::Scalar \$somestring;
- $SH->print("Hello, ");
- $SH->print("world!");
- print "I've got: <$SH>\n";
-
-You can also make the objects sensitive to the $/ setting,
-just like IO::Handle wants them to be:
-
- my $SH = new IO::Scalar \$somestring;
- $SH->use_RS(1); ### perlvar's short name for $/
- ...
- local $/ = ""; ### read paragraph-at-a-time
- $nextpar = $SH->getline;
-
-
-
-=head1 DESCRIPTION
-
-This class implements objects which behave just like FileHandle
-(or IO::Handle) objects, except that you may use them to write to
-(or read from) scalars. They can be tiehandle'd as well.
-
-Basically, this:
-
- my $s;
- $SH = new IO::Scalar \$s;
- $SH->print("Hel", "lo, "); # OO style
- $SH->print("world!\n"); # ditto
-
-Or this (if you have 5.004 or later):
-
- my $s;
- $SH = tie *OUT, 'IO::Scalar', \$s;
- print OUT "Hel", "lo, "; # non-OO style
- print OUT "world!\n"; # ditto
-
-Or this (if you have 5.004 or later):
-
- my $s;
- $SH = IO::Scalar->new_tie(\$s);
- $SH->print("Hel", "lo, "); # OO style...
- print $SH "world!\n"; # ...or non-OO style!
-
-Causes $s to be set to:
-
- "Hello, world!\n"
-
-
-=head1 PUBLIC INTERFACE
-
-=cut
-
-use Carp;
-use strict;
-use vars qw($VERSION @ISA);
-use IO::Handle;
-
-### Stringification, courtesy of B. K. Oxley (binkley): :-)
-use overload '""' => sub { ${$_[0]->{SR}} };
-use overload 'bool' => sub { 1 }; ### have to do this, so object is true!
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-### Inheritance:
-@ISA = qw(IO::Handle);
-require IO::WrapTie and push @ISA, 'IO::WrapTie::Slave' if ($] >= 5.004);
-
-#==============================
-
-=head2 Construction
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item new [ARGS...]
-
-I<Class method.>
-Return a new, unattached scalar handle.
-If any arguments are given, they're sent to open().
-
-=cut
-
-sub new {
- my $self = bless {}, shift;
- $self->open(@_) if @_;
- $self;
-}
-sub DESTROY {
- shift->close;
-}
-
-#------------------------------
-
-=item open [SCALARREF]
-
-I<Instance method.>
-Open the scalar handle on a new scalar, pointed to by SCALARREF.
-If no SCALARREF is given, a "private" scalar is created to hold
-the file data.
-
-Returns the self object on success, undefined on error.
-
-=cut
-
-sub open {
- my ($self, $sref) = @_;
-
- # Sanity:
- defined($sref) or do {my $s = ''; $sref = \$s};
- (ref($sref) eq "SCALAR") or croak "open() needs a ref to a scalar";
-
- # Setup:
- $self->{Pos} = 0; ### seek position
- $self->{SR} = $sref; ### scalar reference
- $self;
-}
-
-#------------------------------
-
-=item opened
-
-I<Instance method.>
-Is the scalar handle opened on something?
-
-=cut
-
-sub opened {
- shift->{SR};
-}
-
-#------------------------------
-
-=item close
-
-I<Instance method.>
-Disassociate the scalar handle from its underlying scalar.
-Done automatically on destroy.
-
-=cut
-
-sub close {
- my $self = shift;
- %$self = ();
- 1;
-}
-
-=back
-
-=cut
-
-
-
-#==============================
-
-=head2 Input and output
-
-=over 4
-
-=cut
-
-
-#------------------------------
-
-=item flush
-
-I<Instance method.>
-No-op, provided for OO compatibility.
-
-=cut
-
-sub flush {}
-
-#------------------------------
-
-=item getc
-
-I<Instance method.>
-Return the next character, or undef if none remain.
-
-=cut
-
-sub getc {
- my $self = shift;
-
- # Return undef right away if at EOF; else, move pos forward:
- return undef if $self->eof;
- substr(${$self->{SR}}, $self->{Pos}++, 1);
-}
-
-#------------------------------
-
-=item getline
-
-I<Instance method.>
-Return the next line, or undef on end of string.
-Can safely be called in an array context.
-Currently, lines are delimited by "\n".
-
-=cut
-
-sub getline {
- my $self = shift;
-
- # Return undef right away if at EOF:
- return undef if $self->eof;
-
- # Get next line:
- my $sr = $self->{SR};
- my $i = $self->{Pos}; # Start matching at this point.
-
- ### Minimal impact implementation!
- ### We do the fast fast thing (no regexps) if using the
- ### classic input record separator.
- my $RS = $self->{UseRS} ? $/ : "\012";
-
- ### Case 1: $RS is undef: slurp all...
- if (!defined($RS)) {
- $self->{Pos} = length $$sr;
- return substr($$sr, $i);
- }
-
- ### Case 2: $RS is "\n": zoom zoom zoom...
- elsif ($RS eq "\012") {
-
- ### Seek ahead for "\n"... yes, this really is faster than regexps.
- my $len = length($$sr);
- for (; $i < $len; ++$i) {
- last if ord (substr ($$sr, $i, 1)) == 10;
- }
-
- ### Extract the line:
- my $line;
- if ($i < $len) { ### We found a "\n":
- $line = substr ($$sr, $self->{Pos}, $i - $self->{Pos} + 1);
- $self->{Pos} = $i+1; ### Remember where we finished up.
- }
- else { ### No "\n"; slurp the remainder:
- $line = substr ($$sr, $self->{Pos}, $i - $self->{Pos});
- $self->{Pos} = $len;
- }
- return $line;
- }
-
- ### Case 3: $RS is ref to int. Bail out.
- elsif (ref($RS)) {
- croak '$RS as ref to int is currently unsupported';
- }
-
- ### Case 4: $RS is either "" (paragraphs) or something weird...
- ### This is Graham's general-purpose stuff, which might be
- ### a tad slower than Case 2 for typical data, because
- ### of the regexps.
- else {
- pos($$sr) = $i;
-
- ### If in paragraph mode, skip leading lines (and update i!):
- length($RS) or
- (($$sr =~ m/\G\n*/g) and ($i = pos($$sr)));
-
- ### If we see the separator in the buffer ahead...
- if (length($RS)
- ? $$sr =~ m,\Q$RS\E,g ### (ordinary sep) TBD: precomp!
- : $$sr =~ m,\n\n,g ### (a paragraph)
- ) {
- $self->{Pos} = pos $$sr;
- return substr($$sr, $i, $self->{Pos}-$i);
- }
- ### Else if no separator remains, just slurp the rest:
- else {
- $self->{Pos} = length $$sr;
- return substr($$sr, $i);
- }
- }
-}
-
-#------------------------------
-
-=item getlines
-
-I<Instance method.>
-Get all remaining lines.
-It will croak() if accidentally called in a scalar context.
-
-=cut
-
-sub getlines {
- my $self = shift;
- wantarray or croak("Can't call getlines in scalar context!");
- my ($line, @lines);
- push @lines, $line while (defined($line = $self->getline));
- @lines;
-}
-
-#------------------------------
-
-=item print ARGS...
-
-I<Instance method.>
-Print ARGS to the underlying scalar.
-
-B<Warning:> Currently, this always causes a "seek to the end of the string";
-this may change in the future.
-
-=cut
-
-sub print {
- my $self = shift;
- ${$self->{SR}} .= join('', @_);
- $self->{Pos} = length(${$self->{SR}});
- 1;
-}
-
-#------------------------------
-
-=item read BUF, NBYTES, [OFFSET]
-
-I<Instance method.>
-Read some bytes from the scalar.
-Returns the number of bytes actually read, 0 on end-of-file, undef on error.
-
-=cut
-
-sub read {
- my $self = $_[0];
- my $n = $_[2];
- my $off = $_[3] || 0;
-
- my $read = substr(${$self->{SR}}, $self->{Pos}, $n);
- $n = length($read);
- $self->{Pos} += $n;
- ($off ? substr($_[1], $off) : $_[1]) = $read;
- return $n;
-}
-
-#------------------------------
-
-=item write BUF, NBYTES, [OFFSET]
-
-I<Instance method.>
-Write some bytes to the scalar.
-
-=cut
-
-sub write {
- my $self = $_[0];
- my $n = $_[2];
- my $off = $_[3] || 0;
-
- my $data = substr($_[1], $off, $n);
- $n = length($data);
- $self->print($data);
- return $n;
-}
-
-#------------------------------
-
-=item sysread BUF, LEN, [OFFSET]
-
-I<Instance method.>
-Read some bytes from the scalar.
-Returns the number of bytes actually read, 0 on end-of-file, undef on error.
-
-=cut
-
-sub sysread {
- my $self = shift;
- $self->read (@_);
-}
-
-#------------------------------
-
-=item syswrite BUF, NBYTES, [OFFSET]
-
-I<Instance method.>
-Write some bytes to the scalar.
-
-=cut
-
-sub syswrite {
- my $self = shift;
- $self->write (@_);
-}
-
-=back
-
-=cut
-
-
-#==============================
-
-=head2 Seeking/telling and other attributes
-
-=over 4
-
-=cut
-
-
-#------------------------------
-
-=item autoflush
-
-I<Instance method.>
-No-op, provided for OO compatibility.
-
-=cut
-
-sub autoflush {}
-
-#------------------------------
-
-=item binmode
-
-I<Instance method.>
-No-op, provided for OO compatibility.
-
-=cut
-
-sub binmode {}
-
-#------------------------------
-
-=item clearerr
-
-I<Instance method.> Clear the error and EOF flags. A no-op.
-
-=cut
-
-sub clearerr { 1 }
-
-#------------------------------
-
-=item eof
-
-I<Instance method.> Are we at end of file?
-
-=cut
-
-sub eof {
- my $self = shift;
- ($self->{Pos} >= length(${$self->{SR}}));
-}
-
-#------------------------------
-
-=item seek OFFSET, WHENCE
-
-I<Instance method.> Seek to a given position in the stream.
-
-=cut
-
-sub seek {
- my ($self, $pos, $whence) = @_;
- my $eofpos = length(${$self->{SR}});
-
- # Seek:
- if ($whence == 0) { $self->{Pos} = $pos } # SEEK_SET
- elsif ($whence == 1) { $self->{Pos} += $pos } # SEEK_CUR
- elsif ($whence == 2) { $self->{Pos} = $eofpos + $pos} # SEEK_END
- else { croak "bad seek whence ($whence)" }
-
- # Fixup:
- if ($self->{Pos} < 0) { $self->{Pos} = 0 }
- if ($self->{Pos} > $eofpos) { $self->{Pos} = $eofpos }
- 1;
-}
-
-#------------------------------
-
-=item sysseek OFFSET, WHENCE
-
-I<Instance method.> Identical to C<seek OFFSET, WHENCE>, I<q.v.>
-
-=cut
-
-sub sysseek {
- my $self = shift;
- $self->seek (@_);
-}
-
-#------------------------------
-
-=item tell
-
-I<Instance method.>
-Return the current position in the stream, as a numeric offset.
-
-=cut
-
-sub tell { shift->{Pos} }
-
-#------------------------------
-
-=item use_RS [YESNO]
-
-I<Instance method.>
-Obey the curent setting of $/, like IO::Handle does?
-Default is false.
-
-=cut
-
-sub use_RS {
- my ($self, $yesno) = @_;
- $self->{UseRS} = $yesno;
-}
-
-#------------------------------
-
-=item setpos POS
-
-I<Instance method.>
-Set the current position, using the opaque value returned by C<getpos()>.
-
-=cut
-
-sub setpos { shift->seek($_[0],0) }
-
-#------------------------------
-
-=item getpos
-
-I<Instance method.>
-Return the current position in the string, as an opaque object.
-
-=cut
-
-*getpos = \&tell;
-
-
-#------------------------------
-
-=item sref
-
-I<Instance method.>
-Return a reference to the underlying scalar.
-
-=cut
-
-sub sref { shift->{SR} }
-
-
-#------------------------------
-# Tied handle methods...
-#------------------------------
-
-# Conventional tiehandle interface:
-sub TIEHANDLE { shift->new(@_) }
-sub GETC { shift->getc(@_) }
-sub PRINT { shift->print(@_) }
-sub PRINTF { shift->print(sprintf(shift, @_)) }
-sub READ { shift->read(@_) }
-sub READLINE { wantarray ? shift->getlines(@_) : shift->getline(@_) }
-sub WRITE { shift->write(@_); }
-sub CLOSE { shift->close(@_); }
-
-#------------------------------------------------------------
-
-1;
-
-__END__
-
-
-
-=back
-
-=cut
-
-=head1 VERSION
-
-$Id: Scalar.pm,v 1.999 2001-03-30 03:13:03 dparker Exp $
-
-
-=head1 AUTHORS
-
-
-=head2 Principal author
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-
-=head2 Other contributors
-
-The full set of contributors always includes the folks mentioned
-in L<IO::Stringy/"CHANGE LOG">. But just the same, special
-thanks to the following individuals for their invaluable contributions
-(if I've forgotten or misspelled your name, please email me!):
-
-I<Andy Glew,>
-for contributing C<getc()>.
-
-I<Brandon Browning,>
-for suggesting C<opened()>.
-
-I<David Richter,>
-for finding and fixing the bug in C<PRINTF()>.
-
-I<Eric L. Brine,>
-for his offset-using read() and write() implementations.
-
-I<Richard Jones,>
-for his patches to massively improve the performance of C<getline()>
-and add C<sysread> and C<syswrite>.
-
-I<B. K. Oxley (binkley),>
-for stringification and inheritance improvements,
-and sundry good ideas.
-
-
-=cut
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/ScalarArray.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/ScalarArray.pm
deleted file mode 100644
index 8f844e3..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/ScalarArray.pm
+++ /dev/null
@@ -1,598 +0,0 @@
-package IO::ScalarArray;
-
-
-=head1 NAME
-
-IO::ScalarArray - IO:: interface for reading/writing an array of scalars
-
-
-=head1 SYNOPSIS
-
-If you have any Perl5, you can use the basic OO interface...
-
- use IO::ScalarArray;
-
- # Open a handle on an array-of-scalars:
- $AH = new IO::ScalarArray;
- $AH->open(\@a);
-
- # Open a handle on an array-of-scalars, read it line-by-line,
- # then close it:
- $AH = new IO::ScalarArray \@a;
- while ($_ = $AH->getline) { print "Line: $_" }
- $AH->close;
-
- # Open a handle on an array-of-scalars, and slurp in all the lines:
- $AH = new IO::ScalarArray \@a;
- print $AH->getlines;
-
- # Open a handle on an array-of-scalars, and append to it:
- $AH = new IO::ScalarArray \@a;
- $AH->print("bar\n");
- print "some string is now: ", $somestring, "\n";
-
- # Get the current position:
- $pos = $AH->getpos; ### $AH->tell() also works
-
- # Set the current position:
- $AH->setpos($pos); ### $AH->seek(POS,WHENCE) also works
-
- # Open an anonymous temporary scalar array:
- $AH = new IO::ScalarArray;
- $AH->print("Hi there!\nHey there!\n");
- $AH->print("Ho there!\n");
- print "I got: ", @{$AH->aref}, "\n"; ### get at value
-
-If your Perl is 5.004 or later, you can use the TIEHANDLE
-interface, and read/write as array-of-scalars just like files:
-
- use IO::ScalarArray;
-
- # Writing to a scalar array...
- my @a;
- tie *OUT, 'IO::ScalarArray', \@a;
- print OUT "line 1\nline 2\n", "line 3\n";
- print "s is now... [", join('', @a), "]\n";
-
- # Reading and writing an anonymous scalar array...
- tie *OUT, 'IO::ScalarArray';
- print OUT "line 1\nline 2\n", "line 3\n";
- tied(OUT)->seek(0,0);
- while (<OUT>) { print "LINE: ", $_ }
-
-
-=head1 DESCRIPTION
-
-This class implements objects which behave just like FileHandle
-(or IO::Handle) objects, except that you may use them to write to
-(or read from) scalars. They can be tiehandle'd as well.
-
-For writing large amounts of data with individual print() statements,
-this is likely to be more efficient than IO::Scalar.
-
-Basically, this:
-
- my @a;
- $AH = new IO::ScalarArray \@a;
- $AH->print("Hel", "lo, ");
- $AH->print("world!\n");
-
-Or this (if you have 5.004 or later):
-
- my @a;
- $AH = tie *OUT, 'IO::ScalarArray', \@a;
- print OUT "Hel", "lo, ";
- print OUT "world!\n";
-
-Causes @a to be set to the following arrayt of 3 strings:
-
- ( "Hel" ,
- "lo, " ,
- "world!\n" )
-
-Compare this with IO::Scalar.
-
-
-=head1 PUBLIC INTERFACE
-
-=cut
-
-use Carp;
-use strict;
-use vars qw($VERSION @ISA);
-use IO::Handle;
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-# Inheritance:
-@ISA = qw(IO::Handle);
-require IO::WrapTie and push @ISA, 'IO::WrapTie::Slave' if ($] >= 5.004);
-
-
-#==============================
-
-=head2 Construction
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item new [ARGS...]
-
-I<Class method.>
-Return a new, unattached array handle.
-If any arguments are given, they're sent to open().
-
-=cut
-
-sub new {
- my $self = bless {}, shift;
- $self->open(@_) if @_;
- $self;
-}
-sub DESTROY {
- shift->close;
-}
-
-
-#------------------------------
-
-=item open [ARRAYREF]
-
-I<Instance method.>
-Open the array handle on a new array, pointed to by ARRAYREF.
-If no ARRAYREF is given, a "private" array is created to hold
-the file data.
-
-Returns the self object on success, undefined on error.
-
-=cut
-
-sub open {
- my ($self, $aref) = @_;
-
- # Sanity:
- defined($aref) or do {my @a; $aref = \@a};
- (ref($aref) eq "ARRAY") or croak "open needs a ref to a array";
-
- # Setup:
- $self->setpos([0,0]);
- $self->{AR} = $aref;
- $self;
-}
-
-#------------------------------
-
-=item opened
-
-I<Instance method.>
-Is the array handle opened on something?
-
-=cut
-
-sub opened {
- shift->{AR};
-}
-
-#------------------------------
-
-=item close
-
-I<Instance method.>
-Disassociate the array handle from its underlying array.
-Done automatically on destroy.
-
-=cut
-
-sub close {
- my $self = shift;
- %$self = ();
- 1;
-}
-
-=back
-
-=cut
-
-
-
-#==============================
-
-=head2 Input and output
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item flush
-
-I<Instance method.>
-No-op, provided for OO compatibility.
-
-=cut
-
-sub flush {}
-
-#------------------------------
-
-=item getc
-
-I<Instance method.>
-Return the next character, or undef if none remain.
-This does a read(1), which is somewhat costly.
-
-=cut
-
-sub getc {
- my $buf = '';
- ($_[0]->read($buf, 1) ? $buf : undef);
-}
-
-#------------------------------
-
-=item getline
-
-I<Instance method.>
-Return the next line, or undef on end of data.
-Can safely be called in an array context.
-Currently, lines are delimited by "\n".
-
-=cut
-
-sub getline {
- my $self = shift;
- my ($str, $line) = (undef, '');
-
- # Until we hit EOF (or exitted because of a found line):
- until ($self->eof) {
- # If at end of current string, go forward to next one (won't be EOF):
- if ($self->_eos) {++$self->{Str}, $self->{Pos}=0};
-
- # Get ref to current string in array, and set internal pos marker:
- $str = \($self->{AR}[$self->{Str}]); # get current string
- pos($$str) = $self->{Pos}; # start matching at this point
-
- # Get from here to either newline or end of string, and add to line:
- $$str =~ m/\G(.*?)((\n)|\Z)/g; # match to 1st newline or EOS
- $line .= $1.$2; # add it
- $self->{Pos} += length($1.$2); # move forward by amount matched
- return $line if $3; # done, got a line with "\n"
- }
- return ($line eq '') ? undef : $line; # return undef if EOF
-}
-
-#------------------------------
-
-=item getlines
-
-I<Instance method.>
-Get all remaining lines.
-It will croak() if accidentally called in a scalar context.
-
-=cut
-
-sub getlines {
- my $self = shift;
- wantarray or croak("Can't call getlines in scalar context!");
- my ($line, @lines);
- push @lines, $line while (defined($line = $self->getline));
- @lines;
-}
-
-#------------------------------
-
-=item print ARGS...
-
-I<Instance method.>
-Print ARGS to the underlying array.
-
-Currently, this always causes a "seek to the end of the array"
-and generates a new array entry. This may change in the future.
-
-=cut
-
-sub print {
- my $self = shift;
- push @{$self->{AR}}, join('', @_); # add the data
- $self->setpos([scalar(@{$self->{AR}}), 0]);
- 1;
-}
-
-#------------------------------
-
-=item read BUF, NBYTES, [OFFSET];
-
-I<Instance method.>
-Read some bytes from the array.
-Returns the number of bytes actually read, 0 on end-of-file, undef on error.
-
-=cut
-
-sub read {
- my $self = $_[0];
- my $n = $_[2];
- my $off = $_[3] || 0;
-
- ### print "getline\n";
- my $justread;
- my $len;
- ($off ? substr($_[1], $off) : $_[1]) = '';
-
- # Stop when we have zero bytes to go, or when we hit EOF:
- until (!$n or $self->eof) {
- # If at end of current string, go forward to next one (won't be EOF):
- if ($self->_eos) {
- ++$self->{Str};
- $self->{Pos} = 0;
- }
-
- # Get longest possible desired substring of current string:
- $justread = substr($self->{AR}[$self->{Str}], $self->{Pos}, $n);
- $len = length($justread);
- $_[1] .= $justread;
- $n -= $len;
- $self->{Pos} += $len;
- }
- return length($_[1])-$off;
-}
-
-#------------------------------
-
-=item write BUF, NBYTES, [OFFSET];
-
-I<Instance method.>
-Write some bytes into the array.
-
-=cut
-
-sub write {
- my $self = $_[0];
- my $n = $_[2];
- my $off = $_[3] || 0;
-
- my $data = substr($_[1], $n, $off);
- $n = length($data);
- $self->print($data);
- return $n;
-}
-
-
-=back
-
-=cut
-
-
-
-#==============================
-
-=head2 Seeking/telling and other attributes
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item autoflush
-
-I<Instance method.>
-No-op, provided for OO compatibility.
-
-=cut
-
-sub autoflush {}
-
-#------------------------------
-
-=item binmode
-
-I<Instance method.>
-No-op, provided for OO compatibility.
-
-=cut
-
-sub binmode {}
-
-#------------------------------
-
-=item clearerr
-
-I<Instance method.> Clear the error and EOF flags. A no-op.
-
-=cut
-
-sub clearerr { 1 }
-
-#------------------------------
-
-=item eof
-
-I<Instance method.> Are we at end of file?
-
-=cut
-
-sub eof {
- ### print "checking EOF [$self->{Str}, $self->{Pos}]\n";
- ### print "SR = ", $#{$self->{AR}}, "\n";
- return 0 if ($_[0]->{Str} < $#{$_[0]->{AR}}); # before EOA
- return 1 if ($_[0]->{Str} > $#{$_[0]->{AR}}); # after EOA
- (($_[0]->{Str} == $#{$_[0]->{AR}}) && ($_[0]->_eos)); # at EOA, past EOS
-}
-
-#------------------------------
-#
-# _eos
-#
-# I<Instance method, private.> Are we at end of the CURRENT string?
-#
-
-sub _eos {
- ($_[0]->{Pos} >= length($_[0]->{AR}[$_[0]->{Str}])); # past last char
-}
-
-#------------------------------
-
-=item seek POS,WHENCE
-
-I<Instance method.>
-Seek to a given position in the stream.
-Only a WHENCE of 0 (SEEK_SET) is supported.
-
-=cut
-
-sub seek {
- my ($self, $pos, $whence) = @_;
- die "IO::ScalarArray::seek: whence of $whence not supported\n" if $whence;
-
- # Advance through array until done:
- my $istr = 0;
- while (($pos >= 0) && ($istr < scalar(@{$self->{AR}}))) {
- if (length($self->{AR}[$istr]) > $pos) { # it's in this string!
- return $self->setpos([$istr, $pos]);
- }
- else { # it's in next string
- $pos -= length($self->{AR}[$istr++]); # move forward one string
- }
- }
- # If we reached this point, pos is at or past end; zoom to EOF:
- return $self->setpos([scalar(@{$self->{AR}}), 0]);
-}
-
-#------------------------------
-
-=item tell
-
-I<Instance method.>
-Return the current position in the stream, as a numeric offset.
-
-=cut
-
-sub tell {
- my $self = shift;
- my $off = 0;
- my ($s, $str_s);
- for ($s = 0; $s < $self->{Str}; $s++) { # count all "whole" scalars
- defined($str_s = $self->{AR}[$s]) or $str_s = '';
- ###print STDERR "COUNTING STRING $s (". length($str_s) . ")\n";
- $off += length($str_s);
- }
- ###print STDERR "COUNTING POS ($self->{Pos})\n";
- return ($off += $self->{Pos}); # plus the final, partial one
-}
-
-#------------------------------
-
-=item setpos POS
-
-I<Instance method.>
-Seek to a given position in the array, using the opaque getpos() value.
-Don't expect this to be a number.
-
-=cut
-
-sub setpos {
- my ($self, $pos) = @_;
- (ref($pos) eq 'ARRAY') or
- die "setpos: only use a value returned by getpos!\n";
- ($self->{Str}, $self->{Pos}) = @$pos;
-}
-
-#------------------------------
-
-=item getpos
-
-I<Instance method.>
-Return the current position in the array, as an opaque value.
-Don't expect this to be a number.
-
-=cut
-
-sub getpos {
- [$_[0]->{Str}, $_[0]->{Pos}];
-}
-
-#------------------------------
-
-=item aref
-
-I<Instance method.>
-Return a reference to the underlying array.
-
-=cut
-
-sub aref {
- shift->{AR};
-}
-
-=back
-
-=cut
-
-#------------------------------
-# Tied handle methods...
-#------------------------------
-
-# Conventional tiehandle interface:
-sub TIEHANDLE { shift->new(@_) }
-sub GETC { shift->getc(@_) }
-sub PRINT { shift->print(@_) }
-sub PRINTF { shift->print(sprintf(shift, @_)) }
-sub READ { shift->read(@_) }
-sub READLINE { wantarray ? shift->getlines(@_) : shift->getline(@_) }
-sub WRITE { shift->write(@_); }
-sub CLOSE { shift->close(@_); }
-
-#------------------------------------------------------------
-
-1;
-__END__
-
-# SOME PRIVATE NOTES:
-#
-# * The "current position" is the position before the next
-# character to be read/written.
-#
-# * Str gives the string index of the current position, 0-based
-#
-# * Pos gives the offset within AR[Str], 0-based.
-#
-# * Inital pos is [0,0]. After print("Hello"), it is [1,0].
-
-
-=head1 VERSION
-
-$Id: ScalarArray.pm,v 1.999 2001-03-30 03:11:52 dparker Exp $
-
-
-=head1 AUTHOR
-
-=head2 Principal author
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-
-=head2 Other contributors
-
-Thanks to the following individuals for their invaluable contributions
-(if I've forgotten or misspelled your name, please email me!):
-
-I<Andy Glew,>
-for suggesting C<getc()>.
-
-I<Brandon Browning,>
-for suggesting C<opened()>.
-
-I<Eric L. Brine,>
-for his offset-using read() and write() implementations.
-
-=cut
-
-#------------------------------
-1;
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Stringy.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Stringy.pm
deleted file mode 100644
index 74c4ef1..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Stringy.pm
+++ /dev/null
@@ -1,290 +0,0 @@
-package IO::Stringy;
-
-use vars qw($VERSION);
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-1;
-__END__
-
-
-=head1 NAME
-
-IO-stringy - I/O on in-core objects like strings and arrays
-
-
-=head1 SYNOPSIS
-
- IO::
- ::AtomicFile adpO Write a file which is updated atomically ERYQ
- ::Lines bdpO I/O handle to read/write to array of lines ERYQ
- ::Scalar RdpO I/O handle to read/write to a string ERYQ
- ::ScalarArray RdpO I/O handle to read/write to array of scalars ERYQ
- ::Wrap RdpO Wrap old-style FHs in standard OO interface ERYQ
- ::WrapTie adpO Tie your handles & retain full OO interface ERYQ
-
-
-=head1 DESCRIPTION
-
-This toolkit primarily provides modules for performing both traditional
-and object-oriented i/o) on things I<other> than normal filehandles;
-in particular, L<IO::Scalar|IO::Scalar>, L<IO::ScalarArray|IO::ScalarArray>,
-and L<IO::Lines|IO::Lines>.
-
-If you have access to tie(), these classes will make use of the
-L<IO::WrapTie|IO::WrapTie> module to inherit a convenient new_tie()
-constructor. It also exports a nice wraptie() function.
-
-In the more-traditional IO::Handle front, we
-have L<IO::AtomicFile|IO::AtomicFile>
-which may be used to painlessly create files which are updated
-atomically.
-
-And in the "this-may-prove-useful" corner, we have L<IO::Wrap|IO::Wrap>,
-whose exported wraphandle() function will clothe anything that's not
-a blessed object in an IO::Handle-like wrapper... so you can just
-use OO syntax and stop worrying about whether your function's caller
-handed you a string, a globref, or a FileHandle.
-
-
-=head1 INSTALLATION
-
-Most of you already know the drill...
-
- perl Makefile.PL
- make test
- make install
-
-For everyone else out there...
-if you've never installed Perl code before, or you're trying to use
-this in an environment where your sysadmin or ISP won't let you do
-interesting things, B<relax:> since this module contains no binary
-extensions, you can cheat. That means copying the directory tree
-under my "./lib" directory into someplace where your script can "see"
-it. For example, under Linux:
-
- cp -r IO-stringy-1.234/lib/* /path/to/my/perl/
-
-Now, in your Perl code, do this:
-
- use lib "/path/to/my/perl";
- use IO::Scalar; ### or whatever
-
-Ok, now you've been told. At this point, anyone who whines about
-not being given enough information gets an unflattering haiku
-written about them in the next change log. I'll do it.
-Don't think I won't.
-
-
-
-=head1 VERSION
-
-$Id: Stringy.pm,v 1.999 2001-03-30 03:13:03 dparker Exp $
-
-
-
-=head1 TO DO
-
-=over 4
-
-=item (2000/08/02) Finalize $/ support
-
-Graham Barr submitted this patch half a I<year> ago;
-Like a moron, I lost his message under a ton of others,
-and only now have the experimental implementation done.
-
-Will the sudden sensitivity to $/ hose anyone out there?
-I'm worried, so you have to enable it explicitly.
-
-
-=item (2000/09/28) Separate read/write cursors?
-
-Binkley sent me a very interesting variant of IO::Scalar which
-maintains two separate cursors on the data, one for reading
-and one for writing. Quoth he:
-
- Isn't it the case that real operating system file descriptors
- maintain an independent read and write file position (and
- seek(2) resets them both)?
-
-He also pointed out some issues with his implementation:
-
- For example, what does eof or tell return? The read position or
- the write position? (I assumed read position was more important).
-
-Your opinions on this are most welcome.
-(Me, I'm just squeamish that this will break some code
-which depends on the existing behavior, and that attempts to
-maintain backwards-compatibility will slow down the code.
-But I'll give it a shot.)
-
-=back
-
-
-
-=head1 CHANGE LOG
-
-=over 4
-
-=item Version 1.219 (2001/02/23)
-
-IO::Scalar objects can now be made sensitive to $/ .
-Pains were taken to keep the fast code fast while adding this feature.
-I<Cheers to Graham Barr for submitting his patch;
-jeers to me for losing his email for 6 months.>
-
-
-=item Version 1.218 (2001/02/23)
-
-IO::Scalar has a new sysseek() method.
-I<Thanks again to Richard Jones.>
-
-New "TO DO" section, because people who submit patches/ideas should
-at least know that they're in the system... and that I won't lose
-their stuff. Please read it.
-
-New entries in L<"AUTHOR">.
-Please read those too.
-
-
-
-=item Version 1.216 (2000/09/28)
-
-B<IO::Scalar and IO::ScalarArray now inherit from IO::Handle.>
-I thought I'd remembered a problem with this ages ago, related to
-the fact that these IO:: modules don't have "real" filehandles,
-but the problem apparently isn't surfacing now.
-If you suddenly encounter Perl warnings during global destruction
-(especially if you're using tied filehandles), then please let me know!
-I<Thanks to B. K. Oxley (binkley) for this.>
-
-B<Nasty bug fixed in IO::Scalar::write().>
-Apparently, the offset and the number-of-bytes arguments were,
-for all practical purposes, I<reversed.> You were okay if
-you did all your writing with print(), but boy was I<this> a stupid bug!
-I<Thanks to Richard Jones for finding this one.
-For you, Rich, a double-length haiku:>
-
- Newspaper headline
- typeset by dyslexic man
- loses urgency
-
- BABY EATS FISH is
- simply not equivalent
- to FISH EATS BABY
-
-B<New sysread and syswrite methods for IO::Scalar.>
-I<Thanks again to Richard Jones for this.>
-
-
-=item Version 1.215 (2000/09/05)
-
-Added 'bool' overload to '""' overload, so object always evaluates
-to true. (Whew. Glad I caught this before it went to CPAN.)
-
-
-=item Version 1.214 (2000/09/03)
-
-Evaluating an IO::Scalar in a string context now yields
-the underlying string.
-I<Thanks to B. K. Oxley (binkley) for this.>
-
-
-=item Version 1.213 (2000/08/16)
-
-Minor documentation fixes.
-
-
-=item Version 1.212 (2000/06/02)
-
-Fixed IO::InnerFile incompatibility with Perl5.004.
-I<Thanks to many folks for reporting this.>
-
-
-=item Version 1.210 (2000/04/17)
-
-Added flush() and other no-op methods.
-I<Thanks to Doru Petrescu for suggesting this.>
-
-
-=item Version 1.209 (2000/03/17)
-
-Small bug fixes.
-
-
-=item Version 1.208 (2000/03/14)
-
-Incorporated a number of contributed patches and extensions,
-mostly related to speed hacks, support for "offset", and
-WRITE/CLOSE methods.
-I<Thanks to Richard Jones, Doru Petrescu, and many others.>
-
-
-
-=item Version 1.206 (1999/04/18)
-
-Added creation of ./testout when Makefile.PL is run.
-
-
-=item Version 1.205 (1999/01/15)
-
-Verified for Perl5.005.
-
-
-=item Version 1.202 (1998/04/18)
-
-New IO::WrapTie and IO::AtomicFile added.
-
-
-=item Version 1.110
-
-Added IO::WrapTie.
-
-
-=item Version 1.107
-
-Added IO::Lines, and made some bug fixes to IO::ScalarArray.
-Also, added getc().
-
-
-=item Version 1.105
-
-No real changes; just upgraded IO::Wrap to have a $VERSION string.
-
-=back
-
-
-
-
-=head1 AUTHOR
-
-=over 4
-
-=item Primary Maintainer
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-=item Unofficial Co-Authors
-
-For all their bug reports and patch submissions, the following
-are officially recognized:
-
- Richard Jones
- B. K. Oxley (binkley)
- Doru Petrescu
-
-
-=back
-
-Enjoy. Yell if it breaks.
-
-
-=cut
-
-
-
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Wrap.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Wrap.pm
deleted file mode 100644
index 5ccec9c..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/Wrap.pm
+++ /dev/null
@@ -1,211 +0,0 @@
-package IO::Wrap;
-
-# SEE DOCUMENTATION AT BOTTOM OF FILE
-
-require 5.002;
-
-use strict;
-use vars qw(@ISA @EXPORT $VERSION);
-@ISA = qw(Exporter);
-@EXPORT = qw(wraphandle);
-
-use FileHandle;
-use Carp;
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-
-#------------------------------
-# wraphandle RAW
-#------------------------------
-sub wraphandle {
- my $raw = shift;
- new IO::Wrap $raw;
-}
-
-#------------------------------
-# new STREAM
-#------------------------------
-sub new {
- my ($class, $stream) = @_;
- no strict 'refs';
-
- # Convert raw scalar to globref:
- ref($stream) or $stream = \*$stream;
-
- # Wrap globref and incomplete objects:
- if ((ref($stream) eq 'GLOB') or # globref
- (ref($stream) eq 'FileHandle') && !defined(&FileHandle::read)) {
- return bless \$stream, $class;
- }
- $stream; # already okay!
-}
-
-#------------------------------
-# I/O methods...
-#------------------------------
-sub close {
- my $self = shift;
- return close($$self);
-}
-sub getline {
- my $self = shift;
- my $fh = $$self;
- return scalar(<$fh>);
-}
-sub getlines {
- my $self = shift;
- wantarray or croak("Can't call getlines in scalar context!");
- my $fh = $$self;
- <$fh>;
-}
-sub print {
- my $self = shift;
- print { $$self } @_;
-}
-sub read {
- my $self = shift;
- return read($$self, $_[0], $_[1]);
-}
-sub seek {
- my $self = shift;
- return seek($$self, $_[0], $_[1]);
-}
-sub tell {
- my $self = shift;
- return tell($$self);
-}
-
-#------------------------------
-1;
-__END__
-
-
-=head1 NAME
-
-IO::Wrap - wrap raw filehandles in IO::Handle interface
-
-
-=head1 SYNOPSIS
-
- use IO::Wrap;
-
- # Do stuff with any kind of filehandle (including a bare globref), or
- # any kind of blessed object that responds to a print() message.
- #
- sub do_stuff {
- my $fh = shift;
-
- ### At this point, we have no idea what the user gave us...
- ### a globref? a FileHandle? a scalar filehandle name?
-
- $fh = wraphandle($fh);
-
- ### At this point, we know we have an IO::Handle-like object!
-
- $fh->print("Hey there!");
- ...
- }
-
-
-=head1 DESCRIPTION
-
-Let's say you want to write some code which does I/O, but you don't
-want to force the caller to provide you with a FileHandle or IO::Handle
-object. You want them to be able to say:
-
- do_stuff(\*STDOUT);
- do_stuff('STDERR');
- do_stuff($some_FileHandle_object);
- do_stuff($some_IO_Handle_object);
-
-And even:
-
- do_stuff($any_object_with_a_print_method);
-
-Sure, one way to do it is to force the caller to use tiehandle().
-But that puts the burden on them. Another way to do it is to
-use B<IO::Wrap>, which provides you with the following functions:
-
-
-=over 4
-
-=item wraphandle SCALAR
-
-This function will take a single argument, and "wrap" it based on
-what it seems to be...
-
-=over 4
-
-=item *
-
-B<A raw scalar filehandle name,> like C<"STDOUT"> or C<"Class::HANDLE">.
-In this case, the filehandle name is wrapped in an IO::Wrap object,
-which is returned.
-
-=item *
-
-B<A raw filehandle glob,> like C<\*STDOUT>.
-In this case, the filehandle glob is wrapped in an IO::Wrap object,
-which is returned.
-
-=item *
-
-B<A blessed FileHandle object.>
-In this case, the FileHandle is wrapped in an IO::Wrap object if and only
-if your FileHandle class does not support the C<read()> method.
-
-=item *
-
-B<Any other kind of blessed object,> which is assumed to be already
-conformant to the IO::Handle interface.
-In this case, you just get back that object.
-
-=back
-
-=back
-
-
-If you get back an IO::Wrap object, it will obey a basic subset of
-the IO:: interface. That is, the following methods (note: I said
-I<methods>, not named operators) should work on the thing you get back:
-
- close
- getline
- getlines
- print ARGS...
- read BUFFER,NBYTES
- seek POS,WHENCE
- tell
-
-
-
-=head1 NOTES
-
-Clearly, when wrapping a raw external filehandle (like \*STDOUT),
-I didn't want to close the file descriptor when the "wrapper" object is
-destroyed... since the user might not appreciate that! Hence,
-there's no DESTROY method in this class.
-
-When wrapping a FileHandle object, however, I believe that Perl will
-invoke the FileHandle::DESTROY when the last reference goes away,
-so in that case, the filehandle is closed if the wrapped FileHandle
-really was the last reference to it.
-
-
-=head1 WARNINGS
-
-This module does not allow you to wrap filehandle names which are given
-as strings that lack the package they were opened in. That is, if a user
-opens FOO in package Foo, they must pass it to you either as C<\*FOO>
-or as C<"Foo::FOO">. However, C<"STDIN"> and friends will work just fine.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-=cut
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/WrapTie.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/WrapTie.pm
deleted file mode 100644
index aada8e6..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/lib/IO/WrapTie.pm
+++ /dev/null
@@ -1,480 +0,0 @@
-# SEE DOCUMENTATION AT BOTTOM OF FILE
-
-
-#------------------------------------------------------------
-package IO::WrapTie;
-#------------------------------------------------------------
-require 5.004; # for tie
-use strict;
-use vars qw(@ISA @EXPORT $VERSION);
-use Exporter;
-
-# Inheritance, exporting, and package version:
-@ISA = qw(Exporter);
-@EXPORT = qw(wraptie);
-$VERSION = substr q$Revision: 1.999 $, 10;
-
-# Function, exported.
-sub wraptie {
- IO::WrapTie::Master->new(@_);
-}
-
-# Class method; BACKWARDS-COMPATIBILITY ONLY!
-sub new {
- shift;
- IO::WrapTie::Master->new(@_);
-}
-
-
-
-#------------------------------------------------------------
-package IO::WrapTie::Master;
-#------------------------------------------------------------
-
-use strict;
-use vars qw(@ISA $AUTOLOAD);
-use IO::Handle;
-
-# We inherit from IO::Handle to get methods which invoke i/o operators,
-# like print(), on our tied handle:
-@ISA = qw(IO::Handle);
-
-#------------------------------
-# new SLAVE, TIEARGS...
-#------------------------------
-# Create a new subclass of IO::Handle which...
-#
-# (1) Handles i/o OPERATORS because it is tied to an instance of
-# an i/o-like class, like IO::Scalar.
-#
-# (2) Handles i/o METHODS by delegating them to that same tied object!.
-#
-# Arguments are the slave class (e.g., IO::Scalar), followed by all
-# the arguments normally sent into that class's TIEHANDLE method.
-# In other words, much like the arguments to tie(). :-)
-#
-# NOTE:
-# The thing $x we return must be a BLESSED REF, for ($x->print()).
-# The underlying symbol must be a FILEHANDLE, for (print $x "foo").
-# It has to have a way of getting to the "real" back-end object...
-#
-sub new {
- my $master = shift;
- my $io = IO::Handle->new; # create a new handle
- my $slave = shift;
- tie *$io, $slave, @_; # tie: will invoke slave's TIEHANDLE
- bless $io, $master; # return a master
-}
-
-#------------------------------
-# AUTOLOAD
-#------------------------------
-# Delegate method invocations on the master to the underlying slave.
-#
-sub AUTOLOAD {
- my $method = $AUTOLOAD;
- $method =~ s/.*:://;
- my $self = shift; tied(*$self)->$method(\@_);
-}
-
-#------------------------------
-# PRELOAD
-#------------------------------
-# Utility.
-#
-# Most methods like print(), getline(), etc. which work on the tied object
-# via Perl's i/o operators (like 'print') are inherited from IO::Handle.
-#
-# Other methods, like seek() and sref(), we must delegate ourselves.
-# AUTOLOAD takes care of these.
-#
-# However, it may be necessary to preload delegators into your
-# own class. PRELOAD will do this.
-#
-sub PRELOAD {
- my $class = shift;
- foreach (@_) {
- eval "sub ${class}::$_ { my \$s = shift; tied(*\$s)->$_(\@_) }";
- }
-}
-
-# Preload delegators for some standard methods which we can't simply
-# inherit from IO::Handle... for example, some IO::Handle methods
-# assume that there is an underlying file descriptor.
-#
-PRELOAD IO::WrapTie::Master
- qw(open opened close read clearerr eof seek tell setpos getpos);
-
-
-
-#------------------------------------------------------------
-package IO::WrapTie::Slave;
-#------------------------------------------------------------
-# Teeny private class providing a new_tie constructor...
-#
-# HOW IT ALL WORKS:
-#
-# Slaves inherit from this class.
-#
-# When you send a new_tie() message to a tie-slave class (like IO::Scalar),
-# it first determines what class should provide its master, via TIE_MASTER.
-# In this case, IO::Scalar->TIE_MASTER would return IO::Scalar::Master.
-# Then, we create a new master (an IO::Scalar::Master) with the same args
-# sent to new_tie.
-#
-# In general, the new() method of the master is inherited directly
-# from IO::WrapTie::Master.
-#
-sub new_tie {
- my $self = shift;
- $self->TIE_MASTER->new($self,@_); # e.g., IO::Scalar::Master->new(@_)
-}
-
-# Default class method for new_tie().
-# All your tie-slave class (like IO::Scalar) has to do is override this
-# method with a method that returns the name of an appropriate "master"
-# class for tying that slave.
-#
-sub TIE_MASTER { 'IO::WrapTie::Master' }
-
-#------------------------------
-1;
-__END__
-
-
-package IO::WrapTie; # for doc generator
-
-
-=head1 NAME
-
-IO::WrapTie - wrap tieable objects in IO::Handle interface
-
-I<This is currently Alpha code, released for comments.
- Please give me your feedback!>
-
-
-=head1 SYNOPSIS
-
-First of all, you'll need tie(), so:
-
- require 5.004;
-
-I<Function interface (experimental).>
-Use this with any existing class...
-
- use IO::WrapTie;
- use FooHandle; # implements TIEHANDLE interface
-
- # Suppose we want a "FooHandle->new(&FOO_RDWR, 2)".
- # We can instead say...
-
- $FH = wraptie('FooHandle', &FOO_RDWR, 2);
-
- # Now we can use...
- print $FH "Hello, "; # traditional operator syntax...
- $FH->print("world!\n"); # ...and OO syntax as well!
-
-I<OO interface (preferred).>
-You can inherit from the IO::WrapTie::Slave mixin to get a
-nifty C<new_tie()> constructor...
-
- #------------------------------
- package FooHandle; # a class which can TIEHANDLE
-
- use IO::WrapTie;
- @ISA = qw(IO::WrapTie::Slave); # inherit new_tie()
- ...
-
-
- #------------------------------
- package main;
-
- $FH = FooHandle->new_tie(&FOO_RDWR, 2); # $FH is an IO::WrapTie::Master
- print $FH "Hello, "; # traditional operator syntax
- $FH->print("world!\n"); # OO syntax
-
-See IO::Scalar as an example. It also shows you how to create classes
-which work both with and without 5.004.
-
-
-=head1 DESCRIPTION
-
-Suppose you have a class C<FooHandle>, where...
-
-=over 4
-
-=item *
-
-B<FooHandle does not inherit from IO::Handle;> that is, it performs
-filehandle-like I/O, but to something other than an underlying
-file descriptor. Good examples are IO::Scalar (for printing to a
-string) and IO::Lines (for printing to an array of lines).
-
-=item *
-
-B<FooHandle implements the TIEHANDLE interface> (see L<perltie>);
-that is, it provides methods TIEHANDLE, GETC, PRINT, PRINTF,
-READ, and READLINE.
-
-=item *
-
-B<FooHandle implements the traditional OO interface> of
-FileHandle and IO::Handle; i.e., it contains methods like getline(),
-read(), print(), seek(), tell(), eof(), etc.
-
-=back
-
-
-Normally, users of your class would have two options:
-
-
-=over 4
-
-=item *
-
-B<Use only OO syntax,> and forsake named I/O operators like 'print'.
-
-=item *
-
-B<Use with tie,> and forsake treating it as a first-class object
-(i.e., class-specific methods can only be invoked through the underlying
-object via tied()... giving the object a "split personality").
-
-=back
-
-
-But now with IO::WrapTie, you can say:
-
- $WT = wraptie('FooHandle', &FOO_RDWR, 2);
- $WT->print("Hello, world\n"); # OO syntax
- print $WT "Yes!\n"; # Named operator syntax too!
- $WT->weird_stuff; # Other methods!
-
-And if you're authoring a class like FooHandle, just have it inherit
-from C<IO::WrapTie::Slave> and that first line becomes even prettier:
-
- $WT = FooHandle->new_tie(&FOO_RDWR, 2);
-
-B<The bottom line:> now, almost any class can look and work exactly like
-an IO::Handle... and be used both with OO and non-OO filehandle syntax.
-
-
-=head1 HOW IT ALL WORKS
-
-
-=head2 The data structures
-
-Consider this example code, using classes in this distribution:
-
- use IO::Scalar;
- use IO::WrapTie;
-
- $WT = wraptie('IO::Scalar',\$s);
- print $WT "Hello, ";
- $WT->print("world!\n");
-
-In it, the wraptie() function creates a data structure as follows:
-
- * $WT is a blessed reference to a tied filehandle
- $WT glob; that glob is tied to the "Slave" object.
- | * You would do all your i/o with $WT directly.
- |
- |
- | ,---isa--> IO::WrapTie::Master >--isa--> IO::Handle
- V /
- .-------------.
- | |
- | | * Perl i/o operators work on the tied object,
- | "Master" | invoking the TIEHANDLE methods.
- | | * Method invocations are delegated to the tied
- | | slave.
- `-------------'
- |
- tied(*$WT) | .---isa--> IO::WrapTie::Slave
- V /
- .-------------.
- | |
- | "Slave" | * Instance of FileHandle-like class which doesn't
- | | actually use file descriptors, like IO::Scalar.
- | IO::Scalar | * The slave can be any kind of object.
- | | * Must implement the TIEHANDLE interface.
- `-------------'
-
-
-I<NOTE:> just as an IO::Handle is really just a blessed reference to a
-I<traditional> filehandle glob... so also, an IO::WrapTie::Master
-is really just a blessed reference to a filehandle
-glob I<which has been tied to some "slave" class.>
-
-
-=head2 How wraptie() works
-
-=over 4
-
-=item 1.
-
-The call to function C<wraptie(SLAVECLASS, TIEARGS...)> is
-passed onto C<IO::WrapTie::Master::new()>.
-Note that class IO::WrapTie::Master is a subclass of IO::Handle.
-
-=item 2.
-
-The C<IO::WrapTie::Master::new> method creates a new IO::Handle object,
-reblessed into class IO::WrapTie::Master. This object is the I<master>,
-which will be returned from the constructor. At the same time...
-
-=item 3.
-
-The C<new> method also creates the I<slave>: this is an instance
-of SLAVECLASS which is created by tying the master's IO::Handle
-to SLAVECLASS via C<tie(HANDLE, SLAVECLASS, TIEARGS...)>.
-This call to C<tie()> creates the slave in the following manner:
-
-=item 4.
-
-Class SLAVECLASS is sent the message C<TIEHANDLE(TIEARGS...)>; it
-will usually delegate this to C<SLAVECLASS::new(TIEARGS...)>, resulting
-in a new instance of SLAVECLASS being created and returned.
-
-=item 5.
-
-Once both master and slave have been created, the master is returned
-to the caller.
-
-=back
-
-
-=head2 How I/O operators work (on the master)
-
-Consider using an i/o operator on the master:
-
- print $WT "Hello, world!\n";
-
-Since the master ($WT) is really a [blessed] reference to a glob,
-the normal Perl i/o operators like C<print> may be used on it.
-They will just operate on the symbol part of the glob.
-
-Since the glob is tied to the slave, the slave's PRINT method
-(part of the TIEHANDLE interface) will be automatically invoked.
-
-If the slave is an IO::Scalar, that means IO::Scalar::PRINT will be
-invoked, and that method happens to delegate to the C<print()> method
-of the same class. So the I<real> work is ultimately done by
-IO::Scalar::print().
-
-
-=head2 How methods work (on the master)
-
-Consider using a method on the master:
-
- $WT->print("Hello, world!\n");
-
-Since the master ($WT) is blessed into the class IO::WrapTie::Master,
-Perl first attempts to find a C<print()> method there. Failing that,
-Perl next attempts to find a C<print()> method in the superclass,
-IO::Handle. It just so happens that there I<is> such a method;
-that method merely invokes the C<print> i/o operator on the self object...
-and for that, see above!
-
-But let's suppose we're dealing with a method which I<isn't> part
-of IO::Handle... for example:
-
- my $sref = $WT->sref;
-
-In this case, the intuitive behavior is to have the master delegate the
-method invocation to the slave (now do you see where the designations
-come from?). This is indeed what happens: IO::WrapTie::Master contains
-an AUTOLOAD method which performs the delegation.
-
-So: when C<sref()> can't be found in IO::Handle, the AUTOLOAD method
-of IO::WrapTie::Master is invoked, and the standard behavior of
-delegating the method to the underlying slave (here, an IO::Scalar)
-is done.
-
-Sometimes, to get this to work properly, you may need to create
-a subclass of IO::WrapTie::Master which is an effective master for
-I<your> class, and do the delegation there.
-
-
-
-
-=head1 NOTES
-
-B<Why not simply use the object's OO interface?>
- Because that means forsaking the use of named operators
-like print(), and you may need to pass the object to a subroutine
-which will attempt to use those operators:
-
- $O = FooHandle->new(&FOO_RDWR, 2);
- $O->print("Hello, world\n"); # OO syntax is okay, BUT....
-
- sub nope { print $_[0] "Nope!\n" }
- X nope($O); # ERROR!!! (not a glob ref)
-
-
-B<Why not simply use tie()?>
- Because (1) you have to use tied() to invoke methods in the
-object's public interface (yuck), and (2) you may need to pass
-the tied symbol to another subroutine which will attempt to treat
-it in an OO-way... and that will break it:
-
- tie *T, 'FooHandle', &FOO_RDWR, 2;
- print T "Hello, world\n"; # Operator is okay, BUT...
-
- tied(*T)->other_stuff; # yuck! AND...
-
- sub nope { shift->print("Nope!\n") }
- X nope(\*T); # ERROR!!! (method "print" on unblessed ref)
-
-
-B<Why a master and slave?
- Why not simply write FooHandle to inherit from IO::Handle?>
- I tried this, with an implementation similar to that of IO::Socket.
-The problem is that I<the whole point is to use this with objects
-that don't have an underlying file/socket descriptor.>.
-Subclassing IO::Handle will work fine for the OO stuff, and fine with
-named operators I<if> you tie()... but if you just attempt to say:
-
- $IO = FooHandle->new(&FOO_RDWR, 2);
- print $IO "Hello!\n";
-
-you get a warning from Perl like:
-
- Filehandle GEN001 never opened
-
-because it's trying to do system-level i/o on an (unopened) file
-descriptor. To avoid this, you apparently have to tie() the handle...
-which brings us right back to where we started! At least the
-IO::WrapTie mixin lets us say:
-
- $IO = FooHandle->new_tie(&FOO_RDWR, 2);
- print $IO "Hello!\n";
-
-and so is not I<too> bad. C<:-)>
-
-
-=head1 WARNINGS
-
-Remember: this stuff is for doing FileHandle-like i/o on things
-I<without underlying file descriptors>. If you have an underlying
-file descriptor, you're better off just inheriting from IO::Handle.
-
-B<Be aware that new_tie() always returns an instance of a
-kind of IO::WrapTie::Master...> it does B<not> return an instance
-of the i/o class you're tying to!
-
-Invoking some methods on the master object causes AUTOLOAD to delegate
-them to the slave object... so it I<looks> like you're manipulating a
-"FooHandle" object directly, but you're not.
-
-I have not explored all the ramifications of this use of tie().
-I<Here there be dragons>.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-=cut
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/Common.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/Common.pm
deleted file mode 100644
index 6787a7f..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/Common.pm
+++ /dev/null
@@ -1,255 +0,0 @@
-package Common;
-
-#--------------------
-#
-# GLOBALS...
-#
-#--------------------
-
-use vars qw(@DATA_SA
- @DATA_LA
- $DATA_S
-
- @ADATA_SA
- $ADATA_S
-
- $FDATA_S
- @FDATA_LA
- );
-
-#------------------------------
-
-# Data...
-# ...as a scalar-array:
-@DATA_SA = (
-"A diner while ",
-"dining at Crewe\n",
-"Found a rather large ",
-"mouse in his stew\n Said the waiter, \"Don't shout,\n",
-" And ",
-"wave it about..."
-);
-# ...as a string:
-$DATA_S = join '', @DATA_SA;
-# ...as a line-array:
-@DATA_LA = lines($DATA_S);
-
-# Additional data...
-# ...as a scalar-array:
-@ADATA_SA = (
-"\nor the rest",
-" will be wanting one ",
-"too.\"\n",
-);
-# ...as a string:
-$ADATA_S = join '', @ADATA_SA;
-
-
-# Full data...
-# ...as a string:
-$FDATA_S = $DATA_S . $ADATA_S;
-# ...as a line-array:
-@FDATA_LA = lines($FDATA_S);
-
-
-
-
-# Tester:
-my $T;
-
-# Scratch...
-my $BUF = ''; # buffer
-my $M; # message
-
-
-#------------------------------
-# lines STR
-#------------------------------
-sub lines {
- my $s = shift;
- split /^/, $s;
-}
-
-#------------------------------
-# test_init PARAMHASH
-#------------------------------
-# Init common tests.
-#
-sub test_init {
- my ($self, %p) = @_;
- $T = $p{TBone};
-}
-
-#------------------------------
-# test_print HANDLE, TEST
-#------------------------------
-# Test printing to handle.
-#
-sub test_print {
- my ($self, $GH, $all) = @_;
- local($_);
-
- # Append with print:
- $M = "PRINT: able to print to $GH";
- $GH->print($ADATA_SA[0]);
- $GH->print(@ADATA_SA[1..2]);
- $T->ok(1, $M);
-}
-
-#------------------------------
-# test_getc HANDLE
-#------------------------------
-# Test getc().
-#
-sub test_getc {
- my ($self, $GH) = @_;
- local($_);
- my @c;
-
- $M = "GETC: seek(0,0) and getc()";
- $GH->seek(0,0);
- for (0..2) { $c[$_] = $GH->getc };
- $T->ok((($c[0] eq 'A') &&
- ($c[1] eq ' ') &&
- ($c[2] eq 'd')), $M);
-}
-
-#------------------------------
-# test_getline HANDLE
-#------------------------------
-# Test getline() and getlines().
-#
-sub test_getline {
- my ($self, $GH) = @_;
- local($_);
-
- $M = "GETLINE/SEEK3: seek(3,START) and getline() gets part of 1st line";
- $GH->seek(3,0);
- my $got = $GH->getline;
- my $want = "iner while dining at Crewe\n";
- $T->ok(($got eq $want), $M,
- GH => $GH,
- Got => $got,
- Want => $want);
-
- $M = "GETLINE/NEXT: next getline() gets subsequent line";
- $_ = $GH->getline;
- $T->ok(($_ eq "Found a rather large mouse in his stew\n"), $M,
- Got => $_);
-
- $M = "GETLINE/EOF: repeated getline() finds end of stream";
- my $last;
- for (1..6) { $last = $GH->getline }
- $T->ok(!$last, $M,
- Last => (defined($last) ? $last : 'undef'));
-
- $M = "GETLINE/GETLINES: seek(0,0) and getlines() slurps in string";
- $GH->seek(0,0);
- my @got = $GH->getlines;
- my $gots = join '', @got;
- $T->ok(($gots eq $FDATA_S), $M,
- GotAll => $gots,
- WantAll => $FDATA_S,
- Got => \@got);
-}
-
-#------------------------------
-# test_read HANDLE
-#------------------------------
-# Test read().
-#
-sub test_read {
- my ($self, $GH) = @_;
- local($_);
-
- $M = "READ/FIRST10: reading first 10 bytes with seek(0,START) + read(10)";
- $GH->seek(0,0);
- $GH->read($BUF,10);
- $T->ok(($BUF eq "A diner wh"), $M);
-
- $M = "READ/NEXT10: reading next 10 bytes with read(10)";
- $GH->read($BUF,10);
- $T->ok(($BUF eq "ile dining"), $M);
-
- $M = "READ/TELL20: tell() the current location as 20";
- $T->ok(($GH->tell == 20), $M);
-
- $M = "READ/SLURP: seek(0,START) + read(1000) reads in whole handle";
- $GH->seek(0,0);
- $GH->read($BUF,1000);
- $T->ok(($BUF eq $FDATA_S), $M);
-}
-
-#------------------------------
-# test_seek HANDLE
-#------------------------------
-# Test seeks other than (0,0).
-#
-sub test_seek {
- my ($self, $GH) = @_;
- local($_);
-
- $M = "SEEK/END: seek(-6,END) + read(3) returns 'too'";
- $GH->seek(-6,2);
- $GH->read($BUF,3);
- $T->ok(($BUF eq 'too'), $M);
-
- $M = "SEEK/CUR: seek(-3,CUR) + read(3) returns 'too' again";
- $GH->seek(-3,1);
- $GH->read($BUF,3);
- $T->ok(($BUF eq 'too'), $M);
-}
-
-#------------------------------
-# test_tie PARAMHASH
-#------------------------------
-# Test tiehandle getline() interface.
-#
-sub test_tie {
- my ($self, %p) = @_;
- my ($tieclass, @tieargs) = @{$p{TieArgs}};
- local($_);
- my @lines;
- my $i;
- my $nmatched;
-
- $M = "TIE/TIE: able to tie";
- tie(*OUT, $tieclass, @tieargs);
- $T->ok(1, $M);
-
- $M = "TIE/PRINT: printing data";
- print OUT @DATA_SA;
- print OUT $ADATA_SA[0];
- print OUT @ADATA_SA[1..2];
- $T->ok(1, $M);
-
- $M = "TIE/GETLINE: seek(0,0) and scalar <> get expected lines";
- tied(*OUT)->seek(0,0); # rewind
- @lines = (); push @lines, $_ while <OUT>; # get lines one at a time
- $nmatched = 0; # total up matches...
- for (0..$#lines) { ++$nmatched if ($lines[$_] eq $FDATA_LA[$_]) };
- $T->ok(($nmatched == int(@FDATA_LA)), $M,
- Want => \@FDATA_LA,
- Gotl => \@lines,
- Lines=> "0..$#lines",
- Match=> $nmatched,
- FDatl=> int(@FDATA_LA),
- FData=> \@FDATA_LA);
-
- $M = "TIE/GETLINES: seek(0,0) and array <> slurps in lines";
- tied(*OUT)->seek(0,0); # rewind
- @lines = <OUT>; # get lines all at once
- $nmatched = 0; # total up matches...
- for (0..$#lines) { ++$nmatched if ($lines[$_] eq $FDATA_LA[$_]) };
- $T->ok(($nmatched == int(@FDATA_LA)), $M,
- Want => \@FDATA_LA,
- Gotl => \@lines,
- Lines=> "0..$#lines",
- Match=> $nmatched);
-
-}
-
-#------------------------------
-1;
-
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/ExtUtils/TBone.pm b/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/ExtUtils/TBone.pm
deleted file mode 100644
index 179acb8..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/ExtUtils/TBone.pm
+++ /dev/null
@@ -1,534 +0,0 @@
-package ExtUtils::TBone;
-
-
-=head1 NAME
-
-ExtUtils::TBone - a "skeleton" for writing "t/*.t" test files.
-
-
-=head1 SYNOPSIS
-
-Include a copy of this module in your t directory (as t/ExtUtils/TBone.pm),
-and then write your t/*.t files like this:
-
- use lib "./t"; # to pick up a ExtUtils::TBone
- use ExtUtils::TBone;
-
- # Make a tester... here are 3 different alternatives:
- my $T = typical ExtUtils::TBone; # standard log
- my $T = new ExtUtils::TBone; # no log
- my $T = new ExtUtils::TBone "testout/Foo.tlog"; # explicit log
-
- # Begin testing, and expect 3 tests in all:
- $T->begin(3); # expect 3 tests
- $T->msg("Something for the log file"); # message for the log
-
- # Run some tests:
- $T->ok($this); # test 1: no real info logged
- $T->ok($that, # test 2: logs a comment
- "Is that ok, or isn't it?");
- $T->ok(($this eq $that), # test 3: logs comment + vars
- "Do they match?",
- This => $this,
- That => $that);
-
- # That last one could have also been written...
- $T->ok_eq($this, $that); # does 'eq' and logs operands
- $T->ok_eqnum($this, $that); # does '==' and logs operands
-
- # End testing:
- $T->end;
-
-
-=head1 DESCRIPTION
-
-This module is intended for folks who release CPAN modules with
-"t/*.t" tests. It makes it easy for you to output syntactically
-correct test-output while at the same time logging all test
-activity to a log file. Hopefully, bug reports which include
-the contents of this file will be easier for you to investigate.
-
-
-=head1 LOG FILE
-
-A typical log file output by this module looks like this:
-
- 1..3
-
- ** A message logged with msg().
- ** Another one.
- 1: My first test, using test(): how'd I do?
- 1: ok 1
-
- ** Yet another message.
- 2: My second test, using test_eq()...
- 2: A: The first string
- 2: B: The second string
- 2: not ok 2
-
- 3: My third test.
- 3: ok 3
-
- END
-
-Each test() is logged with the test name and results, and
-the test-number prefixes each line.
-This allows you to scan a large file easily with "grep" (or, ahem, "perl").
-A blank line follows each test's record, for clarity.
-
-
-=head1 PUBLIC INTERFACE
-
-=cut
-
-# Globals:
-use strict;
-use vars qw($VERSION);
-use FileHandle;
-use File::Basename;
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-
-
-#------------------------------
-
-=head2 Construction
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item new [ARGS...]
-
-I<Class method, constructor.>
-Create a new tester. Any arguments are sent to log_open().
-
-=cut
-
-sub new {
- my $self = bless {
- OUT =>\*STDOUT,
- Begin=>0,
- End =>0,
- Count=>0,
- }, shift;
- $self->log_open(@_) if @_;
- $self;
-}
-
-#------------------------------
-
-=item typical
-
-I<Class method, constructor.>
-Create a typical tester. Use this instead of new() for most applicaitons.
-The directory "testout" is created for you automatically, to hold
-the output log file.
-
-=cut
-
-sub typical {
- my $class = shift;
- my ($tfile) = basename $0;
- unless (-d "testout") {
- mkdir "testout", 0755
- or die "Couldn't create a 'testout' subdirectory: $!\n";
- ### warn "$class: created 'testout' directory\n";
- }
- $class->new($class->catfile('.', 'testout', "${tfile}log"));
-}
-
-#------------------------------
-# DESTROY
-#------------------------------
-# Class method, destructor.
-# Automatically closes the log.
-#
-sub DESTROY {
- $_[0]->log_close;
-}
-
-
-#------------------------------
-
-=back
-
-=head2 Doing tests
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item begin NUMTESTS
-
-I<Instance method.>
-Start testing.
-
-=cut
-
-sub begin {
- my ($self, $n) = @_;
- return if $self->{Begin}++;
- $self->l_print("1..$n\n\n");
- print {$self->{OUT}} "1..$n\n";
-}
-
-#------------------------------
-
-=item end
-
-I<Instance method.>
-End testing.
-
-=cut
-
-sub end {
- my ($self) = @_;
- return if $self->{End}++;
- $self->l_print("END\n");
- print {$self->{OUT}} "END\n";
-}
-
-#------------------------------
-
-=item ok BOOL, [TESTNAME], [PARAMHASH...]
-
-I<Instance method.>
-Do a test, and log some information connected with it.
-Use it like this:
-
- $T->ok(-e $dotforward);
-
-Or better yet, like this:
-
- $T->ok((-e $dotforward),
- "Does the user have a .forward file?");
-
-Or even better, like this:
-
- $T->ok((-e $dotforward),
- "Does the user have a .forward file?",
- User => $ENV{USER},
- Path => $dotforward,
- Fwd => $ENV{FWD});
-
-That last one, if it were test #3, would be logged as:
-
- 3: Does the user have a .forward file?
- 3: User: "alice"
- 3: Path: "/home/alice/.forward"
- 3: Fwd: undef
- 3: ok
-
-You get the idea. Note that defined quantities are logged with delimiters
-and with all nongraphical characters suitably escaped, so you can see
-evidence of unexpected whitespace and other badnasties.
-Had "Fwd" been the string "this\nand\nthat", you'd have seen:
-
- 3: Fwd: "this\nand\nthat"
-
-And unblessed array refs like ["this", "and", "that"] are
-treated as multiple values:
-
- 3: Fwd: "this"
- 3: Fwd: "and"
- 3: Fwd: "that"
-
-=cut
-
-sub ok {
- my ($self, $ok, $test, @ps) = @_;
- ++($self->{Count}); # next test
-
- # Report to harness:
- my $status = ($ok ? "ok " : "not ok ") . $self->{Count};
- print {$self->{OUT}} $status, "\n";
-
- # Log:
- $self->ln_print($test, "\n") if $test;
- while (@ps) {
- my ($k, $v) = (shift @ps, shift @ps);
- my @vs = ((ref($v) and (ref($v) eq 'ARRAY'))? @$v : ($v));
- foreach (@vs) {
- if (!defined($_)) { # value not defined: output keyword
- $self->ln_print(qq{ $k: undef\n});
- }
- else { # value defined: output quoted, encoded form
- s{([\n\t\x00-\x1F\x7F-\xFF\\\"])}
- {'\\'.sprintf("%02X",ord($1)) }exg;
- s{\\0A}{\\n}g;
- $self->ln_print(qq{ $k: "$_"\n});
- }
- }
- }
- $self->ln_print($status, "\n");
- $self->l_print("\n");
- 1;
-}
-
-
-#------------------------------
-
-=item ok_eq ASTRING, BSTRING, [TESTNAME], [PARAMHASH...]
-
-I<Instance method.>
-Convenience front end to ok(): test whether C<ASTRING eq BSTRING>, and
-logs the operands as 'A' and 'B'.
-
-=cut
-
-sub ok_eq {
- my ($self, $this, $that, $test, @ps) = @_;
- $self->ok(($this eq $that),
- ($test || "(Is 'A' string-equal to 'B'?)"),
- A => $this,
- B => $that,
- @ps);
-}
-
-
-#------------------------------
-
-=item ok_eqnum ANUM, BNUM, [TESTNAME], [PARAMHASH...]
-
-I<Instance method.>
-Convenience front end to ok(): test whether C<ANUM == BNUM>, and
-logs the operands as 'A' and 'B'.
-
-=cut
-
-sub ok_eqnum {
- my ($self, $this, $that, $test, @ps) = @_;
- $self->ok(($this == $that),
- ($test || "(Is 'A' numerically-equal to 'B'?)"),
- A => $this,
- B => $that,
- @ps);
-}
-
-#------------------------------
-
-=back
-
-=head2 Logging messages
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item log_open PATH
-
-I<Instance method.>
-Open a log file for messages to be output to. This is invoked
-for you automatically by C<new(PATH)> and C<typical()>.
-
-=cut
-
-sub log_open {
- my ($self, $path) = @_;
- $self->{LogPath} = $path;
- $self->{LOG} = FileHandle->new(">$path") || die "open $path: $!";
- $self;
-}
-
-#------------------------------
-
-=item log_close
-
-I<Instance method.>
-Close the log file and stop logging.
-You shouldn't need to invoke this directly; the destructor does it.
-
-=cut
-
-sub log_close {
- my $self = shift;
- close(delete $self->{LOG}) if $self->{LOG};
-}
-
-#------------------------------
-
-=item log MESSAGE...
-
-I<Instance method.>
-Log a message to the log file. No alterations are made on the
-text of the message. See msg() for an alternative.
-
-=cut
-
-sub log {
- my $self = shift;
- print {$self->{LOG}} @_ if $self->{LOG};
-}
-
-#------------------------------
-
-=item msg MESSAGE...
-
-I<Instance method.>
-Log a message to the log file. Lines are prefixed with "** " for clarity,
-and a terminating newline is forced.
-
-=cut
-
-sub msg {
- my $self = shift;
- my $text = join '', @_;
- chomp $text;
- $text =~ s{^}{** }gm;
- $self->l_print($text, "\n");
-}
-
-#------------------------------
-#
-# l_print MESSAGE...
-#
-# Instance method, private.
-# Print to the log file if there is one.
-#
-sub l_print {
- my $self = shift;
- print { $self->{LOG} } @_ if $self->{LOG};
-}
-
-#------------------------------
-#
-# ln_print MESSAGE...
-#
-# Instance method, private.
-# Print to the log file, prefixed by message number.
-#
-sub ln_print {
- my $self = shift;
- foreach (split /\n/, join('', @_)) {
- $self->l_print("$self->{Count}: $_\n");
- }
-}
-
-#------------------------------
-
-=back
-
-=head2 Utilities
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item catdir DIR, ..., DIR
-
-I<Class/instance method.>
-Concatenate several directories into a path ending in a directory.
-Lightweight version of the one in the (very new) File::Spec.
-
-Paths are assumed to be absolute.
-To signify a relative path, the first DIR must be ".",
-which is processed specially.
-
-On Mac, the path I<does> end in a ':'.
-On Unix, the path I<does not> end in a '/'.
-
-=cut
-
-sub catdir {
- my $self = shift;
- my $relative = shift @_ if ($_[0] eq '.');
- if ($^O eq 'Mac') {
- return ($relative ? ':' : '') . (join ':', @_) . ':';
- }
- else {
- return ($relative ? './' : '/') . join '/', @_;
- }
-}
-
-#------------------------------
-
-=item catfile DIR, ..., DIR, FILE
-
-I<Class/instance method.>
-Like catdir(), but last element is assumed to be a file.
-Note that, at a minimum, you must supply at least a single DIR.
-
-=cut
-
-sub catfile {
- my $self = shift;
- my $file = pop;
- if ($^O eq 'Mac') {
- return $self->catdir(@_) . $file;
- }
- else {
- return $self->catdir(@_) . "/$file";
- }
-}
-
-#------------------------------
-
-=back
-
-
-=head1 CHANGE LOG
-
-B<Current version:>
-$Id: TBone.pm,v 1.1.1.1 2001-03-30 02:46:26 dparker Exp $
-
-=over 4
-
-=item Version 1.116
-
-Cosmetic improvements only.
-
-
-=item Version 1.112
-
-Added lightweight catdir() and catfile() (a la File::Spec)
-to enhance portability to Mac environment.
-
-
-=item Version 1.111
-
-Now uses File::Basename to create "typical" logfile name,
-for portability.
-
-
-=item Version 1.110
-
-Fixed bug in constructor that surfaced if no log was being used.
-
-=back
-
-Created: Friday-the-13th of February, 1998.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc. (F<http://www.zeegee.com>)
-
-=cut
-
-#------------------------------
-
-1;
-__END__
-
-my $T = new ExtUtils::TBone "testout/foo.tlog";
-$T->begin(3);
-$T->msg("before 1\nor 2");
-$T->ok(1, "one");
-$T->ok(2, "Two");
-$T->ok(3, "Three", Roman=>'III', Arabic=>[3, '03'], Misc=>"3\nor 3");
-$T->end;
-
-1;
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Lines.t b/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Lines.t
deleted file mode 100644
index 13fc13c..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Lines.t
+++ /dev/null
@@ -1,43 +0,0 @@
-#!/usr/bin/perl -w #-*-Perl-*-
-
-use lib "./t", "./lib";
-use IO::Lines;
-use ExtUtils::TBone;
-use Common;
-
-
-#--------------------
-#
-# TEST...
-#
-#--------------------
-
-# Make a tester:
-my $T = typical ExtUtils::TBone;
-Common->test_init(TBone=>$T);
-
-# Set the counter:
-my $tie_tests = (($] >= 5.004) ? 4 : 0);
-$T->begin(11 + $tie_tests);
-
-# Open a scalar on a string, containing initial data:
-my @la = @Common::DATA_LA;
-my $LAH = IO::Lines->new(\@la);
-$T->ok($LAH, "OPEN: open a scalar on a ref to an array");
-
-# Run standard tests:
-Common->test_print($LAH);
-Common->test_getc($LAH);
-Common->test_getline($LAH);
-Common->test_read($LAH);
-#Common->test_seek($LAH);
-
-# Run tie tests:
-if ($tie_tests) {
- Common->test_tie(TieArgs => ['IO::Lines', []]);
-}
-
-# So we know everything went well...
-$T->end;
-
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Scalar.t b/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Scalar.t
deleted file mode 100644
index 688a92e..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_Scalar.t
+++ /dev/null
@@ -1,121 +0,0 @@
-#!/usr/bin/perl -w #-*-Perl-*-
-
-use lib "./t", "./lib";
-use IO::Scalar;
-use ExtUtils::TBone;
-use Common;
-
-
-#--------------------
-#
-# TEST...
-#
-#--------------------
-
-# Make a tester:
-my $T = typical ExtUtils::TBone;
-Common->test_init(TBone=>$T);
-
-# Set the counter:
-my $tie_tests = (($] >= 5.004) ? 4 : 0);
-my $par_tests = 9;
-$T->begin(14 + $tie_tests + $par_tests);
-
-# Open a scalar on a string, containing initial data:
-my $s = $Common::DATA_S;
-my $SH = IO::Scalar->new(\$s);
-$T->ok($SH, "OPEN: open a scalar on a ref to a string");
-
-# Run standard tests:
-Common->test_print($SH);
-$T->ok(($s eq $Common::FDATA_S), "FULL",
- S=>$s, F=>$Common::FDATA_S);
-Common->test_getc($SH);
-Common->test_getline($SH);
-Common->test_read($SH);
-Common->test_seek($SH);
-
-# Run tie tests:
-if ($tie_tests) {
- Common->test_tie(TieArgs => ['IO::Scalar']);
-}
-
-# Try $/ tests:
-if (1) {
- my @lines = ("par 1, line 1\n",
- "par 1, line 2\n",
- "\n",
- "\n",
- "\n",
- "\n",
- "par 2, line 1\n",
- "\n",
- "par 3, line 1\n",
- "par 3, line 2\n",
- "par 3, line 3");
- my $all = join '', @lines;
-
- ### Slurp everything:
- {
- $SH = IO::Scalar->new(\"$all");
- $SH->use_RS(1);
- local $/ = undef;
- $T->ok_eq($SH->getline, $all,
- "RECORDS: Slurp everything");
- }
-
- ### Read a little, slurp the rest:
- {
- $SH = IO::Scalar->new(\"$all");
- $SH->use_RS(1);
- $T->ok_eq($SH->getline, $lines[0],
- "RECORDS: get first line");
- local $/ = undef;
- $T->ok_eq($SH->getline, join('', @lines[1..$#lines]),
- "RECORDS: slurp the rest");
- }
-
- ### Read paragraph by paragraph:
- {
- $SH = IO::Scalar->new(\"$all");
- $SH->use_RS(1);
- local $/ = "";
- $T->ok_eq($SH->getline, join('', @lines[0..2]),
- "RECORDS: first par");
- $T->ok_eq($SH->getline, join('', @lines[6..7]),
- "RECORDS: second par");
- $T->ok_eq($SH->getline, join('', @lines[8..10]),
- "RECORDS: third par");
- }
-
- ### Read record by record:
- {
- $SH = IO::Scalar->new(\"$all");
- $SH->use_RS(1);
- local $/ = "1,";
- $T->ok_eq($SH->getline, "par 1,",
- "RECORDS: first rec");
- $T->ok_eq($SH->getline, " line 1\npar 1,",
- "RECORDS: second rec");
- }
-
- ### Read line by line:
- {
- $SH = IO::Scalar->new(\"$all");
- local $/ = "1,";
- $T->ok_eq($SH->getline, $lines[0],
- "RECORDS W/O RS: first rec");
- }
-
-}
-
-# So we know everything went well...
-$T->end;
-
-
-
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_ScalarArray.t b/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_ScalarArray.t
deleted file mode 100644
index 2995591..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_ScalarArray.t
+++ /dev/null
@@ -1,49 +0,0 @@
-#!/usr/bin/perl -w #-*-Perl-*-
-
-use lib "./t", "./lib";
-use IO::ScalarArray;
-use ExtUtils::TBone;
-use Common;
-
-
-#--------------------
-#
-# TEST...
-#
-#--------------------
-
-# Make a tester:
-my $T = typical ExtUtils::TBone;
-Common->test_init(TBone=>$T);
-
-# Set the counter:
-my $tie_tests = (($] >= 5.004) ? 4 : 0);
-$T->begin(11 + $tie_tests);
-
-# Open a scalar on a string, containing initial data:
-my @sa = @Common::DATA_SA;
-my $SAH = IO::ScalarArray->new(\@sa);
-$T->ok($SAH, "OPEN: open a scalar on a ref to an array");
-
-# Run standard tests:
-Common->test_print($SAH);
-Common->test_getc($SAH);
-Common->test_getline($SAH);
-Common->test_read($SAH);
-#Common->test_seek($SAH);
-
-# Run tie tests:
-if ($tie_tests) {
- Common->test_tie(TieArgs => ['IO::ScalarArray', []]);
-}
-
-# So we know everything went well...
-$T->end;
-
-
-
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_WrapTie.t b/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_WrapTie.t
deleted file mode 100644
index 2817ca4..0000000
--- a/monitoring/PerlModules/CPAN/IO-stringy-1.219/t/IO_WrapTie.t
+++ /dev/null
@@ -1,66 +0,0 @@
-#!/usr/bin/perl -w #-*-Perl-*-
-
-use lib "./t";
-use IO::Handle;
-use IO::Scalar;
-use ExtUtils::TBone;
-use IO::WrapTie;
-
-#--------------------
-#
-# TEST...
-#
-#--------------------
-
-# Make a tester:
-my $T = typical ExtUtils::TBone;
-
-# Set the counter:
-unless ($] >= 5.004) {
- $T->begin(1);
- $T->ok(1);
- $T->end;
- exit 0;
-}
-$T->begin(6);
-
-my $hello = 'Hello, ';
-my $world = "world!\n";
-
-#### test
-my $s = '';
-my $SH = new IO::WrapTie 'IO::Scalar', \$s;
-$T->ok(1, "Construction");
-
-#### test
-print $SH $hello, $world;
-$T->ok($s eq "$hello$world",
- "print FH ARGS",
- S => $s);
-
-#### test
-$SH->print($hello, $world);
-$T->ok($s eq "$hello$world$hello$world",
- "FH->print(ARGS)",
- S => $s);
-
-#### test
-$SH->seek(0,0);
-$T->ok(1, "FH->seek(0,0)");
-
-#### test
-@x = <$SH>;
-$T->ok((($x[0] eq "$hello$world") &&
- ($x[1] eq "$hello$world") &&
- !$x[2]),
- "array = <FH>");
-
-#### test
-my $sref = $SH->sref;
-$T->ok($sref eq \$s, "FH->sref");
-
-
-# So we know everything went well...
-$T->end;
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/BUILD b/monitoring/PerlModules/CPAN/MIME-tools-5.410/BUILD
deleted file mode 100644
index b3b2597..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/BUILD
+++ /dev/null
@@ -1,46 +0,0 @@
-# Macros
-
-#control upversion
-%define external_package 1
-
-%define cvs_package PerlModules/CPAN/MIME-tools-5.410
-
-# Package specific stuff
-Name: perl-MIME-tools
-Version: 5.413.0
-Release: 1.1
-Packager: Dave Parker <dparker(a)nocpulse.com>
-Summary: Perl Multipurpose Internet Mail Extension (MIME) library
-Source: %name-%PACKAGE_VERSION.tar.gz
-BuildArch: noarch
-Requires: perl
-Provides: MIME-tools
-Group: unsorted
-URL: http://www.zeegee.com
-License: GPL or Artistic
-Vendor: Red Hat, Inc.
-Prefix: %{_our_prefix}
-BuildRoot: %{_tmppath}/%cvs_package
-
-%description
-
-Provides Multipurpose Internet Mail Extension (MIME) capabilities to Perl
-scripts.
-
-
-%prep
-%entirely_abstract_build_step
-
-%build
-%makefile_build
-
-%install
-cd $RPM_PACKAGE_NAME-$RPM_PACKAGE_VERSION
-%makefile_install
-%point_scripts_to_correct_perl
-%make_file_list
-
-%files -f %{name}-%{version}-%{release}-filelist
-
-%clean
-%abstract_clean_script
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/COPYING b/monitoring/PerlModules/CPAN/MIME-tools-5.410/COPYING
deleted file mode 100644
index 90e500b..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/COPYING
+++ /dev/null
@@ -1,40 +0,0 @@
-The "MIME-tools" Perl5 kit.
-Copyright (c) 1996 by Eryq. All rights reserved.
-Copyright (c) 1999 by ZeeGee Software Inc. All rights reserved.
-
-This program is free software; you can redistribute it and/or
-modify it under the same terms as Perl itself.
-
-You should have received a copy of the Perl license along with
-Perl; see the file README in Perl distribution.
-
-You should have received a copy of the GNU General Public License
-along with Perl; see the file Copying. If not, write to
-the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-You should have received a copy of the Artistic License
-along with Perl; see the file Artistic.
-
- NO WARRANTY
-
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/INSTALLING b/monitoring/PerlModules/CPAN/MIME-tools-5.410/INSTALLING
deleted file mode 100644
index 0e9c6e9..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/INSTALLING
+++ /dev/null
@@ -1,26 +0,0 @@
-------------------------------------------------------------
-STANDARD INSTALLATION
-
-On most systems, just do this from the command line:
-
- perl Makefile.PL
- make test
- make install
-
-Please note that you'll need permission to write to the
-standard installation directories; under Unix-like systems, this
-often means that you must be logged in as "root".
-
-If you're on a non-Unix platform, you might be using 'dmake'
-instead of 'make'.
-
-------------------------------------------------------------
-NON-STANDARD INSTALLATION
-
-To install to a non-standard place else (e.g., "/home/me/lib"),
-see the manual page for ExtUtils::MakeMaker, or try this:
-
- perl Makefile.PL LIB=/home/me/lib
- make test
- make install
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/MANIFEST b/monitoring/PerlModules/CPAN/MIME-tools-5.410/MANIFEST
deleted file mode 100644
index a496201..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/MANIFEST
+++ /dev/null
@@ -1,202 +0,0 @@
-COPYING
-INSTALLING
-MANIFEST
-Makefile.PL
-README
-README-OR-DIE
-README.system
-docs/MIME/Body.pm.html
-docs/MIME/Decoder.pm.html
-docs/MIME/Decoder/Base64.pm.html
-docs/MIME/Decoder/Binary.pm.html
-docs/MIME/Decoder/Gzip64.pm.html
-docs/MIME/Decoder/NBit.pm.html
-docs/MIME/Decoder/QuotedPrint.pm.html
-docs/MIME/Decoder/UU.pm.html
-docs/MIME/Decoder/icons/h1bullet.gif
-docs/MIME/Decoder/icons/h2bullet.gif
-docs/MIME/Decoder/icons/zeegee.gif
-docs/MIME/Entity.pm.html
-docs/MIME/Field/ConTraEnc.pm.html
-docs/MIME/Field/ContDisp.pm.html
-docs/MIME/Field/ContType.pm.html
-docs/MIME/Field/ParamVal.pm.html
-docs/MIME/Field/icons/h1bullet.gif
-docs/MIME/Field/icons/h2bullet.gif
-docs/MIME/Field/icons/zeegee.gif
-docs/MIME/Head.pm.html
-docs/MIME/Parser.pm.html
-docs/MIME/Parser/Filer.pm.html
-docs/MIME/Parser/Reader.pm.html
-docs/MIME/Parser/Results.pm.html
-docs/MIME/Parser/icons/h1bullet.gif
-docs/MIME/Parser/icons/h2bullet.gif
-docs/MIME/Parser/icons/zeegee.gif
-docs/MIME/Tools.pm.html
-docs/MIME/WordDecoder.pm.html
-docs/MIME/Words.pm.html
-docs/MIME/icons/h1bullet.gif
-docs/MIME/icons/h2bullet.gif
-docs/MIME/icons/zeegee.gif
-docs/icons/h1bullet.gif
-docs/icons/h2bullet.gif
-docs/icons/zeegee.gif
-docs/index-menu.html
-docs/index.html
-docs/index.menu
-docs/mimeabuse.html
-docs/mimedump.html
-docs/mimeencode.html
-docs/mimeexplode.html
-docs/mimepostcard.html
-docs/mimeprint.html
-docs/mimeref.html
-docs/mimesend.html
-docs/mimesender.html
-docs/mimetour.html
-examples/README
-examples/mimeabuse
-examples/mimedump
-examples/mimeencode
-examples/mimeexplode
-examples/mimepostcard
-examples/mimeprint
-examples/mimeref
-examples/mimesend
-examples/mimesender
-examples/mimetour
-lib/MIME/Body.pm
-lib/MIME/Decoder.pm
-lib/MIME/Decoder/Base64.pm
-lib/MIME/Decoder/Binary.pm
-lib/MIME/Decoder/Gzip64.pm
-lib/MIME/Decoder/NBit.pm
-lib/MIME/Decoder/QuotedPrint.pm
-lib/MIME/Decoder/UU.pm
-lib/MIME/Entity.pm
-lib/MIME/Field/ConTraEnc.pm
-lib/MIME/Field/ContDisp.pm
-lib/MIME/Field/ContType.pm
-lib/MIME/Field/ParamVal.pm
-lib/MIME/Head.pm
-lib/MIME/Parser.pm
-lib/MIME/Parser/Filer.pm
-lib/MIME/Parser/Reader.pm
-lib/MIME/Parser/Results.pm
-lib/MIME/Tools.pm
-lib/MIME/WordDecoder.pm
-lib/MIME/Words.pm
-patch
-t/Body.t
-t/Decoder.t
-t/Entity.t
-t/ExtUtils/TBone.pm
-t/Gauntlet.t
-t/Globby.pm
-t/Head.t
-t/Misc.t
-t/Parser.t
-t/Ref.t
-t/Tmpfile.topt
-t/WordDecoder.t
-t/Words.t
-testin/ak-0696.msg
-testin/andreas-1296.txt
-testin/andreas-1296.uu
-testin/badbound.msg
-testin/badfile.msg
-testin/bluedot.jpg
-testin/crlf.hdr
-testin/encoded.hdr
-testin/first.hdr
-testin/fun.txt
-testin/german.msg
-testin/infinite.msg
-testin/intl.msg
-testin/jt-0498.msg
-testin/lennie.msg
-testin/mime-lg.b64
-testin/mime-sm.b64
-testin/mime-sm.gif
-testin/mp-msg-rfc822.msg
-testin/multi-2gifs.msg
-testin/multi-bad.msg
-testin/multi-badnames.msg
-testin/multi-clen.msg
-testin/multi-digest.msg
-testin/multi-igor.msg
-testin/multi-igor2.msg
-testin/multi-nested.msg
-testin/multi-nested2.msg
-testin/multi-nested3.msg
-testin/multi-simple.msg
-testin/not-mime.msg
-testin/phil.b64
-testin/phil.bin
-testin/phil2.b64
-testin/quot-print.body
-testin/second.hdr
-testin/short.txt
-testin/sig
-testin/sig-uu.msg
-testin/sig2
-testin/sig3
-testin/simple.msg
-testin/simple.msgb
-testin/simple.msgh
-testin/third.hdr
-testin/up.gif.uu
-testin/words.txt
-testin/x-gzip64.body
-testin/x-gzip64.msg
-testin/zeegee.gif.uu
-testmsgs/ak-0696-nest.ref
-testmsgs/ak-0696-none.ref
-testmsgs/ak-0696-replace.ref
-testmsgs/ak-0696.msg
-testmsgs/bluedot-postcard.msg
-testmsgs/bluedot-postcard.ref
-testmsgs/bluedot-simple.msg
-testmsgs/bluedot-simple.ref
-testmsgs/dup-names.msg
-testmsgs/dup-names.ref
-testmsgs/frag.msg
-testmsgs/german.msg
-testmsgs/german.ref
-testmsgs/hdr-fakeout.msg
-testmsgs/hdr-fakeout.ref
-testmsgs/multi-2evil.msg
-testmsgs/multi-2evil.ref
-testmsgs/multi-2gifs.msg
-testmsgs/multi-2gifs.ref
-testmsgs/multi-clen.msg
-testmsgs/multi-clen.ref
-testmsgs/multi-digest.msg
-testmsgs/multi-digest.ref
-testmsgs/multi-frag.msg
-testmsgs/multi-igor.msg
-testmsgs/multi-igor.ref
-testmsgs/multi-igor2.msg
-testmsgs/multi-igor2.ref
-testmsgs/multi-nested.msg
-testmsgs/multi-nested.ref
-testmsgs/multi-nested2.msg
-testmsgs/multi-nested2.ref
-testmsgs/multi-nested3.msg
-testmsgs/multi-nested3.ref
-testmsgs/multi-simple.msg
-testmsgs/multi-simple.ref
-testmsgs/multi-weirdspace.msg
-testmsgs/multi-weirdspace.ref
-testmsgs/re-fwd.msg
-testmsgs/re-fwd.ref
-testmsgs/russian.msg
-testmsgs/russian.ref
-testmsgs/simple.msg
-testmsgs/simple.ref
-testmsgs/uu-junk-extracted.ref
-testmsgs/uu-junk-target.msg
-testmsgs/uu-junk.msg
-testmsgs/uu-junk.ref
-testmsgs/uu-zeegee.msg
-testmsgs/uu-zeegee.ref
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/Makefile.PL b/monitoring/PerlModules/CPAN/MIME-tools-5.410/Makefile.PL
deleted file mode 100755
index c86da8b..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/Makefile.PL
+++ /dev/null
@@ -1,26 +0,0 @@
-#!/usr/bin/perl
-use ExtUtils::MakeMaker;
-WriteMakefile(
- NAME => "MIME-tools",
- VERSION_FROM => "lib/MIME/Tools.pm",
- PREREQ_PM => {"Mail::Header" => 1.01,
- "Mail::Internet" => 1.0203,
- "Mail::Field" => 1.05,
-
- "MIME::QuotedPrint" => 2.03,
- "MIME::Base64" => 2.04,
- "IO::Stringy" => 1.211,
- "File::Spec" => 0.6,
- "File::Path" => 1,
- },
- 'dist' => {
- PREOP =>"cvu_perl_preop -B -f -m MIME::Tools",
- COMPRESS =>'gzip',
- SUFFIX =>'gz',
- },
-);
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/README b/monitoring/PerlModules/CPAN/MIME-tools-5.410/README
deleted file mode 100644
index 5c3ade7..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/README
+++ /dev/null
@@ -1,1434 +0,0 @@
-NAME
- MIME-tools - modules for parsing (and creating!) MIME entities
-
-SYNOPSIS
- Here's some pretty basic code for parsing a MIME message, and outputting
- its decoded components to a given directory:
-
- use MIME::Parser;
-
- ### Create parser, and set some parsing options:
- my $parser = new MIME::Parser;
- $parser->output_under("$ENV{HOME}/mimemail");
-
- ### Parse input:
- $entity = $parser->parse(\*STDIN) or die "parse failed\n";
-
- ### Take a look at the top-level entity (and any parts it has):
- $entity->dump_skeleton;
-
- Here's some code which composes and sends a MIME message containing
- three parts: a text file, an attached GIF, and some more text:
-
- use MIME::Entity;
-
- ### Create the top-level, and set up the mail headers:
- $top = MIME::Entity->build(Type =>"multipart/mixed",
- From => "me\(a)myhost.com",
- To => "you\(a)yourhost.com",
- Subject => "Hello, nurse!");
-
- ### Part #1: a simple text document:
- $top->attach(Path=>"./testin/short.txt");
-
- ### Part #2: a GIF file:
- $top->attach(Path => "./docs/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64");
-
- ### Part #3: some literal text:
- $top->attach(Data=>$message);
-
- ### Send it:
- open MAIL, "| /usr/lib/sendmail -t -oi -oem" or die "open: $!";
- $top->print(\*MAIL);
- close MAIL;
-
- For more examples, look at the scripts in the examples directory of the
- MIME-tools distribution.
-
-DESCRIPTION
- MIME-tools is a collection of Perl5 MIME:: modules for parsing,
- decoding, *and generating* single- or multipart (even nested multipart)
- MIME messages. (Yes, kids, that means you can send messages with
- attached GIF files).
-
-REQUIREMENTS
- You will need the following installed on your system:
-
- File::Path
- File::Spec
- IPC::Open2 (optional)
- IO::Scalar, ... from the IO-stringy distribution
- MIME::Base64
- MIME::QuotedPrint
- Net::SMTP
- Mail::Internet, ... from the MailTools distribution.
-
- See the Makefile.PL in your distribution for the most-comprehensive list
- of prerequisite modules and their version numbers.
-
-A QUICK TOUR
- Overview of the classes
-
- Here are the classes you'll generally be dealing with directly:
-
- (START HERE) results() .-----------------.
- \ .-------->| MIME:: |
- .-----------. / | Parser::Results |
- | MIME:: |--' `-----------------'
- | Parser |--. .-----------------.
- `-----------' \ filer() | MIME:: |
- | parse() `-------->| Parser::Filer |
- | gives you `-----------------'
- | a... | output_path()
- | | determines
- | | path() of...
- | head() .--------. |
- | returns... | MIME:: | get() |
- V .-------->| Head | etc... |
- .--------./ `--------' |
- .---> | MIME:: | |
- `-----| Entity | .--------. |
- parts() `--------'\ | MIME:: | /
- returns `-------->| Body |<---------'
- sub-entities bodyhandle() `--------'
- (if any) returns... | open()
- | returns...
- |
- V
- .--------. read()
- | IO:: | getline()
- | Handle | print()
- `--------' etc...
-
- To illustrate, parsing works this way:
-
- * The "parser" parses the MIME stream. A parser is an instance of
- `MIME::Parser'. You hand it an input stream (like a filehandle) to
- parse a message from: if the parse is successful, the result is an
- "entity".
-
- * A parsed message is represented by an "entity". An entity is an instance
- of `MIME::Entity' (a subclass of `Mail::Internet'). If the message
- had "parts" (e.g., attachments), then those parts are "entities" as
- well, contained inside the top-level entity. Each entity has a
- "head" and a "body".
-
- * The entity's "head" contains information about the message. A "head" is
- an instance of `MIME::Head' (a subclass of `Mail::Header'). It
- contains information from the message header: content type, sender,
- subject line, etc.
-
- * The entity's "body" knows where the message data is. You can ask to
- "open" this data source for *reading* or *writing*, and you will get
- back an "I/O handle".
-
- * You can open() a "body" and get an "I/O handle" to read/write message
- data. This handle is an object that is basically like an IO::Handle
- or a FileHandle... it can be any class, so long as it supports a
- small, standard set of methods for reading from or writing to the
- underlying data source.
-
- A typical multipart message containing two parts -- a textual greeting
- and an "attached" GIF file -- would be a tree of MIME::Entity objects,
- each of which would have its own MIME::Head. Like this:
-
- .--------.
- | MIME:: | Content-type: multipart/mixed
- | Entity | Subject: Happy Samhaine!
- `--------'
- |
- `----.
- parts |
- | .--------.
- |---| MIME:: | Content-type: text/plain; charset=us-ascii
- | | Entity | Content-transfer-encoding: 7bit
- | `--------'
- | .--------.
- |---| MIME:: | Content-type: image/gif
- | Entity | Content-transfer-encoding: base64
- `--------' Content-disposition: inline;
- filename="hs.gif"
-
- Parsing messages
-
- You usually start by creating an instance of MIME::Parser and setting up
- certain parsing parameters: what directory to save extracted files to,
- how to name the files, etc.
-
- You then give that instance a readable filehandle on which waits a MIME
- message. If all goes well, you will get back a MIME::Entity object (a
- subclass of Mail::Internet), which consists of...
-
- * A MIME::Head (a subclass of Mail::Header) which holds the MIME header
- data.
-
- * A MIME::Body, which is a object that knows where the body data is. You
- ask this object to "open" itself for reading, and it will hand you
- back an "I/O handle" for reading the data: this is a FileHandle-like
- object, and could be of any class, so long as it conforms to a
- subset of the IO::Handle interface.
-
- If the original message was a multipart document, the MIME::Entity
- object will have a non-empty list of "parts", each of which is in turn a
- MIME::Entity (which might also be a multipart entity, etc, etc...).
-
- Internally, the parser (in MIME::Parser) asks for instances of
- MIME::Decoder whenever it needs to decode an encoded file. MIME::Decoder
- has a mapping from supported encodings (e.g., 'base64') to classes whose
- instances can decode them. You can add to this mapping to try out
- new/experiment encodings. You can also use MIME::Decoder by itself.
-
- Composing messages
-
- All message composition is done via the MIME::Entity class. For single-
- part messages, you can use the MIME::Entity/build constructor to create
- MIME entities very easily.
-
- For multipart messages, you can start by creating a top-level
- `multipart' entity with MIME::Entity::build(), and then use the similar
- MIME::Entity::attach() method to attach parts to that message. *Please
- note:* what most people think of as "a text message with an attached GIF
- file" is *really* a multipart message with 2 parts: the first being the
- text message, and the second being the GIF file.
-
- When building MIME a entity, you'll have to provide two very important
- pieces of information: the *content type* and the *content transfer
- encoding*. The type is usually easy, as it is directly determined by the
- file format; e.g., an HTML file is `text/html'. The encoding, however,
- is trickier... for example, some HTML files are `7bit'-compliant, but
- others might have very long lines and would need to be sent `quoted-
- printable' for reliability.
-
- See the section on encoding/decoding for more details, as well as the
- section on "A MIME PRIMER".
-
- Sending email
-
- Since MIME::Entity inherits directly from Mail::Internet, you can use
- the normal Mail::Internet mechanisms to send email. For example,
-
- $entity->smtpsend;
-
- Encoding/decoding support
-
- The MIME::Decoder class can be used to *encode* as well; this is done
- when printing MIME entities. All the standard encodings are supported
- (see the section on "A MIME PRIMER" for details):
-
- Encoding: | Normally used when message contents are:
- -------------------------------------------------------------------
- 7bit | 7-bit data with under 1000 chars/line, or multipart.
- 8bit | 8-bit data with under 1000 chars/line.
- binary | 8-bit data with some long lines (or no line breaks).
- quoted-printable | Text files with some 8-bit chars (e.g., Latin-1 text).
- base64 | Binary files.
-
- Which encoding you choose for a given document depends largely on (1)
- what you know about the document's contents (text vs binary), and (2)
- whether you need the resulting message to have a reliable encoding for
- 7-bit Internet email transport.
-
- In general, only `quoted-printable' and `base64' guarantee reliable
- transport of all data; the other three "no-encoding" encodings simply
- pass the data through, and are only reliable if that data is 7bit ASCII
- with under 1000 characters per line, and has no conflicts with the
- multipart boundaries.
-
- I've considered making it so that the content-type and encoding can be
- automatically inferred from the file's path, but that seems to be asking
- for trouble... or at least, for Mail::Cap...
-
- Message-logging
-
- MIME-tools is a large and complex toolkit which tries to deal with a
- wide variety of external input. It's sometimes helpful to see what's
- really going on behind the scenes. There are several kinds of messages
- logged by the toolkit itself:
-
- Debug messages
- These are printed directly to the STDERR, with a prefix of `"MIME-
- tools: debug"'.
-
- Debug message are only logged if you have turned the debugging entry
- elsewhere in this document on in the MIME::Tools configuration.
-
- Warning messages
- These are logged by the standard Perl warn() mechanism to indicate
- an unusual situation. They all have a prefix of `"MIME-tools:
- warning"'.
-
- Warning messages are only logged if `$^W' is set true and
- MIME::Tools is not configured to be the quiet entry elsewhere in
- this document .
-
- Error messages
- These are logged by the standard Perl warn() mechanism to indicate
- that something actually failed. They all have a prefix of `"MIME-
- tools: error"'.
-
- Error messages are only logged if `$^W' is set true and MIME::Tools
- is not configured to be the quiet entry elsewhere in this document .
-
- Usage messages
- Unlike "typical" warnings above, which warn about problems
- processing data, usage-warnings are for alerting developers of
- deprecated methods and suspicious invocations.
-
- Usage messages are currently only logged if `$^W' is set true and
- MIME::Tools is not configured to be the quiet entry elsewhere in
- this document .
-
- When a MIME::Parser (or one of its internal helper classes) wants to
- report a message, it generally does so by recording the message to the
- MIME::Parser::Results object immediately before invoking the appropriate
- function above. That means each parsing run has its own trace-log which
- can be examined for problems.
-
- Configuring the toolkit
-
- If you want to tweak the way this toolkit works (for example, to turn on
- debugging), use the routines in the MIME::Tools module.
-
- debugging
- Turn debugging on or off. Default is false (off).
-
- MIME::Tools->debugging(1);
-
- quiet
- Turn the reporting of warning/error messages on or off. Default is
- true, meaning that these message are silenced.
-
- MIME::Tools->quiet(1);
-
- version
- Return the toolkit version.
-
- print MIME::Tools->version, "\n";
-
-THINGS YOU SHOULD DO
- Take a look at the examples
-
- The MIME-Tools distribution comes with an "examples" directory. The
- scripts in there are basically just tossed-together, but they'll give
- you some ideas of how to use the parser.
-
- Run with warnings enabled
-
- *Always* run your Perl script with `-w'. If you see a warning about a
- deprecated method, change your code ASAP. This will ease upgrades
- tremendously.
-
- Avoid non-standard encodings
-
- Don't try to MIME-encode using the non-standard MIME encodings. It's
- just not a good practice if you want people to be able to read your
- messages.
-
- Plan for thrown exceptions
-
- For example, if your mail-handling code absolutely must not die, then
- perform mail parsing like this:
-
- $entity = eval { $parser->parse(\*INPUT) };
-
- Parsing is a complex process, and some components may throw exceptions
- if seriously-bad things happen. Since "seriously-bad" is in the eye of
- the beholder, you're better off *catching* possible exceptions instead
- of asking me to propagate `undef' up the stack. Use of exceptions in
- reusable modules is one of those religious issues we're never all going
- to agree upon; thankfully, that's what `eval{}' is good for.
-
- Check the parser results for warnings/errors
-
- As of 5.3xx, the parser tries extremely hard to give you a MIME::Entity.
- If there were any problems, it logs warnings/errors to the underlying
- "results" object (see the MIME::Parser::Results manpage). Look at that
- object after each parse. Print out the warnings and errors, *especially*
- if messages don't parse the way you thought they would.
-
- Don't plan on printing exactly what you parsed!
-
- *Parsing is a (slightly) lossy operation.* Because of things like
- ambiguities in base64-encoding, the following is *not* going to spit out
- its input unchanged in all cases:
-
- $entity = $parser->parse(\*STDIN);
- $entity->print(\*STDOUT);
-
- If you're using MIME::Tools to process email, remember to save the data
- you parse if you want to send it on unchanged. This is vital for things
- like PGP-signed email.
-
- Understand how international characters are represented
-
- The MIME standard allows for text strings in headers to contain
- characters from any character set, by using special sequences which look
- like this:
-
- =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=
-
- To be consistent with the existing Mail::Field classes, MIME::Tools does
- *not* automatically unencode these strings, since doing so would lose
- the character-set information and interfere with the parsing of fields
- (see the "decode_headers" entry in the MIME::Parser manpage for a full
- explanation). That means you should be prepared to deal with these
- encoded strings.
-
- The most common question then is, how do I decode these encoded strings?
- The answer depends on what you want to decode them *to*: ASCII, Latin1,
- UTF-8, etc. Be aware that your "target" representation may not support
- all possible character sets you might encounter; for example, Latin1
- (ISO-8859-1) has no way of representing Big5 (Chinese) characters. A
- common practice is to represent "untranslateable" characters as "?"s, or
- to ignore them completely.
-
- To unencode the strings into some of the more-popular Western byte
- representations (e.g., Latin1, Latin2, etc.), you can use the decoders
- in MIME::WordDecoder (see the MIME::WordDecoder manpage). The simplest
- way is by using `unmime()', a function wrapped around your "default"
- decoder, as follows:
-
- use MIME::WordDecoder;
- ...
- $subject = unmime $entity->head->get('subject');
-
- One place this *is* done automatically is in extracting the recommended
- filename for a part while parsing. That's why you should start by
- setting up the best "default" decoder if the default target of Latin1
- isn't to your liking.
-
-THINGS I DO THAT YOU SHOULD KNOW ABOUT
- Fuzzing of CRLF and newline on input
-
- RFC-1521 dictates that MIME streams have lines terminated by CRLF
- (`"\r\n"'). However, it is extremely likely that folks will want to
- parse MIME streams where each line ends in the local newline character
- `"\n"' instead.
-
- An attempt has been made to allow the parser to handle both CRLF and
- newline-terminated input.
-
- Fuzzing of CRLF and newline when decoding
-
- The `"7bit"' and `"8bit"' decoders will decode both a `"\n"' and a
- `"\r\n"' end-of-line sequence into a `"\n"'.
-
- The `"binary"' decoder (default if no encoding specified) still outputs
- stuff verbatim... so a MIME message with CRLFs and no explicit encoding
- will be output as a text file that, on many systems, will have an
- annoying ^M at the end of each line... *but this is as it should be*.
-
- Fuzzing of CRLF and newline when encoding/composing
-
- All encoders currently output the end-of-line sequence as a `"\n"', with
- the assumption that the local mail agent will perform the conversion
- from newline to CRLF when sending the mail. However, there probably
- should be an option to output CRLF as per RFC-1521.
-
- Inability to handle multipart boundaries with embedded newlines
-
- Let's get something straight: this is an evil, EVIL practice. If your
- mailer creates multipart boundary strings that contain newlines, give it
- two weeks notice and find another one. If your mail robot receives MIME
- mail like this, regard it as syntactically incorrect, which it is.
-
- Ignoring non-header headers
-
- People like to hand the parser raw messages straight from POP3 or from a
- mailbox. There is often predictable non-header information in front of
- the real headers; e.g., the initial "From" line in the following
- message:
-
- From - Wed Mar 22 02:13:18 2000
- Return-Path: <eryq(a)zeegee.com>
- Subject: Hello
-
- The parser simply ignores such stuff quietly. Perhaps it shouldn't, but
- most people seem to want that behavior.
-
- Fuzzing of empty multipart preambles
-
- Please note that there is currently an ambiguity in the way preambles
- are parsed in. The following message fragments *both* are regarded as
- having an empty preamble (where `\n' indicates a newline character):
-
- Content-type: multipart/mixed; boundary="xyz"\n
- Subject: This message (#1) has an empty preamble\n
- \n
- --xyz\n
- ...
-
- Content-type: multipart/mixed; boundary="xyz"\n
- Subject: This message (#2) also has an empty preamble\n
- \n
- \n
- --xyz\n
- ...
-
- In both cases, the *first* completely-empty line (after the "Subject")
- marks the end of the header.
-
- But we should clearly ignore the *second* empty line in message #2,
- since it fills the role of *"the newline which is only there to make
- sure that the boundary is at the beginning of a line"*. Such newlines
- are *never* part of the content preceding the boundary; thus, there is
- no preamble "content" in message #2.
-
- However, it seems clear that message #1 *also* has no preamble
- "content", and is in fact merely a compact representation of an empty
- preamble.
-
- Use of a temp file during parsing
-
- *Why not do everything in core?* Although the amount of core available
- on even a modest home system continues to grow, the size of attachments
- continues to grow with it. I wanted to make sure that even users with
- small systems could deal with decoding multi-megabyte sounds and movie
- files. That means not being core-bound.
-
- As of the released 5.3xx, MIME::Parser gets by with only one temp file
- open per parser. This temp file provides a sort of infinite scratch
- space for dealing with the current message part. It's fast and
- lightweight, but you should know about it anyway.
-
- Why do I assume that MIME objects are email objects?
-
- Achim Bohnet once pointed out that MIME headers do nothing more than
- store a collection of attributes, and thus could be represented as
- objects which don't inherit from Mail::Header.
-
- I agree in principle, but RFC-1521 says otherwise. RFC-1521 [MIME]
- headers are a syntactic subset of RFC-822 [email] headers. Perhaps a
- better name for these modules would have been RFC1521:: instead of
- MIME::, but we're a little beyond that stage now.
-
- When I originally wrote these modules for the CPAN, I agonized for a
- long time about whether or not they really should subclass from
- Mail::Internet (then at version 1.17). Thanks to Graham Barr, who
- graciously evolved MailTools 1.06 to be more MIME-friendly, unification
- was achieved at MIME-tools release 2.0. The benefits in reuse alone have
- been substantial.
-
-A MIME PRIMER
- So you need to parse (or create) MIME, but you're not quite up on the
- specifics? No problem...
-
- Glossary
-
- Here are some definitions adapted from RFC-1521 explaining the
- terminology we use; each is accompanied by the equivalent in MIME::
- module terms...
-
- attachment
- An "attachment" is common slang for any part of a multipart message
- -- except, perhaps, for the first part, which normally carries a
- user message describing the attachments that follow (e.g.: "Hey
- dude, here's that GIF file I promised you.").
-
- In our system, an attachment is just a MIME::Entity under the top-
- level entity, probably one of its parts.
-
- body
- The "body" of an entity is that portion of the entity which follows
- the header and which contains the real message content. For example,
- if your MIME message has a GIF file attachment, then the body of
- that attachment is the base64-encoded GIF file itself.
-
- A body is represented by an instance of MIME::Body. You get the body
- of an entity by sending it a bodyhandle() message.
-
- body part
- One of the parts of the body of a multipart /entity. A body part has
- a /header and a /body, so it makes sense to speak about the body of
- a body part.
-
- Since a body part is just a kind of entity, it's represented by an
- instance of MIME::Entity.
-
- entity
- An "entity" means either a /message or a /body part. All entities
- have a /header and a /body.
-
- An entity is represented by an instance of MIME::Entity. There are
- instance methods for recovering the header (a MIME::Head) and the
- body (a MIME::Body).
-
- header
- This is the top portion of the MIME message, which contains the
- "Content-type", "Content-transfer-encoding", etc. Every MIME entity
- has a header, represented by an instance of MIME::Head. You get the
- header of an entity by sending it a head() message.
-
- message
- A "message" generally means the complete (or "top-level") message
- being transferred on a network.
-
- There currently is no explicit package for "messages"; under MIME::,
- messages are streams of data which may be read in from files or
- filehandles. You can think of the MIME::Entity returned by the
- MIME::Parser as representing the full message.
-
- Content types
-
- This indicates what kind of data is in the MIME message, usually as
- *majortype/minortype*. The standard major types are shown below. A more-
- comprehensive listing may be found in RFC-2046.
-
- application
- Data which does not fit in any of the other categories, particularly
- data to be processed by some type of application program.
- `application/octet-stream', `application/gzip',
- `application/postscript'...
-
- audio
- Audio data. `audio/basic'...
-
- image
- Graphics data. `image/gif', `image/jpeg'...
-
- message
- A message, usually another mail or MIME message. `message/rfc822'...
-
- multipart
- A message containing other messages. `multipart/mixed',
- `multipart/alternative'...
-
- text
- Textual data, meant for humans to read. `text/plain', `text/html'...
-
- video
- Video or video+audio data. `video/mpeg'...
-
- Content transfer encodings
-
- This is how the message body is packaged up for safe transit. There are
- the 5 major MIME encodings. A more-comprehensive listing may be found in
- RFC-2045.
-
- 7bit
- No encoding is done at all. This label simply asserts that no 8-bit
- characters are present, and that lines do not exceed 1000 characters
- in length (including the CRLF).
-
- 8bit
- No encoding is done at all. This label simply asserts that the
- message might contain 8-bit characters, and that lines do not exceed
- 1000 characters in length (including the CRLF).
-
- binary
- No encoding is done at all. This label simply asserts that the
- message might contain 8-bit characters, and that lines may exceed
- 1000 characters in length. Such messages are the *least* likely to
- get through mail gateways.
-
- base64
- A standard encoding, which maps arbitrary binary data to the 7bit
- domain. Like "uuencode", but very well-defined. This is how you
- should send essentially binary information (tar files, GIFs, JPEGs,
- etc.).
-
- quoted-printable
- A standard encoding, which maps arbitrary line-oriented data to the
- 7bit domain. Useful for encoding messages which are textual in
- nature, yet which contain non-ASCII characters (e.g., Latin-1,
- Latin-2, or any other 8-bit alphabet).
-
-TERMS AND CONDITIONS
- Eryq (eryq(a)zeegee.com), ZeeGee Software Inc (http://www.zeegee.com).
-
- Copyright (c) 1998, 1999 by ZeeGee Software Inc (www.zeegee.com).
-
- All rights reserved. This program is free software; you can redistribute
- it and/or modify it under the same terms as Perl itself. See the COPYING
- file in the distribution for details.
-
-SUPPORT
- Please email me directly with questions/problems (see AUTHOR below).
-
- If you want to be placed on an email distribution list (not a mailing
- list!) for MIME-tools, and receive bug reports, patches, and updates as
- to when new MIME-tools releases are planned, just email me and say so.
- If your project is using MIME-tools, it might not be a bad idea to find
- out about those bugs *before* they become problems...
-
-VERSION
- $Revision: 1.1.1.1 $
-
-CHANGE LOG
- Version 5.410 (2000/11/23)
- Better detection of evil filenames. Now we check for filenames which
- are suspiciously long, and a new MIME::Filer::exorcise_filename()
- method is used to try and remove the evil. *Thanks to Jason Haar for
- the suggestion.*
-
- Version 5.409 (2000/11/12)
- Added functionality to MIME::WordDecoder, including support for
- plain US-ASCII.
-
- MIME::Tools::tmpopen() made more flexible. You can now override the
- tmpfile-opening behavior.
-
- Version 5.408 (2000/11/10)
- Added new Beta unmime() mechanism. See the MIME::WordDecoder manpage
- for full details. Also see the section on "Understand how
- international characters are represented".
-
- Version 5.405 (2000/11/05)
- Added a purge() that does what people want it to. Now, when a parse
- finishes and you want to delete everything that was created by it,
- you can invoke `purge()' on the parser's filer. All
- files/directories created during the last parse should vanish.
- *Thanks to everyone who complained about MIME::Entity::purge.*
-
- Version 5.404 (2000/11/04)
- Added new automatic MIME-decoding of attachment filenames with
- encoded (non-ASCII) characters. Hopefully this will do more good
- than harm. The use of MIME::Parser::decode_headers() and
- MIME::Head::decode() has been deprecated in favor of the new
- MIME::Words "unmime" mechanism. Please see the "unmime" entry in the
- MIME::Words manpage.
-
- Added tolerance for unquoted =?...?= in param values. This is in
- violation of the RFCs, but then, so are some MUAs. *Thanks to desti
- for bringing this to my attention.*
-
- Fixed supposedly-bad B-encoding. *Thanks to Otto Frost for bringing
- this to my attention.*
-
- Version 5.316 (2000/09/21)
- Increased tolerance in MIME::Parser. Now will ignore bogus POP3
- "+OK" line before header, as well as bogus mailbox "From " line
- (both with warnings). *Thanks to Antony OSullivan (ajos1) for
- suggesting this feature.*
-
- Fixed small epilogue-related bug in MIME::Entity::print_body(). Now
- it only outputs a final newline if the epilogue does not end in one
- already. Support for checking the preamble/epilogue in regression
- tests was also added. *Thanks to Lars Hecking for bringing this
- issue up.*
-
- Updated documentation. All module manual pages should now direct
- readers to the main MIME-tools manual page.
-
- Version 5.314 (2000/09/06)
- Fixed Makefile.PL to have less-restrictive requirement for
- File::Spec (0.6).
-
- Version 5.313 (2000/09/05)
- Fixed nasty bug with evil filenames. Certain evil filenames were
- getting replaced by internally-generated filenames which were just
- as evil... ouch! If your parser occasionally throws a fatal
- exception with a "write-open" error message, then you have this bug.
- *Thanks to Julian Field and Antony OSullivan (ajos1) for delivering
- the evidence!*
-
- Beware the doctor
- who cures seasonal head cold
- by killing patient
-
- Improved naming of extracted files. If a filename is regarded as
- evil, we guess that it might just be because of part information,
- and attempt to find and use the final path element.
-
- Simplified message logging and made it more consistent. For details,
- see the section on "Message-logging".
-
- Version 5.312 (2000/09/03)
- Fixed a Perl 5.7 select() incompatibility which caused "make test"
- to fail. *Thanks to Nick Ing-Simmons for the patch.*
-
- Version 5.311 (2000/08/16)
- Blind fix for Win32 uudecoding bug. A missing binmode seems to be
- the culprit here; let's see if this fixes it. *Thanks to ajos1 for
- finding the culprit!*
-
- The carriage return
- thumbs its nose at me, laughing:
- DOS I/O *still* sucks
-
- Version 5.310 (2000/08/15)
- Fixed a bug in the back-compat output_prefix() method of
- MIME::Parser. Basically, output prefixes were not being set through
- this mechanism. *Thanks to ajos1 for the alert.*
-
- shift @_, ### "shift at-underscore"
- or @_ will have
- bogus "self" object
-
- Added some backcompat methods, like parse_FH(). *Thanks (and
- apologies) to Alain Kotoujansky.*
-
- Added filenames-with-spaces support to MIME::Decoder::UU. *Thanks to
- Richard Pun for the suggestion.*
-
- Version 5.305 (2000/07/20)
- Added MIME::Entity::parts_DFS as convenient way to "get all parts".
- *Thanks to Xavier Armengou for suggesting this method.*
-
- Removed the Alpha notice. Still a few features to tweak, but those
- will be minor.
-
- Version 5.303 (2000/07/07)
- Fixed output bugs in new Filers. Scads of them: bad handling of
- filename collisions, bad implementation of output_under(), bad
- linking to results, POD errors, you name it. If this had gone to
- CPAN, I'd have issued a factory recall. `:-('
-
- Errors, like beetles,
- Multiply ferociously
- In the small hours
-
- Version 5.301 (2000/07/06)
- READ ME BEFORE UPGRADING PAST THIS POINT! New MIME::Parser::Filer
- class -- not fully backwards-compatible. In response to demand for
- more-comprehensive file-output strategies, I have decided that the
- best thing to do is to split all the file-output logic
- (output_path(), evil_filename(), etc.) into its own separate class,
- inheriting from the new MIME::Parser::Filer class. If you *override*
- any of the following in a MIME::Parser subclass, you will need to
- change your code accordingly:
-
- evil_filename
- output_dir
- output_filename
- output_path
- output_prefix
- output_under
-
- My sincere apologies for any inconvenience this will cause, but it's
- ultimately for the best, and is quite likely the last structural
- change to 5.x. *Thanks to Tyson Ackland for all the ideas.*
- Incidentally, the new code also fixes a bug where identically-named
- files in the same message could clobber each other.
-
- A message arrives:
- "Here are three files, all named 'Foo'"
- Only one survives. :-(
-
- Fixed bug in MIME::Words header decoding. Underscores were not being
- handled properly. *Thanks to Dominique Unruh and Doru Petrescu,* who
- independently submitted the same fix within 2 hours of each other,
- after this bug has lain dormant for months:
-
- Two users, same bug,
- same patch -- mere hours apart:
- Truly, life is odd.
-
- Removed escaping of underscore in regexps. Escaping the underscore
- (\_) in regexps was sloppy and wrong (escaped metacharacters may
- include anything in \w), and the newest Perls warn about it. *Thanks
- to David Dyck for bringing this to my attention.*
-
- What, then, is a word?
- Some letters, digits, and, yes:
- Underscores as well
-
- Added Force option to MIME::Entity's make_multipart. *Thanks to Bob
- Glickstein for suggesting this.*
-
- Numerous fixlets to example code. *Thanks to Doru Petrescu for
- these.*
-
- Added REQUIREMENTS section in docs. Long-overdue. *Thanks to Ingo
- Schmiegel for motivating this.*
-
- Version 5.211 (2000/06/24)
- Fixed auto-uudecode bug. Parser was failing with "part did not end
- with expected boundary" error when uuencoded entity was a
- *singlepart* message (ironically, uuencoded parts of multiparts
- worked fine). *Thanks to Michael Mohlere for testing uudecode and
- finding this.*
-
- The hurrying bee
- Flies far for nectar, missing
- The nearest flowers
-
- Say ten thousand times:
- Complex cases may succeed
- Where simple ones fail
-
- Parse errors now generate warnings. Parser errors now cause warn()s
- to be generated if they are not turned into fatal exceptions. This
- might be a little redundant, seeing as they are available in the
- "results", but parser-warnings already cause warn()s. I can always
- put in a "quiet" switch if people complain.
-
- Miscellaneous cleanup. Documentation of MIME::Parser improved
- slightly, and a redundant warning was removed.
-
- Version 5.210 (2000/06/20)
- Change in "evil" filename. Made MIME::Parser's evil_filename
- stricter by having it reject "path" characters: any of '/' '\' ':'
- '[' ']'.
-
- Just as with beauty
- The eye of the beholder
- Is where "evil" lives.
-
- Documentation fixes. Corrected a number of docs in MIME::Entity
- which were obsoleted in the transition from 4.x to 5.x. *Thanks to
- Michael Fischer for pointing these out.* For this one, a special 5-
- 5-5-5 Haiku of anagrams:
-
- Documentation
- in mutant code, O!
- Edit -- no, CUT! [moan]
- I meant to un-doc...
-
- IO::Lines usage bug fixed. MIME::Entity was missing a "use
- IO::Lines", which caused an exception when you tried to use the
- body() method of MIME::Entity. *Thanks to Hideyo Imazu and Michael
- Fischer for pointing this out.*
-
- Bareword looks fine, but
- Perl cries: "Whoa there... IO::Lines?
- Never heard of it."
-
- Version 5.209 (2000/06/10)
- Autodetection of uuencode. You can now tell the parser to hunt for
- uuencode inside what should be text parts. See extract_uuencode()
- for full details. Beware: this is largely untested at the moment.
- *Special thanks to Michael Mohlere at ADJE Webmail, who was the
- first -- and most-insistent -- user to request this feature.*
-
- Faster parsing. Sped up the MIME::Decoder::NBit decoder quite a bit
- by using a variant of the chunking trick I used for
- MIME::Decoder::Base64. I suspect that the same trick (reading a big
- chunk plus the next line to get a big block of lines) would work
- with MIME::Decoder::QuotedPrint, but I don't have the time or
- resources to check that right now (tested contributions would be
- welcome). NBit encoding is more-conveniently done line-by-line for
- now, because individual line lengths must be checked.
-
- Better use of core. MIME::Body::InCore is now used when you build()
- an entity with the Data parameter, instead of MIME::Body::Scalar.
-
- More documentation on toolkit configuration.
-
- Version 5.207 (2000/06/09)
- Fixed whine() bug in MIME::Parser where the "warning" method whine()
- was called as a static function instead of invoked as an instance
- method. *Thanks to Todd A. Bradfute for reporting this.*
-
- A simple warning
- Invokes method as function:
- "Warning" makes us die
-
- Version 5.206 (2000/06/08)
- Ahem. Cough cough:
-
- Way too many bugs
- Thus, a self-imposed penance:
- Write haiku for each
-
- Fixed bug in MIME::Parser: the reader was not handling the odd (but
- legal) case where a multipart boundary is followed by linear
- whitespace. *Thanks to Jon Agnew for reporting this with the RFC
- citation.*
-
- Legal message fails
- And 'round the globe, thousands cry:
- READ THE RFC
-
- Empty preambles are now handled properly by MIME::Entity when
- printing: there is now no space between the header-terminator and
- the initial boundary. *Thanks to "sen_ml" for suggesting this.*
-
- Nature hates vacuum
- But please refrain from tossing
- Newlines in the void
-
- Started using Benchmark for benchmarking.
-
- Version 5.205 (2000/06/06)
- Added terminating newline to all parser messages, and fixed small
- parser bug that was dropping parts when errors occurred in certain
- places.
-
- Version 5.203 (2000/06/05)
- Brand new parser based on new (private) MIME::Parser::Reader and
- (public) MIME::Parser::Results. Fast and yet simple and very
- tolerant of bad MIME when desired. Message reporting needs some
- muzzling.
-
- MIME::Parser now has ignore_errors() set true by default.
-
- Version 5.116 (2000/05/26)
- Removed Tmpfile.t test, which was causing a bogus failure in "make
- test". Now we require 5.004 for MIME::Parser anyway, so we don't
- need it. *Thanks to Jonathan Cohn for reporting this.*
-
- Version 5.115 (2000/05/24)
- Fixed Ref.t bug, and documented how to remove parts from a
- MIME::Entity.
-
- Version 5.114 (2000/05/23)
- Entity now uses MIME::Lite-style default suggested encoding.
-
- More regression test have been added, and the "Size" tests in Ref.t
- are skipped for text document (due to CRLF differences between
- platforms).
-
- Version 5.113 (2000/05/21)
- Major speed and structural improvements to the parser. *Major, MAJOR
- thanks to Noel Burton-Krahn, Jeremy Gilbert, and Doru Petrescu for
- all the patches, benchmarking, and Beta-testing!*
-
- Convenient new one-directory-per-message parsing mechanism. Now
- through `MIME::Parser' method `output_under()', you can tell the
- parser that you want it to create a unique directory for each
- message parsed, to hold the resulting parts.
-
- Elimination of $', $` and $&. Wow... I still can't believe I missed
- this. D'OH! *Thanks to Noel Burton-Krahn for all his patches.*
-
- Parser is more tolerant of weird EOL termination. Some mailagents
- are can terminate lines with "\r\r\n". We're okay with that now when
- we extract the header. *Thanks to Joao Fonseca for pointing this
- out.*
-
- Parser is tolerant of "From " lines in headers. *Thanks to Joachim
- Wieland, Anthony Hinsinger, Marius Stan, and numerous others.*
-
- Parser catches syntax errors in headers. *Thanks to Russell P.
- Sutherland for catching this.*
-
- Parser no longer warns when subtype is undefined. *Thanks to Eric-
- Olivier Le Bigot for his fix.*
-
- Better integration with Mail::Internet. For example, smtpsend()
- should work fine. *Thanks to Michael Fischer and others for the
- patch.*
-
- Miscellaneous cleanup. *Thanks to Marcus Brinkmann for additional
- helpful input.* *Thanks to Klaus Seidenfaden for good feedback on
- 5.x Alpha!*
-
- Version 4.123 (1999/05/12)
- Cleaned up some of the tests for non-Unix OS'es. Will require a few
- iterations, no doubt.
-
- Version 4.122 (1999/02/09)
- Resolved CORE::open warnings for 5.005. *Thanks to several folks for
- this bug report.*
-
- Version 4.121 (1998/06/03)
- Fixed MIME::Words infinite recursion. *Thanks to several folks for
- this bug report.*
-
- Version 4.117 (1998/05/01)
- Nicer MIME::Entity::build. No longer outputs warnings with undefined
- Filename, and now accepts Charset as well. *Thanks to Jason Tibbits
- III for the inspirational patch.*
-
- Documentation fixes. Hopefully we've seen the last of the pod2man
- warnings...
-
- Better test logging. Now uses ExtUtils::TBone.
-
- Version 4.116 (1998/02/14)
- Bug fix: MIME::Head and MIME::Entity were not downcasing the
- content-type as they claimed. This has now been fixed. *Thanks to
- Rodrigo de Almeida Siqueira for finding this.*
-
- Version 4.114 (1998/02/12)
- Gzip64-encoding has been improved, and turned off as a default,
- since it depends on having gzip installed. See MIME::Decoder::Gzip64
- if you want to activate it in your app. You can now set up the
- gzip/gunzip commands to use, as well. *Thanks to Paul J. Schinder
- for finding this bug.*
-
- Version 4.113 (1998/01/20)
- Bug fix: MIME::ParserBase was accidentally folding newlines in
- header fields. *Thanks to Jason L. Tibbitts III for spotting this.*
-
- Version 4.112 (1998/01/17)
- MIME::Entity::print_body now recurses when printing multipart
- entities, and prints "everything following the header." This is more
- likely what people expect to happen. PLEASE read the "two body
- problem" section of MIME::Entity's docs.
-
- Version 4.111 (1998/01/14)
- Clean build/test on Win95 using 5.004. Whew.
-
- Version 4.110 (1998/01/11)
- Added make_multipart() and make_singlepart() in MIME::Entity.
-
- Improved handling/saving of preamble/epilogue.
-
- Version 4.109 (1998/01/10)
- Overall Major version shift to 4.x accompanies numerous structural changes,
- and the deletion of some long-deprecated code. Many apologies to
- those who are inconvenienced by the upgrade.
-
- MIME::IO deprecated. You'll see IO::Scalar, IO::ScalarArray, and
- IO::Wrap to make this toolkit work.
-
- MIME::Entity deep code. You can now deep-copy MIME entities
- (except for on-disk data files).
-
- Encoding/decoding
- MIME::Latin1 deprecated, and 8-to-7 mapping removed. Really,
- MIME::Latin1 was one of my more dumber ideas. It's still there,
- but if you want to map 8-bit characters to Latin1 ASCII
- approximations when 7bit encoding, you'll have to request it
- explicitly. *But use quoted-printable for your 8-bit documents;
- that's what it's there for!*
-
- 7bit and 8bit "encoders" no longer encode. As per RFC-2045,
- these just do a pass-through of the data, but they'll warn you
- if you send bad data through.
-
- MIME::Entity suggests encoding. Now you can ask MIME::Entity's
- build() method to "suggest" a legal encoding based on the body
- and the content-type. No more guesswork! See the "mimesend"
- example.
-
- New module structure for MIME::Decoder classes. It should be
- easier for you to see what's happening.
-
- New MIME decoders! Support added for decoding `x-uuencode', and
- for decoding/encoding `x-gzip64'. You'll need "gzip" to make the
- latter work.
-
- Quoted-printable back on track... and then some. The 'quoted-
- printable' decoder now uses the newest MIME::QuotedPrint, and
- amends its output with guideline #8 from RFC2049 (From/.).
- *Thanks to Denis N. Antonioli for suggesting this.*
-
- Parsing Preamble and epilogue are now saved. These are saved in the parsed
- entities as simple string-arrays, and are output by print() if
- there. *Thanks to Jason L. Tibbitts for suggesting this.*
-
- The "multipart/digest" semantics are now preserved. Parts of
- digest messages have their mime_type() defaulted to
- "message/rfc822" instead of "text/plain", as per the RFC.
- *Thanks to Carsten Heyl for suggesting this.*
-
- Output Well-defined, more-complete print() output. When printing an entity,
- the output is now well-defined if the entity came from a
- MIME::Parser, even if using parse_nested_messages. See
- MIME::Entity for details.
-
- You can prevent recommended filenames from being output. This
- possible security hole has been plugged; when building MIME
- entities, you can specify a body path but suppress the filename
- in the header. *Thanks to Jason L. Tibbitts for suggesting
- this.*
-
- Bug fixes
- Win32 installations should work. The binmode() calls should work
- fine on Win32 now. *Thanks to numerous folks for their patches.*
-
- MIME::Head::add() now no longer downcases its argument. *Thanks
- to Brandon Browning & Jason L. Tibbitts for finding this bug.*
-
- Version 3.204
- Bug in MIME::Head::original_text fixed. Well, it took a while, but
- another bug surfaced from my transition from 1.x to 2.x. This method
- was, quite idiotically, sorting the header fields. *Thanks, as
- usual, to Andreas Koenig for spotting this one.*
-
- MIME::ParserBase no longer defaults to RFC-1522-decoding headers.
- The documentation correctly stated that the default setting was to
- *not* RFC-1522-decode the headers. The code, on the other hand, was
- init'ing this parser option in the "on" position. This has been
- fixed.
-
- MIME::ParserBase::parse_nested_messages reexamined. If you use this
- feature, please re-read the documentation. It explains a little more
- precisely what the ramifications are.
-
- MIME::Entity tries harder to ensure MIME compliance. It is now a
- fatal error to use certain bad combinations of content type and
- encoding when "building", or to attempt to "attach" to anything that
- is not a multipart document. My apologies if this inconveniences
- anyone, but it was just too darn easy before for folks to create bad
- MIME, and gosh darn it, good libraries should at least *try* to
- protect you from mistakes.
-
- The "make" now halts if you don't have the right stuff, provided
- your MakeMaker supports PREREQ_PM. See the section on "REQUIREMENTS"
- for what you need to install this package. I still provide old
- courtesy copies of the MIME:: decoding modules. *Thanks to Hugo van
- der Sanden for suggesting this.*
-
- The "make test" is far less chatty. Okay, okay, STDERR is evil. Now
- a `"make test"' will just give you the important stuff: do a `"make
- test TEST_VERBOSE=1"' if you want the gory details (advisable if
- sending me a bug report). *Thanks to Andreas Koenig for suggesting
- this.*
-
- Version 3.203
- No, there haven't been any major changes between 2.x and 3.x. The
- major-version increase was from a few more tweaks to get $VERSION to
- be calculated better and more efficiently (I had been using RCS
- version numbers in a way which created problems for users of
- CPAN::). After a couple of false starts, all modules have been
- upgraded to RCS 3.201 or higher.
-
- You can now parse a MIME message from a scalar, an array-of-scalars,
- or any MIME::IO-compliant object (including IO:: objects.) Take a
- look at parse_data() in MIME::ParserBase. The parser code has been
- modified to support the MIME::IO interface. *Thanks to fellow
- Chicagoan Tim Pierce (and countless others) for asking.*
-
- More sensible toolkit configuration. A new config() method in
- MIME::ToolUtils makes a lot of toolkit-wide configuration cleaner.
- Your old calls will still work, but with deprecation warnings.
-
- You can now sign messages just like in Mail::Internet. See
- MIME::Entity for the interface.
-
- You can now remove signatures from messages just like in
- Mail::Internet. See MIME::Entity for the interface.
-
- You can now compute/strip content lengths and other non-standard
- MIME fields. See sync_headers() in MIME::Entity. *Thanks to Tim
- Pierce for bringing the basic problem to my attention.*
-
- Many warnings are now silent unless $^W is true. That means unless
- you run your Perl with `-w', you won't see deprecation warnings,
- non-fatal-error messages, etc. But of course you run with `-w', so
- this doesn't affect you. `:-)'
-
- Completed the 7-bit encodings in MIME::Latin1. We hadn't had
- complete coverage in the conversion from 8- to 7-bit; now we do.
- *Thanks to Rolf Nelson for bringing this to my attention.*
-
- Fixed broken parse_two() in MIME::ParserBase. BTW, if your code
- worked with the "broken" code, it should *still* work. *Thanks again
- to Tim Pierce for bringing this to my attention.*
-
- Version 2.14
- Just a few bug fixes to improve compatibility with Mail-Tools 1.08,
- and with the upcoming Perl 5.004 release. *Thanks to Jason L.
- Tibbitts III for reporting the problems so quickly.*
-
- Version 2.13
- New features
- Added RFC-1522-style decoding of encoded header fields. Header
- decoding can now be done automatically during parsing via the
- new `decode()' method in MIME::Head... just tell your parser
- object that you want to `decode_headers()'. *Thanks to Kent
- Boortz for providing the idea, and the baseline RFC-1522-
- decoding code!*
-
- Building MIME messages is even easier. Now, when you use
- MIME::Entity's `build()' or `attach()', you can also supply
- individual mail headers to set (e.g., `-Subject', `-From', `-
- To').
-
- Added `Disposition' to MIME::Entity's `build()' method. *Thanks
- to Kurt Freytag for suggesting this feature.*
-
- An `X-Mailer' header is now output by default in all MIME-
- Entity-prepared messages, so any bad MIME we generate can be
- traced back to this toolkit.
-
- Added `purge()' method to MIME::Entity for deleteing leftover
- files. *Thanks to Jason L. Tibbitts III for suggesting this
- feature.*
-
- Added `seek()' and `tell()' methods to built-in MIME::IO
- classes. Only guaranteed to work when reading! *Thanks to Jason
- L. Tibbitts III for suggesting this feature.*
-
- When parsing a multipart message with apparently no boundaries,
- the error message you get has been improved. *Thanks to Andreas
- Koenig for suggesting this.*
-
- Bug fixes
- Patched over a Perl 5.002 (and maybe earlier and later) bug
- involving FileHandle::new_tmpfile. It seems that the underlying
- filehandles were not being closed when the FileHandle objects
- went out of scope! There is now an internal routine that creates
- true FileHandle objects for anonymous temp files. *Thanks to
- Dragomir R. Radev and Zyx for reporting the weird behavior that
- led to the discovery of this bug.*
-
- MIME::Entity's `build()' method now warns you if you give it an
- illegal boundary string, and substitutes one of its own.
-
- MIME::Entity's `build()' method now generates safer, fully-RFC-
- 1521-compliant boundary strings.
-
- Bug in MIME::Decoder's `install()' method was fixed. *Thanks to
- Rolf Nelson and Nickolay Saukh for finding this.*
-
- Changed FileHandle::new_tmpfile to FileHandle->new_tmpfile, so
- some Perl installations will be happier. *Thanks to Larry W.
- Virden for finding this bug.*
-
- Gave `=over' an arg of 4 in all PODs. *Thanks to Larry W. Virden
- for pointing out the problems of bare =over's*
-
- Version 2.04
- A bug in MIME::Entity's output method was corrected.
- MIME::Entity::print now outputs everything to the desired filehandle
- explicitly. *Thanks to Jake Morrison for pointing out the
- incompatibility with Mail::Header.*
-
- Version 2.03
- Fixed bug in autogenerated filenames resulting from transposed "if"
- statement in MIME::Parser, removing spurious printing of header as
- well. (Annoyingly, this bug is invisible if debugging is turned on!)
- *Thanks to Andreas Koenig for bringing this to my attention.*
-
- Fixed bug in MIME::Entity::body() where it was using the bodyhandle
- completely incorrectly. *Thanks to Joel Noble for bringing this to
- my attention.*
-
- Fixed MIME::Head::VERSION so CPAN:: is happier. *Thanks to Larry
- Virden for bringing this to my attention.*
-
- Fixed undefined-variable warnings when dumping skeleton (happened
- when there was no Subject: line) *Thanks to Joel Noble for bringing
- this to my attention.*
-
- Version 2.02
- Stupid, stupid bugs in both BASE64 encoding and decoding were fixed.
- *Thanks to Phil Abercrombie for locating them.*
-
- Version 2.01
- Modules now inherit from the new Mail:: modules! This means big
- changes in behavior.
-
- MIME::Parser can now store message data in-core. There were a *lot*
- of requests for this feature.
-
- MIME::Entity can now compose messages. There were a *lot* of
- requests for this feature.
-
- Added option to parse `"message/rfc822"' as a pseduo-multipart
- document. *Thanks to Andreas Koenig for suggesting this.*
-
- Version 1.13
- MIME::Head now no longer requires space after ":", although either a
- space or a tab after the ":" will be swallowed if there. *Thanks to
- Igor Starovoitov for pointing out this shortcoming.*
-
- Version 1.12
- Fixed bugs in parser where CRLF-terminated lines were blowing out
- the handling of preambles/epilogues. *Thanks to Russell Sutherland
- for reporting this bug.*
-
- Fixed idiotic is_multipart() bug. *Thanks to Andreas Koenig for
- noticing it.*
-
- Added untested binmode() calls to parser for DOS, etc. systems. No
- idea if this will work...
-
- Reorganized the output_path() methods to allow easy use of
- inheritance, as per Achim Bohnet's suggestion.
-
- Changed MIME::Head to report mime_type more accurately.
-
- POSIX module no longer loaded by Parser if perl >= 5.002. Hey,
- 5.001'ers: let me know if this breaks stuff, okay?
-
- Added unsupported ./examples directory.
-
- Version 1.11
- Converted over to using Makefile.PL. *Thanks to Andreas Koenig for
- the much-needed kick in the pants...*
-
- Added t/*.t files for testing. Eeeeeeeeeeeh...it's a start.
-
- Fixed bug in default parsing routine for generating output paths; it
- was warning about evil filenames if there simply *were* no
- recommended filenames. D'oh!
-
- Fixed redefined parts() method in Entity.
-
- Fixed bugs in Head where field name wasn't being case folded.
-
- Version 1.10
- A typo was causing the epilogue of an inner multipart message to be
- swallowed to the end of the OUTER multipart message; this has now
- been fixed. *Thanks to Igor Starovoitov for reporting this bug.*
-
- A bad regexp for parameter names was causing some parameters to be
- parsed incorrectly; this has also been fixed. *Thanks again to Igor
- Starovoitov for reporting this bug.*
-
- It is now possible to get full control of the filenaming algorithm
- before output files are generated, and the default algorithm is
- safer. *Thanks to Laurent Amon for pointing out the problems, and
- suggesting some solutions.*
-
- Fixed illegal "simple" multipart test file. D'OH!
-
- Version 1.9
- No changes: 1.8 failed CPAN registration
-
- Version 1.8
- Fixed incompatibility with 5.001 and FileHandle::new_tmpfile Added
- COPYING file, and improved README.
-
-AUTHOR
- MIME-tools was created by:
-
- ___ _ _ _ _ ___ _
- / _ \| '_| | | |/ _ ' / Eryq, (eryq(a)zeegee.com)
- | __/| | | |_| | |_| | President, ZeeGee Software Inc.
- \___||_| \__, |\__, |__ http://www.zeegee.com/
- |___/ |___/
-
- Released as MIME-parser (1.0): 28 April 1996. Released as MIME-tools
- (2.0): Halloween 1996. Released as MIME-tools (4.0): Christmas 1997.
- Released as MIME-tools (5.0): Mother's Day 2000.
-
-ACKNOWLEDGMENTS
- This kit would not have been possible but for the direct contributions
- of the following:
-
- Gisle Aas The MIME encoding/decoding modules.
- Laurent Amon Bug reports and suggestions.
- Graham Barr The new MailTools.
- Achim Bohnet Numerous good suggestions, including the I/O model.
- Kent Boortz Initial code for RFC-1522-decoding of MIME headers.
- Andreas Koenig Numerous good ideas, tons of beta testing,
- and help with CPAN-friendly packaging.
- Igor Starovoitov Bug reports and suggestions.
- Jason L Tibbitts III Bug reports, suggestions, patches.
-
- Not to mention the Accidental Beta Test Team, whose bug reports (and
- comments) have been invaluable in improving the whole:
-
- Phil Abercrombie
- Mike Blazer
- Brandon Browning
- Kurt Freytag
- Steve Kilbane
- Jake Morrison
- Rolf Nelson
- Joel Noble
- Michael W. Normandin
- Tim Pierce
- Andrew Pimlott
- Dragomir R. Radev
- Nickolay Saukh
- Russell Sutherland
- Larry Virden
- Zyx
-
- Please forgive me if I've accidentally left you out. Better yet, email
- me, and I'll put you in.
-
-SEE ALSO
- At the time of this writing ($Date: 2001-03-29 23:55:41 $), the MIME-
- tools homepage was http://www.zeegee.com/code/perl/MIME-tools. Check
- there for updates and support.
-
- Users of this toolkit may wish to read the documentation of Mail::Header
- and Mail::Internet.
-
- The MIME format is documented in RFCs 1521-1522, and more recently in
- RFCs 2045-2049.
-
- The MIME header format is an outgrowth of the mail header format
- documented in RFC 822.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/README-OR-DIE b/monitoring/PerlModules/CPAN/MIME-tools-5.410/README-OR-DIE
deleted file mode 100644
index 5e0f0bd..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/README-OR-DIE
+++ /dev/null
@@ -1,75 +0,0 @@
-*IMPORTANT* *IMPORTANT* *IMPORTANT* *IMPORTANT* *IMPORTANT*
-
-READ THIS FILE BEFORE YOU DO A "make install", OR YOU MIGHT
-END UP BEING EXTREMELY UNHAPPY!
-
-------------------------------------------------------------
-INSTALLING ON WIN32:
-
-Because of unix/Win32 file differences, the test file fun.txt, used in
-the t\Decoder.t test, is different when the distribution is unpacked
-with the cygwin tar/gunzip tools compared to when Winzip is used
-(using the default options). The one created with Winzip is the one to
-use to pass the tests.
-
-
-------------------------------------------------------------
-MAJOR CHANGES FROM 3.0 TO 4.0:
-
- Temp files
- FileHandle::tmpfile is no longer emulated if you have Perl5.004,
- which has fixed the tmpfile() problem; you should (especially
- if running under Win32) get Perl5.004 ASAP. Otherwise, the
- fairly-portable (if ugly) opendup() emulation is hardcoded.
-
- Module structure
- MIME::Latin1 is deprecated.
-
- MIME::IO is deprecated; its functionality has been replaced
- by the IO::Scalar, IO::ScalarArray, and IO::Wrap modules.
- You will need these to run the toolkit.
-
- New encodings x-uuencode (x-uu) and x-gzip64
- are now supported.
-
- MIME::Decoder has been split into a tree of modules.
-
- Encodings
- The '7bit' and '8bit' encoders now merely warn of transgressions;
- '7bit' no longer uses the deprecated MIME::Latin1.
-
- The 'quoted-printable' decoder now uses the newest MIME::QuotedPrint,
- and amends its output with guideline #8 from RFC2049 (From/.).
-
- Output
- Output format is slightly-different (but more sensible)
- if you use parse_nested_messages() or have singlepart entities
- with parts attached.
- See MIME::Entity::print for details.
-
- As of 4.112, MIME::Entity::print_body recurses for multipart
- entities: this is more convenient and less surprising.
-
- Debugging
- All toolkit warnings may be turned off with config 'QUIET'.
- See MIME::ToolUtils for details.
-
-------------------------------------------------------------
-MAJOR CHANGES FROM 1.0 TO 2.0:
-
- Module structure
- As of MIME-tools 2.0...
-
- MIME::Head is a subclass of Mail::Header
- MIME::Entity is a subclass of Mail::Internet
-
- If you are upgrading from the MIME-parser 1.0 package, and you used
- these module directly, you may notice some warnings about deprecated
- constructs in your code... much your stuff should (hopefully)
- still work... you'll just see a lot of warnings.
-
- There are some true incompatibilities between MIME::Head 1.0 and
- Mail::Header. Please read the full documentation before proceeding!
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/README.system b/monitoring/PerlModules/CPAN/MIME-tools-5.410/README.system
deleted file mode 100644
index 44fbd68..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/README.system
+++ /dev/null
@@ -1,8 +0,0 @@
-DEVELOPMENT SYSTEM:
-Linux eryq 2.0.34 #1 Fri May 8 16:05:57 EDT 1998 i586 unknown
-
-DEVELOPMENT PERL:
-This is perl, version 5.005_56 built for i586-linux
-
-DEVELOPMENT DATE:
-Thu Nov 23 00:13:17 EST 2000
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Body.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Body.pm.html
deleted file mode 100644
index 9634886..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Body.pm.html
+++ /dev/null
@@ -1,492 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Body</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Body</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<UL>
-<LI> <A HREF="#Obtaining_bodies">Obtaining bodies</A>
-<LI> <A HREF="#Opening_closing_and_using_IO_handles">Opening, closing, and using IO handles</A>
-<LI> <A HREF="#Other_I_O">Other I/O</A>
-<LI> <A HREF="#Working_directly_with_paths_to_underlying_files">Working directly with paths to underlying files</A>
-</UL>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<LI> <A HREF="#SUBCLASSES">SUBCLASSES</A>
-<UL>
-<LI> <A HREF="#MIME_Body_File">MIME::Body::File</A>
-<LI> <A HREF="#MIME_Body_Scalar">MIME::Body::Scalar</A>
-<LI> <A HREF="#MIME_Body_InCore">MIME::Body::InCore</A>
-<LI> <A HREF="#Defining_your_own_subclasses">Defining your own subclasses</A>
-</UL>
-<LI> <A HREF="#NOTES">NOTES</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Body - the body of a MIME message
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../MIME/Tools.pm.html">MIME::Tools</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok...
-
-
-
-<P><HR>
-<A NAME="Obtaining_bodies"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Obtaining bodies</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Get the bodyhandle of a MIME::Entity object:
- $body = $entity->bodyhandle;
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a body which stores data in a disk file:
- $body = new MIME::Body::File "/path/to/file";
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a body which stores data in an in-core array:
- $body = new MIME::Body::InCore \@strings;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Opening_closing_and_using_IO_handles"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Opening, closing, and using IO handles</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Write data to the body:
- $IO = $body->open("w") || die "open body: $!";
- $IO->print($message);
- $IO->close || die "close I/O handle: $!";
-
- ### Read data from the body (in this case, line by line):
- $IO = $body->open("r") || die "open body: $!";
- while (defined($_ = $IO->getline)) {
- ### do stuff
- }
- $IO->close || die "close I/O handle: $!";
-
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Other_I_O"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Other I/O</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Dump the ENCODED body data to a filehandle:
- $body->print(\*STDOUT);
-
- ### Slurp all the UNENCODED data in, and put it in a scalar:
- $string = $body->as_string;
-
- ### Slurp all the UNENCODED data in, and put it in an array of lines:
- @lines = $body->as_lines;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Working_directly_with_paths_to_underlying_files"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Working directly with paths to underlying files</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Where's the data?
- if (defined($body->path)) { ### data is on disk:
- print "data is stored externally, in ", $body->path;
- }
- else { ### data is in core:
- print "data is already in core, and is...\n", $body->as_string;
- }
-
- ### Get rid of anything on disk:
- $body->purge;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>MIME messages can be very long (e.g., tar files, MPEGs, etc.) or very
-short (short textual notes, as in ordinary mail). Long messages
-are best stored in files, while short ones are perhaps best stored
-in core.
-
-
-<P>This class is an attempt to define a common interface for objects
-which contain message data, regardless of how the data is
-physically stored. The lifespan of a "body" object
-usually looks like this:
-
-
-
-<OL>
-<P><LI>
-<P><B>Body object is created by a MIME::Parser during parsing.</B>
-It's at this point that the actual MIME::Body subclass is chosen,
-and new() is invoked. (For example: if the body data is going to
-a file, then it is at this point that the class MIME::Body::File,
-and the filename, is chosen).
-
-<P><LI>
-<P><B>Data is written to the body</B> (usually by the MIME parser) like this:
-The body is opened for writing, via <CODE>open("w")</CODE>. This will trash any
-previous contents, and return an "I/O handle" opened for writing.
-Data is written to this I/O handle, via print().
-Then the I/O handle is closed, via close().
-
-<P><LI>
-<P><B>Data is read from the body</B> (usually by the user application) like this:
-The body is opened for reading by a user application, via <CODE>open("r")</CODE>.
-This will return an "I/O handle" opened for reading.
-Data is read from the I/O handle, via read(), getline(), or getlines().
-Then the I/O handle is closed, via close().
-
-<P><LI>
-<P><B>Body object is destructed.</B>
-
-</OL>
-
-
-<P>You can write your own subclasses, as long as they follow the
-interface described below. Implementers of subclasses should assume
-that steps 2 and 3 may be repeated any number of times, and in
-different orders (e.g., 1-2-2-3-2-3-3-3-3-3-2-4).
-
-
-<P>In any case, once a MIME::Body has been created, you ask to open it
-for reading or writing, which gets you an "i/o handle": you then use
-the same mechanisms for reading from or writing to that handle, no matter
-what class it is.
-
-
-<P>Beware: unless you know for certain what kind of body you have, you
-should <I>not</I> assume that the body has an underlying filehandle.
-
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new ARGS...</A></B></DT>
-<DD>
-<I>Class method, constructor.</I>
-Create a new body. Any ARGS are sent to init().
-
-<P><DT><B><A NAME="item:init">init ARGS...</A></B></DT>
-<DD>
-<I>Instance method, abstract, initiallizer.</I>
-This is called automatically by <CODE>new()</CODE>, with the arguments given
-to <CODE>new()</CODE>. The arguments are optional, and entirely up to the
-subclass. The default method does nothing,
-
-<P><DT><B><A NAME="item:as_lines">as_lines</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the contents of the body as an array of lines (each terminated
-by a newline, with the possible exception of the final one).
-Returns empty on failure (NB: indistinguishable from an empty body!).
-
-
-<P>Note: the default method gets the data via
-repeated getline() calls; your subclass might wish to override this.
-
-<P><DT><B><A NAME="item:as_string">as_string</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the body data as a string (slurping it into core if necessary).
-Best not to do this unless you're <I>sure</I> that the body is reasonably small!
-Returns empty string for an empty body, and undef on failure.
-
-
-<P>Note: the default method uses print(), which gets the data via
-repeated read() calls; your subclass might wish to override this.
-
-<P><DT><B><A NAME="item:binmode">binmode [ONOFF]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-With argument, flags whether or not open() should return an I/O handle
-which has binmode() activated. With no argument, just returns the
-current value.
-
-<P><DT><B><A NAME="item:dup">dup</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Duplicate the bodyhandle.
-
-
-<P><I>Beware:</I> external data in bodyhandles is <I>not</I> copied to new files!
-Changing the data in one body's data file, or purging that body,
-<I>will</I> affect its duplicate. Bodies with in-core data probably need
-not worry.
-
-<P><DT><B><A NAME="item:open">open READWRITE</A></B></DT>
-<DD>
-<I>Instance method, abstract.</I>
-This should do whatever is necessary to open the body for either
-writing (if READWRITE is "w") or reading (if mode is "r").
-
-
-<P>This method is expected to return an "I/O handle" object on success,
-and undef on error. An I/O handle can be any object that supports a
-small set of standard methods for reading/writing data.
-See the IO::Handle class for an example.
-
-<P><DT><B><A NAME="item:path">path [PATH]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-If you're storing the body data externally (e.g., in a disk file), you'll
-want to give applications the ability to get at that data, for cleanup.
-This method should return the path to the data, or undef if there is none.
-
-
-<P>Where appropriate, the path <I>should</I> be a simple string, like a filename.
-With argument, sets the PATH, which should be undef if there is none.
-
-<P><DT><B><A NAME="item:print">print FILEHANDLE</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Output the body data to the given filehandle, or to the currently-selected
-one if none is given.
-
-<P><DT><B><A NAME="item:purge">purge</A></B></DT>
-<DD>
-<I>Instance method, abstract.</I>
-Remove any data which resides external to the program (e.g., in disk files).
-Immediately after a purge(), the path() should return undef to indicate
-that the external data is no longer available.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="SUBCLASSES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SUBCLASSES</H2></A>
-
-
-<P>The following built-in classes are provided:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Body Stores body When open()ed,
- class: data in: returns:
- --------------------------------------------------------
- MIME::Body::File disk file IO::Handle
- MIME::Body::Scalar scalar IO::Scalar
- MIME::Body::InCore scalar array IO::ScalarArray
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="MIME_Body_File"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> MIME::Body::File</H3></A>
-
-
-<P>A body class that stores the data in a disk file.
-The I/O handle is a wrapped filehandle. Invoke the constructor as:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $body = new MIME::Body::File "/path/to/file";
-</PRE></FONT>
-
-<P>In this case, the <CODE>path()</CODE> method would return the given path,
-so you <I>could</I> say:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- if (defined($body->path)) {
- open BODY, $body->path or die "open: $!";
- while (<BODY>) {
- ### do stuff
- }
- close BODY;
- }
-</PRE></FONT>
-
-<P>But you're best off not doing this.
-
-
-
-<P><HR>
-<A NAME="MIME_Body_Scalar"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> MIME::Body::Scalar</H3></A>
-
-
-<P>A body class that stores the data in-core, in a simple scalar.
-Invoke the constructor as:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $body = new MIME::Body::Scalar \$string;
-</PRE></FONT>
-
-<P>A single scalar argument sets the body to that value, exactly as though
-you'd opened for the body for writing, written the value,
-and closed the body again:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $body = new MIME::Body::Scalar "Line 1\nLine 2\nLine 3";
-</PRE></FONT>
-
-<P>A single array reference sets the body to the result of joining all the
-elements of that array together:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $body = new MIME::Body::Scalar ["Line 1\n",
- "Line 2\n",
- "Line 3"];
-</PRE></FONT>
-
-<P>Uses <B>IO::Scalar</B> as the I/O handle.
-
-
-
-<P><HR>
-<A NAME="MIME_Body_InCore"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> MIME::Body::InCore</H3></A>
-
-
-<P>A body class that stores the data in-core.
-Invoke the constructor as:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $body = new MIME::Body::InCore \$string;
- $body = new MIME::Body::InCore $string;
- $body = new MIME::Body::InCore \@stringarray
-</PRE></FONT>
-
-<P>A simple scalar argument sets the body to that value, exactly as though
-you'd opened for the body for writing, written the value,
-and closed the body again:
-
- $body = new MIME::Body::InCore "Line 1\nLine 2\nLine 3";
-
-
-<P>A single array reference sets the body to the concatenation of all
-scalars that it holds:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $body = new MIME::Body::InCore ["Line 1\n",
- "Line 2\n",
- "Line 3"];
-</PRE></FONT>
-
-<P>Uses <B>IO::ScalarArray</B> as the I/O handle.
-
-
-
-<P><HR>
-<A NAME="Defining_your_own_subclasses"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Defining your own subclasses</H3></A>
-
-
-<P>So you're not happy with files and scalar-arrays?
-No problem: just define your own MIME::Body subclass, and make a subclass
-of MIME::Parser or MIME::ParserBase which returns an instance of your
-body class whenever appropriate in the <CODE>new_body_for(head)</CODE> method.
-
-
-<P>Your "body" class must inherit from MIME::Body (or some subclass of it),
-and it must either provide (or inherit the default for) the following
-methods...
-
-
-<P>The default inherited method <I>should suffice</I> for all these:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- new
- binmode [ONOFF]
- path
-</PRE></FONT>
-
-<P>The default inherited method <I>may suffice</I> for these, but perhaps
-there's a better implementation for your subclass.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- init ARGS...
- as_lines
- as_string
- dup
- print
- purge
-</PRE></FONT>
-
-<P>The default inherited method <I>will probably not suffice</I> for these:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- open
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-<P>One reason I didn't just use FileHandle or IO::Handle objects for message
-bodies was that I wanted a "body" object to be a form of completely
-encapsulated program-persistent storage; that is, I wanted users
-to be able to write code like this...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Get body handle from this MIME message, and read its data:
- $body = $entity->bodyhandle;
- $IO = $body->open("r");
- while (defined($_ = $IO->getline)) {
- print STDOUT $_;
- }
- $IO->close;
-</PRE></FONT>
-
-<P>...without requiring that they know anything more about how the
-$body object is actually storing its data (disk file, scalar variable,
-array variable, or whatever).
-
-
-<P>Storing the body of each MIME message in a persistently-open
-IO::Handle was a possibility, but it seemed like a bad idea,
-considering that a single multipart MIME message could easily suck up
-all the available file descriptors on some systems. This risk increases
-if the user application is processing more than one MIME entity at a time.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-<P>Thanks to Achim Bohnet for suggesting that MIME::Parser not be restricted
-to the use of FileHandles.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:32 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder.pm.html
deleted file mode 100644
index 3667ae7..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder.pm.html
+++ /dev/null
@@ -1,514 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Decoder</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Decoder</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<UL>
-<LI> <A HREF="#Decoding_a_data_stream">Decoding a data stream</A>
-<LI> <A HREF="#Encoding_a_data_stream">Encoding a data stream</A>
-<LI> <A HREF="#Non-standard_encodings">Non-standard encodings</A>
-</UL>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<UL>
-<LI> <A HREF="#Standard_interface">Standard interface</A>
-<LI> <A HREF="#Subclass_interface">Subclass interface</A>
-</UL>
-<LI> <A HREF="#DECODER_SUBCLASSES">DECODER SUBCLASSES</A>
-<LI> <A HREF="#NOTES">NOTES</A>
-<UL>
-<LI> <A HREF="#Input_Output_handles">Input/Output handles</A>
-<LI> <A HREF="#Writing_a_decoder">Writing a decoder</A>
-</UL>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Decoder - an object for decoding the body part of a MIME stream
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../MIME/Tools.pm.html">MIME::Tools</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok...
-
-
-
-<P><HR>
-<A NAME="Decoding_a_data_stream"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Decoding a data stream</H3></A>
-
-
-<P>Here's a simple filter program to read quoted-printable data from STDIN
-(until EOF) and write the decoded data to STDOUT:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::Decoder;
-
- $decoder = new MIME::Decoder 'quoted-printable' or die "unsupported";
- $decoder->decode(\*STDIN, \*STDOUT);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Encoding_a_data_stream"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Encoding a data stream</H3></A>
-
-
-<P>Here's a simple filter program to read binary data from STDIN
-(until EOF) and write base64-encoded data to STDOUT:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::Decoder;
-
- $decoder = new MIME::Decoder 'base64' or die "unsupported";
- $decoder->encode(\*STDIN, \*STDOUT);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Non-standard_encodings"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Non-standard encodings</H3></A>
-
-
-<P>You can <B>write and install</B> your own decoders so that
-MIME::Decoder will know about them:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MyBase64Decoder;
-
- install MyBase64Decoder 'base64';
-</PRE></FONT>
-
-<P>You can also <B>test</B> if a given encoding is supported:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- if (supported MIME::Decoder 'x-uuencode') {
- ### we can uuencode!
- }
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This abstract class, and its private concrete subclasses (see below)
-provide an OO front end to the actions of...
-
-
-
-<UL>
-<P><LI>
-<P>Decoding a MIME-encoded stream
-
-<P><LI>
-<P>Encoding a raw data stream into a MIME-encoded stream.
-
-</UL>
-
-
-<P>The constructor for MIME::Decoder takes the name of an encoding
-(<CODE>base64</CODE>, <CODE>7bit</CODE>, etc.), and returns an instance of a <I>subclass</I>
-of MIME::Decoder whose <CODE>decode()</CODE> method will perform the appropriate
-decoding action, and whose <CODE>encode()</CODE> method will perform the appropriate
-encoding action.
-
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<P><HR>
-<A NAME="Standard_interface"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Standard interface</H3></A>
-
-
-<P>If all you are doing is <I>using</I> this class, here's all you'll need...
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new ENCODING</A></B></DT>
-<DD>
-<I>Class method, constructor.</I>
-Create and return a new decoder object which can handle the
-given ENCODING.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $decoder = new MIME::Decoder "7bit";
-</PRE></FONT>
-
-<P>Returns the undefined value if no known decoders are appropriate.
-
-<P><DT><B><A NAME="item:best">best ENCODING</A></B></DT>
-<DD>
-<I>Class method, constructor.</I>
-Exactly like new(), except that this defaults any unsupported encoding to
-"binary", after raising a suitable warning (it's a fatal error if there's
-no binary decoder).
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $decoder = best MIME::Decoder "x-gzip64";
-</PRE></FONT>
-
-<P>Will either return a decoder, or a raise a fatal exception.
-
-<P><DT><B><A NAME="item:decode">decode INSTREAM,OUTSTREAM</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Decode the document waiting in the input handle INSTREAM,
-writing the decoded information to the output handle OUTSTREAM.
-
-
-<P>Read the section in this document on I/O handles for more information
-about the arguments. Note that you can still supply old-style
-unblessed filehandles for INSTREAM and OUTSTREAM.
-
-
-<P>Returns true on success, throws exception on failure.
-
-<P><DT><B><A NAME="item:encode">encode INSTREAM,OUTSTREAM</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Encode the document waiting in the input filehandle INSTREAM,
-writing the encoded information to the output stream OUTSTREAM.
-
-
-<P>Read the section in this document on I/O handles for more information
-about the arguments. Note that you can still supply old-style
-unblessed filehandles for INSTREAM and OUTSTREAM.
-
-
-<P>Returns true on success, throws exception on failure.
-
-<P><DT><B><A NAME="item:encoding">encoding</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the encoding that this object was created to handle,
-coerced to all lowercase (e.g., <CODE>"base64"</CODE>).
-
-<P><DT><B><A NAME="item:head">head [HEAD]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Completely optional: some decoders need to know a little about the file
-they are encoding/decoding; e.g., x-uu likes to have the filename.
-The HEAD is any object which responds to messages like:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $head->mime_attr('content-disposition.filename');
-</PRE></FONT>
-<P><DT><B><A NAME="item:supported">supported [ENCODING]</A></B></DT>
-<DD>
-<I>Class method.</I>
-With one arg (an ENCODING name), returns truth if that encoding
-is currently handled, and falsity otherwise. The ENCODING will
-be automatically coerced to lowercase:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- if (supported MIME::Decoder '7BIT') {
- ### yes, we can handle it...
- }
- else {
- ### drop back six and punt...
- }
-</PRE></FONT>
-
-<P>With no args, returns a reference to a hash of all available decoders,
-where the key is the encoding name (all lowercase, like '7bit'),
-and the value is true (it happens to be the name of the class
-that handles the decoding, but you probably shouldn't rely on that).
-You may safely modify this hash; it will <I>not</I> change the way the
-module performs its lookups. Only <CODE>install</CODE> can do that.
-
-
-<P><I>Thanks to Achim Bohnet for suggesting this method.</I>
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Subclass_interface"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Subclass interface</H3></A>
-
-
-<P>If you are writing (or installing) a new decoder subclass, there
-are some other methods you'll need to know about:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:decode_it">decode_it INSTREAM,OUTSTREAM</A></B></DT>
-<DD>
-<I>Abstract instance method.</I>
-The back-end of the <B>decode</B> method. It takes an input handle
-opened for reading (INSTREAM), and an output handle opened for
-writing (OUTSTREAM).
-
-
-<P>If you are writing your own decoder subclass, you must override this
-method in your class. Your method should read from the input
-handle via <CODE>getline()</CODE> or <CODE>read()</CODE>, decode this input, and print the
-decoded data to the output handle via <CODE>print()</CODE>. You may do this
-however you see fit, so long as the end result is the same.
-
-
-<P>Note that unblessed references and globrefs are automatically turned
-into I/O handles for you by <CODE>decode()</CODE>, so you don't need to worry
-about it.
-
-
-<P>Your method must return either <CODE>undef</CODE> (to indicate failure),
-or <CODE>1</CODE> (to indicate success).
-It may also throw an exception to indicate failure.
-
-<P><DT><B><A NAME="item:encode_it">encode_it INSTREAM,OUTSTREAM</A></B></DT>
-<DD>
-<I>Abstract instance method.</I>
-The back-end of the <B>encode</B> method. It takes an input handle
-opened for reading (INSTREAM), and an output handle opened for
-writing (OUTSTREAM).
-
-
-<P>If you are writing your own decoder subclass, you must override this
-method in your class. Your method should read from the input
-handle via <CODE>getline()</CODE> or <CODE>read()</CODE>, encode this input, and print the
-encoded data to the output handle via <CODE>print()</CODE>. You may do this
-however you see fit, so long as the end result is the same.
-
-
-<P>Note that unblessed references and globrefs are automatically turned
-into I/O handles for you by <CODE>encode()</CODE>, so you don't need to worry
-about it.
-
-
-<P>Your method must return either <CODE>undef</CODE> (to indicate failure),
-or <CODE>1</CODE> (to indicate success).
-It may also throw an exception to indicate failure.
-
-<P><DT><B><A NAME="item:filter">filter IN, OUT, COMMAND...</A></B></DT>
-<DD>
-<I>Class method, utility.</I>
-If your decoder involves an external program, you can invoke
-them easily through this method. The command must be a "filter": a
-command that reads input from its STDIN (which will come from the IN argument)
-and writes output to its STDOUT (which will go to the OUT argument).
-
-
-<P>For example, here's a decoder that un-gzips its data:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- sub decode_it {
- my ($self, $in, $out) = @_;
- $self->filter($in, $out, "gzip -d -");
- }
-</PRE></FONT>
-
-<P>The usage is similar to IPC::Open2::open2 (which it uses internally),
-so you can specify COMMAND as a single argument or as an array.
-
-<P><DT><B><A NAME="item:init">init ARGS...</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Do any necessary initialization of the new instance,
-taking whatever arguments were given to <CODE>new()</CODE>.
-Should return the self object on success, undef on failure.
-
-<P><DT><B><A NAME="item:install">install ENCODINGS...</A></B></DT>
-<DD>
-<I>Class method</I>.
-Install this class so that each encoding in ENCODINGS is handled by it:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- install MyBase64Decoder 'base64', 'x-base64super';
-</PRE></FONT>
-
-<P>You should not override this method.
-
-<P><DT><B><A NAME="item:uninstall">uninstall ENCODINGS...</A></B></DT>
-<DD>
-<I>Class method</I>.
-Uninstall support for encodings. This is a way to turn off the decoding
-of "experimental" encodings. For safety, always use MIME::Decoder directly:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- uninstall MIME::Decoder 'x-uu', 'x-uuencode';
-</PRE></FONT>
-
-<P>You should not override this method.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="DECODER_SUBCLASSES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DECODER SUBCLASSES</H2></A>
-
-
-<P>You don't need to <CODE>"use"</CODE> any other Perl modules; the
-following "standard" subclasses are included as part of MIME::Decoder:
-
-<P><TABLE CELLPADDING=4 CELLSPACING=0 BORDER=1 ALIGN=CENTER BGCOLOR=#EEEEEE><TR><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">Class: Handles encodings: </FONT></TH BGCOLOR=#AA0055></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Decoder::Binary binary</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Decoder::NBit 7bit, 8bit</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Decoder::Base64 base64</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Decoder::QuotedPrint quoted-printable</FONT></TD></TR></UL></TABLE>
-<P>The following "non-standard" subclasses are also included:
-
-<P><TABLE CELLPADDING=4 CELLSPACING=0 BORDER=1 ALIGN=CENTER BGCOLOR=#EEEEEE><TR><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">Class: Handles encodings: </FONT></TH BGCOLOR=#AA0055></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Decoder::UU x-uu, x-uuencode</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Decoder::Gzip64 x-gzip64 ** requires gzip!</FONT></TD></TR></UL></TABLE>
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-
-<P><HR>
-<A NAME="Input_Output_handles"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Input/Output handles</H3></A>
-
-
-<P>As of MIME-tools 2.0, this class has to play nice with the new MIME::Body
-class... which means that input and output routines cannot just assume that
-they are dealing with filehandles.
-
-
-<P>Therefore, all that MIME::Decoder and its subclasses require (and, thus,
-all that they can assume) is that INSTREAMs and OUTSTREAMs are objects
-which respond to a subset of the messages defined in the IO::Handle
-interface; minimally:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- print
- getline
- read(BUF,NBYTES)
-</PRE></FONT>
-
-<P>For backwards compatibilty, if you supply a scalar filehandle name
-(like <CODE>"STDOUT"</CODE>) or an unblessed glob reference (like <CODE>\*STDOUT</CODE>)
-where an INSTREAM or OUTSTREAM is expected, this package will
-automatically wrap it in an object that fits these criteria, via IO::Wrap.
-
-
-<P><I>Thanks to Achim Bohnet for suggesting this more-generic I/O model.</I>
-
-
-
-<P><HR>
-<A NAME="Writing_a_decoder"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Writing a decoder</H3></A>
-
-
-<P>If you're experimenting with your own encodings, you'll probably want
-to write a decoder. Here are the basics:
-
-
-
-<OL>
-<P><LI>
-<P>Create a module, like "MyDecoder::", for your decoder.
-Declare it to be a subclass of MIME::Decoder.
-
-<P><LI>
-<P>Create the following instance methods in your class, as described above:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- decode_it
- encode_it
- init
-</PRE></FONT>
-<P><LI>
-<P>In your application program, activate your decoder for one or
-more encodings like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- require MyDecoder;
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- install MyDecoder "7bit"; ### use MyDecoder to decode "7bit"
- install MyDecoder "x-foo"; ### also use MyDecoder to decode "x-foo"
-</PRE></FONT>
-</OL>
-
-
-<P>To illustrate, here's a custom decoder class for the <CODE>quoted-printable</CODE>
-encoding:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- package MyQPDecoder;
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- @ISA = qw(MIME::Decoder);
- use MIME::Decoder;
- use MIME::QuotedPrint;
-
- ### decode_it - the private decoding method
- sub decode_it {
- my ($self, $in, $out) = @_;
-
- while (defined($_ = $in->getline)) {
- my $decoded = decode_qp($_);
- $out->print($decoded);
- }
- 1;
- }
-
- ### encode_it - the private encoding method
- sub encode_it {
- my ($self, $in, $out) = @_;
-
- my ($buf, $nread) = ('', 0);
- while ($in->read($buf, 60)) {
- my $encoded = encode_qp($buf);
- $out->print($encoded);
- }
- 1;
- }
-</PRE></FONT>
-
-<P>That's it. The task was pretty simple because the <CODE>"quoted-printable"</CODE>
-encoding can easily be converted line-by-line... as can
-even <CODE>"7bit"</CODE> and <CODE>"8bit"</CODE> (since all these encodings guarantee
-short lines, with a max of 1000 characters).
-The good news is: it is very likely that it will be similarly-easy to
-write a MIME::Decoder for any future standard encodings.
-
-
-<P>The <CODE>"binary"</CODE> decoder, however, really required block reads and writes:
-see <A HREF="#MIME_Decoder_Binary">MIME::Decoder::Binary</A> for details.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:34 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Base64.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Base64.pm.html
deleted file mode 100644
index eba46c0..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Base64.pm.html
+++ /dev/null
@@ -1,84 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Decoder::Base64</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Decoder::Base64</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Decoder::Base64 - encode/decode a "base64" stream
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>A generic decoder object; see <A HREF="../../MIME/Decoder.pm.html">MIME::Decoder</A> for usage.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A <A HREF="../../MIME/Decoder.pm.html">MIME::Decoder</A> subclass for the <CODE>"base64"</CODE> encoding.
-The name was chosen to jibe with the pre-existing MIME::Base64
-utility package, which this class actually uses to translate each chunk.
-
-
-
-<UL>
-<P><LI>
-<P>When <B>decoding</B>, the input is read one line at a time.
-The input accumulates in an internal buffer, which is decoded in
-multiple-of-4-sized chunks (plus a possible "leftover" input chunk,
-of course).
-
-<P><LI>
-<P>When <B>encoding</B>, the input is read 45 bytes at a time: this ensures
-that the output lines are not too long. We chose 45 since it is
-a multiple of 3 and produces lines under 76 characters, as RFC-1521
-specifies.
-
-</UL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:36 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Binary.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Binary.pm.html
deleted file mode 100644
index 242fd7e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Binary.pm.html
+++ /dev/null
@@ -1,77 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Decoder::Binary</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Decoder::Binary</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Decoder::Binary - perform no encoding/decoding
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>A generic decoder object; see <A HREF="../../MIME/Decoder.pm.html">MIME::Decoder</A> for usage.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A MIME::Decoder subclass for the <CODE>"binary"</CODE> encoding (in other words,
-no encoding).
-
-
-<P>The <CODE>"binary"</CODE> decoder is a special case, since it's ill-advised
-to read the input line-by-line: after all, an uncompressed image file might
-conceivably have loooooooooong stretches of bytes without a <CODE>"\n"</CODE> among
-them, and we don't want to risk blowing out our core. So, we
-read-and-write fixed-size chunks.
-
-
-<P>Both the <B>encoder</B> and <B>decoder</B> do a simple pass-through of the data
-from input to output.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:38 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Gzip64.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Gzip64.pm.html
deleted file mode 100644
index 098f6c7..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/Gzip64.pm.html
+++ /dev/null
@@ -1,89 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Decoder::Gzip64</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Decoder::Gzip64</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Decoder::Gzip64 - decode a "base64" gzip stream
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>A generic decoder object; see <A HREF="../../MIME/Decoder.pm.html">MIME::Decoder</A> for usage.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A MIME::Decoder::Base64 subclass for a nonstandard encoding whereby
-data are gzipped, then the gzipped file is base64-encoded.
-Common non-standard MIME encodings for this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- x-gzip64
-</PRE></FONT>
-
-<P>Since this class relies on external programs which may not
-exist on your machine, MIME-tools does not "install" it by default.
-To use it, you need to say in your main program:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- install MIME::Decoder::Gzip64 'x-gzip64';
-</PRE></FONT>
-
-<P>Note: if this class isn't working for you, you may need to change
-the commands it runs. In your main program, you can do so
-by setting up the two commands which
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::Decoder::Gzip64;
-
- $MIME::Decoder::Gzip64::GZIP = 'gzip -c';
- $MIME::Decoder::Gzip64::GUNZIP = 'gzip -d -c';
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:42 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/NBit.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/NBit.pm.html
deleted file mode 100644
index d8e5cbe..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/NBit.pm.html
+++ /dev/null
@@ -1,147 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Decoder::NBit</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Decoder::NBit</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<UL>
-<LI> <A HREF="#Legal_7bit_data">Legal 7bit data</A>
-<LI> <A HREF="#Legal_8bit_data">Legal 8bit data</A>
-<LI> <A HREF="#How_decoding_is_done">How decoding is done</A>
-<LI> <A HREF="#How_encoding_is_done">How encoding is done</A>
-</UL>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Decoder::NBit - encode/decode a "7bit" or "8bit" stream
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>A generic decoder object; see <A HREF="../../MIME/Decoder.pm.html">MIME::Decoder</A> for usage.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This is a MIME::Decoder subclass for the <CODE>7bit</CODE> and <CODE>8bit</CODE> content
-transfer encodings. These are not "encodings" per se: rather, they
-are simply assertions of the content of the message.
-From RFC-2045 Section 6.2.:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Three transformations are currently defined: identity, the "quoted-
- printable" encoding, and the "base64" encoding. The domains are
- "binary", "8bit" and "7bit".
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- The Content-Transfer-Encoding values "7bit", "8bit", and "binary" all
- mean that the identity (i.e. NO) encoding transformation has been
- performed. As such, they serve simply as indicators of the domain of
- the body data, and provide useful information about the sort of
- encoding that might be needed for transmission in a given transport
- system.
-</PRE></FONT>
-
-<P>In keeping with this: as of MIME-tools 4.x,
-<I>this class does no modification of its input when encoding;</I>
-all it does is attempt to <I>detect violations</I> of the 7bit/8bit assertion,
-and issue a warning (one per message) if any are found.
-
-
-
-<P><HR>
-<A NAME="Legal_7bit_data"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Legal 7bit data</H3></A>
-
-
-<P>RFC-2045 Section 2.7 defines legal <CODE>7bit</CODE> data:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- "7bit data" refers to data that is all represented as relatively
- short lines with 998 octets or less between CRLF line separation
- sequences [RFC-821]. No octets with decimal values greater than 127
- are allowed and neither are NULs (octets with decimal value 0). CR
- (decimal value 13) and LF (decimal value 10) octets only occur as
- part of CRLF line separation sequences.
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Legal_8bit_data"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Legal 8bit data</H3></A>
-
-
-<P>RFC-2045 Section 2.8 defines legal <CODE>8bit</CODE> data:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- "8bit data" refers to data that is all represented as relatively
- short lines with 998 octets or less between CRLF line separation
- sequences [RFC-821]), but octets with decimal values greater than 127
- may be used. As with "7bit data" CR and LF octets only occur as part
- of CRLF line separation sequences and no NULs are allowed.
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="How_decoding_is_done"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> How decoding is done</H3></A>
-
-
-<P>The <B>decoder</B> does a line-by-line pass-through from input to output,
-leaving the data unchanged <I>except</I> that an end-of-line sequence of
-CRLF is converted to a newline "\n". Given the line-oriented nature
-of 7bit and 8bit, this seems relatively sensible.
-
-
-
-<P><HR>
-<A NAME="How_encoding_is_done"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> How encoding is done</H3></A>
-
-
-<P>The <B>encoder</B> does a line-by-line pass-through from input to output,
-and simply attempts to <I>detect</I> violations of the <CODE>7bit</CODE>/<CODE>8bit</CODE>
-domain. The default action is to warn once per encoding if violations
-are detected; the warnings may be silenced with the QUIET configuration
-of <A HREF="../MIME/Tools.pm.html">MIME::Tools</A>.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:44 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/QuotedPrint.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/QuotedPrint.pm.html
deleted file mode 100644
index e38ab92..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/QuotedPrint.pm.html
+++ /dev/null
@@ -1,85 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Decoder::QuotedPrint</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Decoder::QuotedPrint</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Decoder::QuotedPrint - encode/decode a "quoted-printable" stream
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>A generic decoder object; see <A HREF="../../MIME/Decoder.pm.html">MIME::Decoder</A> for usage.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A MIME::Decoder subclass for the <CODE>"quoted-printable"</CODE> encoding.
-The name was chosen to jibe with the pre-existing MIME::QuotedPrint
-utility package, which this class actually uses to translate each line.
-
-
-
-<UL>
-<P><LI>
-<P>The <B>decoder</B> does a line-by-line translation from input to output.
-
-<P><LI>
-<P>The <B>encoder</B> does a line-by-line translation, breaking lines
-so that they fall under the standard 76-character limit for this
-encoding.
-
-</UL>
-
-
-<P><B>Note:</B> just like MIME::QuotedPrint, we currently use the
-native <CODE>"\n"</CODE> for line breaks, and not <CODE>CRLF</CODE>. This may
-need to change in future versions.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:47 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/UU.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/UU.pm.html
deleted file mode 100644
index 6218aff..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/UU.pm.html
+++ /dev/null
@@ -1,78 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Decoder::UU</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Decoder::UU</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Decoder::UU - decode a "uuencoded" stream
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>A generic decoder object; see <A HREF="../../MIME/Decoder.pm.html">MIME::Decoder</A> for usage.
-
-
-<P>Also supports a preamble() method to recover text before
-the uuencoded portion of the stream.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A MIME::Decoder subclass for a nonstandard encoding whereby
-data are uuencoded. Common non-standard MIME encodings for this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- x-uu
- x-uuencode
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>UU-decoding code lifted from "uuexplode", a Perl script by an
-unknown author...
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:50 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/h1bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/h1bullet.gif
deleted file mode 100644
index 8698643..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/h1bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/h2bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/h2bullet.gif
deleted file mode 100644
index d26510c..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/h2bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/zeegee.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/zeegee.gif
deleted file mode 100644
index f6001a5..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Decoder/icons/zeegee.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Entity.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Entity.pm.html
deleted file mode 100644
index ccde5fd..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Entity.pm.html
+++ /dev/null
@@ -1,1501 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Entity</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Entity</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#EXAMPLES">EXAMPLES</A>
-<UL>
-<LI> <A HREF="#Construction_examples">Construction examples</A>
-<LI> <A HREF="#Access_examples">Access examples</A>
-<LI> <A HREF="#Manipulation_examples">Manipulation examples</A>
-<LI> <A HREF="#Output_examples">Output examples</A>
-</UL>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<UL>
-<LI> <A HREF="#Construction">Construction</A>
-<LI> <A HREF="#Access">Access</A>
-<LI> <A HREF="#Manipulation">Manipulation</A>
-<LI> <A HREF="#Output">Output</A>
-</UL>
-<LI> <A HREF="#NOTES">NOTES</A>
-<UL>
-<LI> <A HREF="#Under_the_hood">Under the hood</A>
-<LI> <A HREF="#The_two-body_problem">The "two-body problem"</A>
-<LI> <A HREF="#Design_issues">Design issues</A>
-</UL>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Entity - class for parsed-and-decoded MIME message
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../MIME/Tools.pm.html">MIME::Tools</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create an entity:
- $top = MIME::Entity->build(From => 'me(a)myhost.com',
- To => 'you(a)yourhost.com',
- Subject => "Hello, nurse!",
- Data => \@my_message);
-
- ### Attach stuff to it:
- $top->attach(Path => $gif_path,
- Type => "image/gif",
- Encoding => "base64");
-
- ### Sign it:
- $top->sign;
-
- ### Output it:
- $top->print(\*STDOUT);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A subclass of <B>Mail::Internet</B>.
-
-
-<P>This package provides a class for representing MIME message entities,
-as specified in RFC 1521, <I>Multipurpose Internet Mail Extensions</I>.
-
-
-
-<P><HR>
-<A NAME="EXAMPLES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> EXAMPLES</H2></A>
-
-
-
-<P><HR>
-<A NAME="Construction_examples"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Construction examples</H3></A>
-
-
-<P>Create a document for an ordinary 7-bit ASCII text file (lots of
-stuff is defaulted for us):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Path=>"english-msg.txt");
-</PRE></FONT>
-
-<P>Create a document for a text file with 8-bit (Latin-1) characters:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Path =>"french-msg.txt",
- Encoding =>"quoted-printable",
- From =>'jean.luc(a)inria.fr',
- Subject =>"C'est bon!");
-</PRE></FONT>
-
-<P>Create a document for a GIF file (the description is completely optional;
-note that we have to specify content-type and encoding since they're
-not the default values):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Description => "A pretty picture",
- Path => "./docs/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64");
-</PRE></FONT>
-
-<P>Create a document that you already have the text for, using "Data":
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Type => "text/plain",
- Encoding => "quoted-printable",
- Data => ["First line.\n",
- "Second line.\n",
- "Last line.\n"]);
-</PRE></FONT>
-
-<P>Create a multipart message, with the entire structure given
-explicitly:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create the top-level, and set up the mail headers:
- $top = MIME::Entity->build(Type => "multipart/mixed",
- From => 'me(a)myhost.com',
- To => 'you(a)yourhost.com',
- Subject => "Hello, nurse!");
-
- ### Attachment #1: a simple text document:
- $top->attach(Path=>"./testin/short.txt");
-
- ### Attachment #2: a GIF file:
- $top->attach(Path => "./docs/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64");
-
- ### Attachment #3: text we'll create with text we have on-hand:
- $top->attach(Data => $contents);
-</PRE></FONT>
-
-<P>Suppose you don't know ahead of time that you'll have attachments?
-No problem: you can "attach" to singleparts as well:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $top = MIME::Entity->build(From => 'me(a)myhost.com',
- To => 'you(a)yourhost.com',
- Subject => "Hello, nurse!",
- Data => \@my_message);
- if ($GIF_path) {
- $top->attach(Path => $GIF_path,
- Type => 'image/gif');
- }
-</PRE></FONT>
-
-<P>Copy an entity (headers, parts... everything but external body data):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $deepcopy = $top->dup;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Access_examples"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Access examples</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Get the head, a MIME::Head:
- $head = $ent->head;
-
- ### Get the body, as a MIME::Body;
- $bodyh = $ent->bodyhandle;
-
- ### Get the intended MIME type (as declared in the header):
- $type = $ent->mime_type;
-
- ### Get the effective MIME type (in case decoding failed):
- $eff_type = $ent->effective_type;
-
- ### Get preamble, parts, and epilogue:
- $preamble = $ent->preamble; ### ref to array of lines
- $num_parts = $ent->parts;
- $first_part = $ent->parts(0); ### an entity
- $epilogue = $ent->epilogue; ### ref to array of lines
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Manipulation_examples"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Manipulation examples</H3></A>
-
-
-<P>Muck about with the body data:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Read the (unencoded) body data:
- if ($io = $ent->open("r")) {
- while (defined($_ = $io->getline)) { print $_ }
- $io->close;
- }
-
- ### Write the (unencoded) body data:
- if ($io = $ent->open("w")) {
- foreach (@lines) { $io->print($_) }
- $io->close;
- }
-
- ### Delete the files for any external (on-disk) data:
- $ent->purge;
-</PRE></FONT>
-
-<P>Muck about with the signature:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Sign it (automatically removes any existing signature):
- $top->sign(File=>"$ENV{HOME}/.signature");
-
- ### Remove any signature within 15 lines of the end:
- $top->remove_sig(15);
-</PRE></FONT>
-
-<P>Muck about with the headers:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Compute content-lengths for singleparts based on bodies:
- ### (Do this right before you print!)
- $entity->sync_headers(Length=>'COMPUTE');
-</PRE></FONT>
-
-<P>Muck about with the structure:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### If a 0- or 1-part multipart, collapse to a singlepart:
- $top->make_singlepart;
-
- ### If a singlepart, inflate to a multipart with 1 part:
- $top->make_multipart;
-</PRE></FONT>
-
-<P>Delete parts:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Delete some parts of a multipart message:
- my @keep = grep { keep_part($_) } $msg->parts;
- $msg->parts(\@keep);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Output_examples"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Output examples</H3></A>
-
-
-<P>Print to filehandles:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Print the entire message:
- $top->print(\*STDOUT);
-
- ### Print just the header:
- $top->print_header(\*STDOUT);
-
- ### Print just the (encoded) body... includes parts as well!
- $top->print_body(\*STDOUT);
-</PRE></FONT>
-
-<P>Stringify... note that <CODE>stringify_xx</CODE> can also be written <CODE>xx_as_string</CODE>;
-the methods are synonymous, and neither form will be deprecated:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Stringify the entire message:
- print $top->stringify; ### or $top->as_string
-
- ### Stringify just the header:
- print $top->stringify_header; ### or $top->header_as_string
-
- ### Stringify just the (encoded) body... includes parts as well!
- print $top->stringify_body; ### or $top->body_as_string
-</PRE></FONT>
-
-<P>Debug:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Output debugging info:
- $entity->dump_skeleton(\*STDERR);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<P><HR>
-<A NAME="Construction"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Construction</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new [SOURCE]</A></B></DT>
-<DD>
-<I>Class method.</I>
-Create a new, empty MIME entity.
-Basically, this uses the Mail::Internet constructor...
-
-
-<P>If SOURCE is an ARRAYREF, it is assumed to be an array of lines
-that will be used to create both the header and an in-core body.
-
-
-<P>Else, if SOURCE is defined, it is assumed to be a filehandle
-from which the header and in-core body is to be read.
-
-
-<P><B>Note:</B> in either case, the body will not be <I>parsed:</I> merely read!
-
-<P><DT><B><A NAME="item:add_part">add_part ENTITY, [OFFSET]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Assuming we are a multipart message, add a body part (a MIME::Entity)
-to the array of body parts. Returns the part that was just added.
-
-
-<P>If OFFSET is positive, the new part is added at that offset from the
-beginning of the array of parts. If it is negative, it counts from
-the end of the array. (An INDEX of -1 will place the new part at the
-very end of the array, -2 will place it as the penultimate item in the
-array, etc.) If OFFSET is not given, the new part is added to the end
-of the array.
-<I>Thanks to Jason L Tibbitts III for providing support for OFFSET.</I>
-
-
-<P><B>Warning:</B> in general, you only want to attach parts to entities
-with a content-type of <CODE>multipart/*</CODE>).
-
-<P><DT><B><A NAME="item:attach">attach PARAMHASH</A></B></DT>
-<DD>
-<I>Instance method.</I>
-The real quick-and-easy way to create multipart messages.
-The PARAMHASH is used to <CODE>build</CODE> a new entity; this method is
-basically equivalent to:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $entity->add_part(ref($entity)->build(PARAMHASH, Top=>0));
-</PRE></FONT>
-
-<P><B>Note:</B> normally, you attach to multipart entities; however, if you
-attach something to a singlepart (like attaching a GIF to a text
-message), the singlepart will be coerced into a multipart automatically.
-
-<P><DT><B><A NAME="item:build">build PARAMHASH</A></B></DT>
-<DD>
-<I>Class/instance method.</I>
-A quick-and-easy catch-all way to create an entity. Use it like this
-to build a "normal" single-part entity:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Type => "image/gif",
- Encoding => "base64",
- Path => "/path/to/xyz12345.gif",
- Filename => "saveme.gif",
- Disposition => "attachment");
-</PRE></FONT>
-
-<P>And like this to build a "multipart" entity:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Type => "multipart/mixed",
- Boundary => "---1234567");
-</PRE></FONT>
-
-<P>A minimal MIME header will be created. If you want to add or modify
-any header fields afterwards, you can of course do so via the underlying
-head object... but hey, there's now a prettier syntax!
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Type =>"multipart/mixed",
- From => $myaddr,
- Subject => "Hi!",
- 'X-Certified' => ['SINED',
- 'SEELED',
- 'DELIVERED']);
-</PRE></FONT>
-
-<P>Normally, an <CODE>X-Mailer</CODE> header field is output which contains this
-toolkit's name and version (plus this module's RCS version).
-This will allow any bad MIME we generate to be traced back to us.
-You can of course overwrite that header with your own:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Type => "multipart/mixed",
- 'X-Mailer' => "myprog 1.1");
-</PRE></FONT>
-
-<P>Or remove it entirely:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent = MIME::Entity->build(Type => "multipart/mixed",
- 'X-Mailer' => undef);
-</PRE></FONT>
-
-<P>OK, enough hype. The parameters are:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:FIELDNAME">(FIELDNAME)</A></B></DT>
-<DD>
-Any field you want placed in the message header, taken from the
-standard list of header fields (you don't need to worry about case):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Bcc Encrypted Received Sender
- Cc From References Subject
- Comments Keywords Reply-To To
- Content-* Message-ID Resent-* X-*
- Date MIME-Version Return-Path
- Organization
-</PRE></FONT>
-
-<P>To give experienced users some veto power, these fields will be set
-<I>after</I> the ones I set... so be careful: <I>don't set any MIME fields</I>
-(like <CODE>Content-type</CODE>) unless you know what you're doing!
-
-
-<P>To specify a fieldname that's <I>not</I> in the above list, even one that's
-identical to an option below, just give it with a trailing <CODE>":"</CODE>,
-like <CODE>"My-field:"</CODE>. When in doubt, that <I>always</I> signals a mail
-field (and it sort of looks like one too).
-
-<P><DT><B><A NAME="item:Boundary">Boundary</A></B></DT>
-<DD>
-<I>Multipart entities only. Optional.</I>
-The boundary string. As per RFC-1521, it must consist only
-of the characters <CODE>[0-9a-zA-Z'()+_,-./:=?]</CODE> and space (you'll be
-warned, and your boundary will be ignored, if this is not the case).
-If you omit this, a random string will be chosen... which is probably
-safer.
-
-<P><DT><B><A NAME="item:Charset">Charset</A></B></DT>
-<DD>
-<I>Optional.</I>
-The character set.
-
-<P><DT><B><A NAME="item:Data">Data</A></B></DT>
-<DD>
-<I>Single-part entities only. Optional.</I>
-An alternative to Path (q.v.): the actual data, either as a scalar
-or an array reference (whose elements are joined together to make
-the actual scalar). The body is opened on the data using
-MIME::Body::InCore.
-
-<P><DT><B><A NAME="item:Description">Description</A></B></DT>
-<DD>
-<I>Optional.</I>
-The text of the content-description.
-If you don't specify it, the field is not put in the header.
-
-<P><DT><B><A NAME="item:Disposition">Disposition</A></B></DT>
-<DD>
-<I>Optional.</I>
-The basic content-disposition (<CODE>"attachment"</CODE> or <CODE>"inline"</CODE>).
-If you don't specify it, it defaults to "inline" for backwards
-compatibility. <I>Thanks to Kurt Freytag for suggesting this feature.</I>
-
-<P><DT><B><A NAME="item:Encoding">Encoding</A></B></DT>
-<DD>
-<I>Optional.</I>
-The content-transfer-encoding.
-If you don't specify it, a reasonable default is put in.
-You can also give the special value '-SUGGEST', to have it chosen for
-you in a heavy-duty fashion which scans the data itself.
-
-<P><DT><B><A NAME="item:Filename">Filename</A></B></DT>
-<DD>
-<I>Single-part entities only. Optional.</I>
-The recommended filename. Overrides any name extracted from <CODE>Path</CODE>.
-The information is stored both the deprecated (content-type) and
-preferred (content-disposition) locations. If you explicitly want to
-<I>avoid</I> a recommended filename (even when Path is used), supply this
-as empty or undef.
-
-<P><DT><B><A NAME="item:Id">Id</A></B></DT>
-<DD>
-<I>Optional.</I>
-Set the content-id.
-
-<P><DT><B><A NAME="item:Path">Path</A></B></DT>
-<DD>
-<I>Single-part entities only. Optional.</I>
-The path to the file to attach. The body is opened on that file
-using MIME::Body::File.
-
-<P><DT><B><A NAME="item:Top">Top</A></B></DT>
-<DD>
-<I>Optional.</I>
-Is this a top-level entity? If so, it must sport a MIME-Version.
-The default is true. (NB: look at how <CODE>attach()</CODE> uses it.)
-
-<P><DT><B><A NAME="item:Type">Type</A></B></DT>
-<DD>
-<I>Optional.</I>
-The basic content-type (<CODE>"text/plain"</CODE>, etc.).
-If you don't specify it, it defaults to <CODE>"text/plain"</CODE>
-as per RFC-1521. <I>Do yourself a favor: put it in.</I>
-
-</DL>
-
-<P><DT><B><A NAME="item:dup">dup</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Duplicate the entity. Does a deep, recursive copy, <I>but beware:</I>
-external data in bodyhandles is <I>not</I> copied to new files!
-Changing the data in one entity's data file, or purging that entity,
-<I>will</I> affect its duplicate. Entities with in-core data probably need
-not worry.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Access"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Access</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:body">body [VALUE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get the <I>encoded</I> (transport-ready) body, as an array of lines.
-This is a read-only data structure: changing its contents will have
-no effect. Its contents are identical to what is printed by
-<A HREF="#item:print_body">print_body()</A>.
-
-
-<P>Provided for compatibility with Mail::Internet, so that methods
-like <CODE>smtpsend()</CODE> will work. Note however that if VALUE is given,
-a fatal exception is thrown, since you cannot use this method to
-<I>set</I> the lines of the encoded message.
-
-
-<P>If you want the raw (unencoded) body data, use the <A HREF="#item:bodyhandle">bodyhandle()</A>
-method to get and use a MIME::Body. The content-type of the entity
-will tell you whether that body is best read as text (via getline())
-or raw data (via read()).
-
-<P><DT><B><A NAME="item:bodyhandle">bodyhandle [VALUE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get or set an abstract object representing the body of the message.
-The body holds the decoded message data.
-
-
-<P><B>Note that not all entities have bodies!</B>
-An entity will have either a body or parts: not both.
-This method will <I>only</I> return an object if this entity can
-have a body; otherwise, it will return undefined.
-Whether-or-not a given entity can have a body is determined by
-(1) its content type, and (2) whether-or-not the parser was told to
-extract nested messages:
-
-<P><TABLE CELLPADDING=4 CELLSPACING=0 BORDER=1 ALIGN=CENTER BGCOLOR=#EEEEEE><TR><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">Type: </FONT></TH BGCOLOR=#AA0055><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">Extract nested? </FONT></TH BGCOLOR=#AA0055><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">bodyhandle() </FONT></TH BGCOLOR=#AA0055><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">parts() </FONT></TH BGCOLOR=#AA0055></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">multipart/*</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">-</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">undef</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">0 or more MIME::Entity</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">message/*</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">true</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">undef</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">0 or 1 MIME::Entity</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">message/*</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">false</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Body</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">empty list</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">(other)</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">-</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">MIME::Body</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">empty list</FONT></TD></TR></UL></TABLE>
-<P>If <CODE>VALUE</CODE> <I>is not</I> given, the current bodyhandle is returned,
-or undef if the entity cannot have a body.
-
-
-<P>If <CODE>VALUE</CODE> <I>is</I> given, the bodyhandle is set to the new value,
-and the previous value is returned.
-
-
-<P>See <A HREF="#item:parts">parts</A> for more info.
-
-<P><DT><B><A NAME="item:effective_type">effective_type [MIMETYPE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Set/get the <I>effective</I> MIME type of this entity. This is <I>usually</I>
-identical to the actual (or defaulted) MIME type, but in some cases
-it differs. For example, from RFC-2045:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Any entity with an unrecognized Content-Transfer-Encoding must be
- treated as if it has a Content-Type of "application/octet-stream",
- regardless of what the Content-Type header field actually says.
-</PRE></FONT>
-
-<P>Why? because if we can't decode the message, then we have to take
-the bytes as-is, in their (unrecognized) encoded form. So the
-message ceases to be a "text/foobar" and becomes a bunch of undecipherable
-bytes -- in other words, an "application/octet-stream".
-
-
-<P>Such an entity, if parsed, would have its effective_type() set to
-<CODE>"application/octet_stream"</CODE>, although the mime_type() and the contents
-of the header would remain the same.
-
-
-<P>If there is no effective type, the method just returns what
-mime_type() would.
-
-
-<P><B>Warning:</B> the effective type is "sticky"; once set, that effective_type()
-will always be returned even if the conditions that necessitated setting
-the effective type become no longer true.
-
-<P><DT><B><A NAME="item:epilogue">epilogue [LINES]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get/set the text of the epilogue, as an array of newline-terminated LINES.
-Returns a reference to the array of lines, or undef if no epilogue exists.
-
-
-<P>If there is a epilogue, it is output when printing this entity; otherwise,
-a default epilogue is used. Setting the epilogue to undef (not []!) causes
-it to fallback to the default.
-
-<P><DT><B><A NAME="item:head">head [VALUE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get/set the head.
-
-
-<P>If there is no VALUE given, returns the current head. If none
-exists, an empty instance of MIME::Head is created, set, and returned.
-
-
-<P><B>Note:</B> This is a patch over a problem in Mail::Internet, which doesn't
-provide a method for setting the head to some given object.
-
-<P><DT><B><A NAME="item:is_multipart">is_multipart</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Does this entity's effective MIME type indicate that it's a multipart entity?
-Returns undef (false) if the answer couldn't be determined, 0 (false)
-if it was determined to be false, and true otherwise.
-Note that this says nothing about whether or not parts were extracted.
-
-
-<P>NOTE: we switched to effective_type so that multiparts with
-bad or missing boundaries could be coerced to an effective type
-of <CODE>application/x-unparseable-multipart</CODE>.
-
-<P><DT><B><A NAME="item:mime_type">mime_type</A></B></DT>
-<DD>
-<I>Instance method.</I>
-A purely-for-convenience method. This simply relays the request to the
-associated MIME::Head object.
-If there is no head, returns undef in a scalar context and
-the empty array in a list context.
-
-
-<P><B>Before you use this,</B> consider using effective_type() instead,
-especially if you obtained the entity from a MIME::Parser.
-
-<P><DT><B><A NAME="item:open">open READWRITE</A></B></DT>
-<DD>
-<I>Instance method.</I>
-A purely-for-convenience method. This simply relays the request to the
-associated MIME::Body object (see MIME::Body::open()).
-READWRITE is either 'r' (open for read) or 'w' (open for write).
-
-
-<P>If there is no body, returns false.
-
-<P><DT><B><A NAME="item:parts">parts</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:parts">parts INDEX</A></B></DT>
-<DD>
-<P><DT><B><A NAME="item:parts">parts ARRAYREF</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the MIME::Entity objects which are the sub parts of this
-entity (if any).
-
-
-<P><I>If no argument is given,</I> returns the array of all sub parts,
-returning the empty array if there are none (e.g., if this is a single
-part message, or a degenerate multipart). In a scalar context, this
-returns you the number of parts.
-
-
-<P><I>If an integer INDEX is given,</I> return the INDEXed part,
-or undef if it doesn't exist.
-
-
-<P><I>If an ARRAYREF to an array of parts is given,</I> then this method <I>sets</I>
-the parts to a copy of that array, and returns the parts. This can
-be used to delete parts, as follows:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Delete some parts of a multipart message:
- $msg->parts([ grep { keep_part($_) } $msg->parts ]);
-
-</PRE></FONT>
-
-<P><B>Note:</B> for multipart messages, the preamble and epilogue are <I>not</I>
-considered parts. If you need them, use the <CODE>preamble()</CODE> and <CODE>epilogue()</CODE>
-methods.
-
-
-<P><B>Note:</B> there are ways of parsing with a MIME::Parser which cause
-certain message parts (such as those of type <CODE>message/rfc822</CODE>)
-to be "reparsed" into pseudo-multipart entities. You should read the
-documentation for those options carefully: it <I>is</I> possible for
-a diddled entity to not be multipart, but still have parts attached to it!
-
-
-<P>See <A HREF="#item:bodyhandle">bodyhandle</A> for a discussion of parts vs. bodies.
-
-<P><DT><B><A NAME="item:parts_DFS">parts_DFS</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the list of all MIME::Entity objects included in the entity,
-starting with the entity itself, in depth-first-search order.
-If the entity has no parts, it alone will be returned.
-
-
-<P><I>Thanks to Xavier Armengou for suggesting this method.</I>
-
-<P><DT><B><A NAME="item:preamble">preamble [LINES]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get/set the text of the preamble, as an array of newline-terminated LINES.
-Returns a reference to the array of lines, or undef if no preamble exists
-(e.g., if this is a single-part entity).
-
-
-<P>If there is a preamble, it is output when printing this entity; otherwise,
-a default preamble is used. Setting the preamble to undef (not []!) causes
-it to fallback to the default.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Manipulation"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Manipulation</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:make_multipart">make_multipart [SUBTYPE], OPTSHASH...</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Force the entity to be a multipart, if it isn't already.
-We do this by replacing the original [singlepart] entity with a new
-multipart that has the same non-MIME headers ("From", "Subject", etc.),
-but all-new MIME headers ("Content-type", etc.). We then create
-a copy of the original singlepart, <I>strip out</I> the non-MIME headers
-from that, and make it a part of the new multipart. So this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- From: me
- To: you
- Content-type: text/plain
- Content-length: 12
-
- Hello there!
-</PRE></FONT>
-
-<P>Becomes something like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- From: me
- To: you
- Content-type: multipart/mixed; boundary="----abc----"
-
- ------abc----
- Content-type: text/plain
- Content-length: 12
-
- Hello there!
- ------abc------
-</PRE></FONT>
-
-<P>The actual type of the new top-level multipart will be "multipart/SUBTYPE"
-(default SUBTYPE is "mixed").
-
-
-<P>Returns 'DONE' if we really did inflate a singlepart to a multipart.
-Returns 'ALREADY' (and does nothing) if entity is <I>already</I> multipart
-and Force was not chosen.
-
-
-<P>If OPTSHASH contains Force=>1, then we <I>always</I> bump the top-level's
-content and content-headers down to a subpart of this entity, even if
-this entity is already a multipart. This is apparently of use to
-people who are tweaking messages after parsing them.
-
-<P><DT><B><A NAME="item:make_singlepart">make_singlepart</A></B></DT>
-<DD>
-<I>Instance method.</I>
-If the entity is a multipart message with one part, this tries hard to
-rewrite it as a singlepart, by replacing the content (and content headers)
-of the top level with those of the part. Also crunches 0-part multiparts
-into singleparts.
-
-
-<P>Returns 'DONE' if we really did collapse a multipart to a singlepart.
-Returns 'ALREADY' (and does nothing) if entity is already a singlepart.
-Returns '0' (and does nothing) if it can't be made into a singlepart.
-
-<P><DT><B><A NAME="item:purge">purge</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Recursively purge (e.g., unlink) all external (e.g., on-disk) body parts
-in this message. See MIME::Body::purge() for details.
-
-
-<P><B>Note:</B> this does <I>not</I> delete the directories that those body parts
-are contained in; only the actual message data files are deleted.
-This is because some parsers may be customized to create intermediate
-directories while others are not, and it's impossible for this class
-to know what directories are safe to remove. Only your application
-program truly knows that.
-
-<B>If you really want to "clean everything up",</B> one good way is to
-use <CODE>MIME::Parser::file_under()</CODE>, and then do this before parsing
-your next message:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $parser->filer->purge();
-</PRE></FONT>
-
-<P>I wouldn't attempt to read those body files after you do this, for
-obvious reasons. As of MIME-tools 4.x, each body's path <I>is</I> undefined
-after this operation. I warned you I might do this; truly I did.
-
-
-<P><I>Thanks to Jason L. Tibbitts III for suggesting this method.</I>
-
-<P><DT><B><A NAME="item:remove_sig">remove_sig [NLINES]</A></B></DT>
-<DD>
-<I>Instance method, override.</I>
-Attempts to remove a user's signature from the body of a message.
-
-
-<P>It does this by looking for a line matching <CODE>/^-- $/</CODE> within the last
-<CODE>NLINES</CODE> of the message. If found then that line and all lines after
-it will be removed. If <CODE>NLINES</CODE> is not given, a default value of 10
-will be used. This would be of most use in auto-reply scripts.
-
-
-<P>For MIME entity, this method is reasonably cautious: it will only
-attempt to un-sign a message with a content-type of <CODE>text/*</CODE>.
-
-
-<P>If you send remove_sig() to a multipart entity, it will relay it to
-the first part (the others usually being the "attachments").
-
-
-<P><B>Warning:</B> currently slurps the whole message-part into core as an
-array of lines, so you probably don't want to use this on extremely
-long messages.
-
-
-<P>Returns truth on success, false on error.
-
-<P><DT><B><A NAME="item:sign">sign PARAMHASH</A></B></DT>
-<DD>
-<I>Instance method, override.</I>
-Append a signature to the message. The params are:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Attach">Attach</A></B></DT>
-<DD>
-Instead of appending the text, add it to the message as an attachment.
-The disposition will be <CODE>inline</CODE>, and the description will indicate
-that it is a signature. The default behavior is to append the signature
-to the text of the message (or the text of its first part if multipart).
-<I>MIME-specific; new in this subclass.</I>
-
-<P><DT><B><A NAME="item:File">File</A></B></DT>
-<DD>
-Use the contents of this file as the signature.
-Fatal error if it can't be read.
-<I>As per superclass method.</I>
-
-<P><DT><B><A NAME="item:Force">Force</A></B></DT>
-<DD>
-Sign it even if the content-type isn't <CODE>text/*</CODE>. Useful for
-non-standard types like <CODE>x-foobar</CODE>, but be careful!
-<I>MIME-specific; new in this subclass.</I>
-
-<P><DT><B><A NAME="item:Remove">Remove</A></B></DT>
-<DD>
-Normally, we attempt to strip out any existing signature.
-If true, this gives us the NLINES parameter of the remove_sig call.
-If zero but defined, tells us <I>not</I> to remove any existing signature.
-If undefined, removal is done with the default of 10 lines.
-<I>New in this subclass.</I>
-
-<P><DT><B><A NAME="item:Signature">Signature</A></B></DT>
-<DD>
-Use this text as the signature. You can supply it as either
-a scalar, or as a ref to an array of newline-terminated scalars.
-<I>As per superclass method.</I>
-
-</DL>
-
-
-<P>For MIME messages, this method is reasonably cautious: it will only
-attempt to sign a message with a content-type of <CODE>text/*</CODE>, unless
-<CODE>Force</CODE> is specified.
-
-
-<P>If you send this message to a multipart entity, it will relay it to
-the first part (the others usually being the "attachments").
-
-
-<P><B>Warning:</B> currently slurps the whole message-part into core as an
-array of lines, so you probably don't want to use this on extremely
-long messages.
-
-
-<P>Returns true on success, false otherwise.
-
-<P><DT><B><A NAME="item:suggest_encoding">suggest_encoding</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Based on the effective content type, return a good suggested encoding.
-
-
-<P><CODE>text</CODE> and <CODE>message</CODE> types have their bodies scanned line-by-line
-for 8-bit characters and long lines; lack of either means that the
-message is 7bit-ok. Other types are chosen independent of their body:
-
-<P><TABLE CELLPADDING=4 CELLSPACING=0 BORDER=1 ALIGN=CENTER BGCOLOR=#EEEEEE><TR><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">Major type: 7bit ok? Suggested encoding: </FONT></TH BGCOLOR=#AA0055></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">text yes 7bit</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">text no quoted-printable</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">message yes 7bit</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">message no binary</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">multipart * binary (in case some parts are bad)</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">image, etc... * base64</FONT></TD></TR></UL></TABLE><P><DT><B><A NAME="item:sync_headers">sync_headers OPTIONS</A></B></DT>
-<DD>
-<I>Instance method.</I>
-This method does a variety of activities which ensure that
-the MIME headers of an entity "tree" are in-synch with the body parts
-they describe. It can be as expensive an operation as printing
-if it involves pre-encoding the body parts; however, the aim is to
-produce fairly clean MIME. <B>You will usually only need to invoke
-this if processing and re-sending MIME from an outside source.</B>
-
-
-<P>The OPTIONS is a hash, which describes what is to be done.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Length">Length</A></B></DT>
-<DD>
-One of the "official unofficial" MIME fields is "Content-Length".
-Normally, one doesn't care a whit about this field; however, if
-you are preparing output destined for HTTP, you may. The value of
-this option dictates what will be done:
-
-
-<P><B>COMPUTE</B> means to set a <CODE>Content-Length</CODE> field for every non-multipart
-part in the entity, and to blank that field out for every multipart
-part in the entity.
-
-
-<P><B>ERASE</B> means that <CODE>Content-Length</CODE> fields will all
-be blanked out. This is fast, painless, and safe.
-
-
-<P><B>Any false value</B> (the default) means to take no action.
-
-<P><DT><B><A NAME="item:Nonstandard">Nonstandard</A></B></DT>
-<DD>
-Any header field beginning with "Content-" is, according to the RFC,
-a MIME field. However, some are non-standard, and may cause problems
-with certain MIME readers which interpret them in different ways.
-
-
-<P><B>ERASE</B> means that all such fields will be blanked out. This is
-done <I>before</I> the <B>Length</B> option (q.v.) is examined and acted upon.
-
-
-<P><B>Any false value</B> (the default) means to take no action.
-
-</DL>
-
-
-<P>Returns a true value if everything went okay, a false value otherwise.
-
-<P><DT><B><A NAME="item:tidy_body">tidy_body</A></B></DT>
-<DD>
-<I>Instance method, override.</I>
-Currently unimplemented for MIME messages. Does nothing, returns false.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Output"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Output</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:dump_skeleton">dump_skeleton [FILEHANDLE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Dump the skeleton of the entity to the given FILEHANDLE, or
-to the currently-selected one if none given.
-
-
-<P>Each entity is output with an appropriate indentation level,
-the following selection of attributes:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: multipart/mixed
- Effective-type: multipart/mixed
- Body-file: NONE
- Subject: Hey there!
- Num-parts: 2
-</PRE></FONT>
-
-<P>This is really just useful for debugging purposes; I make no guarantees
-about the consistency of the output format over time.
-
-<P><DT><B><A NAME="item:print">print [OUTSTREAM]</A></B></DT>
-<DD>
-<I>Instance method, override.</I>
-Print the entity to the given OUTSTREAM, or to the currently-selected
-filehandle if none given. OUTSTREAM can be a filehandle, or any object
-that reponds to a print() message.
-
-
-<P>The entity is output as a valid MIME stream! This means that the
-header is always output first, and the body data (if any) will be
-encoded if the header says that it should be.
-For example, your output may look like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Subject: Greetings
- Content-transfer-encoding: base64
-
- SGkgdGhlcmUhCkJ5ZSB0aGVyZSEK
-</PRE></FONT>
-
-<P><I>If this entity has MIME type "multipart/*",</I>
-the preamble, parts, and epilogue are all output with appropriate
-boundaries separating each.
-Any bodyhandle is ignored:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: multipart/mixed; boundary="*----*"
- Content-transfer-encoding: 7bit
-
- [Preamble]
- --*----*
- [Entity: Part 0]
- --*----*
- [Entity: Part 1]
- --*----*--
- [Epilogue]
-</PRE></FONT>
-
-<P><I>If this entity has a single-part MIME type with no attached parts,</I>
-then we're looking at a normal singlepart entity: the body is output
-according to the encoding specified by the header.
-If no body exists, a warning is output and the body is treated as empty:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: image/gif
- Content-transfer-encoding: base64
-
- [Encoded body]
-</PRE></FONT>
-
-<P><I>If this entity has a single-part MIME type but it also has parts,</I>
-then we're probably looking at a "re-parsed" singlepart, usually one
-of type <CODE>message/*</CODE> (you can get entities like this if you set the
-<CODE>parse_nested_messages(NEST)</CODE> option on the parser to true).
-In this case, the parts are output with single blank lines separating each,
-and any bodyhandle is ignored:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: message/rfc822
- Content-transfer-encoding: 7bit
-
- [Entity: Part 0]
-
- [Entity: Part 1]
-</PRE></FONT>
-
-<P>In all cases, when outputting a "part" of the entity, this method
-is invoked recursively.
-
-
-<P><B>Note:</B> the output is very likely <I>not</I> going to be identical
-to any input you parsed to get this entity. If you're building
-some sort of email handler, it's up to you to save this information.
-
-<P><DT><B><A NAME="item:print_body">print_body [OUTSTREAM]</A></B></DT>
-<DD>
-<I>Instance method, override.</I>
-Print the body of the entity to the given OUTSTREAM, or to the
-currently-selected filehandle if none given. OUTSTREAM can be a
-filehandle, or any object that reponds to a print() message.
-
-
-<P>The body is output for inclusion in a valid MIME stream; this means
-that the body data will be encoded if the header says that it should be.
-
-
-<P><B>Note:</B> by "body", we mean "the stuff following the header".
-A printed multipart body includes the printed representations of its subparts.
-
-
-<P><B>Note:</B> The body is <I>stored</I> in an un-encoded form; however, the idea is that
-the transfer encoding is used to determine how it should be <I>output.</I>
-This means that the <CODE>print()</CODE> method is always guaranteed to get you
-a sendmail-ready stream whose body is consistent with its head.
-If you want the <I>raw body data</I> to be output, you can either read it from
-the bodyhandle yourself, or use:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $ent->bodyhandle->print($outstream);
-</PRE></FONT>
-
-<P>which uses read() calls to extract the information, and thus will
-work with both text and binary bodies.
-
-
-<P><B>Warning:</B> Please supply an OUTSTREAM. This override method differs
-from Mail::Internet's behavior, which outputs to the STDOUT if no
-filehandle is given: this may lead to confusion.
-
-<P><DT><B><A NAME="item:print_header">print_header [OUTSTREAM]</A></B></DT>
-<DD>
-<I>Instance method, inherited.</I>
-Output the header to the given OUTSTREAM. You really should supply
-the OUTSTREAM.
-
-<P><DT><B><A NAME="item:stringify">stringify</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the entity as a string, exactly as <CODE>print</CODE> would print it.
-The body will be encoded as necessary, and will contain any subparts.
-You can also use <CODE>as_string()</CODE>.
-
-<P><DT><B><A NAME="item:stringify_body">stringify_body</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the <I>encoded</I> message body as a string, exactly as <CODE>print_body</CODE>
-would print it. You can also use <CODE>body_as_string()</CODE>.
-
-
-<P>If you want the <I>unencoded</I> body, and you are dealing with a
-singlepart message (like a "text/plain"), use <CODE>bodyhandle()</CODE> instead:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- if ($ent->bodyhandle) {
- $unencoded_data = $ent->bodyhandle->as_string;
- }
- else {
- ### this message has no body data (but it might have parts!)
- }
-</PRE></FONT>
-<P><DT><B><A NAME="item:stringify_header">stringify_header</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the header as a string, exactly as <CODE>print_header</CODE> would print it.
-You can also use <CODE>header_as_string()</CODE>.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-
-<P><HR>
-<A NAME="Under_the_hood"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Under the hood</H3></A>
-
-
-<P>A <B>MIME::Entity</B> is composed of the following elements:
-
-
-
-<UL>
-<P><LI>
-<P>A <I>head</I>, which is a reference to a MIME::Head object
-containing the header information.
-
-<P><LI>
-<P>A <I>bodyhandle</I>, which is a reference to a MIME::Body object
-containing the decoded body data. This is only defined if
-the message is a "singlepart" type:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- application/*
- audio/*
- image/*
- text/*
- video/*
-</PRE></FONT>
-<P><LI>
-<P>An array of <I>parts</I>, where each part is a MIME::Entity object.
-The number of parts will only be nonzero if the content-type
-is <I>not</I> one of the "singlepart" types:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- message/* (should have exactly one part)
- multipart/* (should have one or more parts)
-</PRE></FONT>
-</UL>
-
-
-
-<P><HR>
-<A NAME="The_two-body_problem"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> The "two-body problem"</H3></A>
-
-
-<P>MIME::Entity and Mail::Internet see message bodies differently,
-and this can cause confusion and some inconvenience. Sadly, I can't
-change the behavior of MIME::Entity without breaking lots of code already
-out there. But let's open up the floor for a few questions...
-
-
-
-<DL>
-<P><DT><B><A NAME="item:What_is_the_difference_between_a_message_and_an_entity">What is the difference between a "message" and an "entity"?</A></B></DT>
-<DD>
-A <B>message</B> is the actual data being sent or received; usually
-this means a stream of newline-terminated lines.
-An <B>entity</B> is the representation of a message as an object.
-
-
-<P>This means that you get a "message" when you print an "entity"
-<I>to</I> a filehandle, and you get an "entity" when you parse a message
-<I>from</I> a filehandle.
-
-<P><DT><B><A NAME="item:What_is_a_message_body">What is a message body?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-The portion of the printed message after the header.
-
-
-<P><B>MIME::Entity:</B>
-The portion of the printed message after the header.
-
-<P><DT><B><A NAME="item:How_is_a_message_body_stored_in_an_entity">How is a message body stored in an entity?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-As an array of lines.
-
-
-<P><B>MIME::Entity:</B>
-It depends on the content-type of the message.
-For "container" types (<CODE>multipart/*</CODE>, <CODE>message/*</CODE>), we store the
-contained entities as an array of "parts", accessed via the <CODE>parts()</CODE>
-method, where each part is a complete MIME::Entity.
-For "singlepart" types (<CODE>text/*</CODE>, <CODE>image/*</CODE>, etc.), the unencoded
-body data is referenced via a MIME::Body object, accessed via
-the <CODE>bodyhandle()</CODE> method:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- bodyhandle() parts()
- Content-type: returns: returns:
- ------------------------------------------------------------
- application/* MIME::Body empty
- audio/* MIME::Body empty
- image/* MIME::Body empty
- message/* undef MIME::Entity list (usually 1)
- multipart/* undef MIME::Entity list (usually >0)
- text/* MIME::Body empty
- video/* MIME::Body empty
- x-*/* MIME::Body empty
-</PRE></FONT>
-
-<P>As a special case, <CODE>message/*</CODE> is currently ambiguous: depending
-on the parser, a <CODE>message/*</CODE> might be treated as a singlepart,
-with a MIME::Body and no parts. Use bodyhandle() as the final
-arbiter.
-
-<P><DT><B><A NAME="item:What_does_the_body_method_return">What does the body() method return?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-As an array of lines, ready for sending.
-
-
-<P><B>MIME::Entity:</B>
-As an array of lines, ready for sending.
-
-<P><DT><B><A NAME="item:If_an_entity_has_a_body_does_it_have_a_soul_as_well">If an entity has a body, does it have a soul as well?</A></B></DT>
-<DD>
-The soul does not exist in a corporeal sense, the way the body does;
-it is not a solid [Perl] object. Rather, it is a virtual object
-which is only visible when you print() an entity to a file... in other
-words, the "soul" it is all that is left after the body is DESTROY'ed.
-
-<P><DT><B><A NAME="item:What_s_the_best_way_to_get_at_the_body_data">What's the best way to get at the body data?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-Use the body() method.
-
-
-<P><B>MIME::Entity:</B>
-Depends on what you want... the <I>encoded</I> data (as it is
-transported), or the <I>unencoded</I> data? Keep reading...
-
-<P><DT><B><A NAME="item:How_do_I_get_the_encoded_body_data">How do I get the "encoded" body data?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-Use the body() method.
-
-
-<P><B>MIME::Entity:</B>
-Use the body() method. You can also use:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $entity->print_body()
- $entity->stringify_body() ### a.k.a. $entity->body_as_string()
-</PRE></FONT>
-<P><DT><B><A NAME="item:How_do_I_get_the_unencoded_body_data">How do I get the "unencoded" body data?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-Use the body() method.
-
-
-<P><B>MIME::Entity:</B>
-Use the <I>bodyhandle()</I> method!
-If bodyhandle() method returns true, then that value is a
-<A HREF="../MIME/Body.pm.html">MIME::Body</A> which can be used to access the data via
-its open() method. If bodyhandle() method returns an undefined value,
-then the entity is probably a "container" that has no real body data of
-its own (e.g., a "multipart" message): in this case, you should access
-the components via the parts() method. Like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- if ($bh = $entity->bodyhandle) {
- $io = $bh->open;
- ...access unencoded data via $io->getline or $io->read...
- $io->close;
- }
- else {
- foreach my $part (@parts) {
- ...do something with the part...
- }
- }
-</PRE></FONT>
-
-<P>You can also use:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- if ($bh = $entity->bodyhandle) {
- $unencoded_data = $bh->as_string;
- }
- else {
- ...do stuff with the parts...
- }
-</PRE></FONT>
-<P><DT><B><A NAME="item:What_does_the_body_method_return">What does the body() method return?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-The transport-encoded message body, as an array of lines.
-
-
-<P><B>MIME::Entity:</B>
-The transport-encoded message body, as an array of lines.
-
-<P><DT><B><A NAME="item:What_does_print_body_print">What does print_body() print?</A></B></DT>
-<DD>
-<B>Mail::Internet:</B>
-Exactly what body() would return to you.
-
-
-<P><B>MIME::Entity:</B>
-Exactly what body() would return to you.
-
-
-<P>=item Say I have an entity which might be either singlepart or multipart.
- How do I print out just "the stuff after the header"?
-
-
-<P><B>Mail::Internet:</B>
-Use print_body().
-
-
-<P><B>MIME::Entity:</B>
-Use print_body().
-
-<P><DT><B><A NAME="item:Why_is_MIME_Entity_so_different_from_Mail_Internet">Why is MIME::Entity so different from Mail::Internet?</A></B></DT>
-<DD>
-Because MIME streams are expected to have non-textual data...
-possibly, quite a lot of it, such as a tar file.
-
-
-<P>Because MIME messages can consist of multiple parts, which are most-easily
-manipulated as MIME::Entity objects themselves.
-
-
-<P>Because in the simpler world of Mail::Internet, the data of a message
-and its printed representation are <I>identical</I>... and in the MIME
-world, they're not.
-
-
-<P>Because parsing multipart bodies on-the-fly, or formatting multipart
-bodies for output, is a non-trivial task.
-
-<P><DT><B><A NAME="item:This_is_confusing_Can_the_two_classes_be_made_more_compatible">This is confusing. Can the two classes be made more compatible?</A></B></DT>
-<DD>
-Not easily; their implementations are necessarily quite different.
-Mail::Internet is a simple, efficient way of dealing with a "black box"
-mail message... one whose internal data you don't care much about.
-MIME::Entity, in contrast, cares <I>very much</I> about the message contents:
-that's its job!
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Design_issues"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Design issues</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Some_things_just_can_t_be_ignored">Some things just can't be ignored</A></B></DT>
-<DD>
-In multipart messages, the <I>"preamble"</I> is the portion that precedes
-the first encapsulation boundary, and the <I>"epilogue"</I> is the portion
-that follows the last encapsulation boundary.
-
-
-<P>According to RFC-1521:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- There appears to be room for additional information prior
- to the first encapsulation boundary and following the final
- boundary. These areas should generally be left blank, and
- implementations must ignore anything that appears before the
- first boundary or after the last one.
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- NOTE: These "preamble" and "epilogue" areas are generally
- not used because of the lack of proper typing of these parts
- and the lack of clear semantics for handling these areas at
- gateways, particularly X.400 gateways. However, rather than
- leaving the preamble area blank, many MIME implementations
- have found this to be a convenient place to insert an
- explanatory note for recipients who read the message with
- pre-MIME software, since such notes will be ignored by
- MIME-compliant software.
-</PRE></FONT>
-
-<P>In the world of standards-and-practices, that's the standard.
-Now for the practice:
-
-
-<P><I>Some "MIME" mailers may incorrectly put a "part" in the preamble</I>.
-Since we have to parse over the stuff <I>anyway</I>, in the future I
-<I>may</I> allow the parser option of creating special MIME::Entity objects
-for the preamble and epilogue, with bogus MIME::Head objects.
-
-
-<P>For now, though, we're MIME-compliant, so I probably won't change
-how we work.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:53 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ConTraEnc.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ConTraEnc.pm.html
deleted file mode 100644
index 4460503..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ConTraEnc.pm.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Field::ConTraEnc</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Field::ConTraEnc</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Field::ConTraEnc - a "Content-transfer-encoding" field
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A subclass of Mail::Field.
-
-
-<P><I>Don't use this class directly... its name may change in the future!</I>
-Instead, ask Mail::Field for new instances based on the field name!
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use Mail::Field;
- use MIME::Head;
-
- # Create an instance from some text:
- $field = Mail::Field->new('Content-transfer-encoding', '7bit');
-
- # Get the encoding.
- # Possible values: 'binary', '7bit', '8bit', 'quoted-printable',
- # 'base64' and '' (unspecified). Note that there can't be a
- # single default for this, since it depends on the content type!
- $encoding = $field->encoding;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:11:57 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContDisp.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContDisp.pm.html
deleted file mode 100644
index 6ae9ee3..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContDisp.pm.html
+++ /dev/null
@@ -1,66 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Field::ContDisp</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Field::ContDisp</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Field::ContDisp - a "Content-disposition" field
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A subclass of Mail::Field.
-
-
-<P><I>Don't use this class directly... its name may change in the future!</I>
-Instead, ask Mail::Field for new instances based on the field name!
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use Mail::Field;
- use MIME::Head;
-
- # Create an instance from some text:
- $field = Mail::Field->new('Content-disposition', $text);
-
- # Inline or attachment?
- $type = $field->type;
-
- # Recommended filename?
- $filename = $field->filename;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:00 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContType.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContType.pm.html
deleted file mode 100644
index d4a1c88..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ContType.pm.html
+++ /dev/null
@@ -1,167 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Field::ContType</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Field::ContType</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<LI> <A HREF="#NOTES">NOTES</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Field::ContType - a "Content-type" field
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A subclass of Mail::Field.
-
-
-<P><I>Don't use this class directly... its name may change in the future!</I>
-Instead, ask Mail::Field for new instances based on the field name!
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use Mail::Field;
- use MIME::Head;
-
- # Create an instance from some text:
- $field = Mail::Field->new('Content-type',
- 'text/HTML; charset="US-ASCII"');
-
- # Get the MIME type, like 'text/plain' or 'x-foobar'.
- # Returns 'text/plain' as default, as per RFC-1521:
- my ($type, $subtype) = split('/', $field->type);
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- # Get generic information:
- print $field->name;
-
- # Get information related to "message" type:
- if ($type eq 'message') {
- print $field->id;
- print $field->number;
- print $field->total;
- }
-
- # Get information related to "multipart" type:
- if ($type eq 'multipart') {
- print $field->boundary; # the basic value, fixed up
- print $field->multipart_boundary; # empty if not a multipart message!
- }
-
- # Get information related to "text" type:
- if ($type eq 'text') {
- print $field->charset; # returns 'us-ascii' as default
- }
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:boundary">boundary</A></B></DT>
-<DD>
-Return the boundary field. The boundary is returned exactly
-as given in the <CODE>Content-type:</CODE> field; that is, the leading
-double-hyphen (<CODE>--</CODE>) is <I>not</I> prepended.
-
-
-<P>(Well, <I>almost</I> exactly... from RFC-1521:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- (If a boundary appears to end with white space, the white space
- must be presumed to have been added by a gateway, and must be deleted.)
-</PRE></FONT>
-
-<P>so we oblige and remove any trailing spaces.)
-
-
-<P>Returns the empty string if there is no boundary, or if the boundary is
-illegal (e.g., if it is empty after all trailing whitespace has been
-removed).
-
-<P><DT><B><A NAME="item:multipart_boundary">multipart_boundary</A></B></DT>
-<DD>
-Like <CODE>boundary()</CODE>, except that this will also return the empty
-string if the message is not a multipart message. In other words,
-there's an automatic sanity check.
-
-<P><DT><B><A NAME="item:type">type</A></B></DT>
-<DD>
-Try real hard to determine the content type (e.g., <CODE>"text/plain"</CODE>,
-<CODE>"image/gif"</CODE>, <CODE>"x-weird-type"</CODE>, which is returned
-in all-lowercase.
-
-
-<P>A happy thing: the following code will work just as you would want,
-even if there's no subtype (as in <CODE>"x-weird-type"</CODE>)... in such a case,
-the $subtype would simply be the empty string:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ($type, $subtype) = split('/', $head->mime_type);
-</PRE></FONT>
-
-<P>If the content-type information is missing, it defaults to <CODE>"text/plain"</CODE>,
-as per RFC-1521:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Default RFC-822 messages are typed by this protocol as plain text in
- the US-ASCII character set, which can be explicitly specified as
- "Content-type: text/plain; charset=us-ascii". If no Content-Type is
- specified, this default is assumed.
-</PRE></FONT>
-
-<P><B>Note:</B> under the "be liberal in what we accept" principle, this routine
-no longer syntax-checks the content type. If it ain't empty,
-just downcase and return it.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-<P>Since nearly all (if not all) parameters must have non-empty values
-to be considered valid, we just return the empty string to signify
-missing fields. If you need to get the <I>real</I> underlying value,
-use the inherited <CODE>param()</CODE> method (which returns undef if the
-parameter is missing).
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:03 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ParamVal.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ParamVal.pm.html
deleted file mode 100644
index 8c1daf6..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/ParamVal.pm.html
+++ /dev/null
@@ -1,181 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Field::ParamVal</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Field::ParamVal</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Field::ParamVal - subclass of Mail::Field, for structured MIME fields
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- # Create an object for a content-type field:
- $field = new Mail::Field 'Content-type';
-
- # Set some attributes:
- $field->param('_' => 'text/html');
- $field->param('charset' => 'us-ascii');
- $field->param('boundary' => '---ABC---');
-
- # Same:
- $field->set('_' => 'text/html',
- 'charset' => 'us-ascii',
- 'boundary' => '---ABC---');
-
- # Get an attribute, or undefined if not present:
- print "no id!" if defined($field->param('id'));
-
- # Same, but use empty string for missing values:
- print "no id!" if ($field->paramstr('id') eq '');
-
- # Output as string:
- print $field->stringify, "\n";
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This is an abstract superclass of most MIME fields. It handles
-fields with a general syntax like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-Type: Message/Partial;
- number=2; total=3;
- id="oc=jpbe0M2Yt4s(a)thumper.bellcore.com"
-</PRE></FONT>
-
-<P>Comments are supported <I>between</I> items, like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-Type: Message/Partial; (a comment)
- number=2 (another comment) ; (yet another comment) total=3;
- id="oc=jpbe0M2Yt4s(a)thumper.bellcore.com"
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:set">set [\%PARAMHASH | KEY=>VAL,...,KEY=>VAL]</A></B></DT>
-<DD>
-<I>Instance method.</I> Set this field.
-The paramhash should contain parameter names
-in <I>all lowercase</I>, with the special <CODE>"_"</CODE> parameter name
-signifying the "default" (unnamed) parameter for the field:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- # Set up to be...
- #
- # Content-type: Message/Partial; number=2; total=3; id="ocj=pbe0M2"
- #
- $conttype->set('_' => 'Message/Partial',
- 'number' => 2,
- 'total' => 3,
- 'id' => "ocj=pbe0M2");
-</PRE></FONT>
-
-<P>Note that a single argument is taken to be a <I>reference</I> to
-a paramhash, while multiple args are taken to be the elements
-of the paramhash themselves.
-
-
-<P>Supplying undef for a hashref, or an empty set of values, effectively
-clears the object.
-
-
-<P>The self object is returned.
-
-<P><DT><B><A NAME="item:parse_params">parse_params STRING</A></B></DT>
-<DD>
-<I>Class/instance utility method.</I>
-Extract parameter info from a structured field, and return
-it as a hash reference. For example, here is a field with parameters:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-Type: Message/Partial;
- number=2; total=3;
- id="oc=jpbe0M2Yt4s(a)thumper.bellcore.com"
-</PRE></FONT>
-
-<P>Here is how you'd extract them:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $params = $class->parse_params('content-type');
- if ($$params{'_'} eq 'message/partial') {
- $number = $$params{'number'};
- $total = $$params{'total'};
- $id = $$params{'id'};
- }
-</PRE></FONT>
-
-<P>Like field names, parameter names are coerced to lowercase.
-The special '_' parameter means the default parameter for the
-field.
-
-
-<P><B>NOTE:</B> This has been provided as a public method to support backwards
-compatibility, but you probably shouldn't use it.
-
-<P><DT><B><A NAME="item:parse">parse STRING</A></B></DT>
-<DD>
-<I>Class/instance method.</I>
-Parse the string into the instance. Any previous information is wiped.
-The self object is returned.
-
-
-<P>May also be used as a constructor.
-
-<P><DT><B><A NAME="item:param">param PARAMNAME,[VALUE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the given parameter, or undef if it isn't there.
-With argument, set the parameter to that VALUE.
-The PARAMNAME is case-insensitive. A "_" refers to the "default" parameter.
-
-<P><DT><B><A NAME="item:paramstr">paramstr PARAMNAME,[VALUE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Like param(): return the given parameter, or <I>empty</I> if it isn't there.
-With argument, set the parameter to that VALUE.
-The PARAMNAME is case-insensitive. A "_" refers to the "default" parameter.
-
-<P><DT><B><A NAME="item:stringify">stringify</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Convert the field to a string, and return it.
-
-<P><DT><B><A NAME="item:tag">tag</A></B></DT>
-<DD>
-<I>Instance method, abstract.</I>
-Return the tag for this field.
-
-</DL>
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:07 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/h1bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/h1bullet.gif
deleted file mode 100644
index 8698643..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/h1bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/h2bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/h2bullet.gif
deleted file mode 100644
index d26510c..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/h2bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/zeegee.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/zeegee.gif
deleted file mode 100644
index f6001a5..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Field/icons/zeegee.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Head.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Head.pm.html
deleted file mode 100644
index a0d1808..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Head.pm.html
+++ /dev/null
@@ -1,709 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Head</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Head</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<UL>
-<LI> <A HREF="#Construction">Construction</A>
-<LI> <A HREF="#Output">Output</A>
-<LI> <A HREF="#Getting_field_contents">Getting field contents</A>
-<LI> <A HREF="#Setting_field_contents">Setting field contents</A>
-<LI> <A HREF="#Manipulating_field_contents">Manipulating field contents</A>
-<LI> <A HREF="#Getting_high-level_MIME_information">Getting high-level MIME information</A>
-</UL>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<UL>
-<LI> <A HREF="#Creation_input_and_output">Creation, input, and output</A>
-<LI> <A HREF="#Getting_setting_fields">Getting/setting fields</A>
-<LI> <A HREF="#MIME-specific_methods">MIME-specific methods</A>
-</UL>
-<LI> <A HREF="#NOTES">NOTES</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Head - MIME message header (a subclass of Mail::Header)
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../MIME/Tools.pm.html">MIME::Tools</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok...
-
-
-
-<P><HR>
-<A NAME="Construction"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Construction</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a new, empty header, and populate it manually:
- $head = MIME::Head->new;
- $head->replace('content-type', 'text/plain; charset=US-ASCII');
- $head->replace('content-length', $len);
-
- ### Parse a new header from a filehandle:
- $head = MIME::Head->read(\*STDIN);
-
- ### Parse a new header from a file, or a readable pipe:
- $testhead = MIME::Head->from_file("/tmp/test.hdr");
- $a_b_head = MIME::Head->from_file("cat a.hdr b.hdr |");
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Output"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Output</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Output to filehandle:
- $head->print(\*STDOUT);
-
- ### Output as string:
- print STDOUT $head->as_string;
- print STDOUT $head->stringify;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Getting_field_contents"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Getting field contents</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Is this a reply?
- $is_reply = 1 if ($head->get('Subject') =~ /^Re: /);
-
- ### Get receipt information:
- print "Last received from: ", $head->get('Received', 0), "\n";
- @all_received = $head->get('Received');
-
- ### Print the subject, or the empty string if none:
- print "Subject: ", $head->get('Subject',0), "\n";
-
- ### Too many hops? Count 'em and see!
- if ($head->count('Received') > 5) { ...
-
- ### Test whether a given field exists
- warn "missing subject!" if (! $head->count('subject'));
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Setting_field_contents"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Setting field contents</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Declare this to be an HTML header:
- $head->replace('Content-type', 'text/html');
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Manipulating_field_contents"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Manipulating field contents</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Get rid of internal newlines in fields:
- $head->unfold;
-
- ### Decode any Q- or B-encoded-text in fields (DEPRECATED):
- $head->decode;
-
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Getting_high-level_MIME_information"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Getting high-level MIME information</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Get/set a given MIME attribute:
- unless ($charset = $head->mime_attr('content-type.charset')) {
- $head->mime_attr("content-type.charset" => "US-ASCII");
- }
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### The content type (e.g., "text/html"):
- $mime_type = $head->mime_type;
-
- ### The content transfer encoding (e.g., "quoted-printable"):
- $mime_encoding = $head->mime_encoding;
-
- ### The recommended name when extracted:
- $file_name = $head->recommended_filename;
-
- ### The boundary text, for multipart messages:
- $boundary = $head->multipart_boundary;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A class for parsing in and manipulating RFC-822 message headers, with some
-methods geared towards standard (and not so standard) MIME fields as
-specified in RFC-1521, <I>Multipurpose Internet Mail Extensions</I>.
-
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<P><HR>
-<A NAME="Creation_input_and_output"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Creation, input, and output</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new [ARG],[OPTIONS]</A></B></DT>
-<DD>
-<I>Class method, inherited.</I>
-Creates a new header object. Arguments are the same as those in the
-superclass.
-
-<P><DT><B><A NAME="item:from_file">from_file EXPR,OPTIONS</A></B></DT>
-<DD>
-<I>Class or instance method</I>.
-For convenience, you can use this to parse a header object in from EXPR,
-which may actually be any expression that can be sent to open() so as to
-return a readable filehandle. The "file" will be opened, read, and then
-closed:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a new header by parsing in a file:
- my $head = MIME::Head->from_file("/tmp/test.hdr");
-</PRE></FONT>
-
-<P>Since this method can function as either a class constructor <I>or</I>
-an instance initializer, the above is exactly equivalent to:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a new header by parsing in a file:
- my $head = MIME::Head->new->from_file("/tmp/test.hdr");
-</PRE></FONT>
-
-<P>On success, the object will be returned; on failure, the undefined value.
-
-
-<P>The OPTIONS are the same as in new(), and are passed into new()
-if this is invoked as a class method.
-
-
-<P><B>Note:</B> This is really just a convenience front-end onto <CODE>read()</CODE>,
-provided mostly for backwards-compatibility with MIME-parser 1.0.
-
-<P><DT><B><A NAME="item:read">read FILEHANDLE</A></B></DT>
-<DD>
-<I>Instance (or class) method.</I>
-This initiallizes a header object by reading it in from a FILEHANDLE,
-until the terminating blank line is encountered.
-A syntax error or end-of-stream will also halt processing.
-
-
-<P>Supply this routine with a reference to a filehandle glob; e.g., <CODE>\*STDIN</CODE>:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a new header by parsing in STDIN:
- $head->read(\*STDIN);
-</PRE></FONT>
-
-<P>On success, the self object will be returned; on failure, a false value.
-
-
-<P><B>Note:</B> in the MIME world, it is perfectly legal for a header to be
-empty, consisting of nothing but the terminating blank line. Thus,
-we can't just use the formula that "no tags equals error".
-
-
-<P><B>Warning:</B> as of the time of this writing, Mail::Header::read did not flag
-either syntax errors or unexpected end-of-file conditions (an EOF
-before the terminating blank line). MIME::ParserBase takes this
-into account.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Getting_setting_fields"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Getting/setting fields</H3></A>
-
-
-<P>The following are methods related to retrieving and modifying the header
-fields. Some are inherited from Mail::Header, but I've kept the
-documentation around for convenience.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:add">add TAG,TEXT,[INDEX]</A></B></DT>
-<DD>
-<I>Instance method, inherited.</I>
-Add a new occurence of the field named TAG, given by TEXT:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Add the trace information:
- $head->add('Received',
- 'from eryq.pr.mcs.net by gonzo.net with smtp');
-</PRE></FONT>
-
-<P>Normally, the new occurence will be <I>appended</I> to the existing
-occurences. However, if the optional INDEX argument is 0, then the
-new occurence will be <I>prepended</I>. If you want to be <I>explicit</I>
-about appending, specify an INDEX of -1.
-
-
-<P><B>Warning</B>: this method always adds new occurences; it doesn't overwrite
-any existing occurences... so if you just want to <I>change</I> the value
-of a field (creating it if necessary), then you probably <B>don't</B> want to use
-this method: consider using <CODE>replace()</CODE> instead.
-
-<P><DT><B><A NAME="item:count">count TAG</A></B></DT>
-<DD>
-<I>Instance method, inherited.</I>
-Returns the number of occurences of a field; in a boolean context, this
-tells you whether a given field exists:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Was a "Subject:" field given?
- $subject_was_given = $head->count('subject');
-</PRE></FONT>
-
-<P>The TAG is treated in a case-insensitive manner.
-This method returns some false value if the field doesn't exist,
-and some true value if it does.
-
-<P><DT><B><A NAME="item:decode">decode [FORCE]</A></B></DT>
-<DD>
-<I>Instance method, DEPRECATED.</I>
-Go through all the header fields, looking for RFC-1522-style "Q"
-(quoted-printable, sort of) or "B" (base64) encoding, and decode them
-in-place. Fellow Americans, you probably don't know what the hell I'm
-talking about. Europeans, Russians, et al, you probably do. <CODE>:-)</CODE>.
-
-
-<P><B>This method has been deprecated.</B>
-See <A HREF="../MIME/Parser.pm.html#item:decode_headers">decode_headers</A> for the full reasons.
-If you absolutely must use it and don't like the warning, then
-provide a FORCE:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- "I_NEED_TO_FIX_THIS"
- Just shut up and do it. Not recommended.
- Provided only for those who need to keep old scripts functioning.
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- "I_KNOW_WHAT_I_AM_DOING"
- Just shut up and do it. Not recommended.
- Provided for those who REALLY know what they are doing.
-</PRE></FONT>
-
-<P><B>What this method does.</B>
-For an example, let's consider a valid email header you might get:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- From: =?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>
- To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>
- CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
- =?US-ASCII?Q?.._cool!?=
-</PRE></FONT>
-
-<P>That basically decodes to (sorry, I can only approximate the
-Latin characters with 7 bit sequences /o and 'e):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- From: Keith Moore <moore(a)cs.utk.edu>
- To: Keld J/orn Simonsen <keld(a)dkuug.dk>
- CC: Andr'e Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: If you can read this you understand the example... cool!
-</PRE></FONT>
-
-<P><B>Note:</B> currently, the decodings are done without regard to the
-character set: thus, the Q-encoding <CODE>=F8</CODE> is simply translated to the
-octet (hexadecimal <CODE>F8</CODE>), period. For piece-by-piece decoding
-of a given field, you want the array context of
-<CODE>MIME::Word::decode_mimewords()</CODE>.
-
-
-<P><B>Warning:</B> the CRLF+SPACE separator that splits up long encoded words
-into shorter sequences (see the Subject: example above) gets lost
-when the field is unfolded, and so decoding after unfolding causes
-a spurious space to be left in the field.
-<I>THEREFORE: if you're going to decode, do so BEFORE unfolding!</I>
-
-
-<P>This method returns the self object.
-
-
-<P><I>Thanks to Kent Boortz for providing the idea, and the baseline
-RFC-1522-decoding code.</I>
-
-<P><DT><B><A NAME="item:delete">delete TAG,[INDEX]</A></B></DT>
-<DD>
-<I>Instance method, inherited.</I>
-Delete all occurences of the field named TAG.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Remove some MIME information:
- $head->delete('MIME-Version');
- $head->delete('Content-type');
-</PRE></FONT>
-<P><DT><B><A NAME="item:get">get TAG,[INDEX]</A></B></DT>
-<DD>
-<I>Instance method, inherited.</I>
-Get the contents of field TAG.
-
-
-<P>If a <B>numeric INDEX</B> is given, returns the occurence at that index,
-or undef if not present:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Print the first and last 'Received:' entries (explicitly):
- print "First, or most recent: ", $head->get('received', 0), "\n";
- print "Last, or least recent: ", $head->get('received',-1), "\n";
-</PRE></FONT>
-
-<P>If <B>no INDEX</B> is given, but invoked in a <B>scalar</B> context, then
-INDEX simply defaults to 0:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Get the first 'Received:' entry (implicitly):
- my $most_recent = $head->get('received');
-</PRE></FONT>
-
-<P>If <B>no INDEX</B> is given, and invoked in an <B>array</B> context, then
-<I>all</I> occurences of the field are returned:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Get all 'Received:' entries:
- my @all_received = $head->get('received');
-</PRE></FONT>
-<P><DT><B><A NAME="item:get_all">get_all FIELD</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Returns the list of <I>all</I> occurences of the field, or the
-empty list if the field is not present:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### How did it get here?
- @history = $head->get_all('Received');
-</PRE></FONT>
-
-<P><B>Note:</B> I had originally experimented with having <CODE>get()</CODE> return all
-occurences when invoked in an array context... but that causes a lot of
-accidents when you get careless and do stuff like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- print "\u$field: ", $head->get($field), "\n";
-</PRE></FONT>
-
-<P>It also made the intuitive behaviour unclear if the INDEX argument
-was given in an array context. So I opted for an explicit approach
-to asking for all occurences.
-
-<P><DT><B><A NAME="item:print">print [OUTSTREAM]</A></B></DT>
-<DD>
-<I>Instance method, override.</I>
-Print the header out to the given OUTSTREAM, or the currently-selected
-filehandle if none. The OUTSTREAM may be a filehandle, or any object
-that responds to a print() message.
-
-
-<P>The override actually lets you print to any object that responds to
-a print() method. This is vital for outputting MIME entities to scalars.
-
-
-<P>Also, it defaults to the <I>currently-selected</I> filehandle if none is given
-(not STDOUT!), so <I>please</I> supply a filehandle to prevent confusion.
-
-<P><DT><B><A NAME="item:stringify">stringify</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the header as a string. You can also invoke it as <CODE>as_string</CODE>.
-
-<P><DT><B><A NAME="item:unfold">unfold [FIELD]</A></B></DT>
-<DD>
-<I>Instance method, inherited.</I>
-Unfold (remove newlines in) the text of all occurences of the given FIELD.
-If the FIELD is omitted, <I>all</I> fields are unfolded.
-Returns the "self" object.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="MIME-specific_methods"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> MIME-specific methods</H3></A>
-
-
-<P>All of the following methods extract information from the following fields:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type
- Content-transfer-encoding
- Content-disposition
-</PRE></FONT>
-
-<P>Be aware that they do not just return the raw contents of those fields,
-and in some cases they will fill in sensible (I hope) default values.
-Use <CODE>get()</CODE> or <CODE>mime_attr()</CODE> if you need to grab and process the
-raw field text.
-
-
-<P><B>Note:</B> some of these methods are provided both as a convenience and
-for backwards-compatibility only, while others (like
-recommended_filename()) <I>really do have to be in MIME::Head to work
-properly,</I> since they look for their value in more than one field.
-However, if you know that a value is restricted to a single
-field, you should really use the Mail::Field interface to get it.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:mime_attr">mime_attr ATTR,[VALUE]</A></B></DT>
-<DD>
-A quick-and-easy interface to set/get the attributes in structured
-MIME fields:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $head->mime_attr("content-type" => "text/html");
- $head->mime_attr("content-type.charset" => "US-ASCII");
- $head->mime_attr("content-type.name" => "homepage.html");
-</PRE></FONT>
-
-<P>This would cause the final output to look something like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: text/html; charset=US-ASCII; name="homepage.html"
-</PRE></FONT>
-
-<P>Note that the special empty sub-field tag indicates the anonymous
-first sub-field.
-
-
-<P><B>Giving VALUE as undefined</B> will cause the contents of the named subfield
-to be deleted:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $head->mime_attr("content-type.charset" => undef);
-</PRE></FONT>
-
-<P><B>Supplying no VALUE argument</B> just returns the attribute's value,
-or undefined if it isn't there:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $type = $head->mime_attr("content-type"); ### text/html
- $name = $head->mime_attr("content-type.name"); ### homepage.html
-</PRE></FONT>
-
-<P>In all cases, the new/current value is returned.
-
-<P><DT><B><A NAME="item:mime_encoding">mime_encoding</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Try <I>real hard</I> to determine the content transfer encoding
-(e.g., <CODE>"base64"</CODE>, <CODE>"binary"</CODE>), which is returned in all-lowercase.
-
-
-<P>If no encoding could be found, the default of <CODE>"7bit"</CODE> is returned.
-I quote from RFC-1521 section 5:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- This is the default value -- that is, "Content-Transfer-Encoding: 7BIT"
- is assumed if the Content-Transfer-Encoding header field is not present.
-</PRE></FONT>
-<P><DT><B><A NAME="item:mime_type">mime_type [DEFAULT]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Try <CODE>real hard</CODE> to determine the content type (e.g., <CODE>"text/plain"</CODE>,
-<CODE>"image/gif"</CODE>, <CODE>"x-weird-type"</CODE>, which is returned in all-lowercase.
-"Real hard" means that if no content type could be found, the default
-(usually <CODE>"text/plain"</CODE>) is returned. From RFC-1521 section 7.1:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- The default Content-Type for Internet mail is
- "text/plain; charset=us-ascii".
-</PRE></FONT>
-
-<P>Unless this is a part of a "multipart/digest", in which case
-"message/rfc822" is the default. Note that you can also <I>set</I> the
-default, but you shouldn't: normally only the MIME parser uses this
-feature.
-
-<P><DT><B><A NAME="item:multipart_boundary">multipart_boundary</A></B></DT>
-<DD>
-<I>Instance method.</I>
-If this is a header for a multipart message, return the
-"encapsulation boundary" used to separate the parts. The boundary
-is returned exactly as given in the <CODE>Content-type:</CODE> field; that
-is, the leading double-hyphen (<CODE>--</CODE>) is <I>not</I> prepended.
-
-
-<P>Well, <I>almost</I> exactly... this passage from RFC-1521 dictates
-that we remove any trailing spaces:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- If a boundary appears to end with white space, the white space
- must be presumed to have been added by a gateway, and must be deleted.
-</PRE></FONT>
-
-<P>Returns undef (<B>not</B> the empty string) if either the message is not
-multipart, if there is no specified boundary, or if the boundary is
-illegal (e.g., if it is empty after all trailing whitespace has been
-removed).
-
-<P><DT><B><A NAME="item:recommended_filename">recommended_filename</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the recommended external filename. This is used when
-extracting the data from the MIME stream.
-
-
-<P>Returns undef if no filename could be suggested.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Why_have_separate_objects_for_the_entity_head_and_body">Why have separate objects for the entity, head, and body?</A></B></DT>
-<DD>
-See the documentation for the MIME-tools distribution
-for the rationale behind this decision.
-
-<P><DT><B><A NAME="item:Why_assume_that_MIME_headers_are_email_headers">Why assume that MIME headers are email headers?</A></B></DT>
-<DD>
-I quote from Achim Bohnet, who gave feedback on v.1.9 (I think
-he's using the word "header" where I would use "field"; e.g.,
-to refer to "Subject:", "Content-type:", etc.):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- There is also IMHO no requirement [for] MIME::Heads to look
- like [email] headers; so to speak, the MIME::Head [simply stores]
- the attributes of a complex object, e.g.:
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- new MIME::Head type => "text/plain",
- charset => ...,
- disposition => ..., ... ;
-</PRE></FONT>
-
-<P>I agree in principle, but (alas and dammit) RFC-1521 says otherwise.
-RFC-1521 [MIME] headers are a syntactic subset of RFC-822 [email] headers.
-Perhaps a better name for these modules would be RFC1521:: instead of
-MIME::, but we're a little beyond that stage now.
-
-
-<P>In my mind's eye, I see an abstract class, call it MIME::Attrs, which does
-what Achim suggests... so you could say:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $attrs = new MIME::Attrs type => "text/plain",
- charset => ...,
- disposition => ..., ... ;
-</PRE></FONT>
-
-<P>We could even make it a superclass of MIME::Head: that way, MIME::Head
-would have to implement its interface, <I>and</I> allow itself to be
-initiallized from a MIME::Attrs object.
-
-
-<P>However, when you read RFC-1521, you begin to see how much MIME information
-is organized by its presence in particular fields. I imagine that we'd
-begin to mirror the structure of RFC-1521 fields and subfields to such
-a degree that this might not give us a tremendous gain over just
-having MIME::Head.
-
-<P><DT><B><A NAME="item:Why_all_this_occurence_and_index_jazz_Isn_t_every_field_unique">Why all this "occurence" and "index" jazz? Isn't every field unique?</A></B></DT>
-<DD>
-Aaaaaaaaaahh....no.
-
-
-<P>Looking at a typical mail message header, it is sooooooo tempting to just
-store the fields as a hash of strings, one string per hash entry.
-Unfortunately, there's the little matter of the <CODE>Received:</CODE> field,
-which (unlike <CODE>From:</CODE>, <CODE>To:</CODE>, etc.) will often have multiple
-occurences; e.g.:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Received: from gsfc.nasa.gov by eryq.pr.mcs.net with smtp
- (Linux Smail3.1.28.1 #5) id m0tStZ7-0007X4C;
- Thu, 21 Dec 95 16:34 CST
- Received: from rhine.gsfc.nasa.gov by gsfc.nasa.gov
- (5.65/Ultrix3.0-C) id AA13596;
- Thu, 21 Dec 95 17:20:38 -0500
- Received: (from eryq@localhost) by rhine.gsfc.nasa.gov
- (8.6.12/8.6.12) id RAA28069;
- Thu, 21 Dec 1995 17:27:54 -0500
- Date: Thu, 21 Dec 1995 17:27:54 -0500
- From: Eryq <eryq(a)rhine.gsfc.nasa.gov>
- Message-Id: <199512212227.RAA28069(a)rhine.gsfc.nasa.gov>
- To: eryq(a)eryq.pr.mcs.net
- Subject: Stuff and things
-</PRE></FONT>
-
-<P>The <CODE>Received:</CODE> field is used for tracing message routes, and although
-it's not generally used for anything other than human debugging, I
-didn't want to inconvenience anyone who actually wanted to get at that
-information.
-
-
-<P>I also didn't want to make this a special case; after all, who
-knows what other fields could have multiple occurences in the
-future? So, clearly, multiple entries had to somehow be stored
-multiple times... and the different occurences had to be retrievable.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-<P>The more-comprehensive filename extraction is courtesy of
-Lee E. Brotzman, Advanced Data Solutions.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:11 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser.pm.html
deleted file mode 100644
index b0a4d82..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser.pm.html
+++ /dev/null
@@ -1,1051 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Parser</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Parser</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<UL>
-<LI> <A HREF="#Basic_usage_examples">Basic usage examples</A>
-<LI> <A HREF="#Examples_of_input">Examples of input</A>
-<LI> <A HREF="#Examples_of_output_control">Examples of output control</A>
-<LI> <A HREF="#Examples_of_error_recovery">Examples of error recovery</A>
-<LI> <A HREF="#Examples_of_parser_options">Examples of parser options</A>
-<LI> <A HREF="#Miscellaneous_examples">Miscellaneous examples</A>
-</UL>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<UL>
-<LI> <A HREF="#Construction">Construction</A>
-<LI> <A HREF="#Altering_how_messages_are_parsed">Altering how messages are parsed</A>
-<LI> <A HREF="#Parsing_an_input_source">Parsing an input source</A>
-<LI> <A HREF="#Specifying_output_destination">Specifying output destination</A>
-<LI> <A HREF="#Specifying_classes_to_be_instantiated">Specifying classes to be instantiated</A>
-<LI> <A HREF="#Parse_results_and_error_recovery">Parse results and error recovery</A>
-</UL>
-<LI> <A HREF="#OPTIMIZING_YOUR_PARSER">OPTIMIZING YOUR PARSER</A>
-<UL>
-<LI> <A HREF="#Maximizing_speed">Maximizing speed</A>
-<LI> <A HREF="#Minimizing_memory">Minimizing memory</A>
-<LI> <A HREF="#Maximizing_tolerance_of_bad_MIME">Maximizing tolerance of bad MIME</A>
-<LI> <A HREF="#Avoiding_disk-based_temporary_files">Avoiding disk-based temporary files</A>
-</UL>
-<LI> <A HREF="#WARNINGS">WARNINGS</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Parser - experimental class for parsing MIME streams
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../MIME/Tools.pm.html">MIME::Tools</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok...
-
-
-
-<P><HR>
-<A NAME="Basic_usage_examples"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Basic usage examples</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a new parser object:
- my $parser = new MIME::Parser;
-
- ### Tell it where to put things:
- $parser->output_under("/tmp");
-
- ### Parse an input filehandle:
- $entity = $parser->parse(\*STDIN);
-
- ### Congratulations: you now have a (possibly multipart) MIME entity!
- $entity->dump_skeleton; # for debugging
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Examples_of_input"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Examples of input</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Parse from filehandles:
- $entity = $parser->parse(\*STDIN);
- $entity = $parser->parse(IO::File->new("some command|");
-
- ### Parse from any object that supports getline() and read():
- $entity = $parser->parse($myHandle);
-
- ### Parse an in-core MIME message:
- $entity = $parser->parse_data($message);
-
- ### Parse an MIME message in a file:
- $entity = $parser->parse_open("/some/file.msg");
-
- ### Parse an MIME message out of a pipeline:
- $entity = $parser->parse_open("gunzip - < file.msg.gz |");
-
- ### Parse already-split input (as "deliver" would give it to you):
- $entity = $parser->parse_two("msg.head", "msg.body");
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Examples_of_output_control"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Examples of output control</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Keep parsed message bodies in core (default outputs to disk):
- $parser->output_to_core(1);
-
- ### Output each message body to a one-per-message directory:
- $parser->output_under("/tmp");
-
- ### Output each message body to the same directory:
- $parser->output_dir("/tmp");
-
- ### Change how nameless message-component files are named:
- $parser->output_prefix("msg");
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Examples_of_error_recovery"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Examples of error recovery</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Normal mechanism:
- eval { $entity = $parser->parse(\*STDIN) };
- if ($@) {
- $results = $parser->results;
- $decapitated = $parser->last_head; ### get last top-level head
- }
-
- ### Ultra-tolerant mechanism:
- $parser->ignore_errors(1);
- $entity = eval { $parser->parse(\*STDIN) };
- $error = ($@ || $parser->last_error);
-
- ### Cleanup all files created by the parse:
- eval { $entity = $parser->parse(\*STDIN) };
- ...
- $parser->filer->purge;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Examples_of_parser_options"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Examples of parser options</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Automatically attempt to RFC-1522-decode the MIME headers?
- $parser->decode_headers(1); ### default is false
-
- ### Parse contained "message/rfc822" objects as nested MIME streams?
- $parser->extract_nested_messages(0); ### default is true
-
- ### Look for uuencode in "text" messages, and extract it?
- $parser->extract_uuencode(1); ### default is false
-
- ### Should we forgive normally-fatal errors?
- $parser->ignore_errors(0); ### default is true
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Miscellaneous_examples"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Miscellaneous examples</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Convert a Mail::Internet object to a MIME::Entity:
- @lines = (@{$mail->header}, "\n", @{$mail->body});
- $entity = $parser->parse_data(\@lines);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>You can inherit from this class to create your own subclasses
-that parse MIME streams into MIME::Entity objects.
-
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<P><HR>
-<A NAME="Construction"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Construction</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new ARGS...</A></B></DT>
-<DD>
-<I>Class method.</I>
-Create a new parser object.
-Once you do this, you can then set up various parameters
-before doing the actual parsing. For example:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- my $parser = new MIME::Parser;
- $parser->output_dir("/tmp");
- $parser->output_prefix("msg1");
- my $entity = $parser->parse(\*STDIN);
-</PRE></FONT>
-
-<P>Any arguments are passed into <CODE>init()</CODE>.
-Don't override this in your subclasses; override init() instead.
-
-<P><DT><B><A NAME="item:init">init ARGS...</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Initiallize a new MIME::Parser object.
-This is automatically sent to a new object; you may want to override it.
-If you override this, be sure to invoke the inherited method.
-
-<P><DT><B><A NAME="item:init_parse">init_parse</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Invoked automatically whenever one of the top-level parse() methods
-is called, to reset the parser to a "ready" state.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Altering_how_messages_are_parsed"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Altering how messages are parsed</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:decode_headers">decode_headers [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Controls whether the parser will attempt to decode all the MIME headers
-(as per RFC-1522) the moment it sees them. <B>This is not advisable
-for two very important reasons:</B>
-
-
-
-<UL>
-<P><LI>
-<P><B>It screws up the extraction of information from MIME fields.</B>
-If you fully decode the headers into bytes, you can inadvertently
-transform a parseable MIME header like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: text/plain; filename="=?ISO-8859-1?Q?Hi=22Ho?="
-</PRE></FONT>
-
-<P>into unparseable gobbledygook; in this case:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: text/plain; filename="Hi"Ho"
-</PRE></FONT>
-<P><LI>
-<P><B>It is information-lossy.</B> An encoded string which contains
-both Latin-1 and Cyrillic characters will be turned into a binary
-mishmosh which simply can't be rendered.
-
-</UL>
-
-
-<P><B>History.</B>
-This method was once the only out-of-the-box way to deal with attachments
-whose filenames had non-ASCII characters. However, since MIME-tools 5.4xx
-this is no longer necessary.
-
-
-<P><B>Parameters.</B>
-If YESNO is true, decoding is done. However, you will get a warning
-unless you use one of the special "true" values:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- "I_NEED_TO_FIX_THIS"
- Just shut up and do it. Not recommended.
- Provided only for those who need to keep old scripts functioning.
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- "I_KNOW_WHAT_I_AM_DOING"
- Just shut up and do it. Not recommended.
- Provided for those who REALLY know what they are doing.
-</PRE></FONT>
-
-<P>If YESNO is false (the default), no attempt at decoding will be done.
-With no argument, just returns the current setting.
-<B>Remember:</B> you can always decode the headers <I>after</I> the parsing
-has completed (see <A HREF="../MIME/Head.pm.html#item:decode">MIME::Head::decode()</A>), or
-decode the words on demand (see <A HREF="../MIME/Words.pm.html">MIME::Words</A>).
-
-<P><DT><B><A NAME="item:extract_nested_messages">extract_nested_messages OPTION</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Some MIME messages will contain a part of type <CODE>message/rfc822</CODE>:
-literally, the text of an embedded mail/news/whatever message.
-This option controls whether (and how) we parse that embedded message.
-
-
-<P>If the OPTION is false, we treat such a message just as if it were a
-<CODE>text/plain</CODE> document, without attempting to decode its contents.
-
-
-<P>If the OPTION is true (the default), the body of the <CODE>message/rfc822</CODE>
-part is parsed by this parser, creating an entity object.
-What happens then is determined by the actual OPTION:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:NEST_or_1">NEST or 1</A></B></DT>
-<DD>
-The default setting.
-The contained message becomes the sole "part" of the <CODE>message/rfc822</CODE>
-entity (as if the containing message were a special kind of
-"multipart" message).
-You can recover the sub-entity by invoking the <A HREF="../MIME/Entity.pm.html#item:parts">parts()</A>
-method on the <CODE>message/rfc822</CODE> entity.
-
-<P><DT><B><A NAME="item:REPLACE">REPLACE</A></B></DT>
-<DD>
-The contained message replaces the <CODE>message/rfc822</CODE> entity, as though
-the <CODE>message/rfc822</CODE> "container" never existed.
-
-
-<P><B>Warning:</B> notice that, with this option, all the header information
-in the <CODE>message/rfc822</CODE> header is lost. This might seriously bother
-you if you're dealing with a top-level message, and you've just lost
-the sender's address and the subject line. <CODE>:-/</CODE>.
-
-</DL>
-
-
-<P><I>Thanks to Andreas Koenig for suggesting this method.</I>
-
-<P><DT><B><A NAME="item:extract_uuencode">extract_uuencode [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-If set true, then whenever we are confronted with a message
-whose effective content-type is "text/plain" and whose encoding
-is 7bit/8bit/binary, we scan the encoded body to see if it contains
-uuencoded data (generally given away by a "begin XXX" line).
-
-
-<P>If it does, we explode the uuencoded message into a multipart,
-where the text before the first "begin XXX" becomes the first part,
-and all "begin...end" sections following become the subsequent parts.
-The filename (if given) is accessible through the normal means.
-
-<P><DT><B><A NAME="item:ignore_errors">ignore_errors [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Controls whether the parser will attempt to ignore normally-fatal
-errors, treating them as warnings and continuing with the parse.
-
-
-<P>If YESNO is true (the default), many syntax errors are tolerated.
-If YESNO is false, fatal errors throw exceptions.
-With no argument, just returns the current setting.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Parsing_an_input_source"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Parsing an input source</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:parse_data">parse_data DATA</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Parse a MIME message that's already in core.
-You may supply the DATA in any of a number of ways...
-
-
-
-<UL>
-<P><LI>
-<P><B>A scalar</B> which holds the message.
-
-<P><LI>
-<P><B>A ref to a scalar</B> which holds the message. This is an efficiency hack.
-
-<P><LI>
-<P><B>A ref to an array of scalars.</B> They are treated as a stream
-which (conceptually) consists of simply concatenating the scalars.
-
-</UL>
-
-
-<P>Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-<P><DT><B><A NAME="item:parse">parse INSTREAM</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Takes a MIME-stream and splits it into its component entities.
-
-
-<P>The INSTREAM can be given as a readable FileHandle, an IO::File,
-a globref filehandle (like <CODE>\*STDIN</CODE>),
-or as <I>any</I> blessed object conforming to the IO:: interface
-(which minimally implements getline() and read()).
-
-
-<P>Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-<P><DT><B><A NAME="item:parse_open">parse_open EXPR</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Convenience front-end onto <CODE>parse()</CODE>.
-Simply give this method any expression that may be sent as the second
-argument to open() to open a filehandle for reading.
-
-
-<P>Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-<P><DT><B><A NAME="item:parse_two">parse_two HEADFILE, BODYFILE</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Convenience front-end onto <CODE>parse_open()</CODE>, intended for programs
-running under mail-handlers like <B>deliver</B>, which splits the incoming
-mail message into a header file and a body file.
-Simply give this method the paths to the respective files.
-
-
-<P><B>Warning:</B> it is assumed that, once the files are cat'ed together,
-there will be a blank line separating the head part and the body part.
-
-
-<P><B>Warning:</B> new implementation slurps files into line array
-for portability, instead of using 'cat'. May be an issue if
-your messages are large.
-
-
-<P>Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Specifying_output_destination"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Specifying output destination</H3></A>
-
-
-<P><B>Warning:</B> in 5.212 and before, this was done by methods
-of MIME::Parser. However, since many users have requested
-fine-tuned control over how this is done, the logic has been split
-off from the parser into its own class, MIME::Parser::Filer
-Every MIME::Parser maintains an instance of a MIME::Parser::Filer
-subclass to manage disk output (see <A HREF="../MIME/Parser/Filer.pm.html">MIME::Parser::Filer</A> for details.)
-
-
-<P>The benefit to this is that the MIME::Parser code won't be
-confounded with a lot of garbage related to disk output.
-The drawback is that the way you override the default behavior
-will change.
-
-
-<P>For now, all the normal public-interface methods are still provided,
-but many are only stubs which create or delegate to the underlying
-MIME::Parser::Filer object.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:filer">filer [FILER]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get/set the FILER object used to manage the output of files to disk.
-This will be some subclass of <A HREF="../MIME/Parser/Filer.pm.html">MIME::Parser::Filer</A>.
-
-<P><DT><B><A NAME="item:output_dir">output_dir DIRECTORY</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Causes messages to be filed directly into the given DIRECTORY.
-It does this by setting the underlying <A HREF="#item:filer">filer()</A> to
-a new instance of MIME::Parser::FileInto, and passing the arguments
-into that class' new() method.
-
-
-<P><B>Note:</B> Since this method replaces the underlying
-filer, you must invoke it <I>before</I> doing changing any attributes
-of the filer, like the output prefix; otherwise those changes
-will be lost.
-
-<P><DT><B><A NAME="item:output_under">output_under BASEDIR, OPTS...</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Causes messages to be filed directly into subdirectories of the given
-BASEDIR, one subdirectory per message. It does this by setting the
-underlying <A HREF="#item:filer">filer()</A> to a new instance of MIME::Parser::FileUnder,
-and passing the arguments into that class' new() method.
-
-
-<P><B>Note:</B> Since this method replaces the underlying
-filer, you must invoke it <I>before</I> doing changing any attributes
-of the filer, like the output prefix; otherwise those changes
-will be lost.
-
-<P><DT><B><A NAME="item:output_path">output_path HEAD</A></B></DT>
-<DD>
-<I>Instance method, DEPRECATED.</I>
-Given a MIME head for a file to be extracted, come up with a good
-output pathname for the extracted file.
-Identical to the preferred form:
-
- $parser->filer->output_path(...args...);
-
-
-<P>We just delegate this to the underlying <A HREF="#item:filer">filer()</A> object.
-
-<P><DT><B><A NAME="item:output_prefix">output_prefix [PREFIX]</A></B></DT>
-<DD>
-<I>Instance method, DEPRECATED.</I>
-Get/set the short string that all filenames for extracted body-parts
-will begin with (assuming that there is no better "recommended filename").
-Identical to the preferred form:
-
- $parser->filer->output_prefix(...args...);
-
-
-<P>We just delegate this to the underlying <A HREF="#item:filer">filer()</A> object.
-
-<P><DT><B><A NAME="item:evil_filename">evil_filename NAME</A></B></DT>
-<DD>
-<I>Instance method, DEPRECATED.</I>
-Identical to the preferred form:
-
- $parser->filer->evil_filename(...args...);
-
-
-<P>We just delegate this to the underlying <A HREF="#item:filer">filer()</A> object.
-
-<P><DT><B><A NAME="item:output_to_core">output_to_core YESNO</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Normally, instances of this class output all their decoded body
-data to disk files (via MIME::Body::File). However, you can change
-this behaviour by invoking this method before parsing:
-
-
-<P>If YESNO is false (the default), then all body data goes
-to disk files.
-
-
-<P>If YESNO is true, then all body data goes to in-core data structures
-This is a little risky (what if someone emails you an MPEG or a tar
-file, hmmm?) but people seem to want this bit of noose-shaped rope,
-so I'm providing it.
-Note that setting this attribute true <I>does not</I> mean that parser-internal
-temporary files are avoided! Use <A HREF="#item:tmp_to_core">tmp_to_core()</A> for that.
-
-
-<P>With no argument, returns the current setting as a boolean.
-
-<P><DT><B><A NAME="item:tmp_recycling">tmp_recycling [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Normally, tmpfiles are created when needed during parsing, and
-destroyed automatically when they go out of scope. But for efficiency,
-you might prefer for your parser to attempt to rewind and reuse the
-same file until the parser itself is destroyed.
-
-
-<P>If YESNO is true (the default), we allow recycling;
-tmpfiles persist until the parser itself is destroyed.
-If YESNO is false, we do not allow recycling;
-tmpfiles persist only as long as they are needed during the parse.
-With no argument, just returns the current setting.
-
-<P><DT><B><A NAME="item:tmp_to_core">tmp_to_core [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Should <A HREF="#item:new_tmpfile">new_tmpfile()</A> create real temp files, or
-use fake in-core ones? Normally we allow the creation of temporary
-disk files, since this allows us to handle huge attachments even when
-core is limited.
-
-
-<P>If YESNO is true, we implement new_tmpfile() via in-core handles.
-If YESNO is false (the default), we use real tmpfiles.
-With no argument, just returns the current setting.
-
-<P><DT><B><A NAME="item:use_inner_files">use_inner_files [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-If you are parsing from a handle which supports seek() and tell(),
-then we can avoid tmpfiles completely by using IO::InnerFile, if so
-desired: basically, we simulate a temporary file via pointers
-to virtual start- and end-positions in the input stream.
-
-
-<P>If YESNO is false (the default), then we will not use IO::InnerFile.
-If YESNO is true, we use IO::InnerFile if we can.
-With no argument, just returns the current setting.
-
-
-<P><B>Note:</B> inner files are slower than <I>real</I> tmpfiles,
-but possibly faster than <I>in-core</I> tmpfiles... so your choice for
-this option will probably depend on your choice for
-<A HREF="#item:tmp_to_core">tmp_to_core()</A> and the kind of input streams you are
-parsing.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Specifying_classes_to_be_instantiated"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Specifying classes to be instantiated</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:interface">interface ROLE,[VALUE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-During parsing, the parser normally creates instances of certain classes,
-like MIME::Entity. However, you may want to create a parser subclass
-that uses your own experimental head, entity, etc. classes (for example,
-your "head" class may provide some additional MIME-field-oriented methods).
-
-
-<P>If so, then this is the method that your subclass should invoke during
-init. Use it like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- package MyParser;
- @ISA = qw(MIME::Parser);
- ...
- sub init {
- my $self = shift;
- $self->SUPER::init(@_); ### do my parent's init
- $self->interface(ENTITY_CLASS => 'MIME::MyEntity');
- $self->interface(HEAD_CLASS => 'MIME::MyHead');
- $self; ### return
- }
-</PRE></FONT>
-
-<P>With no VALUE, returns the VALUE currently associated with that ROLE.
-
-<P><DT><B><A NAME="item:new_body_for">new_body_for HEAD</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Based on the HEAD of a part we are parsing, return a new
-body object (any desirable subclass of MIME::Body) for
-receiving that part's data.
-
-
-<P>If you set the <CODE>output_to_core</CODE> option to false before parsing
-(the default), then we call <CODE>output_path()</CODE> and create a
-new MIME::Body::File on that filename.
-
-
-<P>If you set the <CODE>output_to_core</CODE> option to true before parsing,
-then you get a MIME::Body::InCore instead.
-
-
-<P>If you want the parser to do something else entirely, you can
-override this method in a subclass.
-
-<P><DT><B><A NAME="item:new_tmpfile">new_tmpfile [RECYCLE]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return an IO handle to be used to hold temporary data during a parse.
-The default uses the standard IO::File->new_tmpfile() method unless
-<A HREF="#item:tmp_to_core">tmp_to_core()</A> dictates otherwise, but you can override this.
-You shouldn't need to.
-
-
-<P>If you do override this, make certain that the object you return is
-set for binmode(), and is able to handle the following methods:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- read(BUF, NBYTES)
- getline()
- getlines()
- print(@ARGS)
- flush()
- seek(0, 0)
-</PRE></FONT>
-
-<P>Fatal exception if the stream could not be established.
-
-
-<P>If RECYCLE is given, it is an object returned by a previous invocation
-of this method; to recycle it, this method must effectively rewind and
-truncate it, and return the same object. If you don't want to support
-recycling, just ignore it and always return a new object.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Parse_results_and_error_recovery"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Parse results and error recovery</H3></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:last_error">last_error</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the error (if any) that we ignored in the last parse.
-
-<P><DT><B><A NAME="item:last_head">last_head</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the top-level MIME header of the last stream we attempted to parse.
-This is useful for replying to people who sent us bad MIME messages.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Parse an input stream:
- eval { $entity = $parser->parse(\*STDIN) };
- if (!$entity) { ### parse failed!
- my $decapitated = $parser->last_head;
- ...
- }
-</PRE></FONT>
-<P><DT><B><A NAME="item:results">results</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return an object containing lots of info from the last entity parsed.
-This will be an instance of class
-<A HREF="../MIME/Parser/Results.pm.html">MIME::Parser::Results</A>.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="OPTIMIZING_YOUR_PARSER"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> OPTIMIZING YOUR PARSER</H2></A>
-
-
-
-<P><HR>
-<A NAME="Maximizing_speed"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Maximizing speed</H3></A>
-
-
-<P>Optimum input mechanisms:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- parse() YES (if you give it a globref or a
- subclass of IO::File)
- parse_open() YES
- parse_data() NO (see below)
- parse_two() NO (see below)
-</PRE></FONT>
-
-<P>Optimum settings:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- decode_headers() *** (no real difference; 0 is slightly faster)
- extract_nested_messages() 0 (may be slightly faster, but in
- general you want it set to 1)
- output_to_core() 0 (will be MUCH faster)
- tmp_recycling() 1? (probably, but should be investigated)
- tmp_to_core() 0 (will be MUCH faster)
- use_inner_files() 0 (if tmp_to_core() is 0;
- use 1 otherwise)
-</PRE></FONT>
-
-<P><B>File I/O is much faster than in-core I/O.</B>
-Although it <I>seems</I> like slurping a message into core and
-processing it in-core should be faster... it isn't.
-Reason: Perl's filehandle-based I/O translates directly into
-native operating-system calls, whereas the in-core I/O is
-implemented in Perl.
-
-
-<P><B>Inner files are slower than real tmpfiles, but faster than in-core ones.</B>
-If speed is your concern, that's why
-you should set use_inner_files(true) if you set tmp_to_core(true):
-so that we can bypass the slow in-core tmpfiles if the input stream
-permits.
-
-
-<P><B>Native I/O is much faster than object-oriented I/O.</B>
-It's much faster to use <$foo> than $foo->getline.
-For backwards compatibilty, this module must continue to use
-object-oriented I/O in most places, but if you use <A HREF="#item:parse">parse()</A>
-with a "real" filehandle (string, globref, or subclass of IO::File)
-then MIME::Parser is able to perform some crucial optimizations.
-
-
-<P><B>The parse_two() call is very inefficient.</B>
-Currently this is just a front-end onto parse_data().
-If your OS supports it, you're <I>far</I> better off doing something like:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $parser->parse_open("/bin/cat msg.head msg.body |");
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Minimizing_memory"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Minimizing memory</H3></A>
-
-
-<P>Optimum input mechanisms:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- parse() YES
- parse_open() YES
- parse_data() NO (in-core I/O will burn core)
- parse_two() NO (in-core I/O will burn core)
-</PRE></FONT>
-
-<P>Optimum settings:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- decode_headers() *** (no real difference)
- extract_nested_messages() *** (no real difference)
- output_to_core() 0 (will use MUCH less memory)
- tmp_recycling() 0? (promotes faster GC if
- tmp_to_core is 1)
- tmp_to_core() 0 (will use MUCH less memory)
- use_inner_files() *** (no real difference, but set it to 1
- if you *must* have tmp_to_core set to 1,
- so that you avoid in-core tmpfiles)
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Maximizing_tolerance_of_bad_MIME"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Maximizing tolerance of bad MIME</H3></A>
-
-
-<P>Optimum input mechanisms:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- parse() *** (doesn't matter)
- parse_open() *** (doesn't matter)
- parse_data() *** (doesn't matter)
- parse_two() *** (doesn't matter)
-</PRE></FONT>
-
-<P>Optimum settings:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- decode_headers() 0 (sidesteps problem of bad hdr encodings)
- extract_nested_messages() 0 (sidesteps problems of bad nested messages,
- but often you want it set to 1 anyway).
- output_to_core() *** (doesn't matter)
- tmp_recycling() *** (doesn't matter)
- tmp_to_core() *** (doesn't matter)
- use_inner_files() *** (doesn't matter)
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Avoiding_disk-based_temporary_files"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Avoiding disk-based temporary files</H3></A>
-
-
-<P>Optimum input mechanisms:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- parse() YES (if you give it a seekable handle)
- parse_open() YES (becomes a seekable handle)
- parse_data() NO (unless you set tmp_to_core(1))
- parse_two() NO (unless you set tmp_to_core(1))
-</PRE></FONT>
-
-<P>Optimum settings:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- decode_headers() *** (doesn't matter)
- extract_nested_messages() *** (doesn't matter)
- output_to_core() *** (doesn't matter)
- tmp_recycling 1 (restricts created files to 1 per parser)
- tmp_to_core() 1
- use_inner_files() 1
-</PRE></FONT>
-
-<P><B>If we can use them, inner files avoid most tmpfiles.</B>
-If you parse from a seekable-and-tellable filehandle, then the internal
-process_to_bound() doesn't need to extract each part into a temporary
-buffer; it can use IO::InnerFile (<B>warning:</B> this will slow down
-the parsing of messages with large attachments).
-
-
-<P><B>You can veto tmpfiles entirely.</B>
-If you might not be parsing from a seekable-and-tellable filehandle,
-you can set <A HREF="#item:tmp_to_core">tmp_to_core()</A> true: this will always
-use in-core I/O for the buffering (<B>warning:</B> this will slow down
-the parsing of messages with large attachments).
-
-
-<P><B>Final resort.</B>
-You can always override <A HREF="#item:new_tmpfile">new_tmpfile()</A> in a subclass.
-
-
-
-<P><HR>
-<A NAME="WARNINGS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> WARNINGS</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Multipart_messages_are_always_read_line-by-line">Multipart messages are always read line-by-line</A></B></DT>
-<DD>
-Multipart document parts are read line-by-line, so that the
-encapsulation boundaries may easily be detected. However, bad MIME
-composition agents (for example, naive CGI scripts) might return
-multipart documents where the parts are, say, unencoded bitmap
-files... and, consequently, where such "lines" might be
-veeeeeeeeery long indeed.
-
-
-<P>A better solution for this case would be to set up some form of
-state machine for input processing. This will be left for future versions.
-
-<P><DT><B><A NAME="item:Multipart_parts_read_into_temp_files_before_decoding">Multipart parts read into temp files before decoding</A></B></DT>
-<DD>
-In my original implementation, the MIME::Decoder classes had to be aware
-of encapsulation boundaries in multipart MIME documents.
-While this decode-while-parsing approach obviated the need for
-temporary files, it resulted in inflexible and complex decoder
-implementations.
-
-
-<P>The revised implementation uses a temporary file (a la <CODE>tmpfile()</CODE>)
-during parsing to hold the <I>encoded</I> portion of the current MIME
-document or part. This file is deleted automatically after the
-current part is decoded and the data is written to the "body stream"
-object; you'll never see it, and should never need to worry about it.
-
-
-<P>Some folks have asked for the ability to bypass this temp-file
-mechanism, I suppose because they assume it would slow down their application.
-I considered accomodating this wish, but the temp-file
-approach solves a lot of thorny problems in parsing, and it also
-protects against hidden bugs in user applications (what if you've
-directed the encoded part into a scalar, and someone unexpectedly
-sends you a 6 MB tar file?). Finally, I'm just not conviced that
-the temp-file use adds significant overhead.
-
-<P><DT><B><A NAME="item:Fuzzing_of_CRLF_and_newline_on_input">Fuzzing of CRLF and newline on input</A></B></DT>
-<DD>
-RFC-1521 dictates that MIME streams have lines terminated by CRLF
-(<CODE>"\r\n"</CODE>). However, it is extremely likely that folks will want to
-parse MIME streams where each line ends in the local newline
-character <CODE>"\n"</CODE> instead.
-
-
-<P>An attempt has been made to allow the parser to handle both CRLF
-and newline-terminated input.
-
-<P><DT><B><A NAME="item:Fuzzing_of_CRLF_and_newline_on_output">Fuzzing of CRLF and newline on output</A></B></DT>
-<DD>
-The <CODE>"7bit"</CODE> and <CODE>"8bit"</CODE> decoders will decode both
-a <CODE>"\n"</CODE> and a <CODE>"\r\n"</CODE> end-of-line sequence into a <CODE>"\n"</CODE>.
-
-
-<P>The <CODE>"binary"</CODE> decoder (default if no encoding specified)
-still outputs stuff verbatim... so a MIME message with CRLFs
-and no explicit encoding will be output as a text file
-that, on many systems, will have an annoying ^M at the end of
-each line... <I>but this is as it should be</I>.
-
-<P><DT><B><A NAME="item:Inability_to_handle_multipart_boundaries_that_contain_newlines">Inability to handle multipart boundaries that contain newlines</A></B></DT>
-<DD>
-First, let's get something straight: <I>this is an evil, EVIL practice,</I>
-and is incompatible with RFC-1521... hence, it's not valid MIME.
-
-
-<P>If your mailer creates multipart boundary strings that contain
-newlines <I>when they appear in the message body,</I> give it two weeks notice
-and find another one. If your mail robot receives MIME mail like this,
-regard it as syntactically incorrect MIME, which it is.
-
-
-<P>Why do I say that? Well, in RFC-1521, the syntax of a boundary is
-given quite clearly:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- boundary := 0*69<bchars> bcharsnospace
-
- bchars := bcharsnospace / " "
-
- bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / "+" /"_"
- / "," / "-" / "." / "/" / ":" / "=" / "?"
-</PRE></FONT>
-
-<P>All of which means that a valid boundary string <I>cannot</I> have
-newlines in it, and any newlines in such a string in the message header
-are expected to be solely the result of <I>folding</I> the string (i.e.,
-inserting to-be-removed newlines for readability and line-shortening
-<I>only</I>).
-
-
-<P>Yet, there is at least one brain-damaged user agent out there
-that composes mail like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- MIME-Version: 1.0
- Content-type: multipart/mixed; boundary="----ABC-
- 123----"
- Subject: Hi... I'm a dork!
-
- This is a multipart MIME message (yeah, right...)
-
- ----ABC-
- 123----
-
- Hi there!
-</PRE></FONT>
-
-<P>We have <I>got</I> to discourage practices like this (and the recent file
-upload idiocy where binary files that are part of a multipart MIME
-message aren't base64-encoded) if we want MIME to stay relatively
-simple, and MIME parsers to be relatively robust.
-
-
-<P><I>Thanks to Andreas Koenig for bringing a baaaaaaaaad user agent to
-my attention.</I>
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:15 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Filer.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Filer.pm.html
deleted file mode 100644
index 767d34b..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Filer.pm.html
+++ /dev/null
@@ -1,540 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Parser::Filer</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Parser::Filer</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<UL>
-<LI> <A HREF="#Public_interface">Public interface</A>
-<LI> <A HREF="#Semi-public_interface">Semi-public interface</A>
-</UL>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<UL>
-<LI> <A HREF="#How_this_class_is_used_when_parsing">How this class is used when parsing</A>
-<LI> <A HREF="#Writing_your_own_subclasses">Writing your own subclasses</A>
-</UL>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<UL>
-<LI> <A HREF="#MIME_Parser_Filer">MIME::Parser::Filer</A>
-<LI> <A HREF="#MIME_Parser_FileInto">MIME::Parser::FileInto</A>
-<LI> <A HREF="#MIME_Parser_FileUnder">MIME::Parser::FileUnder</A>
-</UL>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Parser::Filer - manage file-output of the parser
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../../MIME/Parser.pm.html">MIME::Parser</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok... now read <A HREF="#DESCRIPTION">DESCRIPTION</A> below, and everything else
-should make sense.
-
-
-
-<P><HR>
-<A NAME="Public_interface"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Public interface</H3></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a "filer" of the desired class:
- my $filer = MIME::Parser::FileInto->new($dir);
- my $filer = MIME::Parser::FileUnder->new($basedir);
- ...
-
- ### Want added security? Don't let outsiders name your files:
- $filer->ignore_filename(1);
-
- ### Prepare for the parsing of a new top-level message:
- $filer->init_parse;
-
- ### Return the path where this message's data should be placed:
- $path = $filer->output_path($head);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Semi-public_interface"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Semi-public interface</H3></A>
-
-
-<P>These methods might be overriden or ignored in some subclasses,
-so they don't all make sense in all circumstances:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Tweak the mapping from content-type to extension:
- $emap = $filer->output_extension_map;
- $emap->{"text/html"} = ".htm";
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-
-<P><HR>
-<A NAME="How_this_class_is_used_when_parsing"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> How this class is used when parsing</H3></A>
-
-
-<P>When a MIME::Parser decides that it wants to output a file to disk,
-it uses its "Filer" object -- an instance of a MIME::Parser::Filer
-subclass -- to determine where to put the file.
-
-
-<P>Every parser has a single Filer object, which it uses for all
-parsing. You can get the Filer for a given $parser like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $filer = $parser->filer;
-</PRE></FONT>
-
-<P>At the beginning of each <CODE>parse()</CODE>, the filer's internal state
-is reset by the parser:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $parser->filer->init_parse;
-</PRE></FONT>
-
-<P>The parser can then get a path for each entity in the message
-by handing that entity's header (a MIME::Head) to the filer
-and having it do the work, like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $new_file = $parser->filer->output_path($head);
-</PRE></FONT>
-
-<P>Since it's nice to be able to clean up after a parse (especially
-a failed parse), the parser tells the filer when it has actually
-used a path:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $parser->filer->purgeable($new_file);
-</PRE></FONT>
-
-<P>Then, if you want to clean up the files which were created for a
-particular parse (and also any directories that the Filer created),
-you would do this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $parser->filer->purge;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Writing_your_own_subclasses"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Writing your own subclasses</H3></A>
-
-
-<P>There are two standard "Filer" subclasses (see below):
-<B>MIME::Parser::FileInto</B>, which throws all files from all parses
-into the same directory, and <B>MIME::Parser::FileUnder</B> (preferred), which
-creates a subdirectory for each message. Hopefully, these will be
-sufficient for most uses, but just in case...
-
-
-<P>The only method you have to override is <A HREF="#item:output_path">output_path()</A>:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $filer->output_path($head);
-</PRE></FONT>
-
-<P>This method is invoked by MIME::Parser when it wants to put a
-decoded message body in an output file. The method should return a
-path to the file to create. Failure is indicated by throwing an
-exception.
-
-
-<P>The path returned by <CODE>output_path()</CODE> should be "ready for open()":
-any necessary parent directories need to exist at that point.
-These directories can be created by the Filer, if course, and they
-should be marked as <B>purgeable()</B> if a purge should delete them.
-
-
-<P>Actually, if your issue is more <I>where</I> the files go than
-what they're named, you can use the default <A HREF="#item:output_path">output_path()</A>
-method and just override one of its components:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $dir = $filer->output_dir($head);
- $name = $filer->output_filename($head);
- ...
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<P><HR>
-<A NAME="MIME_Parser_Filer"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> MIME::Parser::Filer</H3></A>
-
-
-<P>This is the abstract superclass of all "filer" objects.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new INITARGS...</A></B></DT>
-<DD>
-<I>Class method, constructor.</I>
-Create a new outputter for the given parser.
-Any subsequent arguments are given to init(), which subclasses should
-override for their own use (the default init does nothing).
-
-<P><DT><B><A NAME="item:results">results RESULTS</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Link this filer to a MIME::Parser::Results object which will
-tally the messages. Notice that we avoid linking it to the
-parser to avoid circular reference!
-
-<P><DT><B><A NAME="item:init_parse">init_parse</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Prepare to start parsing a new message.
-Subclasses should always be sure to invoke the inherited method.
-
-<P><DT><B><A NAME="item:evil_filename">evil_filename FILENAME</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Is this an evil filename; i.e., one which should not be used
-in generating a disk file name? It is if any of these are true:
-
-<P><UL><LI> it is empty<LI> it is a string of dots: ".", "..", etc.<LI> it contains a known "path" character: '/' '\' ':' '[' ']'<LI> it is too long</UL>
-<P>If you just want to change this behavior, you should override
-this method in the subclass of MIME::Parser::Filer that you use.
-
-
-<P><B>Warning:</B> at the time this method is invoked, the FILENAME has
-already been unmime'd into the local character set.
-If you're using any character set other than ASCII, ISO-8859-*,
-or UTF-8, the interpretation of the "path" characters might be
-very different, and you will probably need to override this method.
-See <A HREF="../MIME/WordDecoder.pm.html#item:unmime">unmime</A> for more details.
-
-
-<P><B>Note:</B> subclasses of MIME::Parser::Filer which override
-output_path() might not consult this method; note, however, that
-the built-in subclasses do consult it.
-
-
-<P><I>Thanks to Andrew Pimlott for finding a real dumb bug in the original
-version. Thanks to Nickolay Saukh for noting that evil is in the
-eye of the beholder.</I>
-
-<P><DT><B><A NAME="item:exorcise_filename">exorcise_filename FILENAME</A></B></DT>
-<DD>
-<I>Instance method.</I>
-If a given filename is evil (see <A HREF="#item:evil_filename">evil_filename</A>) we try to
-rescue it by performing some basic operations: shortening it,
-removing bad characters, etc., and checking each against
-evil_filename().
-
-
-<P>Returns the exorcised filename (which is guaranteed to not
-be evil), or undef if it could not be salvaged.
-
-
-<P><B>Warning:</B> at the time this method is invoked, the FILENAME has
-already been unmime'd into the local character set.
-If you're using anything character set other than ASCII, ISO-8859-*,
-or UTF-8, the interpretation of the "path" characters might be very
-very different, and you will probably need to override this method.
-See <A HREF="../MIME/WordDecoder.pm.html#item:unmime">unmime</A> for more details.
-
-<P><DT><B><A NAME="item:find_unused_path">find_unused_path DIR, FILENAME</A></B></DT>
-<DD>
-<I>Instance method, subclasses only.</I>
-We have decided on an output directory and tentative filename,
-but there is a chance that it might already exist. Keep
-adding a numeric suffix "-1", "-2", etc. to the filename
-until an unused path is found, and then return that path.
-
-
-<P>The suffix is actually added before the first "." in the filename
-is there is one; for example:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- picture.gif archive.tar.gz readme
- picture-1.gif archive-1.tar.gz readme-1
- picture-2.gif archive-2.tar.gz readme-2
- ... ... ...
- picture-10.gif
- ...
-</PRE></FONT>
-
-<P>This can be a costly operation, and risky if you don't want files
-renamed, so it is in your best interest to minimize situations
-where these kinds of collisions occur. Unfortunately, if
-a multipart message gives all of its parts the same recommended
-filename, and you are placing them all in the same directory,
-this method might be unavoidable.
-
-<P><DT><B><A NAME="item:ignore_filename">ignore_filename [YESNO]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return true if we should always ignore recommended filenames in
-messages, choosing instead to always generate our own filenames.
-With argument, sets this value.
-
-
-<P><B>Note:</B> subclasses of MIME::Parser::Filer which override
-output_path() might not honor this setting; note, however, that
-the built-in subclasses honor it.
-
-<P><DT><B><A NAME="item:output_dir">output_dir HEAD</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the output directory for the given header.
-The default method returns ".".
-
-<P><DT><B><A NAME="item:output_filename">output_filename HEAD</A></B></DT>
-<DD>
-<I>Instance method, subclasses only.</I>
-A given recommended filename was either not given, or it was judged
-to be evil. Return a fake name, possibly using information in the
-message HEADer. Note that this is just the filename, not the full path.
-
-
-<P>Used by <A HREF="#item:output_path">output_path()</A>.
-If you're using the default <CODE>output_path()</CODE>, you probably don't
-need to worry about avoiding collisions with existing files;
-we take care of that in <A HREF="#item:find_unused_path">find_unused_path()</A>.
-
-<P><DT><B><A NAME="item:output_prefix">output_prefix [PREFIX]</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Get the short string that all filenames for extracted body-parts
-will begin with (assuming that there is no better "recommended filename").
-The default is <I><FILE>"msg"</FILE></I>.
-
-
-<P>If PREFIX <I>is not</I> given, the current output prefix is returned.
-If PREFIX <I>is</I> given, the output prefix is set to the new value,
-and the previous value is returned.
-
-
-<P>Used by <A HREF="#item:output_filename">output_filename()</A>.
-
-
-<P><B>Note:</B> subclasses of MIME::Parser::Filer which override
-output_path() or output_filename() might not honor this setting;
-note, however, that the built-in subclasses honor it.
-
-<P><DT><B><A NAME="item:output_type_ext">output_type_ext</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return a reference to the hash used by the default
-<A HREF="#item:output_filename">output_filename()</A> for mapping from content-types
-to extensions when there is no default extension to use.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $emap = $filer->output_typemap;
- $emap->{'text/plain'} = '.txt';
- $emap->{'text/html'} = '.html';
- $emap->{'text/*'} = '.txt';
- $emap->{'*/*'} = '.dat';
-</PRE></FONT>
-
-<P><B>Note:</B> subclasses of MIME::Parser::Filer which override
-output_path() or output_filename() might not consult this hash;
-note, however, that the built-in subclasses consult it.
-
-<P><DT><B><A NAME="item:output_path">output_path HEAD</A></B></DT>
-<DD>
-<I>Instance method, subclasses only.</I>
-Given a MIME head for a file to be extracted, come up with a good
-output pathname for the extracted file. This is the only method
-you need to worry about if you are building a custom filer.
-
-
-<P>The default implementation does a lot of work; subclass
-implementers <I>really</I> should try to just override its components
-instead of the whole thing. It works basically as follows:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $directory = $self->output_dir($head);
-
- $filename = $head->recommended_filename();
- if (!$filename or
- $self->ignore_filename() or
- $self->evil_filename($filename)) {
- $filename = $self->output_filename($head);
- }
-
- return $self->find_unused_path($directory, $filename);
-</PRE></FONT>
-
-<P><B>Note:</B> There are many, many, many ways you might want to control
-the naming of files, based on your application. If you don't like
-the behavior of this function, you can easily define your own subclass
-of MIME::Parser::Filer and override it there.
-
-
-<P><B>Note:</B> Nickolay Saukh pointed out that, given the subjective nature of
-what is "evil", this function really shouldn't <I>warn</I> about an evil
-filename, but maybe just issue a <I>debug</I> message. I considered that,
-but then I thought: if debugging were off, people wouldn't know why
-(or even if) a given filename had been ignored. In mail robots
-that depend on externally-provided filenames, this could cause
-hard-to-diagnose problems. So, the message is still a warning.
-
-
-<P><I>Thanks to Laurent Amon for pointing out problems with the original
-implementation, and for making some good suggestions. Thanks also to
-Achim Bohnet for pointing out that there should be a hookless, OO way of
-overriding the output path.</I>
-
-<P><DT><B><A NAME="item:purge">purge</A></B></DT>
-<DD>
-<I>Instance method, final.</I>
-Purge all files/directories created by the last parse.
-This method simply goes through the purgeable list in reverse order
-(see <A HREF="#item:purgeable">purgeable</A>) and removes all existing files/directories in it.
-You should not need to override this method.
-
-<P><DT><B><A NAME="item:purgeable">purgeable [FILE]</A></B></DT>
-<DD>
-<I>Instance method, final.</I>
-Add FILE to the list of "purgeable" files/directories (those which
-will be removed if you do a <CODE>purge()</CODE>).
-You should not need to override this method.
-
-
-<P>If FILE is not given, the "purgeable" list is returned.
-This may be used for more-sophisticated purging.
-
-
-<P>As a special case, invoking this method with a FILE that is an
-arrayref will replace the purgeable list with a copy of the
-array's contents, so [] may be used to clear the list.
-
-
-<P>Note that the "purgeable" list is cleared when a parser begins a
-new parse; therefore, if you want to use purge() to do cleanup,
-you <I>must</I> do so <I>before</I> starting a new parse!
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="MIME_Parser_FileInto"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> MIME::Parser::FileInto</H3></A>
-
-
-<P>This concrete subclass of MIME::Parser::Filer supports filing
-into a given directory.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:init">init DIRECTORY</A></B></DT>
-<DD>
-<I>Instance method, initiallizer.</I>
-Set the directory where all files will go.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="MIME_Parser_FileUnder"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> MIME::Parser::FileUnder</H3></A>
-
-
-<P>This concrete subclass of MIME::Parser::Filer supports filing under
-a given directory, using one subdirectory per message, but with
-all message parts in the same directory.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:init">init BASEDIR, OPTSHASH...</A></B></DT>
-<DD>
-<I>Instance method, initiallizer.</I>
-Set the base directory which will contain the message directories.
-If used, then each parse of begins by creating a new subdirectory
-of BASEDIR where the actual parts of the message are placed.
-OPTSHASH can contain the following:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:DirName">DirName</A></B></DT>
-<DD>
-Explicitly set the name of the subdirectory which is created.
-The default is to use the time, process id, and a sequence number,
-but you might want a predictable directory.
-
-<P><DT><B><A NAME="item:Purge">Purge</A></B></DT>
-<DD>
-Automatically purge the contents of the directory (including all
-subdirectories) before each parse. This is really only needed if
-using an explicit DirName, and is provided as a convenience only.
-Currently we use the 1-arg form of File::Path::rmtree; you should
-familiarize yourself with the caveats therein.
-
-</DL>
-
-
-<P>The output_dir() will return the path to this message-specific directory
-until the next parse is begun, so you can do this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use File::Path;
-
- $parser->output_under("/tmp");
- $ent = eval { $parser->parse_open($msg); }; ### parse
- if (!$ent) { ### parse failed
- rmtree($parser->output_dir);
- die "parse failed: $@";
- }
- else { ### parse succeeded
- ...do stuff...
- }
-</PRE></FONT>
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:18 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Reader.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Reader.pm.html
deleted file mode 100644
index 2fc0ada..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Reader.pm.html
+++ /dev/null
@@ -1,62 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Parser::Reader</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Parser::Reader</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Parser::Reader - a line-oriented reader for a MIME::Parser
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>This module is used internally by MIME::Parser; you probably
-don't need to be looking at it at all. But just in case...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create a top-level reader, where chunks end at EOF:
- $rdr = MIME::Parser::Reader->new();
-
- ### Spawn a child reader, where chunks also end at a boundary:
- $subrdr = $rdr->spawn->add_boundary($bound);
-
- ### Spawn a child reader, where chunks also end at a given string:
- $subrdr = $rdr->spawn->add_terminator($string);
-
- ### Read until boundary or terminator:
- $subrdr->read_chunk($in, $out);
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A line-oriented reader which can deal with virtual end-of-stream
-defined by a collection of boundaries.
-
-
-<P><B>Warning:</B> this is a private class solely for use by MIME::Parser.
-This class has no official public interface
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:20 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Results.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Results.pm.html
deleted file mode 100644
index 8afa008..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/Results.pm.html
+++ /dev/null
@@ -1,125 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Parser::Results</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Parser::Results</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Parser::Results - results of the last entity parsed
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../../MIME/Parser.pm.html">MIME::Parser</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Do parse, get results:
- my $entity = eval { $parser->parse(\*STDIN); };
- my $results = $parser->results;
-
- ### Get all messages logged:
- @msgs = $results->msgs;
-
- ### Get messages of specific types (also tests if there were problems):
- $had_errors = $results->errors;
- $had_warnings = $results->warnings;
-
- ### Get outermost header:
- $top_head = $results->top_head;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Results from the last MIME::Parser parse.
-
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:new">new</A></B></DT>
-<DD>
-<I>Constructor.</I>
-
-<P><DT><B><A NAME="item:msgs">msgs</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return all messages that we logged, in order.
-Every message is a string beginning with its type followed by <CODE>": "</CODE>;
-the current types are <CODE>debug</CODE>, <CODE>warning</CODE>, and <CODE>error</CODE>.
-
-<P><DT><B><A NAME="item:errors">errors</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return all error messages that we logged, in order.
-A convenience front-end onto msgs().
-
-<P><DT><B><A NAME="item:warnings">warnings</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return all warning messages that we logged, in order.
-A convenience front-end onto msgs().
-
-<P><DT><B><A NAME="item:top_head">top_head</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Return the topmost header, if we were able to read it.
-This may be useful if the parse fails.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:24 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/h1bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/h1bullet.gif
deleted file mode 100644
index 8698643..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/h1bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/h2bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/h2bullet.gif
deleted file mode 100644
index d26510c..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/h2bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/zeegee.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/zeegee.gif
deleted file mode 100644
index f6001a5..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Parser/icons/zeegee.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Tools.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Tools.pm.html
deleted file mode 100644
index 57b5aa1..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Tools.pm.html
+++ /dev/null
@@ -1,2038 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME-tools</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME-tools</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#REQUIREMENTS">REQUIREMENTS</A>
-<LI> <A HREF="#A_QUICK_TOUR">A QUICK TOUR</A>
-<UL>
-<LI> <A HREF="#Overview_of_the_classes">Overview of the classes</A>
-<LI> <A HREF="#Parsing_messages">Parsing messages</A>
-<LI> <A HREF="#Composing_messages">Composing messages</A>
-<LI> <A HREF="#Sending_email">Sending email</A>
-<LI> <A HREF="#Encoding_decoding_support">Encoding/decoding support</A>
-<LI> <A HREF="#Message-logging">Message-logging</A>
-<LI> <A HREF="#Configuring_the_toolkit">Configuring the toolkit</A>
-</UL>
-<LI> <A HREF="#THINGS_YOU_SHOULD_DO">THINGS YOU SHOULD DO</A>
-<UL>
-<LI> <A HREF="#Take_a_look_at_the_examples">Take a look at the examples</A>
-<LI> <A HREF="#Run_with_warnings_enabled">Run with warnings enabled</A>
-<LI> <A HREF="#Avoid_non-standard_encodings">Avoid non-standard encodings</A>
-<LI> <A HREF="#Plan_for_thrown_exceptions">Plan for thrown exceptions</A>
-<LI> <A HREF="#Check_the_parser_results_for_warnings_errors">Check the parser results for warnings/errors</A>
-<LI> <A HREF="#Don_t_plan_on_printing_exactly_what_you_parsed">Don't plan on printing exactly what you parsed!</A>
-<LI> <A HREF="#Understand_how_international_characters_are_represented">Understand how international characters are represented</A>
-</UL>
-<LI> <A HREF="#THINGS_I_DO_THAT_YOU_SHOULD_KNOW_ABOUT">THINGS I DO THAT YOU SHOULD KNOW ABOUT</A>
-<UL>
-<LI> <A HREF="#Fuzzing_of_CRLF_and_newline_on_input">Fuzzing of CRLF and newline on input</A>
-<LI> <A HREF="#Fuzzing_of_CRLF_and_newline_when_decoding">Fuzzing of CRLF and newline when decoding</A>
-<LI> <A HREF="#Fuzzing_of_CRLF_and_newline_when_encoding_composing">Fuzzing of CRLF and newline when encoding/composing</A>
-<LI> <A HREF="#Inability_to_handle_multipart_boundaries_with_embedded_newlines">Inability to handle multipart boundaries with embedded newlines</A>
-<LI> <A HREF="#Ignoring_non-header_headers">Ignoring non-header headers</A>
-<LI> <A HREF="#Fuzzing_of_empty_multipart_preambles">Fuzzing of empty multipart preambles</A>
-<LI> <A HREF="#Use_of_a_temp_file_during_parsing">Use of a temp file during parsing</A>
-<LI> <A HREF="#Why_do_I_assume_that_MIME_objects_are_email_objects">Why do I assume that MIME objects are email objects?</A>
-</UL>
-<LI> <A HREF="#A_MIME_PRIMER">A MIME PRIMER</A>
-<UL>
-<LI> <A HREF="#Glossary">Glossary</A>
-<LI> <A HREF="#Content_types">Content types</A>
-<LI> <A HREF="#Content_transfer_encodings">Content transfer encodings</A>
-</UL>
-<LI> <A HREF="#TERMS_AND_CONDITIONS">TERMS AND CONDITIONS</A>
-<LI> <A HREF="#SUPPORT">SUPPORT</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-<LI> <A HREF="#CHANGE_LOG">CHANGE LOG</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#ACKNOWLEDGMENTS">ACKNOWLEDGMENTS</A>
-<LI> <A HREF="#SEE_ALSO">SEE ALSO</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME-tools - modules for parsing (and creating!) MIME entities
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Here's some pretty basic code for <B>parsing a MIME message,</B> and outputting
-its decoded components to a given directory:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::Parser;
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create parser, and set some parsing options:
- my $parser = new MIME::Parser;
- $parser->output_under("$ENV{HOME}/mimemail");
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Parse input:
- $entity = $parser->parse(\*STDIN) or die "parse failed\n";
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Take a look at the top-level entity (and any parts it has):
- $entity->dump_skeleton;
-</PRE></FONT>
-
-<P>Here's some code which <B>composes and sends a MIME message</B> containing
-three parts: a text file, an attached GIF, and some more text:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::Entity;
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Create the top-level, and set up the mail headers:
- $top = MIME::Entity->build(Type =>"multipart/mixed",
- From => "me\(a)myhost.com",
- To => "you\(a)yourhost.com",
- Subject => "Hello, nurse!");
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Part #1: a simple text document:
- $top->attach(Path=>"./testin/short.txt");
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Part #2: a GIF file:
- $top->attach(Path => "./docs/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64");
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Part #3: some literal text:
- $top->attach(Data=>$message);
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Send it:
- open MAIL, "| /usr/lib/sendmail -t -oi -oem" or die "open: $!";
- $top->print(\*MAIL);
- close MAIL;
-</PRE></FONT>
-
-<P>For more examples, look at the scripts in the <B>examples</B> directory
-of the MIME-tools distribution.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>MIME-tools is a collection of Perl5 MIME:: modules for parsing, decoding,
-<I>and generating</I> single- or multipart (even nested multipart) MIME
-messages. (Yes, kids, that means you can send messages with attached
-GIF files).
-
-
-
-<P><HR>
-<A NAME="REQUIREMENTS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> REQUIREMENTS</H2></A>
-
-
-<P>You will need the following installed on your system:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- File::Path
- File::Spec
- IPC::Open2 (optional)
- IO::Scalar, ... from the IO-stringy distribution
- MIME::Base64
- MIME::QuotedPrint
- Net::SMTP
- Mail::Internet, ... from the MailTools distribution.
-</PRE></FONT>
-
-<P>See the Makefile.PL in your distribution for the most-comprehensive
-list of prerequisite modules and their version numbers.
-
-
-
-<P><HR>
-<A NAME="A_QUICK_TOUR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> A QUICK TOUR</H2></A>
-
-
-
-<P><HR>
-<A NAME="Overview_of_the_classes"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Overview of the classes</H3></A>
-
-
-<P>Here are the classes you'll generally be dealing with directly:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- (START HERE) results() .-----------------.
- \ .-------->| MIME:: |
- .-----------. / | Parser::Results |
- | MIME:: |--' `-----------------'
- | Parser |--. .-----------------.
- `-----------' \ filer() | MIME:: |
- | parse() `-------->| Parser::Filer |
- | gives you `-----------------'
- | a... | output_path()
- | | determines
- | | path() of...
- | head() .--------. |
- | returns... | MIME:: | get() |
- V .-------->| Head | etc... |
- .--------./ `--------' |
- .---> | MIME:: | |
- `-----| Entity | .--------. |
- parts() `--------'\ | MIME:: | /
- returns `-------->| Body |<---------'
- sub-entities bodyhandle() `--------'
- (if any) returns... | open()
- | returns...
- |
- V
- .--------. read()
- | IO:: | getline()
- | Handle | print()
- `--------' etc...
-</PRE></FONT>
-
-<P>To illustrate, parsing works this way:
-
-
-
-<UL>
-<P><LI>
-<P><B>The "parser" parses the MIME stream.</B>
-A parser is an instance of <CODE>MIME::Parser</CODE>.
-You hand it an input stream (like a filehandle) to parse a message from:
-if the parse is successful, the result is an "entity".
-
-<P><LI>
-<P><B>A parsed message is represented by an "entity".</B>
-An entity is an instance of <CODE>MIME::Entity</CODE> (a subclass of <CODE>Mail::Internet</CODE>).
-If the message had "parts" (e.g., attachments), then those parts
-are "entities" as well, contained inside the top-level entity.
-Each entity has a "head" and a "body".
-
-<P><LI>
-<P><B>The entity's "head" contains information about the message.</B>
-A "head" is an instance of <CODE>MIME::Head</CODE> (a subclass of <CODE>Mail::Header</CODE>).
-It contains information from the message header: content type,
-sender, subject line, etc.
-
-<P><LI>
-<P><B>The entity's "body" knows where the message data is.</B>
-You can ask to "open" this data source for <I>reading</I> or <I>writing</I>,
-and you will get back an "I/O handle".
-
-<P><LI>
-<P><B>You can open() a "body" and get an "I/O handle" to read/write message data.</B>
-This handle is an object that is basically like an IO::Handle or
-a FileHandle... it can be any class, so long as it supports a small,
-standard set of methods for reading from or writing to the underlying
-data source.
-
-</UL>
-
-
-<P>A typical multipart message containing two parts -- a textual greeting
-and an "attached" GIF file -- would be a tree of MIME::Entity objects,
-each of which would have its own MIME::Head. Like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- .--------.
- | MIME:: | Content-type: multipart/mixed
- | Entity | Subject: Happy Samhaine!
- `--------'
- |
- `----.
- parts |
- | .--------.
- |---| MIME:: | Content-type: text/plain; charset=us-ascii
- | | Entity | Content-transfer-encoding: 7bit
- | `--------'
- | .--------.
- |---| MIME:: | Content-type: image/gif
- | Entity | Content-transfer-encoding: base64
- `--------' Content-disposition: inline;
- filename="hs.gif"
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Parsing_messages"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Parsing messages</H3></A>
-
-
-<P>You usually start by creating an instance of <B>MIME::Parser</B>
-and setting up certain parsing parameters: what directory to save
-extracted files to, how to name the files, etc.
-
-
-<P>You then give that instance a readable filehandle on which waits a
-MIME message. If all goes well, you will get back a <B>MIME::Entity</B>
-object (a subclass of <B>Mail::Internet</B>), which consists of...
-
-
-
-<UL>
-<P><LI>
-<P>A <B>MIME::Head</B> (a subclass of <B>Mail::Header</B>) which holds the MIME
-header data.
-
-<P><LI>
-<P>A <B>MIME::Body</B>, which is a object that knows where the body data is.
-You ask this object to "open" itself for reading, and it
-will hand you back an "I/O handle" for reading the data: this is
-a FileHandle-like object, and could be of any class, so long as it
-conforms to a subset of the <B>IO::Handle</B> interface.
-
-</UL>
-
-
-<P>If the original message was a multipart document, the MIME::Entity
-object will have a non-empty list of "parts", each of which is in
-turn a MIME::Entity (which might also be a multipart entity, etc,
-etc...).
-
-
-<P>Internally, the parser (in MIME::Parser) asks for instances
-of <B>MIME::Decoder</B> whenever it needs to decode an encoded file.
-MIME::Decoder has a mapping from supported encodings (e.g., 'base64')
-to classes whose instances can decode them. You can add to this mapping
-to try out new/experiment encodings. You can also use
-MIME::Decoder by itself.
-
-
-
-<P><HR>
-<A NAME="Composing_messages"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Composing messages</H3></A>
-
-
-<P>All message composition is done via the <B>MIME::Entity</B> class.
-For single-part messages, you can use the <B>MIME::Entity/build</B>
-constructor to create MIME entities very easily.
-
-
-<P>For multipart messages, you can start by creating a top-level
-<CODE>multipart</CODE> entity with <B>MIME::Entity::build()</B>, and then use
-the similar <B>MIME::Entity::attach()</B> method to attach parts to
-that message. <I>Please note:</I> what most people think of as
-"a text message with an attached GIF file" is <I>really</I> a multipart
-message with 2 parts: the first being the text message, and the
-second being the GIF file.
-
-
-<P>When building MIME a entity, you'll have to provide two very important
-pieces of information: the <I>content type</I> and the
-<I>content transfer encoding</I>. The type is usually easy, as it is directly
-determined by the file format; e.g., an HTML file is <CODE>text/html</CODE>.
-The encoding, however, is trickier... for example, some HTML files are
-<CODE>7bit</CODE>-compliant, but others might have very long lines and would need to be
-sent <CODE>quoted-printable</CODE> for reliability.
-
-
-<P>See the section on encoding/decoding for more details, as well as
-<A HREF="#A_MIME_PRIMER">A MIME PRIMER</A>.
-
-
-
-<P><HR>
-<A NAME="Sending_email"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Sending email</H3></A>
-
-
-<P>Since MIME::Entity inherits directly from Mail::Internet,
-you can use the normal Mail::Internet mechanisms to send
-email. For example,
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $entity->smtpsend;
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="Encoding_decoding_support"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Encoding/decoding support</H3></A>
-
-
-<P>The <B>MIME::Decoder</B> class can be used to <I>encode</I> as well; this is done
-when printing MIME entities. All the standard encodings are supported
-(see <A HREF="#A_MIME_PRIMER">A MIME PRIMER</A> for details):
-
-<P><TABLE CELLPADDING=4 CELLSPACING=0 BORDER=1 ALIGN=CENTER BGCOLOR=#EEEEEE><TR><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">Encoding: </FONT></TH BGCOLOR=#AA0055><TH BGCOLOR=#AA0055 ALIGN=LEFT><FONT SIZE=2 COLOR=#FFFFFF FACE="sans-serif">Normally used when message contents are: </FONT></TH BGCOLOR=#AA0055></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">7bit</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">7-bit data with under 1000 chars/line, or multipart.</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">8bit</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">8-bit data with under 1000 chars/line.</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">binary</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">8-bit data with some long lines (or no line breaks).</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">quoted-printable</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">Text files with some 8-bit chars (e.g., Latin-1 text).</FONT></TD></TR><TR><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">base64</FONT></TD><TD ALIGN=LEFT><FONT SIZE=2 COLOR=#000000 FACE="sans-serif">Binary files.</FONT></TD></TR></UL></TABLE>
-<P>Which encoding you choose for a given document depends largely on
-(1) what you know about the document's contents (text vs binary), and
-(2) whether you need the resulting message to have a reliable encoding
-for 7-bit Internet email transport.
-
-
-<P>In general, only <CODE>quoted-printable</CODE> and <CODE>base64</CODE> guarantee reliable
-transport of all data; the other three "no-encoding" encodings simply
-pass the data through, and are only reliable if that data is 7bit ASCII
-with under 1000 characters per line, and has no conflicts with the
-multipart boundaries.
-
-
-<P>I've considered making it so that the content-type and encoding
-can be automatically inferred from the file's path, but that seems
-to be asking for trouble... or at least, for Mail::Cap...
-
-
-
-<P><HR>
-<A NAME="Message-logging"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Message-logging</H3></A>
-
-
-<P>MIME-tools is a large and complex toolkit which tries to deal with
-a wide variety of external input. It's sometimes helpful to see
-what's really going on behind the scenes.
-There are several kinds of messages logged by the toolkit itself:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Debug_messages">Debug messages</A></B></DT>
-<DD>
-These are printed directly to the STDERR, with a prefix of
-<CODE>"MIME-tools: debug"</CODE>.
-
-
-<P>Debug message are only logged if you have turned
-<A HREF="#item:debugging">debugging</A> on in the MIME::Tools configuration.
-
-<P><DT><B><A NAME="item:Warning_messages">Warning messages</A></B></DT>
-<DD>
-These are logged by the standard Perl warn() mechanism
-to indicate an unusual situation.
-They all have a prefix of <CODE>"MIME-tools: warning"</CODE>.
-
-
-<P>Warning messages are only logged if <CODE>$^W</CODE> is set true
-and MIME::Tools is not configured to be <A HREF="#item:quiet">quiet</A>.
-
-<P><DT><B><A NAME="item:Error_messages">Error messages</A></B></DT>
-<DD>
-These are logged by the standard Perl warn() mechanism
-to indicate that something actually failed.
-They all have a prefix of <CODE>"MIME-tools: error"</CODE>.
-
-
-<P>Error messages are only logged if <CODE>$^W</CODE> is set true
-and MIME::Tools is not configured to be <A HREF="#item:quiet">quiet</A>.
-
-<P><DT><B><A NAME="item:Usage_messages">Usage messages</A></B></DT>
-<DD>
-Unlike "typical" warnings above, which warn about problems processing
-data, usage-warnings are for alerting developers of deprecated methods
-and suspicious invocations.
-
-
-<P>Usage messages are currently only logged if <CODE>$^W</CODE> is set true
-and MIME::Tools is not configured to be <A HREF="#item:quiet">quiet</A>.
-
-</DL>
-
-
-<P>When a MIME::Parser (or one of its internal helper classes)
-wants to report a message, it generally does so by recording
-the message to the <B>MIME::Parser::Results</B> object
-immediately before invoking the appropriate function above.
-That means each parsing run has its own trace-log which
-can be examined for problems.
-
-
-
-<P><HR>
-<A NAME="Configuring_the_toolkit"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Configuring the toolkit</H3></A>
-
-
-<P>If you want to tweak the way this toolkit works (for example, to
-turn on debugging), use the routines in the <B>MIME::Tools</B> module.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:debugging">debugging</A></B></DT>
-<DD>
-Turn debugging on or off.
-Default is false (off).
-
-<FONT SIZE=3 FACE="courier"><PRE>
- MIME::Tools->debugging(1);
-</PRE></FONT>
-<P><DT><B><A NAME="item:quiet">quiet</A></B></DT>
-<DD>
-Turn the reporting of warning/error messages on or off.
-Default is true, meaning that these message are silenced.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- MIME::Tools->quiet(1);
-</PRE></FONT>
-<P><DT><B><A NAME="item:version">version</A></B></DT>
-<DD>
-Return the toolkit version.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- print MIME::Tools->version, "\n";
-</PRE></FONT>
-</DL>
-
-
-
-<P><HR>
-<A NAME="THINGS_YOU_SHOULD_DO"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> THINGS YOU SHOULD DO</H2></A>
-
-
-
-<P><HR>
-<A NAME="Take_a_look_at_the_examples"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Take a look at the examples</H3></A>
-
-
-<P>The MIME-Tools distribution comes with an "examples" directory.
-The scripts in there are basically just tossed-together, but
-they'll give you some ideas of how to use the parser.
-
-
-
-<P><HR>
-<A NAME="Run_with_warnings_enabled"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Run with warnings enabled</H3></A>
-
-
-<P><I>Always</I> run your Perl script with <CODE>-w</CODE>.
-If you see a warning about a deprecated method, change your
-code ASAP. This will ease upgrades tremendously.
-
-
-
-<P><HR>
-<A NAME="Avoid_non-standard_encodings"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Avoid non-standard encodings</H3></A>
-
-
-<P>Don't try to MIME-encode using the non-standard MIME encodings.
-It's just not a good practice if you want people to be able to
-read your messages.
-
-
-
-<P><HR>
-<A NAME="Plan_for_thrown_exceptions"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Plan for thrown exceptions</H3></A>
-
-
-<P>For example, if your mail-handling code absolutely must not die,
-then perform mail parsing like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $entity = eval { $parser->parse(\*INPUT) };
-</PRE></FONT>
-
-<P>Parsing is a complex process, and some components may throw exceptions
-if seriously-bad things happen. Since "seriously-bad" is in the
-eye of the beholder, you're better off <I>catching</I> possible exceptions
-instead of asking me to propagate <CODE>undef</CODE> up the stack. Use of exceptions in
-reusable modules is one of those religious issues we're never all
-going to agree upon; thankfully, that's what <CODE>eval{}</CODE> is good for.
-
-
-
-<P><HR>
-<A NAME="Check_the_parser_results_for_warnings_errors"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Check the parser results for warnings/errors</H3></A>
-
-
-<P>As of 5.3xx, the parser tries extremely hard to give you a
-MIME::Entity. If there were any problems, it logs warnings/errors
-to the underlying "results" object (see <A HREF="../MIME/Parser/Results.pm.html">MIME::Parser::Results</A>).
-Look at that object after each parse.
-Print out the warnings and errors, <I>especially</I> if messages don't
-parse the way you thought they would.
-
-
-
-<P><HR>
-<A NAME="Don_t_plan_on_printing_exactly_what_you_parsed"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Don't plan on printing exactly what you parsed!</H3></A>
-
-
-<P><I>Parsing is a (slightly) lossy operation.</I>
-Because of things like ambiguities in base64-encoding, the following
-is <I>not</I> going to spit out its input unchanged in all cases:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $entity = $parser->parse(\*STDIN);
- $entity->print(\*STDOUT);
-</PRE></FONT>
-
-<P>If you're using MIME::Tools to process email, remember to save
-the data you parse if you want to send it on unchanged.
-This is vital for things like PGP-signed email.
-
-
-
-<P><HR>
-<A NAME="Understand_how_international_characters_are_represented"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Understand how international characters are represented</H3></A>
-
-
-<P>The MIME standard allows for text strings in headers to contain
-characters from any character set, by using special sequences
-which look like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=
-</PRE></FONT>
-
-<P>To be consistent with the existing Mail::Field classes, MIME::Tools
-does <I>not</I> automatically unencode these strings, since doing so would
-lose the character-set information and interfere with the parsing
-of fields (see <A HREF="../MIME/Parser.pm.html#item:decode_headers">decode_headers</A> for a full explanation).
-That means you should be prepared to deal with these encoded strings.
-
-
-<P>The most common question then is, <B>how do I decode these encoded strings?</B>
-The answer depends on what you want to decode them <I>to</I>:
-ASCII, Latin1, UTF-8, etc. Be aware that your "target" representation
-may not support all possible character sets you might encounter;
-for example, Latin1 (ISO-8859-1) has no way of representing Big5
-(Chinese) characters. A common practice is to represent "untranslateable"
-characters as "?"s, or to ignore them completely.
-
-
-<P>To unencode the strings into some of the more-popular Western byte
-representations (e.g., Latin1, Latin2, etc.), you can use the decoders
-in MIME::WordDecoder (see <A HREF="../MIME/WordDecoder.pm.html">MIME::WordDecoder</A>).
-The simplest way is by using <CODE>unmime()</CODE>, a function wrapped
-around your "default" decoder, as follows:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::WordDecoder;
- ...
- $subject = unmime $entity->head->get('subject');
-</PRE></FONT>
-
-<P>One place this <I>is</I> done automatically is in extracting the recommended
-filename for a part while parsing. That's why you should start by
-setting up the best "default" decoder if the default target of Latin1
-isn't to your liking.
-
-
-
-<P><HR>
-<A NAME="THINGS_I_DO_THAT_YOU_SHOULD_KNOW_ABOUT"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> THINGS I DO THAT YOU SHOULD KNOW ABOUT</H2></A>
-
-
-
-<P><HR>
-<A NAME="Fuzzing_of_CRLF_and_newline_on_input"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Fuzzing of CRLF and newline on input</H3></A>
-
-
-<P>RFC-1521 dictates that MIME streams have lines terminated by CRLF
-(<CODE>"\r\n"</CODE>). However, it is extremely likely that folks will want to
-parse MIME streams where each line ends in the local newline
-character <CODE>"\n"</CODE> instead.
-
-
-<P>An attempt has been made to allow the parser to handle both CRLF
-and newline-terminated input.
-
-
-
-<P><HR>
-<A NAME="Fuzzing_of_CRLF_and_newline_when_decoding"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Fuzzing of CRLF and newline when decoding</H3></A>
-
-
-<P>The <CODE>"7bit"</CODE> and <CODE>"8bit"</CODE> decoders will decode both
-a <CODE>"\n"</CODE> and a <CODE>"\r\n"</CODE> end-of-line sequence into a <CODE>"\n"</CODE>.
-
-
-<P>The <CODE>"binary"</CODE> decoder (default if no encoding specified)
-still outputs stuff verbatim... so a MIME message with CRLFs
-and no explicit encoding will be output as a text file
-that, on many systems, will have an annoying ^M at the end of
-each line... <I>but this is as it should be</I>.
-
-
-
-<P><HR>
-<A NAME="Fuzzing_of_CRLF_and_newline_when_encoding_composing"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Fuzzing of CRLF and newline when encoding/composing</H3></A>
-
-
-<P>All encoders currently output the end-of-line sequence as a <CODE>"\n"</CODE>,
-with the assumption that the local mail agent will perform
-the conversion from newline to CRLF when sending the mail.
-However, there probably should be an option to output CRLF as per RFC-1521.
-
-
-
-<P><HR>
-<A NAME="Inability_to_handle_multipart_boundaries_with_embedded_newlines"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Inability to handle multipart boundaries with embedded newlines</H3></A>
-
-
-<P>Let's get something straight: this is an evil, EVIL practice.
-If your mailer creates multipart boundary strings that contain
-newlines, give it two weeks notice and find another one. If your
-mail robot receives MIME mail like this, regard it as syntactically
-incorrect, which it is.
-
-
-
-<P><HR>
-<A NAME="Ignoring_non-header_headers"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Ignoring non-header headers</H3></A>
-
-
-<P>People like to hand the parser raw messages straight from
-POP3 or from a mailbox. There is often predictable non-header
-information in front of the real headers; e.g., the initial
-"From" line in the following message:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- From - Wed Mar 22 02:13:18 2000
- Return-Path: <eryq(a)zeegee.com>
- Subject: Hello
-</PRE></FONT>
-
-<P>The parser simply ignores such stuff quietly. Perhaps it
-shouldn't, but most people seem to want that behavior.
-
-
-
-<P><HR>
-<A NAME="Fuzzing_of_empty_multipart_preambles"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Fuzzing of empty multipart preambles</H3></A>
-
-
-<P>Please note that there is currently an ambiguity in the way
-preambles are parsed in. The following message fragments <I>both</I>
-are regarded as having an empty preamble (where <CODE>\n</CODE> indicates a
-newline character):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Content-type: multipart/mixed; boundary="xyz"\n
- Subject: This message (#1) has an empty preamble\n
- \n
- --xyz\n
- ...
-
- Content-type: multipart/mixed; boundary="xyz"\n
- Subject: This message (#2) also has an empty preamble\n
- \n
- \n
- --xyz\n
- ...
-</PRE></FONT>
-
-<P>In both cases, the <I>first</I> completely-empty line (after the "Subject")
-marks the end of the header.
-
-
-<P>But we should clearly ignore the <I>second</I> empty line in message #2,
-since it fills the role of <I>"the newline which is only there to make
-sure that the boundary is at the beginning of a line"</I>.
-Such newlines are <I>never</I> part of the content preceding the boundary;
-thus, there is no preamble "content" in message #2.
-
-
-<P>However, it seems clear that message #1 <I>also</I> has no preamble
-"content", and is in fact merely a compact representation of an
-empty preamble.
-
-
-
-<P><HR>
-<A NAME="Use_of_a_temp_file_during_parsing"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Use of a temp file during parsing</H3></A>
-
-
-<P><I>Why not do everything in core?</I>
-Although the amount of core available on even a modest home
-system continues to grow, the size of attachments continues
-to grow with it. I wanted to make sure that even users with small
-systems could deal with decoding multi-megabyte sounds and movie files.
-That means not being core-bound.
-
-
-<P>As of the released 5.3xx, MIME::Parser gets by with only
-one temp file open per parser. This temp file provides
-a sort of infinite scratch space for dealing with the current
-message part. It's fast and lightweight, but you should know
-about it anyway.
-
-
-
-<P><HR>
-<A NAME="Why_do_I_assume_that_MIME_objects_are_email_objects"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Why do I assume that MIME objects are email objects?</H3></A>
-
-
-<P>Achim Bohnet once pointed out that MIME headers do nothing more than
-store a collection of attributes, and thus could be represented as
-objects which don't inherit from Mail::Header.
-
-
-<P>I agree in principle, but RFC-1521 says otherwise.
-RFC-1521 [MIME] headers are a syntactic subset of RFC-822 [email] headers.
-Perhaps a better name for these modules would have been RFC1521::
-instead of MIME::, but we're a little beyond that stage now.
-
-
-<P>When I originally wrote these modules for the CPAN, I agonized for a long
-time about whether or not they really should subclass from <B>Mail::Internet</B>
-(then at version 1.17). Thanks to Graham Barr, who graciously evolved
-MailTools 1.06 to be more MIME-friendly, unification was achieved
-at MIME-tools release 2.0.
-The benefits in reuse alone have been substantial.
-
-
-
-<P><HR>
-<A NAME="A_MIME_PRIMER"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> A MIME PRIMER</H2></A>
-
-
-<P>So you need to parse (or create) MIME, but you're not quite up on
-the specifics? No problem...
-
-
-
-<P><HR>
-<A NAME="Glossary"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Glossary</H3></A>
-
-
-<P>Here are some definitions adapted from RFC-1521 explaining the terminology
-we use; each is accompanied by the equivalent in MIME:: module terms...
-
-
-
-<DL>
-<P><DT><B><A NAME="item:attachment">attachment</A></B></DT>
-<DD>
-An "attachment" is common slang for any part of a multipart message --
-except, perhaps, for the first part, which normally carries a user
-message describing the attachments that follow (e.g.: "Hey dude, here's
-that GIF file I promised you.").
-
-
-<P>In our system, an attachment is just a <B>MIME::Entity</B> under the
-top-level entity, probably one of its <A HREF="../MIME/Entity.pm.html#item:parts">parts</A>.
-
-<P><DT><B><A NAME="item:body">body</A></B></DT>
-<DD>
-The "body" of an <A HREF="#item:entity">entity</A> is that portion of the entity
-which follows the <A HREF="#item:header">header</A> and which contains the real message
-content. For example, if your MIME message has a GIF file attachment,
-then the body of that attachment is the base64-encoded GIF file itself.
-
-
-<P>A body is represented by an instance of <B>MIME::Body</B>. You get the
-body of an entity by sending it a <A HREF="../MIME/Entity.pm.html#item:bodyhandle">bodyhandle()</A>
-message.
-
-<P><DT><B><A NAME="item:body_part">body part</A></B></DT>
-<DD>
-One of the parts of the body of a multipart <B>/entity</B>.
-A body part has a <B>/header</B> and a <B>/body</B>, so it makes sense to
-speak about the body of a body part.
-
-
-<P>Since a body part is just a kind of entity, it's represented by
-an instance of <B>MIME::Entity</B>.
-
-<P><DT><B><A NAME="item:entity">entity</A></B></DT>
-<DD>
-An "entity" means either a <B>/message</B> or a <B>/body part</B>.
-All entities have a <B>/header</B> and a <B>/body</B>.
-
-
-<P>An entity is represented by an instance of <B>MIME::Entity</B>.
-There are instance methods for recovering the
-<A HREF="../MIME/Entity.pm.html#item:head">header</A> (a <B>MIME::Head</B>) and the
-<A HREF="../MIME/Entity.pm.html#item:bodyhandle">body</A> (a <B>MIME::Body</B>).
-
-<P><DT><B><A NAME="item:header">header</A></B></DT>
-<DD>
-This is the top portion of the MIME message, which contains the
-"Content-type", "Content-transfer-encoding", etc. Every MIME entity has
-a header, represented by an instance of <B>MIME::Head</B>. You get the
-header of an entity by sending it a head() message.
-
-<P><DT><B><A NAME="item:message">message</A></B></DT>
-<DD>
-A "message" generally means the complete (or "top-level") message being
-transferred on a network.
-
-
-<P>There currently is no explicit package for "messages"; under MIME::,
-messages are streams of data which may be read in from files or
-filehandles. You can think of the <B>MIME::Entity</B> returned by the
-<B>MIME::Parser</B> as representing the full message.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Content_types"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Content types</H3></A>
-
-
-<P>This indicates what kind of data is in the MIME message, usually
-as <I>majortype/minortype</I>. The standard major types are shown below.
-A more-comprehensive listing may be found in RFC-2046.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:application">application</A></B></DT>
-<DD>
-Data which does not fit in any of the other categories, particularly
-data to be processed by some type of application program.
-<CODE>application/octet-stream</CODE>, <CODE>application/gzip</CODE>, <CODE>application/postscript</CODE>...
-
-<P><DT><B><A NAME="item:audio">audio</A></B></DT>
-<DD>
-Audio data.
-<CODE>audio/basic</CODE>...
-
-<P><DT><B><A NAME="item:image">image</A></B></DT>
-<DD>
-Graphics data.
-<CODE>image/gif</CODE>, <CODE>image/jpeg</CODE>...
-
-<P><DT><B><A NAME="item:message">message</A></B></DT>
-<DD>
-A message, usually another mail or MIME message.
-<CODE>message/rfc822</CODE>...
-
-<P><DT><B><A NAME="item:multipart">multipart</A></B></DT>
-<DD>
-A message containing other messages.
-<CODE>multipart/mixed</CODE>, <CODE>multipart/alternative</CODE>...
-
-<P><DT><B><A NAME="item:text">text</A></B></DT>
-<DD>
-Textual data, meant for humans to read.
-<CODE>text/plain</CODE>, <CODE>text/html</CODE>...
-
-<P><DT><B><A NAME="item:video">video</A></B></DT>
-<DD>
-Video or video+audio data.
-<CODE>video/mpeg</CODE>...
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="Content_transfer_encodings"><H3><A HREF="#__TOP__"><IMG SRC="icons/h2bullet.gif" ALT="Top" BORDER="0"></A> Content transfer encodings</H3></A>
-
-
-<P>This is how the message body is packaged up for safe transit.
-There are the 5 major MIME encodings.
-A more-comprehensive listing may be found in RFC-2045.
-
-
-
-<DL>
-<P><DT><B><A NAME="item:7bit">7bit</A></B></DT>
-<DD>
-No encoding is done at all. This label simply asserts that no
-8-bit characters are present, and that lines do not exceed 1000 characters
-in length (including the CRLF).
-
-<P><DT><B><A NAME="item:8bit">8bit</A></B></DT>
-<DD>
-No encoding is done at all. This label simply asserts that the message
-might contain 8-bit characters, and that lines do not exceed 1000 characters
-in length (including the CRLF).
-
-<P><DT><B><A NAME="item:binary">binary</A></B></DT>
-<DD>
-No encoding is done at all. This label simply asserts that the message
-might contain 8-bit characters, and that lines may exceed 1000 characters
-in length. Such messages are the <I>least</I> likely to get through mail
-gateways.
-
-<P><DT><B><A NAME="item:base64">base64</A></B></DT>
-<DD>
-A standard encoding, which maps arbitrary binary data to the 7bit domain.
-Like "uuencode", but very well-defined. This is how you should send
-essentially binary information (tar files, GIFs, JPEGs, etc.).
-
-<P><DT><B><A NAME="item:quoted-printable">quoted-printable</A></B></DT>
-<DD>
-A standard encoding, which maps arbitrary line-oriented data to the
-7bit domain. Useful for encoding messages which are textual in
-nature, yet which contain non-ASCII characters (e.g., Latin-1,
-Latin-2, or any other 8-bit alphabet).
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="TERMS_AND_CONDITIONS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> TERMS AND CONDITIONS</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>Copyright (c) 1998, 1999 by ZeeGee Software Inc (www.zeegee.com).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-See the COPYING file in the distribution for details.
-
-
-
-<P><HR>
-<A NAME="SUPPORT"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SUPPORT</H2></A>
-
-
-<P>Please email me directly with questions/problems (see AUTHOR below).
-
-
-<P>If you want to be placed on an email distribution list (not a mailing list!)
-for MIME-tools, and receive bug reports, patches, and updates as to when new
-MIME-tools releases are planned, just email me and say so. If your project
-is using MIME-tools, it might not be a bad idea to find out about those
-bugs <I>before</I> they become problems...
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$
-
-
-
-<P><HR>
-<A NAME="CHANGE_LOG"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> CHANGE LOG</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Version">Version 5.410 (2000/11/23)</A></B></DT>
-<DD>
-<B>Better detection of evil filenames.</B>
-Now we check for filenames which are suspiciously long,
-and a new MIME::Filer::exorcise_filename() method is used
-to try and remove the evil.
-<I>Thanks to Jason Haar for the suggestion.</I>
-
-<P><DT><B><A NAME="item:Version">Version 5.409 (2000/11/12)</A></B></DT>
-<DD>
-<B>Added functionality to MIME::WordDecoder,</B>
-including support for plain US-ASCII.
-
-
-<P><B>MIME::Tools::tmpopen()</B> made more flexible.
-You can now override the tmpfile-opening behavior.
-
-<P><DT><B><A NAME="item:Version">Version 5.408 (2000/11/10)</A></B></DT>
-<DD>
-<B>Added new Beta unmime() mechanism.</B>
-See <A HREF="../MIME/WordDecoder.pm.html">MIME::WordDecoder</A> for full details.
-Also see <A HREF="#Understand_how_international_characters_are_represented">Understand how international characters are represented</A>.
-
-<P><DT><B><A NAME="item:Version">Version 5.405 (2000/11/05)</A></B></DT>
-<DD>
-<B>Added a purge() that does what people want it to.</B>
-Now, when a parse finishes and you want to delete everything that
-was created by it, you can invoke <CODE>purge()</CODE> on the parser's filer.
-All files/directories created during the last parse should vanish.
-<I>Thanks to everyone who complained about MIME::Entity::purge.</I>
-
-<P><DT><B><A NAME="item:Version">Version 5.404 (2000/11/04)</A></B></DT>
-<DD>
-<B>Added new automatic MIME-decoding of attachment filenames with
-encoded (non-ASCII) characters.</B>
-Hopefully this will do more good than harm.
-The use of MIME::Parser::decode_headers() and MIME::Head::decode()
-has been deprecated in favor of the new MIME::Words "unmime" mechanism.
-Please see <A HREF="../MIME/Words.pm.html#item:unmime">unmime</A>.
-
-
-<P><B>Added tolerance for unquoted =?...?= in param values.</B>
-This is in violation of the RFCs, but then, so are some MUAs.
-<I>Thanks to desti for bringing this to my attention.</I>
-
-
-<P><B>Fixed supposedly-bad B-encoding.</B>
-<I>Thanks to Otto Frost for bringing this to my attention.</I>
-
-<P><DT><B><A NAME="item:Version">Version 5.316 (2000/09/21)</A></B></DT>
-<DD>
-<B>Increased tolerance in MIME::Parser.</B>
-Now will ignore bogus POP3 "+OK" line before header, as well as bogus
-mailbox "From " line (both with warnings).
-<I>Thanks to Antony OSullivan (ajos1) for suggesting this feature.</I>
-
-
-<P><B>Fixed small epilogue-related bug in MIME::Entity::print_body().</B>
-Now it only outputs a final newline if the epilogue does not end
-in one already. Support for checking the preamble/epilogue in
-regression tests was also added.
-<I>Thanks to Lars Hecking for bringing this issue up.</I>
-
-
-<P><B>Updated documentation.</B>
-All module manual pages should now direct readers to the main
-MIME-tools manual page.
-
-<P><DT><B><A NAME="item:Version">Version 5.314 (2000/09/06)</A></B></DT>
-<DD>
-Fixed Makefile.PL to have less-restrictive requirement
-for File::Spec (0.6).
-
-<P><DT><B><A NAME="item:Version">Version 5.313 (2000/09/05)</A></B></DT>
-<DD>
-<B>Fixed nasty bug with evil filenames.</B>
-Certain evil filenames were getting replaced by internally-generated
-filenames which were just as evil... ouch! If your parser occasionally
-throws a fatal exception with a "write-open" error message, then
-you have this bug.
-<I>Thanks to Julian Field and Antony OSullivan (ajos1)
-for delivering the evidence!</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Beware the doctor
- who cures seasonal head cold
- by killing patient
-</PRE></FONT>
-
-<P><B>Improved naming of extracted files.</B>
-If a filename is regarded as evil, we guess that it might just
-be because of part information, and attempt to find and use the
-final path element.
-
-
-<P><B>Simplified message logging and made it more consistent.</B>
-For details, see <A HREF="#Message-logging">Message-logging</A>.
-
-<P><DT><B><A NAME="item:Version">Version 5.312 (2000/09/03)</A></B></DT>
-<DD>
-<B>Fixed a Perl 5.7 select() incompatibility</B>
-which caused "make test" to fail.
-<I>Thanks to Nick Ing-Simmons for the patch.</I>
-
-<P><DT><B><A NAME="item:Version">Version 5.311 (2000/08/16)</A></B></DT>
-<DD>
-<B>Blind fix for Win32 uudecoding bug.</B>
-A missing binmode seems to be the culprit here; let's see if this fixes it.
-<I>Thanks to ajos1 for finding the culprit!</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- The carriage return
- thumbs its nose at me, laughing:
- DOS I/O *still* sucks
-</PRE></FONT>
-<P><DT><B><A NAME="item:Version">Version 5.310 (2000/08/15)</A></B></DT>
-<DD>
-<B>Fixed a bug in the back-compat output_prefix() method of MIME::Parser.</B>
-Basically, output prefixes were not being set through this mechanism.
-<I>Thanks to ajos1 for the alert.</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- shift @_, ### "shift at-underscore"
- or @_ will have
- bogus "self" object
-</PRE></FONT>
-
-<P><B>Added some backcompat methods,</B> like parse_FH().
-<I>Thanks (and apologies) to Alain Kotoujansky.</I>
-
-
-<P><B>Added filenames-with-spaces support to MIME::Decoder::UU.</B>
-<I>Thanks to Richard Pun for the suggestion.</I>
-
-<P><DT><B><A NAME="item:Version">Version 5.305 (2000/07/20)</A></B></DT>
-<DD>
-<B>Added MIME::Entity::parts_DFS</B> as convenient way to "get all parts".
-<I>Thanks to Xavier Armengou for suggesting this method.</I>
-
-
-<P>Removed the Alpha notice.
-Still a few features to tweak, but those will be minor.
-
-<P><DT><B><A NAME="item:Version">Version 5.303 (2000/07/07)</A></B></DT>
-<DD>
-<B>Fixed output bugs in new Filers</B>.
-Scads of them: bad handling of filename collisions, bad implementation
-of output_under(), bad linking to results, POD errors, you name it.
-If this had gone to CPAN, I'd have issued a factory recall. <CODE>:-(</CODE>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Errors, like beetles,
- Multiply ferociously
- In the small hours
-</PRE></FONT>
-<P><DT><B><A NAME="item:Version">Version 5.301 (2000/07/06)</A></B></DT>
-<DD>
-<B>READ ME BEFORE UPGRADING PAST THIS POINT!</B>
-<B>New MIME::Parser::Filer class -- not fully backwards-compatible.</B>
-In response to demand for more-comprehensive file-output strategies,
-I have decided that the best thing to do is to split all the
-file-output logic (output_path(), evil_filename(), etc.)
-into its own separate class, inheriting from the new
-<A HREF="../MIME/Parser/Filer.pm.html">MIME::Parser::Filer</A> class.
-If you <I>override</I> any of the following in a MIME::Parser subclass,
-you will need to change your code accordingly:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- evil_filename
- output_dir
- output_filename
- output_path
- output_prefix
- output_under
-</PRE></FONT>
-
-<P>My sincere apologies for any inconvenience this will cause, but
-it's ultimately for the best, and is quite likely the last structural
-change to 5.x.
-<I>Thanks to Tyson Ackland for all the ideas.</I>
-Incidentally, the new code also fixes a bug where identically-named
-files in the same message could clobber each other.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- A message arrives:
- "Here are three files, all named 'Foo'"
- Only one survives. :-(
-</PRE></FONT>
-
-<P><B>Fixed bug in MIME::Words header decoding.</B>
-Underscores were not being handled properly.
-<I>Thanks to Dominique Unruh and Doru Petrescu,</I> who independently
-submitted the same fix within 2 hours of each other, after this
-bug has lain dormant for months:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Two users, same bug,
- same patch -- mere hours apart:
- Truly, life is odd.
-</PRE></FONT>
-
-<P><B>Removed escaping of underscore in regexps.</B>
-Escaping the underscore (\_) in regexps was sloppy and wrong
-(escaped metacharacters may include anything in \w), and the newest
-Perls warn about it.
-<I>Thanks to David Dyck for bringing this to my attention.</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- What, then, is a word?
- Some letters, digits, and, yes:
- Underscores as well
-</PRE></FONT>
-
-<P><B>Added Force option to MIME::Entity's make_multipart</B>.
-<I>Thanks to Bob Glickstein for suggesting this.</I>
-
-
-<P><B>Numerous fixlets to example code.</B>
-<I>Thanks to Doru Petrescu for these.</I>
-
-
-<P><B>Added REQUIREMENTS section in docs.</B>
-Long-overdue. <I>Thanks to Ingo Schmiegel for motivating this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 5.211 (2000/06/24)</A></B></DT>
-<DD>
-<B>Fixed auto-uudecode bug.</B>
-Parser was failing with "part did not end with expected boundary" error
-when uuencoded entity was a <I>singlepart</I> message (ironically,
-uuencoded parts of multiparts worked fine).
-<I>Thanks to Michael Mohlere for testing uudecode and finding this.</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- The hurrying bee
- Flies far for nectar, missing
- The nearest flowers
-</PRE></FONT>
-<FONT SIZE=3 FACE="courier"><PRE>
- Say ten thousand times:
- Complex cases may succeed
- Where simple ones fail
-</PRE></FONT>
-
-<P><B>Parse errors now generate warnings.</B>
-Parser errors now cause warn()s to be generated if they are
-not turned into fatal exceptions. This might be a little redundant,
-seeing as they are available in the "results", but parser-warnings
-already cause warn()s. I can always put in a "quiet" switch if
-people complain.
-
-
-<P><B>Miscellaneous cleanup.</B>
-Documentation of MIME::Parser improved slightly, and a redundant
-warning was removed.
-
-<P><DT><B><A NAME="item:Version">Version 5.210 (2000/06/20)</A></B></DT>
-<DD>
-<B>Change in "evil" filename.</B>
-Made MIME::Parser's evil_filename stricter by having it reject
-"path" characters: any of '/' '\' ':' '[' ']'.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Just as with beauty
- The eye of the beholder
- Is where "evil" lives.
-</PRE></FONT>
-
-<P><B>Documentation fixes.</B>
-Corrected a number of docs in MIME::Entity which were obsoleted
-in the transition from 4.x to 5.x.
-<I>Thanks to Michael Fischer for pointing these out.</I>
-For this one, a special 5-5-5-5 Haiku of anagrams:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Documentation
- in mutant code, O!
- Edit -- no, CUT! [moan]
- I meant to un-doc...
-</PRE></FONT>
-
-<P><B>IO::Lines usage bug fixed.</B>
-MIME::Entity was missing a "use IO::Lines", which caused an
-exception when you tried to use the body() method of MIME::Entity.
-<I>Thanks to Hideyo Imazu and Michael Fischer for pointing this out.</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Bareword looks fine, but
- Perl cries: "Whoa there... IO::Lines?
- Never heard of it."
-</PRE></FONT>
-<P><DT><B><A NAME="item:Version">Version 5.209 (2000/06/10)</A></B></DT>
-<DD>
-<B>Autodetection of uuencode.</B>
-You can now tell the parser to hunt for uuencode inside what should
-be text parts.
-See <A HREF="../MIME/Parser.pm.html#item:extract_uuencode">extract_uuencode()</A> for full details.
-<B>Beware:</B> this is largely untested at the moment.
-<I>Special thanks to Michael Mohlere at ADJE Webmail, who was the
- first -- and most-insistent -- user to request this feature.</I>
-
-
-<P><B>Faster parsing.</B>
-Sped up the MIME::Decoder::NBit decoder quite a bit by using a variant
-of the chunking trick I used for MIME::Decoder::Base64. I suspect
-that the same trick (reading a big chunk plus the next line to get a
-big block of lines) would work with MIME::Decoder::QuotedPrint, but I
-don't have the time or resources to check that right now (tested
-contributions would be welcome). NBit encoding is more-conveniently
-done line-by-line for now, because individual line lengths must be
-checked.
-
-
-<P><B>Better use of core.</B>
-MIME::Body::InCore is now used when you build() an entity with
-the Data parameter, instead of MIME::Body::Scalar.
-
-
-<P><B>More documentation</B> on toolkit configuration.
-
-<P><DT><B><A NAME="item:Version">Version 5.207 (2000/06/09)</A></B></DT>
-<DD>
-<B>Fixed whine() bug in MIME::Parser</B> where the "warning" method
-whine() was called as a static function instead of invoked as an
-instance method.
-<I>Thanks to Todd A. Bradfute for reporting this.</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- A simple warning
- Invokes method as function:
- "Warning" makes us die
-</PRE></FONT>
-<P><DT><B><A NAME="item:Version">Version 5.206 (2000/06/08)</A></B></DT>
-<DD>
-Ahem. Cough cough:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Way too many bugs
- Thus, a self-imposed penance:
- Write haiku for each
-</PRE></FONT>
-
-<P><B>Fixed bug in MIME::Parser:</B> the reader was not handling the odd
-(but legal) case where a multipart boundary is followed by linear
-whitespace.
-<I>Thanks to Jon Agnew for reporting this with the RFC citation.</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Legal message fails
- And 'round the globe, thousands cry:
- READ THE RFC
-</PRE></FONT>
-
-<P>Empty preambles are now handled properly by MIME::Entity when
-printing: there is now no space between the header-terminator
-and the initial boundary.
-<I>Thanks to "sen_ml" for suggesting this.</I>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Nature hates vacuum
- But please refrain from tossing
- Newlines in the void
-</PRE></FONT>
-
-<P>Started using Benchmark for benchmarking.
-
-<P><DT><B><A NAME="item:Version">Version 5.205 (2000/06/06)</A></B></DT>
-<DD>
-Added terminating newline to all parser messages, and fixed
-small parser bug that was dropping parts when errors occurred
-in certain places.
-
-<P><DT><B><A NAME="item:Version">Version 5.203 (2000/06/05)</A></B></DT>
-<DD>
-Brand new parser based on new (private) MIME::Parser::Reader and
-(public) MIME::Parser::Results. Fast and yet simple and very tolerant
-of bad MIME when desired. Message reporting needs some muzzling.
-
-
-<P>MIME::Parser now has ignore_errors() set true by default.
-
-<P><DT><B><A NAME="item:Version">Version 5.116 (2000/05/26)</A></B></DT>
-<DD>
-Removed Tmpfile.t test, which was causing a bogus failure in
-"make test". Now we require 5.004 for MIME::Parser anyway,
-so we don't need it. <I>Thanks to Jonathan Cohn for reporting this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 5.115 (2000/05/24)</A></B></DT>
-<DD>
-Fixed Ref.t bug, and documented how to remove parts from a MIME::Entity.
-
-<P><DT><B><A NAME="item:Version">Version 5.114 (2000/05/23)</A></B></DT>
-<DD>
-Entity now uses MIME::Lite-style default suggested encoding.
-
-
-<P>More regression test have been added, and the "Size" tests in
-Ref.t are skipped for text document (due to CRLF differences
-between platforms).
-
-<P><DT><B><A NAME="item:Version">Version 5.113 (2000/05/21)</A></B></DT>
-<DD>
-<B>Major speed and structural improvements to the parser.</B>
- <I>Major, MAJOR thanks to Noel Burton-Krahn, Jeremy Gilbert,
- and Doru Petrescu for all the patches, benchmarking,
- and Beta-testing!</I>
-
-
-<P><B>Convenient new one-directory-per-message parsing mechanism.</B>
- Now through <CODE>MIME::Parser</CODE> method <CODE>output_under()</CODE>,
- you can tell the parser that you want it to create
- a unique directory for each message parsed, to hold the
- resulting parts.
-
-
-<P><B>Elimination of $', $` and $&.</B>
- Wow... I still can't believe I missed this. D'OH!
- <I>Thanks to Noel Burton-Krahn for all his patches.</I>
-
-
-<P><B>Parser is more tolerant of weird EOL termination.</B>
- Some mailagents are can terminate lines with "\r\r\n".
- We're okay with that now when we extract the header.
- <I>Thanks to Joao Fonseca for pointing this out.</I>
-
-
-<P><B>Parser is tolerant of "From " lines in headers.</B>
- <I>Thanks to Joachim Wieland, Anthony Hinsinger, Marius Stan,
- and numerous others.</I>
-
-
-<P><B>Parser catches syntax errors in headers.</B>
- <I>Thanks to Russell P. Sutherland for catching this.</I>
-
-
-<P><B>Parser no longer warns when subtype is undefined.</B>
- <I>Thanks to Eric-Olivier Le Bigot for his fix.</I>
-
-
-<P><B>Better integration with Mail::Internet.</B>
- For example, smtpsend() should work fine.
- <I>Thanks to Michael Fischer and others for the patch.</I>
-
-
-<P><B>Miscellaneous cleanup.</B>
- <I>Thanks to Marcus Brinkmann for additional helpful input.</I>
- <I>Thanks to Klaus Seidenfaden for good feedback on 5.x Alpha!</I>
-
-<P><DT><B><A NAME="item:Version">Version 4.123 (1999/05/12)</A></B></DT>
-<DD>
-Cleaned up some of the tests for non-Unix OS'es.
-Will require a few iterations, no doubt.
-
-<P><DT><B><A NAME="item:Version">Version 4.122 (1999/02/09)</A></B></DT>
-<DD>
-<B>Resolved CORE::open warnings for 5.005.</B>
- <I>Thanks to several folks for this bug report.</I>
-
-<P><DT><B><A NAME="item:Version">Version 4.121 (1998/06/03)</A></B></DT>
-<DD>
-<B>Fixed MIME::Words infinite recursion.</B>
- <I>Thanks to several folks for this bug report.</I>
-
-<P><DT><B><A NAME="item:Version">Version 4.117 (1998/05/01)</A></B></DT>
-<DD>
-<B>Nicer MIME::Entity::build.</B>
- No longer outputs warnings with undefined Filename, and now
- accepts Charset as well.
- <I>Thanks to Jason Tibbits III for the inspirational patch.</I>
-
-
-<P><B>Documentation fixes.</B>
- Hopefully we've seen the last of the pod2man warnings...
-
-
-<P><B>Better test logging.</B>
- Now uses ExtUtils::TBone.
-
-<P><DT><B><A NAME="item:Version">Version 4.116 (1998/02/14)</A></B></DT>
-<DD>
-<B>Bug fix:</B>
- MIME::Head and MIME::Entity were not downcasing the
- content-type as they claimed. This has now been fixed.
- <I>Thanks to Rodrigo de Almeida Siqueira for finding this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 4.114 (1998/02/12)</A></B></DT>
-<DD>
-<B>Gzip64-encoding has been improved, and turned off as a default,</B>
- since it depends on having gzip installed.
- See MIME::Decoder::Gzip64 if you want to activate it in your app.
- You can now set up the gzip/gunzip commands to use, as well.
- <I>Thanks to Paul J. Schinder for finding this bug.</I>
-
-<P><DT><B><A NAME="item:Version">Version 4.113 (1998/01/20)</A></B></DT>
-<DD>
-<B>Bug fix:</B>
- MIME::ParserBase was accidentally folding newlines in header fields.
- <I>Thanks to Jason L. Tibbitts III for spotting this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 4.112 (1998/01/17)</A></B></DT>
-<DD>
-<B>MIME::Entity::print_body now recurses</B> when printing multipart
- entities, and prints "everything following the header." This is more
- likely what people expect to happen. PLEASE read the
- "two body problem" section of MIME::Entity's docs.
-
-<P><DT><B><A NAME="item:Version">Version 4.111 (1998/01/14)</A></B></DT>
-<DD>
-Clean build/test on Win95 using 5.004. Whew.
-
-<P><DT><B><A NAME="item:Version">Version 4.110 (1998/01/11)</A></B></DT>
-<DD>
-<B>Added</B> make_multipart() and make_singlepart() in MIME::Entity.
-
-
-<P><B>Improved</B> handling/saving of preamble/epilogue.
-
-<P><DT><B><A NAME="item:Version">Version 4.109 (1998/01/10)</A></B></DT>
-<DD>
-
-
-<DL>
-<P><DT><B><A NAME="item:Overall">Overall</A></B></DT>
-<DD>
-<B>Major version shift to 4.x</B>
- accompanies numerous structural changes, and
- the deletion of some long-deprecated code. Many apologies to those
- who are inconvenienced by the upgrade.
-
-
-<P><B>MIME::IO deprecated.</B>
- You'll see IO::Scalar, IO::ScalarArray, and IO::Wrap
- to make this toolkit work.
-
-
-<P><B>MIME::Entity deep code.</B>
- You can now deep-copy MIME entities (except for on-disk data files).
-
-<P><DT><B><A NAME="item:Encoding_decoding">Encoding/decoding</A></B></DT>
-<DD>
-<B>MIME::Latin1 deprecated, and 8-to-7 mapping removed.</B>
- Really, MIME::Latin1 was one of my more dumber ideas.
- It's still there, but if you want to map 8-bit characters to
- Latin1 ASCII approximations when 7bit encoding, you'll have to
- request it explicitly. <I>But use quoted-printable for your 8-bit
- documents; that's what it's there for!</I>
-
-
-<P><B>7bit and 8bit "encoders" no longer encode.</B>
- As per RFC-2045, these just do a pass-through of the data,
- but they'll warn you if you send bad data through.
-
-
-<P><B>MIME::Entity suggests encoding.</B>
- Now you can ask MIME::Entity's build() method to "suggest"
- a legal encoding based on the body and the content-type.
- No more guesswork! See the "mimesend" example.
-
-
-<P><B>New module structure for MIME::Decoder classes.</B>
- It should be easier for you to see what's happening.
-
-
-<P><B>New MIME decoders!</B>
- Support added for decoding <CODE>x-uuencode</CODE>, and for
- decoding/encoding <CODE>x-gzip64</CODE>. You'll need "gzip" to make
- the latter work.
-
-
-<P><B>Quoted-printable back on track... and then some.</B>
- The 'quoted-printable' decoder now uses the newest MIME::QuotedPrint,
- and amends its output with guideline #8 from RFC2049 (From/.).
- <I>Thanks to Denis N. Antonioli for suggesting this.</I>
-
-<P><DT><B><A NAME="item:Parsing">Parsing</A></B></DT>
-<DD>
-<B>Preamble and epilogue are now saved.</B>
- These are saved in the parsed entities as simple
- string-arrays, and are output by print() if there.
- <I>Thanks to Jason L. Tibbitts for suggesting this.</I>
-
-
-<P><B>The "multipart/digest" semantics are now preserved.</B>
- Parts of digest messages have their mime_type() defaulted
- to "message/rfc822" instead of "text/plain", as per the RFC.
- <I>Thanks to Carsten Heyl for suggesting this.</I>
-
-<P><DT><B><A NAME="item:Output">Output</A></B></DT>
-<DD>
-<B>Well-defined, more-complete print() output.</B>
- When printing an entity, the output is now well-defined if the
- entity came from a MIME::Parser, even if using parse_nested_messages.
- See MIME::Entity for details.
-
-
-<P><B>You can prevent recommended filenames from being output.</B>
- This possible security hole has been plugged; when building MIME
- entities, you can specify a body path but suppress the filename
- in the header.
- <I>Thanks to Jason L. Tibbitts for suggesting this.</I>
-
-<P><DT><B><A NAME="item:Bug_fixes">Bug fixes</A></B></DT>
-<DD>
-<B>Win32 installations should work.</B>
- The binmode() calls should work fine on Win32 now.
- <I>Thanks to numerous folks for their patches.</I>
-
-
-<P><B>MIME::Head::add()</B> now no longer downcases its argument.
- <I>Thanks to Brandon Browning & Jason L. Tibbitts for finding this bug.</I>
-
-</DL>
-
-<P><DT><B><A NAME="item:Version">Version 3.204</A></B></DT>
-<DD>
-<B>Bug in MIME::Head::original_text fixed.</B>
- Well, it took a while, but another bug surfaced from my transition
- from 1.x to 2.x. This method was, quite idiotically, sorting the
- header fields.
- <I>Thanks, as usual, to Andreas Koenig for spotting this one.</I>
-
-
-<P><B>MIME::ParserBase no longer defaults to RFC-1522-decoding headers.</B>
- The documentation correctly stated that the default setting was
- to <I>not</I> RFC-1522-decode the headers. The code, on the other hand,
- was init'ing this parser option in the "on" position.
- This has been fixed.
-
-
-<P><B>MIME::ParserBase::parse_nested_messages reexamined.</B>
- If you use this feature, please re-read the documentation.
- It explains a little more precisely what the ramifications are.
-
-
-<P><B>MIME::Entity tries harder to ensure MIME compliance.</B>
- It is now a fatal error to use certain bad combinations of content
- type and encoding when "building", or to attempt to "attach" to
- anything that is not a multipart document. My apologies if this
- inconveniences anyone, but it was just too darn easy before for folks
- to create bad MIME, and gosh darn it, good libraries should at least
- <I>try</I> to protect you from mistakes.
-
-
-<P><B>The "make" now halts if you don't have the right stuff,</B>
- provided your MakeMaker supports PREREQ_PM. See <A HREF="#REQUIREMENTS">REQUIREMENTS</A>
- for what you need to install this package. I still provide
- old courtesy copies of the MIME:: decoding modules.
-<I>Thanks to Hugo van der Sanden for suggesting this.</I>
-
-
-<P><B>The "make test" is far less chatty.</B>
- Okay, okay, STDERR is evil. Now a <CODE>"make test"</CODE> will just give you
- the important stuff: do a <CODE>"make test TEST_VERBOSE=1"</CODE> if you want
- the gory details (advisable if sending me a bug report).
-<I>Thanks to Andreas Koenig for suggesting this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 3.203</A></B></DT>
-<DD>
-<B>No, there haven't been any major changes between 2.x and 3.x.</B>
- The major-version increase was from a few more tweaks to get $VERSION
- to be calculated better and more efficiently (I had been using RCS
- version numbers in a way which created problems for users of CPAN::).
- After a couple of false starts, all modules have been upgraded to RCS
- 3.201 or higher.
-
-
-<P><B>You can now parse a MIME message from a scalar,</B>
- an array-of-scalars, or any MIME::IO-compliant object (including IO::
- objects.) Take a look at parse_data() in MIME::ParserBase. The
- parser code has been modified to support the MIME::IO interface.
- <I>Thanks to fellow Chicagoan Tim Pierce (and countless others)
- for asking.</I>
-
-
-<P><B>More sensible toolkit configuration.</B>
- A new config() method in MIME::ToolUtils makes a lot of toolkit-wide
- configuration cleaner. Your old calls will still work, but with
- deprecation warnings.
-
-
-<P><B>You can now sign messages</B> just like in Mail::Internet.
- See MIME::Entity for the interface.
-
-
-<P><B>You can now remove signatures from messages</B> just like in Mail::Internet.
- See MIME::Entity for the interface.
-
-
-<P><B>You can now compute/strip content lengths</B>
- and other non-standard MIME fields.
- See sync_headers() in MIME::Entity.
- <I>Thanks to Tim Pierce for bringing the basic problem to my attention.</I>
-
-
-<P><B>Many warnings are now silent unless $^W is true.</B>
- That means unless you run your Perl with <CODE>-w</CODE>, you won't see
- deprecation warnings, non-fatal-error messages, etc.
- But of course you run with <CODE>-w</CODE>, so this doesn't affect you. <CODE>:-)</CODE>
-
-
-<P><B>Completed the 7-bit encodings in MIME::Latin1.</B>
- We hadn't had complete coverage in the conversion from 8- to 7-bit;
- now we do. <I>Thanks to Rolf Nelson for bringing this to my attention.</I>
-
-
-<P><B>Fixed broken parse_two() in MIME::ParserBase.</B>
- BTW, if your code worked with the "broken" code, it should <I>still</I>
- work.
- <I>Thanks again to Tim Pierce for bringing this to my attention.</I>
-
-<P><DT><B><A NAME="item:Version">Version 2.14</A></B></DT>
-<DD>
-Just a few bug fixes to improve compatibility with Mail-Tools 1.08,
-and with the upcoming Perl 5.004 release.
-<I>Thanks to Jason L. Tibbitts III for reporting the problems so quickly.</I>
-
-<P><DT><B><A NAME="item:Version">Version 2.13</A></B></DT>
-<DD>
-
-
-<DL>
-<P><DT><B><A NAME="item:New_features">New features</A></B></DT>
-<DD>
-<B>Added RFC-1522-style decoding of encoded header fields.</B>
- Header decoding can now be done automatically during parsing via the
- new <CODE>decode()</CODE> method in MIME::Head... just tell your parser
- object that you want to <CODE>decode_headers()</CODE>.
- <I>Thanks to Kent Boortz for providing the idea, and the baseline
- RFC-1522-decoding code!</I>
-
-
-<P><B>Building MIME messages is even easier.</B>
- Now, when you use MIME::Entity's <CODE>build()</CODE> or <CODE>attach()</CODE>,
- you can also supply individual
- mail headers to set (e.g., <CODE>-Subject</CODE>, <CODE>-From</CODE>, <CODE>-To</CODE>).
-
-
-<P>Added <CODE>Disposition</CODE> to MIME::Entity's <CODE>build()</CODE> method.
- <I>Thanks to Kurt Freytag for suggesting this feature.</I>
-
-
-<P>An <CODE>X-Mailer</CODE> header is now output
- by default in all MIME-Entity-prepared messages,
- so any bad MIME we generate can be traced back to this toolkit.
-
-
-<P>Added <CODE>purge()</CODE> method to MIME::Entity for deleteing leftover files.
- <I>Thanks to Jason L. Tibbitts III for suggesting this feature.</I>
-
-
-<P>Added <CODE>seek()</CODE> and <CODE>tell()</CODE> methods to built-in MIME::IO classes.
- Only guaranteed to work when reading!
- <I>Thanks to Jason L. Tibbitts III for suggesting this feature.</I>
-
-
-<P>When parsing a multipart message with apparently no boundaries,
- the error message you get has been improved.
- <I>Thanks to Andreas Koenig for suggesting this.</I>
-
-<P><DT><B><A NAME="item:Bug_fixes">Bug fixes</A></B></DT>
-<DD>
-<B>Patched over a Perl 5.002 (and maybe earlier and later) bug involving
-FileHandle::new_tmpfile.</B> It seems that the underlying filehandles
-were not being closed when the FileHandle objects went out of scope!
-There is now an internal routine that creates true FileHandle
-objects for anonymous temp files.
-<I>Thanks to Dragomir R. Radev and Zyx for reporting the weird behavior
-that led to the discovery of this bug.</I>
-
-
-<P>MIME::Entity's <CODE>build()</CODE> method now warns you if you give it an illegal
-boundary string, and substitutes one of its own.
-
-
-<P>MIME::Entity's <CODE>build()</CODE> method now generates safer, fully-RFC-1521-compliant
-boundary strings.
-
-
-<P>Bug in MIME::Decoder's <CODE>install()</CODE> method was fixed.
-<I>Thanks to Rolf Nelson and Nickolay Saukh for finding this.</I>
-
-
-<P>Changed FileHandle::new_tmpfile to FileHandle->new_tmpfile, so some
-Perl installations will be happier.
-<I>Thanks to Larry W. Virden for finding this bug.</I>
-
-
-<P>Gave <CODE>=over</CODE> an arg of 4 in all PODs.
-<I>Thanks to Larry W. Virden for pointing out the problems of bare =over's</I>
-
-</DL>
-
-<P><DT><B><A NAME="item:Version">Version 2.04</A></B></DT>
-<DD>
-<B>A bug in MIME::Entity's output method was corrected.</B>
-MIME::Entity::print now outputs everything to the desired filehandle
-explicitly.
-<I>Thanks to Jake Morrison for pointing out the incompatibility
-with Mail::Header.</I>
-
-<P><DT><B><A NAME="item:Version">Version 2.03</A></B></DT>
-<DD>
-<B>Fixed bug in autogenerated filenames</B> resulting from transposed "if"
-statement in MIME::Parser, removing spurious printing of header as well.
-(Annoyingly, this bug is invisible if debugging is turned on!)
-<I>Thanks to Andreas Koenig for bringing this to my attention.</I>
-
-
-<P>Fixed bug in MIME::Entity::body() where it was using the bodyhandle
-completely incorrectly.
-<I>Thanks to Joel Noble for bringing this to my attention.</I>
-
-
-<P>Fixed MIME::Head::VERSION so CPAN:: is happier.
-<I>Thanks to Larry Virden for bringing this to my attention.</I>
-
-
-<P>Fixed undefined-variable warnings when dumping skeleton
-(happened when there was no Subject: line)
-<I>Thanks to Joel Noble for bringing this to my attention.</I>
-
-<P><DT><B><A NAME="item:Version">Version 2.02</A></B></DT>
-<DD>
-<B>Stupid, stupid bugs in both BASE64 encoding and decoding were fixed.</B>
-<I>Thanks to Phil Abercrombie for locating them.</I>
-
-<P><DT><B><A NAME="item:Version">Version 2.01</A></B></DT>
-<DD>
-<B>Modules now inherit from the new Mail:: modules!</B>
-This means big changes in behavior.
-
-
-<P><B>MIME::Parser can now store message data in-core.</B>
-There were a <I>lot</I> of requests for this feature.
-
-
-<P><B>MIME::Entity can now compose messages.</B>
-There were a <I>lot</I> of requests for this feature.
-
-
-<P>Added option to parse <CODE>"message/rfc822"</CODE> as a pseduo-multipart document.
-<I>Thanks to Andreas Koenig for suggesting this.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.13</A></B></DT>
-<DD>
-MIME::Head now no longer requires space after ":", although
-either a space or a tab after the ":" will be swallowed
-if there.
-<I>Thanks to Igor Starovoitov for pointing out this shortcoming.</I>
-
-<P><DT><B><A NAME="item:Version">Version 1.12</A></B></DT>
-<DD>
-Fixed bugs in parser where CRLF-terminated lines were
-blowing out the handling of preambles/epilogues.
-<I>Thanks to Russell Sutherland for reporting this bug.</I>
-
-
-<P>Fixed idiotic is_multipart() bug.
-<I>Thanks to Andreas Koenig for noticing it.</I>
-
-
-<P>Added untested binmode() calls to parser for DOS, etc.
-systems. No idea if this will work...
-
-
-<P>Reorganized the output_path() methods to allow easy use
-of inheritance, as per Achim Bohnet's suggestion.
-
-
-<P>Changed MIME::Head to report mime_type more accurately.
-
-
-<P>POSIX module no longer loaded by Parser if perl >= 5.002.
-Hey, 5.001'ers: let me know if this breaks stuff, okay?
-
-
-<P>Added unsupported ./examples directory.
-
-<P><DT><B><A NAME="item:Version">Version 1.11</A></B></DT>
-<DD>
-Converted over to using Makefile.PL.
-<I>Thanks to Andreas Koenig for the much-needed kick in the pants...</I>
-
-
-<P>Added t/*.t files for testing. Eeeeeeeeeeeh...it's a start.
-
-
-<P>Fixed bug in default parsing routine for generating
-output paths; it was warning about evil filenames if
-there simply <I>were</I> no recommended filenames. D'oh!
-
-
-<P>Fixed redefined parts() method in Entity.
-
-
-<P>Fixed bugs in Head where field name wasn't being case folded.
-
-<P><DT><B><A NAME="item:Version">Version 1.10</A></B></DT>
-<DD>
-A typo was causing the epilogue of an inner multipart
-message to be swallowed to the end of the OUTER multipart
-message; this has now been fixed.
-<I>Thanks to Igor Starovoitov for reporting this bug.</I>
-
-
-<P>A bad regexp for parameter names was causing
-some parameters to be parsed incorrectly; this has also
-been fixed.
-<I>Thanks again to Igor Starovoitov for reporting this bug.</I>
-
-
-<P>It is now possible to get full control of the filenaming
-algorithm before output files are generated, and the default
-algorithm is safer.
-<I>Thanks to Laurent Amon for pointing out the problems, and suggesting
-some solutions.</I>
-
-
-<P>Fixed illegal "simple" multipart test file. D'OH!
-
-<P><DT><B><A NAME="item:Version">Version 1.9</A></B></DT>
-<DD>
-No changes: 1.8 failed CPAN registration
-
-<P><DT><B><A NAME="item:Version">Version 1.8</A></B></DT>
-<DD>
-Fixed incompatibility with 5.001 and FileHandle::new_tmpfile
-Added COPYING file, and improved README.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>MIME-tools was created by:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ___ _ _ _ _ ___ _
- / _ \| '_| | | |/ _ ' / Eryq, (eryq(a)zeegee.com)
- | __/| | | |_| | |_| | President, ZeeGee Software Inc.
- \___||_| \__, |\__, |__ http://www.zeegee.com/
- |___/ |___/
-</PRE></FONT>
-
-<P>Released as MIME-parser (1.0): 28 April 1996.
-Released as MIME-tools (2.0): Halloween 1996.
-Released as MIME-tools (4.0): Christmas 1997.
-Released as MIME-tools (5.0): Mother's Day 2000.
-
-
-
-<P><HR>
-<A NAME="ACKNOWLEDGMENTS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> ACKNOWLEDGMENTS</H2></A>
-
-
-<P><B>This kit would not have been possible</B> but for the direct
-contributions of the following:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Gisle Aas The MIME encoding/decoding modules.
- Laurent Amon Bug reports and suggestions.
- Graham Barr The new MailTools.
- Achim Bohnet Numerous good suggestions, including the I/O model.
- Kent Boortz Initial code for RFC-1522-decoding of MIME headers.
- Andreas Koenig Numerous good ideas, tons of beta testing,
- and help with CPAN-friendly packaging.
- Igor Starovoitov Bug reports and suggestions.
- Jason L Tibbitts III Bug reports, suggestions, patches.
-</PRE></FONT>
-
-<P>Not to mention the Accidental Beta Test Team, whose bug reports (and
-comments) have been invaluable in improving the whole:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Phil Abercrombie
- Mike Blazer
- Brandon Browning
- Kurt Freytag
- Steve Kilbane
- Jake Morrison
- Rolf Nelson
- Joel Noble
- Michael W. Normandin
- Tim Pierce
- Andrew Pimlott
- Dragomir R. Radev
- Nickolay Saukh
- Russell Sutherland
- Larry Virden
- Zyx
-</PRE></FONT>
-
-<P>Please forgive me if I've accidentally left you out.
-Better yet, email me, and I'll put you in.
-
-
-
-<P><HR>
-<A NAME="SEE_ALSO"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SEE ALSO</H2></A>
-
-
-<P>At the time of this writing ($Date$), the MIME-tools homepage was
-<I><FILE><A HREF="http://www.zeegee.com/code/perl/MIME-tools">http://www.zeegee.com/code/perl/MIME-tools</A></FILE></I>.
-Check there for updates and support.
-
-
-<P>Users of this toolkit may wish to read the documentation of Mail::Header
-and Mail::Internet.
-
-
-<P>The MIME format is documented in RFCs 1521-1522, and more recently
-in RFCs 2045-2049.
-
-
-<P>The MIME header format is an outgrowth of the mail header format
-documented in RFC 822.
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:31 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/WordDecoder.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/WordDecoder.pm.html
deleted file mode 100644
index 37467e8..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/WordDecoder.pm.html
+++ /dev/null
@@ -1,274 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::WordDecoder</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::WordDecoder</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<LI> <A HREF="#SUBCLASSES">SUBCLASSES</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::WordDecoder - decode RFC-1522 encoded words to a local representation
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>See <A HREF="../MIME/Words.pm.html">MIME::Words</A> for the basics of encoded words.
-See <A HREF="#DESCRIPTION">DESCRIPTION</A> for how this class works.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::WordDecoder;
-
-
- ### Get the default word-decoder (used by unmime()):
- $wd = default MIME::WordDecoder;
-
- ### Get a word-decoder which maps to ISO-8859-1 (Latin1):
- $wd = supported MIME::WordDecoder "ISO-8859-1";
-
-
- ### Decode a MIME string (e.g., into Latin1) via the default decoder:
- $str = $wd->decode('To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld>');
-
- ### Decode a string using the default decoder, non-OO style:
- $str = unmime('To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld>');
-
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>A MIME::WordDecoder consists, fundamentally, of a hash which maps
-a character set name (US-ASCII, ISO-8859-1, etc.) to a subroutine which
-knows how to take bytes in that character set and turn them into
-the target string representation. Ideally, this target representation
-would be Unicode, but we don't want to overspecify the translation
-that takes place: if you want to convert MIME strings directly to Big5,
-that's your own decision.
-
-
-<P>The subroutine will be invoked with two arguments: DATA (the data in
-the given character set), and CHARSET (the upcased character set name).
-
-
-<P>For example:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Keep 7-bit characters as-is, convert 8-bit characters to '#':
- sub keep7bit {
- local $_ = shift;
- tr/\x00-\x7F/#/c;
- $_;
- }
-</PRE></FONT>
-
-<P>Here's a decoder which uses that:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Construct a decoder:
- $wd = MIME::WordDecoder->new({'US-ASCII' => "KEEP", ### sub { $_[0] }
- 'ISO-8859-1' => \&keep7bit,
- 'ISO-8859-2' => \&keep7bit,
- 'Big5' => "WARN",
- '*' => "DIE"});
-
- ### Convert some MIME text to a pure ASCII string...
- $ascii = $wd->decode('To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld>');
-
- ### ...which will now hold: "To: Keld J#rn Simonsen <keld>"
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:default">default [DECODER]</A></B></DT>
-<DD>
-<I>Class method.</I>
-Get/set the default DECODER object.
-
-<P><DT><B><A NAME="item:supported">supported CHARSET, [DECODER]</A></B></DT>
-<DD>
-<I>Class method.</I>
-If just CHARSET is given, returns a decoder object which maps
-data into that character set (the character set is forced to
-all-uppercase).
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $wd = supported MIME::WordDecoder "ISO-8859-1";
-</PRE></FONT>
-
-<P>If DECODER is given, installs such an object:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- MIME::WordDecoder->supported("ISO-8859-1" =>
- (new MIME::WordDecoder::ISO_8859 "1"));
-</PRE></FONT>
-
-<P>You should not override this method.
-
-<P><DT><B><A NAME="item:new">new [\@HANDLERS]</A></B></DT>
-<DD>
-<I>Class method, constructor.</I>
-If \@HANDLERS is given, then @HANDLERS is passed to handler()
-to initiallize the internal map.
-
-<P><DT><B><A NAME="item:handler">handler CHARSET=>\&SUBREF, ...</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Set the handler SUBREF for a given CHARSET, for as many pairs
-as you care to supply.
-
-
-<P>When performing the translation of a MIME-encoded string, a
-given SUBREF will be invoked when translating a block of text
-in character set CHARSET. The subroutine will be invoked with
-the following arguments:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- DATA - the data in the given character set.
- CHARSET - the upcased character set name, which may prove useful
- if you are using the same SUBREF for multiple CHARSETs.
- DECODER - the decoder itself, if it contains configuration information
- that your handler function needs.
-</PRE></FONT>
-
-<P>For example:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $wd = new MIME::WordDecoder;
- $wd->handler('US-ASCII' => "KEEP");
- $wd->handler('ISO-8859-1' => \&handle_latin1,
- 'ISO-8859-2' => \&handle_latin1,
- '*' => "DIE");
-</PRE></FONT>
-
-<P>Notice that, much as with %SIG, the SUBREF can also be taken from
-a set of special keywords:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- KEEP Pass data through unchanged.
- IGNORE Ignore data in this character set, without warning.
- WARN Ignore data in this character set, with warning.
- DIE Fatal exception with "can't handle character set" message.
-</PRE></FONT>
-
-<P>The subroutine for the special CHARSET of 'raw' is used for raw
-(non-MIME-encoded) text, which is supposed to be US-ASCII.
-The handler for 'raw' defaults to whatever was specified for 'US-ASCII'
-at the time of construction.
-
-
-<P>The subroutine for the special CHARSET of '*' is used for any
-unrecognized character set. The default action for '*' is WARN.
-
-<P><DT><B><A NAME="item:decode">decode STRING</A></B></DT>
-<DD>
-<I>Instance method.</I>
-Decode a STRING which might contain MIME-encoded components into a
-local representation (e.g., UTF-8, etc.).
-
-<P><DT><B><A NAME="item:unmime">unmime STRING</A></B></DT>
-<DD>
-<I>Function, exported.</I>
-Decode the given STRING using the default() decoder.
-See <A HREF="#item:default">default()</A>.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="SUBCLASSES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SUBCLASSES</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:MIME_WordDecoder_ISO_8859">MIME::WordDecoder::ISO_8859</A></B></DT>
-<DD>
-A simple decoder which keeps US-ASCII and the 7-bit characters
-of ISO-8859 character sets and UTF8, and also keeps 8-bit
-characters from the indicated character set.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Construct:
- $wd = new MIME::WordDecoder::ISO_8859 2; ### ISO-8859-2
-
- ### What to translate unknown characters to (can also use empty):
- ### Default is "?".
- $wd->unknown("?");
-
- ### Collapse runs of unknown characters to a single unknown()?
- ### Default is false.
- $wd->collapse(1);
-</PRE></FONT>
-
-<P>According to <B>http://czyborra.com/charsets/iso8859.html</B>
-(ca. November 2000):
-
-
-<P>ISO 8859 is a full series of 10 (and soon even more) standardized
-multilingual single-byte coded (8bit) graphic character sets for
-writing in alphabetic languages:
-
-<P><OL><LI>Latin1 (West European) <LI>Latin2 (East European) <LI>Latin3 (South European) <LI>Latin4 (North European) <LI>Cyrillic <LI>Arabic <LI>Greek <LI>Hebrew <LI>Latin5 (Turkish) <LI>Latin6 (Nordic) </OL>
-<P>The ISO 8859 charsets are not even remotely as complete as the truly
-great Unicode but they have been around and usable for quite a while
-(first registered Internet charsets for use with MIME) and have
-already offered a major improvement over the plain 7bit US-ASCII.
-
-
-<P>Characters 0 to 127 are always identical with US-ASCII and the
-positions 128 to 159 hold some less used control characters: the
-so-called C1 set from ISO 6429.
-
-<P><DT><B><A NAME="item:MIME_WordDecoder_US_ASCII">MIME::WordDecoder::US_ASCII</A></B></DT>
-<DD>
-A subclass of the ISO-8859-1 decoder which discards 8-bit characters.
-You're probably better off using ISO-8859-1.
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:42 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Words.pm.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Words.pm.html
deleted file mode 100644
index 4ee9237..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/Words.pm.html
+++ /dev/null
@@ -1,240 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>MIME::Words</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>MIME::Words</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#PUBLIC_INTERFACE">PUBLIC INTERFACE</A>
-<LI> <A HREF="#NOTES">NOTES</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-<LI> <A HREF="#VERSION">VERSION</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>MIME::Words - deal with RFC-1522 encoded words
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Before reading further, you should see <A HREF="../MIME/Tools.pm.html">MIME::Tools</A> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-
-<P>Ready? Ok...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- use MIME::Words qw(:all);
-
- ### Decode the string into another string, forgetting the charsets:
- $decoded = decode_mimewords(
- 'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>',
- );
-
- ### Split string into array of decoded [DATA,CHARSET] pairs:
- @decoded = decode_mimewords(
- 'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>',
- );
-
- ### Encode a single unsafe word:
- $encoded = encode_mimeword("\xABFran\xE7ois\xBB");
-
- ### Encode a string, trying to find the unsafe words inside it:
- $encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB in town");
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Fellow Americans, you probably won't know what the hell this module
-is for. Europeans, Russians, et al, you probably do. <CODE>:-)</CODE>.
-
-
-<P>For example, here's a valid MIME header you might get:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- From: =?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>
- To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>
- CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
- =?US-ASCII?Q?.._cool!?=
-</PRE></FONT>
-
-<P>The fields basically decode to (sorry, I can only approximate the
-Latin characters with 7 bit sequences /o and 'e):
-
-<FONT SIZE=3 FACE="courier"><PRE>
- From: Keith Moore <moore(a)cs.utk.edu>
- To: Keld J/orn Simonsen <keld(a)dkuug.dk>
- CC: Andr'e Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: If you can read this you understand the example... cool!
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="PUBLIC_INTERFACE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> PUBLIC INTERFACE</H2></A>
-
-
-
-<DL>
-<P><DT><B><A NAME="item:decode_mimewords">decode_mimewords ENCODED, [OPTS...]</A></B></DT>
-<DD>
-<I>Function.</I>
-Go through the string looking for RFC-1522-style "Q"
-(quoted-printable, sort of) or "B" (base64) encoding, and decode them.
-
-
-<P><B>In an array context,</B> splits the ENCODED string into a list of decoded
-<CODE>[DATA, CHARSET]</CODE> pairs, and returns that list. Unencoded
-data are returned in a 1-element array <CODE>[DATA]</CODE>, giving an effective
-CHARSET of <CODE>undef</CODE>.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- $enc = '=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>';
- foreach (decode_mimewords($enc)) {
- print "", ($_[1] || 'US-ASCII'), ": ", $_[0], "\n";
- }
-</PRE></FONT>
-
-<P><B>In a scalar context,</B> joins the "data" elements of the above
-list together, and returns that. <I>Warning: this is information-lossy,</I>
-and probably <I>not</I> what you want, but if you know that all charsets
-in the ENCODED string are identical, it might be useful to you.
-(Before you use this, please see <A HREF="../MIME/WordDecoder.pm.html#item:unmime">unmime</A>,
-which is probably what you want.)
-
-
-<P>In the event of a syntax error, $@ will be set to a description
-of the error, but parsing will continue as best as possible (so as to
-get <I>something</I> back when decoding headers).
-$@ will be false if no error was detected.
-
-
-<P>Any arguments past the ENCODED string are taken to define a hash of options:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Field">Field</A></B></DT>
-<DD>
-Name of the mail field this string came from. <I>Currently ignored.</I>
-
-</DL>
-
-<P><DT><B><A NAME="item:encode_mimeword">encode_mimeword RAW, [ENCODING], [CHARSET]</A></B></DT>
-<DD>
-<I>Function.</I>
-Encode a single RAW "word" that has unsafe characters.
-The "word" will be encoded in its entirety.
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Encode "<<Franc,ois>>":
- $encoded = encode_mimeword("\xABFran\xE7ois\xBB");
-</PRE></FONT>
-
-<P>You may specify the ENCODING (<CODE>"Q"</CODE> or <CODE>"B"</CODE>), which defaults to <CODE>"Q"</CODE>.
-You may specify the CHARSET, which defaults to <CODE>iso-8859-1</CODE>.
-
-<P><DT><B><A NAME="item:encode_mimewords">encode_mimewords RAW, [OPTS]</A></B></DT>
-<DD>
-<I>Function.</I>
-Given a RAW string, try to find and encode all "unsafe" sequences
-of characters:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- ### Encode a string with some unsafe "words":
- $encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB");
-</PRE></FONT>
-
-<P>Returns the encoded string.
-Any arguments past the RAW string are taken to define a hash of options:
-
-
-
-<DL>
-<P><DT><B><A NAME="item:Charset">Charset</A></B></DT>
-<DD>
-Encode all unsafe stuff with this charset. Default is 'ISO-8859-1',
-a.k.a. "Latin-1".
-
-<P><DT><B><A NAME="item:Encoding">Encoding</A></B></DT>
-<DD>
-The encoding to use, <CODE>"q"</CODE> or <CODE>"b"</CODE>. The default is <CODE>"q"</CODE>.
-
-<P><DT><B><A NAME="item:Field">Field</A></B></DT>
-<DD>
-Name of the mail field this string will be used in. <I>Currently ignored.</I>
-
-</DL>
-
-
-<P><B>Warning:</B> this is a quick-and-dirty solution, intended for character
-sets which overlap ASCII. <B>It does not comply with the RFC-1522
-rules regarding the use of encoded words in message headers</B>.
-You may want to roll your own variant,
-using <CODE>encoded_mimeword()</CODE>, for your application.
-<I>Thanks to Jan Kasprzak for reminding me about this problem.</I>
-
-</DL>
-
-
-
-<P><HR>
-<A NAME="NOTES"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NOTES</H2></A>
-
-
-<P>Exports its principle functions by default, in keeping with
-MIME::Base64 and MIME::QuotedPrint.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq (<I><FILE><A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A></FILE></I>), ZeeGee Software Inc (<I><FILE><A HREF="http://www.zeegee.com">http://www.zeegee.com</A></FILE></I>).
-
-
-<P>All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-<P>Thanks also to...
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Kent Boortz For providing the idea, and the baseline
- RFC-1522-decoding code!
- KJJ at PrimeNet For requesting that this be split into
- its own module.
- Stephane Barizien For reporting a nasty bug.
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="VERSION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> VERSION</H2></A>
-
-
-<P>$Revision$ $Date$
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:44 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/h1bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/h1bullet.gif
deleted file mode 100644
index 8698643..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/h1bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/h2bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/h2bullet.gif
deleted file mode 100644
index d26510c..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/h2bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/zeegee.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/zeegee.gif
deleted file mode 100644
index f6001a5..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/MIME/icons/zeegee.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/h1bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/h1bullet.gif
deleted file mode 100644
index 8698643..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/h1bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/h2bullet.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/h2bullet.gif
deleted file mode 100644
index d26510c..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/h2bullet.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/zeegee.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/zeegee.gif
deleted file mode 100644
index f6001a5..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/icons/zeegee.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index-menu.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index-menu.html
deleted file mode 100644
index 46ac29c..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index-menu.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<HTML>
-<HEAD>
-<TITLE>perlmod</TITLE>
-</HEAD>
-<BODY BGCOLOR="#FFFFFF" LINK="#CC3366" ALINK="#FF6666" VLINK="#993366">
-<FONT FACE="sans-serif"><TABLE>
-
-<TR VALIGN="TOP"><TH ALIGN="LEFT"><FONT FACE="sans-serif"><B>Overview</B></FONT></TH>
-<TR VALIGN="TOP"><TD><A HREF="MIME/Tools.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Tools</FONT></A></TD></TR>
-</TABLE>
-<HR>
-<TABLE>
-
-<TR VALIGN="TOP"><TH ALIGN="LEFT"><FONT FACE="sans-serif"><B>Modules</B></FONT></TH>
-<TR VALIGN="TOP"><TD><A HREF="MIME/Body.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Body</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Decoder.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Decoder</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Decoder/Base64.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Decoder::Base64</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Decoder/Binary.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Decoder::Binary</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Decoder/Gzip64.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Decoder::Gzip64</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Decoder/NBit.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Decoder::NBit</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Decoder/QuotedPrint.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Decoder::QuotedPrint</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Decoder/UU.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Decoder::UU</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Entity.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Entity</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Field/ConTraEnc.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Field::ConTraEnc</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Field/ContDisp.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Field::ContDisp</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Field/ContType.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Field::ContType</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Field/ParamVal.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Field::ParamVal</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Head.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Head</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Parser.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Parser</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Parser/Filer.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Parser::Filer</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Parser/Reader.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Parser::Reader</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Parser/Results.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Parser::Results</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/WordDecoder.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::WordDecoder</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="MIME/Words.pm.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">MIME::Words</FONT></A></TD></TR>
-</TABLE>
-<HR>
-<TABLE>
-
-<TR VALIGN="TOP"><TH ALIGN="LEFT"><FONT FACE="sans-serif"><B>Examples</B></FONT></TH>
-<TR VALIGN="TOP"><TD><A HREF="mimeabuse.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimeabuse</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimedump.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimedump</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimeencode.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimeencode</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimeexplode.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimeexplode</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimepostcard.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimepostcard</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimeprint.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimeprint</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimeref.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimeref</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimesend.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimesend</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimesender.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimesender</FONT></A></TD></TR>
-
-<TR VALIGN="TOP"><TD><A HREF="mimetour.html" TARGET="perlmod.content"><FONT SIZE="-1" FACE="sans-serif">mimetour</FONT></A></TD></TR>
-</TABLE>
-<HR>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.html
deleted file mode 100644
index 3500af8..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.html
+++ /dev/null
@@ -1,13 +0,0 @@
-<HEAD>
-<TITLE>perlmod</TITLE>
-</HEAD>
-<FRAMESET COLS="20%,*" BORDER=1 FRAMEBORDER=1 FRAMESPACING=10>
- <FRAME NAME="perlmod.menu" SRC="index-menu.html">
- <FRAME NAME="perlmod.content" SRC="MIME/Tools.pm.html">
-</FRAMESET>
-
-<NOFRAMES>
- <BODY>
- Go <A HREF="menu.html">here</A>
- </BODY>
-</NOFRAMES>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.menu b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.menu
deleted file mode 100644
index 3e9f047..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/index.menu
+++ /dev/null
@@ -1,101 +0,0 @@
-MENU perlmod
-
-SECTION Overview
-
-ITEM MIME::Tools
-HREF MIME/Tools.pm.html
-
-SECTION Modules
-
-ITEM MIME::Body
-HREF MIME/Body.pm.html
-
-ITEM MIME::Decoder
-HREF MIME/Decoder.pm.html
-
-ITEM MIME::Decoder::Base64
-HREF MIME/Decoder/Base64.pm.html
-
-ITEM MIME::Decoder::Binary
-HREF MIME/Decoder/Binary.pm.html
-
-ITEM MIME::Decoder::Gzip64
-HREF MIME/Decoder/Gzip64.pm.html
-
-ITEM MIME::Decoder::NBit
-HREF MIME/Decoder/NBit.pm.html
-
-ITEM MIME::Decoder::QuotedPrint
-HREF MIME/Decoder/QuotedPrint.pm.html
-
-ITEM MIME::Decoder::UU
-HREF MIME/Decoder/UU.pm.html
-
-ITEM MIME::Entity
-HREF MIME/Entity.pm.html
-
-ITEM MIME::Field::ConTraEnc
-HREF MIME/Field/ConTraEnc.pm.html
-
-ITEM MIME::Field::ContDisp
-HREF MIME/Field/ContDisp.pm.html
-
-ITEM MIME::Field::ContType
-HREF MIME/Field/ContType.pm.html
-
-ITEM MIME::Field::ParamVal
-HREF MIME/Field/ParamVal.pm.html
-
-ITEM MIME::Head
-HREF MIME/Head.pm.html
-
-ITEM MIME::Parser
-HREF MIME/Parser.pm.html
-
-ITEM MIME::Parser::Filer
-HREF MIME/Parser/Filer.pm.html
-
-ITEM MIME::Parser::Reader
-HREF MIME/Parser/Reader.pm.html
-
-ITEM MIME::Parser::Results
-HREF MIME/Parser/Results.pm.html
-
-ITEM MIME::WordDecoder
-HREF MIME/WordDecoder.pm.html
-
-ITEM MIME::Words
-HREF MIME/Words.pm.html
-
-SECTION Examples
-
-ITEM mimeabuse
-HREF mimeabuse.html
-
-ITEM mimedump
-HREF mimedump.html
-
-ITEM mimeencode
-HREF mimeencode.html
-
-ITEM mimeexplode
-HREF mimeexplode.html
-
-ITEM mimepostcard
-HREF mimepostcard.html
-
-ITEM mimeprint
-HREF mimeprint.html
-
-ITEM mimeref
-HREF mimeref.html
-
-ITEM mimesend
-HREF mimesend.html
-
-ITEM mimesender
-HREF mimesender.html
-
-ITEM mimetour
-HREF mimetour.html
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeabuse.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeabuse.html
deleted file mode 100644
index 36f0268..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeabuse.html
+++ /dev/null
@@ -1,52 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimeabuse</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimeabuse</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimeabuse - try hard to break MIME parsing
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This is meant to be run from the MIME-tools distribution directory
-as a test. It will attempt to parse the same several messages 1000
-times each. It does a purge after each parse, so it shouldn't fill up
-your disk; however, it should be a good test for hitting resource
-limits.
-
-
-<P>I wrote this after I discovered that, under Perl 5.002 at least,
-FileHandle->new_tmpfile returned an object that did not get
-destructed automatically when it exited scope. :-(
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:46 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimedump.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimedump.html
deleted file mode 100644
index 8388a62..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimedump.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimedump</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimedump</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimedump - dump out the contents of a parsed MIME message
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Read a MIME stream from the stdin, and dump its contents to the stdout.
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimedump < mime.msg
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Andreas Koenig suggested this, and wrote the original code.
-Eryq perverted the hell out of it.
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:48 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeencode.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeencode.html
deleted file mode 100644
index b34d070..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeencode.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimeencode</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimeencode</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimeencode - encode a file
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimeencode
- Give usage.
-
- mimeencode [-d] encoding <infile >outfile
- Encode/decode stdin to stdout.
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Encode (or, with -d, decode) stdin with the given encoding,
-writing results to stdout.
-
-This does not do MIME parsing; it merely exercises the decoder
-modules.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:51 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeexplode.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeexplode.html
deleted file mode 100644
index daddb78..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeexplode.html
+++ /dev/null
@@ -1,86 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimeexplode</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimeexplode</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#COMMAND_LINE_OPTIONS">COMMAND LINE OPTIONS</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimeexplode - explode one or more MIME messages
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimeexplode <mime-msg-file> <mime-msg-file> ...
-
- someprocess | mimeexplode -
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Takes one or more files from the command line that contain MIME
-messages, and explodes their contents out into subdirectories
-of the current working directory. The subdirectories are
-just called <CODE>msg0</CODE>, <CODE>msg1</CODE>, <CODE>msg2</CODE>, etc. Existing directories are
-skipped over.
-
-
-<P>The message information is output to the stdout, like this:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- Message: msg3 (inputfile1.msg)
- Part: msg3/filename-1.dat (text/plain)
- Part: msg3/filename-2.dat (text/plain)
- Message: msg5 (input-file2.msg)
- Part: msg5/dir.gif (image/gif)
- Part: msg5/face.jpg (image/jpeg)
- Message: msg6 (infile3)
- Part: msg6/filename-1.dat (text/plain)
-</PRE></FONT>
-
-<P>This was written as an example of the MIME:: modules in the
-MIME-parser package I wrote. It may prove useful as a quick-and-dirty
-way of splitting a MIME message if you need to decode something, and
-you don't have a MIME mail reader on hand.
-
-
-
-<P><HR>
-<A NAME="COMMAND_LINE_OPTIONS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> COMMAND LINE OPTIONS</H2></A>
-
-
-<P>None yet.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq <CODE>eryq(a)zeegee.com</CODE>, in a big hurry...
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:12:55 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimepostcard.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimepostcard.html
deleted file mode 100644
index 2d18bc2..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimepostcard.html
+++ /dev/null
@@ -1,60 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimepostcard</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimepostcard</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimepostcard - send/output a multipart/alternative message
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Usage:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimepostcard /path/to/some/graphic.jpg to(a)addr.com
-</PRE></FONT>
-
-<P>You can point it at a .gif file as well.
-The special address "-" just causes the message to go to STDOUT.
-
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This sends a mesasge both as HTML and plain text.
-I use "Data"; you would probably use "Path".
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:13:00 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeprint.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeprint.html
deleted file mode 100644
index 871fec6..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeprint.html
+++ /dev/null
@@ -1,63 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimeprint</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimeprint</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimeprint - parse a MIME stream, and print the parsed entity
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimeprint
- Give usage.
-
- mimeprint [options] infile
- Parse a MIME stream from infile (- means stdin), and print
- entity to stdout.
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Parse a MIME stream, and output the resulting entity. This is
-a nice way of eyeballing whether or not MIME-tools "understood"
-your MIME message.
-
-
-<P>Due to nonuniqueness of MIME encodings, there is a very good chance
-that your output will not <I>exactly</I> resemble your input.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:13:03 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeref.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeref.html
deleted file mode 100644
index 99e092e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimeref.html
+++ /dev/null
@@ -1,64 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimeref</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimeref</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimeref - create a .ref file for a message
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Usage:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimeref [-options] *.msg
-</PRE></FONT>
-
-<P>Options:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- -d DIR Output directory for parser (default is ./testout/mimeref)
- -w Write the .ref file
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Parse a message file, and spit out a .ref file.
-The .ref files are not really useful; they're just used by
-the t/Ref.t test.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:13:07 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesend.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesend.html
deleted file mode 100644
index e56545e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesend.html
+++ /dev/null
@@ -1,61 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimesend</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimesend</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#USAGE">USAGE</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimesend - send files via MIME mail, from the command line
-
-
-
-<P><HR>
-<A NAME="USAGE"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> USAGE</H2></A>
-
-
-<P>Pretty basic:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimesend [-n] [-t to] [-s subj] (-f file [-m type])+
- -n Don't actually send it; just print it to stdout.
- -t to The "to" address.
- -s subj The subject of the message.
- -f file Path to attached file.
- -m type MIME type of last -f file.
-</PRE></FONT>
-
-<P>For example:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimesend -t you(a)yourhost.com -s "Hello, nurse!"
- -f greetings.htm -f foo.gif
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com
-
-
-<P>8 Jan 1997
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:13:10 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesender.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesender.html
deleted file mode 100644
index e16f9c9..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimesender.html
+++ /dev/null
@@ -1,56 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimesender</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimesender</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimesender - an example of integrating MIME-tools with Mail::Send.
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-
-<P>Usage:
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimesender YOU(a)YOUR.HOST
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>This just fakes up a little message and sends it by using Mail::Send
-and the 'sendmail' handler.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com.
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:13:12 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimetour.html b/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimetour.html
deleted file mode 100644
index 80bf546..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/docs/mimetour.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<HTML>
-<HEAD>
- <TITLE>mimetour</TITLE>
-</HEAD>
-<BODY
- bgcolor="#FFFFFF" link="#CC3366" vlink="#993366" alink="#FF6666">
-<FONT FACE="sans-serif" SIZE=-1><A HREF="http://www.zeegee.com" TARGET="_top"><IMG SRC="icons/zeegee.gif" ALT="ZeeGee Software" ALIGN="RIGHT" BORDER="0"></A><A NAME="__TOP__"><H1>mimetour</H1>
-</A>
-<P><B>This module is <FONT COLOR="#990000">BETA</FONT> code, which means that the interfaces are fairly stable BUT it has not been out in the community long enough to guarantee much testing. Use with caution! Please report any errors back to <A HREF="mailto:eryq@zeegee.com">eryq(a)zeegee.com</A> as soon as you can.</B><UL>
-<LI> <A HREF="#NAME">NAME</A>
-<LI> <A HREF="#SYNOPSIS">SYNOPSIS</A>
-<LI> <A HREF="#DESCRIPTION">DESCRIPTION</A>
-<LI> <A HREF="#AUTHOR">AUTHOR</A>
-</UL>
-</A>
-
-<P><HR>
-<A NAME="NAME"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> NAME</H2></A>
-
-
-<P>mimetour - tour the possible encodings
-
-
-
-<P><HR>
-<A NAME="SYNOPSIS"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> SYNOPSIS</H2></A>
-
-<FONT SIZE=3 FACE="courier"><PRE>
- mimetour
- Just run it.
-</PRE></FONT>
-
-
-<P><HR>
-<A NAME="DESCRIPTION"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> DESCRIPTION</H2></A>
-
-
-<P>Parse a message into core, and output it in all supported encodings.
-
-
-
-<P><HR>
-<A NAME="AUTHOR"><H2><A HREF="#__TOP__"><IMG SRC="icons/h1bullet.gif" ALT="Top" BORDER="0"></A> AUTHOR</H2></A>
-
-
-<P>Eryq, eryq(a)zeegee.com
-
-<P><HR>
-<ADDRESS><FONT SIZE=-1>
-Generated Thu Nov 23 00:13:14 2000 by cvu_pod2html
-</FONT></ADDRESS>
-</FONT></BODY>
-</HTML>
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/README b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/README
deleted file mode 100644
index 4a434f5..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/README
+++ /dev/null
@@ -1,10 +0,0 @@
-THE PROGRAMS IN THIS DIRECTORY ARE CURRENTLY UNSUPPORTED EXAMPLES.
-
-Examine them, hack them up, learn from them, etc. They'll be
-nicer in the future, I promise...
-
-Many of these example programs will only work under Unix.
-If you are a Win32 user, stick to examples shown in the modules
-themselves.
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeabuse b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeabuse
deleted file mode 100755
index 7f3232e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeabuse
+++ /dev/null
@@ -1,53 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimeabuse - try hard to break MIME parsing
-
-=head1 DESCRIPTION
-
-This is meant to be run from the MIME-tools distribution directory
-as a test. It will attempt to parse the same several messages 1000
-times each. It does a purge after each parse, so it shouldn't fill up
-your disk; however, it should be a good test for hitting resource
-limits.
-
-I wrote this after I discovered that, under Perl 5.002 at least,
-FileHandle->new_tmpfile returned an object that did not get
-destructed automatically when it exited scope. :-(
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com
-
-=cut
-
-use MIME::Parser;
-# MIME::ToolUtils->debugging(1);
-# MIME::ToolUtils->emulate_tmpfile('CLONE');
-
-my $parser = new MIME::Parser;
-((-d "./testin") && (-d "./testout")) or
- die "run this from the MIME-tools distribution directory";
-$parser->output_dir("./testout");
-$parser->output_to_core("NONE");
-
-foreach $input (
- 'multi-simple.msg',
- 'multi-nested3.msg',
- 'mp-msg-rfc822.msg'
-) {
- $parser->parse_nested_messages($input eq 'mp-msg-rfc822.msg');
-
- for ($i = 0; $i < 1000; $i++) {
- print STDERR "$input: i = $i\n";
-
- open IN, "testin/$input" or die "open testin/$input: $!";
- $entity = $parser->read(\*IN) or die "MIME error";
- close IN;
- $entity->purge;
- }
-}
-
-print "Who-hooo! Done!\n";
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimedump b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimedump
deleted file mode 100755
index 0686615..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimedump
+++ /dev/null
@@ -1,99 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimedump - dump out the contents of a parsed MIME message
-
-=head1 DESCRIPTION
-
-Read a MIME stream from the stdin, and dump its contents to the stdout.
-
-=head1 SYNOPSIS
-
- mimedump < mime.msg
-
-=head1 AUTHOR
-
-Andreas Koenig suggested this, and wrote the original code.
-Eryq perverted the hell out of it.
-
-=cut
-
-use MIME::Parser;
-
-#------------------------------
-#
-# dump_entity ENTITY, NAME
-#
-# Recursive routine for dumping an entity.
-#
-sub dump_entity {
- my ($entity, $name) = @_;
- defined($name) or $name = "'anonymous'";
- my $IO;
-
- # Output the head:
- print "\n", '=' x 60, "\n";
- print "Message $name: ";
- print "\n", '=' x 60, "\n\n";
- print $entity->head->original_text;
- print "\n";
-
- # Output the body:
- my @parts = $entity->parts;
- if (@parts) { # multipart...
- my $i;
- foreach $i (0 .. $#parts) { # dump each part...
- dump_entity($parts[$i], ("$name, part ".(1+$i)));
- }
- }
- else { # single part...
-
- # Get MIME type, and display accordingly...
- my ($type, $subtype) = split('/', $entity->head->mime_type);
- my $body = $entity->bodyhandle;
- if ($type =~ /^(text|message)$/) { # text: display it...
- if ($IO = $body->open("r")) {
- print $_ while (defined($_ = $IO->getline));
- $IO->close;
- }
- else { # d'oh!
- print "$0: couldn't find/open '$name': $!";
- }
- }
- else { # binary: just summarize it...
- my $path = $body->path;
- my $size = ($path ? (-s $path) : '???');
- print ">>> This is a non-text message, $size bytes long.\n";
- print ">>> It is stored in ", ($path ? "'$path'" : 'core'),".\n\n";
- }
- }
- 1;
-}
-
-#------------------------------
-#
-# main
-#
-sub main {
- print STDERR "(reading from stdin)\n" if (-t STDIN);
-
- # Create a new MIME parser:
- my $parser = new MIME::Parser;
-
- # Create and set the output directory:
- (-d "mimedump-tmp") or mkdir "mimedump-tmp",0755 or die "mkdir: $!";
- (-w "mimedump-tmp") or die "can't write to directory";
- $parser->output_dir("mimedump-tmp");
-
- # Read the MIME message:
- $entity = $parser->read(\*STDIN) or die "couldn't parse MIME stream";
-
- # Dump it out:
- dump_entity($entity);
-}
-exit(&main ? 0 : -1);
-
-#------------------------------
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeencode b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeencode
deleted file mode 100755
index dd5532c..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeencode
+++ /dev/null
@@ -1,57 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimeencode - encode a file
-
-=head1 SYNOPSIS
-
- mimeencode
- Give usage.
-
- mimeencode [-d] encoding <infile >outfile
- Encode/decode stdin to stdout.
-
-=head1 DESCRIPTION
-
-Encode (or, with -d, decode) stdin with the given encoding,
-writing results to stdout.
-
-This does not do MIME parsing; it merely exercises the decoder
-modules.
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com
-
-=cut
-
-use lib "./lib";
-use strict;
-use Getopt::Std;
-
-use vars qw($opt_d);
-use MIME::Decoder;
-
-# Usage?
-$ARGV[0] or die <<EOF;
-
-Usage:
- mimeencode [-d] encoding <infile >outfile
-
-EOF
-
-# Args:
-getopts("d");
-my $enc = shift @ARGV;
-
-# Get decoder:
-my $decoder = new MIME::Decoder $enc or die "unsupported encoding ($enc)\n";
-
-# Do it!
-my $action = ($opt_d ? 'decode' : 'encode');
-$decoder->$action(\*STDIN, \*STDOUT);
-
-1;
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeexplode b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeexplode
deleted file mode 100755
index 2557c14..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeexplode
+++ /dev/null
@@ -1,133 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimeexplode - explode one or more MIME messages
-
-=head1 SYNOPSIS
-
- mimeexplode <mime-msg-file> <mime-msg-file> ...
-
- someprocess | mimeexplode -
-
-=head1 DESCRIPTION
-
-Takes one or more files from the command line that contain MIME
-messages, and explodes their contents out into subdirectories
-of the current working directory. The subdirectories are
-just called C<msg0>, C<msg1>, C<msg2>, etc. Existing directories are
-skipped over.
-
-The message information is output to the stdout, like this:
-
- Message: msg3 (inputfile1.msg)
- Part: msg3/filename-1.dat (text/plain)
- Part: msg3/filename-2.dat (text/plain)
- Message: msg5 (input-file2.msg)
- Part: msg5/dir.gif (image/gif)
- Part: msg5/face.jpg (image/jpeg)
- Message: msg6 (infile3)
- Part: msg6/filename-1.dat (text/plain)
-
-This was written as an example of the MIME:: modules in the
-MIME-parser package I wrote. It may prove useful as a quick-and-dirty
-way of splitting a MIME message if you need to decode something, and
-you don't have a MIME mail reader on hand.
-
-=head1 COMMAND LINE OPTIONS
-
-None yet.
-
-=head1 AUTHOR
-
-Eryq C<eryq(a)zeegee.com>, in a big hurry...
-
-=cut
-
-BEGIN { unshift @INC, ".." } # to test MIME:: stuff before installing it!
-
-require 5.001;
-
-use strict;
-use vars qw($Msgno);
-
-use MIME::Parser;
-use Getopt::Std;
-
-#------------------------------------------------------------
-# make_msg - make and return the name of a msgXXX directory
-#------------------------------------------------------------
-$Msgno = 0;
-
-sub make_msg {
- while (-d "msg$Msgno") {
- ++$Msgno;
- die "self-imposed limit reached" if $Msgno == 256;
- }
- mkdir "msg$Msgno",0755 or die "couldn't make msg$Msgno: $!";
- "msg$Msgno";
-}
-
-#------------------------------------------------------------
-# dump_entity - dump an entity's file info
-#------------------------------------------------------------
-sub dump_entity {
- my $ent = shift;
- my @parts = $ent->parts;
-
- if (@parts) { # multipart...
- map { dump_entity($_) } @parts;
- }
- else { # single part...
- print " Part: ", $ent->bodyhandle->path,
- " (", scalar($ent->head->mime_type), ")\n";
- }
-}
-
-#------------------------------------------------------------
-# main
-#------------------------------------------------------------
-sub main {
- my $file;
- my $entity;
-
- # Sanity:
- (-w ".") or die "cwd not writable, you naughty boy...";
-
- # Go through messages:
- @ARGV or unshift @ARGV, "-";
- while (defined($file = shift @ARGV)) {
-
- my $msgdir = make_msg();
- print "Message: $msgdir ($file)\n";
-
- # Create a new parser object:
- my $parser = new MIME::Parser;
- ### $parser->parse_nested_messages('REPLACE');
-
- # Optional: set up parameters that will affect how it extracts
- # documents from the input stream:
- $parser->output_dir($msgdir);
-
- # Parse an input stream:
- open FILE, $file or die "couldn't open $file";
- $entity = $parser->read(\*FILE) or
- print STDERR "Couldn't parse MIME in $file; continuing...\n";
- close FILE;
-
- # Congratulations: you now have a (possibly multipart) MIME entity!
- dump_entity($entity) if $entity;
- ### $entity->dump_skeleton if $entity;
- }
- 1;
-}
-
-exit (&main ? 0 : -1);
-#------------------------------------------------------------
-1;
-
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimepostcard b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimepostcard
deleted file mode 100755
index dd0fe44..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimepostcard
+++ /dev/null
@@ -1,113 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimepostcard - send/output a multipart/alternative message
-
-
-=head1 SYNOPSIS
-
-Usage:
-
- mimepostcard /path/to/some/graphic.jpg to(a)addr.com
-
-You can point it at a .gif file as well.
-The special address "-" just causes the message to go to STDOUT.
-
-
-=head1 DESCRIPTION
-
-This sends a mesasge both as HTML and plain text.
-I use "Data"; you would probably use "Path".
-
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com
-
-
-=cut
-
-use MIME::Entity;
-use strict;
-use Getopt::Std;
-
-$SIG{__DIE__} = sub { die "mime_postcard: $_[0]\n" };
-
-#------------------------------
-# usage
-#------------------------------
-sub usage {
- my $problem = join '',@_;
- print STDERR "\n";
- print STDERR "Error: $problem\n" if $problem;
- my @usage;
- if (open O, '<'.$0){
- local($/) = "\n";
- 1 while (defined($_ = <O>) and !/^=head1\s+SYNOPSIS/);
- push @usage, $_ while (defined($_ = <O>) and !/^=/);
- close O;
- }
- my $u = join '', @usage; $u =~ s/\A\n+//;
- $u =~ s{\n\n+(\s+)}{\n$1}g;
- print STDERR $u, "\n";
- exit -1;
-}
-
-#------------------------------
-# main
-#------------------------------
-sub main {
-
- ### Get options:
- my %opts;
- getopts("", \%opts);
-
- ### Get graphic:
- my $graphic = shift @ARGV || usage "missing path to graphic\n";
- (-r $graphic) or die "$graphic unreadable\n";
- my $graphic_type;
- if ($graphic =~ /\.gif$/i) { $graphic_type = "image/gif" }
- elsif ($graphic =~ /\.jpe?g$/i) { $graphic_type = "image/jpeg" }
- elsif ($graphic =~ /\.png$/i) { $graphic_type = "image/png" }
- else { die "unknown type for: $graphic\n"; }
- my $gid = "my-graphic";
-
- ### Get destination:
- my $dest = shift @ARGV || usage "missing destination\n";
-
- ### The top-level message:
- my $msg = MIME::Entity->build(To => $dest,
- Subject => 'A postcard for you',
- Type => 'multipart/alternative');
-
- ### Alternative #1 is the plain text:
- my $plain = $msg->attach(Type => 'text/plain',
- Data => ["Having a wonderful time... \n",
- "wish you were looking at HTML \n",
- "instead of this boring text!\n"]);
-
- ### Alternative #2 is the HTML-with-content:
- my $fancy = $msg->attach(Type => 'multipart/related');
- $fancy->attach(Type => 'text/html',
- Data => [qq< <H1>Hey there!</H1> \n>,
- qq< Having a <I>wonderful</I> time... \n>,
- qq< take a look!\n >,
- qq< <BR><IMG SRC="cid:$gid" ALT="Snapshot"><HR>>
- ]);
- $fancy->attach(Type => $graphic_type,
- Path => $graphic,
- Id => $gid);
-
- ### Print or send:
- if ($dest eq '-') {
- $msg->print;
- }
- else {
- $msg->smtpsend();
- }
-}
-eval { main() }; die "$0: $@" if $@;
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeprint b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeprint
deleted file mode 100755
index 9e92fc1..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeprint
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimeprint - parse a MIME stream, and print the parsed entity
-
-=head1 SYNOPSIS
-
- mimeprint
- Give usage.
-
- mimeprint [options] infile
- Parse a MIME stream from infile (- means stdin), and print
- entity to stdout.
-
-=head1 DESCRIPTION
-
-Parse a MIME stream, and output the resulting entity. This is
-a nice way of eyeballing whether or not MIME-tools "understood"
-your MIME message.
-
-Due to nonuniqueness of MIME encodings, there is a very good chance
-that your output will not I<exactly> resemble your input.
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com
-
-=cut
-
-use lib "./lib";
-use strict;
-use Getopt::Std;
-
-use vars qw($opt_d $opt_e $opt_h $opt_n $opt_v $opt_s $opt_u);
-use MIME::Parser;
-
-# Usage?
-$ARGV[0] or die <<EOF;
-
-Usage:
- mimeprint [-options] infile
- Parse a MIME stream from infile, and print entity to stdout:
- -d DIR Output parts to disk under this directory.
- -v Verbose output (debugging)
- -e ENCODING Re-encode top-level entity (if not multipart)
- -s Just print the skeleton
-
- -h Decode headers
- -n HOW Parse nested messages [NEST or REPLACE]
- -u Parse uuencode.
-
-EOF
-
-# Args:
-getopts("d:hsve:n:u");
-MIME::Tools->debugging($opt_v);
-
-# Set up parser:
-my $parser = new MIME::Parser;
-if ($opt_d) {
- $parser->output_to_core(0);
- $parser->output_under($opt_d);
-}
-else {
- $parser->output_to_core('ALL');
-}
-$parser->extract_nested_messages($opt_n) if defined($opt_n);
-$parser->extract_uuencode($opt_u || 0);
-$parser->decode_headers($opt_h || 0);
-$parser->ignore_errors(1);
-
-# Parse:
-my $ent = $parser->parse_open($ARGV[0]);
-$ent or die "MIME parsing failed!\n";
-print STDERR $parser->results->msgs;
-if ($opt_e and !$ent->is_multipart) {
- supported MIME::Decoder $opt_e or die "unsupported encoding: $opt_e\n";
- $ent->head->mime_attr("Content-transfer-encoding" => $opt_e);
-}
-($opt_s ? $ent->dump_skeleton(\*STDOUT) : $ent->print(\*STDOUT));
-
-1;
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeref
deleted file mode 100755
index 8a8b3e2..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimeref
+++ /dev/null
@@ -1,145 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimeref - create a .ref file for a message
-
-=head1 SYNOPSIS
-
-Usage:
-
- mimeref [-options] *.msg
-
-Options:
-
- -d DIR Output directory for parser (default is ./testout/mimeref)
- -w Write the .ref file
-
-=head1 DESCRIPTION
-
-Parse a message file, and spit out a .ref file.
-The .ref files are not really useful; they're just used by
-the t/Ref.t test.
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com
-
-=cut
-
-use strict;
-use lib "./lib";
-use MIME::Parser;
-use File::Path;
-use Getopt::Std;
-use Data::Dumper;
-
-### Get options:
-my %opts;
-getopts("d:wv", \%opts) || die "usage error ($!)\n";
-my (@msgs) = @ARGV; @msgs or die "missing message\n";
-
-### Get path to output space:
-my $output_base = $opts{'d'} || "./testout/mimeref";
-(-d $output_base) or mkdir($output_base, 0777) or die "mkdir $output_base: $!\n";
-
-MIME::Tools->debugging($opts{'v'});
-$Data::Dumper::Terse = 1;
-$Data::Dumper::Indent = 1;
-$Data::Dumper::Useqq = 1;
-
-foreach my $msg (@msgs) {
- do_msg($msg);
-}
-exit 0;
-
-
-#------------------------------
-
-sub do_msg {
- my $msg = shift;
-
- ### Create a parser:
- my $parser = new MIME::Parser;
- $parser->output_under($output_base);
- $parser->extract_nested_messages(1);
-
- ### Parse:
- my $ent = eval { $parser->parse_open($msg) || die "parse failed: $!\n"; };
- if (!$ent) {
- rmtree $parser->output_dir;
- die $@;
- }
-
- ### Decompose:
- my $ref = {};
- $ref->{Parser} = {
- Name => "anonymous",
- Message => $msg,
- OutputToCore => $parser->output_to_core,
- ExtractNested => $parser->extract_nested_messages,
- };
- summarize($ref, $ent);
- $ent->dump_skeleton() if $opts{'v'};
-
- if ($opts{'w'}) {
- my $refpath = $msg;
- $refpath =~ s/\.msg$//; $refpath .= ".ref";
- open OUT, ">$refpath" or die "$refpath: $!\n";
- print OUT Dumper($ref);
- close OUT;
- print STDERR "Wrote: $refpath\n";
- }
- else {
- print Dumper($ref);
- }
-
- rmtree $parser->output_dir;
-}
-
-#------------------------------
-sub set {
- my ($hash, $param, $val) = @_;
- if (defined($val)) {
- $hash->{$param} = $val;
- }
-}
-sub c {
- my $x = shift;
- $x =~ s/\r?\n$// if defined($x);
- $x;
-}
-#------------------------------
-sub summarize {
- my ($ref, $ent, $name) = @_;
- $name ||= "Msg";
- my $head = $ent->head;
- $head->unfold;
- my $body = $ent->bodyhandle;
-
- my $sum = {};
- set($sum, From => c($head->get("From", 0)));
- set($sum, To => c($head->get("To", 0)));
- set($sum, Subject => c($head->get("Subject", 0)));
- set($sum, Type => $head->mime_type);
- set($sum, Encoding=> $head->mime_encoding);
- set($sum, Charset => $head->mime_attr("content-type.charset"));
- set($sum, Boundary => $head->multipart_boundary);
- set($sum, Disposition => $head->mime_attr("content-disposition"));
- set($sum, Filename => $head->recommended_filename);
- if ($body and $body->path) {
- set($sum, Size => (-s $body->path));
- }
- $ref->{$name} = $sum;
-
- my $root = (($name eq 'Msg') ? 'Part' : $name);
- for (1 .. $ent->parts) {
- summarize($ref, $ent->parts($_ - 1), "${root}_$_");
- }
-}
-
-1;
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesend b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesend
deleted file mode 100755
index 7c99f54..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesend
+++ /dev/null
@@ -1,150 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimesend - send files via MIME mail, from the command line
-
-=head1 USAGE
-
-Pretty basic:
-
- mimesend [-n] [-t to] [-s subj] (-f file [-m type])+
- -n Don't actually send it; just print it to stdout.
- -t to The "to" address.
- -s subj The subject of the message.
- -f file Path to attached file.
- -m type MIME type of last -f file.
-
-For example:
-
- mimesend -t you(a)yourhost.com -s "Hello, nurse!"
- -f greetings.htm -f foo.gif
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com
-
-8 Jan 1997
-
-=cut
-
-use lib "./lib";
-use MIME::Entity;
-
-# Lookup table:
-my %TypeFor = qw(
- txt text/plain
- sh text/x-sh
- csh text/x-csh
- pm text/x-perl
- pl text/x-perl
- jpg image/jpeg
- jpeg image/jpeg
- gif image/gif
- gif image/gif
- tif image/tiff
- tiff image/tiff
- xbm image/xbm
- );
-
-# Usage:
-@ARGV or die <<EOF;
-Usage:
- mimesend [-t to] [-s subj] (-f file [-m type])+
- -n Don't actually send it; just print it to stdout.
- -t to The "to" address.
- -s subj The subject of the message.
- -f file Path to attached file.
- -m type MIME type of most recent attached file.
-
-EOF
-
-# Type:
-sub type_for {
- my $path = shift;
-
- my ($ext) = ($path =~ /\.([a-z0-9]+)\Z/i);
- ($ext and $TypeFor{lc($ext)}) or
- (-T $path ? 'text/plain' : 'application/octet-stream');
-}
-
-# Get args:
-my $nosend;
-my @files;
-ARG: while (@ARGV) {
- $_ = shift @ARGV;
- /^-n/ and do {
- $nosend = 1;
- next ARG;
- };
- /^-t(.*)/ and do {
- $to = $1 || shift @ARGV;
- next ARG;
- };
- /^-s(.*)/ and do {
- $subj = $1 || shift @ARGV;
- next ARG;
- };
- /^-f(.*)/ and do {
- push @files, [$1||shift @ARGV];
- next ARG;
- };
- /^-m(.*)/ and do {
- $files[-1][1] = $1 || shift @ARGV;
- next ARG;
- };
- die "$0: bad usage: <$_>.\n";
-}
-
-# Verify destination:
-$to or die "$0: missing [-t to]\n";
-
-# Verify subject:
-$subj or die "$0: missing [-s subject]\n";
-
-# Start with top-level entity:
-my $top;
-if (!@files) {
- die "$0: no files specified!\n";
-}
-elsif (@files == 1) {
- my ($path, $type) = @{$files[0]};
-
- # Build:
- $top = build MIME::Entity
- Type => ($type || type_for($path)),
- Path => $path,
- Encoding => '-SUGGEST';
- $top->head->add('To', $to);
- $top->head->add('Subject', $subj);
-}
-else {
-
- # Start with top:
- $top = build MIME::Entity Type=>"multipart/mixed";
- $top->head->add('To', $to);
- $top->head->add('Subject', $subj);
-
- # Attach files:
- foreach (@files) {
- my ($path, $type) = @{$_};
- $top->attach(Type => ($type || type_for($path)),
- Path => $path,
- Encoding => '-SUGGEST');
- }
-}
-
-# Launch mailer and send message?
-if (!$nosend) {
- open SENDMAIL, "|/usr/lib/sendmail -t -oi -oem"
- or die "$0: open sendmail: $!\n";
- $top->print(\*SENDMAIL);
- close SENDMAIL;
- die "sendmail failed" if ($? >> 255);
-}
-else {
- $top->print(\*STDOUT);
-}
-1;
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesender b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesender
deleted file mode 100755
index 860044f..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimesender
+++ /dev/null
@@ -1,48 +0,0 @@
-#!/usr/bin/perl
-
-=head1 NAME
-
-mimesender - an example of integrating MIME-tools with Mail::Send.
-
-=head1 SYNOPSIS
-
-Usage:
-
- mimesender YOU(a)YOUR.HOST
-
-=head1 DESCRIPTION
-
-This just fakes up a little message and sends it by using Mail::Send
-and the 'sendmail' handler.
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com.
-
-=cut
-
-use Mail::Send;
-use MIME::Entity 4.113;
-use File::Spec;
-
-### Args?
-my ($to) = @ARGV;
-$to or die "Usage: mimesender toaddr\n";
-
-### Create MIME entity, with attachment, sent to us:
-my $ent = MIME::Entity->build(From => "secret\(a)admirer.net",
- To => $to,
- Subject => 'Hello there!',
- Data => "Saluations...");
-$ent->attach(Type => 'text/plain',
- Data => "...and Felicitations!");
-
-
-### Send it:
-$sender = new Mail::Send;
-foreach ($ent->head->tags) { # give the sender our headers
- $sender->set($_, map {chomp $_; $_} $ent->head->get($_));
-}
-$fh = $sender->open('sendmail');
-$ent->print_body($fh);
-$fh->close;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimetour b/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimetour
deleted file mode 100755
index b7a0566..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/examples/mimetour
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/perl -w
-
-=head1 NAME
-
-mimetour - tour the possible encodings
-
-=head1 SYNOPSIS
-
- mimetour
- Just run it.
-
-=head1 DESCRIPTION
-
-Parse a message into core, and output it in all supported encodings.
-
-=head1 AUTHOR
-
-Eryq, eryq(a)zeegee.com
-
-=cut
-
-use strict;
-use lib "./lib";
-use MIME::Parser;
-
-# The message:
-my $msg = <<EOF;
-Content-type: text/html
-Content-transfer-encoding: 7bit
-Content-disposition: inline; filename="hello.html"
-
-<P ALIGN=CENTER>
-Hello world!
-</P>
-
-EOF
-
-# Parse:
-my $parser = new MIME::Parser;
-$parser->output_to_core('ALL');
-my $entity = $parser->parse_data($msg);
-
-# Tour:
-my $enc;
-foreach $enc (sort (keys %{supported MIME::Decoder})) {
- print '-'x60, "\n";
- $entity->head->replace('Content-transfer-encoding', $enc);
- $entity->print(\*STDOUT);
- print '-'x60, "\n\n";
-}
-
-1;
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Body.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Body.pm
deleted file mode 100644
index 9a44ddc..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Body.pm
+++ /dev/null
@@ -1,680 +0,0 @@
-package MIME::Body;
-
-
-=head1 NAME
-
-MIME::Body - the body of a MIME message
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Tools> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok...
-
-
-=head2 Obtaining bodies
-
- ### Get the bodyhandle of a MIME::Entity object:
- $body = $entity->bodyhandle;
-
- ### Create a body which stores data in a disk file:
- $body = new MIME::Body::File "/path/to/file";
-
- ### Create a body which stores data in an in-core array:
- $body = new MIME::Body::InCore \@strings;
-
-
-=head2 Opening, closing, and using IO handles
-
- ### Write data to the body:
- $IO = $body->open("w") || die "open body: $!";
- $IO->print($message);
- $IO->close || die "close I/O handle: $!";
-
- ### Read data from the body (in this case, line by line):
- $IO = $body->open("r") || die "open body: $!";
- while (defined($_ = $IO->getline)) {
- ### do stuff
- }
- $IO->close || die "close I/O handle: $!";
-
-
-=head2 Other I/O
-
- ### Dump the ENCODED body data to a filehandle:
- $body->print(\*STDOUT);
-
- ### Slurp all the UNENCODED data in, and put it in a scalar:
- $string = $body->as_string;
-
- ### Slurp all the UNENCODED data in, and put it in an array of lines:
- @lines = $body->as_lines;
-
-
-=head2 Working directly with paths to underlying files
-
- ### Where's the data?
- if (defined($body->path)) { ### data is on disk:
- print "data is stored externally, in ", $body->path;
- }
- else { ### data is in core:
- print "data is already in core, and is...\n", $body->as_string;
- }
-
- ### Get rid of anything on disk:
- $body->purge;
-
-
-=head1 DESCRIPTION
-
-MIME messages can be very long (e.g., tar files, MPEGs, etc.) or very
-short (short textual notes, as in ordinary mail). Long messages
-are best stored in files, while short ones are perhaps best stored
-in core.
-
-This class is an attempt to define a common interface for objects
-which contain message data, regardless of how the data is
-physically stored. The lifespan of a "body" object
-usually looks like this:
-
-=over 4
-
-=item 1.
-
-B<Body object is created by a MIME::Parser during parsing.>
-It's at this point that the actual MIME::Body subclass is chosen,
-and new() is invoked. (For example: if the body data is going to
-a file, then it is at this point that the class MIME::Body::File,
-and the filename, is chosen).
-
-=item 2.
-
-B<Data is written to the body> (usually by the MIME parser) like this:
-The body is opened for writing, via C<open("w")>. This will trash any
-previous contents, and return an "I/O handle" opened for writing.
-Data is written to this I/O handle, via print().
-Then the I/O handle is closed, via close().
-
-=item 3.
-
-B<Data is read from the body> (usually by the user application) like this:
-The body is opened for reading by a user application, via C<open("r")>.
-This will return an "I/O handle" opened for reading.
-Data is read from the I/O handle, via read(), getline(), or getlines().
-Then the I/O handle is closed, via close().
-
-=item 4.
-
-B<Body object is destructed.>
-
-=back
-
-You can write your own subclasses, as long as they follow the
-interface described below. Implementers of subclasses should assume
-that steps 2 and 3 may be repeated any number of times, and in
-different orders (e.g., 1-2-2-3-2-3-3-3-3-3-2-4).
-
-In any case, once a MIME::Body has been created, you ask to open it
-for reading or writing, which gets you an "i/o handle": you then use
-the same mechanisms for reading from or writing to that handle, no matter
-what class it is.
-
-Beware: unless you know for certain what kind of body you have, you
-should I<not> assume that the body has an underlying filehandle.
-
-
-=head1 PUBLIC INTERFACE
-
-=over 4
-
-=cut
-
-
-### Pragmas:
-use strict;
-use vars qw($VERSION);
-
-### System modules:
-use IO::Scalar;
-use Carp;
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-
-#------------------------------
-
-=item new ARGS...
-
-I<Class method, constructor.>
-Create a new body. Any ARGS are sent to init().
-
-=cut
-
-sub new {
- my $self = bless {}, shift;
- $self->init(@_);
- $self;
-}
-
-#------------------------------
-
-=item init ARGS...
-
-I<Instance method, abstract, initiallizer.>
-This is called automatically by C<new()>, with the arguments given
-to C<new()>. The arguments are optional, and entirely up to the
-subclass. The default method does nothing,
-
-=cut
-
-sub init { 1 }
-
-#------------------------------
-
-=item as_lines
-
-I<Instance method.>
-Return the contents of the body as an array of lines (each terminated
-by a newline, with the possible exception of the final one).
-Returns empty on failure (NB: indistinguishable from an empty body!).
-
-Note: the default method gets the data via
-repeated getline() calls; your subclass might wish to override this.
-
-=cut
-
-sub as_lines {
- my $self = shift;
- my @lines;
- my $io = $self->open("r") || return ();
- push @lines, $_ while (defined($_ = $io->getline()));
- $io->close;
- @lines;
-}
-
-#------------------------------
-
-=item as_string
-
-I<Instance method.>
-Return the body data as a string (slurping it into core if necessary).
-Best not to do this unless you're I<sure> that the body is reasonably small!
-Returns empty string for an empty body, and undef on failure.
-
-Note: the default method uses print(), which gets the data via
-repeated read() calls; your subclass might wish to override this.
-
-=cut
-
-sub as_string {
- my $self = shift;
- my $str = '';
- my $out = new IO::Scalar \$str;
- $self->print($out);
- return $str;
-}
-*data = \&as_string; ### silenty invoke preferred usage
-
-
-#------------------------------
-
-=item binmode [ONOFF]
-
-I<Instance method.>
-With argument, flags whether or not open() should return an I/O handle
-which has binmode() activated. With no argument, just returns the
-current value.
-
-=cut
-
-sub binmode {
- my ($self, $onoff) = @_;
- $self->{MB_Binmode} = $onoff if (@_ > 1);
- $self->{MB_Binmode};
-}
-
-#------------------------------
-
-=item dup
-
-I<Instance method.>
-Duplicate the bodyhandle.
-
-I<Beware:> external data in bodyhandles is I<not> copied to new files!
-Changing the data in one body's data file, or purging that body,
-I<will> affect its duplicate. Bodies with in-core data probably need
-not worry.
-
-=cut
-
-sub dup {
- my $self = shift;
- bless { %$self }, ref($self); ### shallow copy ok for ::File and ::Scalar
-}
-
-#------------------------------
-
-=item open READWRITE
-
-I<Instance method, abstract.>
-This should do whatever is necessary to open the body for either
-writing (if READWRITE is "w") or reading (if mode is "r").
-
-This method is expected to return an "I/O handle" object on success,
-and undef on error. An I/O handle can be any object that supports a
-small set of standard methods for reading/writing data.
-See the IO::Handle class for an example.
-
-=cut
-
-sub open {
- undef;
-}
-
-#------------------------------
-
-=item path [PATH]
-
-I<Instance method.>
-If you're storing the body data externally (e.g., in a disk file), you'll
-want to give applications the ability to get at that data, for cleanup.
-This method should return the path to the data, or undef if there is none.
-
-Where appropriate, the path I<should> be a simple string, like a filename.
-With argument, sets the PATH, which should be undef if there is none.
-
-=cut
-
-sub path {
- my $self = shift;
- $self->{MB_Path} = shift if @_;
- $self->{MB_Path};
-}
-
-#------------------------------
-
-=item print FILEHANDLE
-
-I<Instance method.>
-Output the body data to the given filehandle, or to the currently-selected
-one if none is given.
-
-=cut
-
-sub print {
- my ($self, $fh) = @_;
- my $nread;
-
- ### Get output filehandle, and ensure that it's a printable object:
- $fh = IO::Wrap::wraphandle($fh || select);
-
- ### Write it:
- my $buf = '';
- my $io = $self->open("r") || return undef;
- $fh->print($buf) while ($nread = $io->read($buf, 2048));
- $io->close;
- return defined($nread); ### how'd we do?
-}
-
-#------------------------------
-
-=item purge
-
-I<Instance method, abstract.>
-Remove any data which resides external to the program (e.g., in disk files).
-Immediately after a purge(), the path() should return undef to indicate
-that the external data is no longer available.
-
-=cut
-
-sub purge {
- 1;
-}
-
-
-
-=back
-
-=head1 SUBCLASSES
-
-The following built-in classes are provided:
-
- Body Stores body When open()ed,
- class: data in: returns:
- --------------------------------------------------------
- MIME::Body::File disk file IO::Handle
- MIME::Body::Scalar scalar IO::Scalar
- MIME::Body::InCore scalar array IO::ScalarArray
-
-=cut
-
-
-#------------------------------------------------------------
-package MIME::Body::File;
-#------------------------------------------------------------
-
-=head2 MIME::Body::File
-
-A body class that stores the data in a disk file.
-The I/O handle is a wrapped filehandle. Invoke the constructor as:
-
- $body = new MIME::Body::File "/path/to/file";
-
-In this case, the C<path()> method would return the given path,
-so you I<could> say:
-
- if (defined($body->path)) {
- open BODY, $body->path or die "open: $!";
- while (<BODY>) {
- ### do stuff
- }
- close BODY;
- }
-
-But you're best off not doing this.
-
-=cut
-
-
-### Pragmas:
-use vars qw(@ISA);
-use strict;
-
-### System modules:
-require FileHandle;
-
-### Kit modules:
-use MIME::Tools qw(whine);
-use IO::Wrap;
-
-@ISA = qw(MIME::Body);
-
-
-#------------------------------
-# init PATH
-#------------------------------
-sub init {
- my ($self, $path) = @_;
- $self->path($path); ### use it as-is
- $self;
-}
-
-#------------------------------
-# open READWRITE
-#------------------------------
-sub open {
- my ($self, $mode) = @_;
- my $IO;
- my $path = $self->path;
- if ($mode eq 'w') { ### writing
- $IO = FileHandle->new(">$path") || die "write-open $path: $!";
- }
- elsif ($mode eq 'r') { ### reading
- $IO = FileHandle->new("<$path") || die "read-open $path: $!";
- }
- else {
- die "bad mode: '$mode'";
- }
- binmode($IO) if $self->binmode; ### set binary read/write mode?
- return (IO::Wrap::wraphandle($IO)); ### wrap if old FileHandle class
-}
-
-#------------------------------
-# purge
-#------------------------------
-# Unlink the path (and undefine it).
-#
-sub purge {
- my $self = shift;
- if (defined($self->path)) {
- unlink $self->path or whine "couldn't unlink ".$self->path.": $!";
- $self->path(undef);
- }
- 1;
-}
-
-
-
-
-#------------------------------------------------------------
-package MIME::Body::Scalar;
-#------------------------------------------------------------
-
-=head2 MIME::Body::Scalar
-
-A body class that stores the data in-core, in a simple scalar.
-Invoke the constructor as:
-
- $body = new MIME::Body::Scalar \$string;
-
-A single scalar argument sets the body to that value, exactly as though
-you'd opened for the body for writing, written the value,
-and closed the body again:
-
- $body = new MIME::Body::Scalar "Line 1\nLine 2\nLine 3";
-
-A single array reference sets the body to the result of joining all the
-elements of that array together:
-
- $body = new MIME::Body::Scalar ["Line 1\n",
- "Line 2\n",
- "Line 3"];
-
-Uses B<IO::Scalar> as the I/O handle.
-
-=cut
-
-use vars qw(@ISA);
-use strict;
-
-require FileHandle;
-
-use IO::Scalar;
-use Carp;
-
-@ISA = qw(MIME::Body);
-
-
-#------------------------------
-# init DATA
-#------------------------------
-sub init {
- my ($self, $data) = @_;
- $data = join('', @$data) if (ref($data) && (ref($data) eq 'ARRAY'));
- $self->{MBS_Data} = (defined($data) ? $data : '');
- $self;
-}
-
-#------------------------------
-# as_string
-#------------------------------
-sub as_string {
- shift->{MBS_Data};
-}
-
-#------------------------------
-# open READWRITE
-#------------------------------
-sub open {
- my ($self, $mode) = @_;
- $self->{MBS_Data} = '' if ($mode eq 'w'); ### writing
- return new IO::Scalar \($self->{MBS_Data});
-}
-
-
-
-
-
-#------------------------------------------------------------
-package MIME::Body::InCore;
-#------------------------------------------------------------
-
-=head2 MIME::Body::InCore
-
-A body class that stores the data in-core.
-Invoke the constructor as:
-
- $body = new MIME::Body::InCore \$string;
- $body = new MIME::Body::InCore $string;
- $body = new MIME::Body::InCore \@stringarray
-
-A simple scalar argument sets the body to that value, exactly as though
-you'd opened for the body for writing, written the value,
-and closed the body again:
-
- $body = new MIME::Body::InCore "Line 1\nLine 2\nLine 3";
-
-A single array reference sets the body to the concatenation of all
-scalars that it holds:
-
- $body = new MIME::Body::InCore ["Line 1\n",
- "Line 2\n",
- "Line 3"];
-
-Uses B<IO::ScalarArray> as the I/O handle.
-
-=cut
-
-use vars qw(@ISA);
-use strict;
-
-require FileHandle;
-
-use IO::ScalarArray;
-use Carp;
-
-@ISA = qw(MIME::Body);
-
-
-#------------------------------
-# init DATA
-#------------------------------
-sub init {
- my ($self, $data) = @_;
- if (!defined($data)) { ### nothing
- $self->{MBC_Data} = [];
- }
- elsif (!ref($data)) { ### simple scalar
- $self->{MBC_Data} = [ $data ];
- }
- elsif (ref($data) eq 'SCALAR') {
- $self->{MBC_Data} = [ $$data ];
- }
- elsif (ref($data) eq 'ARRAY') {
- $self->{MBC_Data} = $data;
- }
- else {
- croak "I can't handle DATA which is a ".ref($data)."\n";
- }
- $self;
-}
-
-#------------------------------
-# as_string
-#------------------------------
-sub as_string {
- my $self = shift;
- return join '', @{$self->{MBC_Data}};
-}
-
-#------------------------------
-# open READWRITE
-#------------------------------
-sub open {
- my ($self, $mode) = @_;
- $self->{MBC_Data} = [] if ($mode eq 'w'); ### writing
- return new IO::ScalarArray $self->{MBC_Data};
-}
-
-
-1;
-__END__
-
-
-#------------------------------
-
-=head2 Defining your own subclasses
-
-So you're not happy with files and scalar-arrays?
-No problem: just define your own MIME::Body subclass, and make a subclass
-of MIME::Parser or MIME::ParserBase which returns an instance of your
-body class whenever appropriate in the C<new_body_for(head)> method.
-
-Your "body" class must inherit from MIME::Body (or some subclass of it),
-and it must either provide (or inherit the default for) the following
-methods...
-
-The default inherited method I<should suffice> for all these:
-
- new
- binmode [ONOFF]
- path
-
-The default inherited method I<may suffice> for these, but perhaps
-there's a better implementation for your subclass.
-
- init ARGS...
- as_lines
- as_string
- dup
- print
- purge
-
-The default inherited method I<will probably not suffice> for these:
-
- open
-
-
-
-=head1 NOTES
-
-One reason I didn't just use FileHandle or IO::Handle objects for message
-bodies was that I wanted a "body" object to be a form of completely
-encapsulated program-persistent storage; that is, I wanted users
-to be able to write code like this...
-
- ### Get body handle from this MIME message, and read its data:
- $body = $entity->bodyhandle;
- $IO = $body->open("r");
- while (defined($_ = $IO->getline)) {
- print STDOUT $_;
- }
- $IO->close;
-
-...without requiring that they know anything more about how the
-$body object is actually storing its data (disk file, scalar variable,
-array variable, or whatever).
-
-Storing the body of each MIME message in a persistently-open
-IO::Handle was a possibility, but it seemed like a bad idea,
-considering that a single multipart MIME message could easily suck up
-all the available file descriptors on some systems. This risk increases
-if the user application is processing more than one MIME entity at a time.
-
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-Thanks to Achim Bohnet for suggesting that MIME::Parser not be restricted
-to the use of FileHandles.
-
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-#------------------------------
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder.pm
deleted file mode 100644
index cea5206..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder.pm
+++ /dev/null
@@ -1,640 +0,0 @@
-package MIME::Decoder;
-
-
-=head1 NAME
-
-MIME::Decoder - an object for decoding the body part of a MIME stream
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Tools> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok...
-
-
-=head2 Decoding a data stream
-
-Here's a simple filter program to read quoted-printable data from STDIN
-(until EOF) and write the decoded data to STDOUT:
-
- use MIME::Decoder;
-
- $decoder = new MIME::Decoder 'quoted-printable' or die "unsupported";
- $decoder->decode(\*STDIN, \*STDOUT);
-
-
-=head2 Encoding a data stream
-
-Here's a simple filter program to read binary data from STDIN
-(until EOF) and write base64-encoded data to STDOUT:
-
- use MIME::Decoder;
-
- $decoder = new MIME::Decoder 'base64' or die "unsupported";
- $decoder->encode(\*STDIN, \*STDOUT);
-
-
-=head2 Non-standard encodings
-
-You can B<write and install> your own decoders so that
-MIME::Decoder will know about them:
-
- use MyBase64Decoder;
-
- install MyBase64Decoder 'base64';
-
-You can also B<test> if a given encoding is supported:
-
- if (supported MIME::Decoder 'x-uuencode') {
- ### we can uuencode!
- }
-
-
-=head1 DESCRIPTION
-
-This abstract class, and its private concrete subclasses (see below)
-provide an OO front end to the actions of...
-
-=over 4
-
-=item *
-
-Decoding a MIME-encoded stream
-
-=item *
-
-Encoding a raw data stream into a MIME-encoded stream.
-
-=back
-
-The constructor for MIME::Decoder takes the name of an encoding
-(C<base64>, C<7bit>, etc.), and returns an instance of a I<subclass>
-of MIME::Decoder whose C<decode()> method will perform the appropriate
-decoding action, and whose C<encode()> method will perform the appropriate
-encoding action.
-
-
-=cut
-
-
-### Pragmas:
-use strict;
-use vars qw($VERSION %DecoderFor);
-
-### System modules:
-use FileHandle;
-use IPC::Open2;
-
-### Kit modules:
-use MIME::Tools qw(:config :msgs);
-use IO::Wrap;
-use Carp;
-
-#------------------------------
-#
-# Globals
-#
-#------------------------------
-
-### The stream decoders:
-%DecoderFor = (
-
- ### Standard...
- '7bit' => 'MIME::Decoder::NBit',
- '8bit' => 'MIME::Decoder::NBit',
- 'base64' => 'MIME::Decoder::Base64',
- 'binary' => 'MIME::Decoder::Binary',
- 'none' => 'MIME::Decoder::Binary',
- 'quoted-printable' => 'MIME::Decoder::QuotedPrint',
-
- ### Non-standard...
- 'x-uu' => 'MIME::Decoder::UU',
- 'x-uuencode' => 'MIME::Decoder::UU',
-
- ### This was removed, since I fear that x-gzip != x-gzip64...
-### 'x-gzip' => 'MIME::Decoder::Gzip64',
-
- ### This is no longer installed by default, since not all folks have gzip:
-### 'x-gzip64' => 'MIME::Decoder::Gzip64',
-);
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### Me:
-my $ME = 'MIME::Decoder';
-
-
-#------------------------------
-
-=head1 PUBLIC INTERFACE
-
-=head2 Standard interface
-
-If all you are doing is I<using> this class, here's all you'll need...
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item new ENCODING
-
-I<Class method, constructor.>
-Create and return a new decoder object which can handle the
-given ENCODING.
-
- my $decoder = new MIME::Decoder "7bit";
-
-Returns the undefined value if no known decoders are appropriate.
-
-=cut
-
-sub new {
- my ($class, @args) = @_;
- my ($encoding) = @args;
- my ($concrete_name, $concrete_path);
-
- ### Coerce the type to be legit:
- $encoding = lc($encoding || '');
-
- ### Get the class:
- ($concrete_name = $DecoderFor{$encoding}) or return undef;
- ($concrete_path = $concrete_name.'.pm') =~ s{::}{/}g;
-
- ### Create the new object (if we can):
- my $self = { MD_Encoding => lc($encoding) };
- require $concrete_path;
- bless $self, $concrete_name;
- $self->init(@args);
-}
-
-#------------------------------
-
-=item best ENCODING
-
-I<Class method, constructor.>
-Exactly like new(), except that this defaults any unsupported encoding to
-"binary", after raising a suitable warning (it's a fatal error if there's
-no binary decoder).
-
- my $decoder = best MIME::Decoder "x-gzip64";
-
-Will either return a decoder, or a raise a fatal exception.
-
-=cut
-
-sub best {
- my ($class, $enc, @args) = @_;
- my $self = $class->new($enc, @args);
- if (!$self) {
- usage "unsupported encoding '$enc': using 'binary'";
- $self = $class->new('binary') || croak "ack! no binary decoder!";
- }
- $self;
-}
-
-#------------------------------
-
-=item decode INSTREAM,OUTSTREAM
-
-I<Instance method.>
-Decode the document waiting in the input handle INSTREAM,
-writing the decoded information to the output handle OUTSTREAM.
-
-Read the section in this document on I/O handles for more information
-about the arguments. Note that you can still supply old-style
-unblessed filehandles for INSTREAM and OUTSTREAM.
-
-Returns true on success, throws exception on failure.
-
-=cut
-
-sub decode {
- my ($self, $in, $out) = @_;
-
- ### Set up the default input record separator to be CRLF:
- ### $in->input_record_separator("\012\015");
-
- ### Coerce old-style filehandles to legit objects, and do it!
- $in = wraphandle($in);
- $out = wraphandle($out);
-
- ### Invoke back-end method to do the work:
- $self->decode_it($in, $out) ||
- die "$ME: ".$self->encoding." decoding failed\n";
- 1;
-}
-
-#------------------------------
-
-=item encode INSTREAM,OUTSTREAM
-
-I<Instance method.>
-Encode the document waiting in the input filehandle INSTREAM,
-writing the encoded information to the output stream OUTSTREAM.
-
-Read the section in this document on I/O handles for more information
-about the arguments. Note that you can still supply old-style
-unblessed filehandles for INSTREAM and OUTSTREAM.
-
-Returns true on success, throws exception on failure.
-
-=cut
-
-sub encode {
- my ($self, $in, $out) = @_;
-
- ### Coerce old-style filehandles to legit objects, and do it!
- $in = wraphandle($in);
- $out = wraphandle($out);
-
- ### Invoke back-end method to do the work:
- $self->encode_it($in, $out) ||
- die "$ME: ".$self->encoding." encoding failed\n";
-}
-
-#------------------------------
-
-=item encoding
-
-I<Instance method.>
-Return the encoding that this object was created to handle,
-coerced to all lowercase (e.g., C<"base64">).
-
-=cut
-
-sub encoding {
- shift->{MD_Encoding};
-}
-
-#------------------------------
-
-=item head [HEAD]
-
-I<Instance method.>
-Completely optional: some decoders need to know a little about the file
-they are encoding/decoding; e.g., x-uu likes to have the filename.
-The HEAD is any object which responds to messages like:
-
- $head->mime_attr('content-disposition.filename');
-
-=cut
-
-sub head {
- my ($self, $head) = @_;
- $self->{MD_Head} = $head if @_ > 1;
- $self->{MD_Head};
-}
-
-#------------------------------
-
-=item supported [ENCODING]
-
-I<Class method.>
-With one arg (an ENCODING name), returns truth if that encoding
-is currently handled, and falsity otherwise. The ENCODING will
-be automatically coerced to lowercase:
-
- if (supported MIME::Decoder '7BIT') {
- ### yes, we can handle it...
- }
- else {
- ### drop back six and punt...
- }
-
-With no args, returns a reference to a hash of all available decoders,
-where the key is the encoding name (all lowercase, like '7bit'),
-and the value is true (it happens to be the name of the class
-that handles the decoding, but you probably shouldn't rely on that).
-You may safely modify this hash; it will I<not> change the way the
-module performs its lookups. Only C<install> can do that.
-
-I<Thanks to Achim Bohnet for suggesting this method.>
-
-=cut
-
-sub supported {
- my ($class, $decoder) = @_;
- defined($decoder) ? $DecoderFor{lc($decoder)}: { %DecoderFor };
-}
-
-#------------------------------
-
-=back
-
-=head2 Subclass interface
-
-If you are writing (or installing) a new decoder subclass, there
-are some other methods you'll need to know about:
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item decode_it INSTREAM,OUTSTREAM
-
-I<Abstract instance method.>
-The back-end of the B<decode> method. It takes an input handle
-opened for reading (INSTREAM), and an output handle opened for
-writing (OUTSTREAM).
-
-If you are writing your own decoder subclass, you must override this
-method in your class. Your method should read from the input
-handle via C<getline()> or C<read()>, decode this input, and print the
-decoded data to the output handle via C<print()>. You may do this
-however you see fit, so long as the end result is the same.
-
-Note that unblessed references and globrefs are automatically turned
-into I/O handles for you by C<decode()>, so you don't need to worry
-about it.
-
-Your method must return either C<undef> (to indicate failure),
-or C<1> (to indicate success).
-It may also throw an exception to indicate failure.
-
-=cut
-
-sub decode_it {
- die "attempted to use abstract 'decode_it' method!";
-}
-
-#------------------------------
-
-=item encode_it INSTREAM,OUTSTREAM
-
-I<Abstract instance method.>
-The back-end of the B<encode> method. It takes an input handle
-opened for reading (INSTREAM), and an output handle opened for
-writing (OUTSTREAM).
-
-If you are writing your own decoder subclass, you must override this
-method in your class. Your method should read from the input
-handle via C<getline()> or C<read()>, encode this input, and print the
-encoded data to the output handle via C<print()>. You may do this
-however you see fit, so long as the end result is the same.
-
-Note that unblessed references and globrefs are automatically turned
-into I/O handles for you by C<encode()>, so you don't need to worry
-about it.
-
-Your method must return either C<undef> (to indicate failure),
-or C<1> (to indicate success).
-It may also throw an exception to indicate failure.
-
-=cut
-
-sub encode_it {
- die "attempted to use abstract 'encode_it' method!";
-}
-
-#------------------------------
-
-=item filter IN, OUT, COMMAND...
-
-I<Class method, utility.>
-If your decoder involves an external program, you can invoke
-them easily through this method. The command must be a "filter": a
-command that reads input from its STDIN (which will come from the IN argument)
-and writes output to its STDOUT (which will go to the OUT argument).
-
-For example, here's a decoder that un-gzips its data:
-
- sub decode_it {
- my ($self, $in, $out) = @_;
- $self->filter($in, $out, "gzip -d -");
- }
-
-The usage is similar to IPC::Open2::open2 (which it uses internally),
-so you can specify COMMAND as a single argument or as an array.
-
-=cut
-
-sub filter {
- my ($self, $in, $out, @cmd) = @_;
- my $buf = '';
-
- ### Make sure we've got MIME::IO-compliant objects:
- $in = wraphandle($in);
- $out = wraphandle($out);
-
- ### Open pipe:
- STDOUT->flush; ### very important, or else we get duplicate output!
- my $kidpid = open2(\*CHILDOUT, \*CHILDIN, @cmd) || die "open2 failed: $!";
-
- ### Write all:
- while ($in->read($buf, 2048)) { print CHILDIN $buf }
- close \*CHILDIN;
-
- ### Read all:
- while (read(\*CHILDOUT, $buf, 2048)) { $out->print($buf) }
- close \*CHILDOUT;
-
- ### Wait for it:
- waitpid($kidpid,0) or die "couldn't reap child $kidpid";
- 1;
-}
-
-
-#------------------------------
-
-=item init ARGS...
-
-I<Instance method.>
-Do any necessary initialization of the new instance,
-taking whatever arguments were given to C<new()>.
-Should return the self object on success, undef on failure.
-
-=cut
-
-sub init {
- $_[0];
-}
-
-#------------------------------
-
-=item install ENCODINGS...
-
-I<Class method>.
-Install this class so that each encoding in ENCODINGS is handled by it:
-
- install MyBase64Decoder 'base64', 'x-base64super';
-
-You should not override this method.
-
-=cut
-
-sub install {
- my $class = shift;
- $DecoderFor{lc(shift @_)} = $class while (@_);
-}
-
-#------------------------------
-
-=item uninstall ENCODINGS...
-
-I<Class method>.
-Uninstall support for encodings. This is a way to turn off the decoding
-of "experimental" encodings. For safety, always use MIME::Decoder directly:
-
- uninstall MIME::Decoder 'x-uu', 'x-uuencode';
-
-You should not override this method.
-
-=cut
-
-sub uninstall {
- shift;
- $DecoderFor{lc(shift @_)} = undef while (@_);
-}
-
-1;
-
-__END__
-
-#------------------------------
-
-=back
-
-=head1 DECODER SUBCLASSES
-
-You don't need to C<"use"> any other Perl modules; the
-following "standard" subclasses are included as part of MIME::Decoder:
-
- Class: Handles encodings:
- ------------------------------------------------------------
- MIME::Decoder::Binary binary
- MIME::Decoder::NBit 7bit, 8bit
- MIME::Decoder::Base64 base64
- MIME::Decoder::QuotedPrint quoted-printable
-
-The following "non-standard" subclasses are also included:
-
- Class: Handles encodings:
- ------------------------------------------------------------
- MIME::Decoder::UU x-uu, x-uuencode
- MIME::Decoder::Gzip64 x-gzip64 ** requires gzip!
-
-
-
-=head1 NOTES
-
-=head2 Input/Output handles
-
-As of MIME-tools 2.0, this class has to play nice with the new MIME::Body
-class... which means that input and output routines cannot just assume that
-they are dealing with filehandles.
-
-Therefore, all that MIME::Decoder and its subclasses require (and, thus,
-all that they can assume) is that INSTREAMs and OUTSTREAMs are objects
-which respond to a subset of the messages defined in the IO::Handle
-interface; minimally:
-
- print
- getline
- read(BUF,NBYTES)
-
-For backwards compatibilty, if you supply a scalar filehandle name
-(like C<"STDOUT">) or an unblessed glob reference (like C<\*STDOUT>)
-where an INSTREAM or OUTSTREAM is expected, this package will
-automatically wrap it in an object that fits these criteria, via IO::Wrap.
-
-I<Thanks to Achim Bohnet for suggesting this more-generic I/O model.>
-
-
-=head2 Writing a decoder
-
-If you're experimenting with your own encodings, you'll probably want
-to write a decoder. Here are the basics:
-
-=over 4
-
-=item 1.
-
-Create a module, like "MyDecoder::", for your decoder.
-Declare it to be a subclass of MIME::Decoder.
-
-=item 2.
-
-Create the following instance methods in your class, as described above:
-
- decode_it
- encode_it
- init
-
-=item 3.
-
-In your application program, activate your decoder for one or
-more encodings like this:
-
- require MyDecoder;
-
- install MyDecoder "7bit"; ### use MyDecoder to decode "7bit"
- install MyDecoder "x-foo"; ### also use MyDecoder to decode "x-foo"
-
-=back
-
-To illustrate, here's a custom decoder class for the C<quoted-printable>
-encoding:
-
- package MyQPDecoder;
-
- @ISA = qw(MIME::Decoder);
- use MIME::Decoder;
- use MIME::QuotedPrint;
-
- ### decode_it - the private decoding method
- sub decode_it {
- my ($self, $in, $out) = @_;
-
- while (defined($_ = $in->getline)) {
- my $decoded = decode_qp($_);
- $out->print($decoded);
- }
- 1;
- }
-
- ### encode_it - the private encoding method
- sub encode_it {
- my ($self, $in, $out) = @_;
-
- my ($buf, $nread) = ('', 0);
- while ($in->read($buf, 60)) {
- my $encoded = encode_qp($buf);
- $out->print($encoded);
- }
- 1;
- }
-
-That's it. The task was pretty simple because the C<"quoted-printable">
-encoding can easily be converted line-by-line... as can
-even C<"7bit"> and C<"8bit"> (since all these encodings guarantee
-short lines, with a max of 1000 characters).
-The good news is: it is very likely that it will be similarly-easy to
-write a MIME::Decoder for any future standard encodings.
-
-The C<"binary"> decoder, however, really required block reads and writes:
-see L<"MIME::Decoder::Binary"> for details.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Base64.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Base64.pm
deleted file mode 100644
index f48e809..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Base64.pm
+++ /dev/null
@@ -1,134 +0,0 @@
-package MIME::Decoder::Base64;
-
-
-=head1 NAME
-
-MIME::Decoder::Base64 - encode/decode a "base64" stream
-
-
-=head1 SYNOPSIS
-
-A generic decoder object; see L<MIME::Decoder> for usage.
-
-
-=head1 DESCRIPTION
-
-A L<MIME::Decoder> subclass for the C<"base64"> encoding.
-The name was chosen to jibe with the pre-existing MIME::Base64
-utility package, which this class actually uses to translate each chunk.
-
-=over 4
-
-=item *
-
-When B<decoding>, the input is read one line at a time.
-The input accumulates in an internal buffer, which is decoded in
-multiple-of-4-sized chunks (plus a possible "leftover" input chunk,
-of course).
-
-=item *
-
-When B<encoding>, the input is read 45 bytes at a time: this ensures
-that the output lines are not too long. We chose 45 since it is
-a multiple of 3 and produces lines under 76 characters, as RFC-1521
-specifies.
-
-=back
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-use vars qw(@ISA $VERSION);
-use MIME::Decoder;
-use MIME::Base64 2.04;
-use MIME::Tools qw(debug);
-
-@ISA = qw(MIME::Decoder);
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### How many bytes to encode at a time (must be a multiple of 3, and
-### less than (76 * 0.75)!
-my $EncodeChunkLength = 45;
-
-### How many bytes to decode at a time?
-my $DecodeChunkLength = 32 * 1024;
-
-#------------------------------
-#
-# decode_it IN, OUT
-#
-sub decode_it {
- my ($self, $in, $out) = @_;
- my $len_4xN;
-
- ### Create a suitable buffer:
- my $buffer = ' ' x (120 + $DecodeChunkLength); $buffer = '';
- debug "in = $in; out = $out";
-
- ### Get chunks until done:
- local($_) = ' ' x $DecodeChunkLength;
- while ($in->read($_, $DecodeChunkLength)) {
- tr{A-Za-z0-9+/}{}cd; ### get rid of non-base64 chars
-
- ### Concat any new input onto any leftover from the last round:
- $buffer .= $_;
- length($buffer) >= $DecodeChunkLength or next;
-
- ### Extract substring with highest multiple of 4 bytes:
- ### 0 means not enough to work with... get more data!
- $len_4xN = length($buffer) & ~3;
-
- ### Partition into largest-multiple-of-4 (which we decode),
- ### and the remainder (which gets handled next time around):
- $out->print(decode_base64(substr($buffer, 0, $len_4xN)));
- $buffer = substr($buffer, $len_4xN);
- }
-
- ### No more input remains. Dispose of anything left in buffer:
- if (length($buffer)) {
-
- ### Pad to 4-byte multiple, and decode:
- $buffer .= "==="; ### need no more than 3 pad chars
- $len_4xN = length($buffer) & ~3;
-
- ### Decode it!
- $out->print(decode_base64(substr($buffer, 0, $len_4xN)));
- }
- 1;
-}
-
-#------------------------------
-#
-# encode_it IN, OUT
-#
-sub encode_it {
- my ($self, $in, $out) = @_;
- my $encoded;
-
- my $nread;
- my $buf = '';
- while ($nread = $in->read($buf, $EncodeChunkLength)) {
- $encoded = encode_base64($buf);
- $encoded .= "\n" unless ($encoded =~ /\n\Z/); ### ensure newline!
- $out->print($encoded);
- }
- 1;
-}
-
-#------------------------------
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Binary.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Binary.pm
deleted file mode 100644
index e05d343..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Binary.pm
+++ /dev/null
@@ -1,85 +0,0 @@
-package MIME::Decoder::Binary;
-
-
-=head1 NAME
-
-MIME::Decoder::Binary - perform no encoding/decoding
-
-
-=head1 SYNOPSIS
-
-A generic decoder object; see L<MIME::Decoder> for usage.
-
-
-=head1 DESCRIPTION
-
-A MIME::Decoder subclass for the C<"binary"> encoding (in other words,
-no encoding).
-
-The C<"binary"> decoder is a special case, since it's ill-advised
-to read the input line-by-line: after all, an uncompressed image file might
-conceivably have loooooooooong stretches of bytes without a C<"\n"> among
-them, and we don't want to risk blowing out our core. So, we
-read-and-write fixed-size chunks.
-
-Both the B<encoder> and B<decoder> do a simple pass-through of the data
-from input to output.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-use MIME::Decoder;
-use vars qw(@ISA $VERSION);
-
-@ISA = qw(MIME::Decoder);
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### Buffer length:
-my $BUFLEN = 8192;
-
-#------------------------------
-#
-# decode_it IN, OUT
-#
-sub decode_it {
- my ($self, $in, $out) = @_;
-
- my ($buf, $nread) = ('', 0);
- while ($nread = $in->read($buf, $BUFLEN)) {
- $out->print($buf);
- }
- defined($nread) or return undef; ### check for error
- 1;
-}
-
-#------------------------------
-#
-# encode_it IN, OUT
-#
-sub encode_it {
- my ($self, $in, $out) = @_;
-
- my ($buf, $nread) = ('', 0);
- while ($nread = $in->read($buf, $BUFLEN)) {
- $out->print($buf);
- }
- defined($nread) or return undef; ### check for error
- 1;
-}
-
-#------------------------------
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Gzip64.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Gzip64.pm
deleted file mode 100644
index 1456153..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/Gzip64.pm
+++ /dev/null
@@ -1,112 +0,0 @@
-package MIME::Decoder::Gzip64;
-
-
-=head1 NAME
-
-MIME::Decoder::Gzip64 - decode a "base64" gzip stream
-
-
-=head1 SYNOPSIS
-
-A generic decoder object; see L<MIME::Decoder> for usage.
-
-
-=head1 DESCRIPTION
-
-A MIME::Decoder::Base64 subclass for a nonstandard encoding whereby
-data are gzipped, then the gzipped file is base64-encoded.
-Common non-standard MIME encodings for this:
-
- x-gzip64
-
-Since this class relies on external programs which may not
-exist on your machine, MIME-tools does not "install" it by default.
-To use it, you need to say in your main program:
-
- install MIME::Decoder::Gzip64 'x-gzip64';
-
-Note: if this class isn't working for you, you may need to change
-the commands it runs. In your main program, you can do so
-by setting up the two commands which
-
- use MIME::Decoder::Gzip64;
-
- $MIME::Decoder::Gzip64::GZIP = 'gzip -c';
- $MIME::Decoder::Gzip64::GUNZIP = 'gzip -d -c';
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-
-require 5.002;
-use vars qw(@ISA $VERSION $ZIP $UNZIP);
-use MIME::Decoder;
-use MIME::Base64;
-use MIME::Decoder::Base64;
-use MIME::Tools qw(tmpopen whine);
-use IO::Wrap;
-
-# Inheritance:
-@ISA = qw(MIME::Decoder::Base64);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-# How to compress stdin to stdout:
-$GZIP = "gzip -c";
-
-# How to UNcompress stdin to stdout:
-$GUNZIP = "gzip -d -c";
-
-
-#------------------------------
-#
-# decode_it IN, OUT
-#
-sub decode_it {
- my ($self, $in, $out) = @_;
-
- # Open a temp file (assume the worst, that this is a big stream):
- my $tmp = wraphandle(tmpopen() || die "can't get temp file");
-
- # Stage 1: decode the base64'd stream into zipped data:
- $self->SUPER::decode_it($in, $tmp) or die "base64 decoding failed!";
-
- # Stage 2: un-zip the zipped data:
- $tmp->seek(0, 0);
- $self->filter($tmp, $out, $GUNZIP) or die "gzip decoding failed!";
-}
-
-#------------------------------
-#
-# encode_it IN, OUT
-#
-sub encode_it {
- my ($self, $in, $out) = @_;
- whine "Encoding ", $self->encoding, " is not standard MIME!";
-
- # Open a temp file (assume the worst, that this is a big stream):
- my $tmp = wraphandle(tmpopen() || die "can't get temp file");
-
- # Stage 1: zip the raw data:
- $self->filter($in, $tmp, $GZIP) or die "gzip encoding failed!";
-
- # Stage 2: encode the zipped data via base64:
- $tmp->seek(0, 0);
- $self->SUPER::encode_it($tmp, $out) or die "base64 encoding failed!";
-}
-
-#------------------------------
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/NBit.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/NBit.pm
deleted file mode 100644
index 1426d15..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/NBit.pm
+++ /dev/null
@@ -1,160 +0,0 @@
-package MIME::Decoder::NBit;
-
-
-=head1 NAME
-
-MIME::Decoder::NBit - encode/decode a "7bit" or "8bit" stream
-
-
-=head1 SYNOPSIS
-
-A generic decoder object; see L<MIME::Decoder> for usage.
-
-
-=head1 DESCRIPTION
-
-This is a MIME::Decoder subclass for the C<7bit> and C<8bit> content
-transfer encodings. These are not "encodings" per se: rather, they
-are simply assertions of the content of the message.
-From RFC-2045 Section 6.2.:
-
- Three transformations are currently defined: identity, the "quoted-
- printable" encoding, and the "base64" encoding. The domains are
- "binary", "8bit" and "7bit".
-
- The Content-Transfer-Encoding values "7bit", "8bit", and "binary" all
- mean that the identity (i.e. NO) encoding transformation has been
- performed. As such, they serve simply as indicators of the domain of
- the body data, and provide useful information about the sort of
- encoding that might be needed for transmission in a given transport
- system.
-
-In keeping with this: as of MIME-tools 4.x,
-I<this class does no modification of its input when encoding;>
-all it does is attempt to I<detect violations> of the 7bit/8bit assertion,
-and issue a warning (one per message) if any are found.
-
-
-=head2 Legal 7bit data
-
-RFC-2045 Section 2.7 defines legal C<7bit> data:
-
- "7bit data" refers to data that is all represented as relatively
- short lines with 998 octets or less between CRLF line separation
- sequences [RFC-821]. No octets with decimal values greater than 127
- are allowed and neither are NULs (octets with decimal value 0). CR
- (decimal value 13) and LF (decimal value 10) octets only occur as
- part of CRLF line separation sequences.
-
-
-=head2 Legal 8bit data
-
-RFC-2045 Section 2.8 defines legal C<8bit> data:
-
- "8bit data" refers to data that is all represented as relatively
- short lines with 998 octets or less between CRLF line separation
- sequences [RFC-821]), but octets with decimal values greater than 127
- may be used. As with "7bit data" CR and LF octets only occur as part
- of CRLF line separation sequences and no NULs are allowed.
-
-
-=head2 How decoding is done
-
-The B<decoder> does a line-by-line pass-through from input to output,
-leaving the data unchanged I<except> that an end-of-line sequence of
-CRLF is converted to a newline "\n". Given the line-oriented nature
-of 7bit and 8bit, this seems relatively sensible.
-
-
-=head2 How encoding is done
-
-The B<encoder> does a line-by-line pass-through from input to output,
-and simply attempts to I<detect> violations of the C<7bit>/C<8bit>
-domain. The default action is to warn once per encoding if violations
-are detected; the warnings may be silenced with the QUIET configuration
-of L<MIME::Tools>.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-
-=cut
-
-use vars qw(@ISA $VERSION);
-
-use MIME::Decoder;
-use MIME::Tools qw(:msgs);
-
-@ISA = qw(MIME::Decoder);
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### How many bytes to decode at a time?
-my $DecodeChunkLength = 8 * 1024;
-
-#------------------------------
-#
-# decode_it IN, OUT
-#
-sub decode_it {
- my ($self, $in, $out) = @_;
- my $and_also;
-
- ### Allocate a buffer suitable for a chunk and a line:
- local $_ = (' ' x ($DecodeChunkLength + 1024)); $_ = '';
-
- ### Get chunks until done:
- while ($in->read($_, $DecodeChunkLength)) {
- $and_also = $in->getline;
- $_ .= $and_also if defined($and_also);
-
- ### Just got a chunk ending in a line.
- s/\015\012$/\n/g;
- $out->print($_);
- }
- 1;
-}
-
-#------------------------------
-#
-# encode_it IN, OUT
-#
-sub encode_it {
- my ($self, $in, $out) = @_;
- my $saw_8bit = 0; ### warn them ONCE PER ENCODING if 8-bit data exists
- my $saw_long = 0; ### warn them ONCE PER ENCODING if long lines exist
- my $seven_bit = ($self->encoding eq '7bit'); ### 7bit?
-
- my $line;
- while (defined($line = $in->getline)) {
-
- ### Whine if encoding is 7bit and it has 8-bit data:
- if ($seven_bit && ($line =~ /[\200-\377]/)) { ### oops! saw 8-bit data!
- whine "saw 8-bit data while encoding 7bit" unless $saw_8bit++;
- }
-
- ### Whine if long lines detected:
- if (length($line) > 998) {
- whine "saw long line while encoding 7bit/8bit" unless $saw_long++;
- }
-
- ### Output!
- $out->print($line);
- }
- 1;
-}
-
-1;
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/QuotedPrint.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/QuotedPrint.pm
deleted file mode 100644
index 8028b0b471..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/QuotedPrint.pm
+++ /dev/null
@@ -1,109 +0,0 @@
-package MIME::Decoder::QuotedPrint;
-
-
-=head1 NAME
-
-MIME::Decoder::QuotedPrint - encode/decode a "quoted-printable" stream
-
-
-=head1 SYNOPSIS
-
-A generic decoder object; see L<MIME::Decoder> for usage.
-
-
-=head1 DESCRIPTION
-
-A MIME::Decoder subclass for the C<"quoted-printable"> encoding.
-The name was chosen to jibe with the pre-existing MIME::QuotedPrint
-utility package, which this class actually uses to translate each line.
-
-=over 4
-
-=item *
-
-The B<decoder> does a line-by-line translation from input to output.
-
-=item *
-
-The B<encoder> does a line-by-line translation, breaking lines
-so that they fall under the standard 76-character limit for this
-encoding.
-
-=back
-
-
-B<Note:> just like MIME::QuotedPrint, we currently use the
-native C<"\n"> for line breaks, and not C<CRLF>. This may
-need to change in future versions.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-
-=cut
-
-use vars qw(@ISA $VERSION);
-use MIME::Decoder;
-use MIME::QuotedPrint 2.03;
-
-@ISA = qw(MIME::Decoder);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-#------------------------------
-#
-# encode_qp_really STRING
-#
-# Encode QP, and then follow guideline 8 from RFC 2049 (thanks to Denis
-# N. Antonioli) whereby we make things a little safer for the transport
-# and storage of messages. WARNING: we can only do this if the line won't
-# grow beyond 76 characters!
-#
-sub encode_qp_really {
- my $enc = encode_qp($_[0]);
- if (length($enc) < 74) {
- $enc =~ s/^\.$/=2E/g; # force encoding of /^\.$/
- $enc =~ s/^From /=46rom /g; # force encoding of /^From /
- }
- $enc;
-}
-
-#------------------------------
-#
-# decode_it IN, OUT
-#
-sub decode_it {
- my ($self, $in, $out) = @_;
-
- while (defined($_ = $in->getline)) {
- $out->print(decode_qp($_));
- }
- 1;
-}
-
-#------------------------------
-#
-# encode_it IN, OUT
-#
-sub encode_it {
- my ($self, $in, $out) = @_;
-
- while (defined($_ = $in->getline)) {
- $out->print(encode_qp_really($_));
- }
- 1;
-}
-
-#------------------------------
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/UU.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/UU.pm
deleted file mode 100644
index 8f086c2..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Decoder/UU.pm
+++ /dev/null
@@ -1,151 +0,0 @@
-package MIME::Decoder::UU;
-
-
-=head1 NAME
-
-MIME::Decoder::UU - decode a "uuencoded" stream
-
-
-=head1 SYNOPSIS
-
-A generic decoder object; see L<MIME::Decoder> for usage.
-
-Also supports a preamble() method to recover text before
-the uuencoded portion of the stream.
-
-
-=head1 DESCRIPTION
-
-A MIME::Decoder subclass for a nonstandard encoding whereby
-data are uuencoded. Common non-standard MIME encodings for this:
-
- x-uu
- x-uuencode
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-UU-decoding code lifted from "uuexplode", a Perl script by an
-unknown author...
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-
-require 5.002;
-use vars qw(@ISA $VERSION);
-use MIME::Decoder;
-use MIME::Tools qw(whine);
-
-@ISA = qw(MIME::Decoder);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-
-#------------------------------
-#
-# decode_it IN, OUT
-#
-sub decode_it {
- my ($self, $in, $out) = @_;
- my ($mode, $file);
- my @preamble;
- local $_;
-
- ### Init:
- $self->{MDU_Preamble} = \@preamble;
- $self->{MDU_Mode} = undef;
- $self->{MDU_File} = undef;
-
- ### Find beginning...
- while (defined($_ = $in->getline)) {
- if (/^begin(.*)/) { ### found it: now decode it...
- my $modefile = $1;
- if ($modefile =~ /^(\s+(\d+))?(\s+(.*?\S))?\s*\Z/) {
- ($mode, $file) = ($2, $4);
- }
- last; ### decoded or not, we're done
- }
- push @preamble, $_;
- }
- die("uu decoding: no begin found\n") if !defined($_); # hit eof!
-
- ### Store info:
- $self->{MDU_Mode} = $mode;
- $self->{MDU_File} = $file;
-
- ### Decode:
- while (defined($_ = $in->getline)) {
- last if /^end/;
- next if /[a-z]/;
- next unless int((((ord() - 32) & 077) + 2) / 3) == int(length() / 4);
- $out->print(unpack('u', $_));
- }
- ### chmod oct($mode), $file; # sheeyeah... right...
- whine "file incomplete, no end found\n" if !defined($_); # eof
- 1;
-}
-
-#------------------------------
-#
-# encode_it IN, OUT
-#
-sub encode_it {
- my ($self, $in, $out) = @_;
- my $buf = '';
-
- my $fname = (($self->head &&
- $self->head->mime_attr('content-disposition.filename')) ||
- '');
- $out->print("begin 644 $fname\n");
- while ($in->read($buf, 45)) { $out->print(pack('u', $buf)) }
- $out->print("end\n");
- 1;
-}
-
-#------------------------------
-#
-# last_preamble
-#
-# Return the last preamble as ref to array of lines.
-# Gets reset by decode_it().
-#
-sub last_preamble {
- my $self = shift;
- return $self->{MDU_Preamble} || [];
-}
-
-#------------------------------
-#
-# last_mode
-#
-# Return the last mode.
-# Gets reset to undef by decode_it().
-#
-sub last_mode {
- shift->{MDU_Mode};
-}
-
-#------------------------------
-#
-# last_filename
-#
-# Return the last filename.
-# Gets reset by decode_it().
-#
-sub last_filename {
- shift->{MDU_File} || [];
-}
-
-#------------------------------
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Entity.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Entity.pm
deleted file mode 100644
index 1ccb3ff..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Entity.pm
+++ /dev/null
@@ -1,2242 +0,0 @@
-package MIME::Entity;
-
-
-=head1 NAME
-
-MIME::Entity - class for parsed-and-decoded MIME message
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Tools> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok...
-
- ### Create an entity:
- $top = MIME::Entity->build(From => 'me(a)myhost.com',
- To => 'you(a)yourhost.com',
- Subject => "Hello, nurse!",
- Data => \@my_message);
-
- ### Attach stuff to it:
- $top->attach(Path => $gif_path,
- Type => "image/gif",
- Encoding => "base64");
-
- ### Sign it:
- $top->sign;
-
- ### Output it:
- $top->print(\*STDOUT);
-
-
-=head1 DESCRIPTION
-
-A subclass of B<Mail::Internet>.
-
-This package provides a class for representing MIME message entities,
-as specified in RFC 1521, I<Multipurpose Internet Mail Extensions>.
-
-
-=head1 EXAMPLES
-
-=head2 Construction examples
-
-Create a document for an ordinary 7-bit ASCII text file (lots of
-stuff is defaulted for us):
-
- $ent = MIME::Entity->build(Path=>"english-msg.txt");
-
-Create a document for a text file with 8-bit (Latin-1) characters:
-
- $ent = MIME::Entity->build(Path =>"french-msg.txt",
- Encoding =>"quoted-printable",
- From =>'jean.luc(a)inria.fr',
- Subject =>"C'est bon!");
-
-Create a document for a GIF file (the description is completely optional;
-note that we have to specify content-type and encoding since they're
-not the default values):
-
- $ent = MIME::Entity->build(Description => "A pretty picture",
- Path => "./docs/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64");
-
-Create a document that you already have the text for, using "Data":
-
- $ent = MIME::Entity->build(Type => "text/plain",
- Encoding => "quoted-printable",
- Data => ["First line.\n",
- "Second line.\n",
- "Last line.\n"]);
-
-Create a multipart message, with the entire structure given
-explicitly:
-
- ### Create the top-level, and set up the mail headers:
- $top = MIME::Entity->build(Type => "multipart/mixed",
- From => 'me(a)myhost.com',
- To => 'you(a)yourhost.com',
- Subject => "Hello, nurse!");
-
- ### Attachment #1: a simple text document:
- $top->attach(Path=>"./testin/short.txt");
-
- ### Attachment #2: a GIF file:
- $top->attach(Path => "./docs/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64");
-
- ### Attachment #3: text we'll create with text we have on-hand:
- $top->attach(Data => $contents);
-
-Suppose you don't know ahead of time that you'll have attachments?
-No problem: you can "attach" to singleparts as well:
-
- $top = MIME::Entity->build(From => 'me(a)myhost.com',
- To => 'you(a)yourhost.com',
- Subject => "Hello, nurse!",
- Data => \@my_message);
- if ($GIF_path) {
- $top->attach(Path => $GIF_path,
- Type => 'image/gif');
- }
-
-Copy an entity (headers, parts... everything but external body data):
-
- my $deepcopy = $top->dup;
-
-
-
-=head2 Access examples
-
- ### Get the head, a MIME::Head:
- $head = $ent->head;
-
- ### Get the body, as a MIME::Body;
- $bodyh = $ent->bodyhandle;
-
- ### Get the intended MIME type (as declared in the header):
- $type = $ent->mime_type;
-
- ### Get the effective MIME type (in case decoding failed):
- $eff_type = $ent->effective_type;
-
- ### Get preamble, parts, and epilogue:
- $preamble = $ent->preamble; ### ref to array of lines
- $num_parts = $ent->parts;
- $first_part = $ent->parts(0); ### an entity
- $epilogue = $ent->epilogue; ### ref to array of lines
-
-
-=head2 Manipulation examples
-
-Muck about with the body data:
-
- ### Read the (unencoded) body data:
- if ($io = $ent->open("r")) {
- while (defined($_ = $io->getline)) { print $_ }
- $io->close;
- }
-
- ### Write the (unencoded) body data:
- if ($io = $ent->open("w")) {
- foreach (@lines) { $io->print($_) }
- $io->close;
- }
-
- ### Delete the files for any external (on-disk) data:
- $ent->purge;
-
-Muck about with the signature:
-
- ### Sign it (automatically removes any existing signature):
- $top->sign(File=>"$ENV{HOME}/.signature");
-
- ### Remove any signature within 15 lines of the end:
- $top->remove_sig(15);
-
-Muck about with the headers:
-
- ### Compute content-lengths for singleparts based on bodies:
- ### (Do this right before you print!)
- $entity->sync_headers(Length=>'COMPUTE');
-
-Muck about with the structure:
-
- ### If a 0- or 1-part multipart, collapse to a singlepart:
- $top->make_singlepart;
-
- ### If a singlepart, inflate to a multipart with 1 part:
- $top->make_multipart;
-
-Delete parts:
-
- ### Delete some parts of a multipart message:
- my @keep = grep { keep_part($_) } $msg->parts;
- $msg->parts(\@keep);
-
-
-=head2 Output examples
-
-Print to filehandles:
-
- ### Print the entire message:
- $top->print(\*STDOUT);
-
- ### Print just the header:
- $top->print_header(\*STDOUT);
-
- ### Print just the (encoded) body... includes parts as well!
- $top->print_body(\*STDOUT);
-
-Stringify... note that C<stringify_xx> can also be written C<xx_as_string>;
-the methods are synonymous, and neither form will be deprecated:
-
- ### Stringify the entire message:
- print $top->stringify; ### or $top->as_string
-
- ### Stringify just the header:
- print $top->stringify_header; ### or $top->header_as_string
-
- ### Stringify just the (encoded) body... includes parts as well!
- print $top->stringify_body; ### or $top->body_as_string
-
-Debug:
-
- ### Output debugging info:
- $entity->dump_skeleton(\*STDERR);
-
-
-
-=head1 PUBLIC INTERFACE
-
-=cut
-
-#------------------------------
-
-### Pragmas:
-use vars qw(@ISA $VERSION);
-use strict;
-
-### System modules:
-use FileHandle;
-use Carp;
-
-### Other modules:
-use Mail::Internet 1.28 ();
-use Mail::Field 1.05 ();
-
-### Kit modules:
-use MIME::Tools qw(:config :msgs :utils);
-use MIME::Head;
-use MIME::Body;
-use MIME::Decoder;
-use IO::Scalar;
-use IO::Wrap;
-use IO::Lines;
-
-@ISA = qw(Mail::Internet);
-
-
-#------------------------------
-#
-# Globals...
-#
-#------------------------------
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### Boundary counter:
-my $BCount = 0;
-
-### Standard "Content-" MIME fields, for scrub():
-my $StandardFields = 'Description|Disposition|Id|Type|Transfer-Encoding';
-
-### Known Mail/MIME fields... these, plus some general forms like
-### "x-*", are recognized by build():
-my %KnownField = map {$_=>1}
-qw(
- bcc cc comments date encrypted
- from keywords message-id mime-version organization
- received references reply-to return-path sender
- subject to
- );
-
-### Fallback preamble and epilogue:
-my $DefPreamble = [ "This is a multi-part message in MIME format...\n" ];
-my $DefEpilogue = [ ];
-
-
-#==============================
-#
-# Utilities, private
-#
-
-#------------------------------
-#
-# known_field FIELDNAME
-#
-# Is this a recognized Mail/MIME field?
-#
-sub known_field {
- my $field = lc(shift);
- $KnownField{$field} or ($field =~ m{^(content|resent|x)-.});
-}
-
-#------------------------------
-#
-# make_boundary
-#
-# Return a unique boundary string.
-# This is used both internally and by MIME::ParserBase, but it is NOT in
-# the public interface! Do not use it!
-#
-# We generate one containing a "=_", as RFC1521 suggests.
-#
-sub make_boundary {
- return "----------=_".scalar(time)."-$$-".$BCount++;
-}
-
-
-
-
-
-
-#==============================
-
-=head2 Construction
-
-=over 4
-
-=cut
-
-
-#------------------------------
-
-=item new [SOURCE]
-
-I<Class method.>
-Create a new, empty MIME entity.
-Basically, this uses the Mail::Internet constructor...
-
-If SOURCE is an ARRAYREF, it is assumed to be an array of lines
-that will be used to create both the header and an in-core body.
-
-Else, if SOURCE is defined, it is assumed to be a filehandle
-from which the header and in-core body is to be read.
-
-B<Note:> in either case, the body will not be I<parsed:> merely read!
-
-=cut
-
-sub new {
- my $class = shift;
- my $self = $class->Mail::Internet::new(@_); ### inherited
- $self->{ME_Parts} = []; ### no parts extracted
- $self;
-}
-
-
-###------------------------------
-
-=item add_part ENTITY, [OFFSET]
-
-I<Instance method.>
-Assuming we are a multipart message, add a body part (a MIME::Entity)
-to the array of body parts. Returns the part that was just added.
-
-If OFFSET is positive, the new part is added at that offset from the
-beginning of the array of parts. If it is negative, it counts from
-the end of the array. (An INDEX of -1 will place the new part at the
-very end of the array, -2 will place it as the penultimate item in the
-array, etc.) If OFFSET is not given, the new part is added to the end
-of the array.
-I<Thanks to Jason L Tibbitts III for providing support for OFFSET.>
-
-B<Warning:> in general, you only want to attach parts to entities
-with a content-type of C<multipart/*>).
-
-=cut
-
-sub add_part {
- my ($self, $part, $index) = @_;
- defined($index) or $index = -1;
-
- ### Make $index count from the end if negative:
- $index = $#{$self->{ME_Parts}} + 2 + $index if ($index < 0);
- splice(@{$self->{ME_Parts}}, $index, 0, $part);
- $part;
-}
-
-#------------------------------
-
-=item attach PARAMHASH
-
-I<Instance method.>
-The real quick-and-easy way to create multipart messages.
-The PARAMHASH is used to C<build> a new entity; this method is
-basically equivalent to:
-
- $entity->add_part(ref($entity)->build(PARAMHASH, Top=>0));
-
-B<Note:> normally, you attach to multipart entities; however, if you
-attach something to a singlepart (like attaching a GIF to a text
-message), the singlepart will be coerced into a multipart automatically.
-
-=cut
-
-sub attach {
- my $self = shift;
- $self->make_multipart;
- $self->add_part(ref($self)->build(@_, Top=>0));
-}
-
-#------------------------------
-
-=item build PARAMHASH
-
-I<Class/instance method.>
-A quick-and-easy catch-all way to create an entity. Use it like this
-to build a "normal" single-part entity:
-
- $ent = MIME::Entity->build(Type => "image/gif",
- Encoding => "base64",
- Path => "/path/to/xyz12345.gif",
- Filename => "saveme.gif",
- Disposition => "attachment");
-
-And like this to build a "multipart" entity:
-
- $ent = MIME::Entity->build(Type => "multipart/mixed",
- Boundary => "---1234567");
-
-A minimal MIME header will be created. If you want to add or modify
-any header fields afterwards, you can of course do so via the underlying
-head object... but hey, there's now a prettier syntax!
-
- $ent = MIME::Entity->build(Type =>"multipart/mixed",
- From => $myaddr,
- Subject => "Hi!",
- 'X-Certified' => ['SINED',
- 'SEELED',
- 'DELIVERED']);
-
-Normally, an C<X-Mailer> header field is output which contains this
-toolkit's name and version (plus this module's RCS version).
-This will allow any bad MIME we generate to be traced back to us.
-You can of course overwrite that header with your own:
-
- $ent = MIME::Entity->build(Type => "multipart/mixed",
- 'X-Mailer' => "myprog 1.1");
-
-Or remove it entirely:
-
- $ent = MIME::Entity->build(Type => "multipart/mixed",
- 'X-Mailer' => undef);
-
-OK, enough hype. The parameters are:
-
-=over 4
-
-=item (FIELDNAME)
-
-Any field you want placed in the message header, taken from the
-standard list of header fields (you don't need to worry about case):
-
- Bcc Encrypted Received Sender
- Cc From References Subject
- Comments Keywords Reply-To To
- Content-* Message-ID Resent-* X-*
- Date MIME-Version Return-Path
- Organization
-
-To give experienced users some veto power, these fields will be set
-I<after> the ones I set... so be careful: I<don't set any MIME fields>
-(like C<Content-type>) unless you know what you're doing!
-
-To specify a fieldname that's I<not> in the above list, even one that's
-identical to an option below, just give it with a trailing C<":">,
-like C<"My-field:">. When in doubt, that I<always> signals a mail
-field (and it sort of looks like one too).
-
-=item Boundary
-
-I<Multipart entities only. Optional.>
-The boundary string. As per RFC-1521, it must consist only
-of the characters C<[0-9a-zA-Z'()+_,-./:=?]> and space (you'll be
-warned, and your boundary will be ignored, if this is not the case).
-If you omit this, a random string will be chosen... which is probably
-safer.
-
-=item Charset
-
-I<Optional.>
-The character set.
-
-=item Data
-
-I<Single-part entities only. Optional.>
-An alternative to Path (q.v.): the actual data, either as a scalar
-or an array reference (whose elements are joined together to make
-the actual scalar). The body is opened on the data using
-MIME::Body::InCore.
-
-=item Description
-
-I<Optional.>
-The text of the content-description.
-If you don't specify it, the field is not put in the header.
-
-=item Disposition
-
-I<Optional.>
-The basic content-disposition (C<"attachment"> or C<"inline">).
-If you don't specify it, it defaults to "inline" for backwards
-compatibility. I<Thanks to Kurt Freytag for suggesting this feature.>
-
-=item Encoding
-
-I<Optional.>
-The content-transfer-encoding.
-If you don't specify it, a reasonable default is put in.
-You can also give the special value '-SUGGEST', to have it chosen for
-you in a heavy-duty fashion which scans the data itself.
-
-=item Filename
-
-I<Single-part entities only. Optional.>
-The recommended filename. Overrides any name extracted from C<Path>.
-The information is stored both the deprecated (content-type) and
-preferred (content-disposition) locations. If you explicitly want to
-I<avoid> a recommended filename (even when Path is used), supply this
-as empty or undef.
-
-=item Id
-
-I<Optional.>
-Set the content-id.
-
-=item Path
-
-I<Single-part entities only. Optional.>
-The path to the file to attach. The body is opened on that file
-using MIME::Body::File.
-
-=item Top
-
-I<Optional.>
-Is this a top-level entity? If so, it must sport a MIME-Version.
-The default is true. (NB: look at how C<attach()> uses it.)
-
-=item Type
-
-I<Optional.>
-The basic content-type (C<"text/plain">, etc.).
-If you don't specify it, it defaults to C<"text/plain">
-as per RFC-1521. I<Do yourself a favor: put it in.>
-
-=back
-
-=cut
-
-sub build {
- my ($self, @paramlist) = @_;
- my %params = @paramlist;
- my ($field, $filename, $boundary);
-
- ### Create a new entity, if needed:
- ref($self) or $self = $self->new;
-
-
- ### GET INFO...
-
- ### Get sundry field:
- my $type = $params{Type} || 'text/plain';
- my $charset = $params{Charset};
- my $is_multipart = ($type =~ m{^multipart/}i);
- my $encoding = $params{Encoding} || '';
- my $desc = $params{Description};
- my $top = exists($params{Top}) ? $params{Top} : 1;
- my $disposition = $params{Disposition} || 'inline';
- my $id = $params{Id};
-
- ### Get recommended filename, allowing explicit no-value value:
- my ($path_fname) = (($params{Path}||'') =~ m{([^/]+)\Z});
- $filename = (exists($params{Filename}) ? $params{Filename} : $path_fname);
- $filename = undef if (defined($filename) and $filename eq '');
-
- ### Type-check sanity:
- if ($type =~ m{^(multipart|message)/}) {
- ($encoding =~ /^(|7bit|8bit|binary|-suggest)$/i)
- or croak "can't have encoding $encoding for message type $type!";
- }
-
- ### Multipart or not? Do sanity check and fixup:
- if ($is_multipart) { ### multipart...
-
- ### Get any supplied boundary, and check it:
- if (defined($boundary = $params{Boundary})) { ### they gave us one...
- if ($boundary eq '') {
- whine "empty string not a legal boundary: I'm ignoring it";
- $boundary = undef;
- }
- elsif ($boundary =~ m{[^0-9a-zA-Z_\'\(\)\+\,\.\/\:\=\?\- ]}) {
- whine "boundary ignored: illegal characters ($boundary)";
- $boundary = undef;
- }
- }
-
- ### If we have to roll our own boundary, do so:
- defined($boundary) or $boundary = make_boundary();
- }
- else { ### single part...
- ### Create body:
- if ($params{Path}) {
- $self->bodyhandle(new MIME::Body::File $params{Path});
- }
- elsif (defined($params{Data})) {
- $self->bodyhandle(new MIME::Body::InCore $params{Data});
- }
- else {
- die "can't build entity: no body, and not multipart\n";
- }
-
- ### Check whether we need to binmode(): [Steve Kilbane]
- $self->bodyhandle->binmode(1) unless textual_type($type);
- }
-
-
- ### MAKE HEAD...
-
- ### Create head:
- my $head = new MIME::Head;
- $self->head($head);
- $head->modify(1);
-
- ### Add content-type field:
- $field = new Mail::Field 'Content_type'; ### not a typo :-(
- $field->type($type);
- $field->charset($charset) if $charset;
- $field->name($filename) if defined($filename);
- $field->boundary($boundary) if defined($boundary);
- $head->replace('Content-type', $field->stringify);
-
- ### Now that both body and content-type are available, we can suggest
- ### content-transfer-encoding (if desired);
- if (!$encoding) {
- $encoding = $self->suggest_encoding_lite;
- }
- elsif (lc($encoding) eq '-suggest') {
- $encoding = $self->suggest_encoding;
- }
-
- ### Add content-disposition field (if not multipart):
- unless ($is_multipart) {
- $field = new Mail::Field 'Content_disposition'; ### not a typo :-(
- $field->type($disposition);
- $field->filename($filename) if defined($filename);
- $head->replace('Content-disposition', $field->stringify);
- }
-
- ### Add other MIME fields:
- $head->replace('Content-transfer-encoding', $encoding) if $encoding;
- $head->replace('Content-description', $desc) if $desc;
- $head->replace('Content-id', $id) if defined($id);
- $head->replace('MIME-Version', '1.0') if $top;
-
- ### Add the X-Mailer field, if top level (use default value if not given):
- $top and $head->replace('X-Mailer',
- "MIME-tools ".(0+MIME::Tools->version).
- " (Entity " .(0+$VERSION).")");
-
- ### Add remaining user-specified fields, if any:
- while (@paramlist) {
- my ($tag, $value) = (shift @paramlist, shift @paramlist);
-
- ### Get fieldname, if that's what it is:
- if ($tag =~ /^-(.*)/s) { $tag = lc($1) } ### old style, b.c.
- elsif ($tag =~ /(.*):$/s ) { $tag = lc($1) } ### new style
- elsif (known_field(lc($tag))) { 1 } ### known field
- else { next; } ### not a field
-
- ### Clear head, get list of values, and add them:
- $head->delete($tag);
- foreach $value (ref($value) ? @$value : ($value)) {
- (defined($value) && ($value ne '')) or next;
- $head->add($tag, $value);
- }
- }
-
- ### Done!
- $self;
-}
-
-#------------------------------
-
-=item dup
-
-I<Instance method.>
-Duplicate the entity. Does a deep, recursive copy, I<but beware:>
-external data in bodyhandles is I<not> copied to new files!
-Changing the data in one entity's data file, or purging that entity,
-I<will> affect its duplicate. Entities with in-core data probably need
-not worry.
-
-=cut
-
-sub dup {
- my $self = shift;
- local($_);
-
- ### Self (this will also dup the header):
- my $dup = bless $self->SUPER::dup(), ref($self);
-
- ### Any simple inst vars:
- foreach (keys %$self) {$dup->{$_} = $self->{$_} unless ref($self->{$_})};
-
- ### Bodyhandle:
- $dup->bodyhandle($self->bodyhandle ? $self->bodyhandle->dup : undef);
-
- ### Preamble and epilogue:
- foreach (qw(ME_Preamble ME_Epilogue)) {
- $dup->{$_} = [@{$self->{$_}}] if $self->{$_};
- }
-
- ### Parts:
- $dup->{ME_Parts} = [];
- foreach (@{$self->{ME_Parts}}) { push @{$dup->{ME_Parts}}, $_->dup }
-
- ### Done!
- $dup;
-}
-
-=back
-
-=cut
-
-
-
-
-
-#==============================
-
-=head2 Access
-
-=over 4
-
-=cut
-
-
-#------------------------------
-
-=item body [VALUE]
-
-I<Instance method.>
-Get the I<encoded> (transport-ready) body, as an array of lines.
-This is a read-only data structure: changing its contents will have
-no effect. Its contents are identical to what is printed by
-L<print_body()|/print_body>.
-
-Provided for compatibility with Mail::Internet, so that methods
-like C<smtpsend()> will work. Note however that if VALUE is given,
-a fatal exception is thrown, since you cannot use this method to
-I<set> the lines of the encoded message.
-
-If you want the raw (unencoded) body data, use the L<bodyhandle()|/bodyhandle>
-method to get and use a MIME::Body. The content-type of the entity
-will tell you whether that body is best read as text (via getline())
-or raw data (via read()).
-
-=cut
-
-sub body {
- my ($self, $value) = @_;
- if (@_ > 1) { ### setting body line(s)...
- croak "you cannot use body() to set the encoded contents\n";
- }
- else { ### getting body lines...
- my $lines = [];
- my $lh = IO::Lines->new($lines);
- $self->print_body($lh);
- return $lines;
- }
-}
-
-#------------------------------
-
-=item bodyhandle [VALUE]
-
-I<Instance method.>
-Get or set an abstract object representing the body of the message.
-The body holds the decoded message data.
-
-B<Note that not all entities have bodies!>
-An entity will have either a body or parts: not both.
-This method will I<only> return an object if this entity can
-have a body; otherwise, it will return undefined.
-Whether-or-not a given entity can have a body is determined by
-(1) its content type, and (2) whether-or-not the parser was told to
-extract nested messages:
-
- Type: | Extract nested? | bodyhandle() | parts()
- -----------------------------------------------------------------------
- multipart/* | - | undef | 0 or more MIME::Entity
- message/* | true | undef | 0 or 1 MIME::Entity
- message/* | false | MIME::Body | empty list
- (other) | - | MIME::Body | empty list
-
-If C<VALUE> I<is not> given, the current bodyhandle is returned,
-or undef if the entity cannot have a body.
-
-If C<VALUE> I<is> given, the bodyhandle is set to the new value,
-and the previous value is returned.
-
-See L</parts> for more info.
-
-=cut
-
-sub bodyhandle {
- my ($self, $newvalue) = @_;
- my $value = $self->{ME_Bodyhandle};
- $self->{ME_Bodyhandle} = $newvalue if (@_ > 1);
- $value;
-}
-
-#------------------------------
-
-=item effective_type [MIMETYPE]
-
-I<Instance method.>
-Set/get the I<effective> MIME type of this entity. This is I<usually>
-identical to the actual (or defaulted) MIME type, but in some cases
-it differs. For example, from RFC-2045:
-
- Any entity with an unrecognized Content-Transfer-Encoding must be
- treated as if it has a Content-Type of "application/octet-stream",
- regardless of what the Content-Type header field actually says.
-
-Why? because if we can't decode the message, then we have to take
-the bytes as-is, in their (unrecognized) encoded form. So the
-message ceases to be a "text/foobar" and becomes a bunch of undecipherable
-bytes -- in other words, an "application/octet-stream".
-
-Such an entity, if parsed, would have its effective_type() set to
-C<"application/octet_stream">, although the mime_type() and the contents
-of the header would remain the same.
-
-If there is no effective type, the method just returns what
-mime_type() would.
-
-B<Warning:> the effective type is "sticky"; once set, that effective_type()
-will always be returned even if the conditions that necessitated setting
-the effective type become no longer true.
-
-=cut
-
-sub effective_type {
- my $self = shift;
- $self->{ME_EffType} = shift if @_;
- return ($self->{ME_EffType} ? lc($self->{ME_EffType}) : $self->mime_type);
-}
-
-
-#------------------------------
-
-=item epilogue [LINES]
-
-I<Instance method.>
-Get/set the text of the epilogue, as an array of newline-terminated LINES.
-Returns a reference to the array of lines, or undef if no epilogue exists.
-
-If there is a epilogue, it is output when printing this entity; otherwise,
-a default epilogue is used. Setting the epilogue to undef (not []!) causes
-it to fallback to the default.
-
-=cut
-
-sub epilogue {
- my ($self, $lines) = @_;
- $self->{ME_Epilogue} = $lines if @_ > 1;
- $self->{ME_Epilogue};
-}
-
-#------------------------------
-
-=item head [VALUE]
-
-I<Instance method.>
-Get/set the head.
-
-If there is no VALUE given, returns the current head. If none
-exists, an empty instance of MIME::Head is created, set, and returned.
-
-B<Note:> This is a patch over a problem in Mail::Internet, which doesn't
-provide a method for setting the head to some given object.
-
-=cut
-
-sub head {
- my ($self, $value) = @_;
- (@_ > 1) and $self->{'mail_inet_head'} = $value;
- $self->{'mail_inet_head'} ||= new MIME::Head; ### KLUDGE!
-}
-
-#------------------------------
-
-=item is_multipart
-
-I<Instance method.>
-Does this entity's effective MIME type indicate that it's a multipart entity?
-Returns undef (false) if the answer couldn't be determined, 0 (false)
-if it was determined to be false, and true otherwise.
-Note that this says nothing about whether or not parts were extracted.
-
-NOTE: we switched to effective_type so that multiparts with
-bad or missing boundaries could be coerced to an effective type
-of C<application/x-unparseable-multipart>.
-
-
-=cut
-
-sub is_multipart {
- my $self = shift;
- $self->head or return undef; ### no head, so no MIME type!
- my ($type, $subtype) = split('/', $self->effective_type);
- (($type eq 'multipart') ? 1 : 0);
-}
-
-#------------------------------
-
-=item mime_type
-
-I<Instance method.>
-A purely-for-convenience method. This simply relays the request to the
-associated MIME::Head object.
-If there is no head, returns undef in a scalar context and
-the empty array in a list context.
-
-B<Before you use this,> consider using effective_type() instead,
-especially if you obtained the entity from a MIME::Parser.
-
-=cut
-
-sub mime_type {
- my $self = shift;
- $self->head or return (wantarray ? () : undef);
- $self->head->mime_type;
-}
-
-#------------------------------
-
-=item open READWRITE
-
-I<Instance method.>
-A purely-for-convenience method. This simply relays the request to the
-associated MIME::Body object (see MIME::Body::open()).
-READWRITE is either 'r' (open for read) or 'w' (open for write).
-
-If there is no body, returns false.
-
-=cut
-
-sub open {
- my $self = shift;
- $self->bodyhandle and $self->bodyhandle->open(@_);
-}
-
-#------------------------------
-
-=item parts
-
-=item parts INDEX
-
-=item parts ARRAYREF
-
-I<Instance method.>
-Return the MIME::Entity objects which are the sub parts of this
-entity (if any).
-
-I<If no argument is given,> returns the array of all sub parts,
-returning the empty array if there are none (e.g., if this is a single
-part message, or a degenerate multipart). In a scalar context, this
-returns you the number of parts.
-
-I<If an integer INDEX is given,> return the INDEXed part,
-or undef if it doesn't exist.
-
-I<If an ARRAYREF to an array of parts is given,> then this method I<sets>
-the parts to a copy of that array, and returns the parts. This can
-be used to delete parts, as follows:
-
- ### Delete some parts of a multipart message:
- $msg->parts([ grep { keep_part($_) } $msg->parts ]);
-
-
-B<Note:> for multipart messages, the preamble and epilogue are I<not>
-considered parts. If you need them, use the C<preamble()> and C<epilogue()>
-methods.
-
-B<Note:> there are ways of parsing with a MIME::Parser which cause
-certain message parts (such as those of type C<message/rfc822>)
-to be "reparsed" into pseudo-multipart entities. You should read the
-documentation for those options carefully: it I<is> possible for
-a diddled entity to not be multipart, but still have parts attached to it!
-
-See L</bodyhandle> for a discussion of parts vs. bodies.
-
-=cut
-
-sub parts {
- my $self = shift;
- ref($_[0]) and return @{$self->{ME_Parts} = [@{$_[0]}]}; ### set the parts
- (@_ ? $self->{ME_Parts}[$_[0]] : @{$self->{ME_Parts}});
-}
-
-#------------------------------
-
-=item parts_DFS
-
-I<Instance method.>
-Return the list of all MIME::Entity objects included in the entity,
-starting with the entity itself, in depth-first-search order.
-If the entity has no parts, it alone will be returned.
-
-I<Thanks to Xavier Armengou for suggesting this method.>
-
-=cut
-
-sub parts_DFS {
- my $self = shift;
- return ($self, map { $_->parts_DFS } $self->parts);
-}
-
-#------------------------------
-
-=item preamble [LINES]
-
-I<Instance method.>
-Get/set the text of the preamble, as an array of newline-terminated LINES.
-Returns a reference to the array of lines, or undef if no preamble exists
-(e.g., if this is a single-part entity).
-
-If there is a preamble, it is output when printing this entity; otherwise,
-a default preamble is used. Setting the preamble to undef (not []!) causes
-it to fallback to the default.
-
-=cut
-
-sub preamble {
- my ($self, $lines) = @_;
- $self->{ME_Preamble} = $lines if @_ > 1;
- $self->{ME_Preamble};
-}
-
-
-
-
-
-=back
-
-=cut
-
-
-
-
-#==============================
-
-=head2 Manipulation
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item make_multipart [SUBTYPE], OPTSHASH...
-
-I<Instance method.>
-Force the entity to be a multipart, if it isn't already.
-We do this by replacing the original [singlepart] entity with a new
-multipart that has the same non-MIME headers ("From", "Subject", etc.),
-but all-new MIME headers ("Content-type", etc.). We then create
-a copy of the original singlepart, I<strip out> the non-MIME headers
-from that, and make it a part of the new multipart. So this:
-
- From: me
- To: you
- Content-type: text/plain
- Content-length: 12
-
- Hello there!
-
-Becomes something like this:
-
- From: me
- To: you
- Content-type: multipart/mixed; boundary="----abc----"
-
- ------abc----
- Content-type: text/plain
- Content-length: 12
-
- Hello there!
- ------abc------
-
-The actual type of the new top-level multipart will be "multipart/SUBTYPE"
-(default SUBTYPE is "mixed").
-
-Returns 'DONE' if we really did inflate a singlepart to a multipart.
-Returns 'ALREADY' (and does nothing) if entity is I<already> multipart
-and Force was not chosen.
-
-If OPTSHASH contains Force=>1, then we I<always> bump the top-level's
-content and content-headers down to a subpart of this entity, even if
-this entity is already a multipart. This is apparently of use to
-people who are tweaking messages after parsing them.
-
-=cut
-
-sub make_multipart {
- my ($self, $subtype, %opts) = @_;
- my $tag;
- $subtype ||= 'mixed';
- my $force = $opts{Force};
-
- ### Trap for simple case: already a multipart?
- return 'ALREADY' if ($self->is_multipart and !$force);
-
- ### Rip out our guts, and spew them into our future part:
- my $part = bless {%$self}, ref($self); ### part is a shallow copy
- %$self = (); ### lobotomize ourselves!
- $self->head($part->head->dup); ### dup the header
-
- ### Remove content headers from top-level, and set it up as a multipart:
- foreach $tag (grep {/^content-/i} $self->head->tags) {
- $self->head->delete($tag);
- }
- $self->head->mime_attr('Content-type' => "multipart/$subtype");
- $self->head->mime_attr('Content-type.boundary' => make_boundary());
-
- ### Remove NON-content headers from the part:
- foreach $tag (grep {!/^content-/i} $part->head->tags) {
- $part->head->delete($tag);
- }
-
- ### Add the [sole] part:
- $self->{ME_Parts} = [];
- $self->add_part($part);
- 'DONE';
-}
-
-#------------------------------
-
-=item make_singlepart
-
-I<Instance method.>
-If the entity is a multipart message with one part, this tries hard to
-rewrite it as a singlepart, by replacing the content (and content headers)
-of the top level with those of the part. Also crunches 0-part multiparts
-into singleparts.
-
-Returns 'DONE' if we really did collapse a multipart to a singlepart.
-Returns 'ALREADY' (and does nothing) if entity is already a singlepart.
-Returns '0' (and does nothing) if it can't be made into a singlepart.
-
-=cut
-
-sub make_singlepart {
- my $self = shift;
-
- ### Trap for simple cases:
- return 'ALREADY' if !$self->is_multipart; ### already a singlepart?
- return '0' if ($self->parts > 1); ### can this even be done?
-
- ### Do it:
- if ($self->parts == 1) { ### one part
- my $part = $self->parts(0);
- my $tag;
-
- ### Get rid of all our existing content info:
- foreach $tag (grep {/^content-/i} $self->head->tags) {
- $self->head->delete($tag);
- }
-
- ### Populate ourselves with any content info from the part:
- foreach $tag (grep {/^content-/i} $part->head->tags) {
- foreach ($part->head->get($tag)) { $self->head->add($tag, $_) }
- }
-
- ### Save reconstructed header, replace our guts, and restore header:
- my $new_head = $self->head;
- %$self = %$part; ### shallow copy is ok!
- $self->head($new_head);
-
- ### One more thing: the part *may* have been a multi with 0 or 1 parts!
- return $self->make_singlepart(@_) if $self->is_multipart;
- }
- else { ### no parts!
- $self->head->mime_attr('Content-type'=>'text/plain'); ### simple
- }
- 'DONE';
-}
-
-#------------------------------
-
-=item purge
-
-I<Instance method.>
-Recursively purge (e.g., unlink) all external (e.g., on-disk) body parts
-in this message. See MIME::Body::purge() for details.
-
-B<Note:> this does I<not> delete the directories that those body parts
-are contained in; only the actual message data files are deleted.
-This is because some parsers may be customized to create intermediate
-directories while others are not, and it's impossible for this class
-to know what directories are safe to remove. Only your application
-program truly knows that.
-
-B<If you really want to "clean everything up",> one good way is to
-use C<MIME::Parser::file_under()>, and then do this before parsing
-your next message:
-
- $parser->filer->purge();
-
-I wouldn't attempt to read those body files after you do this, for
-obvious reasons. As of MIME-tools 4.x, each body's path I<is> undefined
-after this operation. I warned you I might do this; truly I did.
-
-I<Thanks to Jason L. Tibbitts III for suggesting this method.>
-
-=cut
-
-sub purge {
- my $self = shift;
- $self->bodyhandle and $self->bodyhandle->purge; ### purge me
- foreach ($self->parts) { $_->purge } ### recurse
- 1;
-}
-
-#------------------------------
-#
-# _do_remove_sig
-#
-# Private. Remove a signature within NLINES lines from the end of BODY.
-# The signature must be flagged by a line containing only "-- ".
-
-sub _do_remove_sig {
- my ($body, $nlines) = @_;
- $nlines ||= 10;
- my $i = 0;
-
- my $line = int(@$body) || return;
- while ($i++ < $nlines and $line--) {
- if ($body->[$line] =~ /\A--[ \040][\r\n]+\Z/) {
- $#{$body} = $line-1;
- return;
- }
- }
-}
-
-#------------------------------
-
-=item remove_sig [NLINES]
-
-I<Instance method, override.>
-Attempts to remove a user's signature from the body of a message.
-
-It does this by looking for a line matching C</^-- $/> within the last
-C<NLINES> of the message. If found then that line and all lines after
-it will be removed. If C<NLINES> is not given, a default value of 10
-will be used. This would be of most use in auto-reply scripts.
-
-For MIME entity, this method is reasonably cautious: it will only
-attempt to un-sign a message with a content-type of C<text/*>.
-
-If you send remove_sig() to a multipart entity, it will relay it to
-the first part (the others usually being the "attachments").
-
-B<Warning:> currently slurps the whole message-part into core as an
-array of lines, so you probably don't want to use this on extremely
-long messages.
-
-Returns truth on success, false on error.
-
-=cut
-
-sub remove_sig {
- my $self = shift;
- my $nlines = shift;
-
- ### Handle multiparts:
- $self->is_multipart and return $self->{ME_Parts}[0]->remove_sig(@_);
-
- ### Refuse non-textual unless forced:
- textual_type($self->head->mime_type)
- or return error "I won't un-sign a non-text message unless I'm forced";
-
- ### Get body data, as an array of newline-terminated lines:
- $self->bodyhandle or return undef;
- my @body = $self->bodyhandle->as_lines;
-
- ### Nuke sig:
- _do_remove_sig(\@body, $nlines);
-
- ### Output data back into body:
- my $io = $self->bodyhandle->open("w");
- foreach (@body) { $io->print($_) }; ### body data
- $io->close;
-
- ### Done!
- 1;
-}
-
-#------------------------------
-
-=item sign PARAMHASH
-
-I<Instance method, override.>
-Append a signature to the message. The params are:
-
-=over 4
-
-=item Attach
-
-Instead of appending the text, add it to the message as an attachment.
-The disposition will be C<inline>, and the description will indicate
-that it is a signature. The default behavior is to append the signature
-to the text of the message (or the text of its first part if multipart).
-I<MIME-specific; new in this subclass.>
-
-=item File
-
-Use the contents of this file as the signature.
-Fatal error if it can't be read.
-I<As per superclass method.>
-
-=item Force
-
-Sign it even if the content-type isn't C<text/*>. Useful for
-non-standard types like C<x-foobar>, but be careful!
-I<MIME-specific; new in this subclass.>
-
-=item Remove
-
-Normally, we attempt to strip out any existing signature.
-If true, this gives us the NLINES parameter of the remove_sig call.
-If zero but defined, tells us I<not> to remove any existing signature.
-If undefined, removal is done with the default of 10 lines.
-I<New in this subclass.>
-
-=item Signature
-
-Use this text as the signature. You can supply it as either
-a scalar, or as a ref to an array of newline-terminated scalars.
-I<As per superclass method.>
-
-=back
-
-For MIME messages, this method is reasonably cautious: it will only
-attempt to sign a message with a content-type of C<text/*>, unless
-C<Force> is specified.
-
-If you send this message to a multipart entity, it will relay it to
-the first part (the others usually being the "attachments").
-
-B<Warning:> currently slurps the whole message-part into core as an
-array of lines, so you probably don't want to use this on extremely
-long messages.
-
-Returns true on success, false otherwise.
-
-=cut
-
-sub sign {
- my $self = shift;
- my %params = @_;
- my $io;
-
- ### If multipart and not attaching, try to sign our first part:
- if ($self->is_multipart and !$params{Attach}) {
- return $self->parts(0)->sign(@_);
- }
-
- ### Get signature:
- my $sig;
- if (defined($sig = $params{Signature})) { ### scalar or array
- $sig = (ref($sig) ? join('', @$sig) : $sig);
- }
- elsif ($params{File}) { ### file contents
- CORE::open SIG, $params{File} or croak "can't open $params{File}: $!";
- $sig = join('', SIG->getlines);
- close SIG;
- }
- else {
- croak "no signature given!";
- }
-
- ### Add signature to message as appropriate:
- if ($params{Attach}) { ### Attach .sig as new part...
- return $self->attach(Type => 'text/plain',
- Description => 'Signature',
- Disposition => 'inline',
- Encoding => '-SUGGEST',
- Data => $sig);
- }
- else { ### Add text of .sig to body data...
-
- ### Refuse non-textual unless forced:
- ($self->head->mime_type =~ m{text/}i or $params{Force}) or
- return error "I won't sign a non-text message unless I'm forced";
-
- ### Get body data, as an array of newline-terminated lines:
- $self->bodyhandle or return undef;
- my @body = $self->bodyhandle->as_lines;
-
- ### Nuke any existing sig?
- if (!defined($params{Remove}) || ($params{Remove} > 0)) {
- _do_remove_sig(\@body, $params{Remove});
- }
-
- ### Output data back into body, followed by signature:
- my $line;
- $io = $self->open("w");
- foreach $line (@body) { $io->print($line) }; ### body data
- (($body[-1]||'') =~ /\n\Z/) or $io->print("\n"); ### ensure final \n
- $io->print("-- \n$sig"); ### separator + sig
- $io->close;
- return 1; ### done!
- }
-}
-
-#------------------------------
-
-=item suggest_encoding
-
-I<Instance method.>
-Based on the effective content type, return a good suggested encoding.
-
-C<text> and C<message> types have their bodies scanned line-by-line
-for 8-bit characters and long lines; lack of either means that the
-message is 7bit-ok. Other types are chosen independent of their body:
-
- Major type: 7bit ok? Suggested encoding:
- -----------------------------------------------------------
- text yes 7bit
- text no quoted-printable
- message yes 7bit
- message no binary
- multipart * binary (in case some parts are bad)
- image, etc... * base64
-
-=cut
-
-### TO DO: resolve encodings of nested entities (possibly in sync_headers).
-
-sub suggest_encoding {
- my $self = shift;
-
- my ($type) = split '/', $self->effective_type;
- if (($type eq 'text') || ($type eq 'message')) { ### scan message body
- $self->bodyhandle || return ($self->parts ? 'binary' : '7bit');
- my ($IO, $unclean);
- if ($IO = $self->bodyhandle->open("r")) {
-
- ### Scan message for 7bit-cleanliness:
- while (defined($_ = $IO->getline)) {
- last if ($unclean = ((length($_) > 999) or /[\200-\377]/));
- }
-
- ### Return '7bit' if clean; try and encode if not...
- ### Note that encodings are not permitted for messages!
- return ($unclean
- ? (($type eq 'message') ? 'binary' : 'quoted-printable')
- : '7bit');
- }
- }
- else {
- return ($type eq 'multipart') ? 'binary' : 'base64';
- }
-}
-
-sub suggest_encoding_lite {
- my $self = shift;
- my ($type) = split '/', $self->effective_type;
- return (($type =~ /^(text|message|multipart)$/) ? 'binary' : 'base64');
-}
-
-#------------------------------
-
-=item sync_headers OPTIONS
-
-I<Instance method.>
-This method does a variety of activities which ensure that
-the MIME headers of an entity "tree" are in-synch with the body parts
-they describe. It can be as expensive an operation as printing
-if it involves pre-encoding the body parts; however, the aim is to
-produce fairly clean MIME. B<You will usually only need to invoke
-this if processing and re-sending MIME from an outside source.>
-
-The OPTIONS is a hash, which describes what is to be done.
-
-=over 4
-
-
-=item Length
-
-One of the "official unofficial" MIME fields is "Content-Length".
-Normally, one doesn't care a whit about this field; however, if
-you are preparing output destined for HTTP, you may. The value of
-this option dictates what will be done:
-
-B<COMPUTE> means to set a C<Content-Length> field for every non-multipart
-part in the entity, and to blank that field out for every multipart
-part in the entity.
-
-B<ERASE> means that C<Content-Length> fields will all
-be blanked out. This is fast, painless, and safe.
-
-B<Any false value> (the default) means to take no action.
-
-
-=item Nonstandard
-
-Any header field beginning with "Content-" is, according to the RFC,
-a MIME field. However, some are non-standard, and may cause problems
-with certain MIME readers which interpret them in different ways.
-
-B<ERASE> means that all such fields will be blanked out. This is
-done I<before> the B<Length> option (q.v.) is examined and acted upon.
-
-B<Any false value> (the default) means to take no action.
-
-
-=back
-
-Returns a true value if everything went okay, a false value otherwise.
-
-=cut
-
-sub sync_headers {
- my $self = shift;
- my $opts = ((int(@_) % 2 == 0) ? {@_} : shift);
- my $ENCBODY; ### keep it around until done!
-
- ### Get options:
- my $o_nonstandard = ($opts->{Nonstandard} || 0);
- my $o_length = ($opts->{Length} || 0);
-
- ### Get head:
- my $head = $self->head;
-
- ### What to do with "nonstandard" MIME fields?
- if ($o_nonstandard eq 'ERASE') { ### Erase them...
- my $tag;
- foreach $tag ($head->tags()) {
- if (($tag =~ /\AContent-/i) &&
- ($tag !~ /\AContent-$StandardFields\Z/io)) {
- $head->delete($tag);
- }
- }
- }
-
- ### What to do with the "Content-Length" MIME field?
- if ($o_length eq 'COMPUTE') { ### Compute the content length...
- my $content_length = '';
-
- ### We don't have content-lengths in multiparts...
- if ($self->is_multipart) { ### multipart...
- $head->delete('Content-length');
- }
- else { ### singlepart...
-
- ### Get the encoded body, if we don't have it already:
- unless ($ENCBODY) {
- $ENCBODY = tmpopen() || die "can't open tmpfile";
- $self->print_body($ENCBODY); ### write encoded to tmpfile
- }
-
- ### Analyse it:
- $ENCBODY->seek(0,2); ### fast-forward
- $content_length = $ENCBODY->tell; ### get encoded length
- $ENCBODY->seek(0,0); ### rewind
-
- ### Remember:
- $self->head->replace('Content-length', $content_length);
- }
- }
- elsif ($o_length eq 'ERASE') { ### Erase the content-length...
- $head->delete('Content-length');
- }
-
- ### Done with everything for us!
- undef($ENCBODY);
-
- ### Recurse:
- my $part;
- foreach $part ($self->parts) { $part->sync_headers($opts) or return undef }
- 1;
-}
-
-#------------------------------
-
-=item tidy_body
-
-I<Instance method, override.>
-Currently unimplemented for MIME messages. Does nothing, returns false.
-
-=cut
-
-sub tidy_body {
- usage "MIME::Entity::tidy_body currently does nothing";
- 0;
-}
-
-=back
-
-=cut
-
-
-
-
-
-#==============================
-
-=head2 Output
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item dump_skeleton [FILEHANDLE]
-
-I<Instance method.>
-Dump the skeleton of the entity to the given FILEHANDLE, or
-to the currently-selected one if none given.
-
-Each entity is output with an appropriate indentation level,
-the following selection of attributes:
-
- Content-type: multipart/mixed
- Effective-type: multipart/mixed
- Body-file: NONE
- Subject: Hey there!
- Num-parts: 2
-
-This is really just useful for debugging purposes; I make no guarantees
-about the consistency of the output format over time.
-
-=cut
-
-sub dump_skeleton {
- my ($self, $fh, $indent) = @_;
- $fh or $fh = select;
- defined($indent) or $indent = 0;
- my $ind = ' ' x $indent;
- my $part;
- no strict 'refs';
-
-
- ### The content type:
- print $fh $ind,"Content-type: ", ($self->mime_type||'UNKNOWN'),"\n";
- print $fh $ind,"Effective-type: ", ($self->effective_type||'UNKNOWN'),"\n";
-
- ### The name of the file containing the body (if any!):
- my $path = ($self->bodyhandle ? $self->bodyhandle->path : undef);
- print $fh $ind, "Body-file: ", ($path || 'NONE'), "\n";
-
- ### The recommended file name (thanks to Allen Campbell):
- my $filename = $self->head->recommended_filename;
- print $fh $ind, "Recommended-filename: ", $filename, "\n" if ($filename);
-
- ### The subject (note: already a newline if 2.x!)
- my $subj = $self->head->get('subject',0);
- defined($subj) or $subj = '';
- chomp($subj);
- print $fh $ind, "Subject: $subj\n" if $subj;
-
- ### The parts:
- my @parts = $self->parts;
- print $fh $ind, "Num-parts: ", int(@parts), "\n" if @parts;
- print $fh $ind, "--\n";
- foreach $part (@parts) {
- $part->dump_skeleton($fh, $indent+1);
- }
-}
-
-#------------------------------
-
-=item print [OUTSTREAM]
-
-I<Instance method, override.>
-Print the entity to the given OUTSTREAM, or to the currently-selected
-filehandle if none given. OUTSTREAM can be a filehandle, or any object
-that reponds to a print() message.
-
-The entity is output as a valid MIME stream! This means that the
-header is always output first, and the body data (if any) will be
-encoded if the header says that it should be.
-For example, your output may look like this:
-
- Subject: Greetings
- Content-transfer-encoding: base64
-
- SGkgdGhlcmUhCkJ5ZSB0aGVyZSEK
-
-I<If this entity has MIME type "multipart/*",>
-the preamble, parts, and epilogue are all output with appropriate
-boundaries separating each.
-Any bodyhandle is ignored:
-
- Content-type: multipart/mixed; boundary="*----*"
- Content-transfer-encoding: 7bit
-
- [Preamble]
- --*----*
- [Entity: Part 0]
- --*----*
- [Entity: Part 1]
- --*----*--
- [Epilogue]
-
-I<If this entity has a single-part MIME type with no attached parts,>
-then we're looking at a normal singlepart entity: the body is output
-according to the encoding specified by the header.
-If no body exists, a warning is output and the body is treated as empty:
-
- Content-type: image/gif
- Content-transfer-encoding: base64
-
- [Encoded body]
-
-I<If this entity has a single-part MIME type but it also has parts,>
-then we're probably looking at a "re-parsed" singlepart, usually one
-of type C<message/*> (you can get entities like this if you set the
-C<parse_nested_messages(NEST)> option on the parser to true).
-In this case, the parts are output with single blank lines separating each,
-and any bodyhandle is ignored:
-
- Content-type: message/rfc822
- Content-transfer-encoding: 7bit
-
- [Entity: Part 0]
-
- [Entity: Part 1]
-
-In all cases, when outputting a "part" of the entity, this method
-is invoked recursively.
-
-B<Note:> the output is very likely I<not> going to be identical
-to any input you parsed to get this entity. If you're building
-some sort of email handler, it's up to you to save this information.
-
-=cut
-
-use Symbol;
-sub print {
- my ($self, $out) = @_;
- $out = select if @_ < 2;
- $out = Symbol::qualify($out,scalar(caller)) unless ref($out);
- $out = wraphandle($out); ### get a printable output
-
- $self->print_header($out); ### the header
- $out->print("\n");
- $self->print_body($out); ### the "stuff after the header"
-}
-
-#------------------------------
-
-=item print_body [OUTSTREAM]
-
-I<Instance method, override.>
-Print the body of the entity to the given OUTSTREAM, or to the
-currently-selected filehandle if none given. OUTSTREAM can be a
-filehandle, or any object that reponds to a print() message.
-
-The body is output for inclusion in a valid MIME stream; this means
-that the body data will be encoded if the header says that it should be.
-
-B<Note:> by "body", we mean "the stuff following the header".
-A printed multipart body includes the printed representations of its subparts.
-
-B<Note:> The body is I<stored> in an un-encoded form; however, the idea is that
-the transfer encoding is used to determine how it should be I<output.>
-This means that the C<print()> method is always guaranteed to get you
-a sendmail-ready stream whose body is consistent with its head.
-If you want the I<raw body data> to be output, you can either read it from
-the bodyhandle yourself, or use:
-
- $ent->bodyhandle->print($outstream);
-
-which uses read() calls to extract the information, and thus will
-work with both text and binary bodies.
-
-B<Warning:> Please supply an OUTSTREAM. This override method differs
-from Mail::Internet's behavior, which outputs to the STDOUT if no
-filehandle is given: this may lead to confusion.
-
-=cut
-
-sub print_body {
- my ($self, $out) = @_;
- $out = wraphandle($out || select); ### get a printable output
- my ($type) = split '/', lc($self->mime_type); ### handle by MIME type
-
- ### Multipart...
- if ($type eq 'multipart') {
- my $boundary = $self->head->multipart_boundary;
-
- ### Preamble:
- my $preamble = join('', @{ $self->preamble || $DefPreamble });
- $out->print("$preamble\n") if ($preamble ne '');
-
- ### Parts:
- my $part;
- foreach $part ($self->parts) {
- $out->print("--$boundary\n");
- $part->print($out);
- $out->print("\n"); ### needed for next delim/close
- }
- $out->print("--$boundary--\n");
-
- ### Epilogue:
- my $epilogue = join('', @{ $self->epilogue || $DefEpilogue });
- if ($epilogue ne '') {
- $out->print($epilogue);
- $out->print("\n") if ($epilogue !~ /\n\Z/); ### be nice
- }
- }
-
- ### Singlepart type with parts...
- ### This makes $ent->print handle message/rfc822 bodies
- ### when parse_nested_messages('NEST') is on [idea by Marc Rouleau].
- elsif ($self->parts) {
- my $need_sep = 0;
- my $part;
- foreach $part ($self->parts) {
- $out->print("\n\n") if $need_sep++;
- $part->print($out);
- }
- }
-
- ### Singlepart type, or no parts: output body...
- else {
- $self->bodyhandle ? $self->print_bodyhandle($out)
- : whine "missing body; treated as empty";
- }
- 1;
-}
-
-#------------------------------
-#
-# print_bodyhandle
-#
-# Instance method, unpublicized. Print just the bodyhandle, *encoded*.
-#
-# WARNING: $self->print_bodyhandle() != $self->bodyhandle->print()!
-# The former encodes, and the latter does not!
-#
-sub print_bodyhandle {
- my ($self, $out) = @_;
- $out = wraphandle($out || select); ### get a printable output
-
- ### Get the encoding, defaulting to "binary" if unsupported:
- my $encoding = ($self->head->mime_encoding || 'binary');
- my $decoder = best MIME::Decoder $encoding;
- $decoder->head($self->head); ### associate with head, if any
-
- ### Output the body:
- my $IO = $self->open("r") || die "open body: $!";
- $decoder->encode($IO, $out) || return error "encoding failed";
- $IO->close;
- 1;
-}
-
-#------------------------------
-
-=item print_header [OUTSTREAM]
-
-I<Instance method, inherited.>
-Output the header to the given OUTSTREAM. You really should supply
-the OUTSTREAM.
-
-=cut
-
-### Inherited.
-
-#------------------------------
-
-=item stringify
-
-I<Instance method.>
-Return the entity as a string, exactly as C<print> would print it.
-The body will be encoded as necessary, and will contain any subparts.
-You can also use C<as_string()>.
-
-=cut
-
-sub stringify {
- my $str = '';
- shift->print(new IO::Scalar \$str);
- $str;
-}
-sub as_string { shift->stringify }; ### silent BC
-
-#------------------------------
-
-=item stringify_body
-
-I<Instance method.>
-Return the I<encoded> message body as a string, exactly as C<print_body>
-would print it. You can also use C<body_as_string()>.
-
-If you want the I<unencoded> body, and you are dealing with a
-singlepart message (like a "text/plain"), use C<bodyhandle()> instead:
-
- if ($ent->bodyhandle) {
- $unencoded_data = $ent->bodyhandle->as_string;
- }
- else {
- ### this message has no body data (but it might have parts!)
- }
-
-=cut
-
-sub stringify_body {
- my $str = '';
- shift->print_body(new IO::Scalar \$str);
- $str;
-}
-sub body_as_string { shift->stringify_body }
-
-#------------------------------
-#
-# stringify_bodyhandle
-#
-# Instance method, unpublicized. Stringify just the bodyhandle.
-
-sub stringify_bodyhandle {
- my $str = '';
- shift->print_bodyhandle(new IO::Scalar \$str);
- $str;
-}
-sub bodyhandle_as_string { shift->stringify_bodyhandle }
-
-#------------------------------
-
-=item stringify_header
-
-I<Instance method.>
-Return the header as a string, exactly as C<print_header> would print it.
-You can also use C<header_as_string()>.
-
-=cut
-
-sub stringify_header {
- shift->head->stringify;
-}
-sub header_as_string { shift->stringify_header }
-
-
-
-__END__
-1;
-
-#------------------------------
-
-=back
-
-=head1 NOTES
-
-=head2 Under the hood
-
-A B<MIME::Entity> is composed of the following elements:
-
-=over 4
-
-=item *
-
-A I<head>, which is a reference to a MIME::Head object
-containing the header information.
-
-=item *
-
-A I<bodyhandle>, which is a reference to a MIME::Body object
-containing the decoded body data. This is only defined if
-the message is a "singlepart" type:
-
- application/*
- audio/*
- image/*
- text/*
- video/*
-
-=item *
-
-An array of I<parts>, where each part is a MIME::Entity object.
-The number of parts will only be nonzero if the content-type
-is I<not> one of the "singlepart" types:
-
- message/* (should have exactly one part)
- multipart/* (should have one or more parts)
-
-
-=back
-
-
-
-=head2 The "two-body problem"
-
-MIME::Entity and Mail::Internet see message bodies differently,
-and this can cause confusion and some inconvenience. Sadly, I can't
-change the behavior of MIME::Entity without breaking lots of code already
-out there. But let's open up the floor for a few questions...
-
-=over 4
-
-=item What is the difference between a "message" and an "entity"?
-
-A B<message> is the actual data being sent or received; usually
-this means a stream of newline-terminated lines.
-An B<entity> is the representation of a message as an object.
-
-This means that you get a "message" when you print an "entity"
-I<to> a filehandle, and you get an "entity" when you parse a message
-I<from> a filehandle.
-
-
-=item What is a message body?
-
-B<Mail::Internet:>
-The portion of the printed message after the header.
-
-B<MIME::Entity:>
-The portion of the printed message after the header.
-
-
-=item How is a message body stored in an entity?
-
-B<Mail::Internet:>
-As an array of lines.
-
-B<MIME::Entity:>
-It depends on the content-type of the message.
-For "container" types (C<multipart/*>, C<message/*>), we store the
-contained entities as an array of "parts", accessed via the C<parts()>
-method, where each part is a complete MIME::Entity.
-For "singlepart" types (C<text/*>, C<image/*>, etc.), the unencoded
-body data is referenced via a MIME::Body object, accessed via
-the C<bodyhandle()> method:
-
- bodyhandle() parts()
- Content-type: returns: returns:
- ------------------------------------------------------------
- application/* MIME::Body empty
- audio/* MIME::Body empty
- image/* MIME::Body empty
- message/* undef MIME::Entity list (usually 1)
- multipart/* undef MIME::Entity list (usually >0)
- text/* MIME::Body empty
- video/* MIME::Body empty
- x-*/* MIME::Body empty
-
-As a special case, C<message/*> is currently ambiguous: depending
-on the parser, a C<message/*> might be treated as a singlepart,
-with a MIME::Body and no parts. Use bodyhandle() as the final
-arbiter.
-
-
-=item What does the body() method return?
-
-B<Mail::Internet:>
-As an array of lines, ready for sending.
-
-B<MIME::Entity:>
-As an array of lines, ready for sending.
-
-
-=item If an entity has a body, does it have a soul as well?
-
-The soul does not exist in a corporeal sense, the way the body does;
-it is not a solid [Perl] object. Rather, it is a virtual object
-which is only visible when you print() an entity to a file... in other
-words, the "soul" it is all that is left after the body is DESTROY'ed.
-
-
-=item What's the best way to get at the body data?
-
-B<Mail::Internet:>
-Use the body() method.
-
-B<MIME::Entity:>
-Depends on what you want... the I<encoded> data (as it is
-transported), or the I<unencoded> data? Keep reading...
-
-
-=item How do I get the "encoded" body data?
-
-B<Mail::Internet:>
-Use the body() method.
-
-B<MIME::Entity:>
-Use the body() method. You can also use:
-
- $entity->print_body()
- $entity->stringify_body() ### a.k.a. $entity->body_as_string()
-
-
-=item How do I get the "unencoded" body data?
-
-B<Mail::Internet:>
-Use the body() method.
-
-B<MIME::Entity:>
-Use the I<bodyhandle()> method!
-If bodyhandle() method returns true, then that value is a
-L<MIME::Body|MIME::Body> which can be used to access the data via
-its open() method. If bodyhandle() method returns an undefined value,
-then the entity is probably a "container" that has no real body data of
-its own (e.g., a "multipart" message): in this case, you should access
-the components via the parts() method. Like this:
-
- if ($bh = $entity->bodyhandle) {
- $io = $bh->open;
- ...access unencoded data via $io->getline or $io->read...
- $io->close;
- }
- else {
- foreach my $part (@parts) {
- ...do something with the part...
- }
- }
-
-You can also use:
-
- if ($bh = $entity->bodyhandle) {
- $unencoded_data = $bh->as_string;
- }
- else {
- ...do stuff with the parts...
- }
-
-
-=item What does the body() method return?
-
-B<Mail::Internet:>
-The transport-encoded message body, as an array of lines.
-
-B<MIME::Entity:>
-The transport-encoded message body, as an array of lines.
-
-
-=item What does print_body() print?
-
-B<Mail::Internet:>
-Exactly what body() would return to you.
-
-B<MIME::Entity:>
-Exactly what body() would return to you.
-
-
-=item Say I have an entity which might be either singlepart or multipart.
- How do I print out just "the stuff after the header"?
-
-B<Mail::Internet:>
-Use print_body().
-
-B<MIME::Entity:>
-Use print_body().
-
-
-=item Why is MIME::Entity so different from Mail::Internet?
-
-Because MIME streams are expected to have non-textual data...
-possibly, quite a lot of it, such as a tar file.
-
-Because MIME messages can consist of multiple parts, which are most-easily
-manipulated as MIME::Entity objects themselves.
-
-Because in the simpler world of Mail::Internet, the data of a message
-and its printed representation are I<identical>... and in the MIME
-world, they're not.
-
-Because parsing multipart bodies on-the-fly, or formatting multipart
-bodies for output, is a non-trivial task.
-
-
-=item This is confusing. Can the two classes be made more compatible?
-
-Not easily; their implementations are necessarily quite different.
-Mail::Internet is a simple, efficient way of dealing with a "black box"
-mail message... one whose internal data you don't care much about.
-MIME::Entity, in contrast, cares I<very much> about the message contents:
-that's its job!
-
-=back
-
-
-
-=head2 Design issues
-
-=over 4
-
-=item Some things just can't be ignored
-
-In multipart messages, the I<"preamble"> is the portion that precedes
-the first encapsulation boundary, and the I<"epilogue"> is the portion
-that follows the last encapsulation boundary.
-
-According to RFC-1521:
-
- There appears to be room for additional information prior
- to the first encapsulation boundary and following the final
- boundary. These areas should generally be left blank, and
- implementations must ignore anything that appears before the
- first boundary or after the last one.
-
- NOTE: These "preamble" and "epilogue" areas are generally
- not used because of the lack of proper typing of these parts
- and the lack of clear semantics for handling these areas at
- gateways, particularly X.400 gateways. However, rather than
- leaving the preamble area blank, many MIME implementations
- have found this to be a convenient place to insert an
- explanatory note for recipients who read the message with
- pre-MIME software, since such notes will be ignored by
- MIME-compliant software.
-
-In the world of standards-and-practices, that's the standard.
-Now for the practice:
-
-I<Some "MIME" mailers may incorrectly put a "part" in the preamble>.
-Since we have to parse over the stuff I<anyway>, in the future I
-I<may> allow the parser option of creating special MIME::Entity objects
-for the preamble and epilogue, with bogus MIME::Head objects.
-
-For now, though, we're MIME-compliant, so I probably won't change
-how we work.
-
-=back
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-#------------------------------
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ConTraEnc.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ConTraEnc.pm
deleted file mode 100644
index e327883..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ConTraEnc.pm
+++ /dev/null
@@ -1,59 +0,0 @@
-package MIME::Field::ConTraEnc;
-
-
-=head1 NAME
-
-MIME::Field::ConTraEnc - a "Content-transfer-encoding" field
-
-
-=head1 DESCRIPTION
-
-A subclass of Mail::Field.
-
-I<Don't use this class directly... its name may change in the future!>
-Instead, ask Mail::Field for new instances based on the field name!
-
-
-=head1 SYNOPSIS
-
- use Mail::Field;
- use MIME::Head;
-
- # Create an instance from some text:
- $field = Mail::Field->new('Content-transfer-encoding', '7bit');
-
- # Get the encoding.
- # Possible values: 'binary', '7bit', '8bit', 'quoted-printable',
- # 'base64' and '' (unspecified). Note that there can't be a
- # single default for this, since it depends on the content type!
- $encoding = $field->encoding;
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-=cut
-
-require 5.001;
-use strict;
-use MIME::Field::ParamVal;
-use vars qw($VERSION @ISA);
-
-@ISA = qw(MIME::Field::ParamVal);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-# Install it:
-bless([])->register('Content-transfer-encoding');
-
-#------------------------------
-
-sub encoding {
- shift->paramstr('_', @_);
-}
-
-#------------------------------
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContDisp.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContDisp.pm
deleted file mode 100644
index 0eb26bf..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContDisp.pm
+++ /dev/null
@@ -1,64 +0,0 @@
-package MIME::Field::ContDisp;
-
-
-=head1 NAME
-
-MIME::Field::ContDisp - a "Content-disposition" field
-
-
-=head1 DESCRIPTION
-
-A subclass of Mail::Field.
-
-I<Don't use this class directly... its name may change in the future!>
-Instead, ask Mail::Field for new instances based on the field name!
-
-
-=head1 SYNOPSIS
-
- use Mail::Field;
- use MIME::Head;
-
- # Create an instance from some text:
- $field = Mail::Field->new('Content-disposition', $text);
-
- # Inline or attachment?
- $type = $field->type;
-
- # Recommended filename?
- $filename = $field->filename;
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-
-=cut
-
-require 5.001;
-use strict;
-use MIME::Field::ParamVal;
-use vars qw($VERSION @ISA);
-
-@ISA = qw(MIME::Field::ParamVal);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-# Install it:
-bless([])->register('Content-disposition');
-
-#------------------------------
-
-sub filename {
- shift->paramstr('filename', @_);
-}
-
-sub type {
- shift->paramstr('_', @_);
-}
-
-#------------------------------
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContType.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContType.pm
deleted file mode 100644
index c0e1102..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ContType.pm
+++ /dev/null
@@ -1,202 +0,0 @@
-package MIME::Field::ContType;
-
-
-=head1 NAME
-
-MIME::Field::ContType - a "Content-type" field
-
-
-=head1 DESCRIPTION
-
-A subclass of Mail::Field.
-
-I<Don't use this class directly... its name may change in the future!>
-Instead, ask Mail::Field for new instances based on the field name!
-
-
-=head1 SYNOPSIS
-
- use Mail::Field;
- use MIME::Head;
-
- # Create an instance from some text:
- $field = Mail::Field->new('Content-type',
- 'text/HTML; charset="US-ASCII"');
-
- # Get the MIME type, like 'text/plain' or 'x-foobar'.
- # Returns 'text/plain' as default, as per RFC-1521:
- my ($type, $subtype) = split('/', $field->type);
-
- # Get generic information:
- print $field->name;
-
- # Get information related to "message" type:
- if ($type eq 'message') {
- print $field->id;
- print $field->number;
- print $field->total;
- }
-
- # Get information related to "multipart" type:
- if ($type eq 'multipart') {
- print $field->boundary; # the basic value, fixed up
- print $field->multipart_boundary; # empty if not a multipart message!
- }
-
- # Get information related to "text" type:
- if ($type eq 'text') {
- print $field->charset; # returns 'us-ascii' as default
- }
-
-
-=head1 PUBLIC INTERFACE
-
-=over 4
-
-=cut
-
-require 5.001;
-use strict;
-use MIME::Field::ParamVal;
-use vars qw($VERSION @ISA);
-
-@ISA = qw(MIME::Field::ParamVal);
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-# Install it:
-bless([])->register('Content-type');
-
-# Pattern to match an RFC-1521 token.
-# NOTE: should just use the REs in MIME::Field::ParamVal!
-#
-# token = 1*<any (ASCII) CHAR except SPACE, CTLs, or tspecials>
-#
-my $TSPECIAL = '()<>@,;:\</[]?="';
-my $TOKEN = '[^ \x00-\x1f\x80-\xff' . "\Q$TSPECIAL\E" . ']+';
-
-
-
-#------------------------------
-#
-# Basic access/storage methods...
-#
-sub charset {
- lc(shift->paramstr('charset', @_)) || 'us-ascii'; # RFC-1521
-}
-sub id {
- shift->paramstr('id', @_);
-}
-sub name {
- shift->paramstr('name', @_);
-}
-sub number {
- shift->paramstr('number', @_);
-}
-sub total {
- shift->paramstr('total', @_);
-}
-
-
-#------------------------------
-
-=item boundary
-
-Return the boundary field. The boundary is returned exactly
-as given in the C<Content-type:> field; that is, the leading
-double-hyphen (C<-->) is I<not> prepended.
-
-(Well, I<almost> exactly... from RFC-1521:
-
- (If a boundary appears to end with white space, the white space
- must be presumed to have been added by a gateway, and must be deleted.)
-
-so we oblige and remove any trailing spaces.)
-
-Returns the empty string if there is no boundary, or if the boundary is
-illegal (e.g., if it is empty after all trailing whitespace has been
-removed).
-
-=cut
-
-sub boundary {
- my $value = shift->param('boundary', @_);
- defined($value) || return '';
- $value =~ s/\s+$//; # kill trailing white, per RFC-1521
- $value;
-}
-
-#------------------------------
-
-=item multipart_boundary
-
-Like C<boundary()>, except that this will also return the empty
-string if the message is not a multipart message. In other words,
-there's an automatic sanity check.
-
-=cut
-
-sub multipart_boundary {
- my $self = shift;
- my ($type) = split('/', $self->type);
- return '' if ($type ne 'multipart'); # not multipart!
- $self->boundary; # okay, return the boundary
-}
-
-#------------------------------
-
-=item type
-
-Try real hard to determine the content type (e.g., C<"text/plain">,
-C<"image/gif">, C<"x-weird-type">, which is returned
-in all-lowercase.
-
-A happy thing: the following code will work just as you would want,
-even if there's no subtype (as in C<"x-weird-type">)... in such a case,
-the $subtype would simply be the empty string:
-
- ($type, $subtype) = split('/', $head->mime_type);
-
-If the content-type information is missing, it defaults to C<"text/plain">,
-as per RFC-1521:
-
- Default RFC-822 messages are typed by this protocol as plain text in
- the US-ASCII character set, which can be explicitly specified as
- "Content-type: text/plain; charset=us-ascii". If no Content-Type is
- specified, this default is assumed.
-
-B<Note:> under the "be liberal in what we accept" principle, this routine
-no longer syntax-checks the content type. If it ain't empty,
-just downcase and return it.
-
-=cut
-
-sub type {
- lc(shift->paramstr('_', @_)) || 'text/plain'; # RFC-1521
-}
-
-#------------------------------
-
-=back
-
-
-=head1 NOTES
-
-Since nearly all (if not all) parameters must have non-empty values
-to be considered valid, we just return the empty string to signify
-missing fields. If you need to get the I<real> underlying value,
-use the inherited C<param()> method (which returns undef if the
-parameter is missing).
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-=cut
-
-1;
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ParamVal.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ParamVal.pm
deleted file mode 100644
index 9ef2f8e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Field/ParamVal.pm
+++ /dev/null
@@ -1,307 +0,0 @@
-package MIME::Field::ParamVal;
-
-
-=head1 NAME
-
-MIME::Field::ParamVal - subclass of Mail::Field, for structured MIME fields
-
-
-=head1 SYNOPSIS
-
- # Create an object for a content-type field:
- $field = new Mail::Field 'Content-type';
-
- # Set some attributes:
- $field->param('_' => 'text/html');
- $field->param('charset' => 'us-ascii');
- $field->param('boundary' => '---ABC---');
-
- # Same:
- $field->set('_' => 'text/html',
- 'charset' => 'us-ascii',
- 'boundary' => '---ABC---');
-
- # Get an attribute, or undefined if not present:
- print "no id!" if defined($field->param('id'));
-
- # Same, but use empty string for missing values:
- print "no id!" if ($field->paramstr('id') eq '');
-
- # Output as string:
- print $field->stringify, "\n";
-
-
-=head1 DESCRIPTION
-
-This is an abstract superclass of most MIME fields. It handles
-fields with a general syntax like this:
-
- Content-Type: Message/Partial;
- number=2; total=3;
- id="oc=jpbe0M2Yt4s(a)thumper.bellcore.com"
-
-Comments are supported I<between> items, like this:
-
- Content-Type: Message/Partial; (a comment)
- number=2 (another comment) ; (yet another comment) total=3;
- id="oc=jpbe0M2Yt4s(a)thumper.bellcore.com"
-
-
-=head1 PUBLIC INTERFACE
-
-=over 4
-
-=cut
-
-#------------------------------
-
-require 5.001;
-
-# Pragmas:
-use strict;
-use vars qw($VERSION @ISA);
-
-# System modules:
-
-
-# Other modules:
-use Mail::Field;
-
-# Kit modules:
-use MIME::Tools qw(:config :msgs);
-
-@ISA = qw(Mail::Field);
-
-
-#------------------------------
-#
-# Public globals...
-#
-#------------------------------
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-
-#------------------------------
-#
-# Private globals...
-#
-#------------------------------
-
-# Pattern to match parameter names (like fieldnames, but = not allowed):
-my $PARAMNAME = '[^\x00-\x1f\x80-\xff :=]+';
-
-# Pattern to match the first value on the line:
-my $FIRST = '[^\s\;\x00-\x1f\x80-\xff]+';
-
-# Pattern to match an RFC-1521 token:
-#
-# token = 1*<any (ASCII) CHAR except SPACE, CTLs, or tspecials>
-#
-my $TSPECIAL = '()<>@,;:\</[]?="';
-my $TOKEN = '[^ \x00-\x1f\x80-\xff' . "\Q$TSPECIAL\E" . ']+';
-
-# Encoded token:
-my $ENCTOKEN = "=\\?[^?]*\\?[A-Za-z]\\?[^?]+\\?=";
-
-# Pattern to match spaces or comments:
-my $SPCZ = '(?:\s|\([^\)]*\))*';
-
-
-#------------------------------
-#
-# Class init...
-#
-#------------------------------
-
-#------------------------------
-
-=item set [\%PARAMHASH | KEY=>VAL,...,KEY=>VAL]
-
-I<Instance method.> Set this field.
-The paramhash should contain parameter names
-in I<all lowercase>, with the special C<"_"> parameter name
-signifying the "default" (unnamed) parameter for the field:
-
- # Set up to be...
- #
- # Content-type: Message/Partial; number=2; total=3; id="ocj=pbe0M2"
- #
- $conttype->set('_' => 'Message/Partial',
- 'number' => 2,
- 'total' => 3,
- 'id' => "ocj=pbe0M2");
-
-Note that a single argument is taken to be a I<reference> to
-a paramhash, while multiple args are taken to be the elements
-of the paramhash themselves.
-
-Supplying undef for a hashref, or an empty set of values, effectively
-clears the object.
-
-The self object is returned.
-
-=cut
-
-sub set {
- my $self = shift;
- my $params = ((@_ == 1) ? (shift || {}) : {@_});
- %$self = %$params; # set 'em
- $self;
-}
-
-#------------------------------
-
-=item parse_params STRING
-
-I<Class/instance utility method.>
-Extract parameter info from a structured field, and return
-it as a hash reference. For example, here is a field with parameters:
-
- Content-Type: Message/Partial;
- number=2; total=3;
- id="oc=jpbe0M2Yt4s(a)thumper.bellcore.com"
-
-Here is how you'd extract them:
-
- $params = $class->parse_params('content-type');
- if ($$params{'_'} eq 'message/partial') {
- $number = $$params{'number'};
- $total = $$params{'total'};
- $id = $$params{'id'};
- }
-
-Like field names, parameter names are coerced to lowercase.
-The special '_' parameter means the default parameter for the
-field.
-
-B<NOTE:> This has been provided as a public method to support backwards
-compatibility, but you probably shouldn't use it.
-
-=cut
-
-sub parse_params {
- my ($self, $raw) = @_;
- my %params = ();
- my $param;
-
- # Get raw field, and unfold it:
- defined($raw) or $raw = '';
- $raw =~ s/\n//g;
-
- # Extract special first parameter:
- $raw =~ m/\A$SPCZ($FIRST)$SPCZ/og or return {}; # nada!
- $params{'_'} = $1;
-
- # Extract subsequent parameters.
- # No, we can't just "split" on semicolons: they're legal in quoted strings!
- while (1) { # keep chopping away until done...
- $raw =~ m/\G$SPCZ\;$SPCZ/og or last; # skip leading separator
- $raw =~ m/\G($PARAMNAME)\s*=\s*/og or last; # give up if not a param
- $param = lc($1);
- $raw =~ m/\G(\"([^\"]+)\")|\G($TOKEN)|\G($ENCTOKEN)/g or last; # give up if no value
- my ($qstr, $str, $token, $enctoken) = ($1, $2, $3, $4);
- $params{$param} = defined($qstr) ? $str : (defined($token) ? $token : $enctoken);
- debug " field param <$param> = <$params{$param}>";
- }
-
- # Done:
- \%params;
-}
-
-#------------------------------
-
-=item parse STRING
-
-I<Class/instance method.>
-Parse the string into the instance. Any previous information is wiped.
-The self object is returned.
-
-May also be used as a constructor.
-
-=cut
-
-sub parse {
- my ($self, $string) = @_;
-
- # Allow use as constructor, for MIME::Head:
- ref($self) or $self = bless({}, $self);
-
- # Get params, and stuff them into the self object:
- $self->set($self->parse_params($string));
-}
-
-#------------------------------
-
-=item param PARAMNAME,[VALUE]
-
-I<Instance method.>
-Return the given parameter, or undef if it isn't there.
-With argument, set the parameter to that VALUE.
-The PARAMNAME is case-insensitive. A "_" refers to the "default" parameter.
-
-=cut
-
-sub param {
- my ($self, $paramname, $value) = @_;
- $paramname = lc($paramname);
- $self->{$paramname} = $value if (@_ > 2);
- $self->{$paramname}
-}
-
-#------------------------------
-
-=item paramstr PARAMNAME,[VALUE]
-
-I<Instance method.>
-Like param(): return the given parameter, or I<empty> if it isn't there.
-With argument, set the parameter to that VALUE.
-The PARAMNAME is case-insensitive. A "_" refers to the "default" parameter.
-
-=cut
-
-sub paramstr {
- my $val = shift->param(@_);
- (defined($val) ? $val : '');
-}
-
-#------------------------------
-
-=item stringify
-
-I<Instance method.>
-Convert the field to a string, and return it.
-
-=cut
-
-sub stringify {
- my $self = shift;
- my ($key, $val);
-
- my $str = $self->{'_'}; # default subfield
- foreach $key (sort keys %$self) {
- next if ($key !~ /^[a-z][a-z-_0-9]*$/); # only lowercase ones!
- defined($val = $self->{$key}) or next;
- $str .= qq{; $key="$val"};
- }
- $str;
-}
-
-#------------------------------
-
-=item tag
-
-I<Instance method, abstract.>
-Return the tag for this field.
-
-=cut
-
-sub tag { '' }
-
-=back
-
-=cut
-
-#------------------------------
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Head.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Head.pm
deleted file mode 100644
index 6edfaf2..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Head.pm
+++ /dev/null
@@ -1,907 +0,0 @@
-package MIME::Head;
-
-
-=head1 NAME
-
-MIME::Head - MIME message header (a subclass of Mail::Header)
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Tools> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok...
-
-=head2 Construction
-
- ### Create a new, empty header, and populate it manually:
- $head = MIME::Head->new;
- $head->replace('content-type', 'text/plain; charset=US-ASCII');
- $head->replace('content-length', $len);
-
- ### Parse a new header from a filehandle:
- $head = MIME::Head->read(\*STDIN);
-
- ### Parse a new header from a file, or a readable pipe:
- $testhead = MIME::Head->from_file("/tmp/test.hdr");
- $a_b_head = MIME::Head->from_file("cat a.hdr b.hdr |");
-
-
-=head2 Output
-
- ### Output to filehandle:
- $head->print(\*STDOUT);
-
- ### Output as string:
- print STDOUT $head->as_string;
- print STDOUT $head->stringify;
-
-
-=head2 Getting field contents
-
- ### Is this a reply?
- $is_reply = 1 if ($head->get('Subject') =~ /^Re: /);
-
- ### Get receipt information:
- print "Last received from: ", $head->get('Received', 0), "\n";
- @all_received = $head->get('Received');
-
- ### Print the subject, or the empty string if none:
- print "Subject: ", $head->get('Subject',0), "\n";
-
- ### Too many hops? Count 'em and see!
- if ($head->count('Received') > 5) { ...
-
- ### Test whether a given field exists
- warn "missing subject!" if (! $head->count('subject'));
-
-
-=head2 Setting field contents
-
- ### Declare this to be an HTML header:
- $head->replace('Content-type', 'text/html');
-
-
-=head2 Manipulating field contents
-
- ### Get rid of internal newlines in fields:
- $head->unfold;
-
- ### Decode any Q- or B-encoded-text in fields (DEPRECATED):
- $head->decode;
-
-
-=head2 Getting high-level MIME information
-
- ### Get/set a given MIME attribute:
- unless ($charset = $head->mime_attr('content-type.charset')) {
- $head->mime_attr("content-type.charset" => "US-ASCII");
- }
-
- ### The content type (e.g., "text/html"):
- $mime_type = $head->mime_type;
-
- ### The content transfer encoding (e.g., "quoted-printable"):
- $mime_encoding = $head->mime_encoding;
-
- ### The recommended name when extracted:
- $file_name = $head->recommended_filename;
-
- ### The boundary text, for multipart messages:
- $boundary = $head->multipart_boundary;
-
-
-=head1 DESCRIPTION
-
-A class for parsing in and manipulating RFC-822 message headers, with some
-methods geared towards standard (and not so standard) MIME fields as
-specified in RFC-1521, I<Multipurpose Internet Mail Extensions>.
-
-
-=head1 PUBLIC INTERFACE
-
-=cut
-
-#------------------------------
-
-require 5.002;
-
-### Pragmas:
-use strict;
-use vars qw($VERSION @ISA @EXPORT_OK);
-
-### System modules:
-use IO::Wrap;
-
-### Other modules:
-use Mail::Header 1.09 ();
-use Mail::Field 1.05 ();
-
-### Kit modules:
-use MIME::Words qw(:all);
-use MIME::Tools qw(:config :msgs);
-use MIME::Field::ParamVal;
-use MIME::Field::ConTraEnc;
-use MIME::Field::ContDisp;
-use MIME::Field::ContType;
-
-@ISA = qw(Mail::Header);
-
-
-#------------------------------
-#
-# Public globals...
-#
-#------------------------------
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### Sanity (we put this test after our own version, for CPAN::):
-use Mail::Header 1.06 ();
-
-
-#------------------------------
-
-=head2 Creation, input, and output
-
-=over 4
-
-=cut
-
-#------------------------------
-
-
-#------------------------------
-
-=item new [ARG],[OPTIONS]
-
-I<Class method, inherited.>
-Creates a new header object. Arguments are the same as those in the
-superclass.
-
-=cut
-
-sub new {
- my $class = shift;
- bless Mail::Header->new(@_), $class;
-}
-
-#------------------------------
-
-=item from_file EXPR,OPTIONS
-
-I<Class or instance method>.
-For convenience, you can use this to parse a header object in from EXPR,
-which may actually be any expression that can be sent to open() so as to
-return a readable filehandle. The "file" will be opened, read, and then
-closed:
-
- ### Create a new header by parsing in a file:
- my $head = MIME::Head->from_file("/tmp/test.hdr");
-
-Since this method can function as either a class constructor I<or>
-an instance initializer, the above is exactly equivalent to:
-
- ### Create a new header by parsing in a file:
- my $head = MIME::Head->new->from_file("/tmp/test.hdr");
-
-On success, the object will be returned; on failure, the undefined value.
-
-The OPTIONS are the same as in new(), and are passed into new()
-if this is invoked as a class method.
-
-B<Note:> This is really just a convenience front-end onto C<read()>,
-provided mostly for backwards-compatibility with MIME-parser 1.0.
-
-=cut
-
-sub from_file {
- my ($self, $file, @opts) = @_; ### at this point, $self is inst. or class!
- my $class = ref($self) ? ref($self) : $self;
-
- ### Parse:
- open(HDR, $file) or return error("open $file: $!");
- binmode(HDR); # we expect to have \r\n at line ends, and want to keep 'em.
- $self = $class->new(\*HDR, @opts); ### now, $self is instance or undef
- close(HDR);
- $self;
-}
-
-#------------------------------
-
-=item read FILEHANDLE
-
-I<Instance (or class) method.>
-This initiallizes a header object by reading it in from a FILEHANDLE,
-until the terminating blank line is encountered.
-A syntax error or end-of-stream will also halt processing.
-
-Supply this routine with a reference to a filehandle glob; e.g., C<\*STDIN>:
-
- ### Create a new header by parsing in STDIN:
- $head->read(\*STDIN);
-
-On success, the self object will be returned; on failure, a false value.
-
-B<Note:> in the MIME world, it is perfectly legal for a header to be
-empty, consisting of nothing but the terminating blank line. Thus,
-we can't just use the formula that "no tags equals error".
-
-B<Warning:> as of the time of this writing, Mail::Header::read did not flag
-either syntax errors or unexpected end-of-file conditions (an EOF
-before the terminating blank line). MIME::ParserBase takes this
-into account.
-
-=cut
-
-sub read {
- my $self = shift; ### either instance or class!
- ref($self) or $self = $self->new; ### if used as class method, make new
- $self->SUPER::read(@_);
-}
-
-
-
-#------------------------------
-
-=back
-
-=head2 Getting/setting fields
-
-The following are methods related to retrieving and modifying the header
-fields. Some are inherited from Mail::Header, but I've kept the
-documentation around for convenience.
-
-=over 4
-
-=cut
-
-#------------------------------
-
-
-#------------------------------
-
-=item add TAG,TEXT,[INDEX]
-
-I<Instance method, inherited.>
-Add a new occurence of the field named TAG, given by TEXT:
-
- ### Add the trace information:
- $head->add('Received',
- 'from eryq.pr.mcs.net by gonzo.net with smtp');
-
-Normally, the new occurence will be I<appended> to the existing
-occurences. However, if the optional INDEX argument is 0, then the
-new occurence will be I<prepended>. If you want to be I<explicit>
-about appending, specify an INDEX of -1.
-
-B<Warning>: this method always adds new occurences; it doesn't overwrite
-any existing occurences... so if you just want to I<change> the value
-of a field (creating it if necessary), then you probably B<don't> want to use
-this method: consider using C<replace()> instead.
-
-=cut
-
-### Inherited.
-
-#------------------------------
-#
-# copy
-#
-# Instance method, DEPRECATED.
-# Duplicate the object.
-#
-sub copy {
- usage "deprecated: use dup() instead.";
- shift->dup(@_);
-}
-
-#------------------------------
-
-=item count TAG
-
-I<Instance method, inherited.>
-Returns the number of occurences of a field; in a boolean context, this
-tells you whether a given field exists:
-
- ### Was a "Subject:" field given?
- $subject_was_given = $head->count('subject');
-
-The TAG is treated in a case-insensitive manner.
-This method returns some false value if the field doesn't exist,
-and some true value if it does.
-
-=cut
-
-### Inherited.
-
-
-#------------------------------
-
-=item decode [FORCE]
-
-I<Instance method, DEPRECATED.>
-Go through all the header fields, looking for RFC-1522-style "Q"
-(quoted-printable, sort of) or "B" (base64) encoding, and decode them
-in-place. Fellow Americans, you probably don't know what the hell I'm
-talking about. Europeans, Russians, et al, you probably do. C<:-)>.
-
-B<This method has been deprecated.>
-See L<MIME::Parser/decode_headers> for the full reasons.
-If you absolutely must use it and don't like the warning, then
-provide a FORCE:
-
- "I_NEED_TO_FIX_THIS"
- Just shut up and do it. Not recommended.
- Provided only for those who need to keep old scripts functioning.
-
- "I_KNOW_WHAT_I_AM_DOING"
- Just shut up and do it. Not recommended.
- Provided for those who REALLY know what they are doing.
-
-B<What this method does.>
-For an example, let's consider a valid email header you might get:
-
- From: =?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>
- To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>
- CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
- =?US-ASCII?Q?.._cool!?=
-
-That basically decodes to (sorry, I can only approximate the
-Latin characters with 7 bit sequences /o and 'e):
-
- From: Keith Moore <moore(a)cs.utk.edu>
- To: Keld J/orn Simonsen <keld(a)dkuug.dk>
- CC: Andr'e Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: If you can read this you understand the example... cool!
-
-B<Note:> currently, the decodings are done without regard to the
-character set: thus, the Q-encoding C<=F8> is simply translated to the
-octet (hexadecimal C<F8>), period. For piece-by-piece decoding
-of a given field, you want the array context of
-C<MIME::Word::decode_mimewords()>.
-
-B<Warning:> the CRLF+SPACE separator that splits up long encoded words
-into shorter sequences (see the Subject: example above) gets lost
-when the field is unfolded, and so decoding after unfolding causes
-a spurious space to be left in the field.
-I<THEREFORE: if you're going to decode, do so BEFORE unfolding!>
-
-This method returns the self object.
-
-I<Thanks to Kent Boortz for providing the idea, and the baseline
-RFC-1522-decoding code.>
-
-=cut
-
-sub decode {
- my $self = shift;
-
- ### Warn if necessary:
- my $force = shift || 0;
- unless (($force eq "I_NEED_TO_FIX_THIS") ||
- ($force eq "I_KNOW_WHAT_I_AM_DOING")) {
- usage "decode is deprecated for safety";
- }
-
- my ($tag, $i, @decoded);
- foreach $tag ($self->tags) {
- @decoded = map { scalar(decode_mimewords($_, Field=>$tag))
- } $self->get_all($tag);
- for ($i = 0; $i < @decoded; $i++) {
- $self->replace($tag, $decoded[$i], $i);
- }
- }
- $self->{MH_Decoded} = 1;
- $self;
-}
-
-#------------------------------
-
-=item delete TAG,[INDEX]
-
-I<Instance method, inherited.>
-Delete all occurences of the field named TAG.
-
- ### Remove some MIME information:
- $head->delete('MIME-Version');
- $head->delete('Content-type');
-
-=cut
-
-### Inherited
-
-
-#------------------------------
-#
-# exists
-#
-sub exists {
- usage "deprecated; use count() instead";
- shift->count(@_);
-}
-
-#------------------------------
-#
-# fields
-#
-sub fields {
- usage "deprecated: use tags() instead",
- shift->tags(@_);
-}
-
-#------------------------------
-
-=item get TAG,[INDEX]
-
-I<Instance method, inherited.>
-Get the contents of field TAG.
-
-If a B<numeric INDEX> is given, returns the occurence at that index,
-or undef if not present:
-
- ### Print the first and last 'Received:' entries (explicitly):
- print "First, or most recent: ", $head->get('received', 0), "\n";
- print "Last, or least recent: ", $head->get('received',-1), "\n";
-
-If B<no INDEX> is given, but invoked in a B<scalar> context, then
-INDEX simply defaults to 0:
-
- ### Get the first 'Received:' entry (implicitly):
- my $most_recent = $head->get('received');
-
-If B<no INDEX> is given, and invoked in an B<array> context, then
-I<all> occurences of the field are returned:
-
- ### Get all 'Received:' entries:
- my @all_received = $head->get('received');
-
-=cut
-
-### Inherited.
-
-
-#------------------------------
-
-=item get_all FIELD
-
-I<Instance method.>
-Returns the list of I<all> occurences of the field, or the
-empty list if the field is not present:
-
- ### How did it get here?
- @history = $head->get_all('Received');
-
-B<Note:> I had originally experimented with having C<get()> return all
-occurences when invoked in an array context... but that causes a lot of
-accidents when you get careless and do stuff like this:
-
- print "\u$field: ", $head->get($field), "\n";
-
-It also made the intuitive behaviour unclear if the INDEX argument
-was given in an array context. So I opted for an explicit approach
-to asking for all occurences.
-
-=cut
-
-sub get_all {
- my ($self, $tag) = @_;
- $self->count($tag) or return (); ### empty if doesn't exist
- ($self->get($tag));
-}
-
-#------------------------------
-#
-# original_text
-#
-# Instance method, DEPRECATED.
-# Return an approximation of the original text.
-#
-sub original_text {
- usage "deprecated: use stringify() instead";
- shift->stringify(@_);
-}
-
-#------------------------------
-
-=item print [OUTSTREAM]
-
-I<Instance method, override.>
-Print the header out to the given OUTSTREAM, or the currently-selected
-filehandle if none. The OUTSTREAM may be a filehandle, or any object
-that responds to a print() message.
-
-The override actually lets you print to any object that responds to
-a print() method. This is vital for outputting MIME entities to scalars.
-
-Also, it defaults to the I<currently-selected> filehandle if none is given
-(not STDOUT!), so I<please> supply a filehandle to prevent confusion.
-
-=cut
-
-sub print {
- my ($self, $fh) = @_;
- $fh = wraphandle($fh || select); ### get output handle, as a print()able
- $fh->print($self->as_string);
-}
-
-#------------------------------
-#
-# set TAG,TEXT
-#
-# Instance method, DEPRECATED.
-# Set the field named TAG to [the single occurence given by the TEXT.
-#
-sub set {
- my $self = shift;
- usage "deprecated: use the replace() method instead.";
- $self->replace(@_);
-}
-
-#------------------------------
-
-=item stringify
-
-I<Instance method.>
-Return the header as a string. You can also invoke it as C<as_string>.
-
-=cut
-
-sub stringify {
- my $self = shift; ### build clean header, and output...
- my @header = grep {defined($_) ? $_ : ()} @{$self->header};
- join "", map { /\n$/ ? $_ : "$_\n" } @header;
-}
-sub as_string { shift->stringify(@_) }
-
-#------------------------------
-
-=item unfold [FIELD]
-
-I<Instance method, inherited.>
-Unfold (remove newlines in) the text of all occurences of the given FIELD.
-If the FIELD is omitted, I<all> fields are unfolded.
-Returns the "self" object.
-
-=cut
-
-### Inherited
-
-
-#------------------------------
-
-=back
-
-=head2 MIME-specific methods
-
-All of the following methods extract information from the following fields:
-
- Content-type
- Content-transfer-encoding
- Content-disposition
-
-Be aware that they do not just return the raw contents of those fields,
-and in some cases they will fill in sensible (I hope) default values.
-Use C<get()> or C<mime_attr()> if you need to grab and process the
-raw field text.
-
-B<Note:> some of these methods are provided both as a convenience and
-for backwards-compatibility only, while others (like
-recommended_filename()) I<really do have to be in MIME::Head to work
-properly,> since they look for their value in more than one field.
-However, if you know that a value is restricted to a single
-field, you should really use the Mail::Field interface to get it.
-
-=over 4
-
-=cut
-
-#------------------------------
-
-
-#------------------------------
-#
-# params TAG
-#
-# Instance method, DEPRECATED.
-# Extract parameter info from a structured field, and return
-# it as a hash reference. Provided for 1.0 compatibility only!
-# Use the new MIME::Field interface classes (subclasses of Mail::Field).
-
-sub params {
- my ($self, $tag) = @_;
- usage "deprecated: use the MIME::Field interface classes from now on!";
- return MIME::Field::ParamVal->parse_params($self->get($tag,0));
-}
-
-#------------------------------
-
-=item mime_attr ATTR,[VALUE]
-
-A quick-and-easy interface to set/get the attributes in structured
-MIME fields:
-
- $head->mime_attr("content-type" => "text/html");
- $head->mime_attr("content-type.charset" => "US-ASCII");
- $head->mime_attr("content-type.name" => "homepage.html");
-
-This would cause the final output to look something like this:
-
- Content-type: text/html; charset=US-ASCII; name="homepage.html"
-
-Note that the special empty sub-field tag indicates the anonymous
-first sub-field.
-
-B<Giving VALUE as undefined> will cause the contents of the named subfield
-to be deleted:
-
- $head->mime_attr("content-type.charset" => undef);
-
-B<Supplying no VALUE argument> just returns the attribute's value,
-or undefined if it isn't there:
-
- $type = $head->mime_attr("content-type"); ### text/html
- $name = $head->mime_attr("content-type.name"); ### homepage.html
-
-In all cases, the new/current value is returned.
-
-=cut
-
-sub mime_attr {
- my ($self, $attr, $value) = @_;
-
- ### Break attribute name up:
- my ($tag, $subtag) = split /\./, $attr;
- $subtag ||= '_';
-
- ### Set or get?
- my $field = MIME::Field::ParamVal->parse($self->get($tag, 0));
- if (@_ > 2) { ### set it:
- $field->param($subtag, $value); ### set subfield
- $self->replace($tag, $field->stringify); ### replace!
- return $value;
- }
- else { ### get it:
- return $field->param($subtag);
- }
-}
-
-#------------------------------
-
-=item mime_encoding
-
-I<Instance method.>
-Try I<real hard> to determine the content transfer encoding
-(e.g., C<"base64">, C<"binary">), which is returned in all-lowercase.
-
-If no encoding could be found, the default of C<"7bit"> is returned.
-I quote from RFC-1521 section 5:
-
- This is the default value -- that is, "Content-Transfer-Encoding: 7BIT"
- is assumed if the Content-Transfer-Encoding header field is not present.
-
-=cut
-
-sub mime_encoding {
- my $self = shift;
- lc($self->mime_attr('content-transfer-encoding') || '7bit');
-}
-
-#------------------------------
-
-=item mime_type [DEFAULT]
-
-I<Instance method.>
-Try C<real hard> to determine the content type (e.g., C<"text/plain">,
-C<"image/gif">, C<"x-weird-type">, which is returned in all-lowercase.
-"Real hard" means that if no content type could be found, the default
-(usually C<"text/plain">) is returned. From RFC-1521 section 7.1:
-
- The default Content-Type for Internet mail is
- "text/plain; charset=us-ascii".
-
-Unless this is a part of a "multipart/digest", in which case
-"message/rfc822" is the default. Note that you can also I<set> the
-default, but you shouldn't: normally only the MIME parser uses this
-feature.
-
-=cut
-
-sub mime_type {
- my ($self, $default) = @_;
- $self->{MIH_DefaultType} = $default if @_ > 1;
- lc($self->mime_attr('content-type') ||
- $self->{MIH_DefaultType} ||
- 'text/plain');
-}
-
-#------------------------------
-
-=item multipart_boundary
-
-I<Instance method.>
-If this is a header for a multipart message, return the
-"encapsulation boundary" used to separate the parts. The boundary
-is returned exactly as given in the C<Content-type:> field; that
-is, the leading double-hyphen (C<-->) is I<not> prepended.
-
-Well, I<almost> exactly... this passage from RFC-1521 dictates
-that we remove any trailing spaces:
-
- If a boundary appears to end with white space, the white space
- must be presumed to have been added by a gateway, and must be deleted.
-
-Returns undef (B<not> the empty string) if either the message is not
-multipart, if there is no specified boundary, or if the boundary is
-illegal (e.g., if it is empty after all trailing whitespace has been
-removed).
-
-=cut
-
-sub multipart_boundary {
- my $self = shift;
- my $value = $self->mime_attr('content-type.boundary');
- (!defined($value) or $value eq '') ? undef : $value;
-}
-
-#------------------------------
-
-=item recommended_filename
-
-I<Instance method.>
-Return the recommended external filename. This is used when
-extracting the data from the MIME stream.
-
-Returns undef if no filename could be suggested.
-
-=cut
-
-sub recommended_filename {
- my $self = shift;
- my $value;
-
- ### Start by trying to get 'filename' from the 'content-disposition':
- $value = $self->mime_attr('content-disposition.filename');
- return $value if (defined($value) and $value ne '');
-
- ### No? Okay, try to get 'name' from the 'content-type':
- $value = $self->mime_attr('content-type.name');
- return $value if (defined($value) and $value ne '');
-
- ### Sorry:
- undef;
-}
-
-#------------------------------
-
-=back
-
-=cut
-
-
-#------------------------------
-#
-# tweak_FROM_parsing
-#
-# DEPRECATED. Use the inherited mail_from() class method now.
-
-sub tweak_FROM_parsing {
- my $self = shift;
- usage "deprecated. Use mail_from() instead.";
- $self->mail_from(@_);
-}
-
-
-__END__
-
-#------------------------------
-
-
-=head1 NOTES
-
-=over 4
-
-=item Why have separate objects for the entity, head, and body?
-
-See the documentation for the MIME-tools distribution
-for the rationale behind this decision.
-
-
-=item Why assume that MIME headers are email headers?
-
-I quote from Achim Bohnet, who gave feedback on v.1.9 (I think
-he's using the word "header" where I would use "field"; e.g.,
-to refer to "Subject:", "Content-type:", etc.):
-
- There is also IMHO no requirement [for] MIME::Heads to look
- like [email] headers; so to speak, the MIME::Head [simply stores]
- the attributes of a complex object, e.g.:
-
- new MIME::Head type => "text/plain",
- charset => ...,
- disposition => ..., ... ;
-
-I agree in principle, but (alas and dammit) RFC-1521 says otherwise.
-RFC-1521 [MIME] headers are a syntactic subset of RFC-822 [email] headers.
-Perhaps a better name for these modules would be RFC1521:: instead of
-MIME::, but we're a little beyond that stage now.
-
-In my mind's eye, I see an abstract class, call it MIME::Attrs, which does
-what Achim suggests... so you could say:
-
- my $attrs = new MIME::Attrs type => "text/plain",
- charset => ...,
- disposition => ..., ... ;
-
-We could even make it a superclass of MIME::Head: that way, MIME::Head
-would have to implement its interface, I<and> allow itself to be
-initiallized from a MIME::Attrs object.
-
-However, when you read RFC-1521, you begin to see how much MIME information
-is organized by its presence in particular fields. I imagine that we'd
-begin to mirror the structure of RFC-1521 fields and subfields to such
-a degree that this might not give us a tremendous gain over just
-having MIME::Head.
-
-
-=item Why all this "occurence" and "index" jazz? Isn't every field unique?
-
-Aaaaaaaaaahh....no.
-
-Looking at a typical mail message header, it is sooooooo tempting to just
-store the fields as a hash of strings, one string per hash entry.
-Unfortunately, there's the little matter of the C<Received:> field,
-which (unlike C<From:>, C<To:>, etc.) will often have multiple
-occurences; e.g.:
-
- Received: from gsfc.nasa.gov by eryq.pr.mcs.net with smtp
- (Linux Smail3.1.28.1 #5) id m0tStZ7-0007X4C;
- Thu, 21 Dec 95 16:34 CST
- Received: from rhine.gsfc.nasa.gov by gsfc.nasa.gov
- (5.65/Ultrix3.0-C) id AA13596;
- Thu, 21 Dec 95 17:20:38 -0500
- Received: (from eryq@localhost) by rhine.gsfc.nasa.gov
- (8.6.12/8.6.12) id RAA28069;
- Thu, 21 Dec 1995 17:27:54 -0500
- Date: Thu, 21 Dec 1995 17:27:54 -0500
- From: Eryq <eryq(a)rhine.gsfc.nasa.gov>
- Message-Id: <199512212227.RAA28069(a)rhine.gsfc.nasa.gov>
- To: eryq(a)eryq.pr.mcs.net
- Subject: Stuff and things
-
-The C<Received:> field is used for tracing message routes, and although
-it's not generally used for anything other than human debugging, I
-didn't want to inconvenience anyone who actually wanted to get at that
-information.
-
-I also didn't want to make this a special case; after all, who
-knows what other fields could have multiple occurences in the
-future? So, clearly, multiple entries had to somehow be stored
-multiple times... and the different occurences had to be retrievable.
-
-=back
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-The more-comprehensive filename extraction is courtesy of
-Lee E. Brotzman, Advanced Data Solutions.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser.pm
deleted file mode 100644
index 6c5235b..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser.pm
+++ /dev/null
@@ -1,1937 +0,0 @@
-package MIME::Parser;
-
-
-=head1 NAME
-
-MIME::Parser - experimental class for parsing MIME streams
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Tools> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok...
-
-=head2 Basic usage examples
-
- ### Create a new parser object:
- my $parser = new MIME::Parser;
-
- ### Tell it where to put things:
- $parser->output_under("/tmp");
-
- ### Parse an input filehandle:
- $entity = $parser->parse(\*STDIN);
-
- ### Congratulations: you now have a (possibly multipart) MIME entity!
- $entity->dump_skeleton; # for debugging
-
-
-=head2 Examples of input
-
- ### Parse from filehandles:
- $entity = $parser->parse(\*STDIN);
- $entity = $parser->parse(IO::File->new("some command|");
-
- ### Parse from any object that supports getline() and read():
- $entity = $parser->parse($myHandle);
-
- ### Parse an in-core MIME message:
- $entity = $parser->parse_data($message);
-
- ### Parse an MIME message in a file:
- $entity = $parser->parse_open("/some/file.msg");
-
- ### Parse an MIME message out of a pipeline:
- $entity = $parser->parse_open("gunzip - < file.msg.gz |");
-
- ### Parse already-split input (as "deliver" would give it to you):
- $entity = $parser->parse_two("msg.head", "msg.body");
-
-
-=head2 Examples of output control
-
- ### Keep parsed message bodies in core (default outputs to disk):
- $parser->output_to_core(1);
-
- ### Output each message body to a one-per-message directory:
- $parser->output_under("/tmp");
-
- ### Output each message body to the same directory:
- $parser->output_dir("/tmp");
-
- ### Change how nameless message-component files are named:
- $parser->output_prefix("msg");
-
-
-=head2 Examples of error recovery
-
- ### Normal mechanism:
- eval { $entity = $parser->parse(\*STDIN) };
- if ($@) {
- $results = $parser->results;
- $decapitated = $parser->last_head; ### get last top-level head
- }
-
- ### Ultra-tolerant mechanism:
- $parser->ignore_errors(1);
- $entity = eval { $parser->parse(\*STDIN) };
- $error = ($@ || $parser->last_error);
-
- ### Cleanup all files created by the parse:
- eval { $entity = $parser->parse(\*STDIN) };
- ...
- $parser->filer->purge;
-
-
-=head2 Examples of parser options
-
- ### Automatically attempt to RFC-1522-decode the MIME headers?
- $parser->decode_headers(1); ### default is false
-
- ### Parse contained "message/rfc822" objects as nested MIME streams?
- $parser->extract_nested_messages(0); ### default is true
-
- ### Look for uuencode in "text" messages, and extract it?
- $parser->extract_uuencode(1); ### default is false
-
- ### Should we forgive normally-fatal errors?
- $parser->ignore_errors(0); ### default is true
-
-
-=head2 Miscellaneous examples
-
- ### Convert a Mail::Internet object to a MIME::Entity:
- @lines = (@{$mail->header}, "\n", @{$mail->body});
- $entity = $parser->parse_data(\@lines);
-
-
-
-=head1 DESCRIPTION
-
-You can inherit from this class to create your own subclasses
-that parse MIME streams into MIME::Entity objects.
-
-
-=head1 PUBLIC INTERFACE
-
-=cut
-
-#------------------------------
-
-# We require the new FileHandle methods, and a non-buggy version
-# of FileHandle->new_tmpfile:
-require 5.004;
-
-### Pragmas:
-use strict;
-use vars (qw($VERSION $CAT $CRLF $BM));
-
-### Built-in modules:
-use FileHandle ();
-use IO::Wrap;
-use IO::Scalar 1.117;
-use IO::ScalarArray 1.114;
-use IO::Lines 1.108;
-use IO::File;
-use IO::InnerFile;
-use File::Spec;
-use File::Path;
-use Config qw(%Config);
-use Carp;
-
-### Kit modules:
-use MIME::Tools qw(:config :utils :msgtypes usage tmpopen );
-use MIME::Head;
-use MIME::Body;
-use MIME::Entity;
-use MIME::Decoder;
-use MIME::Parser::Reader;
-use MIME::Parser::Filer;
-use MIME::Parser::Results;
-
-
-#============================================================
-#
-# A special kind of inner file that we can virtually print to.
-#
-package MIME::Parser::InnerFile;
-
-use vars qw(@ISA);
-@ISA = qw(IO::InnerFile);
-
-sub print {
- shift->add_length(length(join('', @_)));
-}
-
-sub PRINT {
- shift->{LG} += length(join('', @_));
-}
-
-#============================================================
-
-package MIME::Parser;
-
-
-#------------------------------
-#
-# Globals
-#
-#------------------------------
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### How to catenate:
-$CAT = '/bin/cat';
-
-### The CRLF sequence:
-$CRLF = "\015\012";
-
-### Who am I?
-my $ME = 'MIME::Parser';
-
-
-
-#------------------------------------------------------------
-
-=head2 Construction
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item new ARGS...
-
-I<Class method.>
-Create a new parser object.
-Once you do this, you can then set up various parameters
-before doing the actual parsing. For example:
-
- my $parser = new MIME::Parser;
- $parser->output_dir("/tmp");
- $parser->output_prefix("msg1");
- my $entity = $parser->parse(\*STDIN);
-
-Any arguments are passed into C<init()>.
-Don't override this in your subclasses; override init() instead.
-
-=cut
-
-sub new {
- my $self = bless {}, shift;
- $self->init(@_);
-}
-
-#------------------------------
-
-=item init ARGS...
-
-I<Instance method.>
-Initiallize a new MIME::Parser object.
-This is automatically sent to a new object; you may want to override it.
-If you override this, be sure to invoke the inherited method.
-
-=cut
-
-sub init {
- my $self = shift;
-
- $self->{MP5_DecodeHeaders} = 0;
- $self->{MP5_Interface} = {};
- $self->{MP5_ParseNested} = 'NEST';
- $self->{MP5_Tmp} = undef;
- $self->{MP5_TmpRecycling} = 1;
- $self->{MP5_TmpToCore} = 0;
- $self->{MP5_IgnoreErrors} = 1;
- $self->{MP5_UseInnerFiles} = 0;
- $self->{MP5_UUDecode} = 0;
-
- $self->interface(ENTITY_CLASS => 'MIME::Entity');
- $self->interface(HEAD_CLASS => 'MIME::Head');
-
- $self->output_dir(".");
-
- $self;
-}
-
-#------------------------------
-
-=item init_parse
-
-I<Instance method.>
-Invoked automatically whenever one of the top-level parse() methods
-is called, to reset the parser to a "ready" state.
-
-=cut
-
-sub init_parse {
- my $self = shift;
-
- $self->{MP5_Results} = new MIME::Parser::Results;
-
- $self->{MP5_Filer}->results($self->{MP5_Results});
- $self->{MP5_Filer}->init_parse();
- $self->{MP5_Filer}->purgeable([]); ### just to be safe
- 1;
-}
-
-=back
-
-=cut
-
-
-
-
-
-#------------------------------------------------------------
-
-=head2 Altering how messages are parsed
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item decode_headers [YESNO]
-
-I<Instance method.>
-Controls whether the parser will attempt to decode all the MIME headers
-(as per RFC-1522) the moment it sees them. B<This is not advisable
-for two very important reasons:>
-
-=over
-
-=item *
-
-B<It screws up the extraction of information from MIME fields.>
-If you fully decode the headers into bytes, you can inadvertently
-transform a parseable MIME header like this:
-
- Content-type: text/plain; filename="=?ISO-8859-1?Q?Hi=22Ho?="
-
-into unparseable gobbledygook; in this case:
-
- Content-type: text/plain; filename="Hi"Ho"
-
-=item *
-
-B<It is information-lossy.> An encoded string which contains
-both Latin-1 and Cyrillic characters will be turned into a binary
-mishmosh which simply can't be rendered.
-
-=back
-
-B<History.>
-This method was once the only out-of-the-box way to deal with attachments
-whose filenames had non-ASCII characters. However, since MIME-tools 5.4xx
-this is no longer necessary.
-
-B<Parameters.>
-If YESNO is true, decoding is done. However, you will get a warning
-unless you use one of the special "true" values:
-
- "I_NEED_TO_FIX_THIS"
- Just shut up and do it. Not recommended.
- Provided only for those who need to keep old scripts functioning.
-
- "I_KNOW_WHAT_I_AM_DOING"
- Just shut up and do it. Not recommended.
- Provided for those who REALLY know what they are doing.
-
-If YESNO is false (the default), no attempt at decoding will be done.
-With no argument, just returns the current setting.
-B<Remember:> you can always decode the headers I<after> the parsing
-has completed (see L<MIME::Head::decode()|MIME::Head/decode>), or
-decode the words on demand (see L<MIME::Words>).
-
-=cut
-
-sub decode_headers {
- my ($self, $yesno) = @_;
- if (@_ > 1) {
- $self->{MP5_DecodeHeaders} = $yesno;
- if ($yesno) {
- if (($yesno eq "I_KNOW_WHAT_I_AM_DOING") ||
- ($yesno eq "I_NEED_TO_FIX_THIS")) {
- ### ok
- }
- else {
- $self->whine("as of 5.4xx, decode_headers() should NOT be ".
- "set true... if you are doing this to make sure ".
- "that non-ASCII filenames are translated, ".
- "that's now done automatically; for all else, ".
- "use MIME::Words.");
- }
- }
- }
- $self->{MP5_DecodeHeaders};
-}
-
-#------------------------------
-
-=item extract_nested_messages OPTION
-
-I<Instance method.>
-Some MIME messages will contain a part of type C<message/rfc822>:
-literally, the text of an embedded mail/news/whatever message.
-This option controls whether (and how) we parse that embedded message.
-
-If the OPTION is false, we treat such a message just as if it were a
-C<text/plain> document, without attempting to decode its contents.
-
-If the OPTION is true (the default), the body of the C<message/rfc822>
-part is parsed by this parser, creating an entity object.
-What happens then is determined by the actual OPTION:
-
-=over 4
-
-=item NEST or 1
-
-The default setting.
-The contained message becomes the sole "part" of the C<message/rfc822>
-entity (as if the containing message were a special kind of
-"multipart" message).
-You can recover the sub-entity by invoking the L<parts()|MIME::Entity/parts>
-method on the C<message/rfc822> entity.
-
-=item REPLACE
-
-The contained message replaces the C<message/rfc822> entity, as though
-the C<message/rfc822> "container" never existed.
-
-B<Warning:> notice that, with this option, all the header information
-in the C<message/rfc822> header is lost. This might seriously bother
-you if you're dealing with a top-level message, and you've just lost
-the sender's address and the subject line. C<:-/>.
-
-=back
-
-I<Thanks to Andreas Koenig for suggesting this method.>
-
-=cut
-
-sub extract_nested_messages {
- my ($self, $option) = @_;
- $self->{MP5_ParseNested} = $option if (@_ > 1);
- $self->{MP5_ParseNested};
-}
-
-sub parse_nested_messages {
- usage "parse_nested_messages() is now extract_nested_messages()";
- shift->extract_nested_messages(@_);
-}
-
-#------------------------------
-
-=item extract_uuencode [YESNO]
-
-I<Instance method.>
-If set true, then whenever we are confronted with a message
-whose effective content-type is "text/plain" and whose encoding
-is 7bit/8bit/binary, we scan the encoded body to see if it contains
-uuencoded data (generally given away by a "begin XXX" line).
-
-If it does, we explode the uuencoded message into a multipart,
-where the text before the first "begin XXX" becomes the first part,
-and all "begin...end" sections following become the subsequent parts.
-The filename (if given) is accessible through the normal means.
-
-=cut
-
-sub extract_uuencode {
- my ($self, $yesno) = @_;
- $self->{MP5_UUDecode} = $yesno if @_ > 1;
- $self->{MP5_UUDecode};
-}
-
-#------------------------------
-
-=item ignore_errors [YESNO]
-
-I<Instance method.>
-Controls whether the parser will attempt to ignore normally-fatal
-errors, treating them as warnings and continuing with the parse.
-
-If YESNO is true (the default), many syntax errors are tolerated.
-If YESNO is false, fatal errors throw exceptions.
-With no argument, just returns the current setting.
-
-=cut
-
-sub ignore_errors {
- my ($self, $yesno) = @_;
- $self->{MP5_IgnoreErrors} = $yesno if (@_ > 1);
- $self->{MP5_IgnoreErrors};
-}
-
-
-
-
-
-#------------------------------
-#
-# MESSAGES...
-#
-
-#------------------------------
-#
-# debug MESSAGE...
-#
-sub debug {
- my $self = shift;
- if (my $r = $self->{MP5_Results}) {
- unshift @_, $r->indent;
- $r->msg($M_DEBUG, @_);
- }
- &MIME::Tools::debug(@_);
-}
-
-#------------------------------
-#
-# whine PROBLEM...
-#
-sub whine {
- my $self = shift;
- if (my $r = $self->{MP5_Results}) {
- unshift @_, $r->indent;
- $r->msg($M_WARNING, @_);
- }
- &MIME::Tools::whine(@_);
-}
-
-#------------------------------
-#
-# error PROBLEM...
-#
-# Possibly-forgivable parse error occurred.
-# Raises a fatal exception unless we are ignoring errors.
-#
-sub error {
- my $self = shift;
- if (my $r = $self->{MP5_Results}) {
- unshift @_, $r->indent;
- $r->msg($M_ERROR, @_);
- }
- &MIME::Tools::error(@_);
- $self->{MP5_IgnoreErrors} ? return undef : die @_;
-}
-
-
-
-
-#------------------------------
-#
-# PARSING...
-#
-
-#------------------------------
-#
-# process_preamble IN, READER, ENTITY
-#
-# I<Instance method.>
-# Dispose of a multipart message's preamble.
-#
-sub process_preamble {
- my ($self, $in, $rdr, $ent) = @_;
-
- ### Sanity:
- ($rdr->depth > 0) or die "$ME: internal logic error";
-
- ### Parse preamble:
- my @saved;
- $rdr->read_lines($in, \@saved);
- $ent->preamble(\@saved);
- 1;
-}
-
-#------------------------------
-#
-# process_epilogue IN, READER, ENTITY
-#
-# I<Instance method.>
-# Dispose of a multipart message's epilogue.
-#
-sub process_epilogue {
- my ($self, $in, $rdr, $ent) = @_;
- $self->debug("process_epilogue");
-
- ### Parse epilogue:
- my @saved;
- $rdr->read_lines($in, \@saved);
- $ent->epilogue(\@saved);
- 1;
-}
-
-#------------------------------
-#
-# process_to_bound IN, READER, OUT
-#
-# I<Instance method.>
-# Dispose of the next chunk into the given output stream OUT.
-#
-sub process_to_bound {
- my ($self, $in, $rdr, $out) = @_;
-
- ### Parse:
- my $bm = benchmark {
- $rdr->read_chunk($in, $out);
- };
- $self->debug("t bound: $bm");
- 1;
-}
-
-#------------------------------
-#
-# process_header IN, READER
-#
-# I<Instance method.>
-# Process and return the next header.
-# Fatal exception on failure.
-#
-sub process_header {
- my ($self, $in, $rdr) = @_;
- $self->debug("process_header");
-
- ### Parse and save the (possibly empty) header, up to and including the
- ### blank line that terminates it:
- my $head = $self->interface('HEAD_CLASS')->new;
-
- ### Read the lines of the header.
- ### We localize IO inside here, so that we can support the IO:: interface
- my @headlines;
- my $hdr_rdr = $rdr->spawn;
- $hdr_rdr->add_terminator("");
- $hdr_rdr->add_terminator("\r"); ### sigh
- $hdr_rdr->read_lines($in, \@headlines);
- foreach (@headlines) { s/[\r\n]+\Z/\n/ } ### fold
-
- ### How did we do?
- ($hdr_rdr->eos_type eq 'DONE') or
- $self->error("unexpected end of header\n");
-
- ### Cleanup bogus header lines.
- ### Some folks like to parse mailboxes, so the header will start
- ### with "From " or ">From ". Tolerate this by removing both kinds
- ### of lines silently (can't we use Mail::Header for this, and try
- ### and keep the envelope?). Ditto for POP.
- while (@headlines) {
- if ($headlines[0] =~ /^>?From /) { ### mailbox
- $self->whine("skipping bogus mailbox 'From ' line");
- shift @headlines;
- }
- elsif ($headlines[0] =~ /^\+OK/) { ### POP3 status line
- $self->whine("skipping bogus POP3 '+OK' line");
- shift @headlines;
- }
- else { last }
- }
-
- ### Extract the header (note that zero-size headers are admissible!):
- $head->extract(\@headlines);
- @headlines and
- $self->error("couldn't parse head; error near:\n",@headlines);
-
- ### If desired, auto-decode the header as per RFC-1522.
- ### This shouldn't affect non-encoded headers; however, it will decode
- ### headers with international characters. WARNING: currently, the
- ### character-set information is LOST after decoding.
- $head->decode($self->{MP5_DecodeHeaders}) if $self->{MP5_DecodeHeaders};
-
- ### If this is the top-level head, save it:
- $self->results->top_head($head) if !$self->results->top_head;
-
- return $head;
-}
-
-#------------------------------
-#
-# process_multipart IN, READER, ENTITY
-#
-# I<Instance method.>
-# Process the multipart body, and return the state.
-# Fatal exception on failure.
-# Invoked by process_part().
-#
-sub process_multipart {
- my ($self, $in, $rdr, $ent) = @_;
- my $head = $ent->head;
-
- $self->debug("process_multipart...");
-
- ### Get actual type and subtype from the header:
- my ($type, $subtype) = (split('/', $head->mime_type), "");
-
- ### If this was a type "multipart/digest", then the RFCs say we
- ### should default the parts to have type "message/rfc822".
- ### Thanks to Carsten Heyl for suggesting this...
- my $retype = (($subtype eq 'digest') ? 'message/rfc822' : '');
-
- ### Get the boundaries for the parts:
- my $bound = $head->multipart_boundary;
- if (!defined($bound) || ($bound =~ /[\r\n]/)) {
- $self->error("multipart boundary is missing, or contains CR or LF\n");
- $ent->effective_type("application/x-unparseable-multipart");
- return $self->process_singlepart($in, $rdr, $ent);
- }
- my $part_rdr = $rdr->spawn->add_boundary($bound);
-
- ### Prepare to parse:
- my $eos_type;
- my $more_parts;
-
- ### Parse preamble...
- $self->process_preamble($in, $part_rdr, $ent);
-
- ### ...and look at how we finished up:
- $eos_type = $part_rdr->eos_type;
- if ($eos_type eq 'DELIM'){ $more_parts = 1 }
- elsif ($eos_type eq 'CLOSE'){ $self->whine("empty multipart message\n");
- $more_parts = 0; }
- else { $self->error("unexpected end of preamble\n");
- return 1; }
-
- ### Parse parts:
- my $partno = 0;
- my $part;
- while ($more_parts) {
- ++$partno;
- $self->debug("parsing part $partno...");
-
- ### Parse the next part, and add it to the entity...
- my $part = $self->process_part($in, $part_rdr, Retype=>$retype);
- $ent->add_part($part);
-
- ### ...and look at how we finished up:
- $eos_type = $part_rdr->eos_type;
- if ($eos_type eq 'DELIM') { $more_parts = 1 }
- elsif ($eos_type eq 'CLOSE') { $more_parts = 0; }
- else { $self->error("unexpected end of parts ".
- "before epilogue\n");
- return 1; }
- }
-
- ### Parse epilogue...
- ### (note that we use the *parent's* reader here, which does not
- ### know about the boundaries in this multipart!)
- $self->process_epilogue($in, $rdr, $ent);
-
- ### ...and there's no need to look at how we finished up!
- 1;
-}
-
-#------------------------------
-#
-# process_singlepart IN, READER, ENTITY
-#
-# I<Instance method.>
-# Process the singlepart body. Returns true.
-# Fatal exception on failure.
-# Invoked by process_part().
-#
-sub process_singlepart {
- my ($self, $in, $rdr, $ent) = @_;
- my $head = $ent->head;
-
- $self->debug("process_singlepart...");
-
- ### Obtain a filehandle for reading the encoded information:
- ### We have two different approaches, based on whether or not we
- ### have to contend with boundaries.
- my $ENCODED; ### handle
- my $can_shortcut = (!$rdr->has_bounds and !$self->{MP5_UUDecode});
- if ($can_shortcut) {
- $self->debug("taking shortcut");
-
- $ENCODED = $in;
- $rdr->eos('EOF'); ### be sure to bogus-up the reader state to EOF:
- }
- else {
-
- ### Can we read real fast?
- if ($self->{MP5_UseInnerFiles} &&
- $in->can('seek') && $in->can('tell')) {
- $self->debug("using inner file");
- $ENCODED = MIME::Parser::InnerFile->new($in, $in->tell, 0);
- }
- else {
- $self->debug("using temp file");
- $ENCODED = $self->new_tmpfile($self->{Tmp});
- $self->{Tmp} = $ENCODED if $self->{TmpRecycle};
- }
-
- ### Read encoded body until boundary (or EOF)...
- $self->process_to_bound($in, $rdr, $ENCODED);
-
- ### ...and look at how we finished up.
- ### If we have bounds, we want DELIM or CLOSE.
- ### Otherwise, we want EOF (and that's all we'd get, anyway!).
- if ($rdr->has_bounds) {
- ($rdr->eos_type =~ /^(DELIM|CLOSE)$/) or
- $self->error("part did not end with expected boundary\n");
- }
-
- ### Flush and rewind encoded buffer, so we can read it:
- $ENCODED->flush;
- $ENCODED->seek(0, 0);
- }
-
- ### Get a content-decoder to decode this part's encoding:
- my $encoding = $head->mime_encoding;
- my $decoder = new MIME::Decoder $encoding;
- if (!$decoder) {
- $self->whine("Unsupported encoding '$encoding': using 'binary'... \n".
- "The entity will have an effective MIME type of \n".
- "application/octet-stream."); ### as per RFC-2045
- $ent->effective_type('application/octet-stream');
- $decoder = new MIME::Decoder 'binary';
- }
-
- ### If desired, sidetrack to troll for UUENCODE:
- $self->debug("extract uuencode? ", $self->extract_uuencode);
- $self->debug("encoding? ", $encoding);
- $self->debug("effective type? ", $ent->effective_type);
- if ($self->extract_uuencode and
- ($encoding =~ /^(7bit|8bit|binary)\Z/) and
- ($ent->effective_type =~ m{^text/plain\Z})) {
-
- ### Hunt for it:
- my $uu_ent = eval { $self->hunt_for_uuencode($ENCODED, $ent) };
- if ($uu_ent) { ### snark
- %$ent = %$uu_ent;
- return 1;
- }
- else { ### boojum
- $self->whine("while hunting for uuencode: $@");
- $ENCODED->seek(0,0);
- }
- }
-
- ### Open a new bodyhandle for outputting the data:
- my $body = $self->new_body_for($head) || die "$ME: no body\n"; # gotta die
- $body->binmode(1) unless textual_type($ent->effective_type);
-
- ### Decode and save the body (using the decoder):
- my $DECODED = $body->open("w") || die "$ME: body not opened: $!\n";
- my $bm = benchmark {
- eval { $decoder->decode($ENCODED, $DECODED); };
- $@ and $self->error($@);
- };
- $self->debug("t decode: $bm");
- $DECODED->close;
-
- ### Success! Remember where we put stuff:
- $ent->bodyhandle($body);
-
- ### Done!
- 1;
-}
-
-#------------------------------
-#
-# hunt_for_uuencode ENCODED, ENTITY
-#
-# I<Instance method.>
-# Try to detect and dispatch embedded uuencode as a fake multipart message.
-# Returns new entity or undef.
-#
-sub hunt_for_uuencode {
- my ($self, $ENCODED, $ent) = @_;
- my $good;
- local $_;
- $self->debug("sniffing around for UUENCODE");
-
- ### Heuristic:
- $ENCODED->seek(0,0);
- while (defined($_ = $ENCODED->getline)) {
- last if ($good = /^begin [0-7]{3}/);
- }
- $good or do { $self->debug("no one made the cut"); return 0 };
-
- ### New entity:
- my $top_ent = $ent->dup; ### no data yet
- $top_ent->make_multipart;
- my @parts;
-
- ### Made the first cut; on to the real stuff:
- $ENCODED->seek(0,0);
- my $decoder = MIME::Decoder->new('x-uuencode');
- my $pre;
- while (1) {
- my @bin_data;
-
- ### Try next part:
- my $out = IO::ScalarArray->new(\@bin_data);
- eval { $decoder->decode($ENCODED, $out) }; last if $@;
- my $preamble = $decoder->last_preamble;
- my $filename = $decoder->last_filename;
- my $mode = $decoder->last_mode;
-
- ### Get probable type:
- my $type = 'application/octet-stream';
- my ($ext) = $filename =~ /\.(\w+)\Z/; $ext = lc($ext || '');
- if ($ext =~ /^(gif|jpe?g|xbm|xpm|png)\Z/) { $type = "image/$1" }
-
- ### If we got our first preamble, create the text portion:
- if (@$preamble and
- (grep /\S/, @$preamble) and
- !@parts) {
- my $txt_ent = $self->interface('ENTITY_CLASS')->new;
-
- MIME::Entity->build(Type => "text/plain",
- Data => "");
- $txt_ent->bodyhandle($self->new_body_for($txt_ent->head));
- my $io = $txt_ent->bodyhandle->open("w");
- $io->print(@$preamble);
- $io->close;
- push @parts, $txt_ent;
- }
-
- ### Create the attachment:
- ### We use the x-unix-mode convention from "dtmail 1.2.1 SunOS 5.6".
- if (1) {
- my $bin_ent = MIME::Entity->build(Type=>$type,
- Filename=>$filename,
- Data=>"");
- $bin_ent->head->mime_attr('Content-type.x-unix-mode' => "0$mode");
- $bin_ent->bodyhandle($self->new_body_for($bin_ent->head));
- $bin_ent->bodyhandle->binmode(1);
- my $io = $bin_ent->bodyhandle->open("w");
- $io->print(@bin_data);
- $io->close;
- push @parts, $bin_ent;
- }
- }
-
- ### Did we get anything?
- @parts or return undef;
-
- ### Set the parts and a nice preamble:
- $top_ent->parts(\@parts);
- $top_ent->preamble
- (["The following is a multipart MIME message which was extracted\n",
- "from a uuencoded message.\n"]);
- $top_ent;
-}
-
-#------------------------------
-#
-# process_message IN, READER, ENTITY
-#
-# I<Instance method.>
-# Process the singlepart body, and return true.
-# Fatal exception on failure.
-# Invoked by process_part().
-#
-sub process_message {
- my ($self, $in, $rdr, $ent) = @_;
- my $head = $ent->head;
-
- $self->debug("process_message");
-
- ### Verify the encoding restrictions:
- my $encoding = $head->mime_encoding;
- if ($encoding !~ /^(7bit|8bit|binary)$/) {
- $self->error("illegal encoding [$encoding] for MIME type ".
- $head->mime_type."\n");
- $encoding = 'binary';
- }
-
- ### Parse the message:
- my $msg = $self->process_part($in, $rdr);
-
- ### How to handle nested messages?
- if ($self->extract_nested_messages eq 'REPLACE') {
- %$ent = %$msg; ### shallow replace
- %$msg = ();
- }
- else { ### "NEST" or generic 1:
- $ent->bodyhandle(undef);
- $ent->add_part($msg);
- }
- 1;
-}
-
-#------------------------------
-#
-# process_part IN, READER, [OPTSHASH...]
-#
-# I<Instance method.>
-# The real back-end engine.
-# See the documentation up top for the overview of the algorithm.
-# The OPTSHASH can contain:
-#
-# Retype => retype this part to the given content-type
-#
-# Return the entity.
-# Fatal exception on failure.
-#
-sub process_part {
- my ($self, $in, $rdr, %p) = @_;
-
- $rdr ||= MIME::Parser::Reader->new;
- #debug "process_part";
- $self->results->level(+1);
-
- ### Create a new entity:
- my $ent = $self->interface('ENTITY_CLASS')->new;
-
- ### Parse and add the header:
- my $head = $self->process_header($in, $rdr);
- $ent->head($head);
-
- ### Tweak the content-type based on context from our parent...
- ### For example, multipart/digest messages default to type message/rfc822:
- $head->mime_type($p{Retype}) if $p{Retype};
-
- ### Get the MIME type and subtype:
- my ($type, $subtype) = (split('/', $head->mime_type), '');
- $self->debug("type = $type, subtype = $subtype");
-
- ### Handle, according to the MIME type:
- if ($type eq 'multipart') {
- $self->process_multipart($in, $rdr, $ent);
- }
- elsif (("$type/$subtype" eq "message/rfc822") &&
- $self->extract_nested_messages) {
- $self->debug("attempting to process a nested message");
- $self->process_message($in, $rdr, $ent);
- }
- else {
- $self->process_singlepart($in, $rdr, $ent);
- }
-
- ### Done (we hope!):
- $self->results->level(-1);
- return $ent;
-}
-
-
-
-=back
-
-=head2 Parsing an input source
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item parse_data DATA
-
-I<Instance method.>
-Parse a MIME message that's already in core.
-You may supply the DATA in any of a number of ways...
-
-=over 4
-
-=item *
-
-B<A scalar> which holds the message.
-
-=item *
-
-B<A ref to a scalar> which holds the message. This is an efficiency hack.
-
-=item *
-
-B<A ref to an array of scalars.> They are treated as a stream
-which (conceptually) consists of simply concatenating the scalars.
-
-=back
-
-Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-=cut
-
-sub parse_data {
- my ($self, $data) = @_;
-
- ### Get data as a scalar:
- my $io;
- switch: while(1) {
- (!ref($data)) and do {
- $io = new IO::Scalar \$data; last switch;
- };
- (ref($data) eq 'SCALAR') and do {
- $io = new IO::Scalar $data; last switch;
- };
- (ref($data) eq 'ARRAY') and do {
- $io = new IO::ScalarArray $data; last switch;
- };
- croak "parse_data: wrong argument ref type: ", ref($data);
- }
-
- ### Parse!
- return $self->parse($io);
-}
-
-#------------------------------
-
-=item parse INSTREAM
-
-I<Instance method.>
-Takes a MIME-stream and splits it into its component entities.
-
-The INSTREAM can be given as a readable FileHandle, an IO::File,
-a globref filehandle (like C<\*STDIN>),
-or as I<any> blessed object conforming to the IO:: interface
-(which minimally implements getline() and read()).
-
-Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-=cut
-
-sub parse {
- my $self = shift;
- my $in = wraphandle(shift); ### coerce old-style filehandles to objects
- my $entity;
- local $/ = "\n"; ### just to be safe
-
- my $bm = benchmark {
- $self->init_parse;
- ($entity) = $self->process_part($in, undef); ### parse!
- };
- $self->debug("t parse: $bm");
-
- $entity;
-}
-
-### Backcompat:
-sub read {
- shift->parse(@_);
-}
-sub parse_FH {
- shift->parse(@_);
-}
-
-#------------------------------
-
-=item parse_open EXPR
-
-I<Instance method.>
-Convenience front-end onto C<parse()>.
-Simply give this method any expression that may be sent as the second
-argument to open() to open a filehandle for reading.
-
-Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-=cut
-
-sub parse_open {
- my ($self, $expr) = @_;
- my $ent;
-
- my $io = IO::File->new($expr) or die "$ME: couldn't open $expr: $!\n";
- $ent = $self->parse($io);
- $io->close;
- $ent;
-}
-
-### Backcompat:
-sub parse_in {
- usage "parse_in() is now parse_open()";
- shift->parse_open(@_);
-}
-
-#------------------------------
-
-=item parse_two HEADFILE, BODYFILE
-
-I<Instance method.>
-Convenience front-end onto C<parse_open()>, intended for programs
-running under mail-handlers like B<deliver>, which splits the incoming
-mail message into a header file and a body file.
-Simply give this method the paths to the respective files.
-
-B<Warning:> it is assumed that, once the files are cat'ed together,
-there will be a blank line separating the head part and the body part.
-
-B<Warning:> new implementation slurps files into line array
-for portability, instead of using 'cat'. May be an issue if
-your messages are large.
-
-Returns the parsed MIME::Entity on success.
-Throws exception on failure.
-
-=cut
-
-sub parse_two {
- my ($self, $headfile, $bodyfile) = @_;
- my @lines;
- foreach ($headfile, $bodyfile) {
- open IN, "<$_" or die "$ME: open $_: $!";
- push @lines, <IN>;
- close IN;
- }
- return $self->parse_data(\@lines);
-}
-
-=back
-
-=cut
-
-
-
-
-#------------------------------------------------------------
-
-=head2 Specifying output destination
-
-B<Warning:> in 5.212 and before, this was done by methods
-of MIME::Parser. However, since many users have requested
-fine-tuned control over how this is done, the logic has been split
-off from the parser into its own class, MIME::Parser::Filer
-Every MIME::Parser maintains an instance of a MIME::Parser::Filer
-subclass to manage disk output (see L<MIME::Parser::Filer> for details.)
-
-The benefit to this is that the MIME::Parser code won't be
-confounded with a lot of garbage related to disk output.
-The drawback is that the way you override the default behavior
-will change.
-
-For now, all the normal public-interface methods are still provided,
-but many are only stubs which create or delegate to the underlying
-MIME::Parser::Filer object.
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item filer [FILER]
-
-I<Instance method.>
-Get/set the FILER object used to manage the output of files to disk.
-This will be some subclass of L<MIME::Parser::Filer|MIME::Parser::Filer>.
-
-=cut
-
-sub filer {
- my ($self, $filer) = @_;
- if (@_ > 1) {
- $self->{MP5_Filer} = $filer;
- $filer->results($self->results); ### but we still need in init_parse
- }
- $self->{MP5_Filer};
-}
-
-#------------------------------
-
-=item output_dir DIRECTORY
-
-I<Instance method.>
-Causes messages to be filed directly into the given DIRECTORY.
-It does this by setting the underlying L<filer()|/filer> to
-a new instance of MIME::Parser::FileInto, and passing the arguments
-into that class' new() method.
-
-B<Note:> Since this method replaces the underlying
-filer, you must invoke it I<before> doing changing any attributes
-of the filer, like the output prefix; otherwise those changes
-will be lost.
-
-=cut
-
-sub output_dir {
- my ($self, @init) = @_;
- if (@_ > 1) {
- $self->filer(MIME::Parser::FileInto->new(@init));
- }
- else {
- &MIME::Tools::whine("0-arg form of output_dir is deprecated.");
- return $self->filer->output_dir;
- }
-}
-
-#------------------------------
-
-=item output_under BASEDIR, OPTS...
-
-I<Instance method.>
-Causes messages to be filed directly into subdirectories of the given
-BASEDIR, one subdirectory per message. It does this by setting the
-underlying L<filer()|/filer> to a new instance of MIME::Parser::FileUnder,
-and passing the arguments into that class' new() method.
-
-B<Note:> Since this method replaces the underlying
-filer, you must invoke it I<before> doing changing any attributes
-of the filer, like the output prefix; otherwise those changes
-will be lost.
-
-=cut
-
-sub output_under {
- my ($self, @init) = @_;
- if (@_ > 1) {
- $self->filer(MIME::Parser::FileUnder->new(@init));
- }
- else {
- &MIME::Tools::whine("0-arg form of output_under is deprecated.");
- return $self->filer->output_dir;
- }
-}
-
-#------------------------------
-
-=item output_path HEAD
-
-I<Instance method, DEPRECATED.>
-Given a MIME head for a file to be extracted, come up with a good
-output pathname for the extracted file.
-Identical to the preferred form:
-
- $parser->filer->output_path(...args...);
-
-We just delegate this to the underlying L<filer()|/filer> object.
-
-=cut
-
-sub output_path {
- my $self = shift;
- ### We use it, so don't warn!
- ### &MIME::Tools::whine("output_path deprecated in MIME::Parser");
- $self->filer->output_path(@_);
-}
-
-#------------------------------
-
-=item output_prefix [PREFIX]
-
-I<Instance method, DEPRECATED.>
-Get/set the short string that all filenames for extracted body-parts
-will begin with (assuming that there is no better "recommended filename").
-Identical to the preferred form:
-
- $parser->filer->output_prefix(...args...);
-
-We just delegate this to the underlying L<filer()|/filer> object.
-
-=cut
-
-sub output_prefix {
- my $self = shift;
- &MIME::Tools::whine("output_prefix deprecated in MIME::Parser");
- $self->filer->output_prefix(@_);
-}
-
-#------------------------------
-
-=item evil_filename NAME
-
-I<Instance method, DEPRECATED.>
-Identical to the preferred form:
-
- $parser->filer->evil_filename(...args...);
-
-We just delegate this to the underlying L<filer()|/filer> object.
-
-=cut
-
-sub evil_filename {
- my $self = shift;
- &MIME::Tools::whine("evil_filename deprecated in MIME::Parser");
- $self->filer->evil_filename(@_);
-}
-
-#------------------------------
-
-=item output_to_core YESNO
-
-I<Instance method.>
-Normally, instances of this class output all their decoded body
-data to disk files (via MIME::Body::File). However, you can change
-this behaviour by invoking this method before parsing:
-
-If YESNO is false (the default), then all body data goes
-to disk files.
-
-If YESNO is true, then all body data goes to in-core data structures
-This is a little risky (what if someone emails you an MPEG or a tar
-file, hmmm?) but people seem to want this bit of noose-shaped rope,
-so I'm providing it.
-Note that setting this attribute true I<does not> mean that parser-internal
-temporary files are avoided! Use L<tmp_to_core()|/tmp_to_core> for that.
-
-With no argument, returns the current setting as a boolean.
-
-=cut
-
-sub output_to_core {
- my ($self, $yesno) = @_;
- if (@_ > 1) {
- $yesno = 0 if ($yesno and $yesno eq 'NONE');
- $self->{MP5_FilerToCore} = $yesno;
- }
- $self->{MP5_FilerToCore};
-}
-
-#------------------------------
-
-=item tmp_recycling [YESNO]
-
-I<Instance method.>
-Normally, tmpfiles are created when needed during parsing, and
-destroyed automatically when they go out of scope. But for efficiency,
-you might prefer for your parser to attempt to rewind and reuse the
-same file until the parser itself is destroyed.
-
-If YESNO is true (the default), we allow recycling;
-tmpfiles persist until the parser itself is destroyed.
-If YESNO is false, we do not allow recycling;
-tmpfiles persist only as long as they are needed during the parse.
-With no argument, just returns the current setting.
-
-=cut
-
-sub tmp_recycling {
- my ($self, $yesno) = @_;
- $self->{MP5_TmpRecycling} = $yesno if (@_ > 1);
- $self->{MP5_TmpRecycling};
-}
-
-#------------------------------
-
-=item tmp_to_core [YESNO]
-
-I<Instance method.>
-Should L<new_tmpfile()|/new_tmpfile> create real temp files, or
-use fake in-core ones? Normally we allow the creation of temporary
-disk files, since this allows us to handle huge attachments even when
-core is limited.
-
-If YESNO is true, we implement new_tmpfile() via in-core handles.
-If YESNO is false (the default), we use real tmpfiles.
-With no argument, just returns the current setting.
-
-=cut
-
-sub tmp_to_core {
- my ($self, $yesno) = @_;
- $self->{MP5_TmpToCore} = $yesno if (@_ > 1);
- $self->{MP5_TmpToCore};
-}
-
-#------------------------------
-
-=item use_inner_files [YESNO]
-
-I<Instance method.>
-If you are parsing from a handle which supports seek() and tell(),
-then we can avoid tmpfiles completely by using IO::InnerFile, if so
-desired: basically, we simulate a temporary file via pointers
-to virtual start- and end-positions in the input stream.
-
-If YESNO is false (the default), then we will not use IO::InnerFile.
-If YESNO is true, we use IO::InnerFile if we can.
-With no argument, just returns the current setting.
-
-B<Note:> inner files are slower than I<real> tmpfiles,
-but possibly faster than I<in-core> tmpfiles... so your choice for
-this option will probably depend on your choice for
-L<tmp_to_core()|/tmp_to_core> and the kind of input streams you are
-parsing.
-
-=cut
-
-sub use_inner_files {
- my ($self, $yesno) = @_;
- $self->{MP5_UseInnerFiles} = $yesno if (@_ > 1);
- $self->{MP5_UseInnerFiles};
-}
-
-=back
-
-=cut
-
-
-#------------------------------------------------------------
-
-=head2 Specifying classes to be instantiated
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item interface ROLE,[VALUE]
-
-I<Instance method.>
-During parsing, the parser normally creates instances of certain classes,
-like MIME::Entity. However, you may want to create a parser subclass
-that uses your own experimental head, entity, etc. classes (for example,
-your "head" class may provide some additional MIME-field-oriented methods).
-
-If so, then this is the method that your subclass should invoke during
-init. Use it like this:
-
- package MyParser;
- @ISA = qw(MIME::Parser);
- ...
- sub init {
- my $self = shift;
- $self->SUPER::init(@_); ### do my parent's init
- $self->interface(ENTITY_CLASS => 'MIME::MyEntity');
- $self->interface(HEAD_CLASS => 'MIME::MyHead');
- $self; ### return
- }
-
-With no VALUE, returns the VALUE currently associated with that ROLE.
-
-=cut
-
-sub interface {
- my ($self, $role, $value) = @_;
- $self->{MP5_Interface}{$role} = $value if (defined($value));
- $self->{MP5_Interface}{$role};
-}
-
-#------------------------------
-
-=item new_body_for HEAD
-
-I<Instance method.>
-Based on the HEAD of a part we are parsing, return a new
-body object (any desirable subclass of MIME::Body) for
-receiving that part's data.
-
-If you set the C<output_to_core> option to false before parsing
-(the default), then we call C<output_path()> and create a
-new MIME::Body::File on that filename.
-
-If you set the C<output_to_core> option to true before parsing,
-then you get a MIME::Body::InCore instead.
-
-If you want the parser to do something else entirely, you can
-override this method in a subclass.
-
-=cut
-
-sub new_body_for {
- my ($self, $head) = @_;
-
- if ($self->output_to_core) {
- $self->debug("outputting body to core");
- return (new MIME::Body::InCore);
- }
- else {
- my $outpath = $self->output_path($head);
- $self->debug("outputting body to disk file: $outpath");
- $self->filer->purgeable($outpath); ### we plan to use it
- return (new MIME::Body::File $outpath);
- }
-}
-
-#------------------------------
-
-=item new_tmpfile [RECYCLE]
-
-I<Instance method.>
-Return an IO handle to be used to hold temporary data during a parse.
-The default uses the standard IO::File->new_tmpfile() method unless
-L<tmp_to_core()|/tmp_to_core> dictates otherwise, but you can override this.
-You shouldn't need to.
-
-If you do override this, make certain that the object you return is
-set for binmode(), and is able to handle the following methods:
-
- read(BUF, NBYTES)
- getline()
- getlines()
- print(@ARGS)
- flush()
- seek(0, 0)
-
-Fatal exception if the stream could not be established.
-
-If RECYCLE is given, it is an object returned by a previous invocation
-of this method; to recycle it, this method must effectively rewind and
-truncate it, and return the same object. If you don't want to support
-recycling, just ignore it and always return a new object.
-
-=cut
-
-sub new_tmpfile {
- my ($self, $recycle) = @_;
-
- my $io;
- if ($self->{MP5_TmpToCore}) { ### Use an in-core tmpfile (slow)
- $io = IO::ScalarArray->new;
- }
- else { ### Use a real tmpfile (fast)
- ### Recycle?
- if ($self->{TmpRecycling} && ### we're recycling
- $recycle && ### something to recycle
- $Config{'truncate'} && $io->can('seek') ### recycling will work
- ){
- $self->debug("recycling tmpfile: $io");
- $io->seek(0, 0);
- truncate($io, 0);
- }
- else { ### Return a new one:
- $io = tmpopen() || die "$ME: can't open tmpfile: $!\n";
- binmode($io);
- }
- }
- return $io;
-}
-
-=back
-
-=cut
-
-
-
-
-
-
-#------------------------------------------------------------
-
-=head2 Parse results and error recovery
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item last_error
-
-I<Instance method.>
-Return the error (if any) that we ignored in the last parse.
-
-=cut
-
-sub last_error {
- join '', shift->results->errors;
-}
-
-
-#------------------------------
-
-=item last_head
-
-I<Instance method.>
-Return the top-level MIME header of the last stream we attempted to parse.
-This is useful for replying to people who sent us bad MIME messages.
-
- ### Parse an input stream:
- eval { $entity = $parser->parse(\*STDIN) };
- if (!$entity) { ### parse failed!
- my $decapitated = $parser->last_head;
- ...
- }
-
-=cut
-
-sub last_head {
- shift->results->top_head;
-}
-
-#------------------------------
-
-=item results
-
-I<Instance method.>
-Return an object containing lots of info from the last entity parsed.
-This will be an instance of class
-L<MIME::Parser::Results|MIME::Parser::Results>.
-
-=cut
-
-sub results {
- shift->{MP5_Results};
-}
-
-
-=back
-
-=cut
-
-
-#------------------------------
-1;
-__END__
-
-
-=head1 OPTIMIZING YOUR PARSER
-
-
-=head2 Maximizing speed
-
-Optimum input mechanisms:
-
- parse() YES (if you give it a globref or a
- subclass of IO::File)
- parse_open() YES
- parse_data() NO (see below)
- parse_two() NO (see below)
-
-Optimum settings:
-
- decode_headers() *** (no real difference; 0 is slightly faster)
- extract_nested_messages() 0 (may be slightly faster, but in
- general you want it set to 1)
- output_to_core() 0 (will be MUCH faster)
- tmp_recycling() 1? (probably, but should be investigated)
- tmp_to_core() 0 (will be MUCH faster)
- use_inner_files() 0 (if tmp_to_core() is 0;
- use 1 otherwise)
-
-B<File I/O is much faster than in-core I/O.>
-Although it I<seems> like slurping a message into core and
-processing it in-core should be faster... it isn't.
-Reason: Perl's filehandle-based I/O translates directly into
-native operating-system calls, whereas the in-core I/O is
-implemented in Perl.
-
-B<Inner files are slower than real tmpfiles, but faster than in-core ones.>
-If speed is your concern, that's why
-you should set use_inner_files(true) if you set tmp_to_core(true):
-so that we can bypass the slow in-core tmpfiles if the input stream
-permits.
-
-B<Native I/O is much faster than object-oriented I/O.>
-It's much faster to use E<lt>$fooE<gt> than $foo-E<gt>getline.
-For backwards compatibilty, this module must continue to use
-object-oriented I/O in most places, but if you use L<parse()|/parse>
-with a "real" filehandle (string, globref, or subclass of IO::File)
-then MIME::Parser is able to perform some crucial optimizations.
-
-B<The parse_two() call is very inefficient.>
-Currently this is just a front-end onto parse_data().
-If your OS supports it, you're I<far> better off doing something like:
-
- $parser->parse_open("/bin/cat msg.head msg.body |");
-
-
-
-
-=head2 Minimizing memory
-
-Optimum input mechanisms:
-
- parse() YES
- parse_open() YES
- parse_data() NO (in-core I/O will burn core)
- parse_two() NO (in-core I/O will burn core)
-
-Optimum settings:
-
- decode_headers() *** (no real difference)
- extract_nested_messages() *** (no real difference)
- output_to_core() 0 (will use MUCH less memory)
- tmp_recycling() 0? (promotes faster GC if
- tmp_to_core is 1)
- tmp_to_core() 0 (will use MUCH less memory)
- use_inner_files() *** (no real difference, but set it to 1
- if you *must* have tmp_to_core set to 1,
- so that you avoid in-core tmpfiles)
-
-
-=head2 Maximizing tolerance of bad MIME
-
-Optimum input mechanisms:
-
- parse() *** (doesn't matter)
- parse_open() *** (doesn't matter)
- parse_data() *** (doesn't matter)
- parse_two() *** (doesn't matter)
-
-Optimum settings:
-
- decode_headers() 0 (sidesteps problem of bad hdr encodings)
- extract_nested_messages() 0 (sidesteps problems of bad nested messages,
- but often you want it set to 1 anyway).
- output_to_core() *** (doesn't matter)
- tmp_recycling() *** (doesn't matter)
- tmp_to_core() *** (doesn't matter)
- use_inner_files() *** (doesn't matter)
-
-
-=head2 Avoiding disk-based temporary files
-
-Optimum input mechanisms:
-
- parse() YES (if you give it a seekable handle)
- parse_open() YES (becomes a seekable handle)
- parse_data() NO (unless you set tmp_to_core(1))
- parse_two() NO (unless you set tmp_to_core(1))
-
-Optimum settings:
-
- decode_headers() *** (doesn't matter)
- extract_nested_messages() *** (doesn't matter)
- output_to_core() *** (doesn't matter)
- tmp_recycling 1 (restricts created files to 1 per parser)
- tmp_to_core() 1
- use_inner_files() 1
-
-B<If we can use them, inner files avoid most tmpfiles.>
-If you parse from a seekable-and-tellable filehandle, then the internal
-process_to_bound() doesn't need to extract each part into a temporary
-buffer; it can use IO::InnerFile (B<warning:> this will slow down
-the parsing of messages with large attachments).
-
-B<You can veto tmpfiles entirely.>
-If you might not be parsing from a seekable-and-tellable filehandle,
-you can set L<tmp_to_core()|/tmp_to_core> true: this will always
-use in-core I/O for the buffering (B<warning:> this will slow down
-the parsing of messages with large attachments).
-
-B<Final resort.>
-You can always override L<new_tmpfile()|/new_tmpfile> in a subclass.
-
-
-
-
-
-
-
-=head1 WARNINGS
-
-=over 4
-
-=item Multipart messages are always read line-by-line
-
-Multipart document parts are read line-by-line, so that the
-encapsulation boundaries may easily be detected. However, bad MIME
-composition agents (for example, naive CGI scripts) might return
-multipart documents where the parts are, say, unencoded bitmap
-files... and, consequently, where such "lines" might be
-veeeeeeeeery long indeed.
-
-A better solution for this case would be to set up some form of
-state machine for input processing. This will be left for future versions.
-
-
-=item Multipart parts read into temp files before decoding
-
-In my original implementation, the MIME::Decoder classes had to be aware
-of encapsulation boundaries in multipart MIME documents.
-While this decode-while-parsing approach obviated the need for
-temporary files, it resulted in inflexible and complex decoder
-implementations.
-
-The revised implementation uses a temporary file (a la C<tmpfile()>)
-during parsing to hold the I<encoded> portion of the current MIME
-document or part. This file is deleted automatically after the
-current part is decoded and the data is written to the "body stream"
-object; you'll never see it, and should never need to worry about it.
-
-Some folks have asked for the ability to bypass this temp-file
-mechanism, I suppose because they assume it would slow down their application.
-I considered accomodating this wish, but the temp-file
-approach solves a lot of thorny problems in parsing, and it also
-protects against hidden bugs in user applications (what if you've
-directed the encoded part into a scalar, and someone unexpectedly
-sends you a 6 MB tar file?). Finally, I'm just not conviced that
-the temp-file use adds significant overhead.
-
-
-=item Fuzzing of CRLF and newline on input
-
-RFC-1521 dictates that MIME streams have lines terminated by CRLF
-(C<"\r\n">). However, it is extremely likely that folks will want to
-parse MIME streams where each line ends in the local newline
-character C<"\n"> instead.
-
-An attempt has been made to allow the parser to handle both CRLF
-and newline-terminated input.
-
-
-=item Fuzzing of CRLF and newline on output
-
-The C<"7bit"> and C<"8bit"> decoders will decode both
-a C<"\n"> and a C<"\r\n"> end-of-line sequence into a C<"\n">.
-
-The C<"binary"> decoder (default if no encoding specified)
-still outputs stuff verbatim... so a MIME message with CRLFs
-and no explicit encoding will be output as a text file
-that, on many systems, will have an annoying ^M at the end of
-each line... I<but this is as it should be>.
-
-
-=item Inability to handle multipart boundaries that contain newlines
-
-First, let's get something straight: I<this is an evil, EVIL practice,>
-and is incompatible with RFC-1521... hence, it's not valid MIME.
-
-If your mailer creates multipart boundary strings that contain
-newlines I<when they appear in the message body,> give it two weeks notice
-and find another one. If your mail robot receives MIME mail like this,
-regard it as syntactically incorrect MIME, which it is.
-
-Why do I say that? Well, in RFC-1521, the syntax of a boundary is
-given quite clearly:
-
- boundary := 0*69<bchars> bcharsnospace
-
- bchars := bcharsnospace / " "
-
- bcharsnospace := DIGIT / ALPHA / "'" / "(" / ")" / "+" /"_"
- / "," / "-" / "." / "/" / ":" / "=" / "?"
-
-All of which means that a valid boundary string I<cannot> have
-newlines in it, and any newlines in such a string in the message header
-are expected to be solely the result of I<folding> the string (i.e.,
-inserting to-be-removed newlines for readability and line-shortening
-I<only>).
-
-Yet, there is at least one brain-damaged user agent out there
-that composes mail like this:
-
- MIME-Version: 1.0
- Content-type: multipart/mixed; boundary="----ABC-
- 123----"
- Subject: Hi... I'm a dork!
-
- This is a multipart MIME message (yeah, right...)
-
- ----ABC-
- 123----
-
- Hi there!
-
-We have I<got> to discourage practices like this (and the recent file
-upload idiocy where binary files that are part of a multipart MIME
-message aren't base64-encoded) if we want MIME to stay relatively
-simple, and MIME parsers to be relatively robust.
-
-I<Thanks to Andreas Koenig for bringing a baaaaaaaaad user agent to
-my attention.>
-
-
-=back
-
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Filer.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Filer.pm
deleted file mode 100644
index b6c5b52..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Filer.pm
+++ /dev/null
@@ -1,922 +0,0 @@
-package MIME::Parser::Filer;
-
-=head1 NAME
-
-MIME::Parser::Filer - manage file-output of the parser
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Parser> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok... now read L<"DESCRIPTION"> below, and everything else
-should make sense.
-
-
-=head2 Public interface
-
- ### Create a "filer" of the desired class:
- my $filer = MIME::Parser::FileInto->new($dir);
- my $filer = MIME::Parser::FileUnder->new($basedir);
- ...
-
- ### Want added security? Don't let outsiders name your files:
- $filer->ignore_filename(1);
-
- ### Prepare for the parsing of a new top-level message:
- $filer->init_parse;
-
- ### Return the path where this message's data should be placed:
- $path = $filer->output_path($head);
-
-
-=head2 Semi-public interface
-
-These methods might be overriden or ignored in some subclasses,
-so they don't all make sense in all circumstances:
-
- ### Tweak the mapping from content-type to extension:
- $emap = $filer->output_extension_map;
- $emap->{"text/html"} = ".htm";
-
-
-
-
-=head1 DESCRIPTION
-
-
-=head2 How this class is used when parsing
-
-When a MIME::Parser decides that it wants to output a file to disk,
-it uses its "Filer" object -- an instance of a MIME::Parser::Filer
-subclass -- to determine where to put the file.
-
-Every parser has a single Filer object, which it uses for all
-parsing. You can get the Filer for a given $parser like this:
-
- $filer = $parser->filer;
-
-At the beginning of each C<parse()>, the filer's internal state
-is reset by the parser:
-
- $parser->filer->init_parse;
-
-The parser can then get a path for each entity in the message
-by handing that entity's header (a MIME::Head) to the filer
-and having it do the work, like this:
-
- $new_file = $parser->filer->output_path($head);
-
-Since it's nice to be able to clean up after a parse (especially
-a failed parse), the parser tells the filer when it has actually
-used a path:
-
- $parser->filer->purgeable($new_file);
-
-Then, if you want to clean up the files which were created for a
-particular parse (and also any directories that the Filer created),
-you would do this:
-
- $parser->filer->purge;
-
-
-
-=head2 Writing your own subclasses
-
-There are two standard "Filer" subclasses (see below):
-B<MIME::Parser::FileInto>, which throws all files from all parses
-into the same directory, and B<MIME::Parser::FileUnder> (preferred), which
-creates a subdirectory for each message. Hopefully, these will be
-sufficient for most uses, but just in case...
-
-The only method you have to override is L<output_path()|/output_path>:
-
- $filer->output_path($head);
-
-This method is invoked by MIME::Parser when it wants to put a
-decoded message body in an output file. The method should return a
-path to the file to create. Failure is indicated by throwing an
-exception.
-
-The path returned by C<output_path()> should be "ready for open()":
-any necessary parent directories need to exist at that point.
-These directories can be created by the Filer, if course, and they
-should be marked as B<purgeable()> if a purge should delete them.
-
-Actually, if your issue is more I<where> the files go than
-what they're named, you can use the default L<output_path()|/output_path>
-method and just override one of its components:
-
- $dir = $filer->output_dir($head);
- $name = $filer->output_filename($head);
- ...
-
-
-
-=head1 PUBLIC INTERFACE
-
-
-=head2 MIME::Parser::Filer
-
-This is the abstract superclass of all "filer" objects.
-
-=over 4
-
-=cut
-
-use strict;
-
-### Kit modules:
-use MIME::Tools qw(:msgtypes);
-use File::Spec;
-use File::Path qw(rmtree);
-use MIME::WordDecoder;
-
-### Output path uniquifiers:
-my $GFileNo = 0;
-my $GSubdirNo = 0;
-
-### Map content-type to extension.
-### If we can't map "major/minor", we try "major/*", then use "*/*".
-my %DefaultTypeToExt =
-qw(
-
-application/andrew-inset .ez
-application/octet-stream .bin
-application/oda .oda
-application/pdf .pdf
-application/pgp .pgp
-application/postscript .ps
-application/rtf .rtf
-application/x-bcpio .bcpio
-application/x-chess-pgn .pgn
-application/x-cpio .cpio
-application/x-csh .csh
-application/x-dvi .dvi
-application/x-gtar .gtar
-application/x-gunzip .gz
-application/x-hdf .hdf
-application/x-latex .latex
-application/x-mif .mif
-application/x-netcdf .cdf
-application/x-netcdf .nc
-application/x-sh .sh
-application/x-shar .shar
-application/x-sv4cpio .sv4cpio
-application/x-sv4crc .sv4crc
-application/x-tar .tar
-application/x-tcl .tcl
-application/x-tex .tex
-application/x-texinfo .texi
-application/x-troff .roff
-application/x-troff .tr
-application/x-troff-man .man
-application/x-troff-me .me
-application/x-troff-ms .ms
-application/x-ustar .ustar
-application/x-wais-source .src
-application/zip .zip
-
-audio/basic .snd
-audio/ulaw .au
-audio/x-aiff .aiff
-audio/x-wav .wav
-
-image/gif .gif
-image/ief .ief
-image/jpeg .jpg
-image/png .png
-image/xbm .xbm
-image/tiff .tif
-image/x-cmu-raster .ras
-image/x-portable-anymap .pnm
-image/x-portable-bitmap .pbm
-image/x-portable-graymap .pgm
-image/x-portable-pixmap .ppm
-image/x-rgb .rgb
-image/x-xbitmap .xbm
-image/x-xpixmap .xpm
-image/x-xwindowdump .xwd
-
-text/* .txt
-text/html .html
-text/plain .txt
-text/richtext .rtx
-text/tab-separated-values .tsv
-text/x-setext .etx
-text/x-vcard .vcf
-
-video/mpeg .mpg
-video/quicktime .mov
-video/x-msvideo .avi
-video/x-sgi-movie .movie
-
-message/* .msg
-
-*/* .dat
-
-);
-
-
-#------------------------------
-
-=item new INITARGS...
-
-I<Class method, constructor.>
-Create a new outputter for the given parser.
-Any subsequent arguments are given to init(), which subclasses should
-override for their own use (the default init does nothing).
-
-=cut
-
-sub new {
- my ($class, @initargs) = @_;
- my $self = bless {
- MPF_Prefix => "msg",
- MPF_Dir => ".",
- MPF_Ext => { %DefaultTypeToExt },
- MPF_Purgeable => [], ### files created by the last parse
-
- MPF_MaxName => 80, ### max filename before treated as evil
- MPF_TrimRoot => 14, ### trim root to this length
- MPF_TrimExt => 3, ### trim extension to this length
- }, $class;
- $self->init(@initargs);
- $self;
-}
-
-sub init {
- ### no-op
-}
-
-#------------------------------
-#
-# cleanup_dir
-#
-# Instance method, private.
-# Cleanup a directory, defaulting empty to "."
-#
-sub cleanup_dir {
- my ($self, $dir) = @_;
- $dir = '.' if (!defined($dir) || ($dir eq '')); # coerce empty to "."
- $dir = '/.' if ($dir eq '/'); # coerce "/" so "$dir/$filename" works
- $dir =~ s|/$||; # be nice: get rid of any trailing "/"
- $dir;
-}
-
-#------------------------------
-
-=item results RESULTS
-
-I<Instance method.>
-Link this filer to a MIME::Parser::Results object which will
-tally the messages. Notice that we avoid linking it to the
-parser to avoid circular reference!
-
-=cut
-
-sub results {
- my ($self, $results) = @_;
- $self->{MPF_Results} = $results if (@_ > 1);
- $self->{MPF_Results};
-}
-
-### Log debug messages:
-sub debug {
- my $self = shift;
- if ($self->{MPF_Results}) {
- unshift @_, $self->{MPF_Results}->indent;
- $self->{MPF_Results}->msg($M_DEBUG, @_);
- }
- MIME::Tools::debug(@_);
-}
-
-### Log warning messages:
-sub whine {
- my $self = shift;
- if ($self->{MPF_Results}) {
- unshift @_, $self->{MPF_Results}->indent;
- $self->{MPF_Results}->msg($M_WARNING, @_);
- }
- MIME::Tools::whine(@_);
-}
-
-#------------------------------
-
-=item init_parse
-
-I<Instance method.>
-Prepare to start parsing a new message.
-Subclasses should always be sure to invoke the inherited method.
-
-=cut
-
-sub init_parse {
- my $self = shift;
- $self->{MPF_Purgeable} = [];
-}
-
-#------------------------------
-
-=item evil_filename FILENAME
-
-I<Instance method.>
-Is this an evil filename; i.e., one which should not be used
-in generating a disk file name? It is if any of these are true:
-
- * it is empty
- * it is a string of dots: ".", "..", etc.
- * it contains a known "path" character: '/' '\' ':' '[' ']'
- * it is too long
-
-If you just want to change this behavior, you should override
-this method in the subclass of MIME::Parser::Filer that you use.
-
-B<Warning:> at the time this method is invoked, the FILENAME has
-already been unmime'd into the local character set.
-If you're using any character set other than ASCII, ISO-8859-*,
-or UTF-8, the interpretation of the "path" characters might be
-very different, and you will probably need to override this method.
-See L<MIME::WordDecoder/unmime> for more details.
-
-B<Note:> subclasses of MIME::Parser::Filer which override
-output_path() might not consult this method; note, however, that
-the built-in subclasses do consult it.
-
-I<Thanks to Andrew Pimlott for finding a real dumb bug in the original
-version. Thanks to Nickolay Saukh for noting that evil is in the
-eye of the beholder.>
-
-=cut
-
-sub evil_filename {
- my ($self, $name) = @_;
-
- $self->debug("is this evil? '$name'");
-
- return 1 if (!defined($name) or ($name eq '')); ### empty
- return 1 if ($name =~ m{^\.+\Z}); ### dots
- return 1 if ($name =~ tr{\\/:[]}{}); ### path characters
- return 1 if ($self->{MPF_MaxName} and
- (length($name) > $self->{MPF_MaxName}));
-
- $self->debug("it's ok");
- 0;
-}
-
-#------------------------------
-
-=item exorcise_filename FILENAME
-
-I<Instance method.>
-If a given filename is evil (see L</evil_filename>) we try to
-rescue it by performing some basic operations: shortening it,
-removing bad characters, etc., and checking each against
-evil_filename().
-
-Returns the exorcised filename (which is guaranteed to not
-be evil), or undef if it could not be salvaged.
-
-B<Warning:> at the time this method is invoked, the FILENAME has
-already been unmime'd into the local character set.
-If you're using anything character set other than ASCII, ISO-8859-*,
-or UTF-8, the interpretation of the "path" characters might be very
-very different, and you will probably need to override this method.
-See L<MIME::WordDecoder/unmime> for more details.
-
-=cut
-
-sub exorcise_filename {
- my ($self, $fname) = @_;
-
- ### Isolate to last path element:
- my $last = $fname; $last =~ s{^.*[/\\\[\]:]}{};
- if ($last and !$self->evil_filename($last)) {
- $self->debug("looks like I can use the last path element");
- return $last;
- }
-
- ### Break last element into root and extension, and truncate:
- my ($root, $ext) = (($last =~ /^(.*)\.([^\.]+)\Z/)
- ? ($1, $2)
- : ($last, ''));
- $root = substr($root, 0, ($self->{MPF_TrimRoot} || 14));
- $ext = substr($ext, 0, ($self->{MPF_TrimExt} || 3));
- $ext =~ /^\w+$/ or $ext = "dat";
- my $trunc = $root . ($ext ? ".$ext" : '');
- if (!$self->evil_filename($trunc)) {
- $self->debug("looks like I can use the truncated last path element");
- return $trunc;
- }
-
- ### Hope that works:
- undef;
-}
-
-#------------------------------
-
-=item find_unused_path DIR, FILENAME
-
-I<Instance method, subclasses only.>
-We have decided on an output directory and tentative filename,
-but there is a chance that it might already exist. Keep
-adding a numeric suffix "-1", "-2", etc. to the filename
-until an unused path is found, and then return that path.
-
-The suffix is actually added before the first "." in the filename
-is there is one; for example:
-
- picture.gif archive.tar.gz readme
- picture-1.gif archive-1.tar.gz readme-1
- picture-2.gif archive-2.tar.gz readme-2
- ... ... ...
- picture-10.gif
- ...
-
-This can be a costly operation, and risky if you don't want files
-renamed, so it is in your best interest to minimize situations
-where these kinds of collisions occur. Unfortunately, if
-a multipart message gives all of its parts the same recommended
-filename, and you are placing them all in the same directory,
-this method might be unavoidable.
-
-=cut
-
-sub find_unused_path {
- my ($self, $dir, $fname) = @_;
- my $i = 0;
- while (1) {
-
- ### Create suffixed name (from filename), and see if we can use it:
- my $suffix = ($i ? "-$i" : "");
- my $sname = $fname; $sname =~ s/^(.*?)(\.|\Z)/$1$suffix$2/;
- my $path = File::Spec->catfile($dir, $sname);
- if (! -e $path) { ### it's good!
- $i and $self->whine("collision with $fname in $dir: using $path");
- return $path;
- }
- $self->debug("$path already taken");
- } continue { ++$i; }
-}
-
-#------------------------------
-
-=item ignore_filename [YESNO]
-
-I<Instance method.>
-Return true if we should always ignore recommended filenames in
-messages, choosing instead to always generate our own filenames.
-With argument, sets this value.
-
-B<Note:> subclasses of MIME::Parser::Filer which override
-output_path() might not honor this setting; note, however, that
-the built-in subclasses honor it.
-
-=cut
-
-sub ignore_filename {
- my $self = shift;
- $self->{MPF_IgnoreFilename} = $_[0] if @_;
- $self->{MPF_IgnoreFilename};
-}
-
-#------------------------------
-
-=item output_dir HEAD
-
-I<Instance method.>
-Return the output directory for the given header.
-The default method returns ".".
-
-=cut
-
-sub output_dir {
- my ($self, $head) = @_;
- return ".";
-}
-
-#------------------------------
-
-=item output_filename HEAD
-
-I<Instance method, subclasses only.>
-A given recommended filename was either not given, or it was judged
-to be evil. Return a fake name, possibly using information in the
-message HEADer. Note that this is just the filename, not the full path.
-
-Used by L<output_path()|/output_path>.
-If you're using the default C<output_path()>, you probably don't
-need to worry about avoiding collisions with existing files;
-we take care of that in L<find_unused_path()|/find_unused_path>.
-
-=cut
-
-sub output_filename {
- my ($self, $head) = @_;
-
- ### Get the recommended name:
- my $recommended = unmime $head->recommended_filename;
-
- ### Get content type:
- my ($type, $subtype) = split m{/}, $head->mime_type; $subtype ||= '';
-
- ### Get recommended extension, being quite conservative:
- my $recommended_ext = (($recommended and ($recommended =~ m{(\.\w+)\Z}))
- ? $1
- : undef);
-
- ### Try and get an extension, honoring a given one first:
- my $ext = ($recommended_ext ||
- $self->{MPF_Ext}{"$type/$subtype"} ||
- $self->{MPF_Ext}{"$type/*"} ||
- $self->{MPF_Ext}{"*/*"} ||
- ".dat");
-
- ### Get a prefix:
- ++$GFileNo;
- return ($self->output_prefix . "-$$-$GFileNo$ext");
-}
-
-#------------------------------
-
-=item output_prefix [PREFIX]
-
-I<Instance method.>
-Get the short string that all filenames for extracted body-parts
-will begin with (assuming that there is no better "recommended filename").
-The default is F<"msg">.
-
-If PREFIX I<is not> given, the current output prefix is returned.
-If PREFIX I<is> given, the output prefix is set to the new value,
-and the previous value is returned.
-
-Used by L<output_filename()|/output_filename>.
-
-B<Note:> subclasses of MIME::Parser::Filer which override
-output_path() or output_filename() might not honor this setting;
-note, however, that the built-in subclasses honor it.
-
-=cut
-
-sub output_prefix {
- my ($self, $prefix) = @_;
- $self->{MPF_Prefix} = $prefix if (@_ > 1);
- $self->{MPF_Prefix};
-}
-
-#------------------------------
-
-=item output_type_ext
-
-I<Instance method.>
-Return a reference to the hash used by the default
-L<output_filename()|/output_filename> for mapping from content-types
-to extensions when there is no default extension to use.
-
- $emap = $filer->output_typemap;
- $emap->{'text/plain'} = '.txt';
- $emap->{'text/html'} = '.html';
- $emap->{'text/*'} = '.txt';
- $emap->{'*/*'} = '.dat';
-
-B<Note:> subclasses of MIME::Parser::Filer which override
-output_path() or output_filename() might not consult this hash;
-note, however, that the built-in subclasses consult it.
-
-=cut
-
-sub output_type_ext {
- my $self = shift;
- return $self->{MPF_Ext};
-}
-
-#------------------------------
-
-=item output_path HEAD
-
-I<Instance method, subclasses only.>
-Given a MIME head for a file to be extracted, come up with a good
-output pathname for the extracted file. This is the only method
-you need to worry about if you are building a custom filer.
-
-The default implementation does a lot of work; subclass
-implementers I<really> should try to just override its components
-instead of the whole thing. It works basically as follows:
-
- $directory = $self->output_dir($head);
-
- $filename = $head->recommended_filename();
- if (!$filename or
- $self->ignore_filename() or
- $self->evil_filename($filename)) {
- $filename = $self->output_filename($head);
- }
-
- return $self->find_unused_path($directory, $filename);
-
-B<Note:> There are many, many, many ways you might want to control
-the naming of files, based on your application. If you don't like
-the behavior of this function, you can easily define your own subclass
-of MIME::Parser::Filer and override it there.
-
-B<Note:> Nickolay Saukh pointed out that, given the subjective nature of
-what is "evil", this function really shouldn't I<warn> about an evil
-filename, but maybe just issue a I<debug> message. I considered that,
-but then I thought: if debugging were off, people wouldn't know why
-(or even if) a given filename had been ignored. In mail robots
-that depend on externally-provided filenames, this could cause
-hard-to-diagnose problems. So, the message is still a warning.
-
-I<Thanks to Laurent Amon for pointing out problems with the original
-implementation, and for making some good suggestions. Thanks also to
-Achim Bohnet for pointing out that there should be a hookless, OO way of
-overriding the output path.>
-
-=cut
-
-sub output_path {
- my ($self, $head) = @_;
-
- ### Get the output directory:
- my $dir = $self->output_dir($head);
-
- ### Get the output filename, decoding into the local character set:
- my $fname = unmime $head->recommended_filename;
-
- ### Can we use it:
- if (!defined($fname)) {
- $self->debug("no filename recommended: synthesizing our own");
- $fname = $self->output_filename($head);
- }
- elsif ($self->ignore_filename) {
- $self->debug("ignoring all external filenames: synthesizing our own");
- $fname = $self->output_filename($head);
- }
- elsif ($self->evil_filename($fname)) {
-
- ### Can we save it by just taking the last element?
- my $ex = $self->exorcise_filename($fname);
- if (defined($ex) and !$self->evil_filename($ex)) {
- $self->whine("Provided filename '$fname' is regarded as evil, ",
- "but I was able to exorcise it and get something ",
- "usable.");
- $fname = $ex;
- }
- else {
- $self->whine("Provided filename '$fname' is regarded as evil; ",
- "I'm ignoring it and supplying my own.");
- $fname = $self->output_filename($head);
- }
- }
- $self->debug("planning to use '$fname'");
-
- ### Resolve collisions and return final path:
- return $self->find_unused_path($dir, $fname);
-}
-
-#------------------------------
-
-=item purge
-
-I<Instance method, final.>
-Purge all files/directories created by the last parse.
-This method simply goes through the purgeable list in reverse order
-(see L</purgeable>) and removes all existing files/directories in it.
-You should not need to override this method.
-
-=cut
-
-sub purge {
- my ($self) = @_;
- foreach my $path (reverse @{$self->{MPF_Purgeable}}) {
- (-e $path) or next; ### must check: might delete DIR before DIR/FILE
- rmtree($path, 0, 1);
- (-e $path) and $self->whine("unable to purge: $path");
- }
- 1;
-}
-
-#------------------------------
-
-=item purgeable [FILE]
-
-I<Instance method, final.>
-Add FILE to the list of "purgeable" files/directories (those which
-will be removed if you do a C<purge()>).
-You should not need to override this method.
-
-If FILE is not given, the "purgeable" list is returned.
-This may be used for more-sophisticated purging.
-
-As a special case, invoking this method with a FILE that is an
-arrayref will replace the purgeable list with a copy of the
-array's contents, so [] may be used to clear the list.
-
-Note that the "purgeable" list is cleared when a parser begins a
-new parse; therefore, if you want to use purge() to do cleanup,
-you I<must> do so I<before> starting a new parse!
-
-=cut
-
-sub purgeable {
- my ($self, $path) = @_;
- return @{$self->{MPF_Purgeable}} if (@_ == 1);
-
- if (ref($path)) { $self->{MPF_Purgeable} = [ @$path ]; }
- else { push @{$self->{MPF_Purgeable}}, $path; }
- 1;
-}
-
-=back
-
-=cut
-
-
-#------------------------------------------------------------
-#------------------------------------------------------------
-
-=head2 MIME::Parser::FileInto
-
-This concrete subclass of MIME::Parser::Filer supports filing
-into a given directory.
-
-=over 4
-
-=cut
-
-package MIME::Parser::FileInto;
-
-use strict;
-use vars qw(@ISA);
-@ISA = qw(MIME::Parser::Filer);
-
-#------------------------------
-
-=item init DIRECTORY
-
-I<Instance method, initiallizer.>
-Set the directory where all files will go.
-
-=cut
-
-sub init {
- my ($self, $dir) = @_;
- $self->{MPFI_Dir} = $self->cleanup_dir($dir);
-}
-
-#------------------------------
-#
-# output_dir HEAD
-#
-# I<Instance method, concrete override.>
-# Return the output directory where the files go.
-#
-sub output_dir {
- shift->{MPFI_Dir};
-}
-
-=back
-
-=cut
-
-
-
-
-#------------------------------------------------------------
-#------------------------------------------------------------
-
-=head2 MIME::Parser::FileUnder
-
-This concrete subclass of MIME::Parser::Filer supports filing under
-a given directory, using one subdirectory per message, but with
-all message parts in the same directory.
-
-=over 4
-
-=cut
-
-package MIME::Parser::FileUnder;
-
-use strict;
-use vars qw(@ISA);
-@ISA = qw(MIME::Parser::Filer);
-
-#------------------------------
-
-=item init BASEDIR, OPTSHASH...
-
-I<Instance method, initiallizer.>
-Set the base directory which will contain the message directories.
-If used, then each parse of begins by creating a new subdirectory
-of BASEDIR where the actual parts of the message are placed.
-OPTSHASH can contain the following:
-
-=over 4
-
-=item DirName
-
-Explicitly set the name of the subdirectory which is created.
-The default is to use the time, process id, and a sequence number,
-but you might want a predictable directory.
-
-=item Purge
-
-Automatically purge the contents of the directory (including all
-subdirectories) before each parse. This is really only needed if
-using an explicit DirName, and is provided as a convenience only.
-Currently we use the 1-arg form of File::Path::rmtree; you should
-familiarize yourself with the caveats therein.
-
-=back
-
-The output_dir() will return the path to this message-specific directory
-until the next parse is begun, so you can do this:
-
- use File::Path;
-
- $parser->output_under("/tmp");
- $ent = eval { $parser->parse_open($msg); }; ### parse
- if (!$ent) { ### parse failed
- rmtree($parser->output_dir);
- die "parse failed: $@";
- }
- else { ### parse succeeded
- ...do stuff...
- }
-
-=cut
-
-sub init {
- my ($self, $basedir, %opts) = @_;
-
- $self->{MPFU_Base} = $self->cleanup_dir($basedir);
- $self->{MPFU_DirName} = $opts{DirName};
- $self->{MPFU_Purge} = $opts{Purge};
-}
-
-#------------------------------
-#
-# init_parse
-#
-# I<Instance method, override.>
-# Prepare to start parsing a new message.
-#
-sub init_parse {
- my $self = shift;
-
- ### Invoke inherited method first!
- $self->SUPER::init_parse;
-
- ### Determine the subdirectory of ther base to use:
- my $subdir = (defined($self->{MPFU_DirName})
- ? $self->{MPFU_DirName}
- : ("msg-".scalar(time)."-$$-".$GSubdirNo++));
- $self->debug("subdir = $subdir");
-
- ### Determine full path to the per-message output directory:
- $self->{MPFU_Dir} = File::Spec->catfile($self->{MPFU_Base}, $subdir);
-
- ### Remove and re-create the per-message output directory:
- rmtree $self->output_dir if $self->{MPFU_Purge};
- (-d $self->output_dir) or
- mkdir $self->output_dir, 0700 or
- die "mkdir ".$self->output_dir.": $!\n";
-
- ### Add the per-message output directory to the puregables:
- $self->purgeable($self->output_dir);
- 1;
-}
-
-#------------------------------
-#
-# output_dir HEAD
-#
-# I<Instance method, concrete override.>
-# Return the output directory that we used for the last parse.
-#
-sub output_dir {
- shift->{MPFU_Dir};
-}
-
-=back
-
-=cut
-
-1;
-__END__
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Reader.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Reader.pm
deleted file mode 100644
index 6802abd..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Reader.pm
+++ /dev/null
@@ -1,306 +0,0 @@
-package MIME::Parser::Reader;
-
-=head1 NAME
-
-MIME::Parser::Reader - a line-oriented reader for a MIME::Parser
-
-
-=head1 SYNOPSIS
-
-This module is used internally by MIME::Parser; you probably
-don't need to be looking at it at all. But just in case...
-
- ### Create a top-level reader, where chunks end at EOF:
- $rdr = MIME::Parser::Reader->new();
-
- ### Spawn a child reader, where chunks also end at a boundary:
- $subrdr = $rdr->spawn->add_boundary($bound);
-
- ### Spawn a child reader, where chunks also end at a given string:
- $subrdr = $rdr->spawn->add_terminator($string);
-
- ### Read until boundary or terminator:
- $subrdr->read_chunk($in, $out);
-
-
-=head1 DESCRIPTION
-
-A line-oriented reader which can deal with virtual end-of-stream
-defined by a collection of boundaries.
-
-B<Warning:> this is a private class solely for use by MIME::Parser.
-This class has no official public interface
-
-=cut
-
-use strict;
-use IO::ScalarArray;
-
-### All possible end-of-line sequences.
-### Note that "" is included because last line of stream may have no newline!
-my @EOLs = ("", "\r", "\n", "\r\n", "\n\r");
-
-### Long line:
-my $LONGLINE = ' ' x 1000;
-
-
-#------------------------------
-#
-# new
-#
-# I<Class method.>
-# Construct an empty (top-level) reader.
-#
-sub new {
- my ($class) = @_;
- my $eos;
- return bless {
- Bounds => [],
- BH => {},
- TH => {},
- EOS => \$eos,
- }, $class;
-}
-
-#------------------------------
-#
-# spawn
-#
-# I<Instance method.>
-# Return a reader which is mostly a duplicate, except that the EOS
-# accumulator is shared.
-#
-sub spawn {
- my $self = shift;
- my $dup = bless {}, ref($self);
- $dup->{Bounds} = [ @{$self->{Bounds}} ]; ### deep copy
- $dup->{BH} = { %{$self->{BH}} }; ### deep copy
- $dup->{TH} = { %{$self->{TH}} }; ### deep copy
- $dup->{EOS} = $self->{EOS}; ### shallow copy; same ref!
- $dup;
-}
-
-#------------------------------
-#
-# add_boundary BOUND
-#
-# I<Instance method.>
-# Let BOUND be the new innermost boundary. Returns self.
-#
-sub add_boundary {
- my ($self, $bound) = @_;
- unshift @{$self->{Bounds}}, $bound; ### now at index 0
- $self->{BH}{"--$bound"} = "DELIM $bound";
- $self->{BH}{"--$bound--"} = "CLOSE $bound";
- $self;
-}
-
-#------------------------------
-#
-# add_terminator LINE
-#
-# I<Instance method.>
-# Let LINE be another terminator. Returns self.
-#
-sub add_terminator {
- my ($self, $line) = @_;
- foreach (@EOLs) {
- $self->{TH}{"$line$_"} = "DONE $line";
- }
- $self;
-}
-
-#------------------------------
-#
-# has_bounds
-#
-# I<Instance method.>
-# Are there boundaries to contend with?
-#
-sub has_bounds {
- scalar(@{shift->{Bounds}});
-}
-
-#------------------------------
-#
-# depth
-#
-# I<Instance method.>
-# How many levels are there?
-#
-sub depth {
- scalar(@{shift->{Bounds}});
-}
-
-#------------------------------
-#
-# eos [EOS]
-#
-# I<Instance method.>
-# Return the last end-of-stream token seen.
-# See read_chunk() for what these might be.
-#
-sub eos {
- my $self = shift;
- ${$self->{EOS}} = $_[0] if @_;
- ${$self->{EOS}};
-}
-
-#------------------------------
-#
-# eos_type [EOSTOKEN]
-#
-# I<Instance method.>
-# Return the high-level type of the given token (defaults to our token).
-#
-# DELIM saw an innermost boundary like --xyz
-# CLOSE saw an innermost boundary like --xyz--
-# DONE callback returned false
-# EOF end of file
-# EXT saw boundary of some higher-level
-#
-sub eos_type {
- my ($self, $eos) = @_;
- $eos = $self->eos if (@_ == 1);
-
- if ($eos =~ /^(DONE|EOF)/) {
- return $1;
- }
- elsif ($eos =~ /^(DELIM|CLOSE) (.*)$/) {
- return (($2 eq $self->{Bounds}[0]) ? $1 : 'EXT');
- }
- else {
- die("internal error: unable to classify boundary token ($eos)");
- }
-}
-
-#------------------------------
-#
-# native_handle HANDLE
-#
-# I<Function.>
-# Can we do native i/o on HANDLE? If true, returns the handle
-# that will respond to native I/O calls; else, returns undef.
-#
-sub native_handle {
- my $fh = shift;
- return $fh if $fh->isa('IO::File');
- return $$fh if ($fh->isa('IO::Wrap') && (ref($$fh) eq 'GLOB'));
- undef;
-}
-
-#------------------------------
-#
-# read_chunk INHANDLE, OUTHANDLE
-#
-# I<Instance method.>
-# Get lines until end-of-stream.
-# Returns the terminating-condition token:
-#
-# DELIM xyz saw boundary line "--xyz"
-# CLOSE xyz saw boundary line "--xyz--"
-# DONE xyz saw terminator line "xyz"
-# EOF end of file
-
-# Parse up to (and including) the boundary, and dump output.
-# Follows the RFC-1521 specification, that the CRLF immediately preceding
-# the boundary is part of the boundary, NOT part of the input!
-#
-# NOTE: while parsing, we take care to remember the EXACT end-of-line
-# sequence. This is because we *may* be handling 'binary' encoded data, and
-# in that case we can't just massage \r\n into \n! Don't worry... if the
-# data is styled as '7bit' or '8bit', the "decoder" will massage the CRLF
-# for us. For now, we're just trying to chop up the data stream.
-
-# NBK - Oct 12, 1999
-# The CRLF at the end of the current line is considered part
-# of the boundary. I buffer the current line and output the
-# last. I strip the last CRLF when I hit the boundary.
-
-sub read_chunk {
- my ($self, $in, $out) = @_;
-
- ### Init:
- my %bh = %{$self->{BH}};
- my %th = %{$self->{TH}}; my $thx = keys %th;
- local $_ = $LONGLINE;
- my $maybe;
- my $last = '';
- my $eos = '';
-
- ### Determine types:
- my $n_in = native_handle($in);
- my $n_out = native_handle($out);
-
- ### Handle efficiently by type:
- if ($n_in) {
- if ($n_out) { ### native input, native output [fastest]
- while (<$n_in>) {
- if (substr($_, 0, 2) eq '--') {
- ($maybe = $_) =~ s/[ \t\r\n]+\Z//;
- $bh{$maybe} and do { $eos = $bh{$maybe}; last };
- }
- $thx and $th{$_} and do { $eos = $th{$_}; last };
- print $n_out $last; $last = $_;
- }
- }
- else { ### native input, OO output [slower]
- while (<$n_in>) {
- if (substr($_, 0, 2) eq '--') {
- ($maybe = $_) =~ s/[ \t\r\n]+\Z//;
- $bh{$maybe} and do { $eos = $bh{$maybe}; last };
- }
- $thx and $th{$_} and do { $eos = $th{$_}; last };
- $out->print($last); $last = $_;
- }
- }
- }
- else {
- if ($n_out) { ### OO input, native output [even slower]
- while (defined($_ = $in->getline)) {
- if (substr($_, 0, 2) eq '--') {
- ($maybe = $_) =~ s/[ \t\r\n]+\Z//;
- $bh{$maybe} and do { $eos = $bh{$maybe}; last };
- }
- $thx and $th{$_} and do { $eos = $th{$_}; last };
- print $n_out $last; $last = $_;
- }
- }
- else { ### OO input, OO output [slowest]
- while (defined($_ = $in->getline)) {
- if (substr($_, 0, 2) eq '--') {
- ($maybe = $_) =~ s/[ \t\r\n]+\Z//;
- $bh{$maybe} and do { $eos = $bh{$maybe}; last };
- }
- $thx and $th{$_} and do { $eos = $th{$_}; last };
- $out->print($last); $last = $_;
- }
- }
- }
-
- ### Write out last held line, removing terminating CRLF if ended on bound:
- $last =~ s/[\r\n]+\Z// if ($eos =~ /^(DELIM|CLOSE)/);
- $out->print($last);
-
- ### Save and return what we finished on:
- ${$self->{EOS}} = ($eos || 'EOF');
- 1;
-}
-
-#------------------------------
-#
-# read_lines INHANDLE, \@OUTLINES
-#
-# I<Instance method.>
-# Read lines into the given array.
-#
-sub read_lines {
- my ($self, $in, $outlines) = @_;
- $self->read_chunk($in, IO::ScalarArray->new($outlines));
- shift @$outlines if ($outlines->[0] eq ''); ### leading empty line
- 1;
-}
-
-1;
-__END__
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Results.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Results.pm
deleted file mode 100644
index db7e75e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Parser/Results.pm
+++ /dev/null
@@ -1,198 +0,0 @@
-package MIME::Parser::Results;
-
-=head1 NAME
-
-MIME::Parser::Results - results of the last entity parsed
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Parser> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok...
-
- ### Do parse, get results:
- my $entity = eval { $parser->parse(\*STDIN); };
- my $results = $parser->results;
-
- ### Get all messages logged:
- @msgs = $results->msgs;
-
- ### Get messages of specific types (also tests if there were problems):
- $had_errors = $results->errors;
- $had_warnings = $results->warnings;
-
- ### Get outermost header:
- $top_head = $results->top_head;
-
-
-=head1 DESCRIPTION
-
-Results from the last MIME::Parser parse.
-
-
-=head1 PUBLIC INTERFACE
-
-=over 4
-
-=cut
-
-use strict;
-
-### Kit modules:
-use MIME::Tools qw(:msgs);
-
-
-#------------------------------
-
-=item new
-
-I<Constructor.>
-
-=cut
-
-sub new {
- bless {
- MPI_ID => 'MIME-parser',
- MPI_Msgs => [],
- MPI_Level => 0,
- MPI_TopHead => undef,
- }, shift;
-}
-
-#------------------------------
-
-=item msgs
-
-I<Instance method.>
-Return all messages that we logged, in order.
-Every message is a string beginning with its type followed by C<": ">;
-the current types are C<debug>, C<warning>, and C<error>.
-
-=cut
-
-sub msgs {
- @{shift->{MPI_Msgs}};
-}
-
-#------------------------------
-
-=item errors
-
-I<Instance method.>
-Return all error messages that we logged, in order.
-A convenience front-end onto msgs().
-
-=cut
-
-sub errors {
- grep /^error: /, @{shift->{MPI_Msgs}};
-}
-
-#------------------------------
-
-=item warnings
-
-I<Instance method.>
-Return all warning messages that we logged, in order.
-A convenience front-end onto msgs().
-
-=cut
-
-sub warnings {
- grep /^warning: /, @{shift->{MPI_Msgs}};
-}
-
-#------------------------------
-
-=item top_head
-
-I<Instance method.>
-Return the topmost header, if we were able to read it.
-This may be useful if the parse fails.
-
-=cut
-
-sub top_head {
- my ($self, $head) = @_;
- $self->{MPI_TopHead} = $head if @_ > 1;
- $self->{MPI_TopHead};
-}
-
-
-
-
-#------------------------------
-#
-# PRIVATE: FOR USE DURING PARSING ONLY!
-#
-
-#------------------------------
-#
-# msg TYPE, MESSAGE...
-#
-# Take a message.
-#
-sub msg {
- my $self = shift;
- my $type = shift;
- my @args = map { defined($_) ? $_ : '<<undef>>' } @_;
-
- push @{$self->{MPI_Msgs}}, ($type.": ".join('', @args)."\n");
-}
-
-#------------------------------
-#
-# level [+1|-1]
-#
-# Return current parsing level.
-#
-sub level {
- my ($self, $lvl) = @_;
- $self->{MPI_Level} += $lvl if @_ > 1;
- $self->{MPI_Level};
-}
-
-#------------------------------
-#
-# indent
-#
-# Return indent for current parsing level.
-#
-sub indent {
- my ($self) = @_;
- ' ' x $self->{MPI_Level};
-}
-
-=back
-
-=cut
-
-1;
-__END__
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $
-
-
-
-
-
-
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Tools.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Tools.pm
deleted file mode 100644
index f7d9894..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Tools.pm
+++ /dev/null
@@ -1,2002 +0,0 @@
-package MIME::Tools;
-
-#------------------------------
-# Because the POD documenation is pretty extensive, it follows
-# the __END__ statement below...
-#------------------------------
-
-use strict;
-use vars (qw(@ISA %CONFIG @EXPORT_OK %EXPORT_TAGS $VERSION $ME
- $M_DEBUG $M_WARNING $M_ERROR
- $Tmpopen ));
-
-require Exporter;
-use FileHandle;
-use Carp;
-use Benchmark;
-
-$ME = "MIME-tools";
-
-@ISA = qw(Exporter);
-
-# Exporting (importing should only be done by modules in this toolkit!):
-%EXPORT_TAGS = (
- 'config' => [qw(%CONFIG)],
- 'msgs' => [qw(usage debug whine error)],
- 'msgtypes'=> [qw($M_DEBUG $M_WARNING $M_ERROR)],
- 'utils' => [qw(benchmark catfile shellquote textual_type tmpopen )],
- );
-Exporter::export_ok_tags('config', 'msgs', 'msgtypes', 'utils');
-
-# The TOOLKIT version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-# Configuration (do NOT alter this directly)...
-# All legal CONFIG vars *must* be in here, even if only to be set to undef:
-%CONFIG =
- (
- DEBUGGING => 0,
- QUIET => 1,
- );
-
-# Message-logging constants:
-$M_DEBUG = 'debug';
-$M_WARNING = 'warning';
-$M_ERROR = 'error';
-
-
-
-#------------------------------
-#
-# CONFIGURATION... (see below)
-#
-#------------------------------
-
-sub config {
- my $class = shift;
- usage("config() is obsolete");
-
- # No args? Just return list:
- @_ or return keys %CONFIG;
- my $method = lc(shift);
- return $class->$method(@_);
-}
-
-sub debugging {
- my ($class, $value) = @_;
- $CONFIG{'DEBUGGING'} = $value if (@_ > 1);
- $CONFIG{'DEBUGGING'};
-}
-
-sub quiet {
- my ($class, $value) = @_;
- $CONFIG{'QUIET'} = $value if (@_ > 1);
- $CONFIG{'QUIET'};
-}
-
-sub version {
- my ($class, $value) = @_;
- $VERSION;
-}
-
-
-
-#------------------------------
-#
-# MESSAGES...
-#
-#------------------------------
-
-#------------------------------
-#
-# debug MESSAGE...
-#
-# Function, private.
-# Output a debug message.
-#
-sub debug {
- print STDERR "$ME: $M_DEBUG: ", @_, "\n" if $CONFIG{DEBUGGING};
-}
-
-#------------------------------
-#
-# whine MESSAGE...
-#
-# Function, private.
-# Something doesn't look right: issue a warning.
-# Only output if $^W (-w) is true, and we're not being QUIET.
-#
-sub whine {
- my $msg = "$ME: $M_WARNING: ".join('', @_)."\n";
- warn $msg if ($^W && !$CONFIG{QUIET});
- return (wantarray ? () : undef);
-}
-
-#------------------------------
-#
-# error MESSAGE...
-#
-# Function, private.
-# Something failed, but not so badly that we want to throw an
-# exception. Just report our general unhappiness.
-# Only output if $^W (-w) is true, and we're not being QUIET.
-#
-sub error {
- my $msg = "$ME: $M_ERROR: ".join('', @_)."\n";
- warn $msg if ($^W && !$CONFIG{QUIET});
- return (wantarray ? () : undef);
-}
-
-#------------------------------
-#
-# usage MESSAGE...
-#
-# Register unhappiness about usage.
-#
-sub usage {
- my ( $p, $f, $l, $s) = caller(1);
- my ($cp, $cf, $cl, $cs) = caller(2);
- my $msg = join('', (($s =~ /::/) ? "$s() " : "${p}::$s() "), @_, "\n");
- my $loc = ($cf ? "\tin code called from $cf l.$cl" : '');
-
- warn "$msg$loc\n" if ($^W && !$CONFIG{QUIET});
- return (wantarray ? () : undef);
-}
-
-
-
-#------------------------------
-#
-# UTILS...
-#
-#------------------------------
-
-#------------------------------
-#
-# benchmark CODE
-#
-# Private benchmarking utility.
-#
-sub benchmark(&) {
- my ($code) = @_;
- if (1) {
- my $t0 = new Benchmark;
- &$code;
- my $t1 = new Benchmark;
- return timestr(timediff($t1, $t0));
- }
- else {
- &$code;
- return "";
- }
-}
-
-#------------------------------
-#
-# catfile DIR, FILE
-#
-# Directory/file concatenation.
-#
-sub catfile {
- my ($parent, $child) = @_;
- if ($^O eq 'Mac') {
- $parent =~ s{:\Z}{};
- return "$parent:$child";
- }
- else {
- $parent =~ s{/\Z}{};
- return "$parent/$child";
- }
-}
-
-#------------------------------
-#
-# shellquote STRING
-#
-# Private utility: make string safe for shell.
-#
-sub shellquote {
- my $str = shift;
- $str =~ s/\$/\\\$/g;
- $str =~ s/\`/\\`/g;
- $str =~ s/\"/\\"/g;
- return "\"$str\""; # wrap in double-quotes
-}
-
-#------------------------------
-#
-# textual_type MIMETYPE
-#
-# Function. Does the given MIME type indicate a textlike document?
-#
-sub textual_type {
- ($_[0] =~ m{^(text|message)(/|\Z)}i);
-}
-
-#------------------------------
-#
-# tmpopen
-#
-#
-sub tmpopen {
- &$Tmpopen();
-}
-
-$Tmpopen = sub { IO::File->new_tmpfile; };
-
-
-
-
-
-#------------------------------
-1;
-package MIME::ToolUtils;
-@MIME::ToolUtils::ISA = qw(MIME::Tools);
-__END__
-
-
-=head1 NAME
-
-MIME-tools - modules for parsing (and creating!) MIME entities
-
-
-=head1 SYNOPSIS
-
-Here's some pretty basic code for B<parsing a MIME message,> and outputting
-its decoded components to a given directory:
-
- use MIME::Parser;
-
- ### Create parser, and set some parsing options:
- my $parser = new MIME::Parser;
- $parser->output_under("$ENV{HOME}/mimemail");
-
- ### Parse input:
- $entity = $parser->parse(\*STDIN) or die "parse failed\n";
-
- ### Take a look at the top-level entity (and any parts it has):
- $entity->dump_skeleton;
-
-
-Here's some code which B<composes and sends a MIME message> containing
-three parts: a text file, an attached GIF, and some more text:
-
- use MIME::Entity;
-
- ### Create the top-level, and set up the mail headers:
- $top = MIME::Entity->build(Type =>"multipart/mixed",
- From => "me\(a)myhost.com",
- To => "you\(a)yourhost.com",
- Subject => "Hello, nurse!");
-
- ### Part #1: a simple text document:
- $top->attach(Path=>"./testin/short.txt");
-
- ### Part #2: a GIF file:
- $top->attach(Path => "./docs/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64");
-
- ### Part #3: some literal text:
- $top->attach(Data=>$message);
-
- ### Send it:
- open MAIL, "| /usr/lib/sendmail -t -oi -oem" or die "open: $!";
- $top->print(\*MAIL);
- close MAIL;
-
-
-For more examples, look at the scripts in the B<examples> directory
-of the MIME-tools distribution.
-
-
-
-=head1 DESCRIPTION
-
-MIME-tools is a collection of Perl5 MIME:: modules for parsing, decoding,
-I<and generating> single- or multipart (even nested multipart) MIME
-messages. (Yes, kids, that means you can send messages with attached
-GIF files).
-
-
-=head1 REQUIREMENTS
-
-You will need the following installed on your system:
-
- File::Path
- File::Spec
- IPC::Open2 (optional)
- IO::Scalar, ... from the IO-stringy distribution
- MIME::Base64
- MIME::QuotedPrint
- Net::SMTP
- Mail::Internet, ... from the MailTools distribution.
-
-See the Makefile.PL in your distribution for the most-comprehensive
-list of prerequisite modules and their version numbers.
-
-
-=head1 A QUICK TOUR
-
-=head2 Overview of the classes
-
-Here are the classes you'll generally be dealing with directly:
-
-
- (START HERE) results() .-----------------.
- \ .-------->| MIME:: |
- .-----------. / | Parser::Results |
- | MIME:: |--' `-----------------'
- | Parser |--. .-----------------.
- `-----------' \ filer() | MIME:: |
- | parse() `-------->| Parser::Filer |
- | gives you `-----------------'
- | a... | output_path()
- | | determines
- | | path() of...
- | head() .--------. |
- | returns... | MIME:: | get() |
- V .-------->| Head | etc... |
- .--------./ `--------' |
- .---> | MIME:: | |
- `-----| Entity | .--------. |
- parts() `--------'\ | MIME:: | /
- returns `-------->| Body |<---------'
- sub-entities bodyhandle() `--------'
- (if any) returns... | open()
- | returns...
- |
- V
- .--------. read()
- | IO:: | getline()
- | Handle | print()
- `--------' etc...
-
-
-To illustrate, parsing works this way:
-
-=over 4
-
-=item *
-
-B<The "parser" parses the MIME stream.>
-A parser is an instance of C<MIME::Parser>.
-You hand it an input stream (like a filehandle) to parse a message from:
-if the parse is successful, the result is an "entity".
-
-=item *
-
-B<A parsed message is represented by an "entity".>
-An entity is an instance of C<MIME::Entity> (a subclass of C<Mail::Internet>).
-If the message had "parts" (e.g., attachments), then those parts
-are "entities" as well, contained inside the top-level entity.
-Each entity has a "head" and a "body".
-
-=item *
-
-B<The entity's "head" contains information about the message.>
-A "head" is an instance of C<MIME::Head> (a subclass of C<Mail::Header>).
-It contains information from the message header: content type,
-sender, subject line, etc.
-
-=item *
-
-B<The entity's "body" knows where the message data is.>
-You can ask to "open" this data source for I<reading> or I<writing>,
-and you will get back an "I/O handle".
-
-=item *
-
-B<You can open() a "body" and get an "I/O handle" to read/write message data.>
-This handle is an object that is basically like an IO::Handle or
-a FileHandle... it can be any class, so long as it supports a small,
-standard set of methods for reading from or writing to the underlying
-data source.
-
-=back
-
-A typical multipart message containing two parts -- a textual greeting
-and an "attached" GIF file -- would be a tree of MIME::Entity objects,
-each of which would have its own MIME::Head. Like this:
-
- .--------.
- | MIME:: | Content-type: multipart/mixed
- | Entity | Subject: Happy Samhaine!
- `--------'
- |
- `----.
- parts |
- | .--------.
- |---| MIME:: | Content-type: text/plain; charset=us-ascii
- | | Entity | Content-transfer-encoding: 7bit
- | `--------'
- | .--------.
- |---| MIME:: | Content-type: image/gif
- | Entity | Content-transfer-encoding: base64
- `--------' Content-disposition: inline;
- filename="hs.gif"
-
-
-
-=head2 Parsing messages
-
-You usually start by creating an instance of B<MIME::Parser>
-and setting up certain parsing parameters: what directory to save
-extracted files to, how to name the files, etc.
-
-You then give that instance a readable filehandle on which waits a
-MIME message. If all goes well, you will get back a B<MIME::Entity>
-object (a subclass of B<Mail::Internet>), which consists of...
-
-=over 4
-
-=item *
-
-A B<MIME::Head> (a subclass of B<Mail::Header>) which holds the MIME
-header data.
-
-=item *
-
-A B<MIME::Body>, which is a object that knows where the body data is.
-You ask this object to "open" itself for reading, and it
-will hand you back an "I/O handle" for reading the data: this is
-a FileHandle-like object, and could be of any class, so long as it
-conforms to a subset of the B<IO::Handle> interface.
-
-=back
-
-If the original message was a multipart document, the MIME::Entity
-object will have a non-empty list of "parts", each of which is in
-turn a MIME::Entity (which might also be a multipart entity, etc,
-etc...).
-
-Internally, the parser (in MIME::Parser) asks for instances
-of B<MIME::Decoder> whenever it needs to decode an encoded file.
-MIME::Decoder has a mapping from supported encodings (e.g., 'base64')
-to classes whose instances can decode them. You can add to this mapping
-to try out new/experiment encodings. You can also use
-MIME::Decoder by itself.
-
-
-=head2 Composing messages
-
-All message composition is done via the B<MIME::Entity> class.
-For single-part messages, you can use the B<MIME::Entity/build>
-constructor to create MIME entities very easily.
-
-For multipart messages, you can start by creating a top-level
-C<multipart> entity with B<MIME::Entity::build()>, and then use
-the similar B<MIME::Entity::attach()> method to attach parts to
-that message. I<Please note:> what most people think of as
-"a text message with an attached GIF file" is I<really> a multipart
-message with 2 parts: the first being the text message, and the
-second being the GIF file.
-
-When building MIME a entity, you'll have to provide two very important
-pieces of information: the I<content type> and the
-I<content transfer encoding>. The type is usually easy, as it is directly
-determined by the file format; e.g., an HTML file is C<text/html>.
-The encoding, however, is trickier... for example, some HTML files are
-C<7bit>-compliant, but others might have very long lines and would need to be
-sent C<quoted-printable> for reliability.
-
-See the section on encoding/decoding for more details, as well as
-L<"A MIME PRIMER">.
-
-
-=head2 Sending email
-
-Since MIME::Entity inherits directly from Mail::Internet,
-you can use the normal Mail::Internet mechanisms to send
-email. For example,
-
- $entity->smtpsend;
-
-
-
-=head2 Encoding/decoding support
-
-The B<MIME::Decoder> class can be used to I<encode> as well; this is done
-when printing MIME entities. All the standard encodings are supported
-(see L<"A MIME PRIMER"> for details):
-
- Encoding: | Normally used when message contents are:
- -------------------------------------------------------------------
- 7bit | 7-bit data with under 1000 chars/line, or multipart.
- 8bit | 8-bit data with under 1000 chars/line.
- binary | 8-bit data with some long lines (or no line breaks).
- quoted-printable | Text files with some 8-bit chars (e.g., Latin-1 text).
- base64 | Binary files.
-
-Which encoding you choose for a given document depends largely on
-(1) what you know about the document's contents (text vs binary), and
-(2) whether you need the resulting message to have a reliable encoding
-for 7-bit Internet email transport.
-
-In general, only C<quoted-printable> and C<base64> guarantee reliable
-transport of all data; the other three "no-encoding" encodings simply
-pass the data through, and are only reliable if that data is 7bit ASCII
-with under 1000 characters per line, and has no conflicts with the
-multipart boundaries.
-
-I've considered making it so that the content-type and encoding
-can be automatically inferred from the file's path, but that seems
-to be asking for trouble... or at least, for Mail::Cap...
-
-
-
-=head2 Message-logging
-
-MIME-tools is a large and complex toolkit which tries to deal with
-a wide variety of external input. It's sometimes helpful to see
-what's really going on behind the scenes.
-There are several kinds of messages logged by the toolkit itself:
-
-=over 4
-
-=item Debug messages
-
-These are printed directly to the STDERR, with a prefix of
-C<"MIME-tools: debug">.
-
-Debug message are only logged if you have turned
-L</debugging> on in the MIME::Tools configuration.
-
-
-=item Warning messages
-
-These are logged by the standard Perl warn() mechanism
-to indicate an unusual situation.
-They all have a prefix of C<"MIME-tools: warning">.
-
-Warning messages are only logged if C<$^W> is set true
-and MIME::Tools is not configured to be L</quiet>.
-
-
-=item Error messages
-
-These are logged by the standard Perl warn() mechanism
-to indicate that something actually failed.
-They all have a prefix of C<"MIME-tools: error">.
-
-Error messages are only logged if C<$^W> is set true
-and MIME::Tools is not configured to be L</quiet>.
-
-
-=item Usage messages
-
-Unlike "typical" warnings above, which warn about problems processing
-data, usage-warnings are for alerting developers of deprecated methods
-and suspicious invocations.
-
-Usage messages are currently only logged if C<$^W> is set true
-and MIME::Tools is not configured to be L</quiet>.
-
-=back
-
-When a MIME::Parser (or one of its internal helper classes)
-wants to report a message, it generally does so by recording
-the message to the B<MIME::Parser::Results> object
-immediately before invoking the appropriate function above.
-That means each parsing run has its own trace-log which
-can be examined for problems.
-
-
-=head2 Configuring the toolkit
-
-If you want to tweak the way this toolkit works (for example, to
-turn on debugging), use the routines in the B<MIME::Tools> module.
-
-=over
-
-=item debugging
-
-Turn debugging on or off.
-Default is false (off).
-
- MIME::Tools->debugging(1);
-
-
-=item quiet
-
-Turn the reporting of warning/error messages on or off.
-Default is true, meaning that these message are silenced.
-
- MIME::Tools->quiet(1);
-
-
-=item version
-
-Return the toolkit version.
-
- print MIME::Tools->version, "\n";
-
-=back
-
-
-
-
-
-
-
-
-=head1 THINGS YOU SHOULD DO
-
-
-=head2 Take a look at the examples
-
-The MIME-Tools distribution comes with an "examples" directory.
-The scripts in there are basically just tossed-together, but
-they'll give you some ideas of how to use the parser.
-
-
-=head2 Run with warnings enabled
-
-I<Always> run your Perl script with C<-w>.
-If you see a warning about a deprecated method, change your
-code ASAP. This will ease upgrades tremendously.
-
-
-=head2 Avoid non-standard encodings
-
-Don't try to MIME-encode using the non-standard MIME encodings.
-It's just not a good practice if you want people to be able to
-read your messages.
-
-
-=head2 Plan for thrown exceptions
-
-For example, if your mail-handling code absolutely must not die,
-then perform mail parsing like this:
-
- $entity = eval { $parser->parse(\*INPUT) };
-
-Parsing is a complex process, and some components may throw exceptions
-if seriously-bad things happen. Since "seriously-bad" is in the
-eye of the beholder, you're better off I<catching> possible exceptions
-instead of asking me to propagate C<undef> up the stack. Use of exceptions in
-reusable modules is one of those religious issues we're never all
-going to agree upon; thankfully, that's what C<eval{}> is good for.
-
-
-=head2 Check the parser results for warnings/errors
-
-As of 5.3xx, the parser tries extremely hard to give you a
-MIME::Entity. If there were any problems, it logs warnings/errors
-to the underlying "results" object (see L<MIME::Parser::Results>).
-Look at that object after each parse.
-Print out the warnings and errors, I<especially> if messages don't
-parse the way you thought they would.
-
-
-=head2 Don't plan on printing exactly what you parsed!
-
-I<Parsing is a (slightly) lossy operation.>
-Because of things like ambiguities in base64-encoding, the following
-is I<not> going to spit out its input unchanged in all cases:
-
- $entity = $parser->parse(\*STDIN);
- $entity->print(\*STDOUT);
-
-If you're using MIME::Tools to process email, remember to save
-the data you parse if you want to send it on unchanged.
-This is vital for things like PGP-signed email.
-
-
-=head2 Understand how international characters are represented
-
-The MIME standard allows for text strings in headers to contain
-characters from any character set, by using special sequences
-which look like this:
-
- =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?=
-
-To be consistent with the existing Mail::Field classes, MIME::Tools
-does I<not> automatically unencode these strings, since doing so would
-lose the character-set information and interfere with the parsing
-of fields (see L<MIME::Parser/decode_headers> for a full explanation).
-That means you should be prepared to deal with these encoded strings.
-
-The most common question then is, B<how do I decode these encoded strings?>
-The answer depends on what you want to decode them I<to>:
-ASCII, Latin1, UTF-8, etc. Be aware that your "target" representation
-may not support all possible character sets you might encounter;
-for example, Latin1 (ISO-8859-1) has no way of representing Big5
-(Chinese) characters. A common practice is to represent "untranslateable"
-characters as "?"s, or to ignore them completely.
-
-To unencode the strings into some of the more-popular Western byte
-representations (e.g., Latin1, Latin2, etc.), you can use the decoders
-in MIME::WordDecoder (see L<MIME::WordDecoder>).
-The simplest way is by using C<unmime()>, a function wrapped
-around your "default" decoder, as follows:
-
- use MIME::WordDecoder;
- ...
- $subject = unmime $entity->head->get('subject');
-
-One place this I<is> done automatically is in extracting the recommended
-filename for a part while parsing. That's why you should start by
-setting up the best "default" decoder if the default target of Latin1
-isn't to your liking.
-
-
-
-=head1 THINGS I DO THAT YOU SHOULD KNOW ABOUT
-
-
-=head2 Fuzzing of CRLF and newline on input
-
-RFC-1521 dictates that MIME streams have lines terminated by CRLF
-(C<"\r\n">). However, it is extremely likely that folks will want to
-parse MIME streams where each line ends in the local newline
-character C<"\n"> instead.
-
-An attempt has been made to allow the parser to handle both CRLF
-and newline-terminated input.
-
-
-=head2 Fuzzing of CRLF and newline when decoding
-
-The C<"7bit"> and C<"8bit"> decoders will decode both
-a C<"\n"> and a C<"\r\n"> end-of-line sequence into a C<"\n">.
-
-The C<"binary"> decoder (default if no encoding specified)
-still outputs stuff verbatim... so a MIME message with CRLFs
-and no explicit encoding will be output as a text file
-that, on many systems, will have an annoying ^M at the end of
-each line... I<but this is as it should be>.
-
-
-=head2 Fuzzing of CRLF and newline when encoding/composing
-
-All encoders currently output the end-of-line sequence as a C<"\n">,
-with the assumption that the local mail agent will perform
-the conversion from newline to CRLF when sending the mail.
-However, there probably should be an option to output CRLF as per RFC-1521.
-
-
-=head2 Inability to handle multipart boundaries with embedded newlines
-
-Let's get something straight: this is an evil, EVIL practice.
-If your mailer creates multipart boundary strings that contain
-newlines, give it two weeks notice and find another one. If your
-mail robot receives MIME mail like this, regard it as syntactically
-incorrect, which it is.
-
-
-=head2 Ignoring non-header headers
-
-People like to hand the parser raw messages straight from
-POP3 or from a mailbox. There is often predictable non-header
-information in front of the real headers; e.g., the initial
-"From" line in the following message:
-
- From - Wed Mar 22 02:13:18 2000
- Return-Path: <eryq(a)zeegee.com>
- Subject: Hello
-
-The parser simply ignores such stuff quietly. Perhaps it
-shouldn't, but most people seem to want that behavior.
-
-
-=head2 Fuzzing of empty multipart preambles
-
-Please note that there is currently an ambiguity in the way
-preambles are parsed in. The following message fragments I<both>
-are regarded as having an empty preamble (where C<\n> indicates a
-newline character):
-
- Content-type: multipart/mixed; boundary="xyz"\n
- Subject: This message (#1) has an empty preamble\n
- \n
- --xyz\n
- ...
-
- Content-type: multipart/mixed; boundary="xyz"\n
- Subject: This message (#2) also has an empty preamble\n
- \n
- \n
- --xyz\n
- ...
-
-In both cases, the I<first> completely-empty line (after the "Subject")
-marks the end of the header.
-
-But we should clearly ignore the I<second> empty line in message #2,
-since it fills the role of I<"the newline which is only there to make
-sure that the boundary is at the beginning of a line">.
-Such newlines are I<never> part of the content preceding the boundary;
-thus, there is no preamble "content" in message #2.
-
-However, it seems clear that message #1 I<also> has no preamble
-"content", and is in fact merely a compact representation of an
-empty preamble.
-
-
-=head2 Use of a temp file during parsing
-
-I<Why not do everything in core?>
-Although the amount of core available on even a modest home
-system continues to grow, the size of attachments continues
-to grow with it. I wanted to make sure that even users with small
-systems could deal with decoding multi-megabyte sounds and movie files.
-That means not being core-bound.
-
-As of the released 5.3xx, MIME::Parser gets by with only
-one temp file open per parser. This temp file provides
-a sort of infinite scratch space for dealing with the current
-message part. It's fast and lightweight, but you should know
-about it anyway.
-
-
-=head2 Why do I assume that MIME objects are email objects?
-
-Achim Bohnet once pointed out that MIME headers do nothing more than
-store a collection of attributes, and thus could be represented as
-objects which don't inherit from Mail::Header.
-
-I agree in principle, but RFC-1521 says otherwise.
-RFC-1521 [MIME] headers are a syntactic subset of RFC-822 [email] headers.
-Perhaps a better name for these modules would have been RFC1521::
-instead of MIME::, but we're a little beyond that stage now.
-
-When I originally wrote these modules for the CPAN, I agonized for a long
-time about whether or not they really should subclass from B<Mail::Internet>
-(then at version 1.17). Thanks to Graham Barr, who graciously evolved
-MailTools 1.06 to be more MIME-friendly, unification was achieved
-at MIME-tools release 2.0.
-The benefits in reuse alone have been substantial.
-
-
-
-
-=head1 A MIME PRIMER
-
-So you need to parse (or create) MIME, but you're not quite up on
-the specifics? No problem...
-
-
-
-=head2 Glossary
-
-Here are some definitions adapted from RFC-1521 explaining the terminology
-we use; each is accompanied by the equivalent in MIME:: module terms...
-
-=over 4
-
-=item attachment
-
-An "attachment" is common slang for any part of a multipart message --
-except, perhaps, for the first part, which normally carries a user
-message describing the attachments that follow (e.g.: "Hey dude, here's
-that GIF file I promised you.").
-
-In our system, an attachment is just a B<MIME::Entity> under the
-top-level entity, probably one of its L<parts|MIME::Entity/parts>.
-
-=item body
-
-The "body" of an L<entity|/entity> is that portion of the entity
-which follows the L<header|/header> and which contains the real message
-content. For example, if your MIME message has a GIF file attachment,
-then the body of that attachment is the base64-encoded GIF file itself.
-
-A body is represented by an instance of B<MIME::Body>. You get the
-body of an entity by sending it a L<bodyhandle()|MIME::Entity/bodyhandle>
-message.
-
-=item body part
-
-One of the parts of the body of a multipart B</entity>.
-A body part has a B</header> and a B</body>, so it makes sense to
-speak about the body of a body part.
-
-Since a body part is just a kind of entity, it's represented by
-an instance of B<MIME::Entity>.
-
-=item entity
-
-An "entity" means either a B</message> or a B</body part>.
-All entities have a B</header> and a B</body>.
-
-An entity is represented by an instance of B<MIME::Entity>.
-There are instance methods for recovering the
-L<header|MIME::Entity/head> (a B<MIME::Head>) and the
-L<body|MIME::Entity/bodyhandle> (a B<MIME::Body>).
-
-=item header
-
-This is the top portion of the MIME message, which contains the
-"Content-type", "Content-transfer-encoding", etc. Every MIME entity has
-a header, represented by an instance of B<MIME::Head>. You get the
-header of an entity by sending it a head() message.
-
-=item message
-
-A "message" generally means the complete (or "top-level") message being
-transferred on a network.
-
-There currently is no explicit package for "messages"; under MIME::,
-messages are streams of data which may be read in from files or
-filehandles. You can think of the B<MIME::Entity> returned by the
-B<MIME::Parser> as representing the full message.
-
-
-=back
-
-
-=head2 Content types
-
-This indicates what kind of data is in the MIME message, usually
-as I<majortype/minortype>. The standard major types are shown below.
-A more-comprehensive listing may be found in RFC-2046.
-
-=over 4
-
-=item application
-
-Data which does not fit in any of the other categories, particularly
-data to be processed by some type of application program.
-C<application/octet-stream>, C<application/gzip>, C<application/postscript>...
-
-=item audio
-
-Audio data.
-C<audio/basic>...
-
-=item image
-
-Graphics data.
-C<image/gif>, C<image/jpeg>...
-
-=item message
-
-A message, usually another mail or MIME message.
-C<message/rfc822>...
-
-=item multipart
-
-A message containing other messages.
-C<multipart/mixed>, C<multipart/alternative>...
-
-=item text
-
-Textual data, meant for humans to read.
-C<text/plain>, C<text/html>...
-
-=item video
-
-Video or video+audio data.
-C<video/mpeg>...
-
-=back
-
-
-=head2 Content transfer encodings
-
-This is how the message body is packaged up for safe transit.
-There are the 5 major MIME encodings.
-A more-comprehensive listing may be found in RFC-2045.
-
-=over 4
-
-=item 7bit
-
-No encoding is done at all. This label simply asserts that no
-8-bit characters are present, and that lines do not exceed 1000 characters
-in length (including the CRLF).
-
-=item 8bit
-
-No encoding is done at all. This label simply asserts that the message
-might contain 8-bit characters, and that lines do not exceed 1000 characters
-in length (including the CRLF).
-
-=item binary
-
-No encoding is done at all. This label simply asserts that the message
-might contain 8-bit characters, and that lines may exceed 1000 characters
-in length. Such messages are the I<least> likely to get through mail
-gateways.
-
-=item base64
-
-A standard encoding, which maps arbitrary binary data to the 7bit domain.
-Like "uuencode", but very well-defined. This is how you should send
-essentially binary information (tar files, GIFs, JPEGs, etc.).
-
-=item quoted-printable
-
-A standard encoding, which maps arbitrary line-oriented data to the
-7bit domain. Useful for encoding messages which are textual in
-nature, yet which contain non-ASCII characters (e.g., Latin-1,
-Latin-2, or any other 8-bit alphabet).
-
-=back
-
-
-
-
-=head1 TERMS AND CONDITIONS
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-Copyright (c) 1998, 1999 by ZeeGee Software Inc (www.zeegee.com).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-See the COPYING file in the distribution for details.
-
-
-
-=head1 SUPPORT
-
-Please email me directly with questions/problems (see AUTHOR below).
-
-If you want to be placed on an email distribution list (not a mailing list!)
-for MIME-tools, and receive bug reports, patches, and updates as to when new
-MIME-tools releases are planned, just email me and say so. If your project
-is using MIME-tools, it might not be a bad idea to find out about those
-bugs I<before> they become problems...
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $
-
-
-=head1 CHANGE LOG
-
-=over 4
-
-=item Version 5.410 (2000/11/23)
-
-B<Better detection of evil filenames.>
-Now we check for filenames which are suspiciously long,
-and a new MIME::Filer::exorcise_filename() method is used
-to try and remove the evil.
-I<Thanks to Jason Haar for the suggestion.>
-
-
-=item Version 5.409 (2000/11/12)
-
-B<Added functionality to MIME::WordDecoder,>
-including support for plain US-ASCII.
-
-B<MIME::Tools::tmpopen()> made more flexible.
-You can now override the tmpfile-opening behavior.
-
-
-=item Version 5.408 (2000/11/10)
-
-B<Added new Beta unmime() mechanism.>
-See L<MIME::WordDecoder> for full details.
-Also see L<"Understand how international characters are represented">.
-
-
-=item Version 5.405 (2000/11/05)
-
-B<Added a purge() that does what people want it to.>
-Now, when a parse finishes and you want to delete everything that
-was created by it, you can invoke C<purge()> on the parser's filer.
-All files/directories created during the last parse should vanish.
-I<Thanks to everyone who complained about MIME::Entity::purge.>
-
-
-=item Version 5.404 (2000/11/04)
-
-B<Added new automatic MIME-decoding of attachment filenames with
-encoded (non-ASCII) characters.>
-Hopefully this will do more good than harm.
-The use of MIME::Parser::decode_headers() and MIME::Head::decode()
-has been deprecated in favor of the new MIME::Words "unmime" mechanism.
-Please see L<MIME::Words/unmime>.
-
-B<Added tolerance for unquoted =?...?= in param values.>
-This is in violation of the RFCs, but then, so are some MUAs.
-I<Thanks to desti for bringing this to my attention.>
-
-B<Fixed supposedly-bad B-encoding.>
-I<Thanks to Otto Frost for bringing this to my attention.>
-
-
-=item Version 5.316 (2000/09/21)
-
-B<Increased tolerance in MIME::Parser.>
-Now will ignore bogus POP3 "+OK" line before header, as well as bogus
-mailbox "From " line (both with warnings).
-I<Thanks to Antony OSullivan (ajos1) for suggesting this feature.>
-
-B<Fixed small epilogue-related bug in MIME::Entity::print_body().>
-Now it only outputs a final newline if the epilogue does not end
-in one already. Support for checking the preamble/epilogue in
-regression tests was also added.
-I<Thanks to Lars Hecking for bringing this issue up.>
-
-B<Updated documentation.>
-All module manual pages should now direct readers to the main
-MIME-tools manual page.
-
-
-=item Version 5.314 (2000/09/06)
-
-Fixed Makefile.PL to have less-restrictive requirement
-for File::Spec (0.6).
-
-
-=item Version 5.313 (2000/09/05)
-
-B<Fixed nasty bug with evil filenames.>
-Certain evil filenames were getting replaced by internally-generated
-filenames which were just as evil... ouch! If your parser occasionally
-throws a fatal exception with a "write-open" error message, then
-you have this bug.
-I<Thanks to Julian Field and Antony OSullivan (ajos1)
-for delivering the evidence!>
-
- Beware the doctor
- who cures seasonal head cold
- by killing patient
-
-B<Improved naming of extracted files.>
-If a filename is regarded as evil, we guess that it might just
-be because of part information, and attempt to find and use the
-final path element.
-
-B<Simplified message logging and made it more consistent.>
-For details, see L<"Message-logging">.
-
-
-=item Version 5.312 (2000/09/03)
-
-B<Fixed a Perl 5.7 select() incompatibility>
-which caused "make test" to fail.
-I<Thanks to Nick Ing-Simmons for the patch.>
-
-
-=item Version 5.311 (2000/08/16)
-
-B<Blind fix for Win32 uudecoding bug.>
-A missing binmode seems to be the culprit here; let's see if this fixes it.
-I<Thanks to ajos1 for finding the culprit!>
-
- The carriage return
- thumbs its nose at me, laughing:
- DOS I/O *still* sucks
-
-
-=item Version 5.310 (2000/08/15)
-
-B<Fixed a bug in the back-compat output_prefix() method of MIME::Parser.>
-Basically, output prefixes were not being set through this mechanism.
-I<Thanks to ajos1 for the alert.>
-
- shift @_, ### "shift at-underscore"
- or @_ will have
- bogus "self" object
-
-B<Added some backcompat methods,> like parse_FH().
-I<Thanks (and apologies) to Alain Kotoujansky.>
-
-B<Added filenames-with-spaces support to MIME::Decoder::UU.>
-I<Thanks to Richard Pun for the suggestion.>
-
-
-=item Version 5.305 (2000/07/20)
-
-B<Added MIME::Entity::parts_DFS> as convenient way to "get all parts".
-I<Thanks to Xavier Armengou for suggesting this method.>
-
-Removed the Alpha notice.
-Still a few features to tweak, but those will be minor.
-
-
-=item Version 5.303 (2000/07/07)
-
-B<Fixed output bugs in new Filers>.
-Scads of them: bad handling of filename collisions, bad implementation
-of output_under(), bad linking to results, POD errors, you name it.
-If this had gone to CPAN, I'd have issued a factory recall. C<:-(>
-
- Errors, like beetles,
- Multiply ferociously
- In the small hours
-
-
-=item Version 5.301 (2000/07/06)
-
-B<READ ME BEFORE UPGRADING PAST THIS POINT!>
-B<New MIME::Parser::Filer class -- not fully backwards-compatible.>
-In response to demand for more-comprehensive file-output strategies,
-I have decided that the best thing to do is to split all the
-file-output logic (output_path(), evil_filename(), etc.)
-into its own separate class, inheriting from the new
-L<MIME::Parser::Filer|MIME::Parser::Filer> class.
-If you I<override> any of the following in a MIME::Parser subclass,
-you will need to change your code accordingly:
-
- evil_filename
- output_dir
- output_filename
- output_path
- output_prefix
- output_under
-
-My sincere apologies for any inconvenience this will cause, but
-it's ultimately for the best, and is quite likely the last structural
-change to 5.x.
-I<Thanks to Tyson Ackland for all the ideas.>
-Incidentally, the new code also fixes a bug where identically-named
-files in the same message could clobber each other.
-
- A message arrives:
- "Here are three files, all named 'Foo'"
- Only one survives. :-(
-
-B<Fixed bug in MIME::Words header decoding.>
-Underscores were not being handled properly.
-I<Thanks to Dominique Unruh and Doru Petrescu,> who independently
-submitted the same fix within 2 hours of each other, after this
-bug has lain dormant for months:
-
- Two users, same bug,
- same patch -- mere hours apart:
- Truly, life is odd.
-
-B<Removed escaping of underscore in regexps.>
-Escaping the underscore (\_) in regexps was sloppy and wrong
-(escaped metacharacters may include anything in \w), and the newest
-Perls warn about it.
-I<Thanks to David Dyck for bringing this to my attention.>
-
- What, then, is a word?
- Some letters, digits, and, yes:
- Underscores as well
-
-B<Added Force option to MIME::Entity's make_multipart>.
-I<Thanks to Bob Glickstein for suggesting this.>
-
-B<Numerous fixlets to example code.>
-I<Thanks to Doru Petrescu for these.>
-
-B<Added REQUIREMENTS section in docs.>
-Long-overdue. I<Thanks to Ingo Schmiegel for motivating this.>
-
-
-=item Version 5.211 (2000/06/24)
-
-B<Fixed auto-uudecode bug.>
-Parser was failing with "part did not end with expected boundary" error
-when uuencoded entity was a I<singlepart> message (ironically,
-uuencoded parts of multiparts worked fine).
-I<Thanks to Michael Mohlere for testing uudecode and finding this.>
-
- The hurrying bee
- Flies far for nectar, missing
- The nearest flowers
-
- Say ten thousand times:
- Complex cases may succeed
- Where simple ones fail
-
-B<Parse errors now generate warnings.>
-Parser errors now cause warn()s to be generated if they are
-not turned into fatal exceptions. This might be a little redundant,
-seeing as they are available in the "results", but parser-warnings
-already cause warn()s. I can always put in a "quiet" switch if
-people complain.
-
-B<Miscellaneous cleanup.>
-Documentation of MIME::Parser improved slightly, and a redundant
-warning was removed.
-
-
-=item Version 5.210 (2000/06/20)
-
-B<Change in "evil" filename.>
-Made MIME::Parser's evil_filename stricter by having it reject
-"path" characters: any of '/' '\' ':' '[' ']'.
-
- Just as with beauty
- The eye of the beholder
- Is where "evil" lives.
-
-B<Documentation fixes.>
-Corrected a number of docs in MIME::Entity which were obsoleted
-in the transition from 4.x to 5.x.
-I<Thanks to Michael Fischer for pointing these out.>
-For this one, a special 5-5-5-5 Haiku of anagrams:
-
- Documentation
- in mutant code, O!
- Edit -- no, CUT! [moan]
- I meant to un-doc...
-
-B<IO::Lines usage bug fixed.>
-MIME::Entity was missing a "use IO::Lines", which caused an
-exception when you tried to use the body() method of MIME::Entity.
-I<Thanks to Hideyo Imazu and Michael Fischer for pointing this out.>
-
- Bareword looks fine, but
- Perl cries: "Whoa there... IO::Lines?
- Never heard of it."
-
-
-=item Version 5.209 (2000/06/10)
-
-B<Autodetection of uuencode.>
-You can now tell the parser to hunt for uuencode inside what should
-be text parts.
-See L<extract_uuencode()|MIME::Parser/extract_uuencode> for full details.
-B<Beware:> this is largely untested at the moment.
-I<Special thanks to Michael Mohlere at ADJE Webmail, who was the
- first -- and most-insistent -- user to request this feature.>
-
-B<Faster parsing.>
-Sped up the MIME::Decoder::NBit decoder quite a bit by using a variant
-of the chunking trick I used for MIME::Decoder::Base64. I suspect
-that the same trick (reading a big chunk plus the next line to get a
-big block of lines) would work with MIME::Decoder::QuotedPrint, but I
-don't have the time or resources to check that right now (tested
-contributions would be welcome). NBit encoding is more-conveniently
-done line-by-line for now, because individual line lengths must be
-checked.
-
-B<Better use of core.>
-MIME::Body::InCore is now used when you build() an entity with
-the Data parameter, instead of MIME::Body::Scalar.
-
-B<More documentation> on toolkit configuration.
-
-
-=item Version 5.207 (2000/06/09)
-
-B<Fixed whine() bug in MIME::Parser> where the "warning" method
-whine() was called as a static function instead of invoked as an
-instance method.
-I<Thanks to Todd A. Bradfute for reporting this.>
-
- A simple warning
- Invokes method as function:
- "Warning" makes us die
-
-
-=item Version 5.206 (2000/06/08)
-
-Ahem. Cough cough:
-
- Way too many bugs
- Thus, a self-imposed penance:
- Write haiku for each
-
-B<Fixed bug in MIME::Parser:> the reader was not handling the odd
-(but legal) case where a multipart boundary is followed by linear
-whitespace.
-I<Thanks to Jon Agnew for reporting this with the RFC citation.>
-
- Legal message fails
- And 'round the globe, thousands cry:
- READ THE RFC
-
-Empty preambles are now handled properly by MIME::Entity when
-printing: there is now no space between the header-terminator
-and the initial boundary.
-I<Thanks to "sen_ml" for suggesting this.>
-
- Nature hates vacuum
- But please refrain from tossing
- Newlines in the void
-
-Started using Benchmark for benchmarking.
-
-
-=item Version 5.205 (2000/06/06)
-
-Added terminating newline to all parser messages, and fixed
-small parser bug that was dropping parts when errors occurred
-in certain places.
-
-
-=item Version 5.203 (2000/06/05)
-
-Brand new parser based on new (private) MIME::Parser::Reader and
-(public) MIME::Parser::Results. Fast and yet simple and very tolerant
-of bad MIME when desired. Message reporting needs some muzzling.
-
-MIME::Parser now has ignore_errors() set true by default.
-
-
-=item Version 5.116 (2000/05/26)
-
-Removed Tmpfile.t test, which was causing a bogus failure in
-"make test". Now we require 5.004 for MIME::Parser anyway,
-so we don't need it. I<Thanks to Jonathan Cohn for reporting this.>
-
-
-=item Version 5.115 (2000/05/24)
-
-Fixed Ref.t bug, and documented how to remove parts from a MIME::Entity.
-
-
-=item Version 5.114 (2000/05/23)
-
-Entity now uses MIME::Lite-style default suggested encoding.
-
-More regression test have been added, and the "Size" tests in
-Ref.t are skipped for text document (due to CRLF differences
-between platforms).
-
-
-=item Version 5.113 (2000/05/21)
-
-B<Major speed and structural improvements to the parser.>
- I<Major, MAJOR thanks to Noel Burton-Krahn, Jeremy Gilbert,
- and Doru Petrescu for all the patches, benchmarking,
- and Beta-testing!>
-
-B<Convenient new one-directory-per-message parsing mechanism.>
- Now through C<MIME::Parser> method C<output_under()>,
- you can tell the parser that you want it to create
- a unique directory for each message parsed, to hold the
- resulting parts.
-
-B<Elimination of $', $` and $&.>
- Wow... I still can't believe I missed this. D'OH!
- I<Thanks to Noel Burton-Krahn for all his patches.>
-
-B<Parser is more tolerant of weird EOL termination.>
- Some mailagents are can terminate lines with "\r\r\n".
- We're okay with that now when we extract the header.
- I<Thanks to Joao Fonseca for pointing this out.>
-
-B<Parser is tolerant of "From " lines in headers.>
- I<Thanks to Joachim Wieland, Anthony Hinsinger, Marius Stan,
- and numerous others.>
-
-B<Parser catches syntax errors in headers.>
- I<Thanks to Russell P. Sutherland for catching this.>
-
-B<Parser no longer warns when subtype is undefined.>
- I<Thanks to Eric-Olivier Le Bigot for his fix.>
-
-B<Better integration with Mail::Internet.>
- For example, smtpsend() should work fine.
- I<Thanks to Michael Fischer and others for the patch.>
-
-B<Miscellaneous cleanup.>
- I<Thanks to Marcus Brinkmann for additional helpful input.>
- I<Thanks to Klaus Seidenfaden for good feedback on 5.x Alpha!>
-
-
-
-
-=item Version 4.123 (1999/05/12)
-
-Cleaned up some of the tests for non-Unix OS'es.
-Will require a few iterations, no doubt.
-
-
-=item Version 4.122 (1999/02/09)
-
-B<Resolved CORE::open warnings for 5.005.>
- I<Thanks to several folks for this bug report.>
-
-
-=item Version 4.121 (1998/06/03)
-
-B<Fixed MIME::Words infinite recursion.>
- I<Thanks to several folks for this bug report.>
-
-
-=item Version 4.117 (1998/05/01)
-
-B<Nicer MIME::Entity::build.>
- No longer outputs warnings with undefined Filename, and now
- accepts Charset as well.
- I<Thanks to Jason Tibbits III for the inspirational patch.>
-
-B<Documentation fixes.>
- Hopefully we've seen the last of the pod2man warnings...
-
-B<Better test logging.>
- Now uses ExtUtils::TBone.
-
-
-=item Version 4.116 (1998/02/14)
-
-B<Bug fix:>
- MIME::Head and MIME::Entity were not downcasing the
- content-type as they claimed. This has now been fixed.
- I<Thanks to Rodrigo de Almeida Siqueira for finding this.>
-
-
-=item Version 4.114 (1998/02/12)
-
-B<Gzip64-encoding has been improved, and turned off as a default,>
- since it depends on having gzip installed.
- See MIME::Decoder::Gzip64 if you want to activate it in your app.
- You can now set up the gzip/gunzip commands to use, as well.
- I<Thanks to Paul J. Schinder for finding this bug.>
-
-
-=item Version 4.113 (1998/01/20)
-
-B<Bug fix:>
- MIME::ParserBase was accidentally folding newlines in header fields.
- I<Thanks to Jason L. Tibbitts III for spotting this.>
-
-
-=item Version 4.112 (1998/01/17)
-
-B<MIME::Entity::print_body now recurses> when printing multipart
- entities, and prints "everything following the header." This is more
- likely what people expect to happen. PLEASE read the
- "two body problem" section of MIME::Entity's docs.
-
-
-=item Version 4.111 (1998/01/14)
-
-Clean build/test on Win95 using 5.004. Whew.
-
-
-=item Version 4.110 (1998/01/11)
-
-B<Added> make_multipart() and make_singlepart() in MIME::Entity.
-
-B<Improved> handling/saving of preamble/epilogue.
-
-
-=item Version 4.109 (1998/01/10)
-
-=over 4
-
-=item Overall
-
-B<Major version shift to 4.x>
- accompanies numerous structural changes, and
- the deletion of some long-deprecated code. Many apologies to those
- who are inconvenienced by the upgrade.
-
-B<MIME::IO deprecated.>
- You'll see IO::Scalar, IO::ScalarArray, and IO::Wrap
- to make this toolkit work.
-
-B<MIME::Entity deep code.>
- You can now deep-copy MIME entities (except for on-disk data files).
-
-
-=item Encoding/decoding
-
-B<MIME::Latin1 deprecated, and 8-to-7 mapping removed.>
- Really, MIME::Latin1 was one of my more dumber ideas.
- It's still there, but if you want to map 8-bit characters to
- Latin1 ASCII approximations when 7bit encoding, you'll have to
- request it explicitly. I<But use quoted-printable for your 8-bit
- documents; that's what it's there for!>
-
-B<7bit and 8bit "encoders" no longer encode.>
- As per RFC-2045, these just do a pass-through of the data,
- but they'll warn you if you send bad data through.
-
-B<MIME::Entity suggests encoding.>
- Now you can ask MIME::Entity's build() method to "suggest"
- a legal encoding based on the body and the content-type.
- No more guesswork! See the "mimesend" example.
-
-B<New module structure for MIME::Decoder classes.>
- It should be easier for you to see what's happening.
-
-B<New MIME decoders!>
- Support added for decoding C<x-uuencode>, and for
- decoding/encoding C<x-gzip64>. You'll need "gzip" to make
- the latter work.
-
-B<Quoted-printable back on track... and then some.>
- The 'quoted-printable' decoder now uses the newest MIME::QuotedPrint,
- and amends its output with guideline #8 from RFC2049 (From/.).
- I<Thanks to Denis N. Antonioli for suggesting this.>
-
-=item Parsing
-
-B<Preamble and epilogue are now saved.>
- These are saved in the parsed entities as simple
- string-arrays, and are output by print() if there.
- I<Thanks to Jason L. Tibbitts for suggesting this.>
-
-B<The "multipart/digest" semantics are now preserved.>
- Parts of digest messages have their mime_type() defaulted
- to "message/rfc822" instead of "text/plain", as per the RFC.
- I<Thanks to Carsten Heyl for suggesting this.>
-
-=item Output
-
-B<Well-defined, more-complete print() output.>
- When printing an entity, the output is now well-defined if the
- entity came from a MIME::Parser, even if using parse_nested_messages.
- See MIME::Entity for details.
-
-B<You can prevent recommended filenames from being output.>
- This possible security hole has been plugged; when building MIME
- entities, you can specify a body path but suppress the filename
- in the header.
- I<Thanks to Jason L. Tibbitts for suggesting this.>
-
-=item Bug fixes
-
-B<Win32 installations should work.>
- The binmode() calls should work fine on Win32 now.
- I<Thanks to numerous folks for their patches.>
-
-B<MIME::Head::add()> now no longer downcases its argument.
- I<Thanks to Brandon Browning & Jason L. Tibbitts for finding this bug.>
-
-=back
-
-
-
-
-
-
-=item Version 3.204
-
-B<Bug in MIME::Head::original_text fixed.>
- Well, it took a while, but another bug surfaced from my transition
- from 1.x to 2.x. This method was, quite idiotically, sorting the
- header fields.
- I<Thanks, as usual, to Andreas Koenig for spotting this one.>
-
-B<MIME::ParserBase no longer defaults to RFC-1522-decoding headers.>
- The documentation correctly stated that the default setting was
- to I<not> RFC-1522-decode the headers. The code, on the other hand,
- was init'ing this parser option in the "on" position.
- This has been fixed.
-
-B<MIME::ParserBase::parse_nested_messages reexamined.>
- If you use this feature, please re-read the documentation.
- It explains a little more precisely what the ramifications are.
-
-B<MIME::Entity tries harder to ensure MIME compliance.>
- It is now a fatal error to use certain bad combinations of content
- type and encoding when "building", or to attempt to "attach" to
- anything that is not a multipart document. My apologies if this
- inconveniences anyone, but it was just too darn easy before for folks
- to create bad MIME, and gosh darn it, good libraries should at least
- I<try> to protect you from mistakes.
-
-B<The "make" now halts if you don't have the right stuff,>
- provided your MakeMaker supports PREREQ_PM. See L<"REQUIREMENTS">
- for what you need to install this package. I still provide
- old courtesy copies of the MIME:: decoding modules.
-I<Thanks to Hugo van der Sanden for suggesting this.>
-
-B<The "make test" is far less chatty.>
- Okay, okay, STDERR is evil. Now a C<"make test"> will just give you
- the important stuff: do a C<"make test TEST_VERBOSE=1"> if you want
- the gory details (advisable if sending me a bug report).
-I<Thanks to Andreas Koenig for suggesting this.>
-
-
-=item Version 3.203
-
-B<No, there haven't been any major changes between 2.x and 3.x.>
- The major-version increase was from a few more tweaks to get $VERSION
- to be calculated better and more efficiently (I had been using RCS
- version numbers in a way which created problems for users of CPAN::).
- After a couple of false starts, all modules have been upgraded to RCS
- 3.201 or higher.
-
-B<You can now parse a MIME message from a scalar,>
- an array-of-scalars, or any MIME::IO-compliant object (including IO::
- objects.) Take a look at parse_data() in MIME::ParserBase. The
- parser code has been modified to support the MIME::IO interface.
- I<Thanks to fellow Chicagoan Tim Pierce (and countless others)
- for asking.>
-
-B<More sensible toolkit configuration.>
- A new config() method in MIME::ToolUtils makes a lot of toolkit-wide
- configuration cleaner. Your old calls will still work, but with
- deprecation warnings.
-
-B<You can now sign messages> just like in Mail::Internet.
- See MIME::Entity for the interface.
-
-B<You can now remove signatures from messages> just like in Mail::Internet.
- See MIME::Entity for the interface.
-
-B<You can now compute/strip content lengths>
- and other non-standard MIME fields.
- See sync_headers() in MIME::Entity.
- I<Thanks to Tim Pierce for bringing the basic problem to my attention.>
-
-B<Many warnings are now silent unless $^W is true.>
- That means unless you run your Perl with C<-w>, you won't see
- deprecation warnings, non-fatal-error messages, etc.
- But of course you run with C<-w>, so this doesn't affect you. C<:-)>
-
-B<Completed the 7-bit encodings in MIME::Latin1.>
- We hadn't had complete coverage in the conversion from 8- to 7-bit;
- now we do. I<Thanks to Rolf Nelson for bringing this to my attention.>
-
-B<Fixed broken parse_two() in MIME::ParserBase.>
- BTW, if your code worked with the "broken" code, it should I<still>
- work.
- I<Thanks again to Tim Pierce for bringing this to my attention.>
-
-
-=item Version 2.14
-
-Just a few bug fixes to improve compatibility with Mail-Tools 1.08,
-and with the upcoming Perl 5.004 release.
-I<Thanks to Jason L. Tibbitts III for reporting the problems so quickly.>
-
-
-=item Version 2.13
-
-=over 4
-
-=item New features
-
-B<Added RFC-1522-style decoding of encoded header fields.>
- Header decoding can now be done automatically during parsing via the
- new C<decode()> method in MIME::Head... just tell your parser
- object that you want to C<decode_headers()>.
- I<Thanks to Kent Boortz for providing the idea, and the baseline
- RFC-1522-decoding code!>
-
-B<Building MIME messages is even easier.>
- Now, when you use MIME::Entity's C<build()> or C<attach()>,
- you can also supply individual
- mail headers to set (e.g., C<-Subject>, C<-From>, C<-To>).
-
-Added C<Disposition> to MIME::Entity's C<build()> method.
- I<Thanks to Kurt Freytag for suggesting this feature.>
-
-An C<X-Mailer> header is now output
- by default in all MIME-Entity-prepared messages,
- so any bad MIME we generate can be traced back to this toolkit.
-
-Added C<purge()> method to MIME::Entity for deleteing leftover files.
- I<Thanks to Jason L. Tibbitts III for suggesting this feature.>
-
-Added C<seek()> and C<tell()> methods to built-in MIME::IO classes.
- Only guaranteed to work when reading!
- I<Thanks to Jason L. Tibbitts III for suggesting this feature.>
-
-When parsing a multipart message with apparently no boundaries,
- the error message you get has been improved.
- I<Thanks to Andreas Koenig for suggesting this.>
-
-=item Bug fixes
-
-B<Patched over a Perl 5.002 (and maybe earlier and later) bug involving
-FileHandle::new_tmpfile.> It seems that the underlying filehandles
-were not being closed when the FileHandle objects went out of scope!
-There is now an internal routine that creates true FileHandle
-objects for anonymous temp files.
-I<Thanks to Dragomir R. Radev and Zyx for reporting the weird behavior
-that led to the discovery of this bug.>
-
-MIME::Entity's C<build()> method now warns you if you give it an illegal
-boundary string, and substitutes one of its own.
-
-MIME::Entity's C<build()> method now generates safer, fully-RFC-1521-compliant
-boundary strings.
-
-Bug in MIME::Decoder's C<install()> method was fixed.
-I<Thanks to Rolf Nelson and Nickolay Saukh for finding this.>
-
-Changed FileHandle::new_tmpfile to FileHandle->new_tmpfile, so some
-Perl installations will be happier.
-I<Thanks to Larry W. Virden for finding this bug.>
-
-Gave C<=over> an arg of 4 in all PODs.
-I<Thanks to Larry W. Virden for pointing out the problems of bare =over's>
-
-=back
-
-
-=item Version 2.04
-
-B<A bug in MIME::Entity's output method was corrected.>
-MIME::Entity::print now outputs everything to the desired filehandle
-explicitly.
-I<Thanks to Jake Morrison for pointing out the incompatibility
-with Mail::Header.>
-
-
-=item Version 2.03
-
-B<Fixed bug in autogenerated filenames> resulting from transposed "if"
-statement in MIME::Parser, removing spurious printing of header as well.
-(Annoyingly, this bug is invisible if debugging is turned on!)
-I<Thanks to Andreas Koenig for bringing this to my attention.>
-
-Fixed bug in MIME::Entity::body() where it was using the bodyhandle
-completely incorrectly.
-I<Thanks to Joel Noble for bringing this to my attention.>
-
-Fixed MIME::Head::VERSION so CPAN:: is happier.
-I<Thanks to Larry Virden for bringing this to my attention.>
-
-Fixed undefined-variable warnings when dumping skeleton
-(happened when there was no Subject: line)
-I<Thanks to Joel Noble for bringing this to my attention.>
-
-
-=item Version 2.02
-
-B<Stupid, stupid bugs in both BASE64 encoding and decoding were fixed.>
-I<Thanks to Phil Abercrombie for locating them.>
-
-
-=item Version 2.01
-
-B<Modules now inherit from the new Mail:: modules!>
-This means big changes in behavior.
-
-B<MIME::Parser can now store message data in-core.>
-There were a I<lot> of requests for this feature.
-
-B<MIME::Entity can now compose messages.>
-There were a I<lot> of requests for this feature.
-
-Added option to parse C<"message/rfc822"> as a pseduo-multipart document.
-I<Thanks to Andreas Koenig for suggesting this.>
-
-
-
-
-
-=item Version 1.13
-
-MIME::Head now no longer requires space after ":", although
-either a space or a tab after the ":" will be swallowed
-if there.
-I<Thanks to Igor Starovoitov for pointing out this shortcoming.>
-
-=item Version 1.12
-
-Fixed bugs in parser where CRLF-terminated lines were
-blowing out the handling of preambles/epilogues.
-I<Thanks to Russell Sutherland for reporting this bug.>
-
-Fixed idiotic is_multipart() bug.
-I<Thanks to Andreas Koenig for noticing it.>
-
-Added untested binmode() calls to parser for DOS, etc.
-systems. No idea if this will work...
-
-Reorganized the output_path() methods to allow easy use
-of inheritance, as per Achim Bohnet's suggestion.
-
-Changed MIME::Head to report mime_type more accurately.
-
-POSIX module no longer loaded by Parser if perl >= 5.002.
-Hey, 5.001'ers: let me know if this breaks stuff, okay?
-
-Added unsupported ./examples directory.
-
-=item Version 1.11
-
-Converted over to using Makefile.PL.
-I<Thanks to Andreas Koenig for the much-needed kick in the pants...>
-
-Added t/*.t files for testing. Eeeeeeeeeeeh...it's a start.
-
-Fixed bug in default parsing routine for generating
-output paths; it was warning about evil filenames if
-there simply I<were> no recommended filenames. D'oh!
-
-Fixed redefined parts() method in Entity.
-
-Fixed bugs in Head where field name wasn't being case folded.
-
-=item Version 1.10
-
-A typo was causing the epilogue of an inner multipart
-message to be swallowed to the end of the OUTER multipart
-message; this has now been fixed.
-I<Thanks to Igor Starovoitov for reporting this bug.>
-
-A bad regexp for parameter names was causing
-some parameters to be parsed incorrectly; this has also
-been fixed.
-I<Thanks again to Igor Starovoitov for reporting this bug.>
-
-It is now possible to get full control of the filenaming
-algorithm before output files are generated, and the default
-algorithm is safer.
-I<Thanks to Laurent Amon for pointing out the problems, and suggesting
-some solutions.>
-
-Fixed illegal "simple" multipart test file. D'OH!
-
-=item Version 1.9
-
-No changes: 1.8 failed CPAN registration
-
-=item Version 1.8
-
-Fixed incompatibility with 5.001 and FileHandle::new_tmpfile
-Added COPYING file, and improved README.
-
-=back
-
-
-
-
-=head1 AUTHOR
-
-MIME-tools was created by:
-
- ___ _ _ _ _ ___ _
- / _ \| '_| | | |/ _ ' / Eryq, (eryq(a)zeegee.com)
- | __/| | | |_| | |_| | President, ZeeGee Software Inc.
- \___||_| \__, |\__, |__ http://www.zeegee.com/
- |___/ |___/
-
-Released as MIME-parser (1.0): 28 April 1996.
-Released as MIME-tools (2.0): Halloween 1996.
-Released as MIME-tools (4.0): Christmas 1997.
-Released as MIME-tools (5.0): Mother's Day 2000.
-
-
-
-=head1 ACKNOWLEDGMENTS
-
-B<This kit would not have been possible> but for the direct
-contributions of the following:
-
- Gisle Aas The MIME encoding/decoding modules.
- Laurent Amon Bug reports and suggestions.
- Graham Barr The new MailTools.
- Achim Bohnet Numerous good suggestions, including the I/O model.
- Kent Boortz Initial code for RFC-1522-decoding of MIME headers.
- Andreas Koenig Numerous good ideas, tons of beta testing,
- and help with CPAN-friendly packaging.
- Igor Starovoitov Bug reports and suggestions.
- Jason L Tibbitts III Bug reports, suggestions, patches.
-
-Not to mention the Accidental Beta Test Team, whose bug reports (and
-comments) have been invaluable in improving the whole:
-
- Phil Abercrombie
- Mike Blazer
- Brandon Browning
- Kurt Freytag
- Steve Kilbane
- Jake Morrison
- Rolf Nelson
- Joel Noble
- Michael W. Normandin
- Tim Pierce
- Andrew Pimlott
- Dragomir R. Radev
- Nickolay Saukh
- Russell Sutherland
- Larry Virden
- Zyx
-
-Please forgive me if I've accidentally left you out.
-Better yet, email me, and I'll put you in.
-
-
-
-=head1 SEE ALSO
-
-At the time of this writing ($Date: 2001-03-29 23:55:41 $), the MIME-tools homepage was
-F<http://www.zeegee.com/code/perl/MIME-tools>.
-Check there for updates and support.
-
-Users of this toolkit may wish to read the documentation of Mail::Header
-and Mail::Internet.
-
-The MIME format is documented in RFCs 1521-1522, and more recently
-in RFCs 2045-2049.
-
-The MIME header format is an outgrowth of the mail header format
-documented in RFC 822.
-
-
-=cut
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/WordDecoder.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/WordDecoder.pm
deleted file mode 100644
index b080a48..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/WordDecoder.pm
+++ /dev/null
@@ -1,618 +0,0 @@
-package MIME::WordDecoder;
-
-
-=head1 NAME
-
-MIME::WordDecoder - decode RFC-1522 encoded words to a local representation
-
-
-=head1 SYNOPSIS
-
-See L<MIME::Words> for the basics of encoded words.
-See L<"DESCRIPTION"> for how this class works.
-
- use MIME::WordDecoder;
-
-
- ### Get the default word-decoder (used by unmime()):
- $wd = default MIME::WordDecoder;
-
- ### Get a word-decoder which maps to ISO-8859-1 (Latin1):
- $wd = supported MIME::WordDecoder "ISO-8859-1";
-
-
- ### Decode a MIME string (e.g., into Latin1) via the default decoder:
- $str = $wd->decode('To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld>');
-
- ### Decode a string using the default decoder, non-OO style:
- $str = unmime('To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld>');
-
-
-=head1 DESCRIPTION
-
-A MIME::WordDecoder consists, fundamentally, of a hash which maps
-a character set name (US-ASCII, ISO-8859-1, etc.) to a subroutine which
-knows how to take bytes in that character set and turn them into
-the target string representation. Ideally, this target representation
-would be Unicode, but we don't want to overspecify the translation
-that takes place: if you want to convert MIME strings directly to Big5,
-that's your own decision.
-
-The subroutine will be invoked with two arguments: DATA (the data in
-the given character set), and CHARSET (the upcased character set name).
-
-For example:
-
- ### Keep 7-bit characters as-is, convert 8-bit characters to '#':
- sub keep7bit {
- local $_ = shift;
- tr/\x00-\x7F/#/c;
- $_;
- }
-
-Here's a decoder which uses that:
-
- ### Construct a decoder:
- $wd = MIME::WordDecoder->new({'US-ASCII' => "KEEP", ### sub { $_[0] }
- 'ISO-8859-1' => \&keep7bit,
- 'ISO-8859-2' => \&keep7bit,
- 'Big5' => "WARN",
- '*' => "DIE"});
-
- ### Convert some MIME text to a pure ASCII string...
- $ascii = $wd->decode('To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld>');
-
- ### ...which will now hold: "To: Keld J#rn Simonsen <keld>"
-
-
-
-=head1 PUBLIC INTERFACE
-
-=over
-
-=cut
-
-use strict;
-use Carp qw( carp croak );
-use MIME::Words qw(decode_mimewords);
-use Exporter;
-use vars qw(@ISA @EXPORT);
-
-@ISA = qw(Exporter);
-@EXPORT = qw( unmime );
-
-
-
-#------------------------------
-#
-# Globals
-#
-#------------------------------
-
-### Decoders.
-my %DecoderFor = ();
-
-### Standard handlers.
-my %Handler =
-(
- KEEP => sub {$_[0]},
- IGNORE => sub {''},
- WARN => sub { carp "ignoring text in character set `$_[1]'\n" },
- DIE => sub { croak "can't handle text in character set `$_[1]'\n" },
- );
-
-### Global default decoder. We init it below.
-my $Default;
-
-
-#------------------------------
-
-=item default [DECODER]
-
-I<Class method.>
-Get/set the default DECODER object.
-
-=cut
-
-sub default {
- my $class = shift;
- if (@_) {
- $Default = shift;
- }
- $Default;
-}
-
-#------------------------------
-
-=item supported CHARSET, [DECODER]
-
-I<Class method.>
-If just CHARSET is given, returns a decoder object which maps
-data into that character set (the character set is forced to
-all-uppercase).
-
- $wd = supported MIME::WordDecoder "ISO-8859-1";
-
-If DECODER is given, installs such an object:
-
- MIME::WordDecoder->supported("ISO-8859-1" =>
- (new MIME::WordDecoder::ISO_8859 "1"));
-
-You should not override this method.
-
-=cut
-
-sub supported {
- my ($class, $charset, $decoder) = @_;
- $DecoderFor{uc($charset)} = $decoder if (@_ > 2);
- $DecoderFor{uc($charset)};
-}
-
-#------------------------------
-
-=item new [\@HANDLERS]
-
-I<Class method, constructor.>
-If \@HANDLERS is given, then @HANDLERS is passed to handler()
-to initiallize the internal map.
-
-=cut
-
-sub new {
- my ($class, $h) = @_;
- my $self = bless { MWD_Map=>{} }, $class;
-
- ### Init the map:
- $self->handler(@$h);
-
- ### Add fallbacks:
- $self->{MWD_Map}{'*'} ||= $Handler{WARN};
- $self->{MWD_Map}{'raw'} ||= $self->{MWD_Map}{'US-ASCII'};
- $self;
-}
-
-#------------------------------
-
-=item handler CHARSET=>\&SUBREF, ...
-
-I<Instance method.>
-Set the handler SUBREF for a given CHARSET, for as many pairs
-as you care to supply.
-
-When performing the translation of a MIME-encoded string, a
-given SUBREF will be invoked when translating a block of text
-in character set CHARSET. The subroutine will be invoked with
-the following arguments:
-
- DATA - the data in the given character set.
- CHARSET - the upcased character set name, which may prove useful
- if you are using the same SUBREF for multiple CHARSETs.
- DECODER - the decoder itself, if it contains configuration information
- that your handler function needs.
-
-For example:
-
- $wd = new MIME::WordDecoder;
- $wd->handler('US-ASCII' => "KEEP");
- $wd->handler('ISO-8859-1' => \&handle_latin1,
- 'ISO-8859-2' => \&handle_latin1,
- '*' => "DIE");
-
-Notice that, much as with %SIG, the SUBREF can also be taken from
-a set of special keywords:
-
- KEEP Pass data through unchanged.
- IGNORE Ignore data in this character set, without warning.
- WARN Ignore data in this character set, with warning.
- DIE Fatal exception with "can't handle character set" message.
-
-The subroutine for the special CHARSET of 'raw' is used for raw
-(non-MIME-encoded) text, which is supposed to be US-ASCII.
-The handler for 'raw' defaults to whatever was specified for 'US-ASCII'
-at the time of construction.
-
-The subroutine for the special CHARSET of '*' is used for any
-unrecognized character set. The default action for '*' is WARN.
-
-=cut
-
-sub handler {
- my $self = shift;
-
- ### Copy the hash, and edit it:
- while (@_) {
- my $c = shift;
- my $sub = shift;
- $self->{MWD_Map}{$c} = $self->real_handler($sub);
- }
- $self;
-}
-
-#------------------------------
-
-=item decode STRING
-
-I<Instance method.>
-Decode a STRING which might contain MIME-encoded components into a
-local representation (e.g., UTF-8, etc.).
-
-=cut
-
-sub decode {
- my ($self, $str) = @_;
- defined($str) or return undef;
- join('', map {
- ### Get the data and (upcased) charset:
- my $data = $_->[0];
- my $charset = (defined($_->[1]) ? uc($_->[1]) : 'raw');
- $charset =~ s/\*\w+\Z//; ### RFC2184 language suffix
-
- ### Get the handler; guess if never seen before:
- defined($self->{MWD_Map}{$charset}) or
- $self->{MWD_Map}{$charset} =
- ($self->real_handler($self->guess_handler($charset)) || 0);
- my $subr = $self->{MWD_Map}{$charset} || $self->{MWD_Map}{'*'};
-
- ### Map this chunk:
- &$subr($data, $charset, $self);
- } decode_mimewords($str));
-}
-
-#------------------------------
-#
-# guess_handler CHARSET
-#
-# Instance method.
-# An unrecognized charset has been seen. Guess a handler subref
-# for the given charset, returning false if there is none.
-# Successful mappings will be cached in the main map.
-#
-sub guess_handler {
- undef;
-}
-
-#------------------------------
-#
-# real_handler HANDLER
-#
-# Instance method.
-# Translate the given handler, which might be a subref or a string.
-#
-sub real_handler {
- my ($self, $sub) = @_;
- (!$sub) or
- (ref($sub) eq 'CODE') or
- $sub = ($Handler{$sub} || croak "bad named handler: $sub\n");
- $sub;
-}
-
-#------------------------------
-
-=item unmime STRING
-
-I<Function, exported.>
-Decode the given STRING using the default() decoder.
-See L<default()|/default>.
-
-=cut
-
-sub unmime($) {
- my $str = shift;
- $Default->decode($str);
-}
-
-
-=back
-
-=cut
-
-
-
-
-
-=head1 SUBCLASSES
-
-=over
-
-=cut
-
-#------------------------------------------------------------
-#------------------------------------------------------------
-
-=item MIME::WordDecoder::ISO_8859
-
-A simple decoder which keeps US-ASCII and the 7-bit characters
-of ISO-8859 character sets and UTF8, and also keeps 8-bit
-characters from the indicated character set.
-
- ### Construct:
- $wd = new MIME::WordDecoder::ISO_8859 2; ### ISO-8859-2
-
- ### What to translate unknown characters to (can also use empty):
- ### Default is "?".
- $wd->unknown("?");
-
- ### Collapse runs of unknown characters to a single unknown()?
- ### Default is false.
- $wd->collapse(1);
-
-
-According to B<http://czyborra.com/charsets/iso8859.html>
-(ca. November 2000):
-
-ISO 8859 is a full series of 10 (and soon even more) standardized
-multilingual single-byte coded (8bit) graphic character sets for
-writing in alphabetic languages:
-
- 1. Latin1 (West European)
- 2. Latin2 (East European)
- 3. Latin3 (South European)
- 4. Latin4 (North European)
- 5. Cyrillic
- 6. Arabic
- 7. Greek
- 8. Hebrew
- 9. Latin5 (Turkish)
- 10. Latin6 (Nordic)
-
-The ISO 8859 charsets are not even remotely as complete as the truly
-great Unicode but they have been around and usable for quite a while
-(first registered Internet charsets for use with MIME) and have
-already offered a major improvement over the plain 7bit US-ASCII.
-
-Characters 0 to 127 are always identical with US-ASCII and the
-positions 128 to 159 hold some less used control characters: the
-so-called C1 set from ISO 6429.
-
-=cut
-
-package MIME::WordDecoder::ISO_8859;
-
-use strict;
-use vars qw(@ISA);
-@ISA = qw( MIME::WordDecoder );
-
-
-#------------------------------
-#
-# HANDLERS
-#
-#------------------------------
-
-### Keep 7bit characters.
-### Turn all else to the special \x00.
-sub h_keep7bit {
- local $_ = $_[0];
-# my $unknown = $_[2]->{MWDI_Unknown};
-
- s{[\x80-\xFF]}{\x00}g;
- $_;
-}
-
-### Note: should use Unicode::String, converting/manipulating
-### everything into full Unicode form.
-
-### Keep 7bit UTF8 characters (ASCII).
-### Keep ISO-8859-1 if this decoder is for Latin-1.
-### Turn all else to the special \x00.
-sub h_utf8 {
- local $_ = $_[0];
-# my $unknown = $_[2]->{MWDI_Unknown};
- my $latin1 = ($_[2]->{MWDI_Num} == 1);
- print STDERR "UTF8 in: <$_>\n";
-
- my $tgt = '';
- while (m{\G(
- ([\x00-\x7F]) | # 0xxxxxxx
- ([\xC0-\xDF] [\x80-\xBF]) | # 110yyyyy 10xxxxxx
- ([\xE0-\xEF] [\x80-\xBF]{2}) | # 1110zzzz 10yyyyyy 10xxxxxx
- ([\xF0-\xF7] [\x80-\xBF]{3}) | # 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx
- . # error; synch
- )}gcsx and ($1 ne '')) {
-
- if (defined($2)) { $tgt .= $2 }
- elsif (defined($3) && $latin1) { $tgt .= "\x00" }
- else { $tgt .= "\x00" }
- }
-
- print STDERR "UTF8 out: <$tgt>\n";
- $tgt;
-}
-
-### Keep characters which are 7bit in UTF8 (ASCII).
-### Keep ISO-8859-1 if this decoder is for Latin-1.
-### Turn all else to the special \x00.
-sub h_utf16 {
- local $_ = $_[0];
-# my $unknown = $_[2]->{MWDI_Unknown};
- my $latin1 = ($_[2]->{MWDI_Num} == 1);
- print STDERR "UTF16 in: <$_>\n";
-
- my $tgt = '';
- while (m{\G(
- ( \x00 ([\x00-\x7F])) | # 00000000 0xxxxxxx
- ( \x00 ([\x80-\xFF])) | # 00000000 1xxxxxxx
- ( [^\x00] [\x00-\xFF]) | # etc
- )
- }gcsx and ($1 ne '')) {
-
- if (defined($2)) { $tgt .= $3 }
- elsif (defined($4) && $latin1) { $tgt .= $5 }
- else { $tgt .= "\x00" }
- }
-
- print STDERR "UTF16 out: <$tgt>\n";
- $tgt;
-}
-
-
-#------------------------------
-#
-# PUBLIC INTERFACE
-#
-#------------------------------
-
-#------------------------------
-#
-# new NUMBER
-#
-sub new {
- my ($class, $num) = @_;
-
- my $self = $class->SUPER::new();
- $self->handler('raw' => 'KEEP',
- 'US-ASCII' => 'KEEP');
-
- $self->{MWDI_Num} = $num;
- $self->{MWDI_Unknown} = "?";
- $self->{MWDI_Collapse} = 0;
- $self;
-}
-
-#------------------------------
-#
-# guess_handler CHARSET
-#
-sub guess_handler {
- my ($self, $charset) = @_;
- return 'KEEP' if (($charset =~ /^ISO[-_]?8859[-_](\d+)$/) &&
- ($1 eq $self->{MWDI_Num}));
- return \&h_keep7bit if ($charset =~ /^ISO[-_]?8859/);
- return \&h_utf8 if ($charset =~ /^UTF[-_]?8$/);
- return \&h_utf16 if ($charset =~ /^UTF[-_]?16$/);
- undef;
-}
-
-#------------------------------
-#
-# unknown [REPLACEMENT]
-#
-sub unknown {
- my $self = shift;
- $self->{MWDI_Unknown} = shift if @_;
- $self->{MWDI_Unknown};
-}
-
-#------------------------------
-#
-# collapse [YESNO]
-#
-sub collapse {
- my $self = shift;
- $self->{MWDI_Collapse} = shift if @_;
- $self->{MWDI_Collapse};
-}
-
-#------------------------------
-#
-# decode STRING
-#
-sub decode {
- my $self = shift;
-
- ### Do inherited action:
- my $basic = $self->SUPER::decode(@_);
- defined($basic) or return undef;
-
- ### Translate/consolidate illegal characters:
- $basic =~ tr{\x00}{\x00}c if $self->{MWDI_Collapse};
- $basic =~ s{\x00}{$self->{MWDI_Unknown}}g;
- $basic;
-}
-
-#------------------------------------------------------------
-#------------------------------------------------------------
-
-=item MIME::WordDecoder::US_ASCII
-
-A subclass of the ISO-8859-1 decoder which discards 8-bit characters.
-You're probably better off using ISO-8859-1.
-
-=cut
-
-package MIME::WordDecoder::US_ASCII;
-
-use strict;
-use vars qw(@ISA);
-@ISA = qw( MIME::WordDecoder::ISO_8859 );
-
-sub new {
- my ($class) = @_;
- return $class->SUPER::new("1");
-}
-
-sub decode {
- my $self = shift;
-
- ### Do inherited action:
- my $basic = $self->SUPER::decode(@_);
- defined($basic) or return undef;
-
- ### Translate/consolidate 8-bit characters:
- $basic =~ tr{\x80-\xFF}{}c if $self->{MWDI_Collapse};
- $basic =~ s{[\x80-\xFF]}{$self->{MWDI_Unknown}}g;
- $basic;
-}
-
-=back
-
-=cut
-
-#------------------------------------------------------------
-#------------------------------------------------------------
-
-package MIME::WordDecoder;
-
-### Now we can init the default handler.
-$Default = (MIME::WordDecoder::ISO_8859->new('1'));
-
-### Add US-ASCII handler:
-$DecoderFor{"US-ASCII"} = MIME::WordDecoder::US_ASCII->new;
-
-### Add ISO-8859-{1..15} handlers:
-for (1..15) {
- $DecoderFor{"ISO-8859-$_"} = MIME::WordDecoder::ISO_8859->new($_);
-}
-
-{
- package main; no strict; local $^W = 0;
- my @x = <::DATA>;
- eval join('',<::DATA>) || die $@ unless caller();
-}
-1; # end the module
-__END__
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-
-BEGIN { unshift @INC, ".", "./etc", "./lib" };
-import MIME::WordDecoder;
-
-### Decode a MIME string (e.g., into Latin1) via the default decoder:
-my $charset = $ARGV[0] || 'ISO-8859-1';
-my $wd = MIME::WordDecoder->supported($charset) || die "unsupported charset: $charset\n";
-
-$wd->unknown('#');
-my @encs = (
- 'ASCII: =?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>',
- 'Latin1: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>',
- 'Latin1: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>',
- 'Latin1: =?ISO-8859-1?Q?Andr=E9_?=Pirard <PIRARD(a)vm1.ulg.ac.be>',
- ' UTF-8: =?UTF-8?Q?Andr=E9_?=Pirard <PIRARD(a)vm1.ulg.ac.be>',
- 'UTF-16: =?UTF-16?Q?=00A=00n=00d=00r=00=E9?= Pirard <PIRARD(a)vm1.ulg.ac.be>',
- ('=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?='.
- '=?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?='.
- '=?US-ASCII?Q?.._cool!?='));
-$str = $wd->decode(join "\n", @encs);
-print "$str\n";
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Words.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Words.pm
deleted file mode 100644
index a13b728..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/lib/MIME/Words.pm
+++ /dev/null
@@ -1,406 +0,0 @@
-package MIME::Words;
-
-
-=head1 NAME
-
-MIME::Words - deal with RFC-1522 encoded words
-
-
-=head1 SYNOPSIS
-
-Before reading further, you should see L<MIME::Tools> to make sure that
-you understand where this module fits into the grand scheme of things.
-Go on, do it now. I'll wait.
-
-Ready? Ok...
-
-
- use MIME::Words qw(:all);
-
- ### Decode the string into another string, forgetting the charsets:
- $decoded = decode_mimewords(
- 'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>',
- );
-
- ### Split string into array of decoded [DATA,CHARSET] pairs:
- @decoded = decode_mimewords(
- 'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>',
- );
-
- ### Encode a single unsafe word:
- $encoded = encode_mimeword("\xABFran\xE7ois\xBB");
-
- ### Encode a string, trying to find the unsafe words inside it:
- $encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB in town");
-
-
-
-=head1 DESCRIPTION
-
-Fellow Americans, you probably won't know what the hell this module
-is for. Europeans, Russians, et al, you probably do. C<:-)>.
-
-For example, here's a valid MIME header you might get:
-
- From: =?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>
- To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>
- CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
- =?US-ASCII?Q?.._cool!?=
-
-The fields basically decode to (sorry, I can only approximate the
-Latin characters with 7 bit sequences /o and 'e):
-
- From: Keith Moore <moore(a)cs.utk.edu>
- To: Keld J/orn Simonsen <keld(a)dkuug.dk>
- CC: Andr'e Pirard <PIRARD(a)vm1.ulg.ac.be>
- Subject: If you can read this you understand the example... cool!
-
-
-=head1 PUBLIC INTERFACE
-
-=over 4
-
-=cut
-
-require 5.001;
-
-### Pragmas:
-use strict;
-use vars qw($VERSION @EXPORT_OK %EXPORT_TAGS @ISA);
-
-### Exporting:
-use Exporter;
-%EXPORT_TAGS = (all => [qw(decode_mimewords
- encode_mimeword
- encode_mimewords
- )]);
-Exporter::export_ok_tags('all');
-
-### Inheritance:
-@ISA = qw(Exporter);
-
-### Other modules:
-use MIME::Base64;
-use MIME::QuotedPrint;
-
-
-
-#------------------------------
-#
-# Globals...
-#
-#------------------------------
-
-### The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-### Nonprintables (controls + x7F + 8bit):
-my $NONPRINT = "\\x00-\\x1F\\x7F-\\xFF";
-
-
-#------------------------------
-
-# _decode_Q STRING
-# Private: used by _decode_header() to decode "Q" encoding, which is
-# almost, but not exactly, quoted-printable. :-P
-sub _decode_Q {
- my $str = shift;
- $str =~ s/_/\x20/g; # RFC-1522, Q rule 2
- $str =~ s/=([\da-fA-F]{2})/pack("C", hex($1))/ge; # RFC-1522, Q rule 1
- $str;
-}
-
-# _encode_Q STRING
-# Private: used by _encode_header() to decode "Q" encoding, which is
-# almost, but not exactly, quoted-printable. :-P
-sub _encode_Q {
- my $str = shift;
- $str =~ s{([_\?\=$NONPRINT])}{sprintf("=%02X", ord($1))}eog;
- $str;
-}
-
-# _decode_B STRING
-# Private: used by _decode_header() to decode "B" encoding.
-sub _decode_B {
- my $str = shift;
- decode_base64($str);
-}
-
-# _encode_B STRING
-# Private: used by _decode_header() to decode "B" encoding.
-sub _encode_B {
- my $str = shift;
- encode_base64($str, '');
-}
-
-
-
-#------------------------------
-
-=item decode_mimewords ENCODED, [OPTS...]
-
-I<Function.>
-Go through the string looking for RFC-1522-style "Q"
-(quoted-printable, sort of) or "B" (base64) encoding, and decode them.
-
-B<In an array context,> splits the ENCODED string into a list of decoded
-C<[DATA, CHARSET]> pairs, and returns that list. Unencoded
-data are returned in a 1-element array C<[DATA]>, giving an effective
-CHARSET of C<undef>.
-
- $enc = '=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>';
- foreach (decode_mimewords($enc)) {
- print "", ($_[1] || 'US-ASCII'), ": ", $_[0], "\n";
- }
-
-B<In a scalar context,> joins the "data" elements of the above
-list together, and returns that. I<Warning: this is information-lossy,>
-and probably I<not> what you want, but if you know that all charsets
-in the ENCODED string are identical, it might be useful to you.
-(Before you use this, please see L<MIME::WordDecoder/unmime>,
-which is probably what you want.)
-
-In the event of a syntax error, $@ will be set to a description
-of the error, but parsing will continue as best as possible (so as to
-get I<something> back when decoding headers).
-$@ will be false if no error was detected.
-
-Any arguments past the ENCODED string are taken to define a hash of options:
-
-=over 4
-
-=item Field
-
-Name of the mail field this string came from. I<Currently ignored.>
-
-=back
-
-=cut
-
-sub decode_mimewords {
- my $encstr = shift;
- my %params = @_;
- my @tokens;
- $@ = ''; ### error-return
-
- ### Collapse boundaries between adjacent encoded words:
- $encstr =~ s{(\?\=)\r?\n[ \t](\=\?)}{$1$2}gs;
- pos($encstr) = 0;
- ### print STDOUT "ENC = [", $encstr, "]\n";
-
- ### Decode:
- my ($charset, $encoding, $enc, $dec);
- while (1) {
- last if (pos($encstr) >= length($encstr));
- my $pos = pos($encstr); ### save it
-
- ### Case 1: are we looking at "=?..?..?="?
- if ($encstr =~ m{\G # from where we left off..
- =\?([^?]*) # "=?" + charset +
- \?([bq]) # "?" + encoding +
- \?([^?]+) # "?" + data maybe with spcs +
- \?= # "?="
- }xgi) {
- ($charset, $encoding, $enc) = ($1, lc($2), $3);
- $dec = (($encoding eq 'q') ? _decode_Q($enc) : _decode_B($enc));
- push @tokens, [$dec, $charset];
- next;
- }
-
- ### Case 2: are we looking at a bad "=?..." prefix?
- ### We need this to detect problems for case 3, which stops at "=?":
- pos($encstr) = $pos; # reset the pointer.
- if ($encstr =~ m{\G=\?}xg) {
- $@ .= qq|unterminated "=?..?..?=" in "$encstr" (pos $pos)\n|;
- push @tokens, ['=?'];
- next;
- }
-
- ### Case 3: are we looking at ordinary text?
- pos($encstr) = $pos; # reset the pointer.
- if ($encstr =~ m{\G # from where we left off...
- ([\x00-\xFF]*? # shortest possible string,
- \n*) # followed by 0 or more NLs,
- (?=(\Z|=\?)) # terminated by "=?" or EOS
- }xg) {
- length($1) or die "MIME::Words: internal logic err: empty token\n";
- push @tokens, [$1];
- next;
- }
-
- ### Case 4: bug!
- die "MIME::Words: unexpected case:\n($encstr) pos $pos\n\t".
- "Please alert developer.\n";
- }
- return (wantarray ? @tokens : join('',map {$_->[0]} @tokens));
-}
-
-#------------------------------
-
-=item encode_mimeword RAW, [ENCODING], [CHARSET]
-
-I<Function.>
-Encode a single RAW "word" that has unsafe characters.
-The "word" will be encoded in its entirety.
-
- ### Encode "<<Franc,ois>>":
- $encoded = encode_mimeword("\xABFran\xE7ois\xBB");
-
-You may specify the ENCODING (C<"Q"> or C<"B">), which defaults to C<"Q">.
-You may specify the CHARSET, which defaults to C<iso-8859-1>.
-
-=cut
-
-sub encode_mimeword {
- my $word = shift;
- my $encoding = uc(shift || 'Q');
- my $charset = uc(shift || 'ISO-8859-1');
- my $encfunc = (($encoding eq 'Q') ? \&_encode_Q : \&_encode_B);
- "=?$charset?$encoding?" . &$encfunc($word) . "?=";
-}
-
-#------------------------------
-
-=item encode_mimewords RAW, [OPTS]
-
-I<Function.>
-Given a RAW string, try to find and encode all "unsafe" sequences
-of characters:
-
- ### Encode a string with some unsafe "words":
- $encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB");
-
-Returns the encoded string.
-Any arguments past the RAW string are taken to define a hash of options:
-
-=over 4
-
-=item Charset
-
-Encode all unsafe stuff with this charset. Default is 'ISO-8859-1',
-a.k.a. "Latin-1".
-
-=item Encoding
-
-The encoding to use, C<"q"> or C<"b">. The default is C<"q">.
-
-=item Field
-
-Name of the mail field this string will be used in. I<Currently ignored.>
-
-=back
-
-B<Warning:> this is a quick-and-dirty solution, intended for character
-sets which overlap ASCII. B<It does not comply with the RFC-1522
-rules regarding the use of encoded words in message headers>.
-You may want to roll your own variant,
-using C<encoded_mimeword()>, for your application.
-I<Thanks to Jan Kasprzak for reminding me about this problem.>
-
-=cut
-
-sub encode_mimewords {
- my ($rawstr, %params) = @_;
- my $charset = $params{Charset} || 'ISO-8859-1';
- my $encoding = lc($params{Encoding} || 'q');
-
- ### Encode any "words" with unsafe characters.
- ### We limit such words to 18 characters, to guarantee that the
- ### worst-case encoding give us no more than 54 + ~10 < 75 characters
- my $word;
- $rawstr =~ s{([a-zA-Z0-9\x7F-\xFF]{1,18})}{ ### get next "word"
- $word = $1;
- (($word !~ /[$NONPRINT]/o)
- ? $word ### no unsafe chars
- : encode_mimeword($word, $encoding, $charset)); ### has unsafe chars
- }xeg;
- $rawstr;
-}
-
-1;
-__END__
-
-
-=back
-
-=head1 NOTES
-
-Exports its principle functions by default, in keeping with
-MIME::Base64 and MIME::QuotedPrint.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>), ZeeGee Software Inc (F<http://www.zeegee.com>).
-
-All rights reserved. This program is free software; you can redistribute
-it and/or modify it under the same terms as Perl itself.
-
-Thanks also to...
-
- Kent Boortz For providing the idea, and the baseline
- RFC-1522-decoding code!
- KJJ at PrimeNet For requesting that this be split into
- its own module.
- Stephane Barizien For reporting a nasty bug.
-
-
-=head1 VERSION
-
-$Revision: 1.1.1.1 $ $Date: 2001-03-29 23:55:41 $
-
-=cut
-
-
-#------------------------------
-# Execute simple test if run as a script.
-#------------------------------
-{
- package main; no strict;
- eval join('',<main::DATA>) || die "$@ $main::DATA" unless caller();
-}
-1; # end the module
-__END__
-
-
-### Pick up other MIME stuff, just in case...
-BEGIN { unshift @INC, ".", "./etc", "./lib" };
-import MIME::Words;
-
-my @encs = (
- '=?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>',
- '=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>',
- '=?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>',
- ('=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?='.
- '=?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?='.
- '=?US-ASCII?Q?.._cool!?='));
-foreach $enc (@encs) {
- $x = decode_mimewords($enc);
- print "DEC: ", $x, "\n";
-}
-
-### Encode a single unsafe word:
-$encoded = encode_mimeword("\xABFran\xE7ois\xBB");
-print "ENC1: ", $encoded, "\n";
-
-### Encode a string, trying to find the unsafe words inside it:
-$encoded = encode_mimewords("Me and \xABFran\xE7ois\xBB at the beach");
-print "ENC2: ", $encoded, "\n";
-
-### Encode "<<Franc,ois>>":
-my $unsafe = <<EOF;
-Me and \xABFran\xE7ois\xBB, down at the beach
-with Dave <dave\(a)ether.net>
-EOF
-$encoded = encode_mimewords($unsafe);
-print "ENC3: ", $encoded, "\n";
-print "DEC3: ", scalar(decode_mimewords($encoded)), "\n";
-
-### So we know everything went well...
-exit 0;
-
-#------------------------------
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/patch b/monitoring/PerlModules/CPAN/MIME-tools-5.410/patch
deleted file mode 100644
index c7e525d..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/patch
+++ /dev/null
@@ -1,16 +0,0 @@
---- lib/MIME/Entity.pm.ship Thu Jul 20 07:25:47 2000
-+++ lib/MIME/Entity.pm Sat Sep 2 10:51:23 2000
-@@ -1697,9 +1697,12 @@
-
- =cut
-
-+use Symbol;
- sub print {
- my ($self, $out) = @_;
-- $out = wraphandle($out || select); ### get a printable output
-+ $out = select if @_ < 2;
-+ $out = Symbol::qualify($out,scalar(caller)) unless ref($out);
-+ $out = wraphandle($out); ### get a printable output
-
- $self->print_header($out); ### the header
- $out->print("\n");
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Body.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Body.t
deleted file mode 100644
index 712bf5c..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Body.t
+++ /dev/null
@@ -1,105 +0,0 @@
-use lib "./t";
-
-use strict;
-use ExtUtils::TBone;
-
-use MIME::Body;
-use MIME::Tools;
-config MIME::Tools DEBUGGING=>0;
-
-#------------------------------------------------------------
-# BEGIN
-#------------------------------------------------------------
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(2 * 9);
-
-# Check bodies:
-my $sbody = new MIME::Body::Scalar;
-my $ibody = new MIME::Body::InCore;
-my $fbody = new MIME::Body::File "./testout/fbody";
-
-my $buf;
-my @lines;
-my $line;
-my $body;
-my $pos;
-foreach $body ($sbody, $fbody) {
- my $io;
- my $class = ref($body);
-
- #------------------------------------------------------------
- $T->msg("Checking class: ", ref($body));
- #------------------------------------------------------------
-
- # Open body for writing, and write stuff:
- $io = $body->open("w");
- $T->ok($io,
- "$class: opened for writing");
- $io->print("Line 1\nLine 2\nLine 3");
- $io->close;
-
- # Open body for reading:
- $io = $body->open("r");
- $T->ok($io,
- "$class: able to open body for reading?");
-
- # Read all lines:
- @lines = $io->getlines;
- $T->ok((($lines[0] eq "Line 1\n") &&
- ($lines[1] eq "Line 2\n") &&
- ($lines[2] eq "Line 3")),
- "$class: getlines method works?"
- );
-
- # Seek forward, read:
- $io->seek(3, 0);
- $io->read($buf, 3);
- $T->ok(($buf eq 'e 1'),
- "$class: seek(SEEK_START) plus read works?");
-
- # Tell, seek, and read:
- $pos = $io->tell;
- $io->seek(-5, 1);
- $pos = $io->tell;
- $T->ok($pos == 1,
- "$class: tell and seek(SEEK_CUR) works?");
-
- $io->read($buf, 5);
- $T->ok(($buf eq 'ine 1'),
- "$class: seek(SEEK_CUR) plus read works?");
-
- # Read all lines, one at a time:
- @lines = ();
- $io->seek(0, 0);
- while ($line = $io->getline()) { push @lines, $line }
- $T->ok((($lines[0] eq "Line 1\n") &&
- ($lines[1] eq "Line 2\n") &&
- ($lines[2] eq "Line 3")),
- "$class: getline works?"
- );
-
- # Done!
- $io->close;
-
-
- # Slurp lines:
- @lines = $body->as_lines;
- $T->ok((($lines[0] eq "Line 1\n") &&
- ($lines[1] eq "Line 2\n") &&
- ($lines[2] eq "Line 3")),
- "$class: as_lines works?"
- );
-
- # Slurp string:
- my $str = $body->as_string;
- $T->ok(($str eq "Line 1\nLine 2\nLine 3"),
- "$class: as_string works?");
-}
-
-# Done!
-$T->end;
-exit(0);
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Decoder.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Decoder.t
deleted file mode 100644
index 18306fb..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Decoder.t
+++ /dev/null
@@ -1,88 +0,0 @@
-use lib "./t";
-
-use MIME::Tools;
-use MIME::Decoder;
-config MIME::Tools QUIET=>1;
-
-# config MIME::Tools DEBUGGING=>1;
-use ExtUtils::TBone;
-
-#------------------------------------------------------------
-# BEGIN
-#------------------------------------------------------------
-
-# Is gzip available? Quick and dirty test:
-my $has_gzip;
-foreach (split $^O eq "MSWin32" ? ';' : ':', $ENV{PATH}) {
- last if ($has_gzip = -x "$_/gzip");
-}
-if ($has_gzip) {
- require MIME::Decoder::Gzip64;
- install MIME::Decoder::Gzip64 'x-gzip64';
-}
-
-# Get list of encodings we think we provide:
-my @encodings = ('base64',
- 'quoted-printable',
- '7bit',
- '8bit',
- 'binary',
- ($has_gzip ? 'x-gzip64' : ()),
- 'x-uuencode');
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(scalar(@encodings));
-
-# Report what tests we may be skipping:
-$T->msg($has_gzip
- ? "Using gzip: $has_gzip"
- : "No gzip: skipping x-gzip64 test");
-
-# Test each encoding in turn:
-my ($e, $eno) = (undef, 0);
-foreach $e (@encodings) {
- ++$eno;
- my $decoder = new MIME::Decoder $e;
- $decoder or next;
-
- $T->msg("Encoding/decoding of $e");
- my $infile = $T->catfile('.', 'testin', 'fun.txt');
- my $encfile = $T->catfile('.', 'testout', "fun.en$eno");
- my $decfile = $T->catfile('.', 'testout', "fun.de$eno");
-
- # Encode:
- open IN, "<$infile" or die "open $infile: $!";
- open OUT, ">$encfile" or die "open $encfile: $!";
- binmode IN; binmode OUT;
- $decoder->encode(\*IN, \*OUT) or next;
- close OUT;
- close IN;
-
- # Decode:
- open IN, "<$encfile" or die "open $encfile: $!";
- open OUT, ">$decfile" or die "open $decfile: $!";
- binmode IN; binmode OUT;
- $decoder->decode(\*IN, \*OUT) or next;
- close OUT;
- close IN;
-
- # Can we compare?
- if ($e =~ /^(base64|quoted-printable|binary|x-gzip64|x-uuencode)$/i) {
- $T->ok(((-s $infile) == (-s $decfile)),
- "size of $infile == size of $decfile");
- }
- else {
- $T->ok(1);
- }
-}
-
-# Done!
-$T->end;
-exit(0);
-1;
-
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Entity.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Entity.t
deleted file mode 100644
index 43a4d83..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Entity.t
+++ /dev/null
@@ -1,339 +0,0 @@
-use lib "./t";
-
-use MIME::Entity;
-use MIME::Parser;
-use ExtUtils::TBone;
-use Globby;
-use strict;
-
-my $line;
-my $LINE;
-
-
-#------------------------------------------------------------
-# BEGIN
-#------------------------------------------------------------
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(29);
-
-
-#------------------------------------------------------------
-$T->msg("Testing build()");
-#------------------------------------------------------------
-{local $SIG{__WARN__} = sub { die "caught warning: ",@_ };
- {
- my $e = MIME::Entity->build(Path => "./testin/short.txt");
- my $name = 'short.txt';
- my $got;
-
- #-----test------
- $got = $e->head->mime_attr('content-type.name');
- $T->ok($got eq $name,
- "Path: with no Filename, got default content-type.name",
- Got => $got);
-
- #-----test------
- $got = $e->head->mime_attr('content-disposition.filename');
- $T->ok($got eq $name,
- "Path: with no Filename, got default content-disp.filename",
- Got => $got);
-
- #-----test------
- $got = $e->head->recommended_filename;
- $T->ok($got eq $name,
- "Path: with no Filename, got default recommended filename",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/short.txt",
- Filename => undef);
- my $got = $e->head->mime_attr('content-type.name');
- $T->ok(!$got,
- "Path: with explicitly undef Filename, got no filename",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/short.txt",
- Filename => "foo.txt");
- my $got = $e->head->mime_attr('content-type.name');
- $T->ok($got eq "foo.txt",
- "Path: verified explicit 'Filename'",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/sig"
- );
- my $got = $e->head->mime_attr('content-type');
- $T->ok($got eq 'text/plain',
- "Type: default ok",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/sig",
- Type => "text/foo");
- my $got = $e->head->mime_attr('content-type');
- $T->ok($got eq 'text/foo',
- "Type: explicit ok",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/sig",
- Encoding => '-SUGGEST');
- my $got = $e->head->mime_attr('content-transfer-encoding');
- $T->ok($got eq '7bit',
- "Encoding: -SUGGEST yields 7bit",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/short.txt",
- Encoding => '-SUGGEST');
- my $got = $e->head->mime_attr('content-transfer-encoding');
- $T->ok($got eq 'quoted-printable',
- "Encoding: -SUGGEST yields qp",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Type => 'image/gif',
- Path => "./testin/mime-sm.gif",
- Encoding => '-SUGGEST');
- my $got = $e->head->mime_attr('content-transfer-encoding');
- $T->ok($got eq 'base64',
- "Encoding: -SUGGEST yields base64",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/short.txt"
- );
- my $got = $e->head->mime_attr('content-type.charset');
- $T->ok(!$got,
- "Charset: default ok",
- Got => $got);
- }
- {
- #-----test------
- my $e = MIME::Entity->build(Path => "./testin/short.txt",
- Charset => 'iso8859-1');
- my $got = $e->head->mime_attr('content-type.charset');
- $T->ok($got eq 'iso8859-1',
- "Charset: explicit",
- Got => $got);
- }
-}
-
-#------------------------------------------------------------
-$T->msg("Create an entity");
-#------------------------------------------------------------
-
-# Create the top-level, and set up the mail headers in a couple
-# of different ways:
-my $top = MIME::Entity->build(Type => "multipart/mixed",
- -From => "me\(a)myhost.com",
- -To => "you\(a)yourhost.com");
-$top->head->add('subject', "Hello, nurse!");
-$top->preamble([]);
-$top->epilogue([]);
-
-# Attachment #0: a simple text document:
-attach $top Path=>"./testin/short.txt";
-
-# Attachment #1: a GIF file:
-attach $top Path => "./testin/mime-sm.gif",
- Type => "image/gif",
- Encoding => "base64",
- Disposition => "attachment";
-
-# Attachment #2: a document we'll create manually:
-my $attach = new MIME::Entity;
-$attach->head(new MIME::Head ["X-Origin: fake\n",
- "Content-transfer-encoding: quoted-printable\n",
- "Content-type: text/plain\n"]);
-$attach->bodyhandle(new MIME::Body::Scalar);
-my $io = $attach->bodyhandle->open("w");
-$io->print(<<EOF
-This is the first line.
-This is the middle.
-This is the last.
-EOF
-);
-$io->close;
-$top->add_part($attach);
-
-# Attachment #3: a document we'll create, not-so-manually:
-$LINE = "This is the first and last line, with no CR at the end.";
-$attach = attach $top Data=>$LINE;
-
-#-----test------
-$T->ok(1, "built a message");
-unlink globby("testout/entity.msg*");
-
-#------------------------------------------------------------
-$T->msg("Check body");
-#------------------------------------------------------------
-my $bodylines = $top->parts(0)->body;
-#-----test------
-$T->ok($bodylines > 0,
- "old-style body call ok");
-my $preamble_str = join '', @{$top->preamble || []};
-my $preamble_len = length($preamble_str);
-my $epilogue_str = join '', @{$top->epilogue || []};
-my $epilogue_len = length($epilogue_str);
-
-#------------------------------------------------------------
-$T->msg("Output msg1 to explicit filehandle glob");
-#------------------------------------------------------------
-open TMP, ">testout/entity.msg1" or die "open: $!";
-$top->print(\*TMP);
-close TMP;
-#-----test------
-$T->ok((-s "testout/entity.msg1"),
- "wrote msg1 to filehandle glob");
-
-#------------------------------------------------------------
-$T->msg("Output msg2 to selected filehandle");
-#------------------------------------------------------------
-open TMP, ">testout/entity.msg2" or die "open: $!";
-my $oldfh = select TMP;
-$top->print;
-select $oldfh;
-close TMP;
-#-----test------
-$T->ok((-s "testout/entity.msg2"),
- "write msg2 to selected filehandle");
-
-#------------------------------------------------------------
-$T->msg("Compare");
-#------------------------------------------------------------
-# Same?
-$T->ok(((-s "testout/entity.msg1") == (-s "testout/entity.msg2")),
- "message files are same length");
-
-#------------------------------------------------------------
-$T->msg("Parse it back in, to check syntax");
-#------------------------------------------------------------
-my $parser = new MIME::Parser;
-$parser->output_dir("testout");
-open IN, "./testout/entity.msg1" or die "open: $!";
-$top = $parser->parse(\*IN);
-$T->msg($parser->results->msgs);
-
-#-----test------
-$T->ok($top, "parsed msg1 back in");
-
-my $preamble_str2 = join '', @{$top->preamble || []};
-my $preamble_len2 = length($preamble_str2);
-my $epilogue_str2 = join '', @{$top->epilogue || []};
-my $epilogue_len2 = length($epilogue_str2);
-#-----test------
-$T->ok(($preamble_len == $preamble_len2),
- "preambles match ($preamble_len == $preamble_len2)",
- Pre1 => $preamble_str,
- Pre2 => $preamble_str2,
- );
-#-----test------
-$T->ok(($epilogue_len == $epilogue_len2),
- "epilogues match ($epilogue_len == $epilogue_len2)",
- Epi1 => $epilogue_str,
- Epi2 => $epilogue_str2,
- );
-
-#------------------------------------------------------------
-$T->msg("Check the number of parts");
-#------------------------------------------------------------
-$T->ok(($top->parts == 4),
- "number of parts is correct (4)");
-
-#------------------------------------------------------------
-$T->msg("Check attachment 1 [the GIF]");
-#------------------------------------------------------------
-my $gif_real = (-s "./testin/mime-sm.gif");
-my $gif_this = (-s "./testout/mime-sm.gif");
-#-----test------
-$T->ok(($gif_real == $gif_this),
- "GIF is right size (real = $gif_real, this = $gif_this)");
-my $part = ($top->parts)[1];
-#-----test------
-$T->ok(($part->head->mime_type eq 'image/gif'),
- "GIF has correct MIME type");
-
-#------------------------------------------------------------
-$T->msg("Check attachment 3 [the short message]");
-#------------------------------------------------------------
-$part = ($top->parts)[3];
-$io = $part->bodyhandle->open("r");
-$line = ($io->getline);
-$io->close;
-#-----test------
-$T->ok(($line eq $LINE),
- "getline gets correct value (IO = $io, <$line>, <$LINE>)");
-#-----test------
-$T->ok(($part->head->mime_type eq 'text/plain'),
- "MIME type okay");
-#-----test------
-$T->ok(($part->head->mime_encoding eq 'binary'),
- "MIME encoding okay");
-
-#------------------------------------------------------------
-$T->msg("Write it out, and compare");
-#------------------------------------------------------------
-open TMP, ">testout/entity.msg3" or die "open: $!";
-$top->print(\*TMP);
-close TMP;
-#-----test------
-$T->ok(((-s "testout/entity.msg2") == (-s "testout/entity.msg3")),
- "msg2 same size as msg3");
-
-#------------------------------------------------------------
-$T->msg("Duplicate");
-#------------------------------------------------------------
-my $dup = $top->dup;
-open TMP, ">testout/entity.dup3" or die "open: $!";
-$dup->print(\*TMP);
-close TMP;
-my $msg3_s = -s "testout/entity.msg3";
-my $dup3_s = -s "testout/entity.dup3";
-#-----test------
-$T->ok(($msg3_s == $dup3_s),
- "msg3 size ($msg3_s) is same as dup3 size ($dup3_s)");
-
-#------------------------------------------------------------
-$T->msg("Test signing");
-#------------------------------------------------------------
-$top->sign(File=>"./testin/sig");
-$top->remove_sig;
-$top->sign(File=>"./testin/sig2", Remove=>56);
-$top->sign(File=>"./testin/sig3");
-
-#------------------------------------------------------------
-$T->msg("Write it out again, after synching");
-#------------------------------------------------------------
-$top->sync_headers(Nonstandard=>'ERASE',
- Length=>'COMPUTE');
-open TMP, ">testout/entity.msg4" or die "open: $!";
-$top->print(\*TMP);
-close TMP;
-
-#------------------------------------------------------------
-$T->msg("Purge the files");
-#------------------------------------------------------------
-$top->purge;
-#-----test------
-$T->ok((! -e "./testout/mime-sm.gif"),
- "purge worked");
-
-# Done!
-exit(0);
-1;
-
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/ExtUtils/TBone.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/ExtUtils/TBone.pm
deleted file mode 100644
index 50279e9..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/ExtUtils/TBone.pm
+++ /dev/null
@@ -1,534 +0,0 @@
-package ExtUtils::TBone;
-
-
-=head1 NAME
-
-ExtUtils::TBone - a "skeleton" for writing "t/*.t" test files.
-
-
-=head1 SYNOPSIS
-
-Include a copy of this module in your t directory (as t/ExtUtils/TBone.pm),
-and then write your t/*.t files like this:
-
- use lib "./t"; # to pick up a ExtUtils::TBone
- use ExtUtils::TBone;
-
- # Make a tester... here are 3 different alternatives:
- my $T = typical ExtUtils::TBone; # standard log
- my $T = new ExtUtils::TBone; # no log
- my $T = new ExtUtils::TBone "testout/Foo.tlog"; # explicit log
-
- # Begin testing, and expect 3 tests in all:
- $T->begin(3); # expect 3 tests
- $T->msg("Something for the log file"); # message for the log
-
- # Run some tests:
- $T->ok($this); # test 1: no real info logged
- $T->ok($that, # test 2: logs a comment
- "Is that ok, or isn't it?");
- $T->ok(($this eq $that), # test 3: logs comment + vars
- "Do they match?",
- This => $this,
- That => $that);
-
- # That last one could have also been written...
- $T->ok_eq($this, $that); # does 'eq' and logs operands
- $T->ok_eqnum($this, $that); # does '==' and logs operands
-
- # End testing:
- $T->end;
-
-
-=head1 DESCRIPTION
-
-This module is intended for folks who release CPAN modules with
-"t/*.t" tests. It makes it easy for you to output syntactically
-correct test-output while at the same time logging all test
-activity to a log file. Hopefully, bug reports which include
-the contents of this file will be easier for you to investigate.
-
-
-=head1 LOG FILE
-
-A typical log file output by this module looks like this:
-
- 1..3
-
- ** A message logged with msg().
- ** Another one.
- 1: My first test, using test(): how'd I do?
- 1: ok 1
-
- ** Yet another message.
- 2: My second test, using test_eq()...
- 2: A: The first string
- 2: B: The second string
- 2: not ok 2
-
- 3: My third test.
- 3: ok 3
-
- END
-
-Each test() is logged with the test name and results, and
-the test-number prefixes each line.
-This allows you to scan a large file easily with "grep" (or, ahem, "perl").
-A blank line follows each test's record, for clarity.
-
-
-=head1 PUBLIC INTERFACE
-
-=cut
-
-# Globals:
-use strict;
-use vars qw($VERSION);
-use FileHandle;
-use File::Basename;
-
-# The package version, both in 1.23 style *and* usable by MakeMaker:
-$VERSION = substr q$Revision: 1.1.1.1 $, 10;
-
-
-
-#------------------------------
-
-=head2 Construction
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item new [ARGS...]
-
-I<Class method, constructor.>
-Create a new tester. Any arguments are sent to log_open().
-
-=cut
-
-sub new {
- my $self = bless {
- OUT =>\*STDOUT,
- Begin=>0,
- End =>0,
- Count=>0,
- }, shift;
- $self->log_open(@_) if @_;
- $self;
-}
-
-#------------------------------
-
-=item typical
-
-I<Class method, constructor.>
-Create a typical tester. Use this instead of new() for most applicaitons.
-The directory "testout" is created for you automatically, to hold
-the output log file.
-
-=cut
-
-sub typical {
- my $class = shift;
- my ($tfile) = basename $0;
- unless (-d "testout") {
- mkdir "testout", 0755
- or die "Couldn't create a 'testout' subdirectory: $!\n";
- ### warn "$class: created 'testout' directory\n";
- }
- $class->new($class->catfile('.', 'testout', "${tfile}log"));
-}
-
-#------------------------------
-# DESTROY
-#------------------------------
-# Class method, destructor.
-# Automatically closes the log.
-#
-sub DESTROY {
- $_[0]->log_close;
-}
-
-
-#------------------------------
-
-=back
-
-=head2 Doing tests
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item begin NUMTESTS
-
-I<Instance method.>
-Start testing.
-
-=cut
-
-sub begin {
- my ($self, $n) = @_;
- return if $self->{Begin}++;
- $self->l_print("1..$n\n\n");
- print {$self->{OUT}} "1..$n\n";
-}
-
-#------------------------------
-
-=item end
-
-I<Instance method.>
-End testing.
-
-=cut
-
-sub end {
- my ($self) = @_;
- return if $self->{End}++;
- $self->l_print("END\n");
- print {$self->{OUT}} "END\n";
-}
-
-#------------------------------
-
-=item ok BOOL, [TESTNAME], [PARAMHASH...]
-
-I<Instance method.>
-Do a test, and log some information connected with it.
-Use it like this:
-
- $T->ok(-e $dotforward);
-
-Or better yet, like this:
-
- $T->ok((-e $dotforward),
- "Does the user have a .forward file?");
-
-Or even better, like this:
-
- $T->ok((-e $dotforward),
- "Does the user have a .forward file?",
- User => $ENV{USER},
- Path => $dotforward,
- Fwd => $ENV{FWD});
-
-That last one, if it were test #3, would be logged as:
-
- 3: Does the user have a .forward file?
- 3: User: "alice"
- 3: Path: "/home/alice/.forward"
- 3: Fwd: undef
- 3: ok
-
-You get the idea. Note that defined quantities are logged with delimiters
-and with all nongraphical characters suitably escaped, so you can see
-evidence of unexpected whitespace and other badnasties.
-Had "Fwd" been the string "this\nand\nthat", you'd have seen:
-
- 3: Fwd: "this\nand\nthat"
-
-And unblessed array refs like ["this", "and", "that"] are
-treated as multiple values:
-
- 3: Fwd: "this"
- 3: Fwd: "and"
- 3: Fwd: "that"
-
-=cut
-
-sub ok {
- my ($self, $ok, $test, @ps) = @_;
- ++($self->{Count}); # next test
-
- # Report to harness:
- my $status = ($ok ? "ok " : "not ok ") . $self->{Count};
- print {$self->{OUT}} $status, "\n";
-
- # Log:
- $self->ln_print($test, "\n") if $test;
- while (@ps) {
- my ($k, $v) = (shift @ps, shift @ps);
- my @vs = ((ref($v) and (ref($v) eq 'ARRAY'))? @$v : ($v));
- foreach (@vs) {
- if (!defined($_)) { # value not defined: output keyword
- $self->ln_print(qq{ $k: undef\n});
- }
- else { # value defined: output quoted, encoded form
- s{([\n\t\x00-\x1F\x7F-\xFF\\\"])}
- {'\\'.sprintf("%02X",ord($1)) }exg;
- s{\\0A}{\\n}g;
- $self->ln_print(qq{ $k: "$_"\n});
- }
- }
- }
- $self->ln_print($status, "\n");
- $self->l_print("\n");
- 1;
-}
-
-
-#------------------------------
-
-=item ok_eq ASTRING, BSTRING, [TESTNAME], [PARAMHASH...]
-
-I<Instance method.>
-Convenience front end to ok(): test whether C<ASTRING eq BSTRING>, and
-logs the operands as 'A' and 'B'.
-
-=cut
-
-sub ok_eq {
- my ($self, $this, $that, $test, @ps) = @_;
- $self->ok(($this eq $that),
- ($test || "(Is 'A' string-equal to 'B'?)"),
- A => $this,
- B => $that,
- @ps);
-}
-
-
-#------------------------------
-
-=item ok_eqnum ANUM, BNUM, [TESTNAME], [PARAMHASH...]
-
-I<Instance method.>
-Convenience front end to ok(): test whether C<ANUM == BNUM>, and
-logs the operands as 'A' and 'B'.
-
-=cut
-
-sub ok_eqnum {
- my ($self, $this, $that, $test, @ps) = @_;
- $self->ok(($this == $that),
- ($test || "(Is 'A' numerically-equal to 'B'?)"),
- A => $this,
- B => $that,
- @ps);
-}
-
-#------------------------------
-
-=back
-
-=head2 Logging messages
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item log_open PATH
-
-I<Instance method.>
-Open a log file for messages to be output to. This is invoked
-for you automatically by C<new(PATH)> and C<typical()>.
-
-=cut
-
-sub log_open {
- my ($self, $path) = @_;
- $self->{LogPath} = $path;
- $self->{LOG} = FileHandle->new(">$path") || die "open $path: $!";
- $self;
-}
-
-#------------------------------
-
-=item log_close
-
-I<Instance method.>
-Close the log file and stop logging.
-You shouldn't need to invoke this directly; the destructor does it.
-
-=cut
-
-sub log_close {
- my $self = shift;
- close(delete $self->{LOG}) if $self->{LOG};
-}
-
-#------------------------------
-
-=item log MESSAGE...
-
-I<Instance method.>
-Log a message to the log file. No alterations are made on the
-text of the message. See msg() for an alternative.
-
-=cut
-
-sub log {
- my $self = shift;
- print {$self->{LOG}} @_ if $self->{LOG};
-}
-
-#------------------------------
-
-=item msg MESSAGE...
-
-I<Instance method.>
-Log a message to the log file. Lines are prefixed with "** " for clarity,
-and a terminating newline is forced.
-
-=cut
-
-sub msg {
- my $self = shift;
- my $text = join '', @_;
- chomp $text;
- $text =~ s{^}{** }gm;
- $self->l_print($text, "\n");
-}
-
-#------------------------------
-#
-# l_print MESSAGE...
-#
-# Instance method, private.
-# Print to the log file if there is one.
-#
-sub l_print {
- my $self = shift;
- print { $self->{LOG} } @_ if $self->{LOG};
-}
-
-#------------------------------
-#
-# ln_print MESSAGE...
-#
-# Instance method, private.
-# Print to the log file, prefixed by message number.
-#
-sub ln_print {
- my $self = shift;
- foreach (split /\n/, join('', @_)) {
- $self->l_print("$self->{Count}: $_\n");
- }
-}
-
-#------------------------------
-
-=back
-
-=head2 Utilities
-
-=over 4
-
-=cut
-
-#------------------------------
-
-=item catdir DIR, ..., DIR
-
-I<Class/instance method.>
-Concatenate several directories into a path ending in a directory.
-Lightweight version of the one in the (very new) File::Spec.
-
-Paths are assumed to be absolute.
-To signify a relative path, the first DIR must be ".",
-which is processed specially.
-
-On Mac, the path I<does> end in a ':'.
-On Unix, the path I<does not> end in a '/'.
-
-=cut
-
-sub catdir {
- my $self = shift;
- my $relative = shift @_ if ($_[0] eq '.');
- if ($^O eq 'Mac') {
- return ($relative ? ':' : '') . (join ':', @_) . ':';
- }
- else {
- return ($relative ? './' : '/') . join '/', @_;
- }
-}
-
-#------------------------------
-
-=item catfile DIR, ..., DIR, FILE
-
-I<Class/instance method.>
-Like catdir(), but last element is assumed to be a file.
-Note that, at a minimum, you must supply at least a single DIR.
-
-=cut
-
-sub catfile {
- my $self = shift;
- my $file = pop;
- if ($^O eq 'Mac') {
- return $self->catdir(@_) . $file;
- }
- else {
- return $self->catdir(@_) . "/$file";
- }
-}
-
-#------------------------------
-
-=back
-
-
-=head1 CHANGE LOG
-
-B<Current version:>
-$Id: TBone.pm,v 1.1.1.1 2001-03-29 23:55:41 dparker Exp $
-
-=over 4
-
-=item Version 1.116
-
-Cosmetic improvements only.
-
-
-=item Version 1.112
-
-Added lightweight catdir() and catfile() (a la File::Spec)
-to enhance portability to Mac environment.
-
-
-=item Version 1.111
-
-Now uses File::Basename to create "typical" logfile name,
-for portability.
-
-
-=item Version 1.110
-
-Fixed bug in constructor that surfaced if no log was being used.
-
-=back
-
-Created: Friday-the-13th of February, 1998.
-
-
-=head1 AUTHOR
-
-Eryq (F<eryq(a)zeegee.com>).
-President, ZeeGee Software Inc. (F<http://www.zeegee.com>)
-
-=cut
-
-#------------------------------
-
-1;
-__END__
-
-my $T = new ExtUtils::TBone "testout/foo.tlog";
-$T->begin(3);
-$T->msg("before 1\nor 2");
-$T->ok(1, "one");
-$T->ok(2, "Two");
-$T->ok(3, "Three", Roman=>'III', Arabic=>[3, '03'], Misc=>"3\nor 3");
-$T->end;
-
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Gauntlet.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Gauntlet.t
deleted file mode 100644
index ab14def..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Gauntlet.t
+++ /dev/null
@@ -1,122 +0,0 @@
-use lib "./t";
-
-use MIME::Parser;
-
-use strict;
-config MIME::Tools DEBUGGING=>0;
-use ExtUtils::TBone;
-
-
-# Are on a machine where binmode matters?
-my $txtmode = "./testout/textmode";
-open TEXTMODE, ">$txtmode" or die "open textmode file!";
-print TEXTMODE "abc\ndef\nghi\n";
-close TEXTMODE;
-my $uses_crlf = ((-s $txtmode) == 12) ? 0 : 1;
-
-# Actual length of message:
-my $MSGLEN = 669;
-my $MSGLINES = 20;
-my $MSGLEN_text = $MSGLEN + ($uses_crlf * $MSGLINES);
-
-# Checker:
-my $T = typical ExtUtils::TBone;
-
-# Gout...
-sub gout {
- my ($h, $ent) = @_;
- my $test;
- my $pos1;
- my $pos2;
-
- no strict 'refs';
- my $sh = (ref($h) ? $h : \*$h);
-
- print $sh "\n", "=" x 30, " ", ($test = "ent->print"), "\n";
- $pos1 = tell($sh);
- eval { $ent->print($h) };
- $pos2 = tell($sh);
- $T->ok((!$@ and (($pos2 - $pos1) == $MSGLEN_text)),
- "$h, $test [$pos1-$pos2 == $MSGLEN_text]");
-
- print $sh "\n", "=" x 30, " ", ($test = "print ent->as_string"), "\n";
- $pos1 = tell($sh);
- eval { print $h $ent->as_string };
- $pos2 = tell($sh);
- $T->ok((!$@ and (($pos2 - $pos1) == $MSGLEN_text)),
- "$h, $test [$pos1-$pos2]");
-
- print $sh "\n", "=" x 30, " ", ($test = "ent->print_header"), "\n";
- eval { $ent->print_header($h) };
- $T->ok(!$@, "$h, $test: $@");
-
- print $sh "\n", "=" x 30, " ", ($test = "ent->print_body"), "\n";
- eval { $ent->print_body($h) };
- $T->ok(!$@, "$h, $test: $@");
-
- print $sh "\n", "=" x 30, " ", ($test = "ent->bodyhandle->print"), "\n";
- eval { $ent->bodyhandle->print($h) };
- $T->ok(!$@, "$h, $test: $@");
-
- print $sh "\n", "=" x 30, " ",($test = "print ent->bodyhandle->data"),"\n";
- eval { print $h $ent->bodyhandle->data };
- $T->ok(!$@, "$h, $test: $@");
- 1;
-}
-
-
-# Loops:
-my @msgfiles = qw(simple.msg);
-my @corelims = qw(ALL NONE 512);
-
-
-# Create checker:
-$T->begin(((6+1) * 3 * int(@corelims) * int(@msgfiles)));
-
-# Create a parser:
-my $parser = new MIME::Parser;
-$parser->output_dir("./testout");
-
-# For each message:
-my $msgfile;
-foreach $msgfile (@msgfiles) {
-
- my $corelim;
- foreach $corelim (@corelims) {
-
- # Set opt:
- $parser->output_to_core($corelim);
-
- # Parse:
- my $ent = $parser->parse_open("./testin/$msgfile");
- my $out = "./testout/gauntlet.out";
- my $outsize = 3201 + ($uses_crlf * 97);
-
- # Open output stream 1:
- open GOUT, ">$out" or die "$!";
- gout('::GOUT', $ent);
- close GOUT;
- my $s1 = -s $out;
- $T->ok($s1 == $outsize, "BARE FH: size $out ($s1) == $outsize?");
-
- # Open output stream 2:
- open GOUT, ">$out" or die "$!";
- gout(\*GOUT, $ent);
- close GOUT;
- my $s2 = -s $out;
- $T->ok($s2 == $outsize, "GLOB ref: size $out ($s2) == $outsize?");
-
- # Open output stream 3:
- my $GOUT = (new FileHandle ">$out") || die "$!";
- gout($GOUT, $ent);
- $GOUT->close;
- my $s3 = -s $out;
- $T->ok($s3 == $outsize, "FileHandle: size $out ($s3) == $outsize?");
- }
-}
-
-
-# Done!
-exit(0);
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Globby.pm b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Globby.pm
deleted file mode 100644
index beb6bc4..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Globby.pm
+++ /dev/null
@@ -1,32 +0,0 @@
-package Globby;
-
-# More-portable but limited glob(). It does what we need.
-
-use Exporter;
-use vars qw(@ISA @EXPORT);
-
-@ISA = qw(Exporter);
-@EXPORT = qw(globby);
-
-sub globby {
- my $globpath = shift; # full glob
- my %r = ('.'=>'\.',
- '*'=>'.*',
- '?'=>'.');
-
- # Get directory and regexp:
- my ($dir, $glob) = ($globpath =~ m{^(.*?)/?([^/]+\Z)});
- defined($dir) or $dir = '';
- my $re = $glob; $re =~ s{([\.\*\?])}{$r{$1}}g;
-
- # Get files which match pattern:
- my @f;
- if (opendir DIR, $dir) {
- @f = grep /^$re\Z/, sort(readdir(DIR));
- closedir DIR;
- }
-
- # Return as full paths:
- map { ($dir ne '') ? "$dir/$_" : $_} @f;
-}
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Head.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Head.t
deleted file mode 100644
index 79fb58e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Head.t
+++ /dev/null
@@ -1,167 +0,0 @@
-use lib "./t";
-use MIME::Head;
-use ExtUtils::TBone;
-
-#------------------------------------------------------------
-# BEGIN
-#------------------------------------------------------------
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(17);
-
-#------------------------------------------------------------
-$T->msg("Read a bogus file (this had better fail...)");
-#------------------------------------------------------------
-my $WARNS = $SIG{'__WARN__'}; $SIG{'__WARN__'} = sub { };
-my $head = MIME::Head->from_file('BLAHBLAH');
-$T->ok(!$head, "parse failed as expected?");
-$SIG{'__WARN__'} = $WARNS;
-
-#------------------------------------------------------------
-$T->msg("Parse in the crlf.hdr file:");
-#------------------------------------------------------------
-($head = MIME::Head->from_file('./testin/crlf.hdr'))
- or die "couldn't parse input"; # stop now
-$T->ok('HERE',
- "parse of good file succeeded as expected?");
-
-#------------------------------------------------------------
-$T->msg("Did we get all the fields?");
-#------------------------------------------------------------
-my @actuals = qw(path
- from
- newsgroups
- subject
- date
- organization
- lines
- message-id
- nntp-posting-host
- mime-version
- content-type
- content-transfer-encoding
- x-mailer
- x-url
- );
-push(@actuals, "From ");
-my $actual = join '|', sort( map {lc($_)} @actuals);
-my $parsed = join '|', sort( map {lc($_)} $head->tags);
-$T->ok($parsed eq $actual,
- "got all fields we expected?");
-
-#------------------------------------------------------------
-$T->msg("Could we get() the 'subject'? (it'll end in \\r\\n)");
-#------------------------------------------------------------
-my $subject;
-($subject) = ($head->get('subject',0)); # force array context, see if okay
-$T->ok($subject eq "EMPLOYMENT: CHICAGO, IL UNIX/CGI/WEB/DBASE\r\n",
- "got the subject okay?",
- Subject => $subject);
-
-#------------------------------------------------------------
-$T->msg("Could we replace() the 'Subject', and get it as 'SUBJECT'?");
-#------------------------------------------------------------
-my $newsubject = "Hellooooooo, nurse!\r\n";
-$head->replace('Subject', $newsubject);
-$subject = $head->get('SUBJECT');
-$T->ok($subject eq $newsubject,
- "able to set Subject, and get SUBJECT?");
-
-#------------------------------------------------------------
-$T->msg("Does the count() method work?");
-#------------------------------------------------------------
-$T->ok($head->count('NNTP-Posting-Host') and
- $head->count('nntp-POSTING-HOST') and
- !($head->count('Doesnt-Exist')),
- "count method working?");
-
-#------------------------------------------------------------
-$T->msg("Create a custom structured field, and extract parameters");
-#------------------------------------------------------------
-$head->replace('X-Files',
- 'default ; name="X Files Test"; LENgth=60 ;setting="6"');
-my $params;
-{ local $^W = 0;
- $params = $head->params('X-Files');
-}
-$T->ok($params, "got the parameter hash?");
-$T->ok($$params{_} eq 'default', "got the default field?");
-$T->ok($$params{'name'} eq 'X Files Test', "got the name?");
-$T->ok($$params{'length'} eq '60', "got the length?");
-$T->ok($$params{'setting'} eq '6', "got the setting?");
-
-#------------------------------------------------------------
-$T->msg("Output to a desired file");
-#------------------------------------------------------------
-open TMP, ">./testout/tmp.head" or die "open: $!";
-$head->print(\*TMP);
-close TMP;
-$T->ok((-s "./testout/tmp.head") > 50,
- "output is a decent size?"); # looks okay
-
-#------------------------------------------------------------
-$T->msg("Parse in international header, decode and unfold it");
-#------------------------------------------------------------
-($head = MIME::Head->from_file('./testin/encoded.hdr'))
- or die "couldn't parse input"; # stop now
-$head->decode;
-$head->unfold;
-$subject = $head->get('subject',0); $subject =~ s/\r?\n\Z//;
-my $to = $head->get('to',0); $to =~ s/\r?\n\Z//;
-my $tsubject = "If you can read this you understand the example... cool!";
-my $tto = "Keld J\370rn Simonsen <keld\(a)dkuug.dk>";
-$T->ok($to eq $tto, "Q decoding okay?");
-$T->ok($subject eq $tsubject, "B encoding and compositing okay?");
-
-#------------------------------------------------------------
-$T->msg("Parse in header with 'From ', and check field order");
-#------------------------------------------------------------
-
-# Prep:
-($head = MIME::Head->from_file('./testin/third.hdr'))
- or die "couldn't parse input"; # stop now
-my @orighdrs;
-my @realhdrs = qw(From
- Path:
- From:
- Newsgroups:
- Subject:
- Date:
- Organization:
- Lines:
- Message-ID:
- NNTP-Posting-Host:
- Mime-Version:
- Content-Type:
- Content-Transfer-Encoding:
- X-Mailer:
- X-URL:);
-my @curhdrs;
-
-# Does it work?
-@orighdrs = map {/^\S+:?/ ? $& : ''} (split(/\r?\n/, $head->stringify));
-@curhdrs = @realhdrs;
-$T->ok(lc(join('|',@orighdrs)) eq lc(join('|',@curhdrs)),
- "field order preserved under stringify?");
-
-# Does it work if we add/replace fields?
-$head->replace("X-New-Addition", "Hi there!");
-$head->replace("Subject", "Hi there again!");
-@curhdrs = (@realhdrs, "X-New-Addition:");
-@orighdrs = map {/^\S+:?/ ? $& : ''} (split(/\r?\n/, $head->stringify));
-$T->ok(lc(join('|',@orighdrs)) eq lc(join('|',@curhdrs)),
- "field order preserved under stringify after fields added?");
-
-# Does it work if we decode the header?
-$head->decode;
-@orighdrs = map {/^\S+:?/ ? $& : ''} (split(/\r?\n/, $head->stringify));
-$T->ok(lc(join('|',@orighdrs)) eq lc(join('|',@curhdrs)),
- "field order is preserved under stringify after decoding?");
-
-# Done!
-exit(0);
-1;
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Misc.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Misc.t
deleted file mode 100644
index fdde598..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Misc.t
+++ /dev/null
@@ -1,119 +0,0 @@
-use lib "./t";
-use MIME::Head;
-use MIME::Parser;
-
-use ExtUtils::TBone;
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(7);
-
-#------------------------------
-# Bug 971008 from Michael W. Normandin <michael.normandin(a)csfb.com>:
-#------------------------------
-# I've found something you may be interested in :
-# Header:
-# Content-Type: application/vnd.ms-powerpoint; name="June97V4.0.ppt"
-# Code:
-# $mtype = $pentity->head->mime_type;
-# print "$mytype\n";
-#
-# Produces:
-# application/vnd
-#
-{
- my $head = MIME::Head->new([
- 'Content-Type: application/vnd.ms-powerpoint; name="June97V4.0.ppt"'
- ]);
- $T->ok_eq($head->mime_type,
- "application/vnd.ms-powerpoint",
- "bug 971008-MWN: are MIME attributes parsed ok?");
-}
-
-#------------------------------
-# Bug 970822 from Anselm Lingnau <lingnau(a)tm.informatik.uni-frankfurt.de>
-#------------------------------
-# use Mail::Field;
-# use MIME::Head;
-# $field = Mail::Field->new('Content-type', 'text/HTML; charset="US-ASCII"');
-# print $field->type, "\n";
-#
-# but all I see is:
-#
-# Can't locate object method "parse" via package "Mail::Field::ContType"
-# at /local/pkg/perl/5.004/lib/site_perl/Mail/Field.pm line 306.
-#
-# I suppose this has to do with the fact that it is `MIME::Field' rather
-# than `Mail::Field', but I am at a loss as to what to do next. Maybe you
-# can help? Thank you very much.
-{
- use Mail::Field;
- use MIME::Head;
- my $field = Mail::Field->new('Content-type',
- 'text/HTML; charset="US-ASCII"');
- $T->ok_eq($field->paramstr('_'),
- "text/HTML",
- "bug 970822-AL: Mail::Field register problem (paramstr)");
- $T->ok_eq($field->type,
- "text/html",
- "bug 970822-AL: Mail::Field register problem (type)");
-}
-
-#------------------------------
-# Bug 970725 from Denis N. Antonioli <antonio(a)ifi.unizh.ch>
-#------------------------------
-# Were it possible to incorporate the guideline #8 from RFC 2049?
-# The change involved is minim: just adding the 2 lines
-# $res =~ s/\./=2E/go;
-# $res =~ s/From /=46rom /go;
-# at the start of encode_qp_really in MIME::Decoder::QuotedPrint?
-{
- use MIME::Decoder::QuotedPrint;
- my $pair;
- foreach $pair (["From me", "=46rom me"],
- [".", "=2E"],
- [" From you", " From you"]) {
- my $out = MIME::Decoder::QuotedPrint::encode_qp_really($pair->[0]);
- $T->ok_eq($out, $pair->[1],
- "bug 970725-DNA: QP use of RFC2049 guideline 8");
- }
-}
-
-#------------------------------
-# Bug 970626 from Sun, Tong <TSun(a)FS.com>
-#------------------------------
-# @history = $head->get_all('Received');
-#
-# The above code does not work. It confused me at the beginning. Then, I
-# found out it is only a spelling error: when I changed the 'Received' to
-# 'received', it works ( you know why ).
-{
- my $head = MIME::Head->new(["Received: first\n",
- "Received: second\n",
- "received: third\n",
- "Received: fourth\n",
- "subject: hi!\n"]);
- my @received = $head->get_all('Received');
- $T->ok_eqnum(int(@received),
- 4,
- "bug 970626-TS: header get_all() case problem fixed?");
-}
-
-#------------------------------
-# Bug 980430 from Jason L Tibbitts III <tibbs(a)hpc.uh.edu>
-#------------------------------
-# Boundary-parsing errors for this message.
-{
- my $parser = new MIME::Parser;
- $parser->output_to_core('ALL');
-# my $e = eval { $parser->parse_open("testin/jt-0498.msg") };
-# $T->ok_eqnum(($e and $e->parts),
-# 2,
-# "bug 980430-JT: did we get 2 parts?");
-}
-
-#------------------------------------------------------------
-$T->end;
-1;
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Parser.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Parser.t
deleted file mode 100644
index 0fad570..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Parser.t
+++ /dev/null
@@ -1,134 +0,0 @@
-use lib "./t";
-use MIME::Tools;
-
-use ExtUtils::TBone;
-use Globby;
-
-use strict;
-config MIME::Tools DEBUGGING=>0;
-
-use MIME::Parser;
-
-#------------------------------------------------------------
-
-# Set the counter, for filenames:
-my $Counter = 0;
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(12);
-
-# Check and clear the output directory:
-my $DIR = "./testout";
-((-d $DIR) && (-w $DIR)) or die "no output directory $DIR";
-unlink globby("$DIR/[a-z]*");
-
-
-#------------------------------------------------------------
-# BEGIN
-#------------------------------------------------------------
-
-my $parser;
-my $entity;
-my $msgno;
-my $infile;
-my $type;
-my $enc;
-
-
-#------------------------------------------------------------
-$T->msg("Create a parser");
-#------------------------------------------------------------
-
-
-
-
-
-#------------------------------------------------------------
-package MyParser;
-@MyParser::ISA = qw(MIME::Parser);
-sub output_path {
- my ($parser, $head) = @_;
-
- # Get the recommended filename:
- my $filename = $head->recommended_filename;
- if (defined($filename) && $parser->evil_filename($filename)) {
- $T->msg("Parser.t: ignoring an evil recommended filename ($filename)");
- $filename = undef; # forget it: it was evil
- }
- if (!defined($filename)) { # either no name or an evil name
- ++$Counter;
- $filename = "message-$Counter.dat";
- }
-
- # Get the output filename:
- my $outdir = $parser->output_dir;
- "$outdir/$filename";
-}
-package main;
-
-#------------------------------------------------------------
-
-$parser = new MyParser;
-$parser->output_dir($DIR);
-
-#------------------------------------------------------------
-$T->msg("Read a nested multipart MIME message");
-#------------------------------------------------------------
-open IN, "./testmsgs/multi-nested.msg" or die "open: $!";
-$entity = $parser->parse(\*IN);
-$T->ok($entity, "parse of nested multipart");
-
-#------------------------------------------------------------
-$T->msg("Check the various output files");
-#------------------------------------------------------------
-$T->ok((-s "$DIR/3d-vise.gif" == 419), "vise gif");
-$T->ok((-s "$DIR/3d-eye.gif" == 357) , "3d-eye gif");
-for $msgno (1..4) {
- $T->ok((-s "$DIR/message-$msgno.dat"), "message $msgno");
-}
-
-#------------------------------------------------------------
-$T->msg("Same message, but CRLF-terminated and no output path hook");
-#------------------------------------------------------------
-$parser = new MIME::Parser;
-{ local $^W = undef;
-$parser->output_dir($DIR);
-open IN, "./testmsgs/multi-nested2.msg" or die "open: $!";
-$entity = $parser->parse(\*IN);
-$T->ok($entity, "parse of CRLF-terminated message");
-}
-
-#------------------------------------------------------------
-$T->msg("Read a simple in-core MIME message, three ways");
-#------------------------------------------------------------
-my $data_scalar = <<EOF;
-Content-type: text/html
-
-<H1>This is test one.</H1>
-
-EOF
-my $data_scalarref = \$data_scalar;
-my $data_arrayref = [ map { "$_\n" } (split "\n", $data_scalar) ];
-my $data_test;
-
-$parser->output_to_core('ALL');
-foreach $data_test ($data_scalar, $data_scalarref, $data_arrayref) {
- $entity = $parser->parse_data($data_test);
- $T->ok(($entity and $entity->head->mime_type eq 'text/html') ,
- ((ref($data_test)||'NO') . "-REF"));
-}
-$parser->output_to_core('NONE');
-
-
-#------------------------------------------------------------
-$T->msg("Simple message, in two parts");
-#------------------------------------------------------------
-$entity = $parser->parse_two("./testin/simple.msgh", "./testin/simple.msgb");
-my $es = ($entity ? $entity->head->get('subject',0) : '');
-$T->ok(($es =~ /^Request for Leave$/),
- " parse of 2-part simple message (subj <$es>)");
-
-# Done!
-exit(0);
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Ref.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Ref.t
deleted file mode 100644
index 1a750c8..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Ref.t
+++ /dev/null
@@ -1,275 +0,0 @@
-use lib "./t";
-
-use MIME::Tools;
-use File::Path;
-use File::Basename;
-use ExtUtils::TBone;
-use Globby;
-use MIME::WordDecoder qw(unmime);
-
-use strict;
-config MIME::Tools DEBUGGING=>0;
-
-use MIME::Parser;
-
-my $T = typical ExtUtils::TBone;
-#print STDERR "\n";
-
-### Verify directory paths:
-(-d "testout") or die "missing testout directory\n";
-my $output_dir = $T->catdir(".", "testout", "Ref_t");
-
-### Get messages to process:
-my @refpaths = @ARGV;
-if (!@refpaths) {
- opendir DIR, "testmsgs" or die "opendir: $!\n";
- @refpaths = map { $T->catfile(".", "testmsgs", $_)
- } grep /\w.*\.ref$/, readdir(DIR);
- closedir DIR;
-}
-
-### Create checker:
-$T->begin(2 * int(@refpaths));
-
-### For each reference:
-foreach my $refpath (@refpaths) {
-
- ### Get message:
- my $msgpath = $refpath; $msgpath =~ s/\.ref$/.msg/;
-# print STDERR " $msgpath\n";
-
- ### Get reference, as ref to array:
- my $ref = read_ref($refpath);
- if ($ref->{Parser}{Message}) {
- $msgpath = $T->catfile(".", (split /\//, $ref->{Parser}{Message}));
- }
- $T->log("Trying $refpath [$msgpath]\n");
-
- ### Create parser which outputs to testout/scratch:
- my $parser = MIME::Parser->new;
- $parser->output_dir($output_dir);
- $parser->extract_nested_messages($ref->{Parser}{ExtractNested});
- $parser->extract_uuencode($ref->{Parser}{ExtractUuencode});
- $parser->output_to_core(0);
- $parser->ignore_errors(0);
-
- ### Set character set:
- my $tgt = $ref->{Parser}{Charset} || 'ISO-8859-1';
- my $wd;
- if ($tgt =~ /^ISO-8859-(\d+)/) {
- $wd = new MIME::WordDecoder::ISO_8859 $1;
- }
- else {
- $wd = new MIME::WordDecoder([uc($tgt) => 'KEEP',
- 'US-ASCII' => 'KEEP',
- '*' => 'WARN']);
- }
- $T->log("Default charset: $tgt");
- MIME::WordDecoder->default($wd);
-
- ### Pre-clean:
- rmtree($output_dir);
- (-d $output_dir) or mkpath($output_dir) or die "mkpath $output_dir: $!\n";
-
- ### Parse:
- my $ent = eval { $parser->parse_open($msgpath) };
- my $parse_error = $@;
-
- ### Output parse log:
- $T->msg("PARSE LOG FOR $refpath [$msgpath]");
- if ($parser->results) {
- $T->msg($parser->results->msgs);
- }
- else {
- $T->msg("Parse failed before results object was created");
- }
-
- ### Interpret results:
- if ($parse_error || !$ent) {
- $T->ok($ref->{Msg}{Fail},
- $refpath,
- Problem => $parse_error);
- }
- else {
- my $ok = eval { check_ref($msgpath, $ent, $ref) };
- $T->ok($ok,
- $refpath,
- ($@ ? (Error => $@) : ()),
- Message => $msgpath,
- Parser => ($ref->{Parser}{Name} || 'default'));
- }
-
- ### Is purge working?
- my @a_files = list_dir($output_dir);
- my @p_files = $parser->filer->purgeable;
- $parser->filer->purge;
- my @z_files = list_dir($output_dir);
- $T->ok((@z_files == 0),
- "Did purge work?",
- Purgeable => \@p_files,
- Original => \@a_files,
- Remaining => \@z_files
- );
-
- ### Cleanup for real:
- rmtree($output_dir);
-}
-
-### Done!
-exit(0);
-1;
-
-#------------------------------
-
-sub list_dir {
- my $dir = shift;
- opendir DIR, $dir or die "opendir $dir; $!\n";
- my @files = grep !/^\.+$/, readdir DIR;
- closedir DIR;
- return sort @files;
-}
-
-#------------------------------
-
-sub read_ref {
- my $path = shift;
- open IN, "<$path" or die "open $path: $!\n";
- my $expr = join('', <IN>);
- close IN;
- my $ref = eval $expr; $@ and die "syntax error in $path\n";
- $ref;
-}
-
-#------------------------------
-
-sub trim {
- local $_ = shift;
- s/^\s*//;
- s/\s*$//;
- $_;
-}
-
-#------------------------------
-
-sub check_ref {
- my ($msgpath, $ent, $ref) = @_;
-
- ### For each Msg in the ref:
- MSG:
- foreach my $partname (sort keys %$ref) {
- $partname =~ /^(Msg|Part_)/ or next;
- my $msg_ref = $ref->{$partname};
- my $part = get_part($ent, $partname) ||
- die "no such part: $partname\n";
- my $head = $part->head; $head->unfold;
- my $body = $part->bodyhandle;
-
- ### For each attribute in the Msg:
- ATTR:
- foreach (sort keys %$msg_ref) {
-
- my $want = $msg_ref->{$_};
- my $got = undef;
-
- if (/^Boundary$/) {
- $got = $head->multipart_boundary;
- }
- elsif (/^From$/) {
- $got = trim($head->get("From", 0));
- $want = trim($want);
- }
- elsif (/^To$/) {
- $got = trim($head->get("To", 0));
- $want = trim($want);
- }
- elsif (/^Subject$/) {
- $got = trim($head->get("Subject", 0));
- $want = trim($want);
- }
- elsif (/^Charset$/) {
- $got = $head->mime_attr("content-type.charset");
- }
- elsif (/^Disposition$/) {
- $got = $head->mime_attr("content-disposition");
- }
- elsif (/^Type$/) {
- $got = $head->mime_type;
- }
- elsif (/^Encoding$/) {
- $got = $head->mime_encoding;
- }
- elsif (/^Filename$/) {
- $got = unmime $head->recommended_filename;
- }
- elsif (/^BodyFilename$/) {
- $got = (($body and $body->path)
- ? basename($body->path)
- : undef);
- }
- elsif (/^Preamble$/) {
- $got = join('', @{$part->preamble});
- }
- elsif (/^Epilogue$/) {
- $got = join('', @{$part->epilogue});
- }
- elsif (/^Size$/) {
- if ($head->mime_type =~ m{^(text|message)}) {
- $T->log("Skipping Size evaluation in text message ".
- "due to variations in local newline ".
- "conventions\n\n");
- next ATTR;
- }
- if ($body and $body->path) { $got = (-s $body->path) }
- }
- else {
- die "$partname: unrecognized reference attribute: $_\n";
- }
-
- ### Log this sub-test:
- $T->log("SUB-TEST: msg=$msgpath; part=$partname; attr=$_:\n");
- $T->log(" want: ".encode($want)."\n");
- $T->log(" got: ".encode($got )."\n");
- $T->log("\n");
-
- next ATTR if (!defined($want) and !defined($got));
- next ATTR if ($want eq $got);
- die "$partname: wanted qq{$want}, got qq{$got}\n";
- }
- }
-
- 1;
-}
-
-# Encode a string
-sub encode {
- local $_ = shift;
- return '<undef>' if !defined($_);
-
- s{([\n\t\x00-\x1F\x7F-\xFF\\\"])}
- {'\\'.sprintf("%02X",ord($1)) }exg;
- s{\\0A}{\\n}g;
- return qq{"$_"};
-}
-
-#------------------------------
-
-sub get_part {
- my ($ent, $name) = @_;
-
- if ($name eq 'Msg') {
- return $ent;
- }
- elsif ($name =~ /^Part_(.*)$/) {
- my @path = split /_/, $1;
- my $part = $ent;
- while (@path) {
- my $i = shift @path;
- $part = $part->parts($i - 1);
- }
- return $part;
- }
- undef;
-}
-
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Tmpfile.topt b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Tmpfile.topt
deleted file mode 100644
index ec5a91b..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Tmpfile.topt
+++ /dev/null
@@ -1,32 +0,0 @@
-use lib "./t";
-use MIME::Tools qw(tmpopen);
-use ExtUtils::TBone;
-use FileHandle;
-
-# Create checker:
-my $ntests = 800;
-my $T = typical ExtUtils::TBone;
-$T->begin($ntests);
-
-# Run the test:
-my $i;
-for ($i = 0; $i < $ntests; $i++) {
-### print STDERR "+";
- STDERR->flush;
- leak();
-}
-
-# leak
-sub leak {
- my $TMP = (tmpopen() || die "tmpopen: $!");
- print $TMP "Hello!\nGoodbye!\n";
- seek($TMP, 0, 0);
- my $line = <$TMP>;
- $T->ok($line, "Hello!\n");
- # no close! hopefully, the destructor will handle it!
-}
-
-
-
-
-1;
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/WordDecoder.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/WordDecoder.t
deleted file mode 100644
index 576cf93..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/WordDecoder.t
+++ /dev/null
@@ -1,45 +0,0 @@
-use lib "./t";
-
-use strict;
-use ExtUtils::TBone;
-
-use MIME::QuotedPrint qw(decode_qp);
-use MIME::WordDecoder;
-
-#------------------------------------------------------------
-# BEGIN
-#------------------------------------------------------------
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(10);
-
-my $mwd = (new MIME::WordDecoder::ISO_8859 1);
-{
- local($/) = '';
- open WORDS, "<testin/words.txt" or die "open: $!";
- while (<WORDS>) {
- s{\A\s+|\s+\Z}{}g; # trim
-
- my ($isgood, $expect, $enc) = split /\n/, $_, 3;
- $isgood = (uc($isgood) eq 'GOOD');
- $expect = eval $expect;
-
- my $dec = $mwd->decode($enc);
- $T->ok( ((($isgood && !$@) or (!$isgood && $@)) and
- ($isgood ? ($dec eq $expect) : 1)),
- 'Is it good?',
- IsGood => $isgood,
- Error => $@,
- Encoded => $enc,
- Decoded => $dec,
- Expectd => $expect);
- }
- close WORDS;
-}
-
-# Done!
-$T->end;
-exit(0);
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Words.t b/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Words.t
deleted file mode 100644
index a8a5921..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/t/Words.t
+++ /dev/null
@@ -1,44 +0,0 @@
-use lib "./t";
-
-use strict;
-use ExtUtils::TBone;
-
-use MIME::QuotedPrint qw(decode_qp);
-use MIME::Words qw(decode_mimewords);
-
-#------------------------------------------------------------
-# BEGIN
-#------------------------------------------------------------
-
-# Create checker:
-my $T = typical ExtUtils::TBone;
-$T->begin(10);
-
-{
- local($/) = '';
- open WORDS, "<testin/words.txt" or die "open: $!";
- while (<WORDS>) {
- s{\A\s+|\s+\Z}{}g; # trim
-
- my ($isgood, $expect, $enc) = split /\n/, $_, 3;
- $isgood = (uc($isgood) eq 'GOOD');
- $expect = eval $expect;
-
- my $dec = decode_mimewords($enc);
- $T->ok( ((($isgood && !$@) or (!$isgood && $@)) and
- ($isgood ? ($dec eq $expect) : 1)),
- 'Is it good?',
- IsGood => $isgood,
- Error => $@,
- Encoded => $enc,
- Decoded => $dec,
- Expectd => $expect);
- }
- close WORDS;
-}
-
-# Done!
-$T->end;
-exit(0);
-1;
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/ak-0696.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/ak-0696.msg
deleted file mode 100644
index ef3b2f9..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/ak-0696.msg
+++ /dev/null
@@ -1,112 +0,0 @@
-From specht(a)kulturbox.de Thu Jun 20 08:35:23 1996
-Date: Thu, 20 Jun 1996 08:35:17 +0200
-From: Juergen Specht <specht(a)kulturbox.de>
-Organization: KULTURBOX
-X-Mailer: Mozilla 2.02 (WinNT; I)
-MIME-Version: 1.0
-To: andreas.koenig(a)mind.de, kun(a)pop.combox.de, 101762.2307(a)compuserve.com
-Subject: [Fwd: Re: 34Mbit/s Netz]
-Content-Type: MULTIPART/MIXED; boundary="------------70522FC73543"
-X-Filter: mailagent [version 3.0 PL44] for k@.in-berlin.de
-
-This is a multi-part message in MIME format.
-
---------------70522FC73543
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
---
-Juergen Specht - KULTURBOX
-
---------------70522FC73543
-Content-Type: message/rfc822
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline
-
-X-POP3-Rcpt: specht@trachea
-Return-Path: hermes
-Received: (from hermes@localhost) by kulturbox.netmbx.de (8.7.1/8.7.1) id SAA04513 for specht; Wed, 19 Jun 1996 18:30:12 +0200
-Received: by netmbx.netmbx.de (/\==/\ Smail3.1.28.1)
- from mail.cs.tu-berlin.de with smtp
- id <m0uWPrO-0004wpC>; Wed, 19 Jun 96 18:12 MES
-Received: (from nobody@localhost) by mail.cs.tu-berlin.de (8.6.12/8.6.12) id SAA12413; Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Date: Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Message-Id: <199606191626.SAA12413(a)mail.cs.tu-berlin.de>
-Resent-From: nobody(a)cs.tu-berlin.de
-Resent-To: kultur(a)kulturbox.netmbx.de
-Received: from gatekeeper.telekom.de ([194.25.15.11]) by mail.cs.tu-berlin.de (8.6.12/8.6.12) with SMTP id SAA11678 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:11:29 +0200
-Received: from ULM02.mnh.telekom.de by gatekeeper.telekom.de; (5.65v3.0/1.1.8.2/02Aug95-0132PM)
- id AA01376; Wed, 19 Jun 1996 18:11:27 +0200
-Received: from ulm02.mnh.telekom.de (deuschle(a)mnh.telekom.de) by ULM02.mnh.telekom.de (8.6.10/3) with SMTP id SAA30680 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:14:40 GMT
-Message-Id: <199606191814.SAA30680(a)ULM02.mnh.telekom.de>
-X-Sender: deuschle(a)ulm02.mnh.telekom.de
-X-Mailer: Windows Eudora Version 1.4.4
-Mime-Version: 1.0
-Content-Type: text/plain; charset="iso-8859-1"
-Content-Transfer-Encoding: quoted-printable
-Date: Wed, 19 Jun 1996 18:12:02 +0200
-To: Juergen Specht <specht(a)kulturbox.de>
-From: deuschle(a)mnh.telekom.de (Guenter Deuschle)
-Subject: Re: 34Mbit/s Netz
-X-Mozilla-Status: 0011
-
-Hallo Herr Specht,
-entschuldigen Sie vorab, dass ich Ihnen nicht telefonisch zur Verfuegung
-stehe, ich Praesentationen gehalten/ noch zu halten und viele
-Kundennachfragen zu projektieren. Nach Informationen des Produkt-Managers
-Temme steht der POP schon zur Verf=FCgung! Standort: voraussichtlich:
-Winterfeldstr. 21, 10781 Berlin.
-Der POP hat zur Zeit direkte 34M-Anbindungen zu folgenden Orten: Rostock,
-Hamburg, Hannover & Leipzig. 4 weitere werden in kuerze in Betrieb gehen.
-Damit haben Sie einen Besonderen Sicherheitsstandard verfuegbar!
-Kontakt muessen Sie ueber Ihre oerltliche Vertriebseinheit aufnehmen:
-entweder den Geschaefts-Kunden-Vertrieb oder das GrossKundenManagement.
-Diese Vertriebseinheiten greifen auf den oertlichen Technischen
-Vertriebs-Support zu. Die Informationen werden ueber TVS zur Vertriebseiheit
-gegeben und dann zu Ihnen.
- Sie benoetigen eine Standleitung von Ihrer Lokation zum Internet-POP
-Uebergabepunkt zu Ihrem Info-Server ist ein CISCO 1000-Router. Dann zahlen
-Sie neben den monatlichen Kosten fuer die Standleitung die Kosten fuer den
-Internet-Zugang: zB bei 64k: 1500DM bei 2GByte Freivolumen. 128K: 3000 DM
-bei 5 GB Freivolumen & 2M: 30.000 DM bei 50GB Freivolumen.
-Freundliche Gruesse=20
-Guenter Deuschle
-
-
->Sehr geehrter Herr Deuschle,
->Sie sind mir von Herrn Meyendriesch empfohlen worden.
->Ich versuche Informationen ueber das T-eigene 34Mbit/s Netz und den=20
->lokalen Pop-Berlin rauszufinden, bzw. was ein Anschluss kostet und=20
->wo man ihn herbekommt. Laut Herrn Schnick in Berlin gibt es den=20
->T-Pop nicht, laut Traceroute von Herrn Meyendriesch sehrwohl. Auch=20
->ist dies Netz in der IX vom Mai 96 erwaehnt.
->Koennen Sie mir helfen?
->
->MfG
->--=20
->Juergen Specht - KULTURBOX
->
->
-
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-Dipl.-Ing. Guenter D E U S C H L E
-Deutsche Telekom AG Niederlassung 3 Hannover
-GrossKundenManagement - Techn. Vertriebs-Support:
-Team-Leiter Internet Online-Dienste
----------------------------------------------------
-GrKM-TVS-IOD Tel: +49-511-333-2772
-Vahrenwalder-Str. 245 FAX: +49-511-333-2751
-30179 Hannover eMail: deuschle(a)mnh.telekom.de=20
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-
-
-
-
---------------70522FC73543--
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.txt b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.txt
deleted file mode 100644
index 7ded12e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.txt
+++ /dev/null
@@ -1,173 +0,0 @@
-From - Mon Dec 30 07:59:17 1996
-Received: from rhine.gsfc.nasa.gov (rhine.gsfc.nasa.gov [192.150.28.74]) by enteract.com (8.8.4/8.7.6) with ESMTP id RAA12395 for <eryq(a)enteract.com>; Sun, 22 Dec 1996 17:44:16 -0600 (CST)
-Received: from anna.in-berlin.de (anna.in-berlin.de [193.175.21.66]) by rhine.gsfc.nasa.gov (8.8.3/8.8.3) with SMTP id SAA22845 for <eryq(a)rhine.gsfc.nasa.gov>; Sun, 22 Dec 1996 18:43:59 -0500 (EST)
-Received: by anna.in-berlin.de (940816.SGI.8.6.9/940406.SGI)
- id AAA05063; Mon, 23 Dec 1996 00:42:39 +0100
-Date: Mon, 23 Dec 1996 00:42:39 +0100
-Message-Id: <199612222342.AAA05063(a)anna.in-berlin.de>
-X-UIDL: 851954010.073
-From: Andreas Koenig <k(a)anna.in-berlin.de>
-To: Eryq <eryq(a)rhine.gsfc.nasa.gov>
-Subject: MIME::Parser fails on this message
-Status: U
-X-Mozilla-Status: 0001
-
-Hi, Eryq,
-
-I hope, all's well! In case you're on holidays, happy holidays! In
-case you're hacking, I have something to crack for you. In case you're
-busy, good luck with your work!
-
-Today I got a message that resulted in
-
-k@anna:~% perl Mail/unmime.it < Mail/mh/mime/94
-MIME::ParserBase::parse_preamble() unexpected eof in preamble
-couldn't parse MIME stream at Mail/unmime.it line 78, <STDIN> chunk 160.
-zsh: exit 2 perl Mail/unmime.it < Mail/mh/mime/94
-
-
-I append the original mail uuencoded.
-
-
-All the best,
-andreas
-
-begin 600 MP.fails.for.this
-M4F5C96EV960Z(&9R;VT@=7)I96QA+FEN+6)E<FQI;BYD92!B>2!A;FYA+FEN
-M+6)E<FQI;BYD92!V:6$@4TU44"`H.30P.#$V+E-'22XX+C8N.2\Y-#`T,#8N
-M4T=)*0H)9F]R(#QK0&%N;F$N:6XM8F5R;&EN+F1E/B!I9"!!04$P-#0S-CL@
-M36]N+"`R,R!$96,(a),3DY-B`P,#HP.#HP,B`K,#$P,`I297-E;G0M1G)O;3H@
-M:V]E;FEG0&9R86YZ+G=W+E15+4)E<FQI;BY$10I296-E:79E9#H@8GD@=7)I
-M96QA+FEN+6)E<FQI;BYD92`H+UQO;R]<(%-M86EL,RXQ+C(Y+C$@(S(Y+C@I
-M"@EI9"`\;3!V8G@P:BTP,#!,<V)#0'5R:65L82YI;BUB97)L:6XN9&4^.R!-
-M;VXL(#(S($1E8R`Y-B`P,#HP."!-150*4F5C96EV960Z(&)Y(&UE=&AA;BYC
-M:&5M:64N9G4M8F5R;&EN+F1E("A3;6%I;#,N,2XR.2XQ*0H)("!F<F]M(&9R
-M86YZ+G=W+E15+4)E<FQI;BY$12`H,3,P+C$T.2XR,#`N-3$I('=I=&@@<VUT
-M<`H)("!I9"`\;3!V8G=Z6"TP,#`Y=F-#/CL@36]N+"`R,R!$96,@.38@,#`Z
-M,#<@3454"E)E8V5I=F5D.B`H9G)O;2!K;V5N:6=`;&]C86QH;W-T*2!B>2!F
-M<F%N>BYW=RY452U"97)L:6XN1$4@*#@N-RXS+S@N-RXS*2!I9"!804$P,3<V
-M,2!F;W(@:T!A;FYA+FEN+6)E<FQI;BYD93L@4W5N+"`R,B!$96,@,3DY-B`R
-M,SHR-3HQ,"`K,#$P,"`H0T54*0I297-E;G0M1&%T93H@4W5N+"`R,B!$96,@
-M,3DY-B`R,SHR-3HQ,"`K,#$P,"`H0T54*0I297-E;G0M365S<V%G92U)9#H@
-M/#$Y.38Q,C(R,C(R-2Y804$P,3<V,4!F<F%N>BYW=RY452U"97)L:6XN1$4^
-M"E)E<V5N="U4;SH@:PI296-E:79E9#H@9G)O;2!M86EL9WIR>BY452U"97)L
-M:6XN1$4@*&UA:6QG>G)Z+E15+4)E<FQI;BY$12!;,3,P+C$T.2XT+C$P72D@
-M8GD@9G)A;GHN=W<N5%4M0F5R;&EN+D1%("@X+C<N,R\X+C<N,RD@=VET:"!%
-M4TU44"!I9"!804$P,3<U-"!F;W(@/&MO96YI9T!F<F%N>BYW=RY452U"97)L
-M:6XN1$4^.R!3=6XL(#(R($1E8R`Q.3DV(#(S.C(T.C,R("LP,3`P("A#150I
-M"E)E8V5I=F5D.B!F<F]M(&-H86QL96YG92YU<V-O;2YC;VT@*&%C='5A;&QY
-M(&UA:6PN=7-C;VTN8V]M*2`*("`@("`@("`@(&)Y(&UA:6QG>G)Z+E15+4)E
-M<FQI;BY$12!W:71H(%--5%`@*%!0*3L*("`@("`@("`@(%-U;BP@,C(@1&5C
-M(#$Y.38@,C,Z,3DZ,S4@*S`Q,#`*5&\Z(&MO96YI9T!F<F%N>BYW=RYT=2UB
-M97)L:6XN9&4*1G)O;3H@36%I;"!!9&UI;FES=')A=&]R(#Q0;W-T;6%S=&5R
-M0&-H86QL96YG92YU<V-O;2YC;VT^"E)E<&QY+51O.B!-86EL($%D;6EN:7-T
-M<F%T;W(@/%!O<W1M87-T97)`8VAA;&QE;F=E+G5S8V]M+F-O;3X*4W5B:F5C
-M=#H@36%I;"!3>7-T96T@17)R;W(@+2!2971U<FYE9"!-86EL"D1A=&4Z(%-U
-M;BP@,C(@1&5C(#$Y.38(a),3<Z,C$Z,3(@+3`U,#`*365S<V%G92U)1#H@/#$Y
-M.38Q,C(R,C(R,3$R+D%!13$V,C,U0&-H86QL96YG92YU<V-O;2YC;VT^"DU)
-M344M5F5R<VEO;CH@,2XP"D-O;G1E;G0M5'EP93H@;75L=&EP87)T+VUI>&5D
-M.R!";W5N9&%R>3TB/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]7R!?/2`*
-M("`@("`@("`@("`@("`R,C@S-C,P*#$V,C,U*2(*0V]N=&5N="U4<F%N<V9E
-M<BU%;F-O9&EN9SH@-T))5`I8+49I;'1E<CH@;6%I;&%G96YT(%MV97)S:6]N
-M(#,N,"!03#0T72!F;W(@:V]E;FEG0&9R86YZ+G=W+G1U+6)E<FQI;BYD90I8
-M+49I;'1E<CH@;6%I;&%G96YT(%MV97)S:6]N(#,N,"!03#0T72!F;W(@:T`N
-M:6XM8F5R;&EN+F1E"@HM+3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/5\@
-M7ST@"B`@("`@("`@("`@("`@,C(X,S8S,"@Q-C(S-2D*0V]N=&5N="UT>7!E
-M.B!T97AT+W!L86EN.R!C:&%R<V5T/2)U<RUA<V-I:2(*"E1H:7,@365S<V%G
-M92!W87,@=6YD96QI=F5R86)L92!D=64@=&\@=&AE(&9O;&QO=VEN9R!R96%S
-M;VXZ"@I4:&4@4')O9W)A;2U$96QI=F5R(&UO9'5L92!C;W5L9&XG="!D96QI
-M=F5R('1H92!M97-S86=E('1O(&]N92!O<B!M;W)E"F]F('1H92!I;G1E;F1E
-M9"!R96-I<&EE;G1S(&)E8V%U<V4@=&AE:7(@9&5L:79E<GD@<')O9W)A;2AS
-M*2!F86EL960N"E1H92!F;VQL;W=I;F<@97)R;W(@;65S<V%G97,@<')O=FED
-M92!T:&4@9&5T86EL<R!A8F]U="!E86-H(&9A:6QU<F4Z"@H@("`@(%1H92!D
-M96QI=F5R>2!P<F]G<F%M("(O<&%G97,O<&YE="]A9&UI;B]M86EL7W!R;V,N
-M<&PB('!R;V1U8V5D"B`@("`@=&AE(&9O;&QO=VEN9R!O=71P=70@=VAI;&4@
-M9&5L:79E<FEN9R!T:&4@;65S<V%G92!T;PH@("`@('!N971`=7-C;VTN8V]M
-M(`H@("`@(`H@("`@("`@("`@0V%N)W0@97AE8R`B+W5S<B]S8FEN+W-E;F1M
-M86EL("UT(CH@3F\@<W5C:"!F:6QE(&]R(&1I<F5C=&]R>2!A="`O<&%G97,O
-M<&YE="]A9&UI;B]M86EL7W!R;V,N<&P@;&EN92`Y-BP@/#X@;&EN92`Y,RX*
-M("`@("`@("`@($)R;VME;B!P:7!E"B`@("`@"B`@("`@5&AE('!R;V=R86T@
-M(B]P86=E<R]P;F5T+V%D;6EN+VUA:6Q?<')O8RYP;"(@97AI=&5D('=I=&@@
-M86X*("`@("!U;FMN;W=N('9A;'5E(&]F(#$T,2!W:&EL92!D96QI=F5R:6YG
-M('1H92!M97-S86=E('1O"B`@("`@<&YE=$!U<V-O;2YC;VT@"@I4:&4@;65S
-M<V%G92!W87,@;F]T(&1E;&EV97)E9"!T;SH@"@H@("`@('!N971`=7-C;VTN
-M8V]M"@I0;&5A<V4@<F5P;'D@=&\@4&]S=&UA<W1E<D!C:&%L;&5N9V4N=7-C
-M;VTN8V]M"FEF('EO=2!F965L('1H:7,@;65S<V%G92!T;R!B92!I;B!E<G)O
-M<BX*"BTM/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]7R!?/2`*("`@("`@
-M("`@("`@("`R,C@S-C,P*#$V,C,U*0I#;VYT96YT+71Y<&4Z(&UE<W-A9V4O
-M<F9C.#(R"D-O;G1E;G0M1&ES<&]S:71I;VXZ(&%T=&%C:&UE;G0*1&%T93H@
-M4W5N+"`R,B!$96,(a),3DY-B`R,CHR-#HR,2`K,#`P,`I-97-S86=E+4E$.B`\
-M(FUA:6QG>G)Z+E0N,#8Q.C(R+C$R+CDV+C(R+C(T+C(Q(D!452U"97)L:6XN
-M1$4^"@I296-E:79E9#H@9G)O;2!F<F%N>BYW=RY452U"97)L:6XN1$4@*%LQ
-M,S`N,30Y+C(P,"XU,5TI(`H@("`@("`@("`@8GD@8VAA;&QE;F=E+G5S8V]M
-M+F-O;2`H3F5T<V-A<&4@36%I;"!397)V97(@=C(N,#(I('=I=&@@15--5%`@
-M"B`@("`@("`@("!I9"!!04$V.#4@9F]R(#QP;F5T0'5S8V]M+F-O;3X[(%=E
-M9"P@,3@@1&5C(#$Y.38@,38Z-3@Z,S`(a)+3`U,#`*4F5C96EV960Z(&9R;VT@
-M;6%I;&=Z<GHN5%4M0F5R;&EN+D1%("AM86EL9WIR>BY452U"97)L:6XN1$4@
-M6S$S,"XQ-#DN-"XQ,%TI(`H@("`@("`@("`@8GD@9G)A;GHN=W<N5%4M0F5R
-M;&EN+D1%("@X+C<N,R\X+C<N,RD@=VET:"!%4TU44"!I9"!304$R,S0P,"`*
-M("`@("`@("`@(&9O<B`\;7-Q;'!E<FQ`9G)A;GHN=W<N='4M8F5R;&EN+F1E
-M/CL*("`@("`@("`@(%=E9"P@,3@@1&5C(#$Y.38@,3@Z-3DZ,C$(a)*S`Q,#`@
-M*$-%5"D*4F5C96EV960Z(&9R;VT@86YN82YI;BUB97)L:6XN9&4@8GD@;6%I
-M;&=Z<GHN5%4M0F5R;&EN+D1%('=I=&@@4TU44"`H4%`I.PH@("`@("`@("`@
-M5V5D+"`Q."!$96,@,3DY-B`Q.#HU.3HQ,2`K,#$P,`I296-E:79E9#H@8GD@
-M86YN82YI;BUB97)L:6XN9&4@*#DT,#@Q-BY31TDN."XV+CDO.30P-#`V+E-'
-M22D@:60@4T%!,3DT.3$["B`@("`@("`@("!7960L(#$X($1E8R`Q.3DV(#$X
-M.C4U.C(Q("LP,3`P"D1A=&4Z(%=E9"P@,3@@1&5C(#$Y.38@,3(a)Z-34Z,C$@
-M*S`Q,#`*365S<V%G92U)9#H(a)/#$Y.38Q,C$X,3<U-2Y304$Q.30Y,4!A;FYA
-M+FEN+6)E<FQI;BYD93X*1G)O;3H@06YD<F5A<R!+;V5N:6<@/&M`86YN82YI
-M;BUB97)L:6XN9&4^"E1O.B!M:6-H96QL94!E=6=E;F4N;F5T"D-#.B!M<W%L
-M<&5R;$!F<F%N>BYW=RYT=2UB97)L:6XN9&4*26XM<F5P;'DM=&\Z(#QV,#,P
-M,#<X,#!A961D8V-D-#0X9#!`6S(P-BXQ,#`N,3<T+C(P,UT^("AM97-S86=E
-M(&9R;VT@36EC:&5L;&4@0G)O=VYS=V]R=&@@;VX@5V5D+"`Q."!$96,@,3DY
-M-B`P.3HS,CHP,B`M,#<P,"D*4W5B:F5C=#H@2$]75$\@*%=A<SH@=6YS=6)S
-M8W)I8F4I"@H^/CX^/B!/;B!7960L(#$X($1E8R`Q.3DV(#`Y.C,R.C`R("TP
-M-S`P+`H^/CX^/B!-:6-H96QL92!"<F]W;G-W;W)T:`H^/CX^/B!W:&\@8V%N
-M(&)E(')E86-H960@870Z(&UI8VAE;&QE0&5U9V5N92YN970*/CX^/CX@*'=H
-M;W-E(&-O;6UE;G1S(&%R92!C:71E9"!B96QO=R!W:71H("(@;6EC:&5L;&4^
-M("(I+`H^/CX^/B!S96YT('1H92!C:71E9"!M97-S86=E(&-O;F-E<FYI;F<@
-M=&AE('-U8FIE8W0@;V8@(G5N<W5B<V-R:6)E(@H^/CX^/B!T=VEC92!T;R!T
-M:&4@=VAO;&4@;&ES="!O9B!S=6)S8W)I8F5R<PH*(&UI8VAE;&QE/B!U;G-U
-M8G-C<FEB90H*(&UI8VAE;&QE/B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
-M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BH*(&UI8VAE;&QE
-M/B!-:6-H96QL92!"<F]W;G-W;W)T:`H@;6EC:&5L;&4^(%-Y<W1E;2!!9&UI
-M;FES=')A=&]R"@H@;6EC:&5L;&4^($EN=&5R;F5T($UA<FME=&EN9R!397)V
-M:6-E<R`@("`@("`@("`@("`@;6EC:&5L;&5`975G96YE+FYE=`H@;6EC:&5L
-M;&4^(#(S,#`@3V%K;6]N="!787DL(",R,#D@("`@("`@("`@("`@("`@("`@
-M("`@("`@(#4T,2TT,S$M,S,W-`H@;6EC:&5L;&4^($5U9V5N92P@3U(@.3<T
-M,#(@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@($9!6"`T,S$M-S,T
-M-0H@;6EC:&5L;&4^("HJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
-M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*@H*5V5L8V]M92!N97<@<W5B
-M<V-R:6)E<B$*"EEO=2=V92!J;VEN960@=&AE(&UA:6QI;F<@;&ES="!O9B!U
-M;G-U8G-C<FEB97)S)R!C;VQL96-T960@=VES9&]M(&]F"G5N<W5B<V-R:6)E
-M(&UE<W-A9V5S+B!296QA>"$*"EEO=2!W;VXG="!H879E('1O('-U8G-C<FEB
-M92!T;R!A;GD@;6%I;&EN9R!L:7-T(&9O<B!T:&4@<F5S="!O9B!Y;W5R"FQI
-M9F4N($)E='1E<B!Y970L('EO=2!C86XG="!E=F5N('5N<W5B<V-R:6)E(2!3
-M;R!J=7-T(&QE86X@8F%C:R!A;F0*96YJ;WD@=&\@=V%T8V@@>6]U<B!)3R!S
-M=')E86T@;V8@;6EL;&EO;G,@;V8@=6YS=6)S8W)I8F4@;65S<V%G97,*9&%I
-M;'DN"@I)<VXG="!T:&%T(&9A<B!M;W)E('1H86X@979E<GET:&EN9R!Y;W4@
-M979E<B!D87)E9"!T;R!D<F5A;2!O9C\*"F%N9')E87,*"E`N4RX@5&AI<R!W
-M87,@<&]S=&5D(#$R(&1A>7,@86=O.@H*1&%T93H(a)1G)I+"`V($1E8R`Q.3DV
-M(#$U.C0W.C4Q("LP,3`P"E1O.B!M<W%L<&5R;$!F<F%N>BYW=RYT=2UB97)L
-M:6XN9&4*4W5B:F5C=#H@2&]W(%1O(%5N<W5B<V-R:6)E("AS96UI+7)E9W5L
-M87(@<&]S=&EN9RD*"E1O(&=E="!O9F8@=&AI<R!L:7-T+"!S96YD(&UA:6P@
-M=&\*+2TM+2TM+2TM+2TM+2TM+2TM+2T*"B`@("!M86IO<F1O;6]`9G)A;GHN
-M=W<N='4M8F5R;&EN+F1E"@IW:71H('1H92!F;VQL;W=I;F<@=V]R9',@:6X@
-M=&AE(&)O9'D@;V8@=&AE(&UE<W-A9V4@*'-U8FIE8W0@;&EN92!W:6QL"F)E
-M(&EG;F]R960I.@H*("`@('5N<W5B<V-R:6)E(&US<6QP97)L(#Q?:6YS97)T
-M7WEO=7)?<W5B<V-R:7!T:6]N7V%D9')E<W-?:&5R95\^"@H*5&\@9FEN9"!O
-M=70@=VAO('EO=2!A<F4@<W5B<V-R:6)E9"!A<RP@<V5N9"!M86EL('1O"BTM
-M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2T*"B`@("!M86IO
-M<F1O;6]`9G)A;GHN=W<N='4M8F5R;&EN+F1E"@IW:71H(&]N;'D@;F]T:&EN
-M9R!B=70*"B`@("!W:&\@;7-Q;'!E<FP*"FEN('1H92!B;V1Y(&]F('1H92!M
-M97-S86=E.@H*"DEF('EO=2!E;F-O=6YT97(@<')O8FQE;7,L"BTM+2TM+2TM
-M+2TM+2TM+2TM+2TM+2TM+2T*"G!L96%S92!T<GD@<V5N9&EN9R!T:&4@;65S
-M<V%G92`B:&5L<"(@=&\@;6%J;W)D;VUO0&9R86YZ+G=W+G1U+6)E<FQI;BYD
-M92X*"@I(;W!E('1H870@:&5L<"P*86YD<F5A<PH*"DY/5$4Z(&EF('1H92!A
-M8F]V92!R96-I<&4@9&]E<R!N;W0@=V]R:R!F;W(@>6]U+"!A<VL@;64@9F]R
-M(&%S<VES=&%N8V4*86YD(&1O(&YO="!S<&%M('1H92!L:7-T('=I=&@@=&AE
-M(')E<75E<W0N(%1H86YK('EO=2$*"@HM+3T]/3T]/3T]/3T]/3T]/3T]/3T]
-L/3T]/3T]/5\@7ST@"B`@("`@("`@("`@("`@,C(X,S8S,"@Q-C(S-2DM+0H]
-`
-end
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.uu b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.uu
deleted file mode 100644
index b1413c5..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/andreas-1296.uu
+++ /dev/null
@@ -1,139 +0,0 @@
-begin 600 MP.fails.for.this
-M4F5C96EV960Z(&9R;VT@=7)I96QA+FEN+6)E<FQI;BYD92!B>2!A;FYA+FEN
-M+6)E<FQI;BYD92!V:6$@4TU44"`H.30P.#$V+E-'22XX+C8N.2\Y-#`T,#8N
-M4T=)*0H)9F]R(#QK0&%N;F$N:6XM8F5R;&EN+F1E/B!I9"!!04$P-#0S-CL@
-M36]N+"`R,R!$96,(a),3DY-B`P,#HP.#HP,B`K,#$P,`I297-E;G0M1G)O;3H@
-M:V]E;FEG0&9R86YZ+G=W+E15+4)E<FQI;BY$10I296-E:79E9#H@8GD@=7)I
-M96QA+FEN+6)E<FQI;BYD92`H+UQO;R]<(%-M86EL,RXQ+C(Y+C$@(S(Y+C@I
-M"@EI9"`\;3!V8G@P:BTP,#!,<V)#0'5R:65L82YI;BUB97)L:6XN9&4^.R!-
-M;VXL(#(S($1E8R`Y-B`P,#HP."!-150*4F5C96EV960Z(&)Y(&UE=&AA;BYC
-M:&5M:64N9G4M8F5R;&EN+F1E("A3;6%I;#,N,2XR.2XQ*0H)("!F<F]M(&9R
-M86YZ+G=W+E15+4)E<FQI;BY$12`H,3,P+C$T.2XR,#`N-3$I('=I=&@@<VUT
-M<`H)("!I9"`\;3!V8G=Z6"TP,#`Y=F-#/CL@36]N+"`R,R!$96,@.38@,#`Z
-M,#<@3454"E)E8V5I=F5D.B`H9G)O;2!K;V5N:6=`;&]C86QH;W-T*2!B>2!F
-M<F%N>BYW=RY452U"97)L:6XN1$4@*#@N-RXS+S@N-RXS*2!I9"!804$P,3<V
-M,2!F;W(@:T!A;FYA+FEN+6)E<FQI;BYD93L@4W5N+"`R,B!$96,@,3DY-B`R
-M,SHR-3HQ,"`K,#$P,"`H0T54*0I297-E;G0M1&%T93H@4W5N+"`R,B!$96,@
-M,3DY-B`R,SHR-3HQ,"`K,#$P,"`H0T54*0I297-E;G0M365S<V%G92U)9#H@
-M/#$Y.38Q,C(R,C(R-2Y804$P,3<V,4!F<F%N>BYW=RY452U"97)L:6XN1$4^
-M"E)E<V5N="U4;SH@:PI296-E:79E9#H@9G)O;2!M86EL9WIR>BY452U"97)L
-M:6XN1$4@*&UA:6QG>G)Z+E15+4)E<FQI;BY$12!;,3,P+C$T.2XT+C$P72D@
-M8GD@9G)A;GHN=W<N5%4M0F5R;&EN+D1%("@X+C<N,R\X+C<N,RD@=VET:"!%
-M4TU44"!I9"!804$P,3<U-"!F;W(@/&MO96YI9T!F<F%N>BYW=RY452U"97)L
-M:6XN1$4^.R!3=6XL(#(R($1E8R`Q.3DV(#(S.C(T.C,R("LP,3`P("A#150I
-M"E)E8V5I=F5D.B!F<F]M(&-H86QL96YG92YU<V-O;2YC;VT@*&%C='5A;&QY
-M(&UA:6PN=7-C;VTN8V]M*2`*("`@("`@("`@(&)Y(&UA:6QG>G)Z+E15+4)E
-M<FQI;BY$12!W:71H(%--5%`@*%!0*3L*("`@("`@("`@(%-U;BP@,C(@1&5C
-M(#$Y.38@,C,Z,3DZ,S4@*S`Q,#`*5&\Z(&MO96YI9T!F<F%N>BYW=RYT=2UB
-M97)L:6XN9&4*1G)O;3H@36%I;"!!9&UI;FES=')A=&]R(#Q0;W-T;6%S=&5R
-M0&-H86QL96YG92YU<V-O;2YC;VT^"E)E<&QY+51O.B!-86EL($%D;6EN:7-T
-M<F%T;W(@/%!O<W1M87-T97)`8VAA;&QE;F=E+G5S8V]M+F-O;3X*4W5B:F5C
-M=#H@36%I;"!3>7-T96T@17)R;W(@+2!2971U<FYE9"!-86EL"D1A=&4Z(%-U
-M;BP@,C(@1&5C(#$Y.38(a),3<Z,C$Z,3(@+3`U,#`*365S<V%G92U)1#H@/#$Y
-M.38Q,C(R,C(R,3$R+D%!13$V,C,U0&-H86QL96YG92YU<V-O;2YC;VT^"DU)
-M344M5F5R<VEO;CH@,2XP"D-O;G1E;G0M5'EP93H@;75L=&EP87)T+VUI>&5D
-M.R!";W5N9&%R>3TB/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]7R!?/2`*
-M("`@("`@("`@("`@("`R,C@S-C,P*#$V,C,U*2(*0V]N=&5N="U4<F%N<V9E
-M<BU%;F-O9&EN9SH@-T))5`I8+49I;'1E<CH@;6%I;&%G96YT(%MV97)S:6]N
-M(#,N,"!03#0T72!F;W(@:V]E;FEG0&9R86YZ+G=W+G1U+6)E<FQI;BYD90I8
-M+49I;'1E<CH@;6%I;&%G96YT(%MV97)S:6]N(#,N,"!03#0T72!F;W(@:T`N
-M:6XM8F5R;&EN+F1E"@HM+3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/5\@
-M7ST@"B`@("`@("`@("`@("`@,C(X,S8S,"@Q-C(S-2D*0V]N=&5N="UT>7!E
-M.B!T97AT+W!L86EN.R!C:&%R<V5T/2)U<RUA<V-I:2(*"E1H:7,@365S<V%G
-M92!W87,@=6YD96QI=F5R86)L92!D=64@=&\@=&AE(&9O;&QO=VEN9R!R96%S
-M;VXZ"@I4:&4@4')O9W)A;2U$96QI=F5R(&UO9'5L92!C;W5L9&XG="!D96QI
-M=F5R('1H92!M97-S86=E('1O(&]N92!O<B!M;W)E"F]F('1H92!I;G1E;F1E
-M9"!R96-I<&EE;G1S(&)E8V%U<V4@=&AE:7(@9&5L:79E<GD@<')O9W)A;2AS
-M*2!F86EL960N"E1H92!F;VQL;W=I;F<@97)R;W(@;65S<V%G97,@<')O=FED
-M92!T:&4@9&5T86EL<R!A8F]U="!E86-H(&9A:6QU<F4Z"@H@("`@(%1H92!D
-M96QI=F5R>2!P<F]G<F%M("(O<&%G97,O<&YE="]A9&UI;B]M86EL7W!R;V,N
-M<&PB('!R;V1U8V5D"B`@("`@=&AE(&9O;&QO=VEN9R!O=71P=70@=VAI;&4@
-M9&5L:79E<FEN9R!T:&4@;65S<V%G92!T;PH@("`@('!N971`=7-C;VTN8V]M
-M(`H@("`@(`H@("`@("`@("`@0V%N)W0@97AE8R`B+W5S<B]S8FEN+W-E;F1M
-M86EL("UT(CH@3F\@<W5C:"!F:6QE(&]R(&1I<F5C=&]R>2!A="`O<&%G97,O
-M<&YE="]A9&UI;B]M86EL7W!R;V,N<&P@;&EN92`Y-BP@/#X@;&EN92`Y,RX*
-M("`@("`@("`@($)R;VME;B!P:7!E"B`@("`@"B`@("`@5&AE('!R;V=R86T@
-M(B]P86=E<R]P;F5T+V%D;6EN+VUA:6Q?<')O8RYP;"(@97AI=&5D('=I=&@@
-M86X*("`@("!U;FMN;W=N('9A;'5E(&]F(#$T,2!W:&EL92!D96QI=F5R:6YG
-M('1H92!M97-S86=E('1O"B`@("`@<&YE=$!U<V-O;2YC;VT@"@I4:&4@;65S
-M<V%G92!W87,@;F]T(&1E;&EV97)E9"!T;SH@"@H@("`@('!N971`=7-C;VTN
-M8V]M"@I0;&5A<V4@<F5P;'D@=&\@4&]S=&UA<W1E<D!C:&%L;&5N9V4N=7-C
-M;VTN8V]M"FEF('EO=2!F965L('1H:7,@;65S<V%G92!T;R!B92!I;B!E<G)O
-M<BX*"BTM/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]/3T]7R!?/2`*("`@("`@
-M("`@("`@("`R,C@S-C,P*#$V,C,U*0I#;VYT96YT+71Y<&4Z(&UE<W-A9V4O
-M<F9C.#(R"D-O;G1E;G0M1&ES<&]S:71I;VXZ(&%T=&%C:&UE;G0*1&%T93H@
-M4W5N+"`R,B!$96,(a),3DY-B`R,CHR-#HR,2`K,#`P,`I-97-S86=E+4E$.B`\
-M(FUA:6QG>G)Z+E0N,#8Q.C(R+C$R+CDV+C(R+C(T+C(Q(D!452U"97)L:6XN
-M1$4^"@I296-E:79E9#H@9G)O;2!F<F%N>BYW=RY452U"97)L:6XN1$4@*%LQ
-M,S`N,30Y+C(P,"XU,5TI(`H@("`@("`@("`@8GD@8VAA;&QE;F=E+G5S8V]M
-M+F-O;2`H3F5T<V-A<&4@36%I;"!397)V97(@=C(N,#(I('=I=&@@15--5%`@
-M"B`@("`@("`@("!I9"!!04$V.#4@9F]R(#QP;F5T0'5S8V]M+F-O;3X[(%=E
-M9"P@,3@@1&5C(#$Y.38@,38Z-3@Z,S`(a)+3`U,#`*4F5C96EV960Z(&9R;VT@
-M;6%I;&=Z<GHN5%4M0F5R;&EN+D1%("AM86EL9WIR>BY452U"97)L:6XN1$4@
-M6S$S,"XQ-#DN-"XQ,%TI(`H@("`@("`@("`@8GD@9G)A;GHN=W<N5%4M0F5R
-M;&EN+D1%("@X+C<N,R\X+C<N,RD@=VET:"!%4TU44"!I9"!304$R,S0P,"`*
-M("`@("`@("`@(&9O<B`\;7-Q;'!E<FQ`9G)A;GHN=W<N='4M8F5R;&EN+F1E
-M/CL*("`@("`@("`@(%=E9"P@,3@@1&5C(#$Y.38@,3@Z-3DZ,C$(a)*S`Q,#`@
-M*$-%5"D*4F5C96EV960Z(&9R;VT@86YN82YI;BUB97)L:6XN9&4@8GD@;6%I
-M;&=Z<GHN5%4M0F5R;&EN+D1%('=I=&@@4TU44"`H4%`I.PH@("`@("`@("`@
-M5V5D+"`Q."!$96,@,3DY-B`Q.#HU.3HQ,2`K,#$P,`I296-E:79E9#H@8GD@
-M86YN82YI;BUB97)L:6XN9&4@*#DT,#@Q-BY31TDN."XV+CDO.30P-#`V+E-'
-M22D@:60@4T%!,3DT.3$["B`@("`@("`@("!7960L(#$X($1E8R`Q.3DV(#$X
-M.C4U.C(Q("LP,3`P"D1A=&4Z(%=E9"P@,3@@1&5C(#$Y.38@,3(a)Z-34Z,C$@
-M*S`Q,#`*365S<V%G92U)9#H(a)/#$Y.38Q,C$X,3<U-2Y304$Q.30Y,4!A;FYA
-M+FEN+6)E<FQI;BYD93X*1G)O;3H@06YD<F5A<R!+;V5N:6<@/&M`86YN82YI
-M;BUB97)L:6XN9&4^"E1O.B!M:6-H96QL94!E=6=E;F4N;F5T"D-#.B!M<W%L
-M<&5R;$!F<F%N>BYW=RYT=2UB97)L:6XN9&4*26XM<F5P;'DM=&\Z(#QV,#,P
-M,#<X,#!A961D8V-D-#0X9#!`6S(P-BXQ,#`N,3<T+C(P,UT^("AM97-S86=E
-M(&9R;VT@36EC:&5L;&4@0G)O=VYS=V]R=&@@;VX@5V5D+"`Q."!$96,@,3DY
-M-B`P.3HS,CHP,B`M,#<P,"D*4W5B:F5C=#H@2$]75$\@*%=A<SH@=6YS=6)S
-M8W)I8F4I"@H^/CX^/B!/;B!7960L(#$X($1E8R`Q.3DV(#`Y.C,R.C`R("TP
-M-S`P+`H^/CX^/B!-:6-H96QL92!"<F]W;G-W;W)T:`H^/CX^/B!W:&\@8V%N
-M(&)E(')E86-H960@870Z(&UI8VAE;&QE0&5U9V5N92YN970*/CX^/CX@*'=H
-M;W-E(&-O;6UE;G1S(&%R92!C:71E9"!B96QO=R!W:71H("(@;6EC:&5L;&4^
-M("(I+`H^/CX^/B!S96YT('1H92!C:71E9"!M97-S86=E(&-O;F-E<FYI;F<@
-M=&AE('-U8FIE8W0@;V8@(G5N<W5B<V-R:6)E(@H^/CX^/B!T=VEC92!T;R!T
-M:&4@=VAO;&4@;&ES="!O9B!S=6)S8W)I8F5R<PH*(&UI8VAE;&QE/B!U;G-U
-M8G-C<FEB90H*(&UI8VAE;&QE/B`J*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
-M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BH*(&UI8VAE;&QE
-M/B!-:6-H96QL92!"<F]W;G-W;W)T:`H@;6EC:&5L;&4^(%-Y<W1E;2!!9&UI
-M;FES=')A=&]R"@H@;6EC:&5L;&4^($EN=&5R;F5T($UA<FME=&EN9R!397)V
-M:6-E<R`@("`@("`@("`@("`@;6EC:&5L;&5`975G96YE+FYE=`H@;6EC:&5L
-M;&4^(#(S,#`@3V%K;6]N="!787DL(",R,#D@("`@("`@("`@("`@("`@("`@
-M("`@("`@(#4T,2TT,S$M,S,W-`H@;6EC:&5L;&4^($5U9V5N92P@3U(@.3<T
-M,#(@("`@("`@("`@("`@("`@("`@("`@("`@("`@("`@($9!6"`T,S$M-S,T
-M-0H@;6EC:&5L;&4^("HJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ
-M*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*BHJ*@H*5V5L8V]M92!N97<@<W5B
-M<V-R:6)E<B$*"EEO=2=V92!J;VEN960@=&AE(&UA:6QI;F<@;&ES="!O9B!U
-M;G-U8G-C<FEB97)S)R!C;VQL96-T960@=VES9&]M(&]F"G5N<W5B<V-R:6)E
-M(&UE<W-A9V5S+B!296QA>"$*"EEO=2!W;VXG="!H879E('1O('-U8G-C<FEB
-M92!T;R!A;GD@;6%I;&EN9R!L:7-T(&9O<B!T:&4@<F5S="!O9B!Y;W5R"FQI
-M9F4N($)E='1E<B!Y970L('EO=2!C86XG="!E=F5N('5N<W5B<V-R:6)E(2!3
-M;R!J=7-T(&QE86X@8F%C:R!A;F0*96YJ;WD@=&\@=V%T8V@@>6]U<B!)3R!S
-M=')E86T@;V8@;6EL;&EO;G,@;V8@=6YS=6)S8W)I8F4@;65S<V%G97,*9&%I
-M;'DN"@I)<VXG="!T:&%T(&9A<B!M;W)E('1H86X@979E<GET:&EN9R!Y;W4@
-M979E<B!D87)E9"!T;R!D<F5A;2!O9C\*"F%N9')E87,*"E`N4RX@5&AI<R!W
-M87,@<&]S=&5D(#$R(&1A>7,@86=O.@H*1&%T93H(a)1G)I+"`V($1E8R`Q.3DV
-M(#$U.C0W.C4Q("LP,3`P"E1O.B!M<W%L<&5R;$!F<F%N>BYW=RYT=2UB97)L
-M:6XN9&4*4W5B:F5C=#H@2&]W(%1O(%5N<W5B<V-R:6)E("AS96UI+7)E9W5L
-M87(@<&]S=&EN9RD*"E1O(&=E="!O9F8@=&AI<R!L:7-T+"!S96YD(&UA:6P@
-M=&\*+2TM+2TM+2TM+2TM+2TM+2TM+2T*"B`@("!M86IO<F1O;6]`9G)A;GHN
-M=W<N='4M8F5R;&EN+F1E"@IW:71H('1H92!F;VQL;W=I;F<@=V]R9',@:6X@
-M=&AE(&)O9'D@;V8@=&AE(&UE<W-A9V4@*'-U8FIE8W0@;&EN92!W:6QL"F)E
-M(&EG;F]R960I.@H*("`@('5N<W5B<V-R:6)E(&US<6QP97)L(#Q?:6YS97)T
-M7WEO=7)?<W5B<V-R:7!T:6]N7V%D9')E<W-?:&5R95\^"@H*5&\@9FEN9"!O
-M=70@=VAO('EO=2!A<F4@<W5B<V-R:6)E9"!A<RP@<V5N9"!M86EL('1O"BTM
-M+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2TM+2T*"B`@("!M86IO
-M<F1O;6]`9G)A;GHN=W<N='4M8F5R;&EN+F1E"@IW:71H(&]N;'D@;F]T:&EN
-M9R!B=70*"B`@("!W:&\@;7-Q;'!E<FP*"FEN('1H92!B;V1Y(&]F('1H92!M
-M97-S86=E.@H*"DEF('EO=2!E;F-O=6YT97(@<')O8FQE;7,L"BTM+2TM+2TM
-M+2TM+2TM+2TM+2TM+2TM+2T*"G!L96%S92!T<GD@<V5N9&EN9R!T:&4@;65S
-M<V%G92`B:&5L<"(@=&\@;6%J;W)D;VUO0&9R86YZ+G=W+G1U+6)E<FQI;BYD
-M92X*"@I(;W!E('1H870@:&5L<"P*86YD<F5A<PH*"DY/5$4Z(&EF('1H92!A
-M8F]V92!R96-I<&4@9&]E<R!N;W0@=V]R:R!F;W(@>6]U+"!A<VL@;64@9F]R
-M(&%S<VES=&%N8V4*86YD(&1O(&YO="!S<&%M('1H92!L:7-T('=I=&@@=&AE
-M(')E<75E<W0N(%1H86YK('EO=2$*"@HM+3T]/3T]/3T]/3T]/3T]/3T]/3T]
-L/3T]/3T]/5\@7ST@"B`@("`@("`@("`@("`@,C(X,S8S,"@Q-C(S-2DM+0H]
-`
-end
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badbound.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badbound.msg
deleted file mode 100644
index 0ac46ca..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badbound.msg
+++ /dev/null
@@ -1,160 +0,0 @@
-Received: from uriela.in-berlin.de by anna.in-berlin.de via SMTP (940816.SGI.8.6.9/940406.SGI)
- for <k(a)anna.in-berlin.de> id AAA04436; Mon, 23 Dec 1996 00:08:02 +0100
-Resent-From: koenig(a)franz.ww.TU-Berlin.DE
-Received: by uriela.in-berlin.de (/\oo/\ Smail3.1.29.1 #29.8)
- id <m0vbx0j-000LsbC(a)uriela.in-berlin.de>; Mon, 23 Dec 96 00:08 MET
-Received: by methan.chemie.fu-berlin.de (Smail3.1.29.1)
- from franz.ww.TU-Berlin.DE (130.149.200.51) with smtp
- id <m0vbwzX-0009vcC>; Mon, 23 Dec 96 00:07 MET
-Received: (from koenig@localhost) by franz.ww.TU-Berlin.DE (8.7.3/8.7.3) id XAA01761 for k(a)anna.in-berlin.de; Sun, 22 Dec 1996 23:25:10 +0100 (CET)
-Resent-Date: Sun, 22 Dec 1996 23:25:10 +0100 (CET)
-Resent-Message-Id: <199612222225.XAA01761(a)franz.ww.TU-Berlin.DE>
-Resent-To: k
-Received: from mailgzrz.TU-Berlin.DE (mailgzrz.TU-Berlin.DE [130.149.4.10]) by franz.ww.TU-Berlin.DE (8.7.3/8.7.3) with ESMTP id XAA01754 for <koenig(a)franz.ww.TU-Berlin.DE>; Sun, 22 Dec 1996 23:24:32 +0100 (CET)
-Received: from challenge.uscom.com (actually mail.uscom.com)
- by mailgzrz.TU-Berlin.DE with SMTP (PP);
- Sun, 22 Dec 1996 23:19:35 +0100
-To: koenig(a)franz.ww.tu-berlin.de
-From: Mail Administrator <Postmaster(a)challenge.uscom.com>
-Reply-To: Mail Administrator <Postmaster(a)challenge.uscom.com>
-Subject: Mail System Error - Returned Mail
-Date: Sun, 22 Dec 1996 17:21:12 -0500
-Message-ID: <19961222222112.AAE16235(a)challenge.uscom.com>
-MIME-Version: 1.0
-Content-Type: multipart/mixed; Boundary="===========================_ _=
- 2283630(16235)"
-Content-Transfer-Encoding: 7BIT
-X-Filter: mailagent [version 3.0 PL44] for koenig(a)franz.ww.tu-berlin.de
-X-Filter: mailagent [version 3.0 PL44] for k@.in-berlin.de
-
---===========================_ _=
- 2283630(16235)
-Content-type: text/plain; charset="us-ascii"
-
-This Message was undeliverable due to the following reason:
-
-The Program-Deliver module couldn't deliver the message to one or more
-of the intended recipients because their delivery program(s) failed.
-The following error messages provide the details about each failure:
-
- The delivery program "/pages/pnet/admin/mail_proc.pl" produced
- the following output while delivering the message to
- pnet(a)uscom.com
-
- Can't exec "/usr/sbin/sendmail -t": No such file or directory at /pages/pnet/admin/mail_proc.pl line 96, <> line 93.
- Broken pipe
-
- The program "/pages/pnet/admin/mail_proc.pl" exited with an
- unknown value of 141 while delivering the message to
- pnet(a)uscom.com
-
-The message was not delivered to:
-
- pnet(a)uscom.com
-
-Please reply to Postmaster(a)challenge.uscom.com
-if you feel this message to be in error.
-
---===========================_ _=
- 2283630(16235)
-Content-type: message/rfc822
-Content-Disposition: attachment
-Date: Sun, 22 Dec 1996 22:24:21 +0000
-Message-ID: <"mailgzrz.T.061:22.12.96.22.24.21"@TU-Berlin.DE>
-
-Received: from franz.ww.TU-Berlin.DE ([130.149.200.51])
- by challenge.uscom.com (Netscape Mail Server v2.02) with ESMTP
- id AAA685 for <pnet(a)uscom.com>; Wed, 18 Dec 1996 16:58:30 -0500
-Received: from mailgzrz.TU-Berlin.DE (mailgzrz.TU-Berlin.DE [130.149.4.10])
- by franz.ww.TU-Berlin.DE (8.7.3/8.7.3) with ESMTP id SAA23400
- for <msqlperl(a)franz.ww.tu-berlin.de>;
- Wed, 18 Dec 1996 18:59:21 +0100 (CET)
-Received: from anna.in-berlin.de by mailgzrz.TU-Berlin.DE with SMTP (PP);
- Wed, 18 Dec 1996 18:59:11 +0100
-Received: by anna.in-berlin.de (940816.SGI.8.6.9/940406.SGI) id SAA19491;
- Wed, 18 Dec 1996 18:55:21 +0100
-Date: Wed, 18 Dec 1996 18:55:21 +0100
-Message-Id: <199612181755.SAA19491(a)anna.in-berlin.de>
-From: Andreas Koenig <k(a)anna.in-berlin.de>
-To: michelle(a)eugene.net
-CC: msqlperl(a)franz.ww.tu-berlin.de
-In-reply-to: <v03007800aeddccd448d0(a)[206.100.174.203]> (message from Michelle Brownsworth on Wed, 18 Dec 1996 09:32:02 -0700)
-Subject: HOWTO (Was: unsubscribe)
-
->>>>> On Wed, 18 Dec 1996 09:32:02 -0700,
->>>>> Michelle Brownsworth
->>>>> who can be reached at: michelle(a)eugene.net
->>>>> (whose comments are cited below with " michelle> "),
->>>>> sent the cited message concerning the subject of "unsubscribe"
->>>>> twice to the whole list of subscribers
-
- michelle> unsubscribe
-
- michelle> ************************************************************
- michelle> Michelle Brownsworth
- michelle> System Administrator
-
- michelle> Internet Marketing Services michelle(a)eugene.net
- michelle> 2300 Oakmont Way, #209 541-431-3374
- michelle> Eugene, OR 97402 FAX 431-7345
- michelle> ************************************************************
-
-Welcome new subscriber!
-
-You've joined the mailing list of unsubscribers' collected wisdom of
-unsubscribe messages. Relax!
-
-You won't have to subscribe to any mailing list for the rest of your
-life. Better yet, you can't even unsubscribe! So just lean back and
-enjoy to watch your IO stream of millions of unsubscribe messages
-daily.
-
-Isn't that far more than everything you ever dared to dream of?
-
-andreas
-
-P.S. This was posted 12 days ago:
-
-Date: Fri, 6 Dec 1996 15:47:51 +0100
-To: msqlperl(a)franz.ww.tu-berlin.de
-Subject: How To Unsubscribe (semi-regular posting)
-
-To get off this list, send mail to
---------------------
-
- majordomo(a)franz.ww.tu-berlin.de
-
-with the following words in the body of the message (subject line will
-be ignored):
-
- unsubscribe msqlperl <_insert_your_subscription_address_here_>
-
-
-To find out who you are subscribed as, send mail to
--------------------------------------
-
- majordomo(a)franz.ww.tu-berlin.de
-
-with only nothing but
-
- who msqlperl
-
-in the body of the message:
-
-
-If you encounter problems,
--------------------------
-
-please try sending the message "help" to majordomo(a)franz.ww.tu-berlin.de.
-
-
-Hope that help,
-andreas
-
-
-NOTE: if the above recipe does not work for you, ask me for assistance
-and do not spam the list with the request. Thank you!
-
-
---===========================_ _=
- 2283630(16235)--
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badfile.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badfile.msg
deleted file mode 100644
index a141c27..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/badfile.msg
+++ /dev/null
@@ -1,8 +0,0 @@
-From: Michelle Holm <holm(a)sitka.colorado.edu>
-To: imswww(a)rhine.gsfc.nasa.gov
-Mime-Version: 1.0
-Subject: note the bogus filename
-Content-Type: text/plain; charset=iso-8859-1; name="/tmp/whoa"
-Content-Transfer-Encoding: 8bit
-
-This had better not end up in /tmp!
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/bluedot.jpg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/bluedot.jpg
deleted file mode 100644
index 86e8c36..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/bluedot.jpg and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/crlf.hdr b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/crlf.hdr
deleted file mode 100644
index bc48665..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/crlf.hdr
+++ /dev/null
@@ -1,17 +0,0 @@
-From eryq(a)rhine.gsfc.nasa.gov Thu Dec 21 16:34:23 1995
-Path: news.clark.net!rahul.net!a2i!bug.rahul.net!a2i!olivea!decwrl!lll-winken.llnl.gov!simtel!news.sprintlink.net!news.ais.net!usenet
-From: "Josh E. Schneider" <jschneid(a)ais.net>
-Newsgroups: comp.infosystems.www.authoring.cgi
-Subject: EMPLOYMENT: CHICAGO, IL UNIX/CGI/WEB/DBASE
-Date: 7 Oct 1995 17:27:44 GMT
-Organization: American Information Systems, Inc.
-Lines: 33
-Message-ID: <456dag$jc2(a)news.ais.net>
-NNTP-Posting-Host: www.ama.org
-Mime-Version: 1.0
-Content-Type: text/plain (a comment!); (another comment!) charset=us-ascii
-Content-Transfer-Encoding: 7bit
-X-Mailer: Mozilla 1.1N (X11; I; Linux 1.2.8 i586)
-X-URL: news:comp.infosystems.www.authoring.cgi
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/encoded.hdr b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/encoded.hdr
deleted file mode 100644
index df6017d..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/encoded.hdr
+++ /dev/null
@@ -1,7 +0,0 @@
-From: =?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>
-To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>
-CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>
-Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
- =?US-ASCII?Q?.._cool!?=
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/first.hdr b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/first.hdr
deleted file mode 100644
index 10089e9..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/first.hdr
+++ /dev/null
@@ -1,7 +0,0 @@
-Date: Thu, 21 Dec 1995 20:54:27 +0100
-From: Andreas Koenig <k(a)anna.mind.de>
-To: eryq(a)rhine.gsfc.nasa.gov
-In-reply-to: <199512211942.OAA24476(a)rhine.gsfc.nasa.gov> (message from Eryq on
- Thu, 21 Dec 1995 14:42:33 -0500)
-Subject: Re: Bib.pm
-Reply-to: andreas.koenig(a)mind.de
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/fun.txt b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/fun.txt
deleted file mode 100644
index 557d940..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/fun.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-This is a fun little file. It contains a lot of things intended to break any
-badly-written decoder class.
-
-Here is a line that's extremely long (120 a's)...
-So long, in fact, that it goes past the normal 80-character limit:
-
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-
-The next line is longer (2000 b's): it goes past the 1000-character limit that
-mail programs normally assume. All the decoders (except binary) are
-expected to produce output that's much shorter.
-
-bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
-
-Here's some 7-bit binary data:
-
-
-
-Here's some 8-bit Latin-1 text:
-
-«François Müller»
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/german.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/german.msg
deleted file mode 100644
index 33fc096..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/german.msg
+++ /dev/null
@@ -1,79 +0,0 @@
-X-POP3-Rcpt: specht@trachea
-Return-Path: hermes
-Received: (from hermes@localhost) by kulturbox.netmbx.de (8.7.1/8.7.1) id SAA04513 for specht; Wed, 19 Jun 1996 18:30:12 +0200
-Received: by netmbx.netmbx.de (/\==/\ Smail3.1.28.1)
- from mail.cs.tu-berlin.de with smtp
- id <m0uWPrO-0004wpC>; Wed, 19 Jun 96 18:12 MES
-Received: (from nobody@localhost) by mail.cs.tu-berlin.de (8.6.12/8.6.12) id SAA12413; Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Date: Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Message-Id: <199606191626.SAA12413(a)mail.cs.tu-berlin.de>
-Resent-From: nobody(a)cs.tu-berlin.de
-Resent-To: kultur(a)kulturbox.netmbx.de
-Received: from gatekeeper.telekom.de ([194.25.15.11]) by mail.cs.tu-berlin.de (8.6.12/8.6.12) with SMTP id SAA11678 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:11:29 +0200
-Received: from ULM02.mnh.telekom.de by gatekeeper.telekom.de; (5.65v3.0/1.1.8.2/02Aug95-0132PM)
- id AA01376; Wed, 19 Jun 1996 18:11:27 +0200
-Received: from ulm02.mnh.telekom.de (deuschle(a)mnh.telekom.de) by ULM02.mnh.telekom.de (8.6.10/3) with SMTP id SAA30680 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:14:40 GMT
-Message-Id: <199606191814.SAA30680(a)ULM02.mnh.telekom.de>
-X-Sender: deuschle(a)ulm02.mnh.telekom.de
-X-Mailer: Windows Eudora Version 1.4.4
-Mime-Version: 1.0
-Content-Type: text/plain; charset="iso-8859-1"
-Content-Transfer-Encoding: quoted-printable
-Date: Wed, 19 Jun 1996 18:12:02 +0200
-To: Juergen Specht <specht(a)kulturbox.de>
-From: deuschle(a)mnh.telekom.de (Guenter Deuschle)
-Subject: Re: 34Mbit/s Netz
-X-Mozilla-Status: 0011
-
-Hallo Herr Specht,
-entschuldigen Sie vorab, dass ich Ihnen nicht telefonisch zur Verfuegung
-stehe, ich Praesentationen gehalten/ noch zu halten und viele
-Kundennachfragen zu projektieren. Nach Informationen des Produkt-Managers
-Temme steht der POP schon zur Verf=FCgung! Standort: voraussichtlich:
-Winterfeldstr. 21, 10781 Berlin.
-Der POP hat zur Zeit direkte 34M-Anbindungen zu folgenden Orten: Rostock,
-Hamburg, Hannover & Leipzig. 4 weitere werden in kuerze in Betrieb gehen.
-Damit haben Sie einen Besonderen Sicherheitsstandard verfuegbar!
-Kontakt muessen Sie ueber Ihre oerltliche Vertriebseinheit aufnehmen:
-entweder den Geschaefts-Kunden-Vertrieb oder das GrossKundenManagement.
-Diese Vertriebseinheiten greifen auf den oertlichen Technischen
-Vertriebs-Support zu. Die Informationen werden ueber TVS zur Vertriebseiheit
-gegeben und dann zu Ihnen.
- Sie benoetigen eine Standleitung von Ihrer Lokation zum Internet-POP
-Uebergabepunkt zu Ihrem Info-Server ist ein CISCO 1000-Router. Dann zahlen
-Sie neben den monatlichen Kosten fuer die Standleitung die Kosten fuer den
-Internet-Zugang: zB bei 64k: 1500DM bei 2GByte Freivolumen. 128K: 3000 DM
-bei 5 GB Freivolumen & 2M: 30.000 DM bei 50GB Freivolumen.
-Freundliche Gruesse=20
-Guenter Deuschle
-
-
->Sehr geehrter Herr Deuschle,
->Sie sind mir von Herrn Meyendriesch empfohlen worden.
->Ich versuche Informationen ueber das T-eigene 34Mbit/s Netz und den=20
->lokalen Pop-Berlin rauszufinden, bzw. was ein Anschluss kostet und=20
->wo man ihn herbekommt. Laut Herrn Schnick in Berlin gibt es den=20
->T-Pop nicht, laut Traceroute von Herrn Meyendriesch sehrwohl. Auch=20
->ist dies Netz in der IX vom Mai 96 erwaehnt.
->Koennen Sie mir helfen?
->
->MfG
->--=20
->Juergen Specht - KULTURBOX
->
->
-
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-Dipl.-Ing. Guenter D E U S C H L E
-Deutsche Telekom AG Niederlassung 3 Hannover
-GrossKundenManagement - Techn. Vertriebs-Support:
-Team-Leiter Internet Online-Dienste
----------------------------------------------------
-GrKM-TVS-IOD Tel: +49-511-333-2772
-Vahrenwalder-Str. 245 FAX: +49-511-333-2751
-30179 Hannover eMail: deuschle(a)mnh.telekom.de=20
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/infinite.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/infinite.msg
deleted file mode 100644
index c760b26..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/infinite.msg
+++ /dev/null
@@ -1,92 +0,0 @@
-Content-Type: TEXT/PLAIN; name=109f53c446c8882f4318316ecf4480ce
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.96.981121145143.30463I(a)linux2.americasnet.com>
-Content-Description:
-
-UmV0dXJuLVBhdGg6IDxvd25lci1jYWNvbXAtbEBsaW5mLnVuYi5icj4NClJl
-Y2VpdmVkOiBmcm9tIGVpZmZlbC5iYXNlLmNvbS5iciBieSBtYWlsYnIxLm1h
-aWxici5jb20uYnIgOyBUaHUsIDA1IE5vdiAxOTk4IDIyOjU4OjIzICswMDAN
-ClJlY2VpdmVkOiBmcm9tIG1hcmNvbmkuYmFzZS5jb20uYnIgKFsyMDAuMjQw
-LjEwLjU1XSkgYnkgZWlmZmVsLmJhc2UuY29tLmJyDQogICAgICAgICAgKE5l
-dHNjYXBlIE1haWwgU2VydmVyIHYyLjApIHdpdGggRVNNVFAgaWQgQURINDkx
-DQogICAgICAgICAgZm9yIDxhY2VjaWxpYUBtYWlsYnIuY29tLmJyPjsgVGh1
-LCA1IE5vdiAxOTk4IDIxOjU1OjI0IC0wMjAwDQpSZWNlaXZlZDogZnJvbSBr
-ZXBsZXIuYmFzZS5jb20uYnIgKFsyMDAuMjQwLjEwLjEwNF0pIGJ5IG1hcmNv
-bmkuYmFzZS5jb20uYnINCiAgICAgICAgICAoTmV0c2NhcGUgTWFpbCBTZXJ2
-ZXIgdjIuMCkgd2l0aCBFU01UUCBpZCBBQUU2ODY7DQogICAgICAgICAgV2Vk
-LCA0IE5vdiAxOTk4IDE0OjAwOjEwIC0wMjAwDQpSZWNlaXZlZDogZnJvbSBj
-eXJpdXMubGluZi51bmIuYnIgKFsxNjQuNDEuMTIuNF0pIGJ5IGtlcGxlci5i
-YXNlLmNvbS5icg0KICAgICAgICAgIChQb3N0Lk9mZmljZSBNVEEgdjMuNSBy
-ZWxlYXNlIDIxNSBJRCMgMC0wVTEwTDJTMTAwKSB3aXRoIFNNVFANCiAgICAg
-ICAgICBpZCBicjsgV2VkLCA0IE5vdiAxOTk4IDEzOjUzOjQ3IC0wMjAwDQpS
-ZWNlaXZlZDogZnJvbSBzZW5kbWFpbCBieSBjeXJpdXMubGluZi51bmIuYnIg
-d2l0aCBlc210cA0KCWlkIDB6YjVJOS0wMDAzb00tMDA7IFdlZCwgNCBOb3Yg
-MTk5OCAxMzo1NjoxNyAtMDIwMA0KUmVjZWl2ZWQ6IGZyb20gbG9jYWxob3N0
-IChtYWpvcmRvbUBsb2NhbGhvc3QpDQoJYnkgY3lyaXVzLmxpbmYudW5iLmJy
-ICg4LjguNy84LjguNykgd2l0aCBTTVRQIGlkIE5BQTE0NjM5Ow0KCVdlZCwg
-NCBOb3YgMTk5OCAxMzo1NDo1NCAtMDIwMCAoRURUKQ0KUmVjZWl2ZWQ6IGJ5
-IGxpbmYudW5iLmJyIChidWxrX21haWxlciB2MS42KTsgV2VkLCA0IE5vdiAx
-OTk4IDEzOjU0OjU0IC0wMjAwDQpSZWNlaXZlZDogKGZyb20gbWFqb3Jkb21A
-bG9jYWxob3N0KQ0KCWJ5IGN5cml1cy5saW5mLnVuYi5iciAoOC44LjcvOC44
-LjcpIGlkIE5BQTE0NjMwDQoJZm9yIGNhY29tcC1sLW91dHRlcjsgV2VkLCA0
-IE5vdiAxOTk4IDEzOjU0OjUzIC0wMjAwIChFRFQpDQpSZWNlaXZlZDogKGZy
-b20gc2VuZG1haWxAbG9jYWxob3N0KQ0KCWJ5IGN5cml1cy5saW5mLnVuYi5i
-ciAoOC44LjcvOC44LjcpIGlkIE5BQTE0NjIzDQoJZm9yIGNhY29tcC1sQGxp
-bmYudW5iLmJyOyBXZWQsIDQgTm92IDE5OTggMTM6NTQ6NTAgLTAyMDAgKEVE
-VCkNClJlY2VpdmVkOiBmcm9tIGJyYXNpbGlhLm1wZGZ0Lmdvdi5iciBbMjAw
-LjI1Mi44NS4yXSANCglieSBjeXJpdXMubGluZi51bmIuYnIgd2l0aCBlc210
-cA0KCWlkIDB6YjVGei0wMDAzbEYtMDA7IFdlZCwgNCBOb3YgMTk5OCAxMzo1
-NDoyOCAtMDIwMA0KUmVjZWl2ZWQ6IGZyb20gbG9jYWxob3N0IChsYmVja2Vy
-QGxvY2FsaG9zdCkNCglieSBicmFzaWxpYS5tcGRmdC5nb3YuYnIgKDguOC41
-LzguOC44KSB3aXRoIEVTTVRQIGlkIE5BQTAyNTcxDQoJZm9yIDxjYWNvbXAt
-bEBsaW5mLnVuYi5icj47IFdlZCwgNCBOb3YgMTk5OCAxMzozNjoxNCAtMDIw
-MCAoRURUKQ0KCShlbnZlbG9wZS1mcm9tIGxiZWNrZXJAYnJhc2lsaWEubXBk
-ZnQuZ292LmJyKQ0KRGF0ZTogV2VkLCA0IE5vdiAxOTk4IDEzOjM2OjE0IC0w
-MjAwIChFRFQpDQpGcm9tOiBMdWxhIEJlY2tlciA8bGJlY2tlckBicmFzaWxp
-YS5tcGRmdC5nb3YuYnI+DQpUbzogY2Fjb21wLWxAbGluZi51bmIuYnINClN1
-YmplY3Q6IFtjYWNvbXAtbF0gPT8/UT9SZT0zQV89NUJjYWNvbXAtbD01RF9F
-X249M0FfQnJhcz1FRGxpYV9jb2JyZT89DQpJbi1SZXBseS1UbzogPFBpbmUu
-U1VOLjMuOTEuOTgxMTAzMjM1OTQzLjIyNDFFLTEwMDAwMEBhbnRhcmVzLmxp
-bmYudW5iLmJyPg0KTWVzc2FnZS1JRDogPFBpbmUuQlNGLjMuOTYuOTgxMTA0
-MTMzNTQ3LjI1MzJCLTEwMDAwMEBicmFzaWxpYS5tcGRmdC5nb3YuYnI+DQpN
-SU1FLVZlcnNpb246IDEuMA0KQ29udGVudC1UeXBlOiBURVhUL1BMQUlOOyBj
-aGFyc2V0PQ0KWC1NSU1FLUF1dG9jb252ZXJ0ZWQ6IGZyb20gOGJpdCB0byBx
-dW90ZWQtcHJpbnRhYmxlIGJ5IGJyYXNpbGlhLm1wZGZ0Lmdvdi5iciBpZCBO
-QUEwMjU3MQ0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogOGJpdA0KWC1N
-SU1FLUF1dG9jb252ZXJ0ZWQ6IGZyb20gcXVvdGVkLXByaW50YWJsZSB0byA4
-Yml0IGJ5IGN5cml1cy5saW5mLnVuYi5iciBpZCBOQUIxNDYyMw0KU2VuZGVy
-OiBvd25lci1jYWNvbXAtbEBsaW5mLnVuYi5icg0KUmVwbHktVG86IGNhY29t
-cC1sQGxpbmYudW5iLmJyDQpQcmVjZWRlbmNlOiBidWxrDQpYLVJjcHQtVG86
-IDxhY2VjaWxpYUBtYWlsYnIuY29tLmJyDQpYLURQT1A6IERQT1AgVmVyc2lv
-biAyLjNkDQpYLVVJREw6IDkxMDM4NjgxNi4wMDQNClN0YXR1czogUk8NCg0K
-DQoNCglDb21vIGFzc2ltLCBkYWggdW0gZXhlbXBsby4gRGVpeGFuZG8gYSBj
-b250YSBhYmVydGEsIG5laCwgRnJlZC4uLg0KDQoJDQoNCk9uIFdlZCwgNCBO
-b3YgMTk5OCwgRnJlZGVyaWNvIE5hcmRvdHRvIHdyb3RlOg0KDQo+IFBvcnF1
-ZSBldSBzb3UgZWggZm9kYS4uLi4gDQo+IFByZWdvIGVoIG8gY2FyYWxobywg
-VmMgbmFvIG1lIGNvbmhlY2UgcGFyYSBmaWNhciBmYWxhbmRvIGFzc2ltLi4u
-IE5hbyANCj4gc2FiZSBkZSBvbmRlIGV1IHZpbSwgcXVlbSBzb3UsIG91IHNl
-amEsIFBPUlJBIE5FTkhVTUEuLi4NCj4gDQo+IFZBSSBUT01BUiBOTyBDVSBF
-IE1FIERFSVhBIEVNIFBBWiEhISEhISENCj4gDQo+IE9uIFR1ZSwgMyBOb3Yg
-MTk5OCwgR3VpbGhlcm1lIE9saXZpZXJpIENhaXhldGEgQm9yZ2VzIHdyb3Rl
-Og0KPiANCj4gPiBT82NyYXRlcywNCj4gPiANCj4gPiAgICAgcG9ycXVlIHZv
-Y+ogZmF6IHRhbnRhIHF1ZXN0428gZGUgc2UgaW5kaXNwb3IgY29tIFRPRE8g
-TVVORE8hISEgSuEgbuNvIGJhc3Rhc3NlDQo+ID4gbWVpYSBjb21wdXRh5+Nv
-IHRlIGFjaGFyIHVtIHByZWdvLCB2b2PqIHJlc29sdmUgYW1wbGlhciBlc3Rl
-IHVuaXZlcnNvIHBhcmEgb3V0cmFzDQo+ID4gcGVzc29hcy4uLiBNYW7pIQ0K
-PiA+IA0KPiA+IFNvY3JhdGVzIEFyYW50ZXMgVGVpeGVpcmEgRmlsaG8gKDk3
-LzE4NDQzKSB3cm90ZToNCj4gPiANCj4gPiA+ICAgICAgVm9j6iB0ZW0gcXVl
-IHZlciBxdWUgcGFjaepuY2lhIHRlbSBsaW1pdGUuIEV1IGFn/GVudGVpIG8g
-beF4aW1vDQo+ID4gPiBwb3Nz7XZlbCBlbGUgZmljYXIgZXNjcmV2ZW5kbyBl
-c3NhcyBidXJyaWNlcyBuYSBub3NzYSBzYWxhIGRlIGRpc2N1cnPjby4NCj4g
-PiA+IENvbSBnZW50ZSBpZ25vcmFudGUgY29tbyBlbGUsIHF1ZSB1bSByb3Jp
-emlzdGEgY2VnbywgbvNzIHPzIGNvbnNlZ3VpbW9zDQo+ID4gDQo+ID4gICAg
-IEVtIHNlIGZhbGFuZG8gZGUgaWdub3LibmNpYTog6SBiZW0gdmVyZGFkZSBx
-dWUgb3MgbWFpbHMgZGEgY2Fjb21wIGVzdONvIGF0aW5naW5kbw0KPiA+IHBy
-b3Bvcuf1ZXMgZGFudGVzY2FzLCBtYXMgbyBjZXJ0byDpIERJU0NVU1PDTy4N
-Cj4gPiANCj4gPiBTZW0gbWFpcywNCj4gPiANCj4gPiAtLQ0KPiA+IEd1aWxo
-ZXJtZSBPbGl2aWVyaSBDYWl4ZXRhIEJvcmdlcw0KPiA+ICoqKioqKioqKioq
-KioqKioqKioqKioqKioqDQo+ID4gV2ViIERlc2lnbiAtIFZpYSBJbnRlcm5l
-dA0KPiA+ICgwNjEpIDMxNS05NjU3IC8gOTY0LTkxOTkNCj4gPiBndWlib3Jn
-ZXNAYnJhc2lsaWEuY29tLmJyDQo+ID4gZ3VpYm9yZ2VzQHZpYS1uZXQuY29t
-LmJyDQo+ID4gKioqKioqKioqKioqKioqKioqKioqKioqKioNCj4gPiANCj4g
-PiANCj4gPiANCj4gPiANCj4gPiANCj4gDQo+IA0KDQoNCg==
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/intl.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/intl.msg
deleted file mode 100644
index 4c32ded..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/intl.msg
+++ /dev/null
@@ -1,12 +0,0 @@
-From: =?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>
-To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>
-CC: =?ISO-8859-1?Q?Andr=E9_?= Pirard <PIRARD(a)vm1.ulg.ac.be>
-BCC: =?ISO-8859-1?Q?Patrik_F=E4ltstr=F6m?= <paf(a)nada.kth.se>
-Subject: =?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
- =?US-ASCII?Q?.._so,_cool!?=
-Content-type: text/plain
-
-How's this?
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/jt-0498.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/jt-0498.msg
deleted file mode 100644
index 27a55a3..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/jt-0498.msg
+++ /dev/null
@@ -1,107 +0,0 @@
-From owner-funnel-pc(a)hpc.uh.edu Thu Apr 30 14:27:51 1998
-Received: from farabi.hpc.uh.edu (farabi.hpc.uh.edu [129.7.102.2]) by sina.hpc.uh.edu (8.7.3/8.7.3) with ESMTP id OAA27026; Thu, 30 Apr 1998 14:27:51 -0500 (CDT)
-Received: from sina.hpc.uh.edu (lists(a)[10.1.1.1]) by farabi.hpc.uh.edu (8.7.3/8.7.3) with ESMTP id WAD14645; Mon, 27 Apr 1998 22:20:19 -0500 (CDT)
-Received: by sina.hpc.uh.edu (TLB v0.09a (1.20 tibbs 1996/10/09 22:03:07)); Thu, 30 Apr 1998 14:26:26 -0500 (CDT)
-Received: (from tibbs@localhost) by sina.hpc.uh.edu (8.7.3/8.7.3) id OAA26968 for pc800(a)hpc.uh.edu; Thu, 30 Apr 1998 14:26:17 -0500 (CDT)
-Received: from imo11.mx.aol.com (imo11.mx.aol.com [198.81.17.33]) by sina.hpc.uh.edu (8.7.3/8.7.3) with ESMTP id KAA22560 for <PC800(a)hpc.uh.edu>; Thu, 30 Apr 1998 10:29:47 -0500 (CDT)
-Received: from Gaffneydp(a)aol.com
- by imo11.mx.aol.com (IMOv14.1) id QICDa02864
- for <PC800(a)hpc.uh.edu>; Thu, 30 Apr 1998 11:28:50 -0400 (EDT)
-From: Gaffneydp <Gaffneydp(a)aol.com>
-Message-ID: <c8384e50.354898b3(a)aol.com>
-Date: Thu, 30 Apr 1998 11:28:50 EDT
-To: PC800(a)hpc.uh.edu
-Mime-Version: 1.0
-Subject: Fwd: PC800: Tall Hondaline Windshield Distortion
-Content-type: multipart/mixed;
- boundary="part0_893950130_boundary"
-X-Mailer: AOL 3.0 16-bit for Windows sub 41
-Sender: owner-pc800(a)hpc.uh.edu
-Precedence: list
-X-Majordomo: 1.94.jlt7
-
-This is a multi-part message in MIME format.
-
---part0_893950130_boundary
-Content-ID: <0_893950130(a)inet_out.mail.aol.com.1>
-Content-type: text/plain; charset=US-ASCII
-
-Hello to all,
-
-I purchased a tall windshield about two weeks ago from Waynesville Cycle
-Center in NC. The entire length and width of the windshield has optical waves
-or ripples which distort the view through it. It was very uncomfortable to
-ride with and I would be afraid to ride at night with it.
-
-I contacted the manager at WCC. He in turn contacted Honda Customer Service
-(310-532-9811). They replied to him that there were no bulletins concerning
-this problem and that they inspected several windshields. They claim that all
-the windshields had distortions. They have offered to give me a full refund.
-
-What bothers me is two things. First, the stock windshield has no optical
-distortion. Second, it appears that Honda knows that it is selling a less
-than perfect product and is apparently unconcerned about it (seems like a
-strange way to do business).
-
-Perhaps my windshield is the worst one ever made, but they made no offer to
-inspect mine and compare to others that they have in stock.
-
-I am going to call Honda on Monday and raise the issues of safety and quality.
-I will ask them if they have a problem with me forwarding their position to
-publications such as Cycle World, Rider, etc.
-
-Dennis Gaffney
-Marlboro, NY
-gaffneydp(a)aol.com
-1994 PC800
-Bought used in 1997 (2000 miles)
-Modifications: tall windshield?
-
---part0_893950130_boundary
-Content-ID: <0_893950130(a)inet_out.mail.aol.com.2>
-Content-type: message/rfc822
-Content-transfer-encoding: 7bit
-Content-disposition: inline
-
-Return-Path: <owner-pc800(a)hpc.uh.edu>
-Received: from rly-za04.mx.aol.com (rly-za04.mail.aol.com [172.31.36.100]) by
- air-za04.mail.aol.com (v42.4) with SMTP; Wed, 29 Apr 1998 09:14:18
- -0400
-Received: from sina.hpc.uh.edu (Sina.HPC.UH.EDU [129.7.3.5])
- by rly-za04.mx.aol.com (8.8.5/8.8.5/AOL-4.0.0)
- with ESMTP id JAA27623;
- Wed, 29 Apr 1998 09:14:08 -0400 (EDT)
-Received: from sina.hpc.uh.edu (lists(a)Sina.HPC.UH.EDU [129.7.3.5]) by
- sina.hpc.uh.edu (8.7.3/8.7.3) with ESMTP id IAA25294; Wed, 29 Apr
- 1998 08:14:23 -0500 (CDT)
-Received: by sina.hpc.uh.edu (TLB v0.09a (1.20 tibbs 1996/10/09 22:03:07));
- Wed, 29 Apr 1998 08:14:20 -0500 (CDT)
-Received: from donald.cybercomm.nl (donald.cybercomm.nl [194.235.113.5]) by
- sina.hpc.uh.edu (8.7.3/8.7.3) with ESMTP id IAA25275 for
- <pc800(a)hpc.uh.edu>; Wed, 29 Apr 1998 08:14:11 -0500 (CDT)
-Received: from default (poort22-ip-x2.enertel.cybercomm.nl [194.235.118.22])
- by donald.cybercomm.nl (8.8.6/8.8.6) with ESMTP id OAA25676
- for <pc800(a)hpc.uh.edu>; Wed, 29 Apr 1998 14:12:10 -0100 (MET)
-Message-Id: <199804291512.OAA25676(a)donald.cybercomm.nl>
-From: "Emile Nossin" <Emile(a)CyberComm.nl>
-To: "PC800" <pc800(a)hpc.uh.edu>
-Subject: Re: PC800: Tall Hondaline Windshield Distortion
-Date: Wed, 29 Apr 1998 15:13:20 +0200
-X-MSMail-Priority: Normal
-X-Priority: 3
-X-Mailer: Microsoft Internet Mail 4.70.1155
-Sender: owner-pc800(a)hpc.uh.edu
-Precedence: list
-X-Majordomo: 1.94.jlt7
-Mime-Version: 1.0
-Content-type: text/plain; charset=ISO-8859-1
-Content-transfer-encoding: quoted-printable
-
-Hi Pat,
-I don't see any distortion in my tall Honda screen, nor any maginfication=
---
-Visit the PC800 web page at <URL:http://members.aol.com/wwwpc800/>
-To unsubscribe from the list, send "unsubscribe pc800" in the body of a
-message to majordomo(a)hpc.uh.edu.
-To report problems, send mail to pc800-owner(a)hpc.uh.edu.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/lennie.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/lennie.msg
deleted file mode 100644
index b7ac7fd..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/lennie.msg
+++ /dev/null
@@ -1,81 +0,0 @@
-Return-Path: <lbj_ccsi(a)atl.mindspring.com>
-Received: from brickbat8.mindspring.com (brickbat8.mindspring.com [207.69.200.11])
- by camel10.mindspring.com (8.8.5/8.8.5) with ESMTP id GAA27894
- for <lbj_ccsi(a)atl.mindspring.com>; Fri, 25 Jul 1997 06:58:07 -0400 (EDT)
-Received: from lennie (user-2k7i8oq.dialup.mindspring.com [168.121.35.26])
- by brickbat8.mindspring.com (8.8.5/8.8.5) with SMTP id GAA22488
- for <lbj_ccsi(a)atl.mindspring.com>; Fri, 25 Jul 1997 06:58:05 -0400 (EDT)
-Message-ID: <33D89532.29EA(a)atl.mindspring.com>
-Date: Fri, 25 Jul 1997 06:59:46 -0500
-From: Lennie Jarratt <lbj_ccsi(a)mindspring.com>
-Reply-To: lbj_ccsi(a)mindspring.com
-Organization: Custom Computer Services Inc.
-X-Mailer: Mozilla 3.01Gold (Win95; I)
-MIME-Version: 1.0
-To: lbj_ccsi(a)atl.mindspring.com
-Subject: Test Mail Again
-Content-Type: multipart/mixed; boundary="------------52E03A8932B4"
-
-This is a multi-part message in MIME format.
-
---------------52E03A8932B4
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-This is the message body. A picture should also be displayed.
-
---------------52E03A8932B4
-Content-Type: text/html; charset=us-ascii; name="Pull3.html"
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline; filename="Pull3.html"
-Content-Base: "file:///E|/ChckFree/Html/Pull3.html"
-
-<BASE HREF="file:///E|/ChckFree/Html/Pull3.html">
-
-<HTML>
-<HEAD>
-<TITLE>Client Pull Rolling Page Demo></TITLE>
-
-<META HTTP-EQUIV="REFRESH" CONTENT="10; URL=Pull1.html">
-
-</HEAD>
-
-<BODY>
-This is Page 3 of my rolling web page demo.
-</BODY>
-
-</HTML>
-
---------------52E03A8932B4
-Content-Type: image/gif; name="WWWIcon.gif"
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="WWWIcon.gif"
-
-R0lGODdhPAA8AOYAAP///+/v7+fv7+/39/f//9be3r3O1rXGzsbW3qW1va29xoyltXOMnGuE
-lClSa4ScrXuUpUJje1p7lFJzjEprhDlacxhCYylScyFKaxA5WggxUgApSt7n773GzpytvZSl
-tWuEnM7W3sbO1q29zqW1xoycrYSUpWN7lFpzjFJrhEJjhDlaezFScylKayFCYwgxWgApUtbe
-5yFCaxg5YxAxWggpUpSlvXOEnFpzlFJrjEpjhEJaezlSc3uMpYyctYSUrb3G1sbO3qWtvbW9
-zq21xufn79bW3t7e5wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAPAA8AAAH/4AAgoOEhYaHiImKi4yNjo+QkZKTlJWW
-l5iZmpucnZ6foKGinSIfJxEtMzMtEScfIqOKRwsUMy4YLQ4sLA4tGC4zFAtHsYQBCysWLSwr
-KhQ5Eyg5FCorLC0WKwsBxUAoyhU6KA0MEA8lJQ8QDCcoOhXYKECjQhUyLDo4DA8fQkRDAIcQ
-EfLhAQMcOljIqCAklI0WLVZMAPHAA5EDBoKE2BgCgYEDRDw8ADFhBUQbnzxgwLACBQMfCYYA
-QRCiQIybMYx0NDAkgQ8GKFas9NCpAwsLLChQ9KAAowiaHDcGEfFRgUgQFI6y6LBJQA4aLnjk
-APHjgwcSRBSMGLI24AgFRP9IePjwA0SOCi5o5BCgqQQMsEkl3Ohh4seDc+gSJz5sAsKNE1nz
-wiiRKUYLGBoy3Nuhg0KKHNAmiB6NYjRoCjp2KMygAUaLGJj8woDxIoMFGRBz6drFu7eDXhAx
-WMjwYvZkTCuMY35BI4Pz59CjR6fxorXxFZg4bNgxCIYMQydqwALwQ0OCQkVgROjuQtOGE4Nc
-cBc0/gcMDoKEwBg/HgAM+ILIpwkLJgyyA4AAjCDICBsMYsAG+CU4CIEGInjJDkQJckKBABjA
-oQHtCaKdgQZmCMCGmphgwCAmKNghgvMJwoKBEarIoouYmBDCIAusCMACMaZAiJCC0OCjjjz6
-iIn/j/gpaQINDgIQoZIbLCAIkx1usmOWWwKQQoOC7OjjliFswOGWK3a5iYUA7LCBkj+q+WCM
-GoJCJwA0bIAjADbyuMGMhNypyYOFbGBmoBwKYoKhhBDqyQgwDDAIB7PdQAgLlg5ywmySLhjp
-IASkuN8gIsy2XnenChLBbP3ZB+clshlXgwYvMEcDdbXmquutuGpQg3LHXWKZcbRmMIMFFriA
-7LLMLqusBTMQZ51rsMU2Ww21WYBLb7v89hu318gw3Au/BouJABRgRoO2LFSwQwTwxiuvvDtU
-wIJwNLRGAV+adNCCBjTMgAEzEajQGQUIJ5ywDipEYC8GM+TbAleceDBDkmbKtPuuDgcrzHEE
-O1iDDWszmMjJBxcb68IyzKyww7sgh2zNNcCQ/EEoHvxb27G4QbQbcC2IG211LZj8SQcpYEZr
-c6ocC60qGVCnQWspUDyKACVcIOvUXHNdLgwXlMBvMQDEUMIOwKYNww4lVEt2IQaUgAILM8w2
-AwsolPDq23z37fffgAcu+OCEF2744YgnXnggADs=
---------------52E03A8932B4--
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-lg.b64 b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-lg.b64
deleted file mode 100644
index 26f7f5f..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-lg.b64
+++ /dev/null
@@ -1,548 +0,0 @@
-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
-OVUET21qIAAAOw==
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-sm.b64 b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-sm.b64
deleted file mode 100644
index 626c9b5..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-sm.b64
+++ /dev/null
@@ -1,222 +0,0 @@
-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
-ZhYAIeBhgQAAOw==
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-sm.gif b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-sm.gif
deleted file mode 100644
index a7f6664..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mime-sm.gif and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mp-msg-rfc822.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mp-msg-rfc822.msg
deleted file mode 100644
index fc26fcd..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/mp-msg-rfc822.msg
+++ /dev/null
@@ -1,112 +0,0 @@
-From specht(a)kulturbox.de Thu Jun 20 08:35:23 1996
-Date: Thu, 20 Jun 1996 08:35:17 +0200
-From: Juergen Specht <specht(a)kulturbox.de>
-Organization: KULTURBOX
-X-Mailer: Mozilla 2.02 (WinNT; I)
-MIME-Version: 1.0
-To: andreas.koenig(a)mind.de, kun(a)pop.combox.de, 101762.2307(a)compuserve.com
-Subject: [Fwd: Re: 34Mbit/s Netz]
-Content-Type: multipart/mixed; boundary="------------70522FC73543"
-X-Filter: mailagent [version 3.0 PL44] for k@.in-berlin.de
-
-This is a multi-part message in MIME format.
-
---------------70522FC73543
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
---
-Juergen Specht - KULTURBOX
-
---------------70522FC73543
-Content-Type: message/rfc822
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline
-
-X-POP3-Rcpt: specht@trachea
-Return-Path: hermes
-Received: (from hermes@localhost) by kulturbox.netmbx.de (8.7.1/8.7.1) id SAA04513 for specht; Wed, 19 Jun 1996 18:30:12 +0200
-Received: by netmbx.netmbx.de (/\==/\ Smail3.1.28.1)
- from mail.cs.tu-berlin.de with smtp
- id <m0uWPrO-0004wpC>; Wed, 19 Jun 96 18:12 MES
-Received: (from nobody@localhost) by mail.cs.tu-berlin.de (8.6.12/8.6.12) id SAA12413; Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Date: Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Message-Id: <199606191626.SAA12413(a)mail.cs.tu-berlin.de>
-Resent-From: nobody(a)cs.tu-berlin.de
-Resent-To: kultur(a)kulturbox.netmbx.de
-Received: from gatekeeper.telekom.de ([194.25.15.11]) by mail.cs.tu-berlin.de (8.6.12/8.6.12) with SMTP id SAA11678 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:11:29 +0200
-Received: from ULM02.mnh.telekom.de by gatekeeper.telekom.de; (5.65v3.0/1.1.8.2/02Aug95-0132PM)
- id AA01376; Wed, 19 Jun 1996 18:11:27 +0200
-Received: from ulm02.mnh.telekom.de (deuschle(a)mnh.telekom.de) by ULM02.mnh.telekom.de (8.6.10/3) with SMTP id SAA30680 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:14:40 GMT
-Message-Id: <199606191814.SAA30680(a)ULM02.mnh.telekom.de>
-X-Sender: deuschle(a)ulm02.mnh.telekom.de
-X-Mailer: Windows Eudora Version 1.4.4
-Mime-Version: 1.0
-Content-Type: text/plain; charset="iso-8859-1"
-Content-Transfer-Encoding: quoted-printable
-Date: Wed, 19 Jun 1996 18:12:02 +0200
-To: Juergen Specht <specht(a)kulturbox.de>
-From: deuschle(a)mnh.telekom.de (Guenter Deuschle)
-Subject: Re: 34Mbit/s Netz
-X-Mozilla-Status: 0011
-
-Hallo Herr Specht,
-entschuldigen Sie vorab, dass ich Ihnen nicht telefonisch zur Verfuegung
-stehe, ich Praesentationen gehalten/ noch zu halten und viele
-Kundennachfragen zu projektieren. Nach Informationen des Produkt-Managers
-Temme steht der POP schon zur Verf=FCgung! Standort: voraussichtlich:
-Winterfeldstr. 21, 10781 Berlin.
-Der POP hat zur Zeit direkte 34M-Anbindungen zu folgenden Orten: Rostock,
-Hamburg, Hannover & Leipzig. 4 weitere werden in kuerze in Betrieb gehen.
-Damit haben Sie einen Besonderen Sicherheitsstandard verfuegbar!
-Kontakt muessen Sie ueber Ihre oerltliche Vertriebseinheit aufnehmen:
-entweder den Geschaefts-Kunden-Vertrieb oder das GrossKundenManagement.
-Diese Vertriebseinheiten greifen auf den oertlichen Technischen
-Vertriebs-Support zu. Die Informationen werden ueber TVS zur Vertriebseiheit
-gegeben und dann zu Ihnen.
- Sie benoetigen eine Standleitung von Ihrer Lokation zum Internet-POP
-Uebergabepunkt zu Ihrem Info-Server ist ein CISCO 1000-Router. Dann zahlen
-Sie neben den monatlichen Kosten fuer die Standleitung die Kosten fuer den
-Internet-Zugang: zB bei 64k: 1500DM bei 2GByte Freivolumen. 128K: 3000 DM
-bei 5 GB Freivolumen & 2M: 30.000 DM bei 50GB Freivolumen.
-Freundliche Gruesse=20
-Guenter Deuschle
-
-
->Sehr geehrter Herr Deuschle,
->Sie sind mir von Herrn Meyendriesch empfohlen worden.
->Ich versuche Informationen ueber das T-eigene 34Mbit/s Netz und den=20
->lokalen Pop-Berlin rauszufinden, bzw. was ein Anschluss kostet und=20
->wo man ihn herbekommt. Laut Herrn Schnick in Berlin gibt es den=20
->T-Pop nicht, laut Traceroute von Herrn Meyendriesch sehrwohl. Auch=20
->ist dies Netz in der IX vom Mai 96 erwaehnt.
->Koennen Sie mir helfen?
->
->MfG
->--=20
->Juergen Specht - KULTURBOX
->
->
-
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-Dipl.-Ing. Guenter D E U S C H L E
-Deutsche Telekom AG Niederlassung 3 Hannover
-GrossKundenManagement - Techn. Vertriebs-Support:
-Team-Leiter Internet Online-Dienste
----------------------------------------------------
-GrKM-TVS-IOD Tel: +49-511-333-2772
-Vahrenwalder-Str. 245 FAX: +49-511-333-2751
-30179 Hannover eMail: deuschle(a)mnh.telekom.de=20
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-
-
-
-
---------------70522FC73543--
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-2gifs.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-2gifs.msg
deleted file mode 100644
index 0962900..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-2gifs.msg
+++ /dev/null
@@ -1,58 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Sender: john-bigboote
-Date: Thu, 11 Apr 1996 01:10:30 -0500
-From: Eryq <eryq(a)rhine.gsfc.nasa.gov>
-Organization: Yoyodyne Propulsion Systems
-X-Mailer: Mozilla 2.0 (X11; I; Linux 1.1.18 i486)
-MIME-Version: 1.0
-To: john-bigboote(a)eryq.pr.mcs.net
-Subject: Two images for you...
-Content-Type: multipart/mixed; boundary="------------299A70B339B65A93542D2AE"
-
-This is a multi-part message in MIME format.
-
---------------299A70B339B65A93542D2AE
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-When unpacked, this message should produce two GIF files:
-
- * The 1st should be called "3d-compress.gif"
- * The 2nd should be called "3d-eye.gif"
-
-Different ways of specifying the filenames have been used.
-
---
- ____ __
- / __/__________/_/ Eryq (eryq(a)rhine.gsfc.nasa.gov)
- / __/ _/ / / , / Hughes STX Corporation, NASA/Goddard
-/___/_/ \ /\ /___
- /_/ /_____/ http://selsvr.stx.com/~eryq/
-
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-compress.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif; name="3d-eye.gif"
-Content-Transfer-Encoding: base64
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---------------299A70B339B65A93542D2AE--
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-bad.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-bad.msg
deleted file mode 100644
index 9437b63..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-bad.msg
+++ /dev/null
@@ -1,181 +0,0 @@
-From: Michelle Holm <holm(a)sitka.colorado.edu>
-Date: Mon, 21 Aug 95 13:30:57 -600
-Sender: holm(a)sitka.colorado.edu
-To: imswww(a)rhine.gsfc.nasa.gov
-Mime-Version: 1.0
-X-Mailer: Mozilla/1.0N (X11; IRIX 5.2 IP20)
-Content-Type: multipart/mixed;
- boundary="-------------------------------147881770724098"
-Subject: http://rhine.gsfc.nasa.gov:8080/ims-bin/v.b/imssearch
-X-Url: http://rhine.gsfc.nasa.gov:8080/ims-bin/v.b/imssearch
-Content-Type: text/plain; charset=iso-8859-1
-Content-Transfer-Encoding: 8bit
-
-> [[ERROR]] Error 600: Internal logic.
->
-> Dying gasp:
-> Bad mode: SEARCH/ (600).
->
-> Recommended action to correct the situation:
-> YIKES! IMS/www failed one of its internal consistency checks! Please SAVE
-> THIS FILE, and contact IMS/www's developers immediately so they can fix the
-> problem! If the parentheses at the end of this sentence are not blank, you
-> can contact them here (imswww(a)rhine.gsfc.nasa.gov).
->
-> ------------------------------------------------------------------------
->
->
-> Location of error
->
-> Dying gasp:
-> Package "main", file "/usr/app/people/imswww/v.b/lib/perl/imssearch.pl", line
-> 753.
->
-> Traceback:
->
-> 1. Iw::Die: from "main", "/usr/app/people/imswww/v.b/lib/perl/imssearch.pl
-> line 753
-> 2. main::Main: from "main",
-> "/usr/app/people/imswww/public_cgi/v.b/imssearch line 85
->
-> ------------------------------------------------------------------------
->
->
-> Basic state information
->
-> Include path
->
-> /usr/app/people/imswww/v.b/lib/perl
-> /usr/app/people/imswww/v.b/lib/perl/Eg
-> /usr/local/lib/perl5/sun4-sunos
-> /usr/local/lib/perl5
-> .
->
-> Environment variables
->
-> CONTENT_LENGTH = "281"
-> CONTENT_TYPE = "application/x-www-form-urlencoded"
-> DOCUMENT_ROOT = "/usr/local/etc/httpd/htdocs"
-> GAEADATA_DIR = "/home/rhine/ims/lib/gaea_data"
-> GAEATMP_DIR = "/usr/app/people/imswww/v.b/tmp/imswww-usr/809033436-10153"
-> GATEWAY_INTERFACE = "CGI/1.1"
-> HTTP_ACCEPT = "*/*, image/gif, image/x-xbitmap, image/jpeg"
-> HTTP_REFERER = "http://rhine.gsfc.nasa.gov:8080/ims-bin/v.b/imssearch"
-> HTTP_USER_AGENT = "Mozilla/1.0N (X11; IRIX 5.2 IP20)"
-> IMS_STAFF = "1"
-> IW_CGI_DIR = "/usr/app/people/imswww/v.b/cgi-bin"
-> IW_DOCS_DIR = "/usr/app/people/imswww/v.b/docs"
-> IW_LIB_DIR = "/usr/app/people/imswww/v.b/lib"
-> IW_SESSION_DIR = "/usr/app/people/imswww/v.b/tmp/imswww-usr/809033436-10153"
-> IW_SESSION_ID = "809033436-10153"
-> IW_TMP_DIR = "/usr/app/people/imswww/v.b/tmp"
-> PATH = "/bin:/usr/bin:/usr/etc:/usr/ucb:/usr/local/bin:/usr/ucb"
-> QUERY_STRING = ""
-> REMOTE_ADDR = "128.138.135.33"
-> REMOTE_HOST = "sitka.colorado.edu"
-> REQUEST_METHOD = "POST"
-> SCRIPT_NAME = "/ims-bin/v.b/imssearch"
-> SERVER_NAME = "rhine.gsfc.nasa.gov"
-> SERVER_PORT = "8080"
-> SERVER_PROTOCOL = "HTTP/1.0"
-> SERVER_SOFTWARE = "NCSA/1.4.2"
-> SYSLOG_LEVEL = "7"
-> USRDATA_DIR = "/usr/app/people/imswww/v.b/tmp/imswww-usr/809033436-10153"
->
-> Tags
->
-> pmap-geo-opt = "map"
-> pparam-param = "Sea Ice Concentration"
-> pparam-param = "Snow Cover"
-> pparam-param = "Total Sea Ice Concentration"
-> s-east-long = "-40.0"
-> s-north-lat = "75.3"
-> s-south-lat = "66.0"
-> s-start-date = "01-01-1990"
-> s-start-time = ""
-> s-stop-date = "31-12-1994"
-> s-stop-time = ""
-> s-west-long = "-176.0"
-> sid = "809033436-10153"
->
-> Permissions
->
-> Real user id = 65534
-> Real group ids = 65534 65534
-> Effective user id = 65534
-> Effective group ids = 65534 65534
->
-> ------------------------------------------------------------------------
->
->
-> Log file /usr/app/people/imswww/v.b/tmp/imswww-usr/10184.clog
->
-> II 1995/08/21 15:33:50 IwLog 94
-> Logging begun
-> WWW 1995/08/21 15:33:50 Iw 263
-> Perl: Use of uninitialized value at /usr/app/people/imswww/v.b/lib/perl/ims ;
-> search.pl line 82.
-> |
-> EEEE 1995/08/21 15:33:51 Iw 95
-> Bad mode: SEARCH/ (600).
->
-> ------------------------------------------------------------------------
->
->
-> Session information
->
-> [Session Directory]
->
-> ------------------------------------------------------------------------
->
-> Generated by EOSDIS IMS/www version 0.3b / imswww(a)rhine.gsfc.nasa.gov
-> NASA/GSFC Task Representative: Yonsook Enloe, yonsook(a)killians.gsfc.nasa.gov
->
-> A joint project of NASA/GSFC, A/WWW Enterprises, and Hughes STX Corporation.
-> Full contact information is available.
-
----------------------------------147881770724098
-Content-Type: text/plain
-Content-Transfer-Encoding: 8bit
-
-[[ERROR]] Error 600: Internal logic.
-
-Dying gasp:
-Bad mode: SEARCH/ (600).
-
-Recommended action to correct the situation:
-YIKES! IMS/www failed one of its internal consistency checks! Please SAVE THIS
-FILE, and contact IMS/www's developers immediately so they can fix the problem!
-If the parentheses at the end of this sentence are not blank, you can contact
-them here (imswww(a)rhine.gsfc.nasa.gov).
-
- ------------------------------------------------------------------------
-
-
-Location of error
-
-Dying gasp:
-Package "main", file "/usr/app/people/imswww/v.b/lib/perl/imssearch.pl", line
-753.
-
-Traceback:
-
- 1. Iw::Die: from "main", "/usr/app/people/imswww/v.b/lib/perl/imssearch.pl
- line 753
- 2. main::Main: from "main", "/usr/app/people/imswww/public_cgi/v.b/imssearch
- line 85
-
- ------------------------------------------------------------------------
-
-
-Basic state information
-
-Include path
-
-/usr/app/people/imswww/v.b/lib/perl
-/usr/app/people/imswww/v.b/lib/perl/Eg
-/usr/local/lib/perl5/sun4-sunos
-/usr/local/lib/perl5
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-badnames.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-badnames.msg
deleted file mode 100644
index 5533437..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-badnames.msg
+++ /dev/null
@@ -1,30 +0,0 @@
-From: Nathaniel Borenstein <nsb(a)bellcore.com>
-To: Ned Freed <ned(a)innosoft.com>
-Subject: Sample message
-MIME-Version: 1.0
-Content-type: multipart/mixed; boundary="simple
- boundary"
-
-This is the preamble. It is to be ignored, though it
-is a handy place for mail composers to include an
-explanatory note to non-MIME conformant readers.
---simple boundary
-Content-type: text/plain; charset=us-ascii; name="/foo/bar"
-
-
---simple boundary
-Content-type: text/plain; charset=us-ascii; name="foo bar"
-
-This is explicitly typed plain ASCII text.
-It DOES end with a linebreak.
-
-
---simple boundary
-Content-type: text/plain; charset=us-ascii; name="foobar"
-
-This is explicitly typed plain ASCII text.
-It DOES end with a linebreak.
-
---simple boundary--
-This is the epilogue. It is also to be ignored.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-clen.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-clen.msg
deleted file mode 100644
index cc9ca41..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-clen.msg
+++ /dev/null
@@ -1,38 +0,0 @@
-From: Nathaniel Borenstein <nsb(a)bellcore.com>
-To: Ned Freed <ned(a)innosoft.com>
-Subject: Sample message
-MIME-Version: 1.0
-Content-type: multipart/mixed; boundary="simple
- boundary"
-
-This is the preamble. It is to be ignored, though it
-is a handy place for mail composers to include an
-explanatory note to non-MIME conformant readers.
---simple boundary
-
-This is implicitly typed plain ASCII text.
-It does NOT end with a linebreak.
---simple boundary
-Content-type: text/x-numbers; charset=us-ascii
-Content-length: 30
-
-123456789
-123456789
-123456789
---simple boundary
-Content-type: text/x-alphabet; charset=us-ascii
-Content-length: 600
-
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
---simple boundary--
-This is the epilogue. It is also to be ignored.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-digest.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-digest.msg
deleted file mode 100644
index 62cd6a8..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-digest.msg
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Nathaniel Borenstein <nsb(a)bellcore.com>
-To: Ned Freed <ned(a)innosoft.com>
-Subject: Sample digest message
-MIME-Version: 1.0
-Content-type: multipart/digest; boundary="simple
- boundary"
-
-This is the preamble. It is to be ignored, though it
-is a handy place for mail composers to include an
-explanatory note to non-MIME conformant readers.
---simple boundary
-
-This is implicitly typed plain ASCII text.
-It does NOT end with a linebreak.
---simple boundary
-Content-type: text/plain; charset=us-ascii
-
-This is explicitly typed plain ASCII text.
-It DOES end with a linebreak.
-
---simple boundary--
-This is the epilogue. It is also to be ignored.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor.msg
deleted file mode 100644
index 58d26c4..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor.msg
+++ /dev/null
@@ -1,198 +0,0 @@
-Date: Thu, 6 Jun 1996 15:50:39 +0400 (MOW DST)
-From: Starovoitov Igor <igor(a)fripp.aic.synapse.ru>
-To: eryq(a)rhine.gsfc.nasa.gov
-Subject: Need help
-MIME-Version: 1.0
-Content-Type: MULTIPART/MIXED; BOUNDARY="-490585488-806670346-834061839=:2195"
-
- This message is in MIME format. The first part should be readable text,
- while the remaining parts are likely unreadable without MIME-aware tools.
- Send mail to mime(a)docserver.cac.washington.edu for more info.
-
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-
-Dear Sir,
-
-I have a problem with Your MIME-Parser-1.9
-and multipart-nested messages.
-Not all parts are parsed.
-
-Here my Makefile, Your own multipart-nested.msg
-and its out after "make test".
-Some my messages not completely parsed too.
-
-Is this a bug?
-
-Thank You for help.
-
-
-Igor Starovoytov.
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195B(a)fripp.aic.synapse.ru>
-Content-Description: Makefile
-
-Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLQ0KIyBNYWtlZmlsZSBmb3IgTUlNRTo6DQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCiMgV2hlcmUgdG8gaW5zdGFsbCB0aGUgbGlicmFy
-aWVzOg0KU0lURV9QRVJMID0gL3Vzci9saWIvcGVybDUNCg0KIyBXaGF0IFBl
-cmw1IGlzIGNhbGxlZCBvbiB5b3VyIHN5c3RlbSAobm8gbmVlZCB0byBnaXZl
-IGVudGlyZSBwYXRoKToNClBFUkw1ICAgICA9IHBlcmwNCg0KIyBZb3UgcHJv
-YmFibHkgd29uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlc2UuLi4NCk1PRFMgICAg
-ICA9IERlY29kZXIucG0gRW50aXR5LnBtIEhlYWQucG0gUGFyc2VyLnBtIEJh
-c2U2NC5wbSBRdW90ZWRQcmludC5wbQ0KU0hFTEwgICAgID0gL2Jpbi9zaA0K
-DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tDQojIEZvciBpbnN0YWxsZXJzLi4uDQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCmhlbHA6CQ0KCUBlY2hvICJWYWxpZCB0YXJnZXRz
-OiB0ZXN0IGNsZWFuIGluc3RhbGwiDQoNCmNsZWFuOg0KCXJtIC1mIHRlc3Rv
-dXQvKg0KDQp0ZXN0Og0KIwlAZWNobyAiVEVTVElORyBIZWFkLnBtLi4uIg0K
-Iwkke1BFUkw1fSBNSU1FL0hlYWQucG0gICA8IHRlc3Rpbi9maXJzdC5oZHIg
-ICAgICAgPiB0ZXN0b3V0L0hlYWQub3V0DQojCUBlY2hvICJURVNUSU5HIERl
-Y29kZXIucG0uLi4iDQojCSR7UEVSTDV9IE1JTUUvRGVjb2Rlci5wbSA8IHRl
-c3Rpbi9xdW90LXByaW50LmJvZHkgPiB0ZXN0b3V0L0RlY29kZXIub3V0DQoj
-CUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAoc2ltcGxlKS4uLiINCiMJJHtQ
-RVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0aW4vc2ltcGxlLm1zZyAgICAg
-ID4gdGVzdG91dC9QYXJzZXIucy5vdXQNCiMJQGVjaG8gIlRFU1RJTkcgUGFy
-c2VyLnBtIChtdWx0aXBhcnQpLi4uIg0KIwkke1BFUkw1fSBNSU1FL1BhcnNl
-ci5wbSA8IHRlc3Rpbi9tdWx0aS0yZ2lmcy5tc2cgPiB0ZXN0b3V0L1BhcnNl
-ci5tLm91dA0KCUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAobXVsdGlfbmVz
-dGVkLm1zZykuLi4iDQoJJHtQRVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0
-aW4vbXVsdGktbmVzdGVkLm1zZyA+IHRlc3RvdXQvUGFyc2VyLm4ub3V0DQoJ
-QGVjaG8gIkFsbCB0ZXN0cyBwYXNzZWQuLi4gc2VlIC4vdGVzdG91dC9NT0RV
-TEUqLm91dCBmb3Igb3V0cHV0Ig0KDQppbnN0YWxsOg0KCUBpZiBbICEgLWQg
-JHtTSVRFX1BFUkx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJQbGVhc2UgZWRp
-dCB0aGUgU0lURV9QRVJMIGluIHlvdXIgTWFrZWZpbGUiOyBleGl0IC0xOyBc
-DQogICAgICAgIGZpICAgICAgICAgIA0KCUBpZiBbICEgLXcgJHtTSVRFX1BF
-Ukx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJObyBwZXJtaXNzaW9uLi4uIHNo
-b3VsZCB5b3UgYmUgcm9vdD8iOyBleGl0IC0xOyBcDQogICAgICAgIGZpICAg
-ICAgICAgIA0KCUBpZiBbICEgLWQgJHtTSVRFX1BFUkx9L01JTUUgXTsgdGhl
-biBcDQoJICAgIG1rZGlyICR7U0lURV9QRVJMfS9NSU1FOyBcDQogICAgICAg
-IGZpDQoJaW5zdGFsbCAtbSAwNjQ0IE1JTUUvKi5wbSAke1NJVEVfUEVSTH0v
-TUlNRQ0KDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgRm9yIGRldmVsb3BlciBv
-bmx5Li4uDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClBPRDJIVE1MX0ZMQUdTID0g
-LS1wb2RwYXRoPS4gLS1mbHVzaCAtLWh0bWxyb290PS4uDQpIVE1MUyAgICAg
-ICAgICA9ICR7TU9EUzoucG09Lmh0bWx9DQpWUEFUSCAgICAgICAgICA9IE1J
-TUUNCg0KLlNVRkZJWEVTOiAucG0gLnBvZCAuaHRtbA0KDQojIHYuMS44IGdl
-bmVyYXRlZCAzMCBBcHIgOTYNCiMgdi4xLjkgaXMgb25seSBiZWNhdXNlIDEu
-OCBmYWlsZWQgQ1BBTiBpbmdlc3Rpb24NCmRpc3Q6IGRvY3VtZW50ZWQJDQoJ
-VkVSU0lPTj0xLjkgOyBcDQoJbWtkaXN0IC10Z3ogTUlNRS1wYXJzZXItJCRW
-RVJTSU9OIDsgXA0KCWNwIE1LRElTVC9NSU1FLXBhcnNlci0kJFZFUlNJT04u
-dGd6ICR7SE9NRX0vcHVibGljX2h0bWwvY3Bhbg0KCQ0KZG9jdW1lbnRlZDog
-JHtIVE1MU30gJHtNT0RTfQ0KDQoucG0uaHRtbDoNCglwb2QyaHRtbCAke1BP
-RDJIVE1MX0ZMQUdTfSBcDQoJCS0tdGl0bGU9TUlNRTo6JCogXA0KCQktLWlu
-ZmlsZT0kPCBcDQoJCS0tb3V0ZmlsZT1kb2NzLyQqLmh0bWwNCg0KIy0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLQ0K
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="multi-nested.msg"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195C(a)fripp.aic.synapse.ru>
-Content-Description: test message
-
-TUlNRS1WZXJzaW9uOiAxLjANCkZyb206IExvcmQgSm9obiBXaG9yZmluIDx3
-aG9yZmluQHlveW9keW5lLmNvbT4NClRvOiA8am9obi15YXlhQHlveW9keW5l
-LmNvbT4NClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQgbXVsdGlwYXJ0IGV4
-YW1wbGUNCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOw0KICAgICBi
-b3VuZGFyeT11bmlxdWUtYm91bmRhcnktMQ0KDQpUaGUgcHJlYW1ibGUgb2Yg
-dGhlIG91dGVyIG11bHRpcGFydCBtZXNzYWdlLg0KTWFpbCByZWFkZXJzIHRo
-YXQgdW5kZXJzdGFuZCBtdWx0aXBhcnQgZm9ybWF0DQpzaG91bGQgaWdub3Jl
-IHRoaXMgcHJlYW1ibGUuDQpJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyB0ZXh0
-LCB5b3UgbWlnaHQgd2FudCB0bw0KY29uc2lkZXIgY2hhbmdpbmcgdG8gYSBt
-YWlsIHJlYWRlciB0aGF0IHVuZGVyc3RhbmRzDQpob3cgdG8gcHJvcGVybHkg
-ZGlzcGxheSBtdWx0aXBhcnQgbWVzc2FnZXMuDQotLXVuaXF1ZS1ib3VuZGFy
-eS0xDQoNClBhcnQgMSBvZiB0aGUgb3V0ZXIgbWVzc2FnZS4NCltOb3RlIHRo
-YXQgdGhlIHByZWNlZGluZyBibGFuayBsaW5lIG1lYW5zDQpubyBoZWFkZXIg
-ZmllbGRzIHdlcmUgZ2l2ZW4gYW5kIHRoaXMgaXMgdGV4dCwNCndpdGggY2hh
-cnNldCBVUyBBU0NJSS4gIEl0IGNvdWxkIGhhdmUgYmVlbg0KZG9uZSB3aXRo
-IGV4cGxpY2l0IHR5cGluZyBhcyBpbiB0aGUgbmV4dCBwYXJ0Ll0NCg0KLS11
-bmlxdWUtYm91bmRhcnktMQ0KQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBj
-aGFyc2V0PVVTLUFTQ0lJDQoNClBhcnQgMiBvZiB0aGUgb3V0ZXIgbWVzc2Fn
-ZS4NClRoaXMgY291bGQgaGF2ZSBiZWVuIHBhcnQgb2YgdGhlIHByZXZpb3Vz
-IHBhcnQsDQpidXQgaWxsdXN0cmF0ZXMgZXhwbGljaXQgdmVyc3VzIGltcGxp
-Y2l0DQp0eXBpbmcgb2YgYm9keSBwYXJ0cy4NCg0KLS11bmlxdWUtYm91bmRh
-cnktMQ0KU3ViamVjdDogUGFydCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlz
-IG11bHRpcGFydCENCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3BhcmFsbGVs
-Ow0KICAgICBib3VuZGFyeT11bmlxdWUtYm91bmRhcnktMg0KDQpBIG9uZS1s
-aW5lIHByZWFtYmxlIGZvciB0aGUgaW5uZXIgbXVsdGlwYXJ0IG1lc3NhZ2Uu
-DQotLXVuaXF1ZS1ib3VuZGFyeS0yDQpDb250ZW50LVR5cGU6IGltYWdlL2dp
-Zg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0DQpDb250ZW50
-LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIzZC1jb21wcmVzcy5n
-aWYiDQpTdWJqZWN0OiBQYXJ0IDEgb2YgdGhlIGlubmVyIG1lc3NhZ2UgaXMg
-YSBHSUYsICIzZC1jb21wcmVzcy5naWYiDQoNClIwbEdPRGRoS0FBb0FPTUFB
-QUFBQUFBQWdCNlEveTlQVDI1dWJuQ0FrS0JTTGI2K3Z1Zm41L1hlcy8rbEFQ
-LzZ6UUFBQUFBQQ0KQUFBQUFBQUFBQ3dBQUFBQUtBQW9BQUFFL2hESlNhdTll
-SkxNT3lZYmNveGthWjVvQ2tvSDZMNXdMTWZpV3FkNGJ0WmhteGJBDQpvRkNZ
-NDdFSXFNSmd5V3cyQVRqajdhUmtBcTVZd0RNbDlWR3RLTzBTaXVvaVRWbHNj
-c3h0OWM0SGdYeFVJQTBFQVZPVmZES1QNCjhIbDFCM2tEQVlZbGUyMDJYbkdH
-Z29NSGhZY2tpV1Z1UjMrT1RnQ0dlWlJzbG90d2dKMmxuWWlnZlpkVGpRVUxy
-N0FMQlpOMA0KcVR1cmpIZ0xLQXUwQjVXcW9wbTdKNzJldFFOOHQ4SWp1cnkr
-d010dnc4L0h2N1lsZnMwQnhDYkdxTW1LMHlPT1EwR1RDZ3JSDQoyYmh3Skds
-WEpRWUc2bU1Lb2VOb1dTYnpDV0lBQ2U1Snd4UW0zQWtEQWJVQVFDaVFoRFpF
-QmVCbDZhZmdDc09CckQ0NWVkSXYNClFjZUdXU01ldnBPWWhsNkNreWRCSGhC
-WlFtR0tqaWhWc2h5cGpCOUNsQUhaTVR1Z3pPVTdtemhCUGlTWjV1RE5uQTdi
-L2FUWg0KMG1oTW5mbDBwREJGYTZiVUVsU1BXYjBxdFl1SHJ4bHdjUjE3WXNX
-TXMyalRxbDNMRmtRRUFEcz0NCi0tdW5pcXVlLWJvdW5kYXJ5LTINCkNvbnRl
-bnQtVHlwZTogaW1hZ2UvZ2lmDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n
-OiBiYXNlNjQNCkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5h
-bWU9IjNkLWV5ZS5naWYiDQpTdWJqZWN0OiBQYXJ0IDIgb2YgdGhlIGlubmVy
-IG1lc3NhZ2UgaXMgYW5vdGhlciBHSUYsICIzZC1leWUuZ2lmIg0KDQpSMGxH
-T0RkaEtBQW9BUE1BQUFBQUFBQUF6TjN1Lzc2K3ZvaUlpRzV1YnN6ZDd2Ly8v
-K2ZuNXdBQUFBQUFBQUFBQUFBQUFBQUENCkFBQUFBQUFBQUN3QUFBQUFLQUFv
-QUFBRS9oREpTYXU5ZUpiTU95NGJNb3hrYVo1b0Nrb0Q2TDV3TE1maVduczQx
-b1p0N2xNNw0KVnVqbkM5NklSVnNQV1FFNG54UGprdm1zUW11OG9jL0tCVVNW
-V2s3WGVwR0dMZU5yeG94Sk8xTWpJTGp0aGcva1dYUTZ3Ty83DQorM2RDZVJS
-amZBS0hpSW1KQVYrRENGMEJpVzVWQW8xQ0VsYVJoNU5qbGtlWW1weVRncGNU
-QUtHaWFhU2Zwd0twVlFheFZhdEwNCnJVOEdhUWRPQkFRQUI3K3lYbGlYVHJn
-QXhzVzR2RmFidjhCT3RCc0J0N2NHdndDSVQ5bk95TkVJeHVDNHpycUt6YzlY
-Yk9ESg0KdnM3WTVld0gzZDdGeGUzakI0cmo4dDZQdU5hNnIyYmhLUVhOMTdG
-WUNCTXFUR2lCelNOaHg1ZzBuRU1obHNTSmppUll2RGp3DQpFMGNkR3hRL2dz
-d29zb0tVa211VTJGbkpjc1NLR1RCanlweEpzeWFJQ0FBNw0KLS11bmlxdWUt
-Ym91bmRhcnktMi0tDQoNClRoZSBlcGlsb2d1ZSBmb3IgdGhlIGlubmVyIG11
-bHRpcGFydCBtZXNzYWdlLg0KDQotLXVuaXF1ZS1ib3VuZGFyeS0xDQpDb250
-ZW50LXR5cGU6IHRleHQvcmljaHRleHQNCg0KVGhpcyBpcyA8Ym9sZD5wYXJ0
-IDQgb2YgdGhlIG91dGVyIG1lc3NhZ2U8L2JvbGQ+DQo8c21hbGxlcj5hcyBk
-ZWZpbmVkIGluIFJGQzEzNDE8L3NtYWxsZXI+PG5sPg0KPG5sPg0KSXNuJ3Qg
-aXQgPGJpZ2dlcj48YmlnZ2VyPmNvb2w/PC9iaWdnZXI+PC9iaWdnZXI+DQoN
-Ci0tdW5pcXVlLWJvdW5kYXJ5LTENCkNvbnRlbnQtVHlwZTogbWVzc2FnZS9y
-ZmM4MjINCg0KRnJvbTogKG1haWxib3ggaW4gVVMtQVNDSUkpDQpUbzogKGFk
-ZHJlc3MgaW4gVVMtQVNDSUkpDQpTdWJqZWN0OiBQYXJ0IDUgb2YgdGhlIG91
-dGVyIG1lc3NhZ2UgaXMgaXRzZWxmIGFuIFJGQzgyMiBtZXNzYWdlIQ0KQ29u
-dGVudC1UeXBlOiBUZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTENCkNv
-bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFF1b3RlZC1wcmludGFibGUNCg0K
-UGFydCA1IG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIGl0c2VsZiBhbiBSRkM4
-MjIgbWVzc2FnZSENCg0KLS11bmlxdWUtYm91bmRhcnktMS0tDQoNClRoZSBl
-cGlsb2d1ZSBmb3IgdGhlIG91dGVyIG1lc3NhZ2UuDQo=
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Parser.n.out"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195D(a)fripp.aic.synapse.ru>
-Content-Description: out from parser
-
-KiBXYWl0aW5nIGZvciBhIE1JTUUgbWVzc2FnZSBmcm9tIFNURElOLi4uDQo9
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT09PT09PT09PT09PT0NCkNvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L21peGVk
-DQpCb2R5LWZpbGU6IE5PTkUNClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQg
-bXVsdGlwYXJ0IGV4YW1wbGUNCk51bS1wYXJ0czogMw0KLS0NCiAgICBDb250
-ZW50LXR5cGU6IHRleHQvcGxhaW4NCiAgICBCb2R5LWZpbGU6IC4vdGVzdG91
-dC9tc2ctMzUzOC0xLmRvYw0KICAgIC0tDQogICAgQ29udGVudC10eXBlOiB0
-ZXh0L3BsYWluDQogICAgQm9keS1maWxlOiAuL3Rlc3RvdXQvbXNnLTM1Mzgt
-Mi5kb2MNCiAgICAtLQ0KICAgIENvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L3Bh
-cmFsbGVsDQogICAgQm9keS1maWxlOiBOT05FDQogICAgU3ViamVjdDogUGFy
-dCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIG11bHRpcGFydCENCiAgICBO
-dW0tcGFydHM6IDINCiAgICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGlt
-YWdlL2dpZg0KICAgICAgICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1jb21w
-cmVzcy5naWYNCiAgICAgICAgU3ViamVjdDogUGFydCAxIG9mIHRoZSBpbm5l
-ciBtZXNzYWdlIGlzIGEgR0lGLCAiM2QtY29tcHJlc3MuZ2lmIg0KICAgICAg
-ICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGltYWdlL2dpZg0KICAgICAg
-ICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1leWUuZ2lmDQogICAgICAgIFN1
-YmplY3Q6IFBhcnQgMiBvZiB0aGUgaW5uZXIgbWVzc2FnZSBpcyBhbm90aGVy
-IEdJRiwgIjNkLWV5ZS5naWYiDQogICAgICAgIC0tDQo9PT09PT09PT09PT09
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT0NCg0K
----490585488-806670346-834061839=:2195--
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor2.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor2.msg
deleted file mode 100644
index 195cf48..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-igor2.msg
+++ /dev/null
@@ -1,198 +0,0 @@
-Date: Thu, 6 Jun 1996 15:50:39 +0400 (MOW DST)
-From: Starovoitov Igor <igor(a)fripp.aic.synapse.ru>
-To: eryq(a)rhine.gsfc.nasa.gov
-Subject: Need help
-MIME-Version: 1.0
-Content-Type: MULTIPART/MIXED; BOUNDARY="-490585488-806670346-834061839=:2195"
-
- This message is in MIME format. The first part should be readable text,
- while the remaining parts are likely unreadable without MIME-aware tools.
- Send mail to mime(a)docserver.cac.washington.edu for more info.
-
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-
-Dear Sir,
-
-I have a problem with Your MIME-Parser-1.9
-and multipart-nested messages.
-Not all parts are parsed.
-
-Here my Makefile, Your own multipart-nested.msg
-and its out after "make test".
-Some my messages not completely parsed too.
-
-Is this a bug?
-
-Thank You for help.
-
-
-Igor Starovoytov.
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195B(a)fripp.aic.synapse.ru>
-Content-Description: Makefile
-
-Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLQ0KIyBNYWtlZmlsZSBmb3IgTUlNRTo6DQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCiMgV2hlcmUgdG8gaW5zdGFsbCB0aGUgbGlicmFy
-aWVzOg0KU0lURV9QRVJMID0gL3Vzci9saWIvcGVybDUNCg0KIyBXaGF0IFBl
-cmw1IGlzIGNhbGxlZCBvbiB5b3VyIHN5c3RlbSAobm8gbmVlZCB0byBnaXZl
-IGVudGlyZSBwYXRoKToNClBFUkw1ICAgICA9IHBlcmwNCg0KIyBZb3UgcHJv
-YmFibHkgd29uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlc2UuLi4NCk1PRFMgICAg
-ICA9IERlY29kZXIucG0gRW50aXR5LnBtIEhlYWQucG0gUGFyc2VyLnBtIEJh
-c2U2NC5wbSBRdW90ZWRQcmludC5wbQ0KU0hFTEwgICAgID0gL2Jpbi9zaA0K
-DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tDQojIEZvciBpbnN0YWxsZXJzLi4uDQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCmhlbHA6CQ0KCUBlY2hvICJWYWxpZCB0YXJnZXRz
-OiB0ZXN0IGNsZWFuIGluc3RhbGwiDQoNCmNsZWFuOg0KCXJtIC1mIHRlc3Rv
-dXQvKg0KDQp0ZXN0Og0KIwlAZWNobyAiVEVTVElORyBIZWFkLnBtLi4uIg0K
-Iwkke1BFUkw1fSBNSU1FL0hlYWQucG0gICA8IHRlc3Rpbi9maXJzdC5oZHIg
-ICAgICAgPiB0ZXN0b3V0L0hlYWQub3V0DQojCUBlY2hvICJURVNUSU5HIERl
-Y29kZXIucG0uLi4iDQojCSR7UEVSTDV9IE1JTUUvRGVjb2Rlci5wbSA8IHRl
-c3Rpbi9xdW90LXByaW50LmJvZHkgPiB0ZXN0b3V0L0RlY29kZXIub3V0DQoj
-CUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAoc2ltcGxlKS4uLiINCiMJJHtQ
-RVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0aW4vc2ltcGxlLm1zZyAgICAg
-ID4gdGVzdG91dC9QYXJzZXIucy5vdXQNCiMJQGVjaG8gIlRFU1RJTkcgUGFy
-c2VyLnBtIChtdWx0aXBhcnQpLi4uIg0KIwkke1BFUkw1fSBNSU1FL1BhcnNl
-ci5wbSA8IHRlc3Rpbi9tdWx0aS0yZ2lmcy5tc2cgPiB0ZXN0b3V0L1BhcnNl
-ci5tLm91dA0KCUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAobXVsdGlfbmVz
-dGVkLm1zZykuLi4iDQoJJHtQRVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0
-aW4vbXVsdGktbmVzdGVkLm1zZyA+IHRlc3RvdXQvUGFyc2VyLm4ub3V0DQoJ
-QGVjaG8gIkFsbCB0ZXN0cyBwYXNzZWQuLi4gc2VlIC4vdGVzdG91dC9NT0RV
-TEUqLm91dCBmb3Igb3V0cHV0Ig0KDQppbnN0YWxsOg0KCUBpZiBbICEgLWQg
-JHtTSVRFX1BFUkx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJQbGVhc2UgZWRp
-dCB0aGUgU0lURV9QRVJMIGluIHlvdXIgTWFrZWZpbGUiOyBleGl0IC0xOyBc
-DQogICAgICAgIGZpICAgICAgICAgIA0KCUBpZiBbICEgLXcgJHtTSVRFX1BF
-Ukx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJObyBwZXJtaXNzaW9uLi4uIHNo
-b3VsZCB5b3UgYmUgcm9vdD8iOyBleGl0IC0xOyBcDQogICAgICAgIGZpICAg
-ICAgICAgIA0KCUBpZiBbICEgLWQgJHtTSVRFX1BFUkx9L01JTUUgXTsgdGhl
-biBcDQoJICAgIG1rZGlyICR7U0lURV9QRVJMfS9NSU1FOyBcDQogICAgICAg
-IGZpDQoJaW5zdGFsbCAtbSAwNjQ0IE1JTUUvKi5wbSAke1NJVEVfUEVSTH0v
-TUlNRQ0KDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgRm9yIGRldmVsb3BlciBv
-bmx5Li4uDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClBPRDJIVE1MX0ZMQUdTID0g
-LS1wb2RwYXRoPS4gLS1mbHVzaCAtLWh0bWxyb290PS4uDQpIVE1MUyAgICAg
-ICAgICA9ICR7TU9EUzoucG09Lmh0bWx9DQpWUEFUSCAgICAgICAgICA9IE1J
-TUUNCg0KLlNVRkZJWEVTOiAucG0gLnBvZCAuaHRtbA0KDQojIHYuMS44IGdl
-bmVyYXRlZCAzMCBBcHIgOTYNCiMgdi4xLjkgaXMgb25seSBiZWNhdXNlIDEu
-OCBmYWlsZWQgQ1BBTiBpbmdlc3Rpb24NCmRpc3Q6IGRvY3VtZW50ZWQJDQoJ
-VkVSU0lPTj0xLjkgOyBcDQoJbWtkaXN0IC10Z3ogTUlNRS1wYXJzZXItJCRW
-RVJTSU9OIDsgXA0KCWNwIE1LRElTVC9NSU1FLXBhcnNlci0kJFZFUlNJT04u
-dGd6ICR7SE9NRX0vcHVibGljX2h0bWwvY3Bhbg0KCQ0KZG9jdW1lbnRlZDog
-JHtIVE1MU30gJHtNT0RTfQ0KDQoucG0uaHRtbDoNCglwb2QyaHRtbCAke1BP
-RDJIVE1MX0ZMQUdTfSBcDQoJCS0tdGl0bGU9TUlNRTo6JCogXA0KCQktLWlu
-ZmlsZT0kPCBcDQoJCS0tb3V0ZmlsZT1kb2NzLyQqLmh0bWwNCg0KIy0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLQ0K
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="multi-nested.msg"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195C(a)fripp.aic.synapse.ru>
-Content-Description: test message
-
-TUlNRS1WZXJzaW9uOiAxLjANCkZyb206IExvcmQgSm9obiBXaG9yZmluIDx3
-aG9yZmluQHlveW9keW5lLmNvbT4NClRvOiA8am9obi15YXlhQHlveW9keW5l
-LmNvbT4NClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQgbXVsdGlwYXJ0IGV4
-YW1wbGUNCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOw0KICAgICBi
-b3VuZGFyeT11bmlxdWUtYm91bmRhcnktMQ0KDQpUaGUgcHJlYW1ibGUgb2Yg
-dGhlIG91dGVyIG11bHRpcGFydCBtZXNzYWdlLg0KTWFpbCByZWFkZXJzIHRo
-YXQgdW5kZXJzdGFuZCBtdWx0aXBhcnQgZm9ybWF0DQpzaG91bGQgaWdub3Jl
-IHRoaXMgcHJlYW1ibGUuDQpJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyB0ZXh0
-LCB5b3UgbWlnaHQgd2FudCB0bw0KY29uc2lkZXIgY2hhbmdpbmcgdG8gYSBt
-YWlsIHJlYWRlciB0aGF0IHVuZGVyc3RhbmRzDQpob3cgdG8gcHJvcGVybHkg
-ZGlzcGxheSBtdWx0aXBhcnQgbWVzc2FnZXMuDQotLXVuaXF1ZS1ib3VuZGFy
-eS0xDQoNClBhcnQgMSBvZiB0aGUgb3V0ZXIgbWVzc2FnZS4NCltOb3RlIHRo
-YXQgdGhlIHByZWNlZGluZyBibGFuayBsaW5lIG1lYW5zDQpubyBoZWFkZXIg
-ZmllbGRzIHdlcmUgZ2l2ZW4gYW5kIHRoaXMgaXMgdGV4dCwNCndpdGggY2hh
-cnNldCBVUyBBU0NJSS4gIEl0IGNvdWxkIGhhdmUgYmVlbg0KZG9uZSB3aXRo
-IGV4cGxpY2l0IHR5cGluZyBhcyBpbiB0aGUgbmV4dCBwYXJ0Ll0NCg0KLS11
-bmlxdWUtYm91bmRhcnktMQ0KQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBj
-aGFyc2V0PVVTLUFTQ0lJDQoNClBhcnQgMiBvZiB0aGUgb3V0ZXIgbWVzc2Fn
-ZS4NClRoaXMgY291bGQgaGF2ZSBiZWVuIHBhcnQgb2YgdGhlIHByZXZpb3Vz
-IHBhcnQsDQpidXQgaWxsdXN0cmF0ZXMgZXhwbGljaXQgdmVyc3VzIGltcGxp
-Y2l0DQp0eXBpbmcgb2YgYm9keSBwYXJ0cy4NCg0KLS11bmlxdWUtYm91bmRh
-cnktMQ0KU3ViamVjdDogUGFydCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlz
-IG11bHRpcGFydCENCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3BhcmFsbGVs
-Ow0KICAgICBib3VuZGFyeT11bmlxdWUtYm91bmRhcnktMg0KDQpBIG9uZS1s
-aW5lIHByZWFtYmxlIGZvciB0aGUgaW5uZXIgbXVsdGlwYXJ0IG1lc3NhZ2Uu
-DQotLXVuaXF1ZS1ib3VuZGFyeS0yDQpDb250ZW50LVR5cGU6IGltYWdlL2dp
-Zg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0DQpDb250ZW50
-LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIzZC1jb21wcmVzcy5n
-aWYiDQpTdWJqZWN0OiBQYXJ0IDEgb2YgdGhlIGlubmVyIG1lc3NhZ2UgaXMg
-YSBHSUYsICIzZC1jb21wcmVzcy5naWYiDQoNClIwbEdPRGRoS0FBb0FPTUFB
-QUFBQUFBQWdCNlEveTlQVDI1dWJuQ0FrS0JTTGI2K3Z1Zm41L1hlcy8rbEFQ
-LzZ6UUFBQUFBQQ0KQUFBQUFBQUFBQ3dBQUFBQUtBQW9BQUFFL2hESlNhdTll
-SkxNT3lZYmNveGthWjVvQ2tvSDZMNXdMTWZpV3FkNGJ0WmhteGJBDQpvRkNZ
-NDdFSXFNSmd5V3cyQVRqajdhUmtBcTVZd0RNbDlWR3RLTzBTaXVvaVRWbHNj
-c3h0OWM0SGdYeFVJQTBFQVZPVmZES1QNCjhIbDFCM2tEQVlZbGUyMDJYbkdH
-Z29NSGhZY2tpV1Z1UjMrT1RnQ0dlWlJzbG90d2dKMmxuWWlnZlpkVGpRVUxy
-N0FMQlpOMA0KcVR1cmpIZ0xLQXUwQjVXcW9wbTdKNzJldFFOOHQ4SWp1cnkr
-d010dnc4L0h2N1lsZnMwQnhDYkdxTW1LMHlPT1EwR1RDZ3JSDQoyYmh3Skds
-WEpRWUc2bU1Lb2VOb1dTYnpDV0lBQ2U1Snd4UW0zQWtEQWJVQVFDaVFoRFpF
-QmVCbDZhZmdDc09CckQ0NWVkSXYNClFjZUdXU01ldnBPWWhsNkNreWRCSGhC
-WlFtR0tqaWhWc2h5cGpCOUNsQUhaTVR1Z3pPVTdtemhCUGlTWjV1RE5uQTdi
-L2FUWg0KMG1oTW5mbDBwREJGYTZiVUVsU1BXYjBxdFl1SHJ4bHdjUjE3WXNX
-TXMyalRxbDNMRmtRRUFEcz0NCi0tdW5pcXVlLWJvdW5kYXJ5LTINCkNvbnRl
-bnQtVHlwZTogaW1hZ2UvZ2lmDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n
-OiBiYXNlNjQNCkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5h
-bWU9IjNkLWV5ZS5naWYiDQpTdWJqZWN0OiBQYXJ0IDIgb2YgdGhlIGlubmVy
-IG1lc3NhZ2UgaXMgYW5vdGhlciBHSUYsICIzZC1leWUuZ2lmIg0KDQpSMGxH
-T0RkaEtBQW9BUE1BQUFBQUFBQUF6TjN1Lzc2K3ZvaUlpRzV1YnN6ZDd2Ly8v
-K2ZuNXdBQUFBQUFBQUFBQUFBQUFBQUENCkFBQUFBQUFBQUN3QUFBQUFLQUFv
-QUFBRS9oREpTYXU5ZUpiTU95NGJNb3hrYVo1b0Nrb0Q2TDV3TE1maVduczQx
-b1p0N2xNNw0KVnVqbkM5NklSVnNQV1FFNG54UGprdm1zUW11OG9jL0tCVVNW
-V2s3WGVwR0dMZU5yeG94Sk8xTWpJTGp0aGcva1dYUTZ3Ty83DQorM2RDZVJS
-amZBS0hpSW1KQVYrRENGMEJpVzVWQW8xQ0VsYVJoNU5qbGtlWW1weVRncGNU
-QUtHaWFhU2Zwd0twVlFheFZhdEwNCnJVOEdhUWRPQkFRQUI3K3lYbGlYVHJn
-QXhzVzR2RmFidjhCT3RCc0J0N2NHdndDSVQ5bk95TkVJeHVDNHpycUt6YzlY
-Yk9ESg0KdnM3WTVld0gzZDdGeGUzakI0cmo4dDZQdU5hNnIyYmhLUVhOMTdG
-WUNCTXFUR2lCelNOaHg1ZzBuRU1obHNTSmppUll2RGp3DQpFMGNkR3hRL2dz
-d29zb0tVa211VTJGbkpjc1NLR1RCanlweEpzeWFJQ0FBNw0KLS11bmlxdWUt
-Ym91bmRhcnktMi0tDQoNClRoZSBlcGlsb2d1ZSBmb3IgdGhlIGlubmVyIG11
-bHRpcGFydCBtZXNzYWdlLg0KDQotLXVuaXF1ZS1ib3VuZGFyeS0xDQpDb250
-ZW50LXR5cGU6IHRleHQvcmljaHRleHQNCg0KVGhpcyBpcyA8Ym9sZD5wYXJ0
-IDQgb2YgdGhlIG91dGVyIG1lc3NhZ2U8L2JvbGQ+DQo8c21hbGxlcj5hcyBk
-ZWZpbmVkIGluIFJGQzEzNDE8L3NtYWxsZXI+PG5sPg0KPG5sPg0KSXNuJ3Qg
-aXQgPGJpZ2dlcj48YmlnZ2VyPmNvb2w/PC9iaWdnZXI+PC9iaWdnZXI+DQoN
-Ci0tdW5pcXVlLWJvdW5kYXJ5LTENCkNvbnRlbnQtVHlwZTogbWVzc2FnZS9y
-ZmM4MjINCg0KRnJvbTogKG1haWxib3ggaW4gVVMtQVNDSUkpDQpUbzogKGFk
-ZHJlc3MgaW4gVVMtQVNDSUkpDQpTdWJqZWN0OiBQYXJ0IDUgb2YgdGhlIG91
-dGVyIG1lc3NhZ2UgaXMgaXRzZWxmIGFuIFJGQzgyMiBtZXNzYWdlIQ0KQ29u
-dGVudC1UeXBlOiBUZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTENCkNv
-bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFF1b3RlZC1wcmludGFibGUNCg0K
-UGFydCA1IG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIGl0c2VsZiBhbiBSRkM4
-MjIgbWVzc2FnZSENCg0KLS11bmlxdWUtYm91bmRhcnktMS0tDQoNClRoZSBl
-cGlsb2d1ZSBmb3IgdGhlIG91dGVyIG1lc3NhZ2UuDQo=
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Parser.n.out"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195D(a)fripp.aic.synapse.ru>
-Content-Description: out from parser
-
-KiBXYWl0aW5nIGZvciBhIE1JTUUgbWVzc2FnZSBmcm9tIFNURElOLi4uDQo9
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT09PT09PT09PT09PT0NCkNvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L21peGVk
-DQpCb2R5LWZpbGU6IE5PTkUNClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQg
-bXVsdGlwYXJ0IGV4YW1wbGUNCk51bS1wYXJ0czogMw0KLS0NCiAgICBDb250
-ZW50LXR5cGU6IHRleHQvcGxhaW4NCiAgICBCb2R5LWZpbGU6IC4vdGVzdG91
-dC9tc2ctMzUzOC0xLmRvYw0KICAgIC0tDQogICAgQ29udGVudC10eXBlOiB0
-ZXh0L3BsYWluDQogICAgQm9keS1maWxlOiAuL3Rlc3RvdXQvbXNnLTM1Mzgt
-Mi5kb2MNCiAgICAtLQ0KICAgIENvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L3Bh
-cmFsbGVsDQogICAgQm9keS1maWxlOiBOT05FDQogICAgU3ViamVjdDogUGFy
-dCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIG11bHRpcGFydCENCiAgICBO
-dW0tcGFydHM6IDINCiAgICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGlt
-YWdlL2dpZg0KICAgICAgICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1jb21w
-cmVzcy5naWYNCiAgICAgICAgU3ViamVjdDogUGFydCAxIG9mIHRoZSBpbm5l
-ciBtZXNzYWdlIGlzIGEgR0lGLCAiM2QtY29tcHJlc3MuZ2lmIg0KICAgICAg
-ICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGltYWdlL2dpZg0KICAgICAg
-ICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1leWUuZ2lmDQogICAgICAgIFN1
-YmplY3Q6IFBhcnQgMiBvZiB0aGUgaW5uZXIgbWVzc2FnZSBpcyBhbm90aGVy
-IEdJRiwgIjNkLWV5ZS5naWYiDQogICAgICAgIC0tDQo9PT09PT09PT09PT09
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT0NCg0K
----490585488-806670346-834061839=:2195--
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested.msg
deleted file mode 100644
index 686057a..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested.msg
+++ /dev/null
@@ -1,89 +0,0 @@
-MIME-Version: 1.0
-From: Lord John Whorfin <whorfin(a)yoyodyne.com>
-To: <john-yaya(a)yoyodyne.com>
-Subject: A complex nested multipart example
-Content-Type: multipart/mixed;
- boundary=unique-boundary-1
-
-The preamble of the outer multipart message.
-Mail readers that understand multipart format
-should ignore this preamble.
-If you are reading this text, you might want to
-consider changing to a mail reader that understands
-how to properly display multipart messages.
---unique-boundary-1
-
-Part 1 of the outer message.
-[Note that the preceding blank line means
-no header fields were given and this is text,
-with charset US ASCII. It could have been
-done with explicit typing as in the next part.]
-
---unique-boundary-1
-Content-type: text/plain; charset=US-ASCII
-
-Part 2 of the outer message.
-This could have been part of the previous part,
-but illustrates explicit versus implicit
-typing of body parts.
-
---unique-boundary-1
-Subject: Part 3 of the outer message is multipart!
-Content-Type: multipart/parallel;
- boundary=unique-boundary-2
-
-A one-line preamble for the inner multipart message.
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-vise.gif"
-Subject: Part 1 of the inner message is a GIF, "3d-vise.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-eye.gif"
-Subject: Part 2 of the inner message is another GIF, "3d-eye.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---unique-boundary-2--
-
-The epilogue for the inner multipart message.
-
---unique-boundary-1
-Content-type: text/richtext
-
-This is <bold>part 4 of the outer message</bold>
-<smaller>as defined in RFC1341</smaller><nl>
-<nl>
-Isn't it <bigger><bigger>cool?</bigger></bigger>
-
---unique-boundary-1
-Content-Type: message/rfc822; name="/evil/filename";
-
-From: (mailbox in US-ASCII)
-To: (address in US-ASCII)
-Subject: Part 5 of the outer message is itself an RFC822 message!
-Content-Type: Text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: Quoted-printable
-
-Part 5 of the outer message is itself an RFC822 message!
-
---unique-boundary-1--
-
-The epilogue for the outer message.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested2.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested2.msg
deleted file mode 100644
index baecbda..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested2.msg
+++ /dev/null
@@ -1,89 +0,0 @@
-MIME-Version: 1.0
-From: Lord John Whorfin <whorfin(a)yoyodyne.com>
-To: <john-yaya(a)yoyodyne.com>
-Subject: A complex nested multipart example
-Content-Type: multipart/mixed;
- boundary=unique-boundary-1
-
-The preamble of the outer multipart message.
-Mail readers that understand multipart format
-should ignore this preamble.
-If you are reading this text, you might want to
-consider changing to a mail reader that understands
-how to properly display multipart messages.
---unique-boundary-1
-
-Part 1 of the outer message.
-[Note that the preceding blank line means
-no header fields were given and this is text,
-with charset US ASCII. It could have been
-done with explicit typing as in the next part.]
-
---unique-boundary-1
-Content-type: text/plain; charset=US-ASCII
-
-Part 2 of the outer message.
-This could have been part of the previous part,
-but illustrates explicit versus implicit
-typing of body parts.
-
---unique-boundary-1
-Subject: Part 3 of the outer message is multipart!
-Content-Type: multipart/parallel;
- boundary=unique-boundary-2
-
-A one-line preamble for the inner multipart message.
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-vise.gif"
-Subject: Part 1 of the inner message is a GIF, "3d-vise.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-eye.gif"
-Subject: Part 2 of the inner message is another GIF, "3d-eye.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---unique-boundary-2--
-
-The epilogue for the inner multipart message.
-
---unique-boundary-1
-Content-type: text/richtext
-
-This is <bold>part 4 of the outer message</bold>
-<smaller>as defined in RFC1341</smaller><nl>
-<nl>
-Isn't it <bigger><bigger>cool?</bigger></bigger>
-
---unique-boundary-1
-Content-Type: message/rfc822; name="/evil/filename";
-
-From: (mailbox in US-ASCII)
-To: (address in US-ASCII)
-Subject: Part 5 of the outer message is itself an RFC822 message!
-Content-Type: Text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: Quoted-printable
-
-Part 5 of the outer message is itself an RFC822 message!
-
---unique-boundary-1--
-
-The epilogue for the outer message.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested3.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested3.msg
deleted file mode 100644
index d4fa9d5..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-nested3.msg
+++ /dev/null
@@ -1,89 +0,0 @@
-MIME-Version: 1.0
-From: Lord John Whorfin <whorfin(a)yoyodyne.com>
-To: <john-yaya(a)yoyodyne.com>
-Subject: A complex nested multipart example
-Content-Type: multipart/mixed;
- boundary=unique-boundary-1
-
-The preamble of the outer multipart message.
-Mail readers that understand multipart format
-should ignore this preamble.
-If you are reading this text, you might want to
-consider changing to a mail reader that understands
-how to properly display multipart messages.
---unique-boundary-1
-
-Part 1 of the outer message.
-[Note that the preceding blank line means
-no header fields were given and this is text,
-with charset US ASCII. It could have been
-done with explicit typing as in the next part.]
-
---unique-boundary-1
-Content-type: text/plain; charset=US-ASCII
-
-Part 2 of the outer message.
-This could have been part of the previous part,
-but illustrates explicit versus implicit
-typing of body parts.
-
---unique-boundary-1
-Subject: Part 3 of the outer message is multipart!
-Content-Type: multipart/parallel;
- boundary=unique-boundary-2
-
-A one-line preamble for the inner multipart message.
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-vise.gif"
-Subject: Part 1 of the inner message is a GIF, "3d-vise.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-eye.gif"
-Subject: Part 2 of the inner message is another GIF, "3d-eye.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---unique-boundary-2--
-
-The epilogue for the inner multipart message.
-
---unique-boundary-1
-Content-type: text/richtext
-
-This is <bold>part 4 of the outer message</bold>
-<smaller>as defined in RFC1341</smaller><nl>
-<nl>
-Isn't it <bigger><bigger>cool?</bigger></bigger>
-
---unique-boundary-1
-Content-Type: message/rfc822; name="nice.name";
-
-From: (mailbox in US-ASCII)
-To: (address in US-ASCII)
-Subject: Part 5 of the outer message is itself an RFC822 message!
-Content-Type: Text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: Quoted-printable
-
-Part 5 of the outer message is itself an RFC822 message!
-
---unique-boundary-1--
-
-The epilogue for the outer message.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-simple.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-simple.msg
deleted file mode 100644
index 8d086f0..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/multi-simple.msg
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Nathaniel Borenstein <nsb(a)bellcore.com>
-To: Ned Freed <ned(a)innosoft.com>
-Subject: Sample message
-MIME-Version: 1.0
-Content-type: multipart/mixed; boundary="simple
- boundary"
-
-This is the preamble. It is to be ignored, though it
-is a handy place for mail composers to include an
-explanatory note to non-MIME conformant readers.
---simple boundary
-
-This is implicitly typed plain ASCII text.
-It does NOT end with a linebreak.
---simple boundary
-Content-type: text/plain; charset=us-ascii
-
-This is explicitly typed plain ASCII text.
-It DOES end with a linebreak.
-
---simple boundary--
-This is the epilogue. It is also to be ignored.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/not-mime.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/not-mime.msg
deleted file mode 100644
index 6cd3daf..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/not-mime.msg
+++ /dev/null
@@ -1,17 +0,0 @@
-Return-Path: <s.rahtz(a)elsevier.co.uk>
-To: Eryq <eryq(a)rhine.stx.com>
-From: s.rahtz(a)elsevier.co.uk (Sebastian Rahtz)
-Subject: Re: HELP! Problems installing PSNFSS, and other querys
-Date: Wed, 15 Feb 1995 09:38:18
-
-try reading the LaTeX Companion for more details
-
-ignore the checksum error in lucida.dtx. i'll fix it
-
-sebastian
-Sebastian Rahtz s.rahtz(a)elsevier.co.uk
-Production Methods Group +44 1865 843662
-Elsevier Science Ltd
-Kidlington
-Oxford, UK
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil.b64 b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil.b64
deleted file mode 100644
index f0f7bb4..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil.b64
+++ /dev/null
@@ -1,8 +0,0 @@
-F
-i
-t Q======
-nSUoX
-L0OZhJ0Oc0OoRGuWAABkM1lJFahDqEOirdQh1CHVqihWoQ6hDohE0WLEBKFNOoQ
-6xQgNQoQ6hDqFC5bSLlCHUK0LrFihDqEMWqhWoQ6hD
-qEOqKEOk6KFC5YoUJ1vVQh1CHUK1CH
-UK06hCqF1ihDqFahDqFadQtmqhWsUJ0YQGoXKFCtFqhWsUIdQiNcsAABkM9iFlE6SINXROrR
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil.bin b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil.bin
deleted file mode 100644
index e518572..0000000
Binary files a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil.bin and /dev/null differ
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil2.b64 b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil2.b64
deleted file mode 100644
index 749d275..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/phil2.b64
+++ /dev/null
@@ -1,4 +0,0 @@
-FitQnSUoXL0OZhJ0Oc0OoRGuWAABkM1lJFahDqEOirdQh1CHVqihWoQ6hDoh
-E0WLEBKFNOoQ6xQgNQoQ6hDqFC5bSLlCHUK0LrFihDqEMWqhWoQ6hDqEOqKE
-Ok6KFC5YoUJ1vVQh1CHUK1CHUK06hCqF1ihDqFahDqFadQtmqhWsUJ0YQGoX
-KFCtFqhWsUIdQiNcsAABkM9iFlE6SINXROrR
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/quot-print.body b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/quot-print.body
deleted file mode 100644
index e616baa..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/quot-print.body
+++ /dev/null
@@ -1,41 +0,0 @@
-Mime-Version: 1.0
-Content-Type: text/plain; charset="us-ascii"
-Content-Transfer-Encoding: quoted-printable
-Date: Fri, 15 Sep 1995 22:40:17 -0700
-To: Eryq <eryq(a)www.mcs.com>
-Subject: Re: STOMP!
-
->"STOMP" is coming to Chicago! Deb has wanted to see them for the
->longest time, and by dumb luck I happened to be watching TV when
->they flashed the TicketMaster ad. I got mezzanine tickets on
->opening night... PSYCH!
->
->(Hee hee... she doesn't know yet... think I'll spring it on her now...) :-)
->
->Just thought I'd share that little bit of news... so, how are
->YOU doing?
-
-I'm submerged in school and my own plans for performances. I have one=
- planned for later in the fall. We have this wonderful theater space that=
- comes complete with tech and techies, and no one uses it. Evidently, there=
- is a bias against "theatrical" work here. So I get almost unlimited=
- rehearsal time! Heh heh. =20
-
-My professors are ok so far. The lecture class that looks the most=
- promising is a seminar on race and gender as it pertains to culture,=
- history, art history and popular images. The teacher is great, only she=
- tried to fit too much stuff into one semester. I have an exciting oral=
- report to work on for the next few weeks. I've met some truly=
- amazing individuals here. I get to take the DAT tape recorder out=
- for a spin in a week. I can't wait! =20
-
-I also got my video and sound up and working. Apple sent me a disk with an=
- older version of Quicktime on it so that my machine will stop crashing=
- during video capture. I'm set. I'm beyond thrilled.=20
-
-I'm also getting into the hairier parts of HTMLing. Right now I'm figuring=
- out imagemapping. The job at the Center has panned out nicely.=
- I work at the computers the whole time. =20
-
-Have fun at "STOMP!" *envy*....
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/second.hdr b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/second.hdr
deleted file mode 100644
index f6b931e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/second.hdr
+++ /dev/null
@@ -1,15 +0,0 @@
-Path: news.clark.net!rahul.net!a2i!bug.rahul.net!a2i!olivea!decwrl!lll-winken.llnl.gov!simtel!news.sprintlink.net!news.ais.net!usenet
-From: "Josh E. Schneider" <jschneid(a)ais.net>
-Newsgroups: comp.infosystems.www.authoring.cgi
-Subject: EMPLOYEMENT: CHICAGO, IL UNIX/CGI/WEB/DBASE
-Date: 7 Oct 1995 17:27:44 GMT
-Organization: American Information Systems, Inc.
-Lines: 33
-Message-ID: <456dag$jc2(a)news.ais.net>
-NNTP-Posting-Host: www.ama.org
-Mime-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-X-Mailer: Mozilla 1.1N (X11; I; Linux 1.2.8 i586)
-X-URL: news:comp.infosystems.www.authoring.cgi
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/short.txt b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/short.txt
deleted file mode 100644
index 534b43e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/short.txt
+++ /dev/null
@@ -1,6 +0,0 @@
-Dear «François Müller»,
-
-As you requested, I have rewritten the MIME:: parser modules to support
-the creation of MIME messages.
-
-Eryq
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig
deleted file mode 100644
index 13d4561..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig
+++ /dev/null
@@ -1,5 +0,0 @@
- ___ _ _ _ _ ___ _
- / _ \| '_| | | |/ _ ' / eryq(a)enteract.com
-| __/| | | |_| | |_| |
- \___||_| \__, |\__, |__ This FIRST signature inserted by MIME-tools
- |___/ |___/
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig-uu.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig-uu.msg
deleted file mode 100644
index ec122c8..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig-uu.msg
+++ /dev/null
@@ -1,29 +0,0 @@
-Content-type: text/plain
-Subject: Here's my UU'ed sig!
-
-Well, I don't know much about how these things are output,
-so here goes... first off, my .sig file:
-
-begin 644 .signature
-M("!?7U\@(%\@7R!?("`@7R`@7U]?(%\@("!%<GEQ("AE<GEQ0'IE96=E92YC
-M;VTI"B`O(%\@7'P@)U]\('P@?"!\+R!?("<@+R`@:'1T<#HO+W=W=RYE;G1E
-M<F%C="YC;VTO?F5R>7$*?"`@7U\O?"!\('P@?%]\('P@?%]\('P@("`*(%Q?
-M7U]\?%]\("!<7U\L('Q<7U\L('Q?7U\O7"`@5FES:70@4U1214545TE312P@
-M0VAI8V%G;R=S(&YE=W-P87!E<B!B>2\*("`@("`@("`@("!\7U]?+R`@("!\
-M7U]?7U]?+R!O9B!T:&4@:&]M96QE<W,Z(&AT='`Z+R]W=W<N<W1R965T=VES
-&92YO<F<*
-end
-
-And now, a little .gif icon:
-
-begin 644
-M1TE&.#EA%``6`,(``/___\S__YF9F3,S,P```````````````"'^3E1H:7,@
-M87)T(&ES(&EN('1H92!P=6)L:6,@9&]M86EN+B!+979I;B!(=6=H97,L(&ME
-M=FEN:$!E:70N8V]M+"!397!T96UB97(@,3DY-0`A^00!```!`"P`````%``6
-M```#7SBZO/$P#$"KG2.^*8C_!#")V@2"8I5!9FA1(\P"YT</!(YO0%?3-=YK
-M*"AV>+Z3Q4C@U3S$I(a)0XC#J?UFD2]3I.JU5O#+R4CLD4,;IK7I>%[EX[+M\,
-+C/A\<0=Y^J4)`#L`
-end
-
-
-Done!
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig2 b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig2
deleted file mode 100644
index f5cd9ae..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig2
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ _ _ _ _ ___ _
- / _ \| '_| | | |/ _ ' / eryq(a)enteract.com
-| __/| | | |_| | |_| |
- \___||_| \__, |\__, |__ This SECOND signature inserted by MIME-tools
- |___/ |___/
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig3 b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig3
deleted file mode 100644
index bf534bf..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/sig3
+++ /dev/null
@@ -1,6 +0,0 @@
- ___ _ _ _ _ ___ _
- / _ \| '_| | | |/ _ ' / eryq(a)enteract.com
-| __/| | | |_| | |_| |
- \___||_| \__, |\__, |__ This THIRD signature inserted by MIME-tools
- |___/ |___/
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msg
deleted file mode 100644
index a6a1336..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msg
+++ /dev/null
@@ -1,20 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Date: Wed, 20 Dec 95 19:59 CST
-From: eryq(a)rhine.gsfc.nasa.gov
-To: sitaram(a)selsvr.stx.com
-Cc: johnson@killians.gsfc.nasa.gov,harvel(a)killians.gsfc.nasa.gov, eryq
-Subject: Request for Leave
-
-I will be taking vacation from Friday, 12/22/95, through 12/26/95.
-I will be back on Wednesday, 12/27/95.
-
-Advance notice: I may take a second stretch of vacation after that,
-around New Year's.
-
-Thanks,
- ____ __
-| _/__________/_/ Eryq (eryq(a)rhine.gsfc.nasa.gov)
-| _| _/ | | . | Hughes STX Corporation, NASA/Goddard Space Flight Cntr.
-|___|_|\_ |_ |___
- | | |____/ http://selsvr.stx.com/~eryq/
- `-'
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgb b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgb
deleted file mode 100644
index 809665d..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgb
+++ /dev/null
@@ -1,13 +0,0 @@
-I will be taking vacation from Friday, 12/22/95, through 12/26/95.
-I will be back on Wednesday, 12/27/95.
-
-Advance notice: I may take a second stretch of vacation after that,
-around New Year's.
-
-Thanks,
- ____ __
-| _/__________/_/ Eryq (eryq(a)rhine.gsfc.nasa.gov)
-| _| _/ | | . | Hughes STX Corporation, NASA/Goddard Space Flight Cntr.
-|___|_|\_ |_ |___
- | | |____/ http://selsvr.stx.com/~eryq/
- `-'
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgh b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgh
deleted file mode 100644
index cf73f37..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/simple.msgh
+++ /dev/null
@@ -1,7 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Date: Wed, 20 Dec 95 19:59 CST
-From: eryq(a)rhine.gsfc.nasa.gov
-To: sitaram(a)selsvr.stx.com
-Cc: johnson@killians.gsfc.nasa.gov,harvel(a)killians.gsfc.nasa.gov, eryq
-Subject: Request for Leave
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/third.hdr b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/third.hdr
deleted file mode 100644
index 23ef94d..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/third.hdr
+++ /dev/null
@@ -1,16 +0,0 @@
-From eryq(a)rhine.gsfc.nasa.gov Thu Dec 21 16:34:23 1995
-Path: news.clark.net!rahul.net!a2i!bug.rahul.net!a2i!olivea!decwrl!lll-winken.llnl.gov!simtel!news.sprintlink.net!news.ais.net!usenet
-From: "Josh E. Schneider" <jschneid(a)ais.net>
-Newsgroups: comp.infosystems.www.authoring.cgi
-Subject: EMPLOYEMENT: CHICAGO, IL UNIX/CGI/WEB/DBASE
-Date: 7 Oct 1995 17:27:44 GMT
-Organization: American Information Systems, Inc.
-Lines: 33
-Message-ID: <456dag$jc2(a)news.ais.net>
-NNTP-Posting-Host: www.ama.org
-Mime-Version: 1.0
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-X-Mailer: Mozilla 1.1N (X11; I; Linux 1.2.8 i586)
-X-URL: news:comp.infosystems.www.authoring.cgi
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/up.gif.uu b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/up.gif.uu
deleted file mode 100644
index 1edebc9..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/up.gif.uu
+++ /dev/null
@@ -1,6 +0,0 @@
-begin 644 up.gif
-M1TE&.#=A$P`3`*$``/___P```("`@,#`P"P`````$P`3```"1X2/F<'MSTQ0
-M%(@)YMB\;W%)@$<.(*:5W2F2@<=F8]>LH4P[7)P.T&NZI7Z,(&JF^@B121Y3
-4Y4SNEJ"J]8JZ:JTH(K$"/A0``#L`
-`
-end
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/words.txt b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/words.txt
deleted file mode 100644
index 0ad0a97..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/words.txt
+++ /dev/null
@@ -1,44 +0,0 @@
-GOOD
-"Subject: Oc\xE9 3165 Network Copier down for maintenance"
-Subject: =?ISO-8859-1?Q?Oc=E9_3165_Network_Copier_down_for_maintenance?=
-
-BAD
-""
-Subject: =?ISO-8859-1?Q?Oc=E9_3165_Network_Copier_down_for_maintenance?
-
-BAD
-""
-Subject: =?ISO-8859-1?Q?Oc=E9_3165_Network_Copier_down_for_maintenance
-
-GOOD
-"Keith Moore <moore\(a)cs.utk.edu>"
-=?US-ASCII?Q?Keith_Moore?= <moore(a)cs.utk.edu>
-
-GOOD
-"Keld J\xF8rn Simonsen <keld\(a)dkuug.dk>"
-=?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <keld(a)dkuug.dk>
-
-GOOD
-"Andr\xE9 (<- one space) Pirard <PIRARD\(a)vm1.ulg.ac.be>"
-=?ISO-8859-1?Q?Andr=E9_?=(<- one space) Pirard <PIRARD(a)vm1.ulg.ac.be>
-
-GOOD
-"Andr\xE9 (<- two spaces) Pirard <PIRARD\(a)vm1.ulg.ac.be>"
-=?ISO-8859-1?Q?Andr=E9_?= (<- two spaces) Pirard <PIRARD(a)vm1.ulg.ac.be>
-
-GOOD
-"If you can read this you understand the example... cool!"
-=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?==?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?==?US-ASCII?Q?.._cool!?=
-
-GOOD
-"If you can read this you understand the example... cool!"
-=?ISO-8859-1?B?SWYgeW91IGNhbiByZWFkIHRoaXMgeW8=?=
- =?ISO-8859-2?B?dSB1bmRlcnN0YW5kIHRoZSBleGFtcGxlLg==?=
- =?US-ASCII?Q?.._cool!?=
-
-GOOD
-"_-_"
-=?ISO-8859-1?Q?=5F-=5F?=
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.body b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.body
deleted file mode 100644
index cd1c441..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.body
+++ /dev/null
@@ -1,5 +0,0 @@
-H4sIAJ+A5jIAA0VPTWvDMAy9+1e8nbpCsS877bRS1vayXdJDDwURbJEEEqez
-VdKC6W+fnQ0iwdN7ktAHQEQAzV7irAv9DI8fvHLGD/bCobai7TisFUyuXxJW
-lDB70aucxfHWtBxRnc4bfG+rrTmMztXBobrWlrHvu6YV7LwErVLZZP4n0IJA
-K3J9N2aaJj3YqD2LeZYzFC75tlTaCtsg/SGRwmJZklnI1wOxa3wtt8Dgu2V2
-EdIyAudnBvaOHd7Qd57ji/oFWju6Pg4BAAA=
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.msg
deleted file mode 100644
index 3fa249e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/x-gzip64.msg
+++ /dev/null
@@ -1,13 +0,0 @@
-Content-Type: text/plain; name=".signature"
-Content-Disposition: inline; filename=".signature"
-Content-Transfer-Encoding: x-gzip64
-Mime-Version: 1.0
-X-Mailer: MIME-tools 3.204 (ME 3.204 )
-Subject: Testing!
-Content-Length: 281
-
-H4sIAJ+A5jIAA0VPTWvDMAy9+1e8nbpCsS877bRS1vayXdJDDwURbJEEEqez
-VdKC6W+fnQ0iwdN7ktAHQEQAzV7irAv9DI8fvHLGD/bCobai7TisFUyuXxJW
-lDB70aucxfHWtBxRnc4bfG+rrTmMztXBobrWlrHvu6YV7LwErVLZZP4n0IJA
-K3J9N2aaJj3YqD2LeZYzFC75tlTaCtsg/SGRwmJZklnI1wOxa3wtt8Dgu2V2
-EdIyAudnBvaOHd7Qd57ji/oFWju6Pg4BAAA=
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/zeegee.gif.uu b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/zeegee.gif.uu
deleted file mode 100644
index c191d2e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testin/zeegee.gif.uu
+++ /dev/null
@@ -1,111 +0,0 @@
-begin 644 zeegee.gif
-M1TE&.#=A6P!P`/<```````@("!`0$#D`(3D`*4(`*1@8&$H`*4H`,5(`,5(`
-M.5H`,2$A(5H`.5((,6,`.6,`0EH(.6L`0F,(.6,(0BDI*5H0.6L(0FL(2F,0
-M.6,00G,(2C$Q,4(I,6L02GL(4G,04G,02FL80H0(4H0(6E(I.7,80HP(6CDY
-M.6LA0D(Y.90(6I0(8XP06G,A2H084H086I008U(Y0GLA4D)"0G,I2H0A2G,I
-M4H0A4H0A6H0I4I0A8TI*2FLY4GLQ6G,Y4I0I8U)24F-*4EI22I0Q8Y0Q:YPQ
-M:Y0Y6I0Y8X1"6I0Y:UI:6HQ"6H1*8Z4Y<YQ"8XQ*:ZTY:Y1*8YQ">V-C8WM:
-M8Z5"<Y12:Z5*:WMC8ZU*:VMK:ZU*<ZU*>X1C:Y1:<WMK:Z52>ZU2<Z5::[52
-M<W-S<XQK:ZU:<ZU:A+5:A*UC<XQS<ZUC>WM[>Y1S<ZUCA)QS<ZUK>[UC>XQ[
-M>YQS>[5K>[UCE)Q[>X2$A+UKA)Q[E*5[>[UKC*5[A*5[E)R$>[USC*5[G-YC
-MC(R,C*U[G*6$A,YKE+U[C*V$A+5[G,YSC*V$C+5[I=YKE)24E*V,C+6$I;V$
-MI;6,C+6,E-9[G+V,C*V4C+V,E-Y[E-Y[G)R<G-Z$E+V4E,:4E,:4G-:,G*6E
-MI>>$I;V<G,Z4G-:4G.^$K<:<G-:4I=Z,M=Z,O<Z<G,Z<I=Z4I;VEI>^,I:VM
-MK<:EI<ZEI>>4O>^4M=:EI=:EK>><K;6UM=ZEK=ZEI=ZEM?><I>>EK?><K=:M
-MK>>EM=ZMK>>EO=ZMM>^EK?^<M?^<O;V]O>^EO?^<QN>MK>>MM>^ESO>EO?^E
-MO>^MO?^EQN>UM?^ESO>MQL;&QN^UM=Z]M>^UO?^MO?>UO>>]O>^]O?^USO^U
-MQO>]O<[.SN?&O?>]QO^]QO^]SO?&QO^]WO?&SM;6UO_&QO_&SO_&WO_&Y__.
-MSN_6SO_.UM[>WO_.WO_6UO_6WO_6Y^?GY__>WO_>Y__GWO_GY__G[__G]^_O
-M[__O[_?W]__W]__W_____RP`````6P!P``<(_P#_"1Q(L*#!@P@3*ES(L*'#
-MAQ`C2IQ(L:+%BQ@S:I08J:-'2"!#BAP9DI')1(12JES)LF6@ES!C^IE)L^9,
-M/3ASZE2XH:?/GAB"8KA`M"B%HT@A*(7PH('3IU`;*)BJ(('5JPBR:M5ZH&N!
-MKV#!$AA+8(#9LSQ__A0ZM"A1I$F7-HT:E6K5JUBW<O4:-BS9LF<'I%7KDVU;
-MHW"/RIU+]RE5O'GU9N7;5RQ9M`D_$%;+UNW;Q$N9-H9J%W("R7L/5+8\UJS"
-M#YHW%Q;J^4)B"J$9CRYM&C6"KJI7%_(a)K.#-LV;-IN[V-6ZGNW5--G_9->379
-MU["/(]_0V3-SN:,=/_^&[/MW];YCL6>/C;S[<M#@PTL=3QXU<.'#U:_?SMW]
-M9_BBR3??7?79%]QJ^JW'GFS^_1>7<P+R5J!>]U66H(+\-6C;;?&%)R%>U)U7
-M@$(C*(CA=H9YQR&$$4;76XA]D5BBB?NAJ-Q[<.76HHL(a)9I5`!M.9=Z",,]*H
-M77LW(I9CA]#Q:)4-9#22R2:*".+"9'P1.4*1-&;8X'?./4?78PM$T8@K=4A1
-M@P4U,*$($WN-F!`)6]9I9'9>!E7;BBQZJ(`5I6RBA@B1I7"(!7LI1`*==7+9
-MI8UZJKADGXV]4`HQ9U@@759()+'5`8HNVJBC)N89J9*3BMG``W8\H\@,]('_
-MB$,3>H6Z**-VWKG@9AJ"&:!3+\CBRA/B.6F5!F_4FM`)MXK:J*Z[$M8K@`%:
-M$4TC)M05JU6'*(O0"<PV.RJI-2*9Y(8`2F!(-'),T"1>$>01)`(*@1NNN,_J
-M:NJ>H+VP##'$RL=;!F/D5:^]]SJ;ZYW[2GH4$>2$<L.O35;E`A,@'HQPL[@N
-M_*BYI_XW!3F8>,!DDTBD`)G&&W,\*K0-NV4'.89XH-C)8RKP!*%XL8QPPAV3
-M6RZ#21HB#AO4JDJ:&!D0F(#//[O\,L.0ZHG*-EB@FZK2#5R`!7T*L?!SU%)[
-M_#'1&,BRC1(X/DAQ`Q'H@(48+@Q85=ABC]WRK5-3_[U=*MP4P>^DO]90BSWW
-MW*.+!G;CS<(*>MM;]I8P(W=U$>?ZVI0&M'S#3C_WL+/*`DY-Y3@+>4?.<="5
-MJW6U$?V%[."#7[3B2S7L?).-+S<X=CKJD4N.K]GKP0`$%UQT@3PJZ<`.U+E:
-MWPS!&G]8((a)HLL+1BR0]0_8XZY,%/3CEL.Z3!BC7KM*.^^NJD$XPSGZ"10^RR
-M?^=%%F"L,<?^8)30?4*H"Z``@P>TCL$@#;Q81_K@P<`&RB,=QV!@.Q3X"S2`
-M8%IP:8(02C`$(0AA""5(P/\0(L`2IDYUXH*!';"A0/4UL('O4$<$7SC!=8`#
-M$!>47?0\4`49J."'*G!`5/_J94(!@@^%BWJ#-<[1PG:\,![Q>$<^@@'%>-!0
-M@>C`QAF^!!</_$`&'>B`$(>XK!.LH(@!)"`)@'"*;IP#'2U\(3SBD0YYS***
-M5KSB.LX!CD_D`'IPT4(*(L`DC9T1C2?\612@X48FQI&&\CC&._`HQQJB(a)X_4
-M4`(@*:"#)$CO5SY#9"+!E09&(a)N.-"EQ@`]NA#F2L@Y*53.4YSM$-:H3A2V(0
-MP=8:`+5#HA%A>8"&-;HQ#E0^$A[M(`<SRB''9M9P'9<$1S>@P0;_X$`*?&(*
-MU,PH2E(F`QK:(*8QT^=$>&Q#&N!H9B6?&<UN6`,:M[P1&4(0O>8H99O@$F47
-M@*'_#&J$LYCC5!\WEH$-==*0G;.4IC:@`0Q-L@4'1T!57/`)+E\*T`FX``8T
-M_-F-4XYS'=R0QC#*6<55KB^5T$QH-Q::C%/H('9DT(##D*(H`EJ4!3$812TT
-MRE%P`!2.ZPB'-&SAQ'C0XQ[XN$<]Z(%,E&)QEN-0*#24`8Q+A(`[.V#"821*
-M@5`1\`0"Y`,M=KI1:X33HV\4QS-F<0XGU@,?_A#(/N[!5*=>4J7:>"=5:3&&
-MGIS!`YF#BZV^BKH=T&*L_!1F.#LZRW,TPQ8L;`<]\%&0?-0#'JE$QUWYV(V5
-MZA48M/`$"(QPA!1)RE:+LBD@8G'8Q%+#K)T]93.:P0LX_\*C'OTP"#[B`<W-
-M<M:SU&`H:%41!SDD9ZN?(1''@K<#5:QB%;0`AFMAVXUK/(,5LT2'9'-;D'M@
-MMK'GB&IG\QI<JN*"%JK(a)Q$N/B]RN)J1.S8K<&U3A7,1JM*S:P,8S/@$.C[[R
-M'G$=2#Z8>LEQB'>\U@BN<`^KBDY<05KGTM)R$=:"3IC"%*I@K72_6=9BA((:
-ML06'=N-QCWV8>!]UY:,TQTM>:$`C&<`X;RQ,P0E$\"I)6AK!A,'E!$YXXL+0
-MC2XP.$R,69Q"&TB.+1/+*<$]KGBE>4VPBV$,6O326!(^N+%R7C.J'<>!$YRP
-M<'V%#(Q>%.,0U'BM61?KT_!"=?_%2(ZR@I5!Y<.N0A6>X,0CFH`V/6%G7,L]
-M!)C#C&'61G<8R`"$,EQ<5FNL.<Z0CK*4&4U5Z1XV%JJ@,2<6`8>JZ:?+MX*!
-M)"9Q"3#_.,.TR$4Q*)$+?BZ:T1M-<W!E+6M83U6ZEJ8%IDV19TD@`@Y7-=>%
-M0%T$21A;$J8N]"YF<0E<2U<9K[:UM%T,;6?7XM*9SC,G)%$(.,PO0\/NLA*.
-M;>QDLZ(8=3CL3IT-#&%`&]KN?K<RA,%N8%S;SMD&LR06L0<X^.!(LKD0;$9U
-MA4<\8A&+*#<G1E&,/*!:W>NNM\2M?5A=WYG7^O;U'<SP;X`31N`#KU/!%X&(
-MDI>[%YG_J`1]5V%HB-?"%\#PA<QACNM:V+SB%J<OQK?MZSW0P0P]&)I:0)Z=
-M+8V\$'TH1,))40PS^!C#SF4YSJ=.]8K'(A9WSK0I.I%Q1!3B#F[P0M!/-/2$
-M]$17(X#"P??`]D)(HAEUF`28._%CJ#_WZGB?.MZQGO4+[_P2QO9ZO\V0A;&3
-MW2>#T97:%W&'QN\!Y7M0>++]3M^5/_?RE=?YA3W!]8P_0O!T<`,8JN`"(Y7=
-M(OQ(O>I7S_K6N_[UL(?]1A32>GW$_O:XSST_9D][U=M>]ZLO"/!?S_O>\^/W
-MPU_(\%5?_(',0Q\$\?WR$<(/=\SC^0))OD4&P8#N>]_[CG!'__2/O_S=%\08
-M/!```-8?`!08XQ_`OT@;UD__^FO"_`,A__3S3X7Z&Z#^2X!\L8<1Y@`*!FB`
-MFA```,``YF`0YB=[^<=\V<<#Z\<!H.`._#`/T]!_`+`$Q)=]^+<1>+!^CE`0
-MW@`*FG"!U]=Z_U"`FJ`)&)AZ`U$&ZX<'$9AZMZ"`K]!ZT_""H`!]PG=]/9B"
-M0.@0\Z"`/#`/`^$.*%!_`!`$WA"#J><.%%A_/.`-0.@."K@%XZ=Z\V!]7F@,
-M'%!_`4`%^*</YF`,30B`1;@02P```G`+`^$-Z@<`!L`#_V>'MQ"#YI"'=^B'
-MM[![(R@`^'=[\_`*"FB'>+A^%0!]_/]P(a)G7(`#S``.O'`&V($-.P?EOP@)3(
-M`=XP$--0`0#``<9@>Z*(`MZ@>MXPAA6`@11(!=D'?_`7@O"G#].@?CQ@#JIW
-MBT_8@L:`B^(G$(Z`BPPABA7PB0*A"788C,ZG?GC@#LIHB06A#_\W"/PPAGC@
-MA>ZPC=RXC>;PA?V'`LRW>[>P?FG8?QP0@OPP@@#0@`GA""1($$$``#SP@O;X
-M@C0``#3@#?,8!/=HC_G(`_S0A&6@>J_@A/77!N9`B5OPCYK@")0X"+=`B53@
-M"/\(D0`P"`FA#[BHA`,QA@A9?Q5@#B`9DA7(#V](`[]7CB;Y"MY@DO6W!0<)
-MD^M7!@G1?W'_6!!-6`$HL`14\)-`N01M,)`+&`1+<)1(>91#J8P!D(K'UXWN
-MD(;J]X7KQP-'"914<)6O,)-!(a))59J968J(FTN`7T.`W,*'QDF8NL%WT<28\"
-MZ'OSZ('\0(GW1Q#Z,`_F-PW_IPG19PZ7:!!CR`%G*1`L"0K?.!#ZD)6ZF(D`
-M``K/9WZ)N00QJ(Q/B)>KIP]O*`"ZN(X+Z)'_<)>OX),"\8;2^)E1J0FB>1"@
-M```!L(=0.0W3,(\!H)"I9PRG.!"RV08Q.)$`((ZJ-W]P6`:O8`Z:4`9Y&(BI
-M1XT+N(/\8`YXH(`V^)G_QP"EJ`_>T`;0B1#`&9*TF8^L:0"1Z)GZ_["&`0">
-ME6B9JN<(B>B$##`-P=>'ZR<`!I"(2T`0=!B?\[E^L(@0$/E]WF<`=?D/@Y"'
-M<+@%E\@/;5"'!?J6J3</;8`"!A"A0?"#P2<0\[`$ZUD!?%D0\Q`$&;JA$J&.
-M&HB7"=&<QN`.#*I[!W&7T^"9*^H.+1H1OX=]$G%]-ZBBS;<0&-E^QN"7$-$&
-M_Z>$H-">LSB`.<H09(D"FH"=`G"B#T&#/%""_Z",TW"D&#$/"UBE_V`,`$`%
-M[^<0`E`!!*&,7SI[M)A_$7&09<",%<`!;<@/K_""U;E[U?>$VQB%([B'7QB"
-M:!A]*)I_M_""@3@/AQF%U@<*GYB!MNB#[O^H$.7H"%@H$-9'$*"@H`!0`;>@
-MA.Q(?V19?PP0`"[*`Z"ZA`!@D_P`"@2ZG!#Z#WJ)`I28C1JXAO07!']IEP'@
-MB<^G#VU(@T'0HO-P"Z+H"'YYA*TX#R?8?V4`"N6HD0*A#PH("@,!CZDX"*.8
-MJ8?XJ=VWI?^WCW>9@P!Z?>XP@J6)$(@8`$N@@AY9CEP8?:)Z"]`G`.DX$,HH
-MA_]0`31@?DP9!-E'`PRPI?K(IZ+8K[\8`-"G#^[0?2[Z#R.XGPGAH)0H`&5@
-M#@U(`TUI$,[*`^('K_AWD/3ZG,'(`Q6P!83X#UC:!OK@H7]YD&+ZBS0@J=1*
-MKP3A#A40`&=Z$*__0(F]J(a)^C.)@"$00&\'X&4`$;"P"O(*D92;(!@`=<^G[*
-M:`[N(`#Z:A#F$*;_<`L"4)];ZJ%."Y7A"@!ENJ)`.`]CZ`B9&`0\^P_S5Z5!
-M6X0'6;0"P0$""8_B%P";"+(D"P!M<!#SP`!B:K58RYLT":T'X0V:X*0"L9I!
-M@*5+T*@$L04T^P]!.[1N*Z`!8`X\P`&CV8I)*Q!EN*(,(a)+F(N)][RP#75[K7
-M%X4D>A#*.)SF5XXVR0$,F+#_((D"80`,(+G.A[<!P*P'.7_!2`,&X("9B+F@
-MT+D"T7\)^X7;F!#NT*5.NWMD*7YJ"H8#\;*U.ZYM2Q`H,)79%P#P.A"KQ\FL
-MLZ@/8X@"_U"\ZXJT6`M_7^@-!A"U"/&&6Q"%\Y>WQ^N\CCA_#-M]^%>.D_L/
-M\&B^`T&!4BH0%%@&OS<-3=A^4PH`Z7N^'2A^U:<)#&``LAM]\\BI!3%_Y9F?
-MFS@0;4H0Y0BS=UO`#>RB*/F=_R<`J&J^+VF3!(&(=FB>*'#!!G&"FL"X2]@&
-M61FQ!?$*7SL//_C#;:@/_SN'6_"3@P!]M_"EB.J`@_"36T#"5EK%5GS%6)S%
-36KS%7-S%7OS%8!S&8IP1`<$`.P``
-`
-end
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-nest.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-nest.ref
deleted file mode 100644
index eb9a794..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-nest.ref
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/ak-0696.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "[Fwd: Re: 34Mbit/s Netz]",
- "Type" => "multipart/mixed",
- "To" => "andreas.koenig\(a)mind.de, kun\(a)pop.combox.de, 101762.2307\(a)compuserve.com",
- "From" => "Juergen Specht <specht\(a)kulturbox.de>",
- "Encoding" => "7bit",
- "Boundary" => "------------70522FC73543"
- },
- "Part_1" => {
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Part_2" => {
- "Disposition" => "inline",
- "Type" => "message/rfc822",
- "Encoding" => "7bit"
- },
- "Part_2_1" => {
- "Subject" => "Re: 34Mbit/s Netz",
- "Type" => "text/plain",
- "To" => "Juergen Specht <specht\(a)kulturbox.de>",
- "From" => "deuschle\(a)mnh.telekom.de (Guenter Deuschle)",
- "Encoding" => "quoted-printable",
- "Charset" => "iso-8859-1"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-none.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-none.ref
deleted file mode 100644
index af208de..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-none.ref
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/ak-0696.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "[Fwd: Re: 34Mbit/s Netz]",
- "Type" => "multipart/mixed",
- "To" => "andreas.koenig\(a)mind.de, kun\(a)pop.combox.de, 101762.2307\(a)compuserve.com",
- "From" => "Juergen Specht <specht\(a)kulturbox.de>",
- "Encoding" => "7bit",
- "Boundary" => "------------70522FC73543"
- },
- "Part_1" => {
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Part_2" => {
- "Disposition" => "inline",
- "Type" => "message/rfc822",
- "Encoding" => "7bit"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-replace.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-replace.ref
deleted file mode 100644
index f6814f8..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696-replace.ref
+++ /dev/null
@@ -1,29 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/ak-0696.msg",
- "ExtractNested" => "REPLACE",
- "OutputToCore" => 0,
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "[Fwd: Re: 34Mbit/s Netz]",
- "Type" => "multipart/mixed",
- "To" => "andreas.koenig\(a)mind.de, kun\(a)pop.combox.de, 101762.2307\(a)compuserve.com",
- "From" => "Juergen Specht <specht\(a)kulturbox.de>",
- "Encoding" => "7bit",
- "Boundary" => "------------70522FC73543"
- },
- "Part_1" => {
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "us-ascii",
- },
- "Part_2" => {
- "Charset" => "iso-8859-1",
- "Encoding" => "quoted-printable",
- "From" => "deuschle\(a)mnh.telekom.de (Guenter Deuschle)",
- "Subject" => "Re: 34Mbit/s Netz",
- "To" => "Juergen Specht <specht\(a)kulturbox.de>",
- "Type" => "text/plain",
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696.msg
deleted file mode 100644
index ef3b2f9..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/ak-0696.msg
+++ /dev/null
@@ -1,112 +0,0 @@
-From specht(a)kulturbox.de Thu Jun 20 08:35:23 1996
-Date: Thu, 20 Jun 1996 08:35:17 +0200
-From: Juergen Specht <specht(a)kulturbox.de>
-Organization: KULTURBOX
-X-Mailer: Mozilla 2.02 (WinNT; I)
-MIME-Version: 1.0
-To: andreas.koenig(a)mind.de, kun(a)pop.combox.de, 101762.2307(a)compuserve.com
-Subject: [Fwd: Re: 34Mbit/s Netz]
-Content-Type: MULTIPART/MIXED; boundary="------------70522FC73543"
-X-Filter: mailagent [version 3.0 PL44] for k@.in-berlin.de
-
-This is a multi-part message in MIME format.
-
---------------70522FC73543
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
---
-Juergen Specht - KULTURBOX
-
---------------70522FC73543
-Content-Type: message/rfc822
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline
-
-X-POP3-Rcpt: specht@trachea
-Return-Path: hermes
-Received: (from hermes@localhost) by kulturbox.netmbx.de (8.7.1/8.7.1) id SAA04513 for specht; Wed, 19 Jun 1996 18:30:12 +0200
-Received: by netmbx.netmbx.de (/\==/\ Smail3.1.28.1)
- from mail.cs.tu-berlin.de with smtp
- id <m0uWPrO-0004wpC>; Wed, 19 Jun 96 18:12 MES
-Received: (from nobody@localhost) by mail.cs.tu-berlin.de (8.6.12/8.6.12) id SAA12413; Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Date: Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Message-Id: <199606191626.SAA12413(a)mail.cs.tu-berlin.de>
-Resent-From: nobody(a)cs.tu-berlin.de
-Resent-To: kultur(a)kulturbox.netmbx.de
-Received: from gatekeeper.telekom.de ([194.25.15.11]) by mail.cs.tu-berlin.de (8.6.12/8.6.12) with SMTP id SAA11678 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:11:29 +0200
-Received: from ULM02.mnh.telekom.de by gatekeeper.telekom.de; (5.65v3.0/1.1.8.2/02Aug95-0132PM)
- id AA01376; Wed, 19 Jun 1996 18:11:27 +0200
-Received: from ulm02.mnh.telekom.de (deuschle(a)mnh.telekom.de) by ULM02.mnh.telekom.de (8.6.10/3) with SMTP id SAA30680 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:14:40 GMT
-Message-Id: <199606191814.SAA30680(a)ULM02.mnh.telekom.de>
-X-Sender: deuschle(a)ulm02.mnh.telekom.de
-X-Mailer: Windows Eudora Version 1.4.4
-Mime-Version: 1.0
-Content-Type: text/plain; charset="iso-8859-1"
-Content-Transfer-Encoding: quoted-printable
-Date: Wed, 19 Jun 1996 18:12:02 +0200
-To: Juergen Specht <specht(a)kulturbox.de>
-From: deuschle(a)mnh.telekom.de (Guenter Deuschle)
-Subject: Re: 34Mbit/s Netz
-X-Mozilla-Status: 0011
-
-Hallo Herr Specht,
-entschuldigen Sie vorab, dass ich Ihnen nicht telefonisch zur Verfuegung
-stehe, ich Praesentationen gehalten/ noch zu halten und viele
-Kundennachfragen zu projektieren. Nach Informationen des Produkt-Managers
-Temme steht der POP schon zur Verf=FCgung! Standort: voraussichtlich:
-Winterfeldstr. 21, 10781 Berlin.
-Der POP hat zur Zeit direkte 34M-Anbindungen zu folgenden Orten: Rostock,
-Hamburg, Hannover & Leipzig. 4 weitere werden in kuerze in Betrieb gehen.
-Damit haben Sie einen Besonderen Sicherheitsstandard verfuegbar!
-Kontakt muessen Sie ueber Ihre oerltliche Vertriebseinheit aufnehmen:
-entweder den Geschaefts-Kunden-Vertrieb oder das GrossKundenManagement.
-Diese Vertriebseinheiten greifen auf den oertlichen Technischen
-Vertriebs-Support zu. Die Informationen werden ueber TVS zur Vertriebseiheit
-gegeben und dann zu Ihnen.
- Sie benoetigen eine Standleitung von Ihrer Lokation zum Internet-POP
-Uebergabepunkt zu Ihrem Info-Server ist ein CISCO 1000-Router. Dann zahlen
-Sie neben den monatlichen Kosten fuer die Standleitung die Kosten fuer den
-Internet-Zugang: zB bei 64k: 1500DM bei 2GByte Freivolumen. 128K: 3000 DM
-bei 5 GB Freivolumen & 2M: 30.000 DM bei 50GB Freivolumen.
-Freundliche Gruesse=20
-Guenter Deuschle
-
-
->Sehr geehrter Herr Deuschle,
->Sie sind mir von Herrn Meyendriesch empfohlen worden.
->Ich versuche Informationen ueber das T-eigene 34Mbit/s Netz und den=20
->lokalen Pop-Berlin rauszufinden, bzw. was ein Anschluss kostet und=20
->wo man ihn herbekommt. Laut Herrn Schnick in Berlin gibt es den=20
->T-Pop nicht, laut Traceroute von Herrn Meyendriesch sehrwohl. Auch=20
->ist dies Netz in der IX vom Mai 96 erwaehnt.
->Koennen Sie mir helfen?
->
->MfG
->--=20
->Juergen Specht - KULTURBOX
->
->
-
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-Dipl.-Ing. Guenter D E U S C H L E
-Deutsche Telekom AG Niederlassung 3 Hannover
-GrossKundenManagement - Techn. Vertriebs-Support:
-Team-Leiter Internet Online-Dienste
----------------------------------------------------
-GrKM-TVS-IOD Tel: +49-511-333-2772
-Vahrenwalder-Str. 245 FAX: +49-511-333-2751
-30179 Hannover eMail: deuschle(a)mnh.telekom.de=20
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-
-
-
-
---------------70522FC73543--
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.msg
deleted file mode 100644
index 118908d..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.msg
+++ /dev/null
@@ -1,138 +0,0 @@
-Content-Type: multipart/alternative; boundary="----------=_961872013-1436-0"
-Content-Transfer-Encoding: binary
-Mime-Version: 1.0
-X-Mailer: MIME-tools 5.211 (Entity 5.205)
-To: noone
-Subject: A postcard for you
-
-This is a multi-part message in MIME format...
-
-------------=_961872013-1436-0
-Content-Type: text/plain
-Content-Disposition: inline
-Content-Transfer-Encoding: binary
-
-Having a wonderful time...
-wish you were looking at HTML
-instead of this boring text!
-
-------------=_961872013-1436-0
-Content-Type: multipart/related; boundary="----------=_961872013-1436-1"
-Content-Transfer-Encoding: binary
-
-This is a multi-part message in MIME format...
-
-------------=_961872013-1436-1
-Content-Type: text/html
-Content-Disposition: inline
-Content-Transfer-Encoding: binary
-
- <H1>Hey there!</H1>
- Having a <I>wonderful</I> time...
- take a look!
- <BR><IMG SRC="cid:my-graphic" ALT="Snapshot"><HR>
-------------=_961872013-1436-1
-Content-Type: image/jpeg; name="bluedot.jpg"
-Content-Disposition: inline; filename="bluedot.jpg"
-Content-Transfer-Encoding: base64
-Content-Id: my-graphic
-
-/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL
-DBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/
-2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
-MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEAAQADASIAAhEBAxEB/8QA
-HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF
-BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
-FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1
-dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
-x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEB
-AQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAEC
-AxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRom
-JygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
-hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU
-1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAoo
-ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
-gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
-CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
-KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
-ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKjnnhtbeW4uJY4YIkLySSMF
-VFAySSeAAOc0ASUVw+p/E3TY1MeiW0uqzgkb8NBbjB6+ay/MCM4MauDgZIBB
-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
-KOGCJAkccahVRQMAADgADjFeFjM2veFD7/8AL/M+qy7h+zVXFf8AgP8An/l/
-wxDp2nWmk6fDY2MCw20IwiAk9Tkkk8kkkkk5JJJJJNWqKK8I+r2CiiigAooo
-oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDlNY+H2iarcPdQef
-pd1I5eWawKp5pJJJZGVkLEnJfbvOAN2OK5O88AeJ7PJt5dN1ONV3kqXtZCf7
-iod6k8cEyKCTg4AyfV6K6aOLr0dIS0OLEZdhcRrVgm++z+9HiU2j+IrWJprr
-wzqccK/edDDORngfJFI7nn0U46nABNVP9L/6A2uf+Ce6/wDjde8UV2RzjELd
-J/L/AIJ5suHMG3o5L5r9UeEJHfzSLHFomttI5CoraZPGCT0BZ0Cr9WIA7kCt
-GHwx4ruZViXw7JbFv+Wt3dwLEvf5jG7t7DCnkjOBkj2ailLN8Q9rL5f5lQ4d
-wcd7v1f+SR5xYfDK7lkR9Z1lTCQGe2sITGc8ZQzMxJXGRlVRjwQV6V2ukeH9
-I0GN00rTra0MgUSvHGA8u3ODI/3nPJ5Yk5JOeTWlRXBVr1KrvUdz1aGFo4dW
-pRSCiiisjoCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
-iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
-KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
-AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
-ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Z
-
-------------=_961872013-1436-1--
-
-------------=_961872013-1436-0--
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.ref
deleted file mode 100644
index e4933bc..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-postcard.ref
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/bluedot-postcard.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "A postcard for you",
- "Type" => "multipart/alternative",
- "To" => "noone",
- "Encoding" => "binary",
- "Boundary" => "----------=_961872013-1436-0"
- },
- "Part_1" => {
- "Size" => 88,
- "Disposition" => "inline",
- "Type" => "text/plain",
- "Encoding" => "binary"
- },
- "Part_2" => {
- "Type" => "multipart/related",
- "Encoding" => "binary",
- "Boundary" => "----------=_961872013-1436-1"
- },
- "Part_2_1" => {
- "Size" => 123,
- "Disposition" => "inline",
- "Type" => "text/html",
- "Encoding" => "binary"
- },
- "Part_2_2" => {
- "Filename" => "bluedot.jpg",
- "Size" => 4272,
- "Disposition" => "inline",
- "Type" => "image/jpeg",
- "Encoding" => "base64"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.msg
deleted file mode 100644
index 1012679..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.msg
+++ /dev/null
@@ -1,100 +0,0 @@
-Content-Type: image/jpeg; name="bluedot.jpg"
-Content-Disposition: inline; filename="bluedot.jpg"
-Content-Transfer-Encoding: base64
-Content-Id: my-graphic
-
-/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL
-DBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL/
-2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIy
-MjIyMjIyMjIyMjIyMjIyMjIyMjIyMjL/wAARCAEAAQADASIAAhEBAxEB/8QA
-HwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUF
-BAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkK
-FhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1
-dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXG
-x8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEB
-AQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtREAAgECBAQDBAcFBAQAAQJ3AAEC
-AxEEBSExBhJBUQdhcRMiMoEIFEKRobHBCSMzUvAVYnLRChYkNOEl8RcYGRom
-JygpKjU2Nzg5OkNERUZHSElKU1RVVldYWVpjZGVmZ2hpanN0dXZ3eHl6goOE
-hYaHiImKkpOUlZaXmJmaoqOkpaanqKmqsrO0tba3uLm6wsPExcbHyMnK0tPU
-1dbX2Nna4uPk5ebn6Onq8vP09fb3+Pn6/9oADAMBAAIRAxEAPwD3+iiigAoo
-ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiii
-gAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKA
-CiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAK
-KKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoo
-ooAKKKKACiiigAooooAKKKKACiiigAooooAKKKjnnhtbeW4uJY4YIkLySSMF
-VFAySSeAAOc0ASUVw+p/E3TY1MeiW0uqzgkb8NBbjB6+ay/MCM4MauDgZIBB
-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
-KOGCJAkccahVRQMAADgADjFeFjM2veFD7/8AL/M+qy7h+zVXFf8AgP8An/l/
-wxDp2nWmk6fDY2MCw20IwiAk9Tkkk8kkkkk5JJJJJNWqKK8I+r2CiiigAooo
-oAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigDlNY+H2iarcPdQef
-pd1I5eWawKp5pJJJZGVkLEnJfbvOAN2OK5O88AeJ7PJt5dN1ONV3kqXtZCf7
-iod6k8cEyKCTg4AyfV6K6aOLr0dIS0OLEZdhcRrVgm++z+9HiU2j+IrWJprr
-wzqccK/edDDORngfJFI7nn0U46nABNVP9L/6A2uf+Ce6/wDjde8UV2RzjELd
-J/L/AIJ5suHMG3o5L5r9UeEJHfzSLHFomttI5CoraZPGCT0BZ0Cr9WIA7kCt
-GHwx4ruZViXw7JbFv+Wt3dwLEvf5jG7t7DCnkjOBkj2ailLN8Q9rL5f5lQ4d
-wcd7v1f+SR5xYfDK7lkR9Z1lTCQGe2sITGc8ZQzMxJXGRlVRjwQV6V2ukeH9
-I0GN00rTra0MgUSvHGA8u3ODI/3nPJ5Yk5JOeTWlRXBVr1KrvUdz1aGFo4dW
-pRSCiiisjoCiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACi
-iigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKK
-KACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAoooo
-AKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigA
-ooooAKKKKACiiigAooooAKKKKACiiigAooooAKKKKACiiigAooooA//Z
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.ref
deleted file mode 100644
index c1e51ac..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/bluedot-simple.ref
+++ /dev/null
@@ -1,15 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/bluedot-simple.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Filename" => "bluedot.jpg",
- "Size" => 4272,
- "Disposition" => "inline",
- "Type" => "image/jpeg",
- "Encoding" => "base64"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.msg
deleted file mode 100644
index 4881691..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.msg
+++ /dev/null
@@ -1,78 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Sender: john-bigboote
-Date: Thu, 11 Apr 1996 01:10:30 -0500
-From: Eryq <eryq(a)rhine.gsfc.nasa.gov>
-Organization: Yoyodyne Propulsion Systems
-X-Mailer: Mozilla 2.0 (X11; I; Linux 1.1.18 i486)
-MIME-Version: 1.0
-To: john-bigboote(a)eryq.pr.mcs.net
-Subject: Two images for you...
-Content-Type: multipart/mixed; boundary="------------299A70B339B65A93542D2AE"
-
-This is a multi-part message in MIME format.
-
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="one.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="one.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="two.nice.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="two.nice.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="two.nice.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---------------299A70B339B65A93542D2AE--
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.ref
deleted file mode 100644
index ea05b92..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/dup-names.ref
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/dup-names.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Part_1" => {
- "Filename" => "one.gif",
- "BodyFilename" => "one.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_2" => {
- "Filename" => "one.gif",
- "BodyFilename" => "one-1.gif",
- "Size" => 357,
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3" => {
- "Filename" => "two.nice.gif",
- "BodyFilename" => "two.nice.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_4" => {
- "Filename" => "two.nice.gif",
- "BodyFilename" => "two-1.nice.gif",
- "Size" => 357,
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_5" => {
- "Filename" => "two.nice.gif",
- "BodyFilename" => "two-2.nice.gif",
- "Size" => 357,
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/frag.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/frag.msg
deleted file mode 100644
index e506367..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/frag.msg
+++ /dev/null
@@ -1,1230 +0,0 @@
-From - Fri May 26 10:59:48 2000
-Return-Path: <omrec(a)mailandnews.com>
-Received: from virtual.mrf.mail.rcn.net ([207.172.4.103])
- by mta05.mrf.mail.rcn.net
- (InterMail vM.4.01.02.27 201-229-119-110) with ESMTP
- id <20000524184032.XKFS1688.mta05.mrf.mail.rcn.net(a)virtual.mrf.mail.rcn.net>
- for <eryq(a)mta.mrf.mail.rcn.net>; Wed, 24 May 2000 14:40:32 -0400
-Received: from mail.desktop.com ([166.90.128.242])
- by virtual.mrf.mail.rcn.net with esmtp (Exim 2.12 #3)
- id 12ug50-00059f-00
- for eryq(a)zeegee.com; Wed, 24 May 2000 14:40:30 -0400
-Received: from mailandnews.com (jumpgate.desktop.com [166.90.128.243])
- by mail.desktop.com (8.9.2/8.9.2) with ESMTP id LAA31102
- for <eryq(a)zeegee.com>; Wed, 24 May 2000 11:40:29 -0700 (PDT)
- (envelope-from omrec(a)mailandnews.com)
-Message-ID: <392C2385.4C402C55(a)mailandnews.com>
-Date: Wed, 24 May 2000 11:46:29 -0700
-From: Sven <omrec(a)mailandnews.com>
-Reply-To: omrec(a)mailandnews.com
-X-Mailer: Mozilla 4.7 [en] (WinNT; I)
-X-Accept-Language: en
-MIME-Version: 1.0
-To: Eryq <eryq(a)zeegee.com>
-Subject: [Fwd: [Fwd: [Fwd: FW: Another Priceless Moment]]]
-Content-Type: multipart/mixed;
- boundary="------------ABE49921AF9E83E8F9A7667E"
-X-Mozilla-Status: 8001
-
-This is a multi-part message in MIME format.
---------------ABE49921AF9E83E8F9A7667E
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-
-
---------------ABE49921AF9E83E8F9A7667E
-Content-Type: message/rfc822
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline
-
-Received: from mail.vynce.org [63.198.43.13] (vynce(a)vynce.org); Tue, 23 May 2000 22:00:16 -0400
-X-Envelope-To: omrec
-Received: from vynce.org (166.90.128.243) by mail.vynce.org
- with ESMTP (Eudora Internet Mail Server 1.3.1); Tue, 23 May 2000 19:05:52 -0700
-Message-ID: <392B389A.1968998B(a)vynce.org>
-Date: Tue, 23 May 2000 19:04:10 -0700
-From: Vynce <vynce(a)vynce.org>
-Organization: Desktop.com
-X-Mailer: Mozilla 4.61 [en] (Win98; U)
-X-Accept-Language: en
-MIME-Version: 1.0
-To: omrec(a)mailandnews.com
-Subject: [Fwd: [Fwd: FW: Another Priceless Moment]]
-Content-Type: multipart/mixed;
- boundary="------------4CEB5E448DC077F35050C4BE"
-X-Mozilla-Status2: 00000000
-
-This is a multi-part message in MIME format.
---------------4CEB5E448DC077F35050C4BE
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-just to add to your personal hell.
-
-
---------------4CEB5E448DC077F35050C4BE
-Content-Type: message/rfc822
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline
-
-Return-Path: <jasonc(a)snesystems.com>
-Received: from iglou.com (192.107.41.3) by mail.vynce.org
- with SMTP (Eudora Internet Mail Server 1.3.1); Thu, 18 May 2000 16:10:02 -0700
-Received: from [204.255.234.19] (helo=ntserver2.snesystems.com)
- by iglou.com with esmtp (8.9.3/8.9.3)
- id 12sZKw-0007JK-00; Thu, 18 May 2000 19:04:15 -0400
-Received: from snesystems.com (sne-30.snesystems.com [204.255.234.30]) by ntserver2.snesystems.com with SMTP (Microsoft Exchange Internet Mail Service Version 5.5.2650.21)
- id LGJH8AYQ; Thu, 18 May 2000 19:03:40 -0400
-Sender: root(a)mail.vynce.org
-Message-ID: <39247724.AF25EF83(a)snesystems.com>
-Date: Thu, 18 May 2000 19:05:08 -0400
-From: root <jasonc(a)snesystems.com>
-Reply-To: jasonc(a)snesystems.com
-Organization: SNE Systems, Inc.
-X-Mailer: Mozilla 4.72 [en] (X11; I; Linux 2.2.12-20 i686)
-X-Accept-Language: ja, en
-MIME-Version: 1.0
-To: vynce(a)vynce.org
-Subject: [Fwd: FW: Another Priceless Moment]
-Content-Type: multipart/mixed;
- boundary="------------8B533A82922407D7C3D35A99"
-X-Mozilla-Status2: 00000000
-
-This is a multi-part message in MIME format.
---------------8B533A82922407D7C3D35A99
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-
-
---------------8B533A82922407D7C3D35A99
-Content-Type: message/rfc822
-Content-Transfer-Encoding: 7bit
-Content-Disposition: inline
-
-Received: by ntserver2
- id <01BFC0CA.C31F7A10@ntserver2>; Thu, 18 May 2000 09:12:47 -0400
-Message-ID: <01D476341BDBD211B7C500A0CC209BA03DF5C6@ntserver2>
-From: Shawn Morgan <ShawnM(a)snesystems.com>
-To: Wayne Price <WayneP(a)snesystems.com>, Tim Spayner <TimS(a)snesystems.com>,
- Gary Jones <Garyj(a)snesystems.com>, Jason Chelliah <JasonC(a)snesystems.com>
-Subject: FW: Another Priceless Moment
-Date: Thu, 18 May 2000 09:12:47 -0400
-MIME-Version: 1.0
-Content-Type: multipart/mixed;
- boundary="----_=_NextPart_000_01BFC0CA.C32A4450"
-
-This message is in MIME format. Since your mail reader does not understand
-this format, some or all of this message may not be legible.
-
-------_=_NextPart_000_01BFC0CA.C32A4450
-Content-Type: text/plain;
- charset="iso-8859-1"
-
-
-
------Original Message-----
-From: Shawn Morgan [mailto:cephalos@home.com]
-Sent: Wednesday, May 17, 2000 8:18 PM
-To: Shawn Morgan
-Subject: Fw: Another Priceless Moment
-
-
-
------ Original Message -----
-From: Michele Morgan <Ailinn(a)bellsouth.net>
-To: <mailto:Undisclosed-Recipient:@mail0.mco.bellsouth.net>
-Sent: Tuesday, May 16, 2000 10:31 PM
-Subject: Fw: Another Priceless Moment
-
-
->
->
-
-
-------_=_NextPart_000_01BFC0CA.C32A4450
-Content-Type: image/jpeg;
- name="aprilfools.jpg"
-Content-Transfer-Encoding: base64
-Content-Disposition: attachment;
- filename="aprilfools.jpg"
-
-/9j/4AAQSkZJRgABAgEASABIAAD/7Q4uUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
-AQBIAAAAAQABOEJJTQQNAAAAAAAEAAAAeDhCSU0D8wAAAAAACAAAAAAAAAAAOEJJTQQKAAAAAAAB
-AAA4QklNJxAAAAAAAAoAAQAAAAAAAAACOEJJTQP1AAAAAABIAC9mZgABAGxmZgAGAAAAAAABAC9m
-ZgABAKGZmgAGAAAAAAABADIAAAABAFoAAAAGAAAAAAABADUAAAABAC0AAAAGAAAAAAABOEJJTQP4
-AAAAAABwAAD/////////////////////////////A+gAAAAA////////////////////////////
-/wPoAAAAAP////////////////////////////8D6AAAAAD/////////////////////////////
-A+gAADhCSU0EAAAAAAAAAgACOEJJTQQCAAAAAAAGAAAAAAAAOEJJTQQIAAAAAAAQAAAAAQAAAkAA
-AAJAAAAAADhCSU0EFAAAAAAABAAAAAQ4QklNBAwAAAAADH4AAAABAAAAcAAAAFQAAAFQAABuQAAA
-DGIAGAAB/9j/4AAQSkZJRgABAgEASABIAAD/7gAOQWRvYmUAZIAAAAAB/9sAhAAMCAgICQgMCQkM
-EQsKCxEVDwwMDxUYExMVExMYEQwMDAwMDBEMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQ0L
-Cw0ODRAODhAUDg4OFBQODg4OFBEMDAwMDBERDAwMDAwMEQwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
-DAwMDAz/wAARCABUAHADASIAAhEBAxEB/90ABAAH/8QBPwAAAQUBAQEBAQEAAAAAAAAAAwABAgQF
-BgcICQoLAQABBQEBAQEBAQAAAAAAAAABAAIDBAUGBwgJCgsQAAEEAQMCBAIFBwYIBQMMMwEAAhED
-BCESMQVBUWETInGBMgYUkaGxQiMkFVLBYjM0coLRQwclklPw4fFjczUWorKDJkSTVGRFwqN0NhfS
-VeJl8rOEw9N14/NGJ5SkhbSVxNTk9KW1xdXl9VZmdoaWprbG1ub2N0dXZ3eHl6e3x9fn9xEAAgIB
-AgQEAwQFBgcHBgU1AQACEQMhMRIEQVFhcSITBTKBkRShsUIjwVLR8DMkYuFygpJDUxVjczTxJQYW
-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
-AAEBAP/iDFhJQ0NfUFJPRklMRQABAQAADEhMaW5vAhAAAG1udHJSR0IgWFlaIAfOAAIACQAGADEA
-AGFjc3BNU0ZUAAAAAElFQyBzUkdCAAAAAAAAAAAAAAAAAAD21gABAAAAANMtSFAgIAAAAAAAAAAA
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEWNwcnQAAAFQAAAAM2Rlc2MA
-AAGEAAAAbHd0cHQAAAHwAAAAFGJrcHQAAAIEAAAAFHJYWVoAAAIYAAAAFGdYWVoAAAIsAAAAFGJY
-WVoAAAJAAAAAFGRtbmQAAAJUAAAAcGRtZGQAAALEAAAAiHZ1ZWQAAANMAAAAhnZpZXcAAAPUAAAA
-JGx1bWkAAAP4AAAAFG1lYXMAAAQMAAAAJHRlY2gAAAQwAAAADHJUUkMAAAQ8AAAIDGdUUkMAAAQ8
-AAAIDGJUUkMAAAQ8AAAIDHRleHQAAAAAQ29weXJpZ2h0IChjKSAxOTk4IEhld2xldHQtUGFja2Fy
-ZCBDb21wYW55AABkZXNjAAAAAAAAABJzUkdCIElFQzYxOTY2LTIuMQAAAAAAAAAAAAAAEnNSR0Ig
-SUVDNjE5NjYtMi4xAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
-AAAAAABYWVogAAAAAAAA81EAAQAAAAEWzFhZWiAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAG+i
-AAA49QAAA5BYWVogAAAAAAAAYpkAALeFAAAY2lhZWiAAAAAAAAAkoAAAD4QAALbPZGVzYwAAAAAA
-AAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNoAAAAAAAAAAAAAAAWSUVDIGh0dHA6Ly93d3cuaWVjLmNo
-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGRlc2MAAAAAAAAA
-LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA
-LklFQyA2MTk2Ni0yLjEgRGVmYXVsdCBSR0IgY29sb3VyIHNwYWNlIC0gc1JHQgAAAAAAAAAAAAAA
-AAAAAAAAAAAAAABkZXNjAAAAAAAAACxSZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVD
-NjE5NjYtMi4xAAAAAAAAAAAAAAAsUmVmZXJlbmNlIFZpZXdpbmcgQ29uZGl0aW9uIGluIElFQzYx
-OTY2LTIuMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAdmlldwAAAAAAE6T+ABRfLgAQzxQAA+3M
-AAQTCwADXJ4AAAABWFlaIAAAAAAATAlWAFAAAABXH+dtZWFzAAAAAAAAAAEAAAAAAAAAAAAAAAAA
-AAAAAAACjwAAAAJzaWcgAAAAAENSVCBjdXJ2AAAAAAAABAAAAAAFAAoADwAUABkAHgAjACgALQAy
-ADcAOwBAAEUASgBPAFQAWQBeAGMAaABtAHIAdwB8AIEAhgCLAJAAlQCaAJ8ApACpAK4AsgC3ALwA
-wQDGAMsA0ADVANsA4ADlAOsA8AD2APsBAQEHAQ0BEwEZAR8BJQErATIBOAE+AUUBTAFSAVkBYAFn
-AW4BdQF8AYMBiwGSAZoBoQGpAbEBuQHBAckB0QHZAeEB6QHyAfoCAwIMAhQCHQImAi8COAJBAksC
-VAJdAmcCcQJ6AoQCjgKYAqICrAK2AsECywLVAuAC6wL1AwADCwMWAyEDLQM4A0MDTwNaA2YDcgN+
-A4oDlgOiA64DugPHA9MD4APsA/kEBgQTBCAELQQ7BEgEVQRjBHEEfgSMBJoEqAS2BMQE0wThBPAE
-/gUNBRwFKwU6BUkFWAVnBXcFhgWWBaYFtQXFBdUF5QX2BgYGFgYnBjcGSAZZBmoGewaMBp0GrwbA
-BtEG4wb1BwcHGQcrBz0HTwdhB3QHhgeZB6wHvwfSB+UH+AgLCB8IMghGCFoIbgiCCJYIqgi+CNII
-5wj7CRAJJQk6CU8JZAl5CY8JpAm6Cc8J5Qn7ChEKJwo9ClQKagqBCpgKrgrFCtwK8wsLCyILOQtR
-C2kLgAuYC7ALyAvhC/kMEgwqDEMMXAx1DI4MpwzADNkM8w0NDSYNQA1aDXQNjg2pDcMN3g34DhMO
-Lg5JDmQOfw6bDrYO0g7uDwkPJQ9BD14Peg+WD7MPzw/sEAkQJhBDEGEQfhCbELkQ1xD1ERMRMRFP
-EW0RjBGqEckR6BIHEiYSRRJkEoQSoxLDEuMTAxMjE0MTYxODE6QTxRPlFAYUJxRJFGoUixStFM4U
-8BUSFTQVVhV4FZsVvRXgFgMWJhZJFmwWjxayFtYW+hcdF0EXZReJF64X0hf3GBsYQBhlGIoYrxjV
-GPoZIBlFGWsZkRm3Gd0aBBoqGlEadxqeGsUa7BsUGzsbYxuKG7Ib2hwCHCocUhx7HKMczBz1HR4d
-Rx1wHZkdwx3sHhYeQB5qHpQevh7pHxMfPh9pH5Qfvx/qIBUgQSBsIJggxCDwIRwhSCF1IaEhziH7
-IiciVSKCIq8i3SMKIzgjZiOUI8Ij8CQfJE0kfCSrJNolCSU4JWgllyXHJfcmJyZXJocmtyboJxgn
-SSd6J6sn3CgNKD8ocSiiKNQpBik4KWspnSnQKgIqNSpoKpsqzysCKzYraSudK9EsBSw5LG4soizX
-LQwtQS12Last4S4WLkwugi63Lu4vJC9aL5Evxy/+MDUwbDCkMNsxEjFKMYIxujHyMioyYzKbMtQz
-DTNGM38zuDPxNCs0ZTSeNNg1EzVNNYc1wjX9Njc2cjauNuk3JDdgN5w31zgUOFA4jDjIOQU5Qjl/
-Obw5+To2OnQ6sjrvOy07azuqO+g8JzxlPKQ84z0iPWE9oT3gPiA+YD6gPuA/IT9hP6I/4kAjQGRA
-pkDnQSlBakGsQe5CMEJyQrVC90M6Q31DwEQDREdEikTORRJFVUWaRd5GIkZnRqtG8Ec1R3tHwEgF
-SEtIkUjXSR1JY0mpSfBKN0p9SsRLDEtTS5pL4kwqTHJMuk0CTUpNk03cTiVObk63TwBPSU+TT91Q
-J1BxULtRBlFQUZtR5lIxUnxSx1MTU19TqlP2VEJUj1TbVShVdVXCVg9WXFapVvdXRFeSV+BYL1h9
-WMtZGllpWbhaB1pWWqZa9VtFW5Vb5Vw1XIZc1l0nXXhdyV4aXmxevV8PX2Ffs2AFYFdgqmD8YU9h
-omH1YklinGLwY0Njl2PrZEBklGTpZT1lkmXnZj1mkmboZz1nk2fpaD9olmjsaUNpmmnxakhqn2r3
-a09rp2v/bFdsr20IbWBtuW4SbmtuxG8eb3hv0XArcIZw4HE6cZVx8HJLcqZzAXNdc7h0FHRwdMx1
-KHWFdeF2Pnabdvh3VnezeBF4bnjMeSp5iXnnekZ6pXsEe2N7wnwhfIF84X1BfaF+AX5ifsJ/I3+E
-f+WAR4CogQqBa4HNgjCCkoL0g1eDuoQdhICE44VHhauGDoZyhteHO4efiASIaYjOiTOJmYn+imSK
-yoswi5aL/IxjjMqNMY2Yjf+OZo7OjzaPnpAGkG6Q1pE/kaiSEZJ6kuOTTZO2lCCUipT0lV+VyZY0
-lp+XCpd1l+CYTJi4mSSZkJn8mmia1ZtCm6+cHJyJnPedZJ3SnkCerp8dn4uf+qBpoNihR6G2oiai
-lqMGo3aj5qRWpMelOKWpphqmi6b9p26n4KhSqMSpN6mpqhyqj6sCq3Wr6axcrNCtRK24ri2uoa8W
-r4uwALB1sOqxYLHWskuywrM4s660JbSctRO1irYBtnm28Ldot+C4WbjRuUq5wro7urW7LrunvCG8
-m70VvY++Cr6Evv+/er/1wHDA7MFnwePCX8Lbw1jD1MRRxM7FS8XIxkbGw8dBx7/IPci8yTrJuco4
-yrfLNsu2zDXMtc01zbXONs62zzfPuNA50LrRPNG+0j/SwdNE08bUSdTL1U7V0dZV1tjXXNfg2GTY
-6Nls2fHadtr724DcBdyK3RDdlt4c3qLfKd+v4DbgveFE4cziU+Lb42Pj6+Rz5PzlhOYN5pbnH+ep
-6DLovOlG6dDqW+rl63Dr++yG7RHtnO4o7rTvQO/M8Fjw5fFy8f/yjPMZ86f0NPTC9VD13vZt9vv3
-ivgZ+Kj5OPnH+lf65/t3/Af8mP0p/br+S/7c/23////uAA5BZG9iZQBkAAAAAAH/2wCEAAYEBAQF
-BAYFBQYJBgUGCQsIBgYICwwKCgsKCgwQDAwMDAwMEAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwM
-DAwBBwcHDQwNGBAQGBQODg4UFA4ODg4UEQwMDAwMEREMDAwMDAwRDAwMDAwMDAwMDAwMDAwMDAwM
-DAwMDAwMDAwMDP/AABEIAeACgAMBEQACEQEDEQH/3QAEAFD/xAGiAAAABwEBAQEBAAAAAAAAAAAE
-BQMCBgEABwgJCgsBAAICAwEBAQEBAAAAAAAAAAEAAgMEBQYHCAkKCxAAAgEDAwIEAgYHAwQCBgJz
-AQIDEQQABSESMUFRBhNhInGBFDKRoQcVsUIjwVLR4TMWYvAkcoLxJUM0U5KismNzwjVEJ5OjszYX
-VGR0w9LiCCaDCQoYGYSURUaktFbTVSga8uPzxNTk9GV1hZWltcXV5fVmdoaWprbG1ub2N0dXZ3eH
-l6e3x9fn9zhIWGh4iJiouMjY6PgpOUlZaXmJmam5ydnp+So6SlpqeoqaqrrK2ur6EQACAgECAwUF
-BAUGBAgDA20BAAIRAwQhEjFBBVETYSIGcYGRMqGx8BTB0eEjQhVSYnLxMyQ0Q4IWklMlomOywgdz
-0jXiRIMXVJMICQoYGSY2RRonZHRVN/Kjs8MoKdPj84SUpLTE1OT0ZXWFlaW1xdXl9UZWZnaGlqa2
-xtbm9kdXZ3eHl6e3x9fn9zhIWGh4iJiouMjY6Pg5SVlpeYmZqbnJ2en5KjpKWmp6ipqqusra6vr/
-2gAMAwEAAhEDEQA/AOcgE5fJUnukI1JvBgMqLKCcaQP3DDwb+GWRWSYAgHfEsV/xUG+KtjbFW/UA
-6E/RirfN+wJGKr6y+A+jFVWMnvUHCFVRxPU/fhVuo8cVX4lXHpkVapUCmRIVsYOFXZNk6oyJVsMn
-cVyKuq3ZRTtkwq7k/gBhV1WPU/diq4KO5P05EqvA2yKtgGuWKvWtdjTAQkFf6ZPXfI8LK1wjFMaY
-lxBpjSFhWo3xpVIowOxp7dsBirVWG1Bg4VUJZ2j6K2PCqCeTWLmT0rVYlY9DI3H9ePCq4+UvOk1e
-WqQWy9zGpc/gKY8KtDyBqDf72a9cSDwjUJ/EZYOTIFT/AOVa+Xqk3BuLk92kkND92JTxIi38k+Vb
-cfBp0RI6M9WP4kZBeJD33kny5c8uNt9XY/tQErv40qRixJSaTyNqVmSdK1SRR2SSoP3ryX/glxQq
-wz+cLT4buNbhO8g2J+XHItic2l9JKoMiFGpvgKohpWG/GpP6sCuElB4e2KrTIQPfFVMznFVnreOR
-KuMnucCrTJtiq3mKGorirTPxACGleo7YqtFw4Ugih/ycVW/WffFW/XNK4qtM5rirXr4q4zDsTXFV
-pmb3+nFWjO1eg6d8VWiduJxVY8sh71GKrfUxZNCUDqSPligrTKK9cULOeLJoybYqtMlOpxVaZD17
-Yq0XqDXp7YqpBmUVUmlehxVozDvsckFaLtXCrRc0yCrGc8q+2G1WqxqceJVhc1x4L3VYzNTHgrdS
-t5E9ceJjSxnoceJaU3lHSu/Y+GPEvC//0OdK6nvmRIKluocf0grL0Kj8MqplBHacSqOtK++TCyTA
-F6DoPbDTC13XYnbAVtcqpXcYAVtWWgHQYaW1w3xW14640lUVT1wgKqrHtXr8slSt8F8B9JofuNMP
-CtqtvYXU7AQQyzN4Roz/AIqDjwItOLbyJ5zulDW+kz8D+24CL/wxGDgW00X8pPO5hMhht1btG0y8
-j922PCpKV3XkHzvbby6TKwPeFklH/CnHhRxJRcWt3bEi5tpoSP8Afkbp+JFMHCy4lJTE2wYV8K75
-GUUgrjGB1FPntkaTbYHh0/z+/CFt1N6eGFFtinjgtbXqVpucBFra7kuNLa4Nvk6W14apxAUlUDim
-FDfMYaTbZ6Y0tqZHbAtrGXfAQttbY0trWHLrjS2otCpqD+oH8cFLa5Gnip6cjLToATT7sNLaIXU7
-5diyyf6wyJKC22rOVIEQ+84CVQsmo3DGnBQMimlB7q6O/L7hTFkApm4mO5c1xTwtGRjUcjTtvgpb
-aL9gNvHAQkFaHK98FJdzY40q15O9cFKoNKK9cVWNKK7HIlVpmPjgVozbYqtMzDvirvXxVr1K98VU
-zIp2xVYSqmoqD+GKacZtviFcSVpoTr409sFrTZm2648S00J/euPEtNGYeOPEtO9XJAMWjJtiQtrC
-5+WRtPEtLe+ELzW8vkcNKt9UHYHGmTXPelcB2VoyL3ODiVr1BQjl1yQW1pkSmwxKqbS0H05HiVY0
-oI6EmvhiJK1zk8Dh4wrR9Uv9kBR1NcHEy4XHke+RMl4VpU9zkeJeFbRidjXDxopxArUVx41AaIrg
-4mdLeHsMeJaWFFr0x4lp/9HmkdPDMqSoK+H+lQtSlRlTKCMs2oWFaVwrJHLLXbJBrVFI61wFV4pW
-ldx1PbDGKq8EM8zCONGkkY0VUVmJ+gDJ8Ksh0/yD51vD+40a6KncM6cAR/sjgpWTWH5JecZ/iuPq
-9mv/ABZIWP3Rq/8AxLJcQRxMi038i4CFN5rIY/tpAgH4sSf+Fx4wvEn9t+Unkq2cerDcXJXb95MS
-p/2KhcHGvEyCz8o+UtPStnpMUbjoZIvUH3ycsjxFiZJhay+n8EQhRR0VQEH/AAtMBXiaunblX0wx
-PdDXIbo4lwhZ4hRZQewrt+GEEhIKyOwuPULkAqBUsw/srh4lQ2rX+g20QGo6laQxj9h5kX8GJJx4
-mbENT8y/kxRlu/Qv3/4pt2k3/wBZVA/4bASghhOra1+Ublxp/l27Mh6NHN9WFfHjyk/4jgY8JYXf
-tbPetJYo9ralaG3kf12r4mQhdv8AY4WwclECQGpbbvtiErga9d8nwqvUqO2RIVVV/hGBW/pGSVUX
-xriqovTpXFV1Pl9+SCt1H8wxKqbHfrXIq0TXFVh64q7FVvHepxVplFcVdQZEhWuIx4VCxo++PCyW
-mKuPCt0pNaEkkHbGl4kO8UwOw2yrgKqZYjsa4OEhkFhlNdwcWTXqnxIxVYSe5xKqDyDrkVU/WB67
-ZEqtMq164FWmWgriq31wcVa9X3xVaZd+uKu9X3xULWl74slpkrkSriyBffAqz1l8TkuMK71q9DX6
-MeMK71z2rjxhXesajY75E5F4XepL/LT3weIvC1zk74+KE8LRLnInIkRd8eDxE8LW9Aa4+IvC1Tff
-EzteF3BT88HEvCt4jwyBkV4W9vCmIkV4Wqb0JP0ZPiXhaI8d/A1wcSRFrfxw8SeFqmwHhjxK0RTG
-7VoiuKtcQeu4xYlooMVC0imLJr37Yq1scVf/0uYeooGzD5ZlMbQ161ZYfYZCYpIKIgYhhQVqMAZz
-5IkM/YAZKmoclVOR+Ik8D2xAUpjoWr3GkXLzRRW94rmrR3sKyoD/AJNSuSRbONL/ADj1G0UK+h6c
-R3NuhgP0cQcEiVTy1/PKz4f6VYXcD/tGGcSKB40kFcjZW0+t/wA6/LE6qj3d1CzbUuYOYHz4lsjS
-KTzTfzB8u3MgEOrWDAnpMGhP/DBRhEVpNr3zLokUfq3F9ZxxD9qO6jB+gAsceELSVS/mx5EtozE2
-oTTN0pHG8g+88R+OGloJNefnl5chkP1DSri5PZpDHCtf+HONEqAEhvvz516X/eHS7O3Xszl5X+4F
-Vw8BTwhIL383PP10CDqhtgduNtGkZHtyIJwcHemmP3vmLXb88rzUrq6Pg8zkfcCB+GPCtID1BkuE
-JcZATU7nIyCQ36p8fvyNJtoSoO6g+22SAVv1/Dc+GGlbWVq/Zp88d1XerL2piq5TITucFKqoAeu+
-T4WNqyqa/DUfI0xpbVl6eH048K2vCRkVPXJAKvEQJqAu3YHfGltYUY1qpGCgtqZQ1yMgtrShr1wL
-bWLJ1cVdTFWwop0yQCtcDjSu4+ONLbVBjSu4jGld6Qx3W1jWkbfsivjiY2m0PJpleh4nI8AXiKFm
-0q5TdKSV7d8gcRtkJIGZLiOvONlHeo2yMsRASDul0s3xEVNPbKDKmaiLhDUA1PjlfEghozAdfGmP
-EimmmfkRxNMh4rKneo59sfFWncz0rvj4q01WTwr75E5lp1WPfAcyQHHl3OR8SXeyprJCZSAvCqRu
-K4eIppYBvla0v4064Da03kd1oOoMkCtOoMbVo9sFBWyK0A69cUuoTuCKYVaIFMVcV8MVWcWOKuI3
-365IK6gxPJWiD265Xuq3jTrhFrbqDCtlxG2Tpja3j44rbVBhtbabxHQdcbQsBxCQ2wFMLJYQK4oL
-VW8MUW//0+MQ+ZbQbNbcR45lMLVpdTs7wx+gODL1UimQnySExWWCM8pW4Jt8WRjINmTkrJcWDfZu
-a/OlcvFNMeTZmtUqBMrU6gA1xTa1LwlqKDx7E9MixVjclgKUOGlVVlYj7QHtjStpIQDyYkk7Y0qO
-tnJj2J+nCAqIX1KYaVdWXxw0q0ybYKSFhlGNlkp+o1DRQT4nFXCSanbGldzbudsjStVHicaSFwIH
-f78aTa4OtOuEBbb5DDS2uElMaRa9ZKjGltUVmI2AONJtERs53Y5OmKoAWB470BNO22NKqWp9azjm
-4keoTyjb7Q49CceFVZIW6kUrkSFVBDJ9GClbaJqb740qk68TjSrGBI2xpVtcaZW2F5bY0i2/Txpb
-XCPbJAJtv0xjS22sW+NLbfAYaRbfpj+WuPCtuCAH7P348K2vEbN+yPox4VtcsLU6Y8K236LeGO6C
-39SRtnFVPUHpgN0oLANRtkW/uFVacZGBAFNwaZpNTYk5OMFCNGa9MqMm00t9PBZY04p1p9GCgy2a
-VDXfDwrs3wGNLs3x8MHAuzuFMeBXUOGkUuAPE5IJC3hjaruIGSsJaPTBsrh0xpW/i8cgVWgb74qu
-4gdMVd9J+jGldxB/tw0VW0OCldQ4FdQ4VayQKHH50xVpgCN/vx2St4+GEUrRjqcOyFvFcjaKdhta
-dRSPfxxWltCPf3xtDXED54QlpumG02twoK0pU1xpD//U860bxzKakfpJP1jfwwS5Mo8081uPlpTH
-sOLZjR5tuTkxgV6g0JzKDjjkqCeUUKsVPehxSrJfXqjkJSAPpxVExavfgV9WvsQMkFV11+7Xqque
-9dhhVVTzJKAOUQNPc4qyHQNWa7ildV4hWA4n3FcMRapp6snbLOFW+THck1yKuBIO+2KQ0SpPXFks
-L+ByJVr1D0G5wK4yGnQD3xVyMxOxxVfVu9Tirqf5OKqgpXfEKuVkr1r8hk1VFIPSv0jFVeNTttiq
-IjQ4qiYoydl3J8MIVExxzcfhT503AOFVVY5j1PHx9siVVFt56UIanjirRtX/AGhQe5xVY0Kjan3b
-4qpNHTtiq30m9sVbEJGKrhCTirfoDviq70h4jFVyoK4qv9FfDCFXiM02AphVcIHJpSnviqoICB1/
-CmKrhas2/LFW/qyjYnfviq/6snz9sEuSvN9YT/cpeDcD1n+X2jmm1PNzIckuK0OYqAtINfnil3E5
-GKuIplh5KtIrkVbGNq2RthBSGskya+OvwjIlW9+/XArsVdjauw8SuwK3Q4q1irsbVw3NMPErsMld
-lYV2SVog4q1hHNVpWoPjjJXL0wQVawFT1yareJyCu4nCFaIpklW0Y9Mj1YlrpsOmT6IcRXvTAq00
-HeuSBpWsPEr/AP/V87kHMpqRemGlyB4g4Jckgsj1L4tJev8AIDmNHm3T5MT37ZlBoC6gxVd+zTFX
-DphtBK7G0W4B64QVtmHklUaG6V2pRkpt4jLYBbZMscQHUn6KZZa23SMbca++QIZBbKUJ3FBgpKHY
-R740tqBdBXiDgISGuTEdAR23wcKWwXr2HvjwsbXKHJpyH0Y0kFeEc1+LHhSuCrTc748Kq8cfP7NW
-+QxAQjLfTbmUcowvyLqp/GmSpFo2DQb5qkr8I/aFZP8Ak3yxpbRi6FMih3kjC7nqFIA/4yFMaW0Z
-beXxJG7rI5CmnFV5EH3MZf8ADGltXt9KtvV4zMYxSgqWQE+/qqgH/BYnZbXGztYmH76NYAaEs0JI
-/wBkslcFlbRgsYyyNb38Ww+Forg1p/q0fJCk1JUa2WRYw8pjPVi6JJ93Q4kBFqjW+kRIUaR53B+2
-kRjPyoW/41yK2lssMZYlA3EdA3UYraGkgHhitrPRXxw0ttiAHoa40trlttsaW1wtdsaW1wthXpjS
-2u+rb7DGltUFs1Ogwra8W5p0xW1/oHxritrxaggVFcIW162lNgNjhpbVRZmn2K40trhasDXgMRG9
-lt5V5iQprl+nZZ5AP+COaPPvOnMgdksKgb5j0oKmw6HGk21kAEtEVyVq7iMCrT1yBVutdsIVviMn
-abaI7ZElbcF2wWtuIGSW2sBC27BS22AMKXVJ2wpcQAPfFWshJBLhsa4QEW7JkrbsjSQXYUuxY2s4
-0AO59sQtt7+FMStrdh8ziNlt3GrEHDa2sw0tuJpviAtrSa4VtrBSaaIGG0U1kbKGjWnXFVta4Vf/
-1vPIUE5lNSL09KXae9f1YJckhklynLTGB3Hpn8BmNHm3S5MTVW4ZlBoX8a4q7hTrirarUYsSu4HF
-DYBBqTt3wxVlXkgx/wClKW3pG36x2y+KsrqexAHuGOTVxWSlQ675EswotzpuwwKhpGp1I+jFVEym
-hpufDAWQU/Wf+UDAlsXArvsfDFgvWVSdzTFIVg0dOuLJeJUAp1xVERTKNhtiEFFxFyag0yTFFQyS
-qftjfv3+/FU1sr28h+JLgqtGDLUkb9NhTFVK70mDUGDzTTqab+lJIn8cVRFj5O0bmC9uZ+JqfWke
-SvzDGmEBWRWujafGwEGl2US9SVtkrXp3GHhVtvJ+kTTGWSxtjU14+iq1+4DImDaMwqmx5J00tW3S
-W2B2It55ox9xamDgpqO6MTSPq0Rj3kJXi0krGVuviScCoKawCsV4nbpiqFksh/KcVU/qo8Bklcba
-nSgxVyW7n7I506gYqqJCXIVd3PRVxVUNnKg5SI6hdiWVgK+JJGKqy6bOwqIndQOQcCqsPEHFV6aX
-cOiSIg9JzRWZuG4/1sVRKaHemD1fSKLUKWcEAFttiMVc+lXCEgqpC/acMpH0fZP/AAuKrUt4z+0K
-jqBhCq4tU8ckq8WgIrU4qrLbAg7GuGPNLxfzhH6fmfVE/luXH6jmhy/3hcuHJJm6ZR1ULKAjfFK2
-gyDJ1Biq09cVaoMiVd92IVvJK1TCAreHhVobg5FXcadcVdQYq75bnwxZB3YHFLqDFXca9MhLmxLm
-FE98lFDqDCrqDFIaPXFk2AKYsStIqKYoaEZBGKtNQkjsMVaxVogU8Mmqyi+NcVdQYq6gxZBbSu2K
-lrgcPCxaahyQiqxiij4jQYeFX//X4BQ+GZrUq2in6wm3fIy5JDJ2Wtk3iEbMePNulyYsI9svcYup
-hCG1WhySrsVdirqZGKsu/LywvLu5vhBwPpxhnDsq0FQNuVN8virLBZXBJBehBofiBH4ZNVslkw+0
-5PyyJZhQlsmT9k4CkIOW3I7b5FkhJYm7bZEqoGP4hX6TgVwBBrviq8FvDFVQF6jYH54qrIHr1pXt
-iqrGOm5xVXjD1+EE+x2xVEx3Ii2lXgPEnEFU5tuQVWBXcVy6MlTS3kc0oQfvwME4s3egrT6MIRJN
-rWTp1+jJMUzhfYfCT74qiKp4YCkKEpjNRTIskBKEoabYqg5I1r0xVDvAhNDQ+2RVqCD0STCxj9Qf
-GKkj8a4qiLeV4WjYpG7RuHHJQK07VQK2Ko291h7l+YtoYW6sE9RlYeFJC4/4XCAq241i/uJRK3pI
-wHEenGqCnyocIS1c6jf3Kp9Yk9UIOKBlQUHhsBihYt1eekkRnk9KPdY/UfiD7DCFWkFjUkMT1JqT
-+OSVSfVNKt2AmuoYj/K3X8MVW/4i0IdLvl7IkjfqXFEl8XmbQ5HCCaUnxMEir95GLFNLa8sZQPTn
-Q17cqH7sVRkfpVG4+8YY81eGedlH+LtWpv8A6Qf+Irmhy/3hc7FySJuuUdWSwg1xVoqKYsmgMBVp
-sirqZIFWsBKu7HAruwxV2KuxV2KuxVoqa9MirVDiFaoTklXEHFWm6Yq7Fm7FWvpP0Yq3ixLRxQ1x
-PhirWSCrSDXCrhiq39o4q0/XFVuG1cQaeHvjaQo3EywrVvteHjkJNeTJwpa95K5J5EV6L2yeCFm3
-G8e1EvI7UdjTsD0zfY40F8V//9DhQt2PbMy2niVIIHWeM06MMiSvEyNU/wBGZe5B/rlEebkE7Maa
-3oTXxPTMinFPNr0fbDSuaMjt0wq0Y6dRhAVaykfLHhWnUJ2wCKLZd+XFus+p3aOnL9xyoOlVZctg
-tvTYtLVRxCLt75ZSVzaWDsAtfDIkMgUNPpch2/VgISCl1xpLV3qfnkGaXS6QxJoPoyJCqP6EnJ+E
-Ek9sFKuj8vzurNtxXqCQD92NKqHy+RErl1oT03J/VjSq/wCgbdeC+oPjO9B0xVWXRLT1hGrPw7mn
-6sPCq5dHVuYBKmnw1WmPCqrHpVUqQeQ2x4VQ+u6dx0O8NAOMZYkjevtkTEotN9Ptw9nbuoFDFGdh
-4oMnAWtptBbyKKEZZTFMraMgCtfuwgIITO2CjrthRSYwsKD4iPpxWlf00+eJWlCdQF2AA8a5BPEl
-twAQSD92FbQEnLxOKbUWMnIeP05GltotOO2NLbRklHXGltcJpqbYVtU9aTvsMK2qJO1PHFbXrNXq
-pxC2vEydOmG1tc8NnJu0KSHxYAn9WGlty2lgKH0Fr7DEoKISO3X7MShe9BUYLRS9pQqgRNFHT+dK
-j7uQxtaQc97r67w31gAO8iFP1Mwx4q3UB5F5nkmk8xX8lw8clw8paR4fsElV+z92aTMKnbm4+SUn
-rmPTJx2FcVWHY4pt2AptoioyKtcW8cjStYgK7J0rsBCuxVxNTkeJXY2rsbV2+NK7DSuqe+FXYqtb
-bFWyNq4sraxAW2hhpbbwIaxQ03KnXDStCvfHkrsNqt32NDkqRbVN64yFJaIrgCLWlSPurkQLNMq2
-tDXl2II6KwMh+wP44eGi488o5BJ5JJnqzGpPbK5S3pxJ31XCNgF9xXNpocJq/NcYFKwjqR7ZtWzZ
-/9Hkpswe2ZThcTcdmA6mnQ4lMTZTMx8Kg+G2UDm5nRKpLAVPXMkOHOW6w2dD44seJTe0O+2K8SlJ
-b1xumQkovAadMeJPEtMdDliWffkza+v5nnh48i1nKQK0+yVOThzSHta6AlTyioan375Yld+hgNhG
-B9GRKqUuicuqnFUBPoAJPwnHhZcSDk8tjf4fpwGK8SifLQ2LVH0jBwrxKE2k2Nu1Zpo4yTX4jU/R
-SuPCvE0NN08kILhCD3of6YRBeJHR+X4X+xIp8KZLw14kTH5Wk7KT74OFeJEL5VlO5THhXiV4/Kz9
-kpjwrxIHzX5YkTytq8vH+6s5pP8AgFrleQUm3eRdFOoeXradVqAEStNvhjX+uOJWTr5VYfsZYqrD
-5Y4SSOa/vCCV7DiKbYqiV0NV7fT/AJjFW3sUipSMyeyca/8ADEZAyVDTzSQyEHTrho/5y8Ef/EpM
-BkqBkvZCrc7GNP5C97Go+kIj/wDEsjxLwoGS+XiQy6fG/ibmZyPoVVx4mQigri9V14/XrGBh1eOO
-Zyf+Cb+GPEnhQovbOIj1NSEv+rbkfrOPEvC59c0hejSO3j6fGuPEvCh5PMNgOkEjHsTQY8S8Kg/m
-eNdltq/Nv7MeJeFRbzS9fht1p7knHiXhUX8z3xPwxRgdqgn+OPEvConzFqZ6Mi/JR/HHiXhUm8wa
-sek1Pkq/0x4l4VNtZ1Rz8Vy/0GmRsrwrTqF+3W5kI8ORwgleFYLi4PWV/wDgjh4l4Wi7k1LE/MnH
-iXhVOK+AJ8TucBK8LGNWFNQuN/2/4DNZn5uTDkgyKiuYxUNUqMCVpUE4q7iMBSHcRkUu4jFVnEYh
-XcRk1dxGRKu4jArqDDwq7iMHCrRFMPCrYAwKtxV2KuxVoiuKtnpTFWiKD37YQrX6++SV2QKuxCtE
-VyatEUyJVrArjyIoPorgkCGqUCGxF8HKtG6FD1+eQhko7sccqO6wUr3pl4HFybuMILULxbcEVPqk
-bJ4d9/8AY5Iw4Q0ZMvRJ1jZqcjykk+ORj28MqErLiylu74WkoNwPDHHDikvNEIoFKbexzocOPhjT
-ICkQib9RlyX/0uffVB4ZlOtbFpQ74lMTu64BUqW3rlA5uwidmvqwYVIrXMhwcn1F31OvUY2wUms9
-jtjaoaSyA6DFkCh3tRUCmGk2hpLb4gKZIFlb0P8AIRAfPyxcQS9ncjf2QHLBs2Q3L6JNruT6fXw+
-WT4kkLXt0H7BrkTJQEJcR8QSEIxElpKrh2BYlTQdqVyXEtJfPeSRoHW2kbkacQAfpoe2NpEULNqE
-yymM2ZPEcqmhB/yQfHG08Kib9ykbNYxryO4korL88bXhWDWEQuPTthT+7JI+84iS8Ksnmm3jAqbd
-T+1xqd/agw8a8K//ABvZpuZAf9VW/pg4l4Xf4/tgPhBb3CY8S8Lv+ViMB8EBPvsMeJeFLfMPn26u
-tA1O2EACT2k8T1YdHSnTIz3DIBL/ACf5p1HTfLdpb2wRo5ESTk383EAj8MrxlNJy3nXX3U/vFQ+y
-n+OSsrSi3mfzA3/H4RXsAB+rGykBSfWtacfFeyn6aY2U0FB7vUZPt3UpHYc2/rkDzWgoGOQ7liSO
-9TXAtLfRXwHz7/fgS00C0+yMVUTF2Ap8sVU2TYnAqmRXFVORaDpiq0KMKqTKa9cVWOu22BVlKYQr
-qDFXUGG1dipXL0wMbXohOSAW1Q9DhoLbGNY/46Nx/r/wGafVEiTkw5ILKlDv2TgStwlXb9hU+GVk
-pDtvHfuPDJAJdgPNVgFTTGPNV3GmSKtU3+jIhWsNK7CrsBKupgtVprXBbIU3QYgrs4jbJbLstwFd
-ndxgXZ2S2Y26n4YkrbqDwwWtuYCmHhJW1p+1THgK213w8JW3UwV3qtP2qY0qpFBJNGzIjUU1kemy
-g4DPvY5JrDRpCsZrQ1jIFa0GUZcZIuLVkqkBd6osSk8AsnUnr0Pb3y/BkMOYaLQOpaxPdv8AZSK2
-lcSGFFFAVXgeJ67rlssnGfJgUZr+jyaJqU9g8gkkHA8lFBRlUgb/ADzGlE3QYkISK34JU/bbdh4Z
-tdFpepZxCtHHm0nAjqzKsBT54Md9WL//04iLcVzKt1q70KdBgKQhL5CrJttQ5QDu7CPJEQRkwoad
-QMyHBy/UV5ttsWCxrbbpjaLUZbSvbCFKEmtjSgAwo3Qc9tv0wgsrZz+RHpW/5lWBlUlXiuEoBXcx
-E/wxyS22cjT8309LPp6/ZhZu4GwG+V3JyJBBz3Vqfs2oB8eWTBKBFAT3a/s28Y9qk4QU8KVXV1NU
-0ijA/wBUH9eSteFJb+6uvRccqbN9kAdvbGykBiE80xFTI9f9Y4bTQS6Sp25E17Y2tId1oTja0FEq
-a9MbWmwaDG1pcgNMFrSsOlMbWlt8vLTrtf5oJB/wpw3sghZ5a4toFgfGIfrORxlFJtGp8MktKyqT
-ikL1jxS0RvkCrVK4otsIB1xSptHU4FW+mMbVS9L2yNqoyRGvTFVNoj4YVU3j2xtVKSM+GNqosrU6
-YFW0Phkgq0g1wq4A4quxQVwG2KHZIKqeOFWM6x/x0Zh35V+ggZpdUPU5EDsgsqSGsUtMRT54JSC0
-0ev0ZDmkOywJt2RlzVZQ4Ad1dTJlXUwBXUOFXYLVo9MEirhsN8aVjuueYr2wvjDCEaMIpHIHv1zI
-x4xIAsSlTectUJHExgf6mT8ILbTecNVpvIg+Sj+OS8ILaw+b9W7Sr/wC4RhC2pnzXrDLQ3FPYIuS
-8ELa3/E2rnb6030Af0yvwwx3WHzDqxP+9T/h/QYRjiu61te1YrT61LTtTbD4UV3WfpnVG3NxLU9f
-iIyQjFd1h1PUTUG4lPiORxqK7rRfXRYfvpK9wWbGgu7JfKLysLkuzOKjatf15j5hRZxDIeZG368x
-zMBkibbeJ15HxYeIPTMPV8QNj6XGykjml2oylT9XidkrtLXqx/pm40WWHBbCUwQlv1yGBLmGW3Wb
-1oxHFOa8oHDq3qLTvTljmyxa7QDU4QIfgpIEY77I1Nz94zEhIGTEsy8x38nm/wA5a3qtjFSyiDXI
-XuIoxHCG2/yvizJxxBmFopZb2oYsJKqi7+Fcy8uqjjGxZAEK31KJkcIxLbcB22zDxdpcUqKSUOtV
-JDdQd83cZWEP/9SOhBXpmQ61eIxhCEu1VaIhp3I+8Zi9XZY+SKsVraRH2oTmVHk4WX6iiPRwlqLR
-hrkWKnJBthDIIaS3GFKEmtx1xYxZL+Uq+l+Y+inoGkkQ/TE+JcvBzfSrLtU/R8sXJQ0ijfJBUBcK
-MIVLbgEA5NUlvQeD+4IxViM6kjFUE6jFUO6nFVFuuKu4g4qvQGmKqiA1riq6ZC1vMvYxuPvUj+OC
-XJUJ5RBby5p5/wCK6f8ADHIY+ap8qmhyxVZFIGKr1UlqeOwxVx0fX3YmO1PAn4SSo28dz0ysy3Zx
-wSluppYahay8LxOJdeSUIPavbBxMZQ4TSusBPbJIXfVT4ZEq76kTvTArvqPtkVWNp+/QY2qjJY+2
-PEqi9nt0xVDSWvtiFUJLb2ySqEkNMkFUmi74VaKAUFMVaK06YoLagU3xQu4jJBVQKuJUMW1oAalN
-T/J/Vmo1PNvigSK5jhm1hVbxNAPDBwhk7icIAQWiKYodiWQcdsqHNWiK5argKYq3iq2hyCtAVxq1
-cRh4r2VhHm0U1Jh/xUuZeAUET5JPbRI7moqK0Ayc+aIckWLKOu6gfjkeJPC2LOE9vwpgMyvCvW0j
-p0GDjKeF31SPwAx4mXC39UiB3FfEeGAzpjKKPk0a14lo5fjNCEZdgCAeuDxGoypDSaYUIChX5V40
-O5I7UOPiMxIUom3UdUofE7VxE7TYQ08aBGalKZdFCfeUFHp3FTStBX3ynOd2QOzIVaMzrD3YFix2
-AUdSfllYwcTRPLTrO+SK9SbhytI3o/8AxYrfb+4fZzK1GmjIcIapz4kL5lsDa6krI3KKaNZIH7Mh
-qVIr4jMCA8P0NKRvfyR272oAKzOsrN1PwAgAffvkuaoyazgi0BnnJN5JJbnT3B+GS2ZZVk5DxDqg
-3y8QjTMIvyt5oOi2l7bpCJP0kscE7LswhjYuUX/jI3Et/q5XKXDuE3SKeVjGeJJBpxBqSB4HNfPK
-ZHdTO1SEfu5JSaFQOI+eZOnwXIFChxB3J3OdIBwxV//VIgDXpmQ61UVRXCqB1iP/AEdSP5v4ZjdX
-OxSVdKFbBQff8MyAdnGziiSiworhtoBtsrTpjSFrJUdMKbUHixW0PJDikBOPy+X0vPehv0pdoP8A
-ggV/ji5OnO76WeNt8iS5SGkjPf8AhkgTSoC4jO+EEqls6N8W3TJ2qS3gbcEChrhBViUx2Ip3P68K
-oB1GKqDqN8UFRoMVtvgDitro1BxW1VVAxSrqgccfGo+8ZGSCUr8kAt5bs/kw+lXIyIFLbIo1yxKJ
-SPbCE7dF3o1U+29PcdMiTSE+lSCWWEiSMIDC782Si/CyvsTy8DxOUy5u502aIxgeSH1CKGRLX03W
-R4o0STidwwTftgjzdZqTxTtRjtdumWE01UrLb7dMhxKV4t9umNod6FN6ZG1WmAHqMBVQkgUdsFKh
-5IfbCCqBkgGEFULND4DJWqElg8ceJVB4tsPEqk6GuG1WcDWmEFWipriilwXbJhC7CoYvrW2pTf7H
-9WabVH1N8UATXKaZrTuaDrirWVUm3ZKNBbcRXCT3IWnrjabbYDrkfNbW79skJJbA8cJKuOC1W8T/
-ADHArYFMQVaPX6MMYC1YT5vH+5M+8S5m4mM+SU2IoSe4bDPmnHyTJGYjl9B+WVFstviGNa4gru2F
-AGG0bu4jK2e7qUBZvDY+JwiIPNSLRDuZrVWNQ6fDy6bdcq2twc0Sh0naOCWMAMshU8urAr/Ke1cJ
-iGoDZatwz/DI1QDQd8QK3ZDYqE0PqK6IQNzTltWmXwn3toyHqmmhetaW8iUX15mAi5MAooB8TE9B
-jk4JSG6J5gAnESR14QyevzNbi468yOwHZVzMhwRHNxdpc17px+CnLjuwpkND6zxFY7IvV2kuPLCy
-PQzaRMta0qbeY1IH+q3HMPV4/wB5ZXzYhdSRcYuJBkRj0FPhLFgT99MhQA2VHXiQjToza1aGXhNK
-rrvCwLrwUn7SMx5chjw3uU2t8uW9rc61Al1UW4qxC7EsoJCj6chI7IkdkztLn1tWgt2FTLMyHxPI
-0XMYQsoinOv2aWV8+nxpwktxxmWtTyO+bnSwjFtSqirQFqe3fM/JKxsh/9YmzIda2vXCqH1hP9D5
-jorCv05i9XMwrdKJ+qf7JvuzIHJp1HNHUGEOPHk7JIaY7YqsIHEYqouhxZph5RBj826MwoG+u24B
-IqN5APEeOLbh5voKLWNVufNt3oMcUKwWsSzPdgEmkqKR8JPi+VkuTafppzsKvNyruOMaLUdutcAy
-UtrbqwT0i4kYsBstFAP4ZKOSzSQd2PX8UoR9yBxPYZczYvdLtt7fjkoqw+4Q1b5n9eFUDMADtiqG
-brigrCBXFDWKr1WhxUKwWoGLJEQrQj6fxoBkSgpR5F38tQAdVmuF+6VhgQyJ3WKCSY9IkaRvkgLH
-8BkeJnEcS3R9UivoDIqlQArgHqUbdT9OESbJ4OAW9C0/8vrme0huDdxKssaPTi7H4lB33GQlJqYv
-5wvtC8qa3Z6NfTSzXt7CbiL0olWPiGYEF3kFG/dthjuwkSEul86+XbeFmTT9YupVPxx28ELAL0rz
-BZTkqbYGw7S/PNnf6hb2UPlvWYFuHCfXLpESKMfzPSPp2yMlZUtuQBUb9z45AILfoHChcbfbIqsN
-vt0xVDy23tiqGlgIG2KoOS267YhUFJAanJKg5oiDviqGePFVCSPJKolab4Qq1uuSVrJBiWyNjhUM
-W1v/AI6Mv+x/Vml1f1N8UCqknK2bTKKkYFaYAZBWhg4bVx64QeFWqDG73V30V9sBUOof5SMYsm+J
-PTJSVrgcCu4Ee+KtEGnSmRkVcq1NcMZKwfzmKamf+MS/rzOw8kT5JTZV+P57ZOfNcfJMraOaWsUa
-FmYUCqCTWvYDKpM05Ty1PDGDf3ENkW3EbsOY+ajpkQgzpe3l6IqTDepIw60Hw/ThY+MgL3Tmt6em
-4mG3X4cijx0D9YAZRPCw4mpVTWo+44CLQc6cmTRvQQtZ3cTP9mRZI3U+xVgvw5jcG7TLLaR33CG4
-4wyrIrCtV3A+eXjk0GW6wmPsfiJFR4YVE63boSBtU1J3yEhbIy4lWCWGYrEZUjc7EPSh9t8EcRtr
-MDaYpo9yE5RziI/s8XO/3ZZOBCzx0t+ta5bRVkpPGp3qQGA9yMy4T8Jt4U30XU7bUILq3YiI3EEk
-bK4Jo3VSCfBgMp1GTxAxkGPm14Kjx0aVX5ID9niOxzCjko7sEyuLiaSxjt1INsnqPEh6xcjykTl+
-0jtumSOTdVPR7SVLWfU0kSNUcQQqx3aRxuR/q5MC0Fq+l+pNbvbcvrcDep6o/YPWp965eMW1rFBS
-azdmdrp5TLLK3KVyakk9chZbE902aC9SscqrIv2g53rmdp8/er//1yVehzIda2B8/pwhVmopy09z
-4EV+WUZHMwqGkEfV2APR8nD6Qxzo/JuGHHbrih2EKtIPIHCqxkFcVR/lr935l0qTsl5bt90q5Ici
-24ub3+xi9L8ytSoNprCFj9BVB/xDKv4HMDMQozGx/SGRhajPH8DfLLQ1iFFjmoR/u2Hficui3MSu
-U+IA9NsuCsNu1pNIB0DH9eFUun64qhX64qsxV2LEr8VCqvbFkiYlqQfAj+GRKClXkUn9CzKesd9e
-LT3ExJwIZMIVkjZCKqwKsOlQRQ5KTbGfCu0XRbbTYvTgrwCJGORrRI68R/w5yks8mo4xT23QYQdF
-08+FvEPuQZVItL54/wCcrLVP0/pk4+0lpCAfD/SJv65bi5K+jdBkEmj2End7aFh9Ma5jz5qq6sC+
-l3iDqYZKD/YnGKsGFn1PE9fDLVd9UGKr/qqg74qsa1UkgbmgO3gcVQ0tsAaYqhZbUnYDFUBNAK4q
-gLiAV+f+1iqAlh4g7YQqFkiPhhVCyREHcYqoPHkolBCiUFDkuJHCplBjxLwtFNq/QK7Y8SQGNawp
-OoykHYhd/ozV6nct0UAyCvTMWqZtcBiruAxV3p1xVvgR0xVrh44q708VdwGKu4DFXcBiruAyDJv0
-/bEhBa9PI0hgnnhSNUH/ABiWn35sdPyCy5JVpcXqcj4NufDJZUw5JpFLcQSFraZomjIMbKSrAg1q
-COmUsuFbLLLPK8s8rSyu1WkclmJPiTizjCwqQl4ZA6Hiw8OuLGWNMI3S9PoX8ohYCqSnb4f9UYeJ
-xckbSrVJLZTFDZLIGT7csvVz/kjww82o7ClkX1u89SFpGY8TRa0FQKgZjRxi2KUkgd65kGKCF3Oh
-41IHcjrgIRSNs3BkRSe9RXrkGSYWugWl9pFzeSSmOS2kWIMu/HmvJajvUocmJ0G2HJCNNq2izNa3
-K+tbREASoea8SBxIf3GSEhJiU4sbj61D6sZE0NPjCHi6n3GRlFB3U3hjtpFMBKq+zBh3PvmLljs4
-+WGy5oww5DdhUj3I65hg00clnABNt2bYj2yRluxJc9w0dkmn2pQ3E0nwKQS3xd07LmwwS2cvENkH
-qMl/pLPaGYeo6gThK7mnQ1zI4m4bJE0la06nCCsjbkdkowYo3ahxYv8A/9AlB2pmQ611T3whC+5H
-LTJvbKcgczCUDpBAikHgR+OSgdkZ0w5ZZThhqpOBDYNMIV3IYVWnFVSynMF7BMOsUiOKdaqwO2EF
-txHd9Gciv5lBlU8JdLXelK8ZZPHK/wCGnMDKjMAOo+kgfrymMaFIMyVCS9tVZlknjXj9rkyj9ZyV
-MY3bHdT1fRI1YyajaIAGryuIh2/1suBbrYZfeYvLSkV1az7H+/Q/qOWCS2wy+8xeW1ml/wBydqQW
-NCJVI3w8S2k83mPy8XKrqVuSP8sb48S2hZPMvl9Sa6hAP9mMeJbUG82eWwd9Qh/4Kv6seJbWt5u8
-tAkfX4zTuK0/VhtDR86+WF3+ug08Fb+mNq4ef/Ky7m5Y/JGwcSbXf8rM8qRAEySsAd+MZwEoJSzy
-z590TTrK6adZil1e3EsCqm/GV+W9SO2VHKAkRZtH5utCoKW8pFafsj+OT8QFaRcXm+3A3tZSO/xL
-/XAQmgzzSvzo0a10y2t3027aSGNUYqYuJIFNqtXKzBXnP5ualb+f7i2e2jexWGNY2MtHY8ZfUGym
-nc98nAUFeiaL+aSW2hpEumMz6bBbo7+qOL0KW7EfB8Pxb5XPGSVWXf5yTzxyQxaWiiRGSrTkkFlI
-rsgxGMqkp/MO/qQtjbdzyYyE/gRk+FWx+YWqcQfqlv8A8lP+aseFXP8AmBrJG0FuCdgeLmn/AA2P
-CmkRe+cdRjuCka25jCRupVS28kauwPxEfC1Rg4VpCnzfqrmnGEf88/7cPCtKZ8x6m46oKeCf24KW
-mjqt/JQs469lGNLSKeSxkt19Kb1JmZWAoQeCxqr9fCWv/BY0tLRbROByqfppiFpv9H2TMeSMfpwr
-SomiaW7CsA+kn+uGlpUOk6LKzTQ2q+lMTLDUH+7cllHXqBxwUkBcmiaSW3tI/uJ/jhpKqND0g9LO
-P7v7caVXi0jRZY+SafAOI47oPtJsTt2rkCVeU/mTaQw+bbhII1ii9GBlRBQDlGK/qzX5jRZAMXMf
-jlMjbNrgPDIq7huduuKu4eAxVogjFWwgPbBatFDT542q7gKUpjatFNumNq36YxtWuHtkU27gcIUl
-3DxGG0MB8+LTVR/xhU/jmbh5JkNkp0/a3J/yj067Y5ZJxhHx7pQZTxNyvbWc8rH0ojJQVdlBPEbC
-p8OuSjuxJpkFppMVnJFbKom1G5BaB5AREoAJ5V/b+zkxBqlItN5ejtJw2oMryzgksa70+Q6ZCWMh
-YDZj95oly93I6qqquyAHtmHLUgbODPIOKltnYzQypzUkORUqfen6q4+OGPGEk1O1+pahPCp+FWJQ
-H+UnbM/CeIBkJN2VleXskn1dObRAMydDQ+GM6GySURbwzJOFuQ1vSv7xlJFfA5AxpALMfJ1t9Y0z
-UrZt1uBUEU+1GQdv8oqz5jTPFybYckPeajY2NrPBcoCHBpQVU0GxCnqNsv02Ix5qQw+11RrO6Waz
-rGRTmD+2PcZfJiGdiWx1KxWaEI77Ej9pW6UIGYuU7JmOIUoXkNvFeLDAxpIqNDGftEMgLf8ADVXM
-LLhI3cHLjKCcBeYJ3U0r4ZWBbSB0atdHiuL+2luDuy80QVGwOxNP5u2ZmKVCnPwxpJ/NCNHqEm3w
-uxKNvvTMqItnIpKgZqEbkmgUdd8mDSiBTGw0i/vJTGilUH23fYLkTlAXhf/RI8yHWtg1yUUFEqvP
-TrodwpP3KT/DKcjl4Ur0scfVX5Yw5LnR3I5d0cMNVORQ6pwhW+Rwq4sKYqpmp/zp127YpBp5tqHm
-nzO1/KX1W7MkbPGjmeTkq8mFAa7DfF2EBYQ0nmLWnJMl/cOT1LTSH/jbGwvChm1K9ZqvM7E9SzE1
-/HEkKApvcSMtCxI8CfHIslKSVnNGp8ICr8hgtXCSnehx4lc0natfnjxK0HPy+WPEq4Oada12x4lX
-ROxjXfJcSqgkelK1w8SrTKVJ6YqoSy8lKnoeowEoR9kxa1jUHYEmnzzEnJti9TsGdrhwfs+lEwXt
-uWH8MyIsU1VdtstVWHILTAracq4qvneVJrVVYhHdhIAaBgI2YAj/AF/ixVXVR9rocVXhepriqqiE
-AdxiqoVPGmLJ1ivKA0/35KD9ErU/DbFUSkZ5fRiqrEpqVpkSqugah23oafdiq/TzV469VW7Hz/0p
-DX/h8VTRFAJHgcVVkT4vniqJt0KzR7VowNPpySrbBSNOtB1/cxf8m1H8MVRKKeXT2xVVCkDp0xPJ
-VWzQCFx4SOP+Gb+mVFIeS/mch/xfPQbehb0/5F5r8/NmxJk3pTfKEhr0z4Ypdw9sVdwHbFXGLatM
-VcENOmRKu4GlKYFdwPhiruB8MVd6ZxV3AYq7gfDFXcD4Yq8+8/r/ALlgP+KF/Xmfh+kMpckj0zdX
-8OQH3ZDKyxpmiU3GUtitFLOiuqSPGsq8JVQkclrWhpg3WrTXQrqc6ravJI8oiWQIhNeIVSeIDEKP
-tZbG2uUU21DVfjLyc0UNSIGMEAH/ACuW+TlKwwkeEJZeXEMBPJhV96mg65qcmIyOzrZxspVNq8cU
-SsKHchaePTDHTlr8MpVqclvfMJeaiYAK3yHjmx044RTmwAEQjPLdsQ08qH0iaCMnfp4Zj6nNRDXL
-IAuvNW1u3kZLiRHUGlfTFDl2OfEGIPFydF5v1W2djBxibs4QA9KVH34RCllEhK9RvLnUf305DyIR
-8RG9AKUywSpjZSyigfEKZK25GaVq9zp1y0tvQl1KkNuN+hp4g5GWOwxJpE2OoSpOLsEmdTVW6nrX
-bKcsb2azuyW6P1q8WdFpDIqNIT4j7X68xYwrZEcSawRK8V1cmiqsh9JzsqiDb8Tyy4RcqIphly8u
-sXihAeJchABXZj8R+XhmQDQaZc02RLDRJ2t2to55kIKydxXxrlHiEpnOiibCDVZlM0kQkt2PJAWC
-J13JI3x5s47v/9IhBNcyHWrsMUFH6cvqW90v+R+BBGVZHLwpLp5YO+/UCuMOScw2R3IeGXdHD6Oy
-LFaTvirVTirsbZU4kgEjYgH9WNoIeSaupTVrxP5J5B/w5xt2OPkg8FJbBxpWyNsNsqWEn1H+WOxW
-m1AZgvc4eELTmXi2/XI0EU7AaCabCmhoCfYYLC0qwQ3DIOETH6DkhkiilddPv2FVt5a9hwOPixTT
-ho2rsf8AeWU17caYPFC02PLWuSH4bN/9lQfrx8SLKMQm2n+WNZWJQ8IUg7/EuYs5BnQeh2QWOXmz
-gfuYoz/rLyqP+Gy3xQvCEwW5hUAGpPUkDt7ZIZmMgj9Ghi1e7mtIJUSaBeUnKppXcA070w+MGFJ0
-PKsy7fWEr/qtkDn3ZANTeWpS0TeuKRsW+wehBX+OAagLThoLqtDMDv8Ay0yX5mK0tGj02ab8MRqA
-ghUTTj9lZC5Xc0XtgyaqIZiLd1Zzx2ck0EUl1MgqlvEtS5rQLU4PzkWcIWiYNDe3064uaSGOO4Kx
-fBRZQ8r8mDluShRQ/YwjUxkxOMk7ISC4t2Jp6lVFCDGwJoyiu4HjkvzEO9yPy+y4XUMY5OHFfFT/
-ACnJeNBA0Ujva5dUtfiHFyVBJKqT/wAa5VLUwCnRSiLtbcagLHSpdQt7aa6uElmjFqoC/u53jcPy
-rU0ZPs8P2sh+dg0SxlGr5giNSbWRGrurFQQfDbb7sB1sWHAVT/ENpQD0LkSH9pJYwo+gxN/xLB+d
-ingKmPM0cModlnKBfsmRK8qbdEGOPVWx4SObIdNcSaZZyAUDQoePXj8IoK5mxlaiVouMEttkkojg
-e+w8cTIK3acVik5lR+8f27/25TKYSHmX5h6ZfXnmh5bSEzxfV4B6i/ZqqUpUkZiZaLNjg8t6wwob
-Yp7sVH6ycxqVePKuqU3Ea+7OP4Y8K2uHlO/I+KSJT7Etjsm218qzVo9zGpHWik/rxq+S2u/wyo2N
-wT8kH8ceEraM03ydbXYlrdMnpkLsgPxHtSuR6raNH5d29f8Ae6T6Y1/rk6Fck22fy5gPS/Yf88lP
-/GwwbLbZ/LeH/q4N/wAiR/CTHhtbWn8t46/8dBv+RP8A18wcC21/yrZTut/T/nj/ANfMOy27/lWp
-/wCriPphP8HOOy20fy2cdNRU/wDPI/8ANWOy2xvzF+RUmsXguBraQfu/T4mBmJK77fFl0Z0F4kBb
-/wDOO00CkDXojXcn0H6/8FglK0xlRVh+RF4uw1mBvcwyD9Ryu23xQoXf5KXdtH6jatbt+yirFOWZ
-z9lVUBuVcIXxHQ/kprDQqWv7ZJW3KOJDxPSlVUjJCTWZsZ8yeQrbTVY3OvW13OnS2h9Ulfn8AQff
-kRka8krYLOGaUoz+oEOze2S26OKOa4RhrZW2ohb4cPEWTV/amGxt1Ns8UslXWVgVEieCE7P9GGHP
-dPRFaRfOloUp9k7DuK+OYeox3JolAIie7tLl47e7Zo7csokljXk6LUcmVSVDGnbJ4AQygK5JtqH5
-YatYaHNqpliliRRNGquGZ4GAIfYkBip5cf2czG0m+bD47a6nLPCoMaiv2gKV/wAn9rBQY0sl08C4
-eB2IK9CO+SMwELXshCxFSOO1eu+RGS0HdXgjkBVogxZTUMAdjkJMDsm1rqN/bwtHIpKAmUOwp4ch
-U+NBlXCLZxkh9R8zvc6bHp0SGKNAfXkrXm1S23tUnMjhFcmwy2RPlq6toYbrlKtus4Ssh+KQKm5C
-L/lMBlMiwG6fDR4rgrKkRV7n4kDHkyxgEsWP8zZUYjhZTgDurabPHBpMpZqenyEfEb0bpkcN3ujH
-MR5v/9Mg5HvmQ6yw6pAqMlFBITXQCXeZD/LX8coyFysUgkNsQrb7bU+nJQGzZlFjZF13qN2btlvR
-w+TuR75Fg6oBqdttq7Ypa3O4FcVp1D3BHzFMFhlSm8sKg8pEUjpVgP1nGwvATyeVeYXiGt3pDqUM
-pKsCCCDjYc+GwS71ov5xjxBKJtbO8uQr20EsytXiY0Zq02NKDBxjvZCJTCw0u+FzElxpNzMruFIM
-cqgAnc1A8MrnMdE0Wcx+SdGPxDTiD4M0h/AnKPEkGUQrL5T0tCpXTUDIaq3E/wDNWPiyZbKw8vWX
-2jp0dR3KLXIeLJPCtbSoIyONoq0/liBP/CjCMhPNeFZJBKteNtN/sYW/hTDxFeFTAuh/x53b/KNh
-/HGiUbNFNRp/xzrv/gOP8caK7NKupV/45k3zag/icNLTYGqg/wC8DAe5P8MaVERtqwG1rx+YY48I
-SqBtZ+L9x9PpscaCAXV1mm6MBtUCOn68iQGXCU//AC9tEXXrq41AzQySpFyYt6IJSorXvtTBSOF6
-j6Gj99QNaVP75B+FcgYsSFv1PRv+W/2/3oX+uRMLCKKS+antNP0We7sp3ubiNkpDHKrsQWANAOXQ
-ZOGMdVpIby41YWsktrJI83AmEMVAq3+sKVy7gh3pAQXlc+aZdfTT9ZilmgCwzG4RSV9N5gkgZowF
-+BTu32cxc+MHk2inqVzp3l8J6K+mDQBzHIy7jv8AaOXeBDvaoSkEFqWleXn0q49JfSvUSlu0UpRW
-3HXt9ORngjXNROV8mGtpOsyWchnl4Trd/uq3LsrWhSm/CM/Hz5d/s5rDpZcXNyvHNIa48u6iTOsW
-qenGViFq5E8xDBgZfUqoG6fAmZsdLGt5MPEkiU0i2QKZL+9YgbhEIUfS5yJ0se9Rkl1XPpmnkfFL
-qD0oftqg3+YbB4ARKa59P05jVI7vjTqbhqH7lyQ04YgltLG0T7NvIf8AXklbr92H8uFsqgEKmv1S
-OtDsUbuKd2IyYxVyY7nmjIta1OOFI0YRoihVRFACgdhtlsckggwHRr9K6kx+KeT9X6sl40mNFab2
-5ZqPO5PhyOHjJWioPqlqWo1yCelOXI/ctcqJkkAqbajAdk5OfZH/AIgZGiyWG9Y7rFIfmAPAfze+
-SEVUn1GQ/Zt/+CkjGHgVQe+vD9mOEDxaVif+FRcs8OLC1I3GpMdpLdR7BnP4lMfDAW1j/pJiKXqI
-O4WFR/xJnx4QtovTYdSggkZNSlBmmUtRYAK8HPTgeyZHwha2jVuNVp/x0ZK/6kH/ADRk/DjSgqi3
-Wq0p+kJP+RcH8I8HhhHEvW61UbfX2+mKE/8AMvHgASTTa3mrAn/TD8/Rh/5pGPCEcS79I6v/AMtS
-/wDImP8Aph8EJNtNqWr9rpCfAwr/AApj4IRxuGp6vTeeImveD/m7HwQvE2dX1Uf7shPv6J/6qDHw
-gvEs/S+q92gp/wAYn/6q4+EF4mjrGp7AfVyT29OUf8zTj4IRY71p1jUgautuKV34yAjx6vgOOmQ5
-bPKvPX5t3cpk0604xKrFXERYByNvjYktx/yFOY0om2s2Xl99qV9eSj1XZyTxEaggV8AO5yUcbGyn
-MvknzHa6IdVurb0rfbmh3kVTuGdafCPnkzjISEuiWqNHU8Ptb77ccrVN/NPmCPzJaw3ARrS20W0i
-tILZ39T1HLHk1RQquXRCejEI7uSOav7I6r44Z49t2shHpNBcN8Gx/aU+HfKRCkBVm1PUdQEFveXc
-sscCCOKJ2YqiL0UAbbZYAS2LfqLlQscyoxO1a1/DJcJVVktbVo1Pqeldj+9Q/ZNN6q3f/ZfHkDBj
-SZ6bbWs0YmZFLChcN/MdhQYIQIKCaTJZtniUAcQWCjbp1+7GUS1yKmEMolQOhE8Lo6yGgUEfaHvh
-EUC2HNBGQ8hIVV+z4knpTGi270nVifL63ZNyKRxojcaMSzhSGUUOyk75UbTFYdbktZJBayNHbt8K
-oxJ4oTWgr74BEonMg7ckNc6pJOwEBPALQD3PU5IY6YzAL//U5W35m6R+zbzk+wA/jl3E4v5dRf8A
-NKzA+Cwkb3LU/VjxIOnTzyv+ZVm3qTTJFbtXgI5XYkrseQ2yue7bHFTQ8wQPJfGz4zSQQiWFQSRK
-zfs9MiJEbNvDsl0PnjzPGhE3l8TOTsSsoFPlXJCZtq8Gyhbjzp55lZmh0qOBegUWxan0tXLOJPgB
-CP5q/MVxx9N4h/xXbhf1KcrnIshgCFl1rz7Kvxy3gp/KpX/jXI8RT4AQ8sHmackTPd1pX4mcD9W+
-TXwgl76VrJqDBM57Bg+/0nAnwwFGTS9R5b2ko8f3bH8cV4Wjpl8nxfU5GB7FG/piUh6j5QuIrTy7
-awXDpaS0ctCx4EAtUHfxymTaE4GoafT/AHrjJ8eYyuilcNQsP+WqP/kYP6jIkFNW4ajYdPrkI+cq
-/wBcG68K4ahpvX65EP8AnoP65NjuvS8t5GpHMsn+q1T+FcBNJAKOis72YAxwyMPHi1P1YOJeEo2D
-y1rcoLpaOVoW5NRRt/rUyJmWQgil8qa2SA8aJXf4nUY8ZSMaqnlG/r8c0Kd/iYk/cox4iz8NFR+T
-rg7PdRgjwDN+vbHiK+Grx+To6gG7Z2NBRY9qn6ceIr4aJHk6yjj9WVp3UdxxQ/qw7sOCk2h/LqQi
-MjTLpuZ+Eu9B0rU8abZKIKeJOB+VRSCNxaRPM7gSRNI5AU/tV5fhk+FqlJN9P/LHSIZfWvYIp4o/
-sRR8gG/1+W+PCx4kVYfl/oELubmBHcu7LEtAqxsfhWgFdvnhEV4k2sfKnl+0mD29jEGTcOV5ddqf
-FXJcK8SlbeS9Ct79rtLUM0lf3bnnGhO9VU4RALxIq18v6HBLPJb2kMZnDJMQN2VvtKa/ssR9nDwB
-HEtHl/QgYuOnwcYBSICMAKeh6D+OR4U8STz/AJcaZJderDcSwQs1TbijAbdFY/ZwGCRJq4/L22dY
-mtJmtuIIk5/vS3g2/HI+GniXR/l7YtbcWu5WnrX1lAAI/l4dMfDXibj/AC8thEwku3MpK8HRQoVR
-1BXcNX+bHw0cbrr8vrJmpb3csJIPIt+8rttt8ODw0cSIHkfRGhiUg+onGsyOys9OoNeQC/5OHgQZ
-lKpPy+AEojvVLF624YV+A/aD+/hjwshZSHVvLeraaWM0JkgFP9IjBaPf6K5VuyErSqRHjKq8ZDMa
-KpUivy2wG26MFpFAzMtAn2zQ0X5+ByO7Lw2g4X4gKAdWoD/DDZXw2jKKEBuprQH+GPEUjHuiLbSr
-66bikLFAyhpGFFXl3qTjZbPCCSaxbXZuLSCwRpiNQhileBS4KcjyGy96DJAlBxgI2O0umuWtjp0q
-yqeK1iPxEUrQUrtXvhso4AiJNIvYoBPLZtHGW4/EgDV/1aVyMZFHhBEt5X1BRA00MUcc5ADkoxUM
-K8iBuNt8sJNJGIFSl8uXwDSw2yzwAsFlRR8QStWp9G2Rsp8ALh5d1rjRbRUoSxQtGCKDrSvdW+EY
-2V8EIc2GpKqlrQ1ZuCoIwWJPQ0H7J/mx4ipwgOuNL1S3I9ewZOVeJ9OoNN+qnGy1eBaEo7KrJCDz
-JVBwNSR1FOtcbLIYQWuF18K/V95ByUCImo6Vxsp8AL2troMhaz4q9KMUIX4ulWJ474eMtQwnqpOp
-Fwbf0UM4HL01+I0P+qTjxlmdMFGR0DENEqsP2SGB2BPQ/LBxlj+XbdSkSytBSJmKLJuFJBoaYeMs
-hpkP+7ClzHRQ3EsSaV6YiZSNKqxQyTGiQVYUPD4uZ5V+ytPi2FdslxlTpQGHeevOD6DpjPFEourh
-Clkjk7sSVZmFPh4Dda4DkcfKBHZ4pZaPq2r3HCzhe5nk5MxArvWpJp9nx3yJ3caEZHk9D8oeT77R
-pEk/Q/1zVmUgGSWMLGB1pHxahH87fFgEi2xwnqmHmm11CJAnmqJo4CokjgtruFU4+AjIBdv9ZssE
-i2SgAHnz3PlxtQDWyXC2TAieKqMwUdOJ4/D8srMa3ceSvoXlzT9cW/htLlo75RzgtZePBowaAFhT
-4v8AY5OJrdQgx5B1Y2s90LJpFt5DBNBGSsqSAVqEb7WxH7WS47bY4rSbVbJLSeCW2m9aKSMMG48H
-DL8LpInZ0OGmM8dLY43eBZunNqBvHHk1BUu1MEC8SxuCaOADRV+eG0oRmlLsa1Ldj8WBU0sNXv7R
-Ik4pLDHUhvtHffdv1DFhMWmMVzM5Eh6k1/4Priw4V9vaTSSqASY1kEZY7irU2+RrioSS903VFIkl
-hPCOqrQghR2G2JbRyQVuZeZVgR/MfHIcLFNVt/URYuKgAhgxG5JA2rkJWGJU1tfTekbAMCQQe30n
-BxFD/9Xiq6TaKRxgQfP+mSbN1dbCFfswoD48RhASLX+giISFVaDsAMlQTRV9BuZIb5pRypsAenXt
-kSvC9R0jyz5g1cq2nWE1wpIHNVIQcuhLMAKf8FgYkrtU8t67pN/JYX9pIlzGvqFEBcFO7qwBDKvf
-FizHyf8AlFe63Yw6jeXQtbS5Qm3WMepJsSAXrxCqcbpbpHxfkRemNWk1iFKkiRfTfbfah5eGPEvE
-nmu/klokmkxQ6VL9V1GAqWupnZhKo+3yUfZ36ccFotdp/wCSehHy6La9kZ9Xbkx1CF2ojE7AKTun
-zGNotgmp/k/r+nzSetPGbYNSO6AYq49wK8PpxttgAUNF+WTkj1r8CvXhG1PoqcgZln4QtXf8tdIM
-ivNcySyKoSoVBUDp1DZGyyGNVj/L7y0rAenK5PiwFf8AgVw8ZT4aqnknyxGATZKeVSPUdu33DIym
-e5lGACPk8k6daRRSvo8aRSiqSenzBHuSTxwcZ7k0Fo0u2iDyLp8aRxGjt6KDiT05Hj8ORZUE10vy
-/e3josUXoJIjPHM0ZVGCiu1Bjw2kGITWHyfMZFjmeaQOoYSQxjhv4lj2weGnjiirbyHHH6jT3Hxl
-qQyxkAUPUMCG+L6cmMYajkN7IhvJ9rNaelHygueIKsz8mI/a5AUXCMYZCXeiLTypYpVlilAkUBQ1
-GoVFCa70Bw8IRLLRVodA0q1RoJLcESttI1Cy7b0J6DHhC8fcqWuixWsAS0qpDBmkCB2IqfhapP8A
-wuPCpmrSvpzo8dxE0zkkKjKJG8OQXuBk7YyJTNIuPAJKQqIOScRvt49sDQSVG51GS3RpmUSRqG4o
-hLNsK74sTFWS5mcful9NBt8S8jWtN/iFMVEG2uo1DsSBIgPKXj2XrQYp8NuHUbeWMSUKBhyIYUI8
-KjDaDjK9ryAAcHBZqBdjSp8ceaBArZL22B4nizitFHegqaY0nwypW2pJNM8NAHj/ALxUNaH/ACth
-v8sbROFKtzeOiRmJQQ32ixoAPnjxJhDvUY9TWVOYjIj34lgQTx67H/hceJnwBTn1EkQhgQjk/Z2I
-IGyn78eJfDRUN2jfvCWU90YUp770x4msxKjf6l6ELXMSrIg2bm/AU9tjjaRBREkD0gWQqXYs1CKE
-Deld8SbZeGpSCN76kjPy4EoFNFpWg2G/zbA2AyHRWF3KXERQKmzVpVSFFSBU/wDDYVOMBLbmGa6F
-DJFOqkuXcfZ5CoC8fi5UwN8TSHurfT44ZIpIw0DqgkjkcgSBjTkdj+19n9rFkJFdLZ2UdlHZywJH
-alwqI3whk/yaU/E4OFHHuhLfR9NQRWKW0aRcizLKweSnGoB/twcIbN6tHelaxzqFi5PGhXi45/CN
-xufs748IYX5rESKzLW8aGEyD1OLBjCwdh8I3+18sNLXElwvJrP6rYRWxLyCotpN6AtuAxq3Ju37z
-GmwYoc7TQRFp5OPFLaQUHIEEOv8AebMSflTERDUChJZY51nZ4FuKITGF4yyFV+z/AKvLsmEtgADU
-mnSzzW8stLaMwmMW6gJyLjf4R+1wPf8AaX9nBTAZFFUS4tI3u25xkJ6UTRlDzpRhwR4+dO3LAzlI
-BXhtZLV0jKfWIriiF0HprU/tMTWkY8MVJsIM2Z+uI6SvPFzLCCNuAURfa41IJFcW6Mhwqtw+rkzc
-FCMx9NbfkEHduSEfFz/yuX2cIYRjE7rJL95bJEh2jkYRMyOfiaoDV4lTQfz8saZ+CoxWsqy+nIyp
-HOprBM1ayJ9liNx/wPHIUmRVbmBHjk5W/rSTH0+SyHmEiJp8Y/ZcrXj+zh4Q1Am9kIukafHM0lrZ
-pH6hVJJWCu6+puWbqDTjxw8IbBbY09bi1tYQ4MNGEE68Y/3gBIbiOhk48cHCE8RHRR9C1hrJKSkI
-5i5nlp6lKAh2cdVfl8OAgM+Nhnmnz3DFo08+npH9VeWS0gvKsIXoAaxV9NjwAKs37P2cjxOPmyCn
-h35g3trq2tWctzqsctt6MYuHqWYkLQqsca8VUABa5Ei93UTnxmyq+X/zUuPLw1MWPpSG9WGFAYj6
-cUUIKqoB378jXCBTfi1Bh0CLt9Z/MzzZLc3GhzNJMfiuRYgRvuKLXiKgDAJtvi5JdIsf81eQfPWm
-0vPMltd7hf37v64XkKgMwNV98ZZCWvJCQFlK4LfypDFFJHFfPe8WEhEkfp8+gKrw5Ur/ADHIymSK
-cU2q+XY7y3vxLayTxCYiO5+qgNP6ZNTxVtuuR8QkcKYEMx1TWfL2k3sM2i6zqd6wVJLpbor+8ZFA
-HwlSDRdv9jluONOZGYAthHmnzHZa7eQTw2ENnMFKSvGBylYtXm1Nq5bbTky2l9tbzswjkYlENFUd
-AK5CZce06kiDWLTOi/V4DxO2wPiWOQsotjFxdxGSluvppXct1/DL6W2aaF5Ve9003rSq1mP3bsqE
-gch9po1pJxH8ycv9XGltjd3Zz6VfyQLew3kKkcZbdy6U7D4grD5MMaVN9G1JkEyvFztrkCOZ+NeJ
-U1BH+V/LkV4U1846hYW+mwaVZRxiSNGjulRSGVwAwbmT8WSI2tLAEhkSRjy3UBjU9vpyHEtMj0w2
-5uxZz3EU3ARuk6k0oeq7gDbnjzQYqVm0MeoqJJUaOP7Rb41oPGnfDSOB/9boui/kL5QtPK8mm6sF
-m1adCZNS3V4i32fRG6fD+1yyTb4iU3H/ADjZo0IBivLq6UCjfYQ8gB4DElshMFUsP+cedAaSMXtt
-J9VrWSUz8mHsVGDiRPJTJ9P/ACS/LTTrszQ6cJ5ECvEsjswY4WrjtnkEcsSBqLHEgpHbjogHTZPh
-2xaiVsd3HPcu6GBii8Vdq1IPWh/l9sVtXt0AtWCKB3CKKIO+2ApBWXNut4saSTFARXgtN/vwJb9J
-xb+kWUSqKB6UBHc1xVUiSzSWiU50p1JNPfFVV0jkRkaNXXoykbH5gjFbpJZ/KGhzEn0jAzNtwcgD
-5DGmwZqdN5b0VpPSe2ic9VVSyNT6NseFPjN23l2wsneS2jjibpFIauRXxrjwsjnRa2ViYx9Y4tSv
-JWVQCev2SNsB2YSzIaHWLV19Ew+oK8RElGqB4DBxMPERLi2uIXje1Ko4AZX4qSB0274KT4irYxAR
-ipdEiWnpNQbHcbjCAjjtWQwzLJwPMfZKnwOHhWylk+n3CepDbIIbVTVVU/ESVrVa1HX+bA3wnQQV
-3GbeW3uJXa3JHpRq/F+ZbseI+E4t8Z3sjC/o26pHMGcty4/EAtN33Xfpv8WLjzgbaSe8uCPXj9NJ
-CwVQvIBQTQsT/Ou6/wAuLOIpc0vEp6bFuJ4twXt2PEdaYppd9XgWjQU+sPXjJxNQD16YsRktDtFq
-CFAJ41gbkJZJQxIPRAAT+1iykQVWa4jSD0+AmZBxloDvXYkHpQftYseFa7/GFRlMRIeSVXABbagN
-K/arikDZ15KFRwOEipWrFt4z9o8qH2xZRG6WwzXbTFpVjFuSql0VmZ5W6oa8PT6p2bFtkQmCFo5l
-Jf8AdSM0ZSSiiMgCoBoK74Q1GQRHooSOJUek3IcGG5IpRickjiQtlOssfKQ8JCWeO2rU7Eiu6g9M
-gyywXeqwBi5+mKU4SNyNWFQSR9kCnf7WKBDZTGpxlRJExn4nhIY6PQrTfc0p/wANinwlktzJcuyw
-cooWBWMyjiS3L7QQ/Ew3/wBXFRFZ9ekZYGeVXdAI7lyvCjru394Q3Fv2cWyONc168wadysUCq6pJ
-IdiCRSmwGKDjpbdxo1tLDGrW/P8Au0jUHowaorT/ACsViGiXQwT3EYeaMPykiJoiv0QqPibamLLZ
-E2xjDenDwYK7lmeo41AIWnWmLVkWTCcTMlosSzMBwckhXBNWFB/L2xZjkoM0of0EjqZF6y8qUR60
-JA+0G5f7HFNLLi/imnLtWb0wURAf3Jb/ACQ32nxZww7WgjBO0sd6bOO0UlY3nkZ/VCim3EBhRl8W
-xZmX8KJbUreVGSSUxwl6qrLwccWHBaUUsrdaU+LFh4RahW7azkvVT175YhRWchOJJKiNW2Vtq/F9
-nFjIUaVpdQRGjgiUxzyoQvR/TFd2IanJiQeP+rikYiUOrD1o7M3LcyCqEBhIeY4kyiMcFowquKSK
-VI5LMRv6Ygjg9Tb0H+KVlcq3QcqoR/rYsOaGfVoY7sS2/OeVlRYUdGPBWfg/blvy3qMW04Nl/wCk
-PQvF0y4vPrN3woEKBRyYghQa/AQoIwFr8CxaH1plme2P1hxFD/fxREgyFT9gHwwORjjQKvKIillc
-XEQkMTCaF0G4LcvgZqHZR8L4tBFlcTHqctvJarwa3KSesQfSKg0+E0AdihwhJice3ex260q2aSZm
-mafSHDTW4D0dHr8ZUgAMFP7GFzsWagjX1JmeFrizPpKwVWBCElF2DqfiCN7fFkWuUVkkk8Olx2cP
-qpOq8Si8lIklcMVYkbrG8p7/AGft/FgJYwAu0nv3u7K2MVrIl1MiiK7hSRuTyncHio+L46CifF8W
-C3JgQpeafNljokNquovbBEl4pYREmRkFQH+E8q75AyaMsgLeL/mB+Y/mDzHO1pZMdO0daLHZQAks
-AKBpGehb5f7rwcTrJ6izTBZ9P1zU5YYZJ7i7dfhtomZpONeoRCaLXvi40pEmkZdflxc2Fm13fzW9
-oqNwaFpayqOINSAu6/7LCFlDhSmxbSbeVhDZHVJyfThHxeiCehKr8TYWLMvKHkrzkbldZsTNZVen
-K1YwJ8J+JY96Ten+2q8srcnDCZLJfMmmWDM2oahrja7eq/H9HX0ckMUjk0NY0ZZFp/lDEB2Q05I3
-SjX4bHWZBoun6JbaPq9szO+rMTbqqBfhQpVk4t8XxSfy4eFxMuGnm1z5jvbWSe3snEUdBDOwIlEj
-KSPUDEClckIOunj3KVG5kl4c2JKGtBsD88kECwiNLeGTUXkli5jiWEa7cWP2cmxlJM7siyCrKOM5
-3ZaU3O4wUxBSae8uZiRK7BCaLFX4SfGmDhShAQstQOQG5xtWY23mW2i8sS6fbzGO7KclJLVoTXiD
-QjphiVY5Ym2eNEnfjLJJ/ek/DwIHgPHJqmMt3pul3Rt0uPr1srpJI1uSEYjcKpbeoyPVkEpvdVmv
-J5XkNTK1a9+lMmeSVRLOZ7WS6duMcLIhJ7k5QqjKwSUmAkQmojR/tVoCT9+TCrY2YAMBRE6cdjir
-/9f0xBe2U0yxpcRSyRg1VCGP3jDbGlsxMErzIVYxgmZWrzpTtiSkBtPqzJ6hUpHcgNViV+LpQ4Er
-po1gtgI19QptGWpsD1+InfFVh1CLmlu4PrOvNRHuAPcrtirobe2S5Msa8blh+9SpFQe+KrxBco8l
-HH1RwfgbqtR2wWqlaBFf0+ZfifgDFNxjxKuublZUkQxMzI1FVjxqfDCrp7idFhM0TKrUBaI/ZJ2A
-riqo8zR+mrg+oT8Kr0+TYqtnux8JRDyP2hXw/ZxVfDOs/J5IqU+FGI6/TgKoQyQC8ltpEAC8SJKk
-dRXAqCufqlzdH0ndHQ0EVAQ232d8VREdnztAXtFikgLNGoNeZ+a74quuUZrRJYFPxnjNE5bkPGhO
-4w8THhUbPUIXdoIJBHKrensC7MRt8WJKQEXBEYTICGJcgySBwp5DsFPbAlUtze1Z7hnRRUxovEkr
-70yQVDXuoWEUNLkseZU8a1IOKRLh3VbW7hmH1i2KrCCVdm+2xA6DFlZkhNRmvZbdlhSNA/8Adty4
-t16k/wAMBYCVLIIkDRKxSSfiQHU0VT3H2f2sDkRzLoLbVFiZHiKENSGNZAQgP8rHrTFnxY1Gezui
-xt7qQSI8jPbsVNOIAor1DfHUHf7OLKGSI5Io2LyzqFuJUlorrGaGPgNmTjTi2LSZ0Usg0FPUvFis
-o4UY+otqJapI5pyZ0G1dvh+Jf2cBDcdQeEIu90lDMskFrBO8zp9cklpy4qD9mo49adMADGOe1WSH
-UJBblCsSK4MkS8alQeinoBkmXEFVYPRi5MHRgfh6SHjXkaha+OLEzsoKlu3JbdPTtCWeSWhHCRdx
-RGAJY4tgkpAXzGOO+jSJWLFGSXi+wIqF/Z513QYs4kLbuS1hS1sI7Oa6mU+oZWpRQCVbnI33cSOL
-4tcfqKIsyzm5j2iSNhWJQENSKFyRt8R/kxSBRateUdraxuzS2tXR5Q5Yt9rirD+8rU/s4tczciVK
-UWgjlmWT1oLivpuELqixjfmW3FMW2BKWpHY3mqWaQXZj+pupcScQzAqfgReIPxVxb5SmIo3Vi8MM
-fpsEWdvTkkkITjWlEUDu37X+ri1YzKR3XyC8aaQxXKCFY+IRlZiJgVoxAYc0NPs/axXINlJrqC1j
-it5JYDcGnqyLxi3cgFli3YEFh9psFqPEKvdTJa8xDcgzSfurVeIPavEqK7ijfFjbCIJPqW3UF2VV
-mLTOis/GOu8nRR8JA7nvhbRwqUn1iFIY41aJQoIcqzSKFYseVSftUOKYiBJKnE+pxaZcpGr+tyZ0
-Ez1pyap3TZl/33XFJjASBahF7p4AvWmuuRaOOOKMcwKBxyaoFD8S7fDipF7hUsJ5o4Pq8lpKYmj+
-JXj2Ymp4A8v2KYoyRjI31bvLzSogDLITcQN8MRUcQQPsntQYpjizS+jkgoJ9JQw8iskNwnGtrHwV
-6P8AuwOX82RZSswRtw9rHcLHHbm3kmVfTiKkkEEPTbYbhcIYY48UK7kFI84ZbqCBJregjkk5GHlN
-XioU0Pwofb7TYWYNbKSy3jW0jNH9Tl9ORgW4O44br+8pi2jmt02exh08W6enc3SBVugsgRiX3fkr
-jZ6D9nEteSFlWu57W6kjFpcvFGxQRW8IVQN+TEsdjyXxyKIjhUpraO5veUL0AU+mGaURqhqGL8Sq
-O3+TXFujkNJfHcWNrZPb6bApuEIZreFGdgVYV3kdli5/sivDFPBaYPpk07/W43PqoGYoSecYNSCy
-szc2p9mixx5JhHLSXw6ZrUc7TXGpPcxQs7y2yojNKJDVFR69gfjB+H+XEszMUkfmLUNYjE40HQrf
-1WjWX62QI2iVlryCfY5ld6jKZNUjl/gYBo/5YeY9XMk9I7aKnqzXMp+JvUPL4QuzVrjWzhZcEpG5
-fV/Eg9a8kadoU1tb6jcHUNTuQHg0uwJEpD7xs8jjgAV+2RlfCzx4q2a1C3NiV4W9ppk7jl9XIlIh
-oDT4jSWeZ6fEx9NOX2E45YBTXk22V9P8i3HmmCO/1i5aW1mfjBp9oDHAvppUvPTkwb4u/wAXLGW7
-LDphIepknln8uNAtFfVLjTYLeARNHBZzOzKXRWAeXkRKWLLz/dccHC5Q0ONjv+HPzDVJdQ0G1uNI
-8vyhxdWiSKvrF2Kymyt5uZQqnxc5W9WTJcK5IAFEaUvlyK3tLr67Y6ZeSMDZ6w8qtcq7VjKXcMr+
-qrU+0eKry48eP2sIiy8UQFsi8x+SrXzho93p9r5gs7S5UNNPcQRJdGWNVZq/WEkBlgJRXoY+cbcu
-eHhdfn1HE+UpYVjuiAQ6KSRStDTYUrhcO7V9T06ewmVJftsisQOgB7D/AFcCppZXEdle6RqNxamL
-T1CiQkbz+kSzKP8AJ5cVbFUn1bW7vU9QuLu5/vrmV5mA6Dma8R7DJK5XWXisg4jiQp718crKr4Rb
-kSqw2pRX8T74xVBq7RScQqmoI3365YVZLpb6PDpKyzQLc3s7SKsBX4Ej6Ak/zVrkWsqQ023ks/WS
-MAI6qw9mO+FIWajpSwqrJGAHFRTrT2wJSy4uriO0FqT8DN6h/mbYipxZIRSeI5bgbAeGKoyaRVtY
-7ZKyTsS702p/KK/5OQIQ/wD/0BWl/nfeWUhc6RA4YUYJJIlf15SJ22Uny/8AORxkV45tCUqy8KrO
-a0HzXxyXFSDFEwf85E6NwjS60Od+NOREqGp6dwMPGEcKKn/5yA8sXCKp0+9gCmqoDGVHuPix4wvC
-mMH/ADkH5Noiypdg0oztCrH6OLY8YXhRMX56/l884lklmiIAVZDA4IHetCceMLwpPH+celyX1xEN
-aVbFuYhdkflRvs1FO2RMrXhU/wDHfl6VRx16ETAUD/ElPwyNrwso0z8wNGfTgsmu6fLOhojvIBIB
-4b5bxIpMbPzlYztKj6tZSIQeIEyfxx4lpFJ5hgpAUvLeRh/eBZUaqjavXrjxLSKmvdLkKNE4ckVV
-lcfC3jxB3w2tKVpJdQRu1w7hZPiVqh0b2p+z9GK0ua0ineOZw1pKwqUNeLU2Bqf1YKWlT6vpUaOz
-SrcXXVm5UofbFIi0t5GttP6DSepAhZGYbMT8zgteFJIdVk0+9jmmlJif43VVaWnMf5NcgGyOMlM7
-W/0C4Vr6zZbO7Ycnk4shIJ35hgCFZhkwGuYpKvMGr2Iulura4Dsq1lofhcDYlK/a4nCxCMs/OGjS
-xI8ruo2pIh+y1PCuDiVb5j+uz2Us/pRyQL+8aRWTnwQbGgP2slbKEbNMT8katE2vahJd30ttYWzA
-WkFTxkaQEM52PQBhg4nNnECOwZ5c3ZWzeb1rfUIIxy9MgB1jH7QodzjbgRPek8/m/T9PjS7ktxGO
-SiOJBR2Dd6knImTlQ05lyTiHzHM1yIdQt1s4XQvHL6nI1BChWoPhYlumSa5acBH3F2IrtYW2V0bg
-p3BKjkxp32GAsPC7ks1G61S3ALRGOxCkySxV5En7KhOor/wv7WNt+Mxlt1b07XdMjg+tyHiwojMG
-HU+IyQLLJgPJMUliKfW2nDhwp9NQGAr8sSXFArZRlktY7lp2nMjFCAAwBXvuu2+BnEEpbca2YUNp
-aMZbpyOMrxO3pq4+0So9sW8aeSx/MVtGixxxS3rR7yzsPTjVqfs88WyOE96XrDa6o016qXH1q1Zp
-G9OUsCVHLiuxHxU4/Di3GPB1RkUzT27fVLF3u4NzG6SRMRw2BeQry/ZXkf8AKxaBQN21Yz66ri/v
-rUq7yhWijZfUAJoByBZSi/7HFnkAqgmUlzOlzI8NpFIJKBWEsaORX4uRAP0ccIDihDytHaSXk+o2
-yQWyLy9T1KpQj468RsT/AKuNNoltYSTUNOjjnmv7i1bieBa79UlQsakKVQLzAQHrT7S4HOw5idnW
-ttYXFt+j40+vxE1iq9XWqjm2/L7P2925fFiyyUDZ2Rdhay2UCpbCakdXlllHN2I6Lt0+jFrmQeqA
-1DypE+pxyQXSW9ywPpk7mQbs/qq3cFtmyHC2YNZQ3iURPZ6tZW62lpcMj7u1wIeal6E09X9keOEC
-mIyQnK5KU1xqCaZd3c6kWoVGjQF4h6nSQlqcwu1VLDDbIRxyIAVBq95JpUE8yenHIGS3MzlJN1Ze
-p6nf4Tja/l4cRAULS/mlupodRSZYd5UjWMsHVgnXgT9gqOK4bRkwAck0e3uZY44oQUtZHr60jnmp
-BrVaVZfhr1ZcWsziPepB/Xktbb6w7pHyFxGjhfXCgrVw1JerdsWIhYtL/MemW96v1yVp0MAIMUKh
-SwX4VEZ/m6sU+NuOLk6TU5MZoUsm+tterPaIr2DxpcW8Kjgyt+wnBgOHILXBTZilAw4UXDHNrILX
-FoVtXH7ySQssvrKyVCrUFgpH2/hwgONKcYbIqSK/WxWC3u2+sKd57ihYIGJcAEKvQJxwox0DZ5JR
-Yw6y0HrXaRKOJLXiSkDkppSgA5V6/ayNuUc8CaATbSlt4neCKFIgqtI3JVZpWNAzuVpx+1jbhZbM
-mgkS6lGIoIZv3f2lPFRxCguNvidiAv8AL/lYFie8oAiWZLmUArHbrymhVm2boA6UHX/J+1jTkjJE
-bU7/AEOxtBcCVo9wJuDs0bFjRFAFCWB+yuGlIJ5LzJKYWkoxd2VV+KhKcjUKEPIcRQJ/w2No8Kmx
-CLV2vpZJtgqN6iloleu/wUZU/wAp8WEgDsturW3lWOS6t4HedlVClDWJBSvQLtSv+rkTC1hmnHaK
-AurzTbLS7ix0lGug0laspjgaeagpIx4/utuqZLkKWQkfXLnJhUMy2lzJe6bMsjU9O41kxhmDHYxW
-UbV4rwpErnIgbuBky7rdM0Cy1i+k1LzI0kVrechbRzGUCqDjV5U4ts3E7jjiY2mGIn1EoFtN8g+X
-pLm4MsOk3PwiGXS57maZ2DVLERsPhbvyxjCnKOqxAcpMO1T819Xg1kTac1zqlvbs6wjUY0RFVxuw
-WMq/qbugZm/u2wEgOPPWQ6CTtb/PTztctbvpsMOn+ivEEAzMan7Ks+yqP2duWHiDiZNQZcnmGoat
-qsY1GOeV3/SlWv0cbsxblyHLcH/KXjkhINPHI80pstTv7N1msryS2nHIB0Yoy8xRhsacWBoy8fiX
-JcQSCEx8r2+ntrUL6k6mxjJkmqaggdjkCgq13e2mr61PqF6fT0+3BMFuaBmSoogBI+nFUo17VY72
-9aSBfRs1JFta1LLEppVVJ7EjDSpdxrRqg4qqKRSjNuOlemRMVVZUDBWUmhFQexOIiq/TrKbUdTt7
-CMVluHWOMdKsTsK5IoZJNp8NgrW1A10hKzb7LQ0IHvkWJRGnpG+kaiWNHUwMpHuzA4aUIWS64KI5
-09WFd2StKe4ONJCRXaxq7sp5VNUJ3NO1cDJBV5EknjXqe2KoiWSJlRIEpwrzmr8TE5ExQ//R52B7
-5ixbnbg5YeSuqfHIquPxDffFWivHp/DFXCh7Cvjiq7574q6vzp4VOKtlia17mpyPCV4XKd64jZeF
-eHIpTalaU265LiXhVBd3a/ZmkX5Mw/UciSV4Vdda1hacb64FBQUlfb8cG68KMi80+Y46MuqXQI6H
-1n/rjuvCiE88+bEJI1a4JPcvXJArSMT80PPiqF/SsrqOzKhqPpGPEqJg/Nrz1CySC+RmQgqWhjPT
-6MEZJMqVX/NjzDdXZub5ILh2pzX0+HKngVy3iYTFhNrT82iii1h0KxJmqDM4dnAIJO3IdTg4ljFL
-PNnnLVJkgjhW3t7YRq3GzgWCjHs1Kmv04OrYIKmneb9aubMNcSbXQPFgPiYdCQAaZYpjW6JnlvfX
-guxeo8Hp+nIiBhIjScqB1IGyn9rIudhojdH6Lq1xDbND9bWQw/uXkJ4sxP2qcuNV3yQac8YiQpXl
-stbi1ix9e0dgWP1fm49JwRy3dqLXj9lf5srk345gPRNLmtpVmN2fVlsQ08FWoPUQHr/N1/ayx1nE
-Ss/S8usJLMI7OS6iFIGuS1VqTQArTj9mtcS24xXNbfXd1a1mknjlKjlJGjk1YglhxI6dv9XIs8MO
-KWySab5ubU7o26rAgunIKOgpEqKPhodj7Y8TuJ6WoAsitLvTbfV4dNhozmItxjc15jbgP9UdXwg7
-uvlguJKM1W4SG0Mdu8foR1a7kQmS4Ap9qhXdQft8f2ck044bpCmoaMqLdxy3M9yzNxt4y0SM0XUM
-WLcqV4/D8LZEmnOOKRNK9l5smeE20gSS5b94bZwHAj7KK7F/8nBxNOo0khuGQ6RcWD2aSpELQKdv
-gMQb2IYZNwMk5SWXPmjS7UziSVDKriKdUUfCDSnJdvh3+1izx6PJPkhfrul6pbC9tZhHOS4hYF0A
-4sR8QQgfLbFsEJQ2KA1Xzroel2piZP0hqajkyED04z48yvT/AILBxMoaKUzxdE302ew1bSoblrd5
-Le7B9SNwxQ9zUeG3w42wyQMDSpPFLGRNNN6MUjLHGxUyOVY/tB+KoN9/3bYWPEei29iultSujhZ2
-ZuV0UAB32oh+EUGKYm/qRK/pGC0iSdQpRQeEb/Hy7nam+LRLHfIsX1LSJba/NzZXD8yrG7gn/eek
-zGolZ6rwH+QeXP8AZyqi7TBquPYim9P1HVNPFbuJrlpBVZRKI0VQQOZiJ+wftciMIBC5cEDuCqT+
-Z7yaSi+nIoICSRl5UNetQAe2SYfkuoKneapdXGpwxix9X1FEbzhjxi7/ABKwXj8IxcjHjIijNM1/
-T7ctBE0TJbVAijUKQzfCK7lmr25DENGXTyJRUOuztPHE1ssAjNQGZFWQ0NOO45e/w5JqloutrL/W
-WEsEcltJM9wawnh8CBgT8TlF+yUNfixYw08hsEGms6Pd3UwtKz+jNweRlLhpShIiQKGPLhVm/ZRc
-W7glDmlI8wPcXQigsLye42jnkWixVk2XmQePBOR4n/glxcgYIjqm8mqz2emNJbQxTLExidYkIdkF
-AnpGoDkMv7w4CWmOGMpVaSL5iubl5WTTZWZyvquR8ZqeJ5ItSOmR4nN/LwA5o19d1G4VdPRI0dSx
-LTEqABQqACP14bafCEdwp/ppIYUtiVub+Qu3BedqxUdP7xVJxQYWLKL1rzE9rZyO0hjCtGimKP1G
-AoCygrxH26L/AC4tMMcCUmh8x3y6oytpiRC6AEluWDXcoUkiqKeS/a7rhDk5YRjGwWRymOoisoJA
-I1NaBQBtXZXFfVFftYXUnUElimsahpSpHdw3U/1ucNbW8nIemjv1+EAJHJxrTIudjEkqu7v6tC8F
-vfXTXdVjM5YtJEVHw83LBStD0pgtzIxDotX8yJbTRXWretG0hjgdnBdAoIPxIdq16Y8TCIjbEfMe
-pan5k1zR/Lgu/Xt51eGkTMjiVV+GSSQfGwUCuzccgZOJrpEDZrzf+Yek2Mi6PoLKxseEDalCAFIi
-+FxF/Lyb9r7WIk6iMSQSxKXzFfaxcEPfSCGhZ4kkMTMB/NI1f+FyXEzGQgUoTJ9YcRWsRCivGGEt
-x6bmSQks7e/LHia7pj+o3Ea3y2cBWR1FZnUfAo8MNWyEbVobaO6n/eDkoP2R8I/CmNLwpT5vuoll
-SyQVnb4mc7kKOm+NMSGJytHKxK1p4/hhQmwnsrS3so41EzyKXu+XxAVP2aYFQGpcFumELco2AJp8
-PXtTFUNIAy7rTwx4lUgrjrQDJAquChu4+eFWR6zBHBp1jGnAN6KSVXurgU+mvLFUnt7r0LiCVDwl
-jlVg42IoeowFBT68irdSCBjcRbOZRX4uW7N9+RYojS5eWl6kpHxt6VK+Ak2/XkgqnqFl/o0TxnZ0
-+Cu5DD7S/wDNOJSxq6cvMzceAAC08ePfIslA0r0xVcjMEYg/Rir/AP/S5P8ApDVk+1axt/quf45X
-4Rbl66ne9W09j7q4P68PARzQW/0yB9u0mX5KD+rBwsbd+nrIfbWVPZo2/hgOMra865pr/wC7uB/y
-kYfhgOMpBVE1XTj/AMfEdfmB+vI0WSsLy2darMlK9mUnGiq/kr/YcU7HGiqqFBNMFlbXGMjpjuea
-21Qjrh4VtrI7rbsd02uFT16Y8abdQY80Et40h1fHBSCL5ou2tJ50CwjlIfsqOpyQSCBzVdPkks54
-5bmNTEr+m8Tn4gaGuFYCymtxaTap6NlayKkjhRxbqITuXP8Aq5IBtlIxNUz2HyxYeSLG0vbe4N1e
-swazs04ll+GsjMp6UyTlY4jIOGt0y0/zxNr8rkaBHqMrr6b3htSzPGOql0FRTC0Twyh/Eq6J5Z0D
-R7W71m0kAl+O6gsbyHlHbxncxqGr8Xuy8sLRlJvnaeaBqmteYbC4vUK+kfgtlnVuLMtCpWMCiqP9
-+LgpgJFg9vd6pcS6g2pXA01IXFrDblebS3MjU2K/sdshu7CGmil1neaxY6sdIumltpZCViIDlHHK
-rsjBfj4/5OA25X5eFPXtOTStK8r+tcWy6g4UmaalWdCac29T4xQHJxLrcYMp1D0vPL248uiGa9tL
-OKzMhLQRwKzMACQtTyIXlkJc3oIxycIEjaC1O7v57rT/ANFR3JueQEqpEzEJ0JJHP4D/AK2BNQAo
-8kwlufNGm3CRyxL9ZVZJY7aIfG0aCpLNXhy/yGx4i0+DA7gNXWqXLyxvJGlrKqLxiNOaPMpZTxXl
-vvy+H7f2ciSW/DwjmmPlryxe2+pJd6kyrbpJzeQSAyvx3B9M/GnJvgocsAcXXavag9D+pi/ZxFqE
-7Q8SXUhGNT04kjbJOgiSDs8q862t3ZalNbqJJGlAeO5dKBvEchUFtviyGQno9RoMwA3RPko3mm3C
-2V5E6+rGJRGyvJzQluZj4KzAgFf8nDC+ria8wlyVdb0C21a2l1GC8lghhRgZRDI4UpsQzsFUD/VD
-NglzY6XWcMBDqGQ6DrGmjT7GBTO1vCg43DEr8Mf7XBSQV/kyV7NWowmVyUNdu0uvSn0gy3hWTkjy
-UJCv9oqW+Ko64LKMGnsbhBXXnaZZl0m2os8bKiw1CnkdgzkmlTjZTl0Q5qrW/ntGiYwBJJyeU3qB
-1jB/38Vqy/6y47tOOOOPMWyC2sL0yRG+kWRYVZygUtG+6qpkZqF2Q8vSQ5ZbXlnEcm7+9tLO3mvZ
-JY5IaF7qWWMPMwXooWnxKowEtMYGZ9PNi0V5a3l9DNo0C/UZo2knljYpAKnbi5B4uP5MjbuoQMY7
-oqS4tIfUmkcagq0h9P1TRGNSGYrTl8YC74UEmhWzVw2nwWKSW/1a2uuaSXk0QDshfqCa17/tYDyY
-xhkntaEn1iGSyeKwJW7VGImnozyAE/EN/hZvA5DiLkY9OY/Vugba11W5nisxcPdavOzyXLCQrFGz
-faqQQFSJaKf8rJxLLLkx44EgcKY3+prYI9oUuJytI5leqSTPIAFeNV/Ycn0/h/Zw24IlxxsprdSa
-jeRJY2dvb6ZAG/e2zSAysFUFwRGKcv2XLNhLRj80gh1TzBeidk9K0VLhRG1xLGttbwxAqERQS3Mg
-8myF25JwxiLA3R91JfQ2rtp2op+9VJbu5UrGkjAj4I1AM/xD/Y4dmEQL9QUNOP128gW7llUohllt
-zVpG5DrQ7t/kY25M5R4aAR+myWdhqET6qyTI3qLZPKObRDwqftnG3X5+MxIBdrWvafPEZrUss0NX
-DtxRSB9r4R4jFw8OKQO6J8o3NgdNe/ZFhmEjxRTFgebx1avpAApUmm/2vtZIN2rlKJAB2pE3Wp2y
-6XGUlVrmNecxVeI+I1Kg+O+FwRs8l80afdyQ3D2V8kKahOXMUpHphKDdQPi5/wCtlZdrj1I6scW0
-1u0u3kj1OCVx8LIGIQnanInwys25M9TAjZUmtfOktj6kFlD9SDnlcRyOwZ3O5qR45KLjnOAxmKDz
-Rpt3Nd8nSf05IleJfseoOJIPy2wHm4uoymQY5MupsywW8LyzOaCMIAS3QGv8uAOEJECmQeXvKRto
-5bzWZ4omJJCu4AIUVbiP2m/ZVckw3V9Z80SmyFjo/wDodqU4zTBFEjhtuNd6DjhFMgL5sagtYrZC
-qLVz1J65dEhmAiNNkpccetR0wcTHdIvOCwxXRkqfrU9CxP7KDagwHdBBQ3lvyTrOvxTvaBYYIlJE
-0mys46ID4nI0UUl97p7QOsIPC4UVmBNQrA0IBw9EEIGR3aiSLSUbfNR3yKEVZ2bXACxoXZ/gjp3Y
-7AnDS8QRHmHT7bS9RmsopRP6VA7gUAcirKP9XCGQ3SgBT8QHXJJpHz6lLcWNtbslGtEKGXuyM5K/
-dU5EIpAbleu9clJNM+8r3f12ygtLS3Bv56WjPWv7xmPFh7MpGRa5IfVbOXT7m8tEkUtEypM3bkp3
-+5sEuTDdW03V7GC3la9+MQqZY4/5pOJUU/yW5csMdwkc2DHm0nL7TNuVPcmtSMWxeIiUDHp4+OBU
-z8teXb/Xr2SzslUmNPVlZzRVRWAZz/krX4sKv//T5agUbV3yXE3KlK/51xu0FYwP+e2FjTjHVRkC
-ShdwB7/fiCkLDBCSQUU/MYaDNZ9Rsid4E37kY0EWs/Rdj/vkD/VrjQW2xpsCn4GkX3DtXBQSu+pz
-D7N1OB2o9f14CEOWDUOQIvZKdPiCnI0tpvYaZqUhq9wJAexQD9WDhW2R2mgzEAsyN7lN8HCgyCKX
-QJP5FP0kfhh8IMeJttANP7hfmCK/jjwUyEkLPoD8v7lqUpUEH8KjHhTYSufTJFYKsMxZiFUAV3O2
-V8BRxBTaaXSboJLHJyX+8R1IB7FTToR2/lxAKRRTTXby3u7e2vbLUI7qGdljdJEImhlQVAkUj4tv
-92/tY0mBooZ/Muoc45+Ec0lmCiBRx4hvtUYdeWSBdnDIDEbbpvbaqxhLyW5ZLheLspblQmmzdskG
-2OYAVyLP/L2s2nl7RYGUkRts0UTMDHyPgRTC4GfDOR2R7+edH1a/ltUDSynh67EV+FOxNP2ujY24
-/wCXnHmEzfzlNJdiW2do/TT01CKCFXpTqOmNtZiQjhJpl5qdnrl3+91OyR44JeFB+97uo6uv7Dfs
-YeFQT3phqYsrue0l1SRZLS2/fRoGCn1acaMPtceDN8P7WNNuGU723SPzH+ltStzb6VcQ+hNWOGN5
-AiqKj7xT9nK5OZiiMZ4uqVp+XGpWkUXoX1vdpFzF1yf0vtEuqqW22fAIlyP5Qs7rJ7LXqL6t19SS
-SEIlvApZy4JoZvT+HCYlvhkjNjepay3+KLSyQSW9zbwypfetFI8RjYDZenqV/Zbl9lshwl2FxjHm
-yT9HanpsZuNTtrdImUIblPjrCo+BHLboy1748JdbHPGR5plpVtb6bYzwPKrz37iRnkdHmWAAGOqj
-4ggP82WAODrBx/Tuof4qvre4mgtlaS2UIB6aHnyY8QWPzxZ4cAKnJqF3qtjdRxJM88PFnQwuQKsO
-pA7rkgLc2VYxvszPSYWs7i4udR4I0qRw2r24K0t491Pxb1NaccLpsuUk7Mf8xS6k0syahqbJpcVP
-q1vbqF9UEFx6rNsr8vhyJDkaWA5nmxUX+r6QzOlg0lIhyjlAkjMlAI4nI25/TldG3byMSKPJMLJ9
-Q1PUZIJ9Me2hWNJo+CiI+qT8aEK1GRf8rDRYHNCI2KZPZaNYB3a09DUGiEZkuhE3+jpISPhNVrXl
-x/a4ZOIaI5ZzNgelA6frml87h7S5FutzII2tlIChASeaKdgZP2sOzkT0ciLplBS5s7aSaOV5plKy
-mDoFRTQqpHxAj/LwumkAULqN9ZGForaN5JZpK3USMGRa7MhlC/DUHlIFyEz3OVpsdF57J6GkjTg0
-9xBpf99b+nzRVjUneXmBydyN+OV7u4jOMxQ5oyz13SDdenMtrcG/uIU/0b4VcGQNHz715FFk45IS
-HJry4ZRjyZFrmjJJAyXV4srNyuJFjBUMQDxWu/7VMJ5NOLLKJ5MfGljRbYyqZL1WQPIzcP3K7EEA
-VKhvi+InK6csZuPmmmgzJKp1GARQ20Kz+pQqpczUCgkf3hJGTiacLXRjVA7lVvteWIW/1toZLJXV
-SWUF4XJoZFOHiDTg08+HYI6985aRJEsdhIqWsScEQfsqOlab5KRRiwTHMMav3s7e5k1ZmMpmjWVY
-HoVQ9A5HX4sqkXMhvswW68y69pd5I0c5uJSrzzoqj0o46gqyH9npkeJyxhgQirfzh5g1O2nvlMsU
-IX4rsKfsntUAfDh3QcMAObJ/K8l95vEU2qXH1bSNPkpJJCKSXUoHIop/ZRR1yUbt1epkIg0yTWtP
-8mpAB9Q5PIakerKPhr8P2X/4LJuollkDyQ8CeVbGRorVZUWUgyyNMztyIA6MKcRT4cIY5MhnuVRZ
-bGxgl4XcV+JPhoymijuhDH4icNtRkAxXzfeadbaWt6NOhUXLhZmqwMDKKD02DcVUn7aYTTbijfNA
-ah5ntNK8o2ttpdkpa5rLNcXMSsJKn4uLdaKfs5DZypwAGxY03n3VzF9XKIbZT8EHJwg+gHKyXGkp
-jztc0+KxjPtzf+uRYxO6Ek8x2ckol+pNFMNvUjloSv8ALQg7YrIKLX+iyys8ltcMx7vMH+74Rg3Y
-0pyzaI5H7uVNvBThFsohDTQaPJ0kkX/YrloLLZZDp2kq/IXTp4HhXKbLGlC88reXb6QS3F0WlpTk
-Qy7V8MMSVpMotPt47eOzi1NFs4hSO15FIv8AZBRVvpyVy7lpQ1LyTod9Ek0N3FFcsCJVRgF+hegw
-2UEJTP8AlnFcKqrexmncMv8AXIi7RwojTvIV7pcjyWlzGZShWOQkHgx/aHyy218MJHd/llqRdne6
-5uzFmenc9T9OHiCDCuSFfyJexyUhmRAOtVNTjxBFF0fkbUSrBJoCWFKksPxpgBWipSfl7rdKo8Dn
-w5/2ZKUgtJ75L0HzFoWrwXkkMckMLiQFGDFZEHwt07VyNtcgVf8AMHSY9JuILRW9R/QilnloByeY
-EhSfYDljLkoDF7zy5rksaNDaSOh6MKH8K4IyFJ4Uvm8ua8oFbCcsD1CE/qw2nhK06Nq0aN/oM6hu
-3ptt+GNrRRejSa7pc0/1JZoBcwvb3J4MKxSfbG4742in/9Tl/wAVa7UOLc2CSaDYnCFdxIO536YV
-aq38ciwK8A4qG6t0ptizaOLEtjFi7FsaoAa71OAsSqwkeoo98DFmmgwRkhdiAOuKSyuKKAKOIGLV
-1VQkXgPoyTJ3pRntiq1oIyO/4Yqgb61RV5K3Eg18f6YJKxbzItsGjkt5ZTOVLTW8lAiEGnINUs/q
-dfiyA5pDG0PK7ljUsofjy3AH3iu2Rk2xTPQdPMrTM936SK6xpGUDl5XNEFMiHO06f+Wre+aaawvo
-lMVopP1iKvBwWPHfLejXqTRsJprFqn1JJbSR4/2WTlyU+9Miz0+Qnml0mu3lnAtpFE6l93CLw5nY
-VZ6fxxc6QBDIdGt9X9KOTVOMVpIxhZojR6t9gfPF1WfGbZ3p3mXRoLEaeVjhjWgLuayM1NiX69cn
-xNEMRKUeZ9I12COS8int7lYUZniEhDNQAhtwBtXATbn6fCQbR+j6tpmlWFnZytbhCgluLiceovKU
-cq1G4/l2wJlAyKS2vnbSIdXuEZRcRQ8hAASYzId0cg/aVP5TjbdLRekFWuvNuhXVs0dyLdGK/wB6
-sfovyr1HAooHzXG0Y8JHJO9Mu47q2lEaSPKsVLmSExj92GpyBI2B/lxb5yNUUz0q/F/pLJLLLdQT
-GRV+GsrBDxIqAy4Q6rLcZbIfWbS51GxDeXba3jmg5RyRSxIQxGyrzYqVf/Zf7HFMcnekTeYPLCST
-2U+jhLeKQLPcrI8cjMlDyO/2g2+ByseCQ5FlGg3rhZX06KS6tZBHOZA1GHNeJVqkdOIIwhxtSZDm
-mWr6gjtELm3dZABwNe/ToVOFxOJBtomn3UDw6rdT8jKs8NsxCBQoohagpRj44t8NVw7IB9FuLZVP
-1lLwRFAtvJyJRE3JHFirfL4sXOhrRL096EtLmxutbtmUqbUq5Z4xL6bFASQzU4g1xcfPKuTKL86T
-LbxzXFvaztUKfVVfsivTlWo3xcIZclbMUktvLtrrK6qLSESOUt1hjEccUdQR69Cfib6Mrk7geKcX
-NbqGqq0Fy0EvxTetFAXkRT6qdKkE1RjkZEtmHDHGd2A3el+edPs7K/jgeaNpZdUvRACQSGoqckJD
-qwYnj/k5WCS7bFq8E/TyKY+UZ/OGp6OWmEi2Q5Oy3YAgWjE8QZBVa/srkt3HlkxwlYQ0/wCWS8LS
-6gYaYsYa71GWSVWlC8+acYqijfy4Rj6oyawS2R8r6JPBJNZ6jdXE1jNE9xdzsVRo/BIgKKvKnfJN
-ESb3TWDTdGubZ5L68h9V6+o1tI0ZdSCWSQmjfGP5RiylLuQNnrWgXnG3sQLSKNgkcaGhomy8uX2/
-9Zjgq2AjxblbP5cmuI7q7u4I5tOiYwCWSbjLPKWB5QgbKY6/DXHgZjUcJoMe1nyzaafdztZSSm00
-5Y7m6BatI5Ty3Y05U45DdyceQHmhNcn17WreWDT9Ou2kuJOM8ixuUiDgFRVQaDiFxolMZ44yUdJ8
-ravplq6eaIfrdupCLaSAogoaqxccWen7KH4eWPCssgPJPdU1LTXhjePlPaW/Ew6eSFhR+nJ1WlR/
-kHJhqMrZXZa/okGir9U9CCGV2EASgaVY/ilkPu0nw7DCHVzxSOQdzEbuza6hspRM8N1fySzuwYnj
-Fv0X2yTbLTBgd3deYtQ16y0nSppZRNKCq8SrFlJ4EM1NnwqIQhE29ePla1WxW31jUIzfyAPcx26k
-Ijr0HPktXH7VF44HUZc0SdgkOrw2tnZS2CXYvrcIVl+sKpQ7kjv8TL+y+LZp4Endgur6jBJpUNkL
-mdzZqBFBN8Q4E1LI9F2rtxyMnP1MAID3pCDXelK5B1snE70xYhomo7D3xSsKtQ0+g4q1QgCvXvjd
-K7HiV3YAdRirVCRvhBV3D6DkuJVoFPn9GBWzQmo2+WKtfF4n7zirfqyrsHJ+k/1wFXetL3Yj6cCt
-+rMBs9MkrvrE4FOZr8sUEIK61LUoT+6uGQHZgO+K0itP1qO8jmXW1N09FNm5pvImyhv8njh4mBii
-f0/qUR2EZX+XhT+ODhSIouDzVdqN4IyT7sP44s0Qvm2YfatkI9mYYopFweeEiVw1iG5rxPxj+KnF
-eF//1eYGu1BsPHDTc3XuOvbCglw33PXvii3cG7AkdMiVpca0BpitOrsD44aW3U2xKCXH264ELuIx
-bFrClKYsS5WdXU8a1OCmKfaTqnpD4mpTGlZLb+YIwlGcnGkcK4+Y4Aev44VpUj8wwNsG/HFaRC61
-ERsxr88VpDX2tApRSDt3AIxK0w7WZ2mlLcuRYUYjbp0yNUtJPZNIs8ikUoBuevXK5NsU40T6sYXv
-JC63EUh9FkNOORdjp4irTLSNbuJp2060Qx2wUyNNK5ZuRNS3au+ImUzxAyCZaTeNpun3bXNws03q
-glj0oDXYH2yXEG0YgEXrHnW01G3Fvaw+tcSELbqFHxPUELt3amG2ZgKtZqvmK64mG4WSKYcaRxgA
-o37O38wxa8YEigE0nzJcU1O5uJUSJ1aFJgFWQ9eJrlfEW2GCIXaZ5jvpdQt4bxJpIGk9K5UMQCC2
-4LCo74RIuXEABmijyZf2jSac1zbXcaPSyuKTRyBSRsTRuI/ZyVuHCREuSR6TpGs216NQuYAIZopT
-bqF/dgpRd6bVo32SMBDmzyikDrSRQ310QhidIOQcHhx5bbilMhdM8JtV8oXMFxpZlutVmiNw5hX0
-q1kFSNz/ACgnJiVuNrJVyelNeWuhwWWmabLIxt+TySKwNAG5cnfoqqTXJE063GTPmFPTr7W77TaW
-oto7d5J5OSzojyPyPqO6tTifblg4mrNgSXXtDu5EDT2/qCSp9aOWNw21a/AzZJjEyi1p+u6ro9qL
-RkZld/UMsQPE1Hwj5IBi1zkJc2VWOoXt1bwam83GSzbkkElT6q0qQN+oxtoELOzGbvz5Jqmqs007
-LzAjdgPhqpqAadaYDJ2GLSWBaP07XeMnpXtz9QulBH1gEtFKg7qVrRsHE3y0gEbj9SL0zzX5Q0jT
-pNLtrxr+4kdjLL9XYKxlYfD1HT9pqYeJhHQ5JDdbe/mH5ad5rO50gmCEVlmDspFduVAfbBxIGgIQ
-cjaNqGo2s9tGsunRJ6syMzj06D92teQ5GTtXDVudEkR4SjrjzDaRRSyraRQyopSIhQSobwrUZKTG
-GHvY1of5j6yJ7i3guhNGJPTAkRGXgNhxWgVRvkBKm7JpISH80+TK7bXtcubaWe1/R9sbVgayooBk
-ckBAorXlkuNwZaUXVyYXrv5ja1Ky6Zc2tvaPK6oZYkk5P8XHajkMF/kTBxuXDRxiLBKJsNV1FtQm
-sn9G5b/dUNuhimKrueaNypxyDXkIDHNd8zSRasA9rFMSR6lARXt7dMW7HAEWhp9cs4JI3ks4eYej
-O5o1D0p8seKl4Sq3/nGdbT6slov1ONxOsZb4HlU1BAB+1jxlMMQlzRmieeLeO0CX1jcStLzUqjRy
-QmI15Rusjxy71/myfG42XHOOwTK+/NzUdOAt9NKWdiACiywqrVK0+KrPy4/snlglNh+UP1EsX8x/
-m492ltFJNHKUZJZRxHAujHr9GQty8cAOZbv/AMx7/UrMWEkdnFYuSZmhVVdkO/UeGDiLaMZuwp2N
-1pV5AqwObea3hEcMTfGGVd6KR0Y/ayQaskpg8ghR5tlg9AkyGWj20KTIRQMdwvTthspAsbp1aa7F
-p0lvNBpzrdwII0nQsaVFCevWmG3HljMtiq2HmRNZTUSJHFxZJz9EbszFqEGv9cFuKdDGO6UWPmnU
-ofUlggjchiq8gKgdtmxtyI4QEr1/XbzVbuKW+9OM+mUAj4k0rXfj8sTu16v6R70pLRqaLXemRp1c
-i56V5DoMCAtDClD9ruMCW/1eGKrT1wEK1jSuySuGNK7DSrT1wq2QMVaxV2RKtEAnfp4YFaJNMmq3
-cgg4qpT26OlDucU26GARx0UfPAQhVKg1B6eODjPJVLgQ23TJDdVw5dKYSEhosQMCX//W5oyA7gVb
-tkm5bxpuSK+BxYlcqk1Ip9GLFui9zvgLMLQtaDAFK7genj0yTB3ED4e/jgKuCgfPArqMNydhi2O3
-boRtvtixLiu1T22HzxYrkWi0798VbDTfzn78VWs0pFSx64q5JX6hiCPfFVeO/uUNOfXpXFVz38/E
-hmqe3jiqi4YhCwO4rU74QFWQmtww/wAnwpkZRbIqWnyXwvhBEG+qlz67AfCg/myHC5+nLMNV9JrK
-Ge1lRSVpVdwfYUysxcwhJLayvb8fWBG8i2+91ETxHEHfBwKybSre2klhvoh9WjtSDFGi1+0KDl9/
-XJxFOPnnSpdJBfATwli8Y3UGv2HpQnu2FGllZVtS1mW906S1Uc5Jl4ovX4/2aV98HC5cZJFr5urb
-T4Vt7jhKkak2kShjzUfvW9Rft/FTAQ5OPdItD8xa2bj6sqerJcIY4HKnlRQSVjp8Tf6owIOKt3pF
-3+akMmnQWyWsmm3j26xXDtuh9MCvpg92p+8/ayfRpjhJkSl93Y2V/GrTTyNJ6AluCrVq7/YXf34/
-8FlYG7ffCgLl9FsLJLKO5EEtshE0XBmBd9zRx8PXJHZBjxLBqDX1gslxeLAhX9+4O7BTQVp8u+RB
-tpOERKzy75i16yF1HbSrNpTMAgk+JXkPUJU7VwtksIIRS6xq13q0OofCVhJSXaiqpUVQeBTJtGeA
-IT+785QQxx20BjmEjUj3qQW2OLrPypkURP5i1A6Ncww8WljQqJFINK7Elf8AjbFydPpaKpo/lKa3
-0OPWLn94i0lSJKsxB+Hen+UciXMOQRPD3JSL4QpLcyxq00z+oC45IhVtyI/sK3/C4GXmEBdeabK5
-uXT6/P6jVHwokaBj/k/xxbPEkAmWrt5f1Pi+nyS21xHGkU0TGoZlFSSPcnFqx6g3RX+XbOS+uZNM
-lu/RecGWa5K7KkK1T4e/xcR/s8ti42syVyR2q6R5ia0W0jkhuAA8pljJ5ukQLMqq1DyIG2JZYdXx
-IS71+wsbVdAn0147iK3EsUaqDIFKhyz8Ry5AH4v5Mqc4na1ugXIttQsrS4kMX6WlSK3I3CtIBxrX
-fpixmKFpnpllaW8sVxJzeaP6xbvcsAyxyR7lkX+bdD/ssWvHO9kd5PW7uLfUrmGCSfUonaL68U4q
-sUnxlRJ0L8TTY4uu1mSmM3nl7U727NyyxxopIjSRhy2O5amLZp9TwxQd15ZspZFN47zRxHl6UXwq
-zV6lsIDCXaHRCa3Hpkk8FlBIIZ2H7oBakfRh4XJ0+biWW+v6No1mbGaJ5b5ql5WPGtf5V75FuOOZ
-SPU7ddbAurZA0f2SHIU7dd/ngLPHxD6mJ6hotw8yxR255GoPHp9OBZbs10C20iwiSLVtHN/cmIyK
-kV19WPEDc0ET1+/CA0zMxySu58y6Gt7KlnpNxZRoa73BcofA1jTfLQE4xMmyyC1065vtOOoX8Teu
-RWGPeojHQkj9psPC4uTVVOlBr23qGNvdoR1KFqbDbISDsIyCTaVJcQz3wcG1MtCPVNCwJrsWIyKM
-sgujeZxqFzLCs1unFjMXIWo7ADLeFqnsky6s0l6ohtI2VY2ZWhJBKnxrg4XX6iVhUk1Yo8azW7oz
-gEAFX2/2OHhcGS46rFu7JIFXoTG1Cf5R75ExUclr6vYIQ7llJ/yGP8MHCloa5pZP+9Sqe4YMP1gY
-8Kqq6ppjH4bqIn/XH8ceFVZbi1f7M0bewdceFVylGFQw+/K1dhCuwq7icVcemKrcVdhAV2HhVoAE
-1HTIq7vTFXUGKt4hVmTlDZXUGVxVo7HJySFpAPXIpf/X5mAeRr0yTJeEBNBirihG2KrlUcgTiruK
-nc9cVdQDFW6HriyDmDEbHFk4IB7quLW4Kx2rTuBgKuMZHU74FdxI2xZh2KXYq1irRBxVoK1SFrQ9
-CMVV0mdAvwrJwHRuuKCo1rdqwpx4tQDrUb0yEkQ5spspdJsdFRx8bzVVEXdnkP8ANkQ7WFCIKG0r
-SDZQSpfWrLLdOJbeASfCgbtTouJZRzb0mVHithHEQshIJMe5CnYkfzLkFwyuRdf2kyaX9VBZCsYA
-I2rXuQMWIxcUrSfQbaK1hb/S5A5JFygNf9Uj3xcw46CaeW5dIOp3EquZfqqhwknZT9qlcmuQTK67
-e3vr4QRXDxwT1lkVEEamOuyKg6Aftfz/AGsBYxMhzUfMLxW1xp8sESSGyBaNAdlIqQTkW6Mm9LsN
-Wvrcz3D8GY8wv2lYNvkwvHu5ri8q8Wl27TKrAyqRxClNvwxLZGaEgBidDLbma5+seo0cqclkJBWj
-ePX4cgwnEFU1e6kubSOAxCT152jtiFVCwFOSOB0KtXFrhGi0+lSaWI543QxQEGOOapETPs0nH9or
-+zi5BNhfbyRXMDyC5dUDcXnVfTV2708cWqqVZNKmvNJWCCEW6py9Ob9omtQw+nFROnWemTfolWS8
-dpJVKTMwqeSn4sU+Mleoea9asNPh05rpzFC1FUfYdD15YoOO/V3pvd6UIbUvFqMrzMORjYLxBbqF
-9hiiM96Sa20G+ubWW5jaMF51AZ1BPBPtdP58U55UGW3GhRNY19UxO1BIg2JH7IByQdR45BTHR9F1
-IKWuGEDyEAEHkRGv2anC0Zs5k2dMuZdTkMt86x2Z4wCJih9Y7sxYbmg+DFzNHHgW3Wi6jdymzjuo
-Dd3QkRby4T96FILMvqJ8u4xcrJmrdMIPL90uo6YNTMUkUMkK21w0oRYnRSpdeNHZwPs4tI1Vsfut
-a1Kx1q80+xkLvFM7tLJuCWWnMD+bIlyOOosg0iz1/Q9INxeSBIbx/Whs2Ys9fslyB8KclH2MQ6rU
-S4ilF55jnklP1W1kbkePqEEICTQnJNEdmOauusNfRTJdvGnqCGaIjipXqWUnvvkS5WHcqVydM+se
-rQwzA/35boV6MfngdqI7KlnFqUukXEl/9WmtXQvAV4tIDUkVIybAy/eKOmvBaaIVeqS0fmrjgSx3
-2JwFkd5ogx2V9YtcW6kyqix21pTg6sftu7H7XjkVOUxU7XzHb+WNRf6zptprlw3GJbi+MvGNSPiX
-ihHJRkwwyYPEjfentl51tNX1dmTSrCCFVoZIInjjeQdFT4t+OLg5MRhEteYvNk9mj+nHCsjU4qqA
-kfQQxxacGAyLHV85LKOM04qoJYbJ29gMXaHHwsc1e7XUvVpIA8QDKKVJDdBizE6da6wo0+1s4me1
-niX44JIwySMduRrk2gm0GukSRajJI9FEqEOYzUb/AKjkZOLqMdC1CUPDfLaRNxjjiLk0o7V2+1/D
-JRcCSs8TkInKhpuOlcko5KDghulT2HjhClTK8v5f9WmFg76vCw+JFr4EdcVUjp9ox+KJCPCmKubS
-7Kv2AP8AVLL/AByLY19RhBpHJIvsHYfxONWq4Wsw+xc3Ckd/Ur+Bw+Grv9yK7fXpKeJCtkTFgW/W
-1lPs3gb5xr/DBw2hd9d1sLX1IX/1kYfqOHwVcuq6yAaxQMP9Zhj4LIL11nUV+1ZoR4rJ/UY+Cycu
-u3Cir2T/AOwZP6ZXwtbf+IEDAPbToT24g/iMIiqoPMOn1owmQ+JQn9WS4VX/AOINIIo05HzVq5Ex
-ZhUXWdJcfDdxn6afrwcKV6X1k/2biM/7IY8KqglhP2ZFb5MD+rHhVfXw3x4Vf//Q5vxPbf3yTJ1G
-oSO2Kt7mnfxOKt9MVdxNSPDFXcT40xVvou5qTiyDQcU+WLJthtsAMWty0K0PXxHhgKt0A2HTAru4
-I29xizC0bE16g0pirdDx8N8NItrifCuBbcymlMVtrfkSOnYYslxAaIuNwv2sbQSppIn1mIcaV5AE
-fLKpFEBumFjpt3bu2qpMStuC8dvSqkjxBxDsMeOUhtyT6JLu9igvbmZY4yI5ooag+ojbunjVcSzO
-MhMdSuYYtPrGqpyi4RUFGFTWgPvgpjg9Mt0DPd3S2aenbCMKgVYa1AA35sx7knGnMiKKWaWNLubY
-STyRwXI9Zb88yrgN/d07YKZ5LW2s+k3d7bpAPUlt0EN1fKCocgGvJR1xEkXkA3IR93Y2TyQLpszN
-d26kxuzVPF/tKewVv2ckQ4J1REvUrJpcD2UnxFzcAGWc7sKCnFe1F+zgpzITtB2XnJLHSpbK6iVZ
-4QFSbxA2BNMIWiSitG81aY+mxiW4Vblmf1STwPXrTFsMSFn+Kbae7jsLOH65J6oloj8CrrsCTTpv
-kaRUgqataSx/VLu+lS3MczXCW0I+GvV2dj1Y4kM4HZLLxL6+tHuVuF9N2HpRtUs0bH4m8NhgZQyc
-PNMH0rVYLRUhT0/jKwKQGBJ6Lx6YpnMKj+Z7W3tAbp1jnVQrID8QdahhTFEcSVaLrslxPelY5Y7G
-FfVSJftBn2DU3qqkcsUygAaQlze297eRx3irKJZFDbFGO9CQKAYt8o8IpE6/bWtvci1idWEtFhSM
-spRK/aatR+OLjgWUNo7a208mnWboY4SQs3Kqsa13w02SIrdHwah5yttUtnu4OduhZXUFW7bEb4eT
-gZMIkdkx1HzDrbWt3e2bqYtPQPP61QWr2ULXcY8TWNII81HR/MMlvClvqMvp38lbmQHcUboa9KYW
-84+5HWurPdeZNPijlAiX1HeZSCKlCAPxwtObEeFOfMeq3mk2AvFkilHIcGdQ/AnowHbGnXac+umF
-WN3M+rW2rMSzQSeo/cNTchh75Eh2eo5Jxq/nq8vYZlsm+KNkR5ZakAsNkX3xAddDGSUX5fvV1K8Z
-5I2VbeNBPzb4eh+FQNu3KuFnPAUu8x2lvPrNv6bugDfDHyqrBvtEA+2RLbpsZCAey066geJldQ5Z
-fULkjihp4YHa8QAS298wWOl2UumafBJG0rKz8/jFP8nvTJW1+ATK7ZNPBZ362Rfif3kcg5b9vv7Y
-80EESti2v3Goy6mifX4pkaU8XiPBkUnoOPhgpmCOqcXHljTxa/WZecs8a1Usaivyw2xjP1eSD0W2
-1SVfh9KO1hlYoWFSW/m4jG05gJClnmeCS2Z79jJcyyr6adlRj0ag7DCywxEQlFl5SkvYfXvmAhoC
-ZCQijxJxRlSu9ifSPMVui/FbMyhyN14fskHwxcKcinCaNENYikSGSQqGle4c8kNegB75K3KlXRVu
-p45L54FQIwTk9K7kbVIyJcDU3SR3ZX9OF2B4LFQ/M/7WTi6+TbFpWLt9ljUU65OkArfi59a8dq9s
-aUlw6EHr1wsWgCTWlR44q2wYCoUg+GKuAY7169u+CmVtcGBJI69MaK241AqeoHTBRW1rEnrtkggt
-0ZRUKPp64lC3oKk7nBZVaoJ6br3xssgV3AgFl39q0w7ra1TRSVBqcFLTQMm5b4jTauEIIcBUUIoT
-vXthQtaKMqSQCQK9MFMgVNoIjU+mpI8VBxpbUza2jHeFP+BFa4eFbWNp9nTaMD/Vqv6jjwra0adD
-SqM6fKRseFbf/9HnHy29skybA2Ir1xVeoIFBQDx98VW8T364q33PicVdXceOKuYDr38MWQaINKDr
-4Ysm8WtwHhgKuwK4Ak9h88WYWqpVqjwpTEKV29euSYO38aYCrdK4FWha9NsWxygorqu4I+z474QG
-Mlho1xCQOIBNPuyuUWUUTf8AmO3hsGtJI2MhBXinUg9CKZF22lmKAW6JDqBSSe1LcgoEUEgJBV9y
-F8CMXKmAWdpp73OjwLPIofgRIAOhxcSUaKUXcUlrZ/V1T6zOFZhXpRfGpxbou0S50yG3kgumjW9f
-97LGeIFW+yBX+XFsyIFYUvdYnS1b6v6aDiyfDWvQntlcW4xsKqltOgYzyq+oXFUmlegp8QEahB7f
-FXLXW5NNZ2RduIZXXTre5LSlWkeNCVMkgoOC/sjkxwOXCPAN2Oav5Z1KJpYuQlDvJCaVJMi7uAT/
-AL774tkJAo3yn5aNvYyXWpJAtFkidZE5EcfssreJxYmJ4gk9teNpOvSXiqOMycNqA79KYtkoovzR
-e6m9rF9ZR/TcVRyfs12pQda0yJTCgE40iB7yJPW/dxGFQCPE7FadhtgRKQSi780+Y9Mun0+WaQ26
-/ZK7rTwxbDESTRLDy9qGlFpWrdFeTE1Vy37PTrSuLWAYlEaRGqaLKXitgnpsBOpK3ClTQcqdsWOS
-XrCC8vva38HoGCMwxsVu76d6OrMaqI671xbM5NqupDWZ7aeOhhtImMBmIHJqdlJ344QxxTHJQ0vR
-dW04fWra7USOyuquOSUIoQRklyJhfNrF36irAEvLaATcUY8Sp8Nup/lxprx5RHYqegaPqdqDLc3p
-9C6iEhtm23Y/ZYNXpjwsspvks841jtOcCwySOBEzuvJwp22IOLVhB6qHlnyy66mxgmZRaxqySjZZ
-JKb9cIaNTqANkB5o1fWS0mk3XDg7qTxB5Mte2/WuSRgxjmi9G0ixN5NFKzrEIlmCciCxA6ZEtuaH
-Fuj5vqsMSyafbLJFC5lnVV6tSkjIxPxMtcDXj05G625/RNgw1CPe1ZFhjeFxyoVJdmPcitMW8YrU
-47m71C5tprdFt7WBSkM0m9R49a1yMm/HAQ2KHa/i0+Zba4RubK6q4FVZya9MCcovkx6eIz64HZCk
-RZQPkOoGLZHkjYp71NagkhkDCKT90pBKgdKNkg40uaM1REim9WPTI4mt5QoaPu7CpP44UJwJtam0
-2SVo1gAX91E5JLfTX4ciWEfqQmh3dwtrIJoxGzszKBvt3xDOazV74fUZFdgFp0JpWh6ZJEYlCT6q
-dURobSWNtPeIRz27DiYSBSvPvvhbRC0tm0hruZCs/qpaRAzR1BfgNgRtgTURzVNMtzqN9LDBdTJF
-ZqpiQmlC3sRSmLRJUn0ie11R55piwdONaAgbjwOJcHVcko1aFU1ZwCQnBaO3Q5OLrys5lTxABpsM
-sYxiZEAcyuKIpCsTyrU06VyIJLt8+j0+Cfh5JTlP/KSx8PBj/wCqnD/mLZE4OV6mlQcINuHrtHLT
-5OAni/ijL+fCX8S0owNKVGFw1SL4vgY0IH0imAmnYdnaWGfIYyMh6ZS9P9AcTjEqxqyk0Pj1xBbN
-doYY8ePLAngzA+mf1x4P961GrO/EsKHpTriTTV2dpYZ8vhyJjxCXDw/0I8f+9WvCQgflUtsQcQd1
-z6WEcEMsSbyGUZD+pS5oVVQZDUnfiO2N235NFiwQicxlx5I8fh469GP+nKX+54W/SJcUaqOK1+WD
-ibf5IByQ4Zfuc0ZZI5K9XDj/ALyPD/PisWJC9GYgkgACn44C42g0+HNk4JGfrlGOPhr+L+f/ALFa
-ygGilqdx71yUWjVwxRlWMy/pcf8AO4isNQQaD5E4XEcBQ8NvbFscVanXFiW44y7LGTSvfATTlaDS
-+PmjjJ4eP8f9IrpkRGHCtRQlT8hiC5Paenw45AQ44zqHFjn/AEscJ8X9bil64fzvp9K2SApGGJ+J
-jQjw2xibKNV2d4OCM5H1zl9H+p+ni9X9NtbWOkYckPJuCOg8K4TI7+Tl4eysVY45DIZdSOKHDXBj
-/wBT4/5/H/Wg4WyIqiUkNIxUU7dq48XcmHZOPGIDMZRyZ5yxx4K/d8EvD458Q9Xr/qelDSRlGZP2
-1JFMmDbptTgOLJKEucDwv//S5ym/XJNtLqYoIcQD1xYuxVx+yMVceW1Rx8BiriOh7DFNuryPw7Hx
-xW3YsqceuKCHVxpi4gEUbYeORTa9uuK21xrjaGivbv1xVqvhirupxbHAkMabE7YQhY+zR06qaVyu
-RSmOifVzeSo0HqzleStsSAvzyLnaZOdJuIrSfj6JQPy9NOQdhTqzU+zkATbsSO7mqSarcz6imnWS
-o8sylwXJUKF3JNMm1yFDdHTadeiwkMghJLMeQarkD54uPDUC2G2ck0erK8Nuk8oLKROnJCO9eW3w
-4uw4okck/kaC0h+vymIfWYjBy39MsvVG4/YZcgxxiR6oexsdBuLSC7nnimMbH1laRuVOLBafI5IF
-ZRkDsp6dPZRxywWpBu5SVrU1FfslSd9skvCTzXLLqNvfRRXWopJL6bekjEKPejd2yBKxgAdkq1PU
-7i3kmB5cJZABCWBQt0LqPDG28Mn0ny5YyWMjTAS3bUdXboCNxx/VjbhzlLi5pfJf217dCM8XFo4k
-NDX94NuBB7YQ5BGy6XWLe2c14xRymtR05+Aw0whiJQmpaYdRSGd5R9XnVfTIFDVum+QboTAS2HQr
-pb5Y7W6covIS8hWvHwP8x7YQzOSJ5pxdxazJoIEcMaSSpxkmBpyAJCIf+LK/ayVOKSCbSLRkOnXQ
-sLyBZbp2AET1KBm8aZEt8jxBlsd7fwWtzFqMSTyOztEsNWUBv2anuuBx4xqQU0lvoNPFxc2zRRxg
-bEAmh2rQdcNspGygNN8y+YdTmS2s5g8MjFYZTQECIftftbY2UnDG7ISPzD/iKO6DLI0svKjstWr3
-6HHiLdGMTyUbeHWLqKKW5nCQrIpki3Zyqkcumy/TkmqZobPTru70+xhiEBCCRaRL7EbE/PCHTeCZ
-z3YvqL6el9a3s8TSS2rF5KAnlt2+WAl2kMdBF6reaTNAlxBKKyrX4OpB7U7ZG2YB5JfJqEVrFFIQ
-JJZD/o8C1oo9x4422jkrzXGjS2Tpd2y20UTIqOgry51r8P8AkscbaTxXshltr20jlsYODxRMAlzX
-4FSQ1H04GwkE7utrL6sWuJCZr21cfWCx5hom/ajHhiznIIXW/qxVkhlC3EdJLSRDvVugxYGXcl/l
-sahPJc2NzMVnZhMGUblR9ob++Frjz3TO4s78yF45/iKmWJHA+Nk6qd/5cbZUiP8AE8Uloioy+rKD
-WInfkPEYGIjRQ31UXY9Y3shlZObW8PQMRuBWh3whsoUmUdhYz6CzcAZDCQ3IfEHXsa/tHJNHEQUt
-TRLCzsIWhcxI3EyhhVzy+2aeK4uQJmkJbX+nW5jsbeZWnRpBLqJQ1ETNyCMP2i393i0STaYpH+/l
-jWGRgEFzGOULU6cqfZGKZpTdLqkOoFL2OMRSRepDLEeSOKjcHEuu1PJj+oPy1uQf8Vj8MnFwJLlH
-Gh7ihyRXFkMJCQ5xPEqyiNm5cwN969sAJDt9bHFqcxyxnGEcnqlHJxceOX8X8Pr/AKPAqeorEkAU
-oOBPemDd2f5/DllL+7rHDHiweNGPF+7P1/TLh/idyjDMaCtdidtvux3UZ9IJZOHg4pZOKH0xh4P8
-2PHizR+r648EVON19UsKKN6ZIjZwdFnxDVyyAxwwqfDueH1R4Y8HpjL6vV9EeFfyV2UsaFdmXxwU
-ejedTgzTx5c0gZY/3eaP1RycP93mj/Oj/qkXDh6gO3IVqR4EUwFv02fDGcJTni8WJycU8Y4I+FOB
-hCPpjHilxy/zYKclPSVaioJqMIO7qdSYDSQgJRlOE5ylGP8ATr/iXScZArcgCoowPTCNmzV5IasQ
-mJRx5IQjiyRn6fo/jgqROoCoCCFB38ScBDs9Jr8UODEJR4MMMnFknH68ub+Zxx4uGMv6vFH+iooC
-JVL0ABrXJEbOl7PlGOqjKRjERnxSl/B6f5vD/sVyFAzEkFq0FelK/LAXO0csEJ5JSMDPi9HF/d+H
-KXrnH93k9TfBD6pAXYgqSBtX6MHc5XDjIzyx+CBGWOWGcoQ4YeJxccfVCX83/N/hd/o9SVC8yRU9
-K7dqg40W38zo/VwCHHxR4uUMc/SOPw/ExZ/R4nF6eCCiWi5NUEeAU5Ld56eTAcspGJ4P4IY5f7+U
-fp/5JrQUdx1VQKEnc1pscd0Y5YJ5hscOOu85JRnwngny/wBU4fpiqzzcVA5BpBxKmnT4d618ciA7
-vtHWiEI3KOXPDwZY5cPFwR8KPHKc5x9fiT/eR+posXhVWZeRYlth0PyGECi05NX42mjGUsXiSyGU
-/TH0xn/H6IfX/Pl9bhJEWicsB6Iow3qePSmO+7bDVYJSw5JTA/Kx4Jx9Xr8L+78L+dx/5q0yJMYp
-GbgY2JcHuCa7YKISdbh1Jx5JyGOWHJOWSMr9UJT8WPB/uFGSSNpWlO3I1GTGwdFrc4zZpZP58uJ/
-/9PnnFVJ4jY9Dkm5qhxYl1DixdQ4qvxVob4q0euKt9AK9+mKuOLO3KDiglog42xbGBW6GlcCuxV3
-JhtTbFXN0xVaB44s7U1WhX7sVtucBApHdxXISSti4pqkTl1QICx5txVgOxORc7TbJ9byi5S5LpGi
-RKAiQtxbkdySw65CjbsoyHNH6Xa2lpfxTyAi7l4oqgh0CvsR+OTadSSRsmuoxpHd8jJIIZqvIOnA
-1oS1e1cXT4oS4kl1DVVt7+GGEEvyDTItACpBCmv81cXe4obJdqIimuFsRyhiZufojYGn2mB/mbIN
-mOdc1KTTdH9ZYY0MSSbBwpLDbuRhDORPNP8Ayp5f0nTIpXSQymQ0klc1IHgPbJNMpFAz30E8eoRW
-EscPGQcpCocleJXjX9n4siWUSkVv5Lu5Lwpd3AjjZS4Z3oq8epPywNl7Mhtr+WGzEZLzwxt6M17C
-CYjQU+0euLDhCU6ndaekajT41RVb96Yt9iRUnJAtoG26Z3kHl6FLk3Nwjo7xTafKlTPHRfjB+Zw2
-0AzB2CW2V1qV6dR+pobejGSFW6GOmyqP2at8WQZz4R1T211JV0+F5gsDlF5oxAYN0bbJBpNJJda5
-qMepsNHlMkErL6kKkbOdq1OFyfDAFlFXs8kkSLFZCK5Ql2nYqWXh1dfpyJREikPcald2F3bfWLh5
-o2+OTgikslDutOvTAkgUmWpeZLK904RWvImnwjiQCKV8MNNMYm90q8maddWjyXxgJjdXCgNX43bc
-740W3LIVQ5phqt2t9piSQzzUJaM2kUYJ9UMdy/7OBjgsfUv8u3tlJpotnURy2xrMpIrUnY5O2GWM
-u5RvoLK7s5rySVykTIsLFqoaE8qD2OEFcePu5prJfQmNE+GhULXxBGAoBkDyYjcwQ3aSy6eWiu4S
-0d1FQtGQPsFKfD/wWRptsIDQJJILqQXMLGZZOLyyKXCiTdaDoaY0zJFMmv7u2SzaS5jSdIlLIwNV
-qvQ0/ZZTjSABSlHrMV5oQMEdFmio8pIJ5dDUda40wEbKQ3XmPUbeGKMRgXEaGL1W3Lxt2YY0ynEJ
-dpkGqXFzIZIS85NVcNTgPfwxpoFsh07SdSttTXUjMjRRKVmCihJ/jTGmUxtsjWu2vpCbfcKweGRO
-qsBRq/5OBnDzYzeo1rqX1mVAVk5hgh6nFlKk5stesZLS3hN1JHMPg+rxr8TFelDhDWDR35JzoUMH
-rXLMZh6bho45qbcup2yTTl57IbzZaxpFLqECl5UoZAtC3Ed1r3xZ4zsw3TvME1k8zrAkqT7yR9iD
-3NMUE2yfRrqDUxysoEFqzcL20nk4qK9Sg/lphpJN8lPWdVs7vWRa2ShbSyg9OBVFFC1HQYC67U8m
-M3zf7nJQP99DLIhwJNqWBVWqdqkDtkiGDbdQDsAdqdMFKqARgcTuew98aVzUPwNsAMkFWrzVDwNP
-cdcVaoajx6E+OKabLlqVNCo3GJWlrSM3vToB2yNIc5fj069MkrRNGJXevXFIWryI+JdlNF+WC2Vu
-IFPs4WJcWbYBqL1piz8WXDwX6L4uH+k7Ygk+NaYotokFW47HCAglpnFfhGNMVjByK1p8uuBXfvAo
-oAB3OKtMlSKjcb1w0q3k1QewPXGmQcVHVtj3xpk//9Tn3YDJNzfE0xYl3E4sXcTirgOh7HFXBamo
-28cVbKgYq0VqR4DFXFa71pTFXFSD/HAVaoaH3wK2Qa5IK2Ps0xKtAUyKt8a98VaK0xV1CMVUwoMg
-J/XgLKLd2hoh6JUVPywMkNeaeL69jta8FmADN1+HvkS3YpFP0XQtJhNojPHFdKYp5n3ccBVTtX7S
-4Ha44mlfT7YyelJCpUOW9FDSpjA+Buv2tsUZD0Tq2jSeN5r9+S3MYjkt5T9n03qDWv6sXHhjpLJ4
-oW1a4m02Bbl2ZGduWxHEpRR0FAcXOxypLbmzSPWkOqS8RAvqxQq5BLnpU5BsnEHkqX3maOzvbZYY
-vVZm4Iij7XNht7knJBEZdClHmG41y21O4ksAbUPU+gi8ug+6mFtEQUZpUMS6ct+GpezwOzkUCeoj
-fy9NvfIlhIUUyv8AWLpGQi2qsTek8jgH1CwBZQu9acsDFdfQxSaS4uA4kVyyW1qrJH8ZHH4dvp2x
-Y8W6X6ZpVha6Y9zcrIolLLJEW4hSTQGori2zkizp+i21qJeC3D0qHY14+/zxZRkgdM82W1q9xHGD
-zeCRY3K04uv2TvimWMSVU8wabqcls17CWtBa8J2pyZpiKVJ/Z8cIYCATFrTSbqwa6sGSzuIQJI5I
-/shA5VFk/wArbc5JpjKRlR5N6tLqsYhlMEXrOVRp1FVAcbnbIluIAOyG4ajcBreCCM3KoQbhth8I
-ITh/IGDfZxCCaVbvUZbSD0J4FQxIiSIig05ADr88ko3SXTPMV4lNPEg9cSFYoe53JAyQZGAG5ZAu
-jnTbqWVr9odRniW5ksUH7mSL9o1/34Mrk1SkTyQt7PbmyuIo6QPOtFcABqjpv1OBlEk81HQrBr2P
-9EXpktYbdOZZaVkLMO5+eEMp7DZMde0mws9PP1S6czJQVLhj91Mk0QJJ3Qtpq2mWuiK0X941eRZe
-LSOTRqkbfLFtMd0Fb3Sc7m0vhwhli9VGBofYhsWdUFeLSNJlt0mQSSC4VRKr1AqPEdMWHEmEXl/Q
-oImkWIrIQSaE7kbdOmK8TENRs0jupJJASkwqT1K8flizEbT6ztVSY28UivIV5y8SOQH+WfDFgRSJ
-t4miQrPIGSp4SVHFkJ3wFiJWg7R7WX1LeNi4hZgYYyFD71BJH7O+RS6e2sn1C3iuVVnoxS3jA4g+
-58cVU2iEWuxelbBjArMpUDYfZqcIRLkmOr38dtbC7AZbkUVkoaODkmrhSK711r+N4IWMELgo0g67
-9vliyrZjB0K8+P0I/Ui6I1GBNMWONDWwk0++Q3kUkcMjgCVqgde1O2ScYSMWRxaZ9V1KWVHLwzxg
-qT4g9vvyMmjUXVpTeiutzACp9MCuXY3BkvUL6oBBBpQntkjzYN0rsOobfAqqCeYB28CMVWsrsx/a
-IxVcq9AD8xiqyjUYkGlaqcWxosSACtcWJcGoSqjiOpxYtqQSKnvQV2rirTAtRq8qfQR88VXGJa7u
-OVOgrTI07D8nir+9hx7emp/xfzsleH6P53FJpkAFQ3I0rSh6fThDVnw44AcOQZZf0Yzj/wBNBBYT
-KN60FK4XEWuDyAXFWlJAO+/ShycFaqD1H3YJK3x6eB6b5FVvAEALUjvhCreLL1Brk1dxpvsa9qVx
-ZBbxIJANT79MWT//1YBx326ZJstsCu2KCW+O23XFDRBrt0xVcBQgMPpGKuAFD4dsVaI8cVaHUjFW
-ytehocVbK03O5pgKrQ1e2BXcvbJBWqNirYFfowUrXUE77e2JVsCqjArXQAnrirfp8mAHXrikFUW0
-FxbTs0gQQhWRCPtmvQe+Ck2jLWaO2m+sEALIvGhA2ZRvkC5emISm9spLvUAbKN5Xf4mWtQBSg64H
-dDIAKTm3ub+1naKe3rwiVYzGeQBFARXscWgxBNobVbS7RIy90UdgZEtzUjYjYn6cWfDac6JI9pNM
-JY1jaispNKGvbbFgQQknm5bnUtatktHUtJxEjdSoHU/LIN0AYrm8pTySxPJqLLNbKJbEqgIaSpI5
-fdkgjJun09vZ398kbkmARhpCpK8ixII/mpUZJEZkIV9JmfV2tbciGwSM/ugATR6V4n3pkCzkdrTC
-O0t1EtolyDdpLzcMQoRQAA7DvSlNsDCJJSC/1nWJZXjskCKKA3XPfevRfoxbRhCVxX2tx236Llg9
-WNiXeZjuyg8iMWU4Bk6rpCwJK0foTooaKJztUDcgft5MRDVdLNWt7GLTyeKerRYy9F6qtWP35Bux
-nZrT57+DTYillwDQSiY+kpV3O6P7CmSDTKO6XrcrPrkENo8VtII0a7HFjCzKBVXUA9cLMysUmmsz
-rBBIyKy8RXhE9UIb7HADBSIjamKxa9qNpHDNDIskMilJIWWrgr0V/wDKxpslAUnFtffXba4lvrZo
-Z2Cu6GoqqkAD+OC2MBSVxXWmaZq8OotZ1nik5K32i4eoPw/zL44eJnkFoia+hu9RtbaaaRrH1eIW
-Sqyxo25HPwwEsYREVLWrBdL1e3nkKzQwSHlYxFpJGiHSTfbjhoIErTe1szq9uL21tvTgkqts/q+n
-yPcCvhhAYxlRSS6i1LRbqO41K25wI+7ci3IV+eKdkfql/ZtYTPbwBk48gngTvttiyCXQWD6zHA4L
-NDVUCqaOrA1qR/LimZ9JTrUv0taxiOaIkJuJk3jCrvvTvi1RiCoW3m3T7mRoIRKZgv2Ahbcj27YC
-UTgAUPc2YtoLZmEj3l1zaRWG6g9A29MFtsZUqadYTw3Qjv5Eh+tREQcGHqMv/Fg/VjxMZStUubVl
-VdOmIVOBSGEA1PLo/Legw82EYgFB6fpc2m6lBEs7xxurGQBatxQb8SPt1xpEieirrF9p1iI5YVaa
-5RlZSNiAd9ycaSAatNI7a6lVLmNk5PGoMVaHrXrjSbCU6/fTS2/oOOT0MTNXZfpHfCnhCT6TpnIt
-bw8phbAN+8FBUb9cIDExZPHO0v1KWIcAZGqo6AUp/DIkojCkLJpEepQ2klzJHHBaCSSV3G2zcRyy
-VtWWA4qS9EiS5NtDdpdW6KWiaI1Cg/s74C4erNelILst+npwD+wv45ZAuukqhzvyHxdiMt5sFQMA
-QT8O1D1JONJDY37fH2NaCmRTTe4G1Qe5HQ4tksMgASCBJphtXcr2+eLHwzV1s0XPLidh4HFjbRBJ
-2NAN69cV5reIqWqSemK03seII361OKC5tiSQanqcKGjyK+FfvocPEylEjmKWlZONAfAb9dvbASxX
-stSFO7EU9sCrWbavcYqsZOR5DpTCDSQGxVQPfElNLWYk9tvbAgu4OGqAQp+7CDu2+Bk4eLhlw/zq
-9LilKMDXkK/LJtQBKytG6E1yJKgrd1FT9rwxtNv/1oHQKKZJk6mKu6Yq7FV/FqU/DFWipFKigrir
-gFPU0p0xVogKa9sVaxV1K4CrhGRgV3Ej9nJBXHFXMBTFXECpHbAVW9MCubj8O9cVbUkSim22KrZm
-oki77j4adiN8VRKpDdpHayH00lA5NWp5DvTKzzb8Ed0zjthY2irar9ZD1j9QPQ7bjrRsDtQKQ1i9
-+8t5HMhRo6HioqAD3r44suJfPZeoheWT1ZChKCtGBGLOOSkuisfMDm3vOPr2vJWaMsKkVpi3CQKe
-3Wl20MjaiSVkjVqL4UcAL/sl+LIMY5OJLrfW7p7udoYUMMKIz8iVIk5DiVp/L1P+TgJbJYqFrtS1
-GGx5TI3+kzLSWTckuBVFVfs8N9jg4mHChPLd35hkvnuWSkRAE8kjDYnoRTwySZckqvrbV21YiViZ
-JXURTqTUgnvTsOuLOMfTbKre1htoGY82BCgvTmSUqGkqOi/y4rGSC0/VLK7uZoFX07iP95budw/H
-qprkJHdlIp3alPTkfitGACwkBuBP2gK7iuTjJokkuqWlpNPbqJGgjkkWFogfhbt3r2xTjkm0w1OK
-2mVR6sUCcKcwGKbqrCu2EIB3QOhXI07Tprhoud205DPGQ9OAI4OB8XFlbnkmSjpd5AsRaKJDLFJy
-jlaux+nbj9GLLoixoOki8GoR3DmZazXVvKo4mj+nVSuyty/ZOJYGavrMsMixyg/vSwjfiASwOw22
-yCYlLLy9tdIuYJJLNzbAlJZ2jYpH7sx2GLKUkTqVtZ6g0U9iVeYqGdtuPHscUcSF1LUr+G2S3aFR
-Ki8FmdaPwO3EP+1keJsxhZLd3mm6Tplu0A4WNx66kmgYPWo/HJRKOCyVbVUm1fyxMYmSKS/keeVZ
-5AGomw9JfCgybjQiTKku02y1CXSxFMooiMvrBlAoBtVe+LlyjSd+VJRc2aXc0KwXG6UU0qF77YuJ
-OaYa7fRpZlIyqzz/AAxo2wNTviyxySHy/ptzay31k0yQS6ggEVzGo5LxNWUHr0yJZzO63TlkTU5m
-XnLasnpQTSrQF4/tgA9cDKKpd32nGOW1u5FtpQymWQLWWRF+z6TduP7WLFTg1pIreS4lZlNGRxOP
-iMfb/ghvhivDaItkh12ztru2cRSW0kzXAj2kQIpEaKv8rfzZJgTwsV80+rB9X+sD0Z7hUcwseUhB
-/m7Li2jJYREOpebLdY0exEkQATkSAetOoYjFpnGt2S3djeabYMbWa3muFo93CxVmHPfavYYphK0o
-v7GW1R7+C5pczr+/joWhpToOPTJBtkjNO063ls05P/pKjmVVj8NfDK5MVXTbUWFrqaR2rXomMYe1
-LVLJ12yTVk+tjVnbxW+tXZjsmsUkoRA53FfHEuv1fNLLgg6/c+ICgH6cnFwJK1WqtSNq9fnk7YLk
-LCUAD4fHG0heQS1V2B2Iws16KPT4nxNMgdjb0+jxjPoxg/yk5ZJYf6+Hw/R/nxnJt0HBVGwrtiOb
-HWwE9PixYtx4k8f/AAyUeHiyf6bil/UWNCKgA1LdCfbDxODLsPIMkIcUP3vFwy9X+S+r+Hi/q/zl
-ogYA1IIB+ePEg9jzjCUzKHDjlwS+ry/o/wC6beOrlUK/CByXviJN+fskHLOMCI+Fw+j15JcM4w9c
-fR/T/wA13okmqkEDbud8eJrj2FkkTUoyjGXh8UY5J/vP8yH0x/in9KwRkyle+G9rcCGgmdR4B2lx
-cMv99L/S+pdPGHQEUBQ0NKHbtkY83ddrYo5cAyQEf3B8H0Thk/cf5CcvDlJYYAE+2Btyr7fdh4nB
-HYsuHi8THXAM38f91I8PH9DfpMtasAK05HuSK48THJ2RLGZcc4QjGUcfH6vXOcRk/m/zJepwgPI/
-EOvGnv8AdjxKOxct0ZQifE8D+P8AvOHjj/B9M4/T/WaSAkbMBUkd+oxMmWl7GnlFieMeuWL+Pi8S
-H+Z/N9TXp8olPIciab19sb3ZR0EJafGRKPiZcko+ri/oR4fp4fR9Uv63p4m1iUXKo1PH/OuJOzZp
-ezhi18MWUiQ+r7Dwx9X9JYsspuanben9mGhTRDXZ/wA5xEni8Th4P6PFw+Hw/wA3+FfLGqRSBCAP
-U3Ar4dMYmyHZdpabHiwZfDMQPzA9Pq/mH9z9P871/wAz+lx+lCNQ7eH3ZMvKNdxXfIq//9eCiPfJ
-Ml1AMVaO42xVdQ0r2GKtUOKu41xV1KYq6hxVaEANcVbYEjbAVcoIO+BVrCh3xVcVAGKrQG/m27AY
-q4g+/wBOKrh0r3HTFVhDDqevhirVCHJ6bde+KtToWhNW2FT94xVbHVYIjy+P4eP0ZFtx8050pX1o
-zAcrJIF5xTyitZP99oRuvPsWwF22I0LRFvJLPKsdpEPWY8JpH2o7Ap8R8aimRbweJL7meWe3kjSO
-UvaExvyO5OKeClkl7cRWkcYqsZCgIdmr3APfFqlFM7DTF1O9Vbw8oYlqig05HwIxboZKRd/La6be
-W1jZIvqXFUdPskBlNfiwo+opNqVu73sUssKehH8MdtuSVU0K/NsDbE0jrTT71XJkkWJJBzSMmirT
-7KqT+1kSmMt1trolrqv1u5aVXjtVHqK7GNUJH2zx3ffwwLOW6hNNM9otvLKtrKKRMXJU8gPhovU/
-CcHCw4lDTvLWnwalZ3P6QNybct60YQqAT0JPsclEKSmEdhY/pPULm3kAiaNISUbYS8qlqftfD8OS
-Qp2OlST6tE87LPb2tJfTc8RV24Vp/qiuQRki7VJ5RexWkYItxLxZx/LyNA2GmyI2TjV7HTU0e4CR
-rGgjY8kFGFCKke+PCwjzWW19oT2SpAoeqEUNCWNMkESviSyGzt20uS6IaOW93EYruD9lae2LOORB
-2ltqWlre2shKX1+EFjcH4yp2oK9sWUpWmd7o+qzzSSXrrLa3VuLa5h5lVDruZBX4a1xYjmgLCcLq
-S6dptuOUcPKYqQFb09uS02rizmo65BqepwTQWyvGaDkDxUU9hinYBlunaDaDSoUuwkzMimVpO527
-9sBcMzNsb1prWaxS2QWz28CGKEsT6sbgn4dvtZFyNOLKF0qe3k0eS1nSnH+7+L4yxYfEoO/wqCuL
-dOA4il811c2T+jayFTUFX7jfo2LLw9l2tprss9p9ZijkkJohQ0oxFV38MWojhR2swxDg6SNb3USK
-4eNvhSUAcipyJZjITAphqWiX0yW2pS3jzRafAtzJcn+5mc/7qiVeh/yssi4cJEFLtcv7SzeB76wW
-C8YJNHJQOOD9myLeBTa2ljqV4kt7cRSiMBo7cLWqnooAxZSyUuutEM90hsZPqkinZo6A8fkMWPjI
-fU9AtrSSDU74tdurUZpPiI49NsmEylxBqbWLOe1Z7cKxXiaKu9V37YWsR6Kia9pOqXltNf2EaSsw
-SW4XmgbagDKNmwJ8FEzeYdTewljs4WF3YzqZRAnOMwA9qdOS9sLXOFFj0t1BfeZnNvI9pb3ClpQP
-gYMorSh6YEg0itXglWzluIr+ZZooiok+zULuK5NgZUGPeVLy7uzPLdSGWUcBzY1O++Qk6rLMk006
-11q7J3UcajLsbjyVdloSSBkjzYNKg9QfLAqq0fxAjqv04quZnI6b/KmNOZ+bkcYhtUDcf53q+r1L
-kNKDYAdPH6MHC5OLtTLjjER4R4f0+n/T/wCn/iaVzTagp0qMeFR2xlAEQMfDHi9PAP8AKfWs9aQg
-qSDXCIhZ9s6iQIJj67/hj9MvVwf1Fxdg5YHcdclwiqa/5Uz+N4wIGSuH0xH9X8f5rQJpTqDvQiuR
-I3asOuyQgYemcDLj4ckeP1/zlqs4qwAHscBCNPrZ4pGUeG5+mXpj/F/N/mf5rlYgHp8XUHEhlptd
-PDGUYiNZPr4o8XE0Zm6EAL0PTHhcj+V8tVUK4PC+j/JfzGjOaneo9wO2PCs+2M0iTLgldS4eAcPH
-D6Z/1uH0f1XGd1amx3qxA/Vjwhjj7XzxJNiRlPxfVGMv3n86LhcPyIUALWoJG+PCyxdsZochD6jk
-+gf3kv4lpmlWtDUVqKDHha8XamWERGPDUZ+JH0x9P/HXSOSenQAKRtSmEBp1GsyZZiRNGAEYcPo4
-Iw+nhaMsgJNADSvKgrXBwt/8qZeLi9Hif6rwR8T+t/X/AKf1LDI7QlKA71NcaaTrZnEcRrhMuPl6
-+P8An8SwkhiQQO22Fw2qL4qffFX/0ITTr75Jk4JXriq0DwxVd4Ab+IxVwNT0xV1d6Yq0y18DirYB
-AAp0NcVbKr0HXBatAbnElVpoWrSuBW+PLYDfDSu4+ONK1QVFBgVxoKin3Yq0OmKtsTsopiqyRSCG
-7dCMVXqqOCrV+X0YqpKgFqtdippv88iWzEd09Grqlu91ZsHheMpwkaoSQDYBVFTxwO5whqy1Sf8A
-R0Llog03qSOQCp9NHrQ17itcgS5Jx7WERqds0GoxPE7TNc1IWJaRLDSqlj4j9rEG2GOW26jdPJGk
-rG3JtgjBXpy2YbkVHw/5OFJCVW630skUDSPGSRSY/CwB+WFlkiF+u6c3qRSrO7XWwj2POqnqvjgT
-CQ5IMT67a6lHJqKiS4VhRWpyYN0JGKZBHx68Z5byOWkMKAcXdeYND8W37J/ysBDXHYq3lSS3K3Et
-tcFLmZWVy4HEqu6jgfh7Y0kiynC3vl+aUW0sEFzO/o8JpKhmkb/eh+fYLtwUDGwgwKlTRoBqUsBa
-a0WQBnZCeK1I5KajnxoOXL+ZcbQDRpjr69FzW3t4ZJfWkPDhQtSld9h9nvjbMikw0iLUGvrqR0WO
-J4YgscxI5IzGhrkWUzaZRpcQaqGuJo4kmVgkCjnz26VPTxwg0y4tkj1PzJqjf6NBbI4esajryH2e
-mS4gx4K3Y3PZahpka3N7DJHGzGgQ8Rv22wcTbExLI/JutXEizR3G8UHH6qGFSnIfEK4205BSa6ld
-RSxsGelPiDA/ZI71ONsIBBafc6jIgvWlNzaOHQwOocsPFQwONtnIqPlaFYr+TUhygiZjamKSgoT8
-RO1B0xtMjafyXMc0kws4zcSFRV1I4Bq8as5IphaYiQ5pbNrXmSytjbXdsCX/AHUckDh6MdgDiQzx
-gEoezhtLrR1tLxVg1S3LqrybIC5qTJxB3/lOCmYxkHYq5trYaVBdW1tFefA4a4LGJ1KHj8IPXfIs
-eM8RCCh0NngMk0MqTuBVmlRR1+9vuxbSTTI7jRbtorcvMheMAupWoI/1v7MXHGYXRYbdW97dXc1h
-EVqSwDlgKjuN8BDmgCMbTHSbDznppS1geMWpHIrJIrotP8mrdPlkgXHyEVdLNX03W7i8hu78xz2s
-xCG5hPJeJHw022xpj4oKvd2dtb6XG1qvG4tDsgALSL4E4kKBaD0zVtY+uTXX1SsKxAlUIYqakb98
-CeAOn8wDV2a1aAvIlKAVUqclaIwINrbXyoIFa4aRoXYcnIpSnuOmNspHdR0q4s77SrqzdgJraRnj
-boSVNVI+eFbKm/mD9H+nClYYWuEmuhESGLr+yT/K3hhpFWitYis9VNtqEkUEWoNKzRRjlT0SKUuC
-tdycaackaRB0fSb14ApjMtvD/pQhLFDJLvTc9vlhthCPelo0i20++nEKhVfiTQdx0yMi4eqiANkg
-IZtUvtwPiXc5djdfJVI/Z7dskebByV5BiKbU3wJRKhaVA6nc5Ayek0GhxZMUJShxcU/DyS45R4If
-6p/NaKnltuMkC6PUY4wySEDxwjI8M/6KxRTp9oeO4xtqiepFhzqobxHhjE25vaenhizcMPp4YS/0
-8RJpo6VIAr7ZOLiZ8EscuE1f9E8X1NKqkENXkdsLHHilOQjEXI/wtiMA8div7XXIEuTp8PDnjDIL
-9QhKN/zv6UG5FQA0p1oN8iC7DtHRwxifDGMeDL4cTDJ4k/8AKfXj4p8P0fxcEv8AeogeAock6ThN
-11cykivce2KKaKjqR1xSYkNsU6Hr3OLFdGkZUlRzYfs1ptkSXddn6OGTDKYj42WMv7ni4P3P8+PD
-6pu2CkgVBNBXCC4WfTjhOWFjF4nhw4/r/nLVVCVWvwnx64Sx0mIHLATFxnID+b9TTqPVZaVAPTxx
-C6vBwZpwj9MJyj/mxkpioqKEDsMlTigEtcdxXvgIQ1v2pT5YFf/RhJ2NMkyb3qMVcBua7DFW+P0H
-FXAGvTFXcRyOKtEUxVrfuaDFWwtaN9wyKtb8jtTFXcRirqAbqN++SCuqCB13xKtCnLau2RVdQGpx
-VZQnfFWyO/cYqtZjT4htiq9VBowND3HfFVi28twPRWiuXoORpkS24xab+XNFt9Lnuri7eNp3oI4z
-QAA9TQ9zgdnixSW6jDLLGKhEjjiZ1WnZ2p2AFa5XJzccuhUvLxvbyO7aZ3/R7ExRw12LgAtv9qhx
-g2ZQAdkfqRSXR5YfTLhV2QHiap+zXJNaS6LIL/UEErtElii/AG+Nm8d+i4s5pvqiSXEsNw92VMMi
-KokBVVBbZmcdgcXFNorzr5Ym0poZLqNIXnKm0eL94spfdpPWWqH2wpw5t6KWx2sVvwghYMG+KaRx
-UAe+Bypjq7WdDT6h9ZtC0ZH2n22p3oAMS0iW6SQQxPGFkLSu4p6o24vUdB2yDKUk2nhSC3maN3Le
-kU9FyeIBAqaDrWmLUDus0ywt7OOC+jjl+tP+85oAVBNQaexxb5clbWbnV2iDQ3ioLdkj9PgK8QtA
-CSTsMU4hxKq3CQaa968vO6SMiOoHEsSK02xYE70w+31u6tdVie7iDSBuTEdAOuw8cW+XJndzeWWr
-2fomP1mmXaOnUDFxdwbQUGgDToS3Eq/UsN1xcmMhIJXaRzXE93Z3KvPGo5xOoorbbg4qY0jo76FN
-IDwO8K09M8FqyUND8sWBV7G0u4rKDgUuESQyniQ5ZmFPi96YoSy3ur69kudH06FZHUOZOZEfCr7N
-y26ZNskQmlqda029lk1m1A9Vg6yR7oDxC70NO22LST3Ipm0htRheXgDNyWGSU0j9Vh8Bk/mWuKN1
-HV9FSwtJ3Nus0VqVMLStwEsjkGX0+Pw8U/1ciWUCLSO889WkVY3j2qKoIxUH54GRiSU1h842EsQJ
-mKLtu2wHti1y05u0LBpYt9Wtbu4k9V7l3IhI2UEVBOLZIHgV547aXWJBbu3quvp1VuMa/wAwP9mL
-IkDHuq2t5DZvb2jXcNxbPH9Wt4rdmKMS1OUgIHB46dMm45jSMGgwS24ikupOZB9Rl+Bup23GAr4l
-JI3l2SHWmjtZWW3SMOGY1JYnYE9+hyLbA2l31y0svMJuCBWNSnWnIt0+nFtKdtqA1hkitGAtY/iv
-a9eP8g+eENMkvu/Lln+kYrrTYwkisJHt+RClV6A++SY8SnquveW7YO+qW9xFdvdLcNVFahH7G1Bx
-2yQa55KVvLmu2+ryXQtLX0bdZDIee32vsj6MLET40fdQRWlw1xbUE0opOoNNgNtumQbI8kkTUHvL
-ubnGY3SikVrgLgapIONdQvSTSrKBTxy/G6+SrIFJWoP+UckebBuIgNRmJ98BSFViOG5OxrkOrtcm
-bGdLHGD64zM+X8/0/UvjNFG/zwEOx7O7SwYccYkmP1+LHhlPjlP0xl9XD9P9D/ilpcUBB2pQ400T
-18DjjGM5Y4xx+DPHwcWOf+2/V/H9X8+H8LuasBQnb8TjEOTre1MGXHwRlkx8IH0D+99Ih+8jxf0I
-8P8AR/pOZ6EmpAIoNu+SIoJPa2LjnKM5x8THCH0/5SH+U+r8cbXKvJ1qakDbIt8dSJyzZ8Inl8Qw
-jwY/3eaH9PijxS4fTwelpgBNyrsaVGSHJ1uvMYa4TkeEEwzTj/Fj/i8KX9NqoEtezAkHwrjWzXDW
-4oaueUE8OTxOGfD68Msv8XD/ALW36sZAIqWHwg+NcHCXNh2ngAAJlLLCBjHUSB/jl9PDx8fDGHoi
-2XHJ9+JO3vUY8LOfauLxMkozlHxYRj9J/vY/5T6v6P8AW9S2WRWQgEmtKD5YiNNfaPamLNjnETke
-MwlCPD9Phx9f/KyXqUeYG3AFj365KnTQ1cYw4Rjxk19c+Kc/631eH/V9C5eIoxqrg9R4Yls0k8MY
-gmUsWaE+LjiOL93t6fq+qPq/rcS8zArXdfjrx8R4ZHhdrl7Zx5IG+Mfv/F8L+DJi9P7ue/8AFLjy
-fxeuTjJHXqW+KtTTbGmUu0sMieKc58WWOaPFH+4jD1cMfV/F/d+n0O9RfiABBLcq7/wIx4Syh2rh
-jx0eEzzeNx1P1Rl/BLwsmKXo/rcElq3SDZuQNSSKbUOEwLZp+2sYA4pGPrySlCMPRwZI8MY/VL+P
-95woZmUbA1r275YXkTzaqTvxIyKH/9KGUGSZOoMVdQHYdetMVdU1BPQ9sVbqcVaxVxApirVAaBth
-44q3+z8O9TQn2xpWuFDU40rjjSrdwdh9OKtnqArfLEq4Amp+jwyKtDv/AFriq4big2oMVaUGlTkq
-Va32QfapwFXLuK+I/DAq2SRo4mlA5em1eJ7jIEt2I7tXOp22sXUEVnHJEyhPVMlCFKn4uJH2lb9n
-AHcYshrmn2oXFpb2rWUgeqIjAjk6lS3U+H0YJBuDdlA8VrLBbenBbwOJJWc1cBwCW4H49h3wRZSK
-xrHTHu1jiuTdTThvVkViEC/5CnqcLIBqewh01aRqsUY3MxHxPQdycjbWCSgby9jgspFluGnW4UNG
-BTgCN+2NtkYBPPLOv6pohTS76OPVdBuEVzYSlqQ892aEivE/zL9nG2jLhA3HNM9T0DRJ9Lu9U8uT
-NLHC3q3VgxX1YgO4/wAnwrxV/wCdskGqGSQ2JSG3aCedPrUziBERnj2Qc5RVEofj5L+3XFvuJG31
-IiU6e119SgobniSTH1X3xpmMdDdS1uzjtdOCRXXK7K1eCaM8nB68WX4fvxpriAgbG90s6XG0rPE0
-a8JTG/IBq917Y0z3Q0FteXt2RFIl1ZsQSxADgfMY0wnl4fp2TiCCxWw+rTwzwNEzLHIUWWMg9+Ne
-XXGmAkTulkel6KdSmM00U8iisMe6MCRRi6np0xptjM9VZ9JVCtylw8UAVozFEpeq+IZd1xps441R
-Syz1HWdR1KXTYD6kSR8jzPGir0b/AGWNJjKIOwRelW1/Bqwtp/Uh+FmD0rv2A+nGmUppdc6Dew66
-0UsssenXMtPWY8Aysf3g+jIliBYTOysNEji9GwE0TpJLzk9R2o6r+6B24/H7YEQieqE0Tyvq13NN
-etOtnEytDJDIpMkm9eQ3+HfJsMvkj9TOoW0s9mZmlgvI41iJI4rw2YU7NiuMIGxkjsLZbLUx6ysx
-Ec7jlsTUD2I8cWUrR9zpt9diNbG
-
---------------8B533A82922407D7C3D35A99--
-
-
---------------4CEB5E448DC077F35050C4BE--
-
-
---------------ABE49921AF9E83E8F9A7667E--
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.msg
deleted file mode 100644
index 33fc096..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.msg
+++ /dev/null
@@ -1,79 +0,0 @@
-X-POP3-Rcpt: specht@trachea
-Return-Path: hermes
-Received: (from hermes@localhost) by kulturbox.netmbx.de (8.7.1/8.7.1) id SAA04513 for specht; Wed, 19 Jun 1996 18:30:12 +0200
-Received: by netmbx.netmbx.de (/\==/\ Smail3.1.28.1)
- from mail.cs.tu-berlin.de with smtp
- id <m0uWPrO-0004wpC>; Wed, 19 Jun 96 18:12 MES
-Received: (from nobody@localhost) by mail.cs.tu-berlin.de (8.6.12/8.6.12) id SAA12413; Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Date: Wed, 19 Jun 1996 18:26:28 +0200
-Resent-Message-Id: <199606191626.SAA12413(a)mail.cs.tu-berlin.de>
-Resent-From: nobody(a)cs.tu-berlin.de
-Resent-To: kultur(a)kulturbox.netmbx.de
-Received: from gatekeeper.telekom.de ([194.25.15.11]) by mail.cs.tu-berlin.de (8.6.12/8.6.12) with SMTP id SAA11678 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:11:29 +0200
-Received: from ULM02.mnh.telekom.de by gatekeeper.telekom.de; (5.65v3.0/1.1.8.2/02Aug95-0132PM)
- id AA01376; Wed, 19 Jun 1996 18:11:27 +0200
-Received: from ulm02.mnh.telekom.de (deuschle(a)mnh.telekom.de) by ULM02.mnh.telekom.de (8.6.10/3) with SMTP id SAA30680 for <specht(a)kulturbox.de>; Wed, 19 Jun 1996 18:14:40 GMT
-Message-Id: <199606191814.SAA30680(a)ULM02.mnh.telekom.de>
-X-Sender: deuschle(a)ulm02.mnh.telekom.de
-X-Mailer: Windows Eudora Version 1.4.4
-Mime-Version: 1.0
-Content-Type: text/plain; charset="iso-8859-1"
-Content-Transfer-Encoding: quoted-printable
-Date: Wed, 19 Jun 1996 18:12:02 +0200
-To: Juergen Specht <specht(a)kulturbox.de>
-From: deuschle(a)mnh.telekom.de (Guenter Deuschle)
-Subject: Re: 34Mbit/s Netz
-X-Mozilla-Status: 0011
-
-Hallo Herr Specht,
-entschuldigen Sie vorab, dass ich Ihnen nicht telefonisch zur Verfuegung
-stehe, ich Praesentationen gehalten/ noch zu halten und viele
-Kundennachfragen zu projektieren. Nach Informationen des Produkt-Managers
-Temme steht der POP schon zur Verf=FCgung! Standort: voraussichtlich:
-Winterfeldstr. 21, 10781 Berlin.
-Der POP hat zur Zeit direkte 34M-Anbindungen zu folgenden Orten: Rostock,
-Hamburg, Hannover & Leipzig. 4 weitere werden in kuerze in Betrieb gehen.
-Damit haben Sie einen Besonderen Sicherheitsstandard verfuegbar!
-Kontakt muessen Sie ueber Ihre oerltliche Vertriebseinheit aufnehmen:
-entweder den Geschaefts-Kunden-Vertrieb oder das GrossKundenManagement.
-Diese Vertriebseinheiten greifen auf den oertlichen Technischen
-Vertriebs-Support zu. Die Informationen werden ueber TVS zur Vertriebseiheit
-gegeben und dann zu Ihnen.
- Sie benoetigen eine Standleitung von Ihrer Lokation zum Internet-POP
-Uebergabepunkt zu Ihrem Info-Server ist ein CISCO 1000-Router. Dann zahlen
-Sie neben den monatlichen Kosten fuer die Standleitung die Kosten fuer den
-Internet-Zugang: zB bei 64k: 1500DM bei 2GByte Freivolumen. 128K: 3000 DM
-bei 5 GB Freivolumen & 2M: 30.000 DM bei 50GB Freivolumen.
-Freundliche Gruesse=20
-Guenter Deuschle
-
-
->Sehr geehrter Herr Deuschle,
->Sie sind mir von Herrn Meyendriesch empfohlen worden.
->Ich versuche Informationen ueber das T-eigene 34Mbit/s Netz und den=20
->lokalen Pop-Berlin rauszufinden, bzw. was ein Anschluss kostet und=20
->wo man ihn herbekommt. Laut Herrn Schnick in Berlin gibt es den=20
->T-Pop nicht, laut Traceroute von Herrn Meyendriesch sehrwohl. Auch=20
->ist dies Netz in der IX vom Mai 96 erwaehnt.
->Koennen Sie mir helfen?
->
->MfG
->--=20
->Juergen Specht - KULTURBOX
->
->
-
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
-Dipl.-Ing. Guenter D E U S C H L E
-Deutsche Telekom AG Niederlassung 3 Hannover
-GrossKundenManagement - Techn. Vertriebs-Support:
-Team-Leiter Internet Online-Dienste
----------------------------------------------------
-GrKM-TVS-IOD Tel: +49-511-333-2772
-Vahrenwalder-Str. 245 FAX: +49-511-333-2751
-30179 Hannover eMail: deuschle(a)mnh.telekom.de=20
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
-=3D
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.ref
deleted file mode 100644
index 41a9c56..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/german.ref
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "Msg" => {
- "Subject" => "Re: 34Mbit/s Netz",
- "Type" => "text/plain",
- "To" => "Juergen Specht <specht\(a)kulturbox.de>",
- "From" => "deuschle\(a)mnh.telekom.de (Guenter Deuschle)",
- "Encoding" => "quoted-printable",
- "Charset" => "iso-8859-1"
- },
- "Parser" => {
- "Message" => "testmsgs/german.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.msg
deleted file mode 100644
index 1de1131..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.msg
+++ /dev/null
@@ -1,15 +0,0 @@
-Received: (qmail 24486 invoked by uid 501); 20 May 2000 01:55:02 -0000
-Date: Fri, 19 May 2000 21:55:02 -0400
-From: "Russell P. Sutherland" <russ(a)quist.on.ca>
-To: "Russell P. Sutherland" <russ(a)quist.on.ca>
-Subject: test message 1
-Message-ID: <20000519215502.A24482(a)quist.on.ca>
-Mime-Version: 1.0
-Content-transfer-encoding: 7BIT
-Content-Type: text/plain; charset=us-ascii
-X-Mailer: Mutt 1.0us
-Organization: Quist Consulting
-
-The header is not properly terminated; the "blank line"
-actually has a space in it.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.ref
deleted file mode 100644
index 82318a3..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/hdr-fakeout.ref
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/hdr-fakeout.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- Fail => 1,
- }
-}
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.msg
deleted file mode 100644
index 64859a3..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.msg
+++ /dev/null
@@ -1,58 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Sender: john-bigboote
-Date: Thu, 11 Apr 1996 01:10:30 -0500
-From: Eryq <eryq(a)rhine.gsfc.nasa.gov>
-Organization: Yoyodyne Propulsion Systems
-X-Mailer: Mozilla 2.0 (X11; I; Linux 1.1.18 i486)
-MIME-Version: 1.0
-To: john-bigboote(a)eryq.pr.mcs.net
-Subject: Two images for you...
-Content-Type: multipart/mixed; boundary="------------299A70B339B65A93542D2AE"
-
-This is a multi-part message in MIME format.
-
---------------299A70B339B65A93542D2AE
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-When unpacked, this message should produce two GIF files:
-
- * The 1st should be called "3d-compress.gif"
- * The 2nd should be called "3d-eye.gif"
-
-Different ways of specifying the filenames have been used.
-
---
- ____ __
- / __/__________/_/ Eryq (eryq(a)rhine.gsfc.nasa.gov)
- / __/ _/ / / , / Hughes STX Corporation, NASA/Goddard
-/___/_/ \ /\ /___
- /_/ /_____/ http://selsvr.stx.com/~eryq/
-
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="/evil/because:of\path\3d-=?ISO-8859-1?Q?=63?=om=?US-ASCII*EN?Q?pr?=ess.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif; name="3d-eye-is-an-evil-filename because of excessive length and verbosity. Unfortunately what can we do given an idiotic situation such as this?"
-Content-Transfer-Encoding: base64
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---------------299A70B339B65A93542D2AE--
-That was a multi-part message in MIME format.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.ref
deleted file mode 100644
index 02bde46..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2evil.ref
+++ /dev/null
@@ -1,36 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/multi-2evil.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "Two images for you...",
- "Type" => "multipart/mixed",
- "To" => "john-bigboote\(a)eryq.pr.mcs.net",
- "From" => "Eryq <eryq\(a)rhine.gsfc.nasa.gov>",
- "Encoding" => "7bit",
- "Boundary" => "------------299A70B339B65A93542D2AE",
- },
- "Part_1" => {
- "Size" => 417,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Part_2" => {
- "Filename" => qq{/evil/because:of\\path\\3d-compress.gif},
- "BodyFilename" => "3d-compress.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3" => {
- "BodyFilename" => "3d-eye-is-an-e.dat",
- "Size" => 357,
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.msg
deleted file mode 100644
index 847153b..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.msg
+++ /dev/null
@@ -1,57 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Sender: john-bigboote
-Date: Thu, 11 Apr 1996 01:10:30 -0500
-From: Eryq <eryq(a)rhine.gsfc.nasa.gov>
-Organization: Yoyodyne Propulsion Systems
-X-Mailer: Mozilla 2.0 (X11; I; Linux 1.1.18 i486)
-MIME-Version: 1.0
-To: john-bigboote(a)eryq.pr.mcs.net
-Subject: Two images for you...
-Content-Type: multipart/mixed; boundary="------------299A70B339B65A93542D2AE"
-
-This is a multi-part message in MIME format.
-
---------------299A70B339B65A93542D2AE
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-When unpacked, this message should produce two GIF files:
-
- * The 1st should be called "3d-compress.gif"
- * The 2nd should be called "3d-eye.gif"
-
-Different ways of specifying the filenames have been used.
-
---
- ____ __
- / __/__________/_/ Eryq (eryq(a)rhine.gsfc.nasa.gov)
- / __/ _/ / / , / Hughes STX Corporation, NASA/Goddard
-/___/_/ \ /\ /___
- /_/ /_____/ http://selsvr.stx.com/~eryq/
-
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-compress.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif; name="3d-eye.gif"
-Content-Transfer-Encoding: base64
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---------------299A70B339B65A93542D2AE--
-That was a multi-part message in MIME format.
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.ref
deleted file mode 100644
index 068fc22..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-2gifs.ref
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/multi-2gifs.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "Two images for you...",
- "Type" => "multipart/mixed",
- "To" => "john-bigboote\(a)eryq.pr.mcs.net",
- "From" => "Eryq <eryq\(a)rhine.gsfc.nasa.gov>",
- "Encoding" => "7bit",
- "Boundary" => "------------299A70B339B65A93542D2AE",
- "Preamble" => "This is a multi-part message in MIME format.\n",
- "Epilogue" => "That was a multi-part message in MIME format.\n",
- },
- "Part_1" => {
- "Size" => 417,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Part_2" => {
- "Filename" => "3d-compress.gif",
- "BodyFilename" => "3d-compress.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3" => {
- "Filename" => "3d-eye.gif",
- "BodyFilename" => "3d-eye.gif",
- "Size" => 357,
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.msg
deleted file mode 100644
index c0e6f47..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.msg
+++ /dev/null
@@ -1,40 +0,0 @@
-From: Nathaniel Borenstein <nsb(a)bellcore.com>
-To: Ned Freed <ned(a)innosoft.com>
-Subject: Sample message
-MIME-Version: 1.0
-Content-type: multipart/mixed; boundary="simple
- boundary"
-
-This is the preamble. It is to be ignored, though it
-is a handy place for mail composers to include an
-explanatory note to non-MIME conformant readers.
---simple boundary
-
-This is implicitly typed plain ASCII text.
-It does NOT end with a linebreak.
---simple boundary
-Content-type: text/x-numbers; charset=us-ascii
-Content-length: 30
-
-123456789
-123456789
-123456789
-
---simple boundary
-Content-type: text/x-alphabet; charset=us-ascii
-Content-length: 600
-
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-ABCDEFGHIJKLMNOPQRSTUVWXYZ012 ABCDEFGHIJKLMNOPQRSTUVWXYZ012
-
---simple boundary--
-This is the epilogue. It is also to be ignored.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.ref
deleted file mode 100644
index e204049..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-clen.ref
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/multi-clen.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "Sample message",
- "Type" => "multipart/mixed",
- "To" => " Ned Freed <ned\(a)innosoft.com>",
- "From" => "Nathaniel Borenstein <nsb\(a)bellcore.com>",
- "Encoding" => "7bit",
- "Boundary" => "simple boundary"
- },
- "Part_1" => {
- "Size" => 76,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Size" => 30,
- "Type" => "text/x-numbers",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Part_3" => {
- "Size" => 600,
- "Type" => "text/x-alphabet",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.msg
deleted file mode 100644
index 2e3bf37..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.msg
+++ /dev/null
@@ -1,30 +0,0 @@
-From: Nathaniel Borenstein <nsb(a)bellcore.com>
-To: Ned Freed <ned(a)innosoft.com>
-Subject: Sample digest message
-MIME-Version: 1.0
-Content-type: multipart/digest; boundary="simple
- boundary"
-
-This is the preamble. It is to be ignored, though it
-is a handy place for mail composers to include an
-explanatory note to non-MIME conformant readers.
---simple boundary
-
-From: noone(a)nowhere.org
-Subject: embedded message 1
-
-This is implicitly-typed ASCII text.
-It does NOT end with a linebreak.
---simple boundary
-Content-type: message/rfc822; charset=us-ascii
-
-From: noone(a)nowhere.org
-Subject: embedded message 2
-Content-type: text
-
-This is explicitly typed plain ASCII text.
-It DOES end with a linebreak.
-
---simple boundary--
-This is the epilogue. It is also to be ignored.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.ref
deleted file mode 100644
index 7b9f245..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-digest.ref
+++ /dev/null
@@ -1,39 +0,0 @@
-{
- "Part_1" => {
- "Type" => "message/rfc822",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Type" => "message/rfc822",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Part_1_1" => {
- "Size" => 70,
- "Subject" => "embedded message 1",
- "Type" => "text/plain",
- "From" => "noone\(a)nowhere.org",
- "Encoding" => "7bit"
- },
- "Part_2_1" => {
- "Size" => 73,
- "Subject" => "embedded message 2",
- "Type" => "text",
- "From" => "noone\(a)nowhere.org",
- "Encoding" => "7bit"
- },
- "Msg" => {
- "Subject" => "Sample digest message",
- "Type" => "multipart/digest",
- "To" => " Ned Freed <ned\(a)innosoft.com>",
- "From" => "Nathaniel Borenstein <nsb\(a)bellcore.com>",
- "Encoding" => "7bit",
- "Boundary" => "simple boundary"
- },
- "Parser" => {
- "Message" => "testmsgs/multi-digest.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-frag.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-frag.msg
deleted file mode 100644
index 040eb76..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-frag.msg
+++ /dev/null
@@ -1,90 +0,0 @@
-MIME-Version: 1.0
-From: Lord John Whorfin <whorfin(a)yoyodyne.com>
-To: <john-yaya(a)yoyodyne.com>
-Subject: A complex nested multipart example
-Content-Type: multipart/mixed;
- boundary=unique-boundary-1
-
-The preamble of the outer multipart message.
-Mail readers that understand multipart format
-should ignore this preamble.
-If you are reading this text, you might want to
-consider changing to a mail reader that understands
-how to properly display multipart messages.
---unique-boundary-1
-
-Part 1 of the outer message.
-[Note that the preceding blank line means
-no header fields were given and this is text,
-with charset US ASCII. It could have been
-done with explicit typing as in the next part.]
-
---unique-boundary-1
-Content-type: text/plain; charset=US-ASCII
-
-Part 2 of the outer message.
-This could have been part of the previous part,
-but illustrates explicit versus implicit
-typing of body parts.
-
---unique-boundary-1
-Subject: Part 3 of the outer message is multipart!
-Content-Type: multipart/parallel;
- boundary=unique-boundary-2
-
-A one-line preamble for the inner multipart message.
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-vise.gif"
-Subject: Part 1 of the inner message is a GIF, "3d-vise.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-eye.gif"
-Subject: Part 2 of the inner message is another GIF, "3d-eye.gif", but
- the terminating boundary is bad!
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
-XXXXXX--unique-boundary-2--
-
-The epilogue for the inner multipart message.
-
---unique-boundary-1
-Content-type: text/richtext
-
-This is <bold>part 4 of the outer message</bold>
-<smaller>as defined in RFC1341</smaller><nl>
-<nl>
-Isn't it <bigger><bigger>cool?</bigger></bigger>
-
---unique-boundary-1
-Content-Type: message/rfc822; name="nice.name";
-
-From: (mailbox in US-ASCII)
-To: (address in US-ASCII)
-Subject: Part 5 of the outer message is itself an RFC822 message!
-Content-Type: Text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: Quoted-printable
-
-Part 5 of the outer message is itself an RFC822 message!
-
---unique-boundary-1--
-
-The epilogue for the outer message.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.msg
deleted file mode 100644
index 58d26c4..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.msg
+++ /dev/null
@@ -1,198 +0,0 @@
-Date: Thu, 6 Jun 1996 15:50:39 +0400 (MOW DST)
-From: Starovoitov Igor <igor(a)fripp.aic.synapse.ru>
-To: eryq(a)rhine.gsfc.nasa.gov
-Subject: Need help
-MIME-Version: 1.0
-Content-Type: MULTIPART/MIXED; BOUNDARY="-490585488-806670346-834061839=:2195"
-
- This message is in MIME format. The first part should be readable text,
- while the remaining parts are likely unreadable without MIME-aware tools.
- Send mail to mime(a)docserver.cac.washington.edu for more info.
-
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-
-Dear Sir,
-
-I have a problem with Your MIME-Parser-1.9
-and multipart-nested messages.
-Not all parts are parsed.
-
-Here my Makefile, Your own multipart-nested.msg
-and its out after "make test".
-Some my messages not completely parsed too.
-
-Is this a bug?
-
-Thank You for help.
-
-
-Igor Starovoytov.
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195B(a)fripp.aic.synapse.ru>
-Content-Description: Makefile
-
-Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLQ0KIyBNYWtlZmlsZSBmb3IgTUlNRTo6DQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCiMgV2hlcmUgdG8gaW5zdGFsbCB0aGUgbGlicmFy
-aWVzOg0KU0lURV9QRVJMID0gL3Vzci9saWIvcGVybDUNCg0KIyBXaGF0IFBl
-cmw1IGlzIGNhbGxlZCBvbiB5b3VyIHN5c3RlbSAobm8gbmVlZCB0byBnaXZl
-IGVudGlyZSBwYXRoKToNClBFUkw1ICAgICA9IHBlcmwNCg0KIyBZb3UgcHJv
-YmFibHkgd29uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlc2UuLi4NCk1PRFMgICAg
-ICA9IERlY29kZXIucG0gRW50aXR5LnBtIEhlYWQucG0gUGFyc2VyLnBtIEJh
-c2U2NC5wbSBRdW90ZWRQcmludC5wbQ0KU0hFTEwgICAgID0gL2Jpbi9zaA0K
-DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tDQojIEZvciBpbnN0YWxsZXJzLi4uDQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCmhlbHA6CQ0KCUBlY2hvICJWYWxpZCB0YXJnZXRz
-OiB0ZXN0IGNsZWFuIGluc3RhbGwiDQoNCmNsZWFuOg0KCXJtIC1mIHRlc3Rv
-dXQvKg0KDQp0ZXN0Og0KIwlAZWNobyAiVEVTVElORyBIZWFkLnBtLi4uIg0K
-Iwkke1BFUkw1fSBNSU1FL0hlYWQucG0gICA8IHRlc3Rpbi9maXJzdC5oZHIg
-ICAgICAgPiB0ZXN0b3V0L0hlYWQub3V0DQojCUBlY2hvICJURVNUSU5HIERl
-Y29kZXIucG0uLi4iDQojCSR7UEVSTDV9IE1JTUUvRGVjb2Rlci5wbSA8IHRl
-c3Rpbi9xdW90LXByaW50LmJvZHkgPiB0ZXN0b3V0L0RlY29kZXIub3V0DQoj
-CUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAoc2ltcGxlKS4uLiINCiMJJHtQ
-RVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0aW4vc2ltcGxlLm1zZyAgICAg
-ID4gdGVzdG91dC9QYXJzZXIucy5vdXQNCiMJQGVjaG8gIlRFU1RJTkcgUGFy
-c2VyLnBtIChtdWx0aXBhcnQpLi4uIg0KIwkke1BFUkw1fSBNSU1FL1BhcnNl
-ci5wbSA8IHRlc3Rpbi9tdWx0aS0yZ2lmcy5tc2cgPiB0ZXN0b3V0L1BhcnNl
-ci5tLm91dA0KCUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAobXVsdGlfbmVz
-dGVkLm1zZykuLi4iDQoJJHtQRVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0
-aW4vbXVsdGktbmVzdGVkLm1zZyA+IHRlc3RvdXQvUGFyc2VyLm4ub3V0DQoJ
-QGVjaG8gIkFsbCB0ZXN0cyBwYXNzZWQuLi4gc2VlIC4vdGVzdG91dC9NT0RV
-TEUqLm91dCBmb3Igb3V0cHV0Ig0KDQppbnN0YWxsOg0KCUBpZiBbICEgLWQg
-JHtTSVRFX1BFUkx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJQbGVhc2UgZWRp
-dCB0aGUgU0lURV9QRVJMIGluIHlvdXIgTWFrZWZpbGUiOyBleGl0IC0xOyBc
-DQogICAgICAgIGZpICAgICAgICAgIA0KCUBpZiBbICEgLXcgJHtTSVRFX1BF
-Ukx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJObyBwZXJtaXNzaW9uLi4uIHNo
-b3VsZCB5b3UgYmUgcm9vdD8iOyBleGl0IC0xOyBcDQogICAgICAgIGZpICAg
-ICAgICAgIA0KCUBpZiBbICEgLWQgJHtTSVRFX1BFUkx9L01JTUUgXTsgdGhl
-biBcDQoJICAgIG1rZGlyICR7U0lURV9QRVJMfS9NSU1FOyBcDQogICAgICAg
-IGZpDQoJaW5zdGFsbCAtbSAwNjQ0IE1JTUUvKi5wbSAke1NJVEVfUEVSTH0v
-TUlNRQ0KDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgRm9yIGRldmVsb3BlciBv
-bmx5Li4uDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClBPRDJIVE1MX0ZMQUdTID0g
-LS1wb2RwYXRoPS4gLS1mbHVzaCAtLWh0bWxyb290PS4uDQpIVE1MUyAgICAg
-ICAgICA9ICR7TU9EUzoucG09Lmh0bWx9DQpWUEFUSCAgICAgICAgICA9IE1J
-TUUNCg0KLlNVRkZJWEVTOiAucG0gLnBvZCAuaHRtbA0KDQojIHYuMS44IGdl
-bmVyYXRlZCAzMCBBcHIgOTYNCiMgdi4xLjkgaXMgb25seSBiZWNhdXNlIDEu
-OCBmYWlsZWQgQ1BBTiBpbmdlc3Rpb24NCmRpc3Q6IGRvY3VtZW50ZWQJDQoJ
-VkVSU0lPTj0xLjkgOyBcDQoJbWtkaXN0IC10Z3ogTUlNRS1wYXJzZXItJCRW
-RVJTSU9OIDsgXA0KCWNwIE1LRElTVC9NSU1FLXBhcnNlci0kJFZFUlNJT04u
-dGd6ICR7SE9NRX0vcHVibGljX2h0bWwvY3Bhbg0KCQ0KZG9jdW1lbnRlZDog
-JHtIVE1MU30gJHtNT0RTfQ0KDQoucG0uaHRtbDoNCglwb2QyaHRtbCAke1BP
-RDJIVE1MX0ZMQUdTfSBcDQoJCS0tdGl0bGU9TUlNRTo6JCogXA0KCQktLWlu
-ZmlsZT0kPCBcDQoJCS0tb3V0ZmlsZT1kb2NzLyQqLmh0bWwNCg0KIy0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLQ0K
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="multi-nested.msg"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195C(a)fripp.aic.synapse.ru>
-Content-Description: test message
-
-TUlNRS1WZXJzaW9uOiAxLjANCkZyb206IExvcmQgSm9obiBXaG9yZmluIDx3
-aG9yZmluQHlveW9keW5lLmNvbT4NClRvOiA8am9obi15YXlhQHlveW9keW5l
-LmNvbT4NClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQgbXVsdGlwYXJ0IGV4
-YW1wbGUNCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOw0KICAgICBi
-b3VuZGFyeT11bmlxdWUtYm91bmRhcnktMQ0KDQpUaGUgcHJlYW1ibGUgb2Yg
-dGhlIG91dGVyIG11bHRpcGFydCBtZXNzYWdlLg0KTWFpbCByZWFkZXJzIHRo
-YXQgdW5kZXJzdGFuZCBtdWx0aXBhcnQgZm9ybWF0DQpzaG91bGQgaWdub3Jl
-IHRoaXMgcHJlYW1ibGUuDQpJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyB0ZXh0
-LCB5b3UgbWlnaHQgd2FudCB0bw0KY29uc2lkZXIgY2hhbmdpbmcgdG8gYSBt
-YWlsIHJlYWRlciB0aGF0IHVuZGVyc3RhbmRzDQpob3cgdG8gcHJvcGVybHkg
-ZGlzcGxheSBtdWx0aXBhcnQgbWVzc2FnZXMuDQotLXVuaXF1ZS1ib3VuZGFy
-eS0xDQoNClBhcnQgMSBvZiB0aGUgb3V0ZXIgbWVzc2FnZS4NCltOb3RlIHRo
-YXQgdGhlIHByZWNlZGluZyBibGFuayBsaW5lIG1lYW5zDQpubyBoZWFkZXIg
-ZmllbGRzIHdlcmUgZ2l2ZW4gYW5kIHRoaXMgaXMgdGV4dCwNCndpdGggY2hh
-cnNldCBVUyBBU0NJSS4gIEl0IGNvdWxkIGhhdmUgYmVlbg0KZG9uZSB3aXRo
-IGV4cGxpY2l0IHR5cGluZyBhcyBpbiB0aGUgbmV4dCBwYXJ0Ll0NCg0KLS11
-bmlxdWUtYm91bmRhcnktMQ0KQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBj
-aGFyc2V0PVVTLUFTQ0lJDQoNClBhcnQgMiBvZiB0aGUgb3V0ZXIgbWVzc2Fn
-ZS4NClRoaXMgY291bGQgaGF2ZSBiZWVuIHBhcnQgb2YgdGhlIHByZXZpb3Vz
-IHBhcnQsDQpidXQgaWxsdXN0cmF0ZXMgZXhwbGljaXQgdmVyc3VzIGltcGxp
-Y2l0DQp0eXBpbmcgb2YgYm9keSBwYXJ0cy4NCg0KLS11bmlxdWUtYm91bmRh
-cnktMQ0KU3ViamVjdDogUGFydCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlz
-IG11bHRpcGFydCENCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3BhcmFsbGVs
-Ow0KICAgICBib3VuZGFyeT11bmlxdWUtYm91bmRhcnktMg0KDQpBIG9uZS1s
-aW5lIHByZWFtYmxlIGZvciB0aGUgaW5uZXIgbXVsdGlwYXJ0IG1lc3NhZ2Uu
-DQotLXVuaXF1ZS1ib3VuZGFyeS0yDQpDb250ZW50LVR5cGU6IGltYWdlL2dp
-Zg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0DQpDb250ZW50
-LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIzZC1jb21wcmVzcy5n
-aWYiDQpTdWJqZWN0OiBQYXJ0IDEgb2YgdGhlIGlubmVyIG1lc3NhZ2UgaXMg
-YSBHSUYsICIzZC1jb21wcmVzcy5naWYiDQoNClIwbEdPRGRoS0FBb0FPTUFB
-QUFBQUFBQWdCNlEveTlQVDI1dWJuQ0FrS0JTTGI2K3Z1Zm41L1hlcy8rbEFQ
-LzZ6UUFBQUFBQQ0KQUFBQUFBQUFBQ3dBQUFBQUtBQW9BQUFFL2hESlNhdTll
-SkxNT3lZYmNveGthWjVvQ2tvSDZMNXdMTWZpV3FkNGJ0WmhteGJBDQpvRkNZ
-NDdFSXFNSmd5V3cyQVRqajdhUmtBcTVZd0RNbDlWR3RLTzBTaXVvaVRWbHNj
-c3h0OWM0SGdYeFVJQTBFQVZPVmZES1QNCjhIbDFCM2tEQVlZbGUyMDJYbkdH
-Z29NSGhZY2tpV1Z1UjMrT1RnQ0dlWlJzbG90d2dKMmxuWWlnZlpkVGpRVUxy
-N0FMQlpOMA0KcVR1cmpIZ0xLQXUwQjVXcW9wbTdKNzJldFFOOHQ4SWp1cnkr
-d010dnc4L0h2N1lsZnMwQnhDYkdxTW1LMHlPT1EwR1RDZ3JSDQoyYmh3Skds
-WEpRWUc2bU1Lb2VOb1dTYnpDV0lBQ2U1Snd4UW0zQWtEQWJVQVFDaVFoRFpF
-QmVCbDZhZmdDc09CckQ0NWVkSXYNClFjZUdXU01ldnBPWWhsNkNreWRCSGhC
-WlFtR0tqaWhWc2h5cGpCOUNsQUhaTVR1Z3pPVTdtemhCUGlTWjV1RE5uQTdi
-L2FUWg0KMG1oTW5mbDBwREJGYTZiVUVsU1BXYjBxdFl1SHJ4bHdjUjE3WXNX
-TXMyalRxbDNMRmtRRUFEcz0NCi0tdW5pcXVlLWJvdW5kYXJ5LTINCkNvbnRl
-bnQtVHlwZTogaW1hZ2UvZ2lmDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n
-OiBiYXNlNjQNCkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5h
-bWU9IjNkLWV5ZS5naWYiDQpTdWJqZWN0OiBQYXJ0IDIgb2YgdGhlIGlubmVy
-IG1lc3NhZ2UgaXMgYW5vdGhlciBHSUYsICIzZC1leWUuZ2lmIg0KDQpSMGxH
-T0RkaEtBQW9BUE1BQUFBQUFBQUF6TjN1Lzc2K3ZvaUlpRzV1YnN6ZDd2Ly8v
-K2ZuNXdBQUFBQUFBQUFBQUFBQUFBQUENCkFBQUFBQUFBQUN3QUFBQUFLQUFv
-QUFBRS9oREpTYXU5ZUpiTU95NGJNb3hrYVo1b0Nrb0Q2TDV3TE1maVduczQx
-b1p0N2xNNw0KVnVqbkM5NklSVnNQV1FFNG54UGprdm1zUW11OG9jL0tCVVNW
-V2s3WGVwR0dMZU5yeG94Sk8xTWpJTGp0aGcva1dYUTZ3Ty83DQorM2RDZVJS
-amZBS0hpSW1KQVYrRENGMEJpVzVWQW8xQ0VsYVJoNU5qbGtlWW1weVRncGNU
-QUtHaWFhU2Zwd0twVlFheFZhdEwNCnJVOEdhUWRPQkFRQUI3K3lYbGlYVHJn
-QXhzVzR2RmFidjhCT3RCc0J0N2NHdndDSVQ5bk95TkVJeHVDNHpycUt6YzlY
-Yk9ESg0KdnM3WTVld0gzZDdGeGUzakI0cmo4dDZQdU5hNnIyYmhLUVhOMTdG
-WUNCTXFUR2lCelNOaHg1ZzBuRU1obHNTSmppUll2RGp3DQpFMGNkR3hRL2dz
-d29zb0tVa211VTJGbkpjc1NLR1RCanlweEpzeWFJQ0FBNw0KLS11bmlxdWUt
-Ym91bmRhcnktMi0tDQoNClRoZSBlcGlsb2d1ZSBmb3IgdGhlIGlubmVyIG11
-bHRpcGFydCBtZXNzYWdlLg0KDQotLXVuaXF1ZS1ib3VuZGFyeS0xDQpDb250
-ZW50LXR5cGU6IHRleHQvcmljaHRleHQNCg0KVGhpcyBpcyA8Ym9sZD5wYXJ0
-IDQgb2YgdGhlIG91dGVyIG1lc3NhZ2U8L2JvbGQ+DQo8c21hbGxlcj5hcyBk
-ZWZpbmVkIGluIFJGQzEzNDE8L3NtYWxsZXI+PG5sPg0KPG5sPg0KSXNuJ3Qg
-aXQgPGJpZ2dlcj48YmlnZ2VyPmNvb2w/PC9iaWdnZXI+PC9iaWdnZXI+DQoN
-Ci0tdW5pcXVlLWJvdW5kYXJ5LTENCkNvbnRlbnQtVHlwZTogbWVzc2FnZS9y
-ZmM4MjINCg0KRnJvbTogKG1haWxib3ggaW4gVVMtQVNDSUkpDQpUbzogKGFk
-ZHJlc3MgaW4gVVMtQVNDSUkpDQpTdWJqZWN0OiBQYXJ0IDUgb2YgdGhlIG91
-dGVyIG1lc3NhZ2UgaXMgaXRzZWxmIGFuIFJGQzgyMiBtZXNzYWdlIQ0KQ29u
-dGVudC1UeXBlOiBUZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTENCkNv
-bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFF1b3RlZC1wcmludGFibGUNCg0K
-UGFydCA1IG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIGl0c2VsZiBhbiBSRkM4
-MjIgbWVzc2FnZSENCg0KLS11bmlxdWUtYm91bmRhcnktMS0tDQoNClRoZSBl
-cGlsb2d1ZSBmb3IgdGhlIG91dGVyIG1lc3NhZ2UuDQo=
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Parser.n.out"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195D(a)fripp.aic.synapse.ru>
-Content-Description: out from parser
-
-KiBXYWl0aW5nIGZvciBhIE1JTUUgbWVzc2FnZSBmcm9tIFNURElOLi4uDQo9
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT09PT09PT09PT09PT0NCkNvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L21peGVk
-DQpCb2R5LWZpbGU6IE5PTkUNClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQg
-bXVsdGlwYXJ0IGV4YW1wbGUNCk51bS1wYXJ0czogMw0KLS0NCiAgICBDb250
-ZW50LXR5cGU6IHRleHQvcGxhaW4NCiAgICBCb2R5LWZpbGU6IC4vdGVzdG91
-dC9tc2ctMzUzOC0xLmRvYw0KICAgIC0tDQogICAgQ29udGVudC10eXBlOiB0
-ZXh0L3BsYWluDQogICAgQm9keS1maWxlOiAuL3Rlc3RvdXQvbXNnLTM1Mzgt
-Mi5kb2MNCiAgICAtLQ0KICAgIENvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L3Bh
-cmFsbGVsDQogICAgQm9keS1maWxlOiBOT05FDQogICAgU3ViamVjdDogUGFy
-dCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIG11bHRpcGFydCENCiAgICBO
-dW0tcGFydHM6IDINCiAgICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGlt
-YWdlL2dpZg0KICAgICAgICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1jb21w
-cmVzcy5naWYNCiAgICAgICAgU3ViamVjdDogUGFydCAxIG9mIHRoZSBpbm5l
-ciBtZXNzYWdlIGlzIGEgR0lGLCAiM2QtY29tcHJlc3MuZ2lmIg0KICAgICAg
-ICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGltYWdlL2dpZg0KICAgICAg
-ICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1leWUuZ2lmDQogICAgICAgIFN1
-YmplY3Q6IFBhcnQgMiBvZiB0aGUgaW5uZXIgbWVzc2FnZSBpcyBhbm90aGVy
-IEdJRiwgIjNkLWV5ZS5naWYiDQogICAgICAgIC0tDQo9PT09PT09PT09PT09
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT0NCg0K
----490585488-806670346-834061839=:2195--
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.ref
deleted file mode 100644
index 67a68c4..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor.ref
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "Part_1" => {
- "Size" => 293,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "US-ASCII"
- },
- "Part_2" => {
- "Filename" => "Makefile",
- "Size" => 2442,
- "Type" => "text/plain",
- "Encoding" => "base64",
- "Charset" => "US-ASCII"
- },
- "Part_3" => {
- "Filename" => "multi-nested.msg",
- "Size" => 3272,
- "Type" => "text/plain",
- "Encoding" => "base64",
- "Charset" => "US-ASCII"
- },
- "Part_4" => {
- "Filename" => "Parser.n.out",
- "Size" => 906,
- "Type" => "text/plain",
- "Encoding" => "base64",
- "Charset" => "US-ASCII"
- },
- "Msg" => {
- "Subject" => "Need help",
- "Type" => "multipart/mixed",
- "To" => "eryq\(a)rhine.gsfc.nasa.gov",
- "From" => "Starovoitov Igor <igor\(a)fripp.aic.synapse.ru>",
- "Encoding" => "7bit",
- "Boundary" => "-490585488-806670346-834061839=:2195"
- },
- "Parser" => {
- "Message" => "testmsgs/multi-igor.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.msg
deleted file mode 100644
index 195cf48..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.msg
+++ /dev/null
@@ -1,198 +0,0 @@
-Date: Thu, 6 Jun 1996 15:50:39 +0400 (MOW DST)
-From: Starovoitov Igor <igor(a)fripp.aic.synapse.ru>
-To: eryq(a)rhine.gsfc.nasa.gov
-Subject: Need help
-MIME-Version: 1.0
-Content-Type: MULTIPART/MIXED; BOUNDARY="-490585488-806670346-834061839=:2195"
-
- This message is in MIME format. The first part should be readable text,
- while the remaining parts are likely unreadable without MIME-aware tools.
- Send mail to mime(a)docserver.cac.washington.edu for more info.
-
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII
-
-Dear Sir,
-
-I have a problem with Your MIME-Parser-1.9
-and multipart-nested messages.
-Not all parts are parsed.
-
-Here my Makefile, Your own multipart-nested.msg
-and its out after "make test".
-Some my messages not completely parsed too.
-
-Is this a bug?
-
-Thank You for help.
-
-
-Igor Starovoytov.
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name=Makefile
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195B(a)fripp.aic.synapse.ru>
-Content-Description: Makefile
-
-Iy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLQ0KIyBNYWtlZmlsZSBmb3IgTUlNRTo6DQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCiMgV2hlcmUgdG8gaW5zdGFsbCB0aGUgbGlicmFy
-aWVzOg0KU0lURV9QRVJMID0gL3Vzci9saWIvcGVybDUNCg0KIyBXaGF0IFBl
-cmw1IGlzIGNhbGxlZCBvbiB5b3VyIHN5c3RlbSAobm8gbmVlZCB0byBnaXZl
-IGVudGlyZSBwYXRoKToNClBFUkw1ICAgICA9IHBlcmwNCg0KIyBZb3UgcHJv
-YmFibHkgd29uJ3QgbmVlZCB0byBjaGFuZ2UgdGhlc2UuLi4NCk1PRFMgICAg
-ICA9IERlY29kZXIucG0gRW50aXR5LnBtIEhlYWQucG0gUGFyc2VyLnBtIEJh
-c2U2NC5wbSBRdW90ZWRQcmludC5wbQ0KU0hFTEwgICAgID0gL2Jpbi9zaA0K
-DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tDQojIEZvciBpbnN0YWxsZXJzLi4uDQojLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tDQoNCmhlbHA6CQ0KCUBlY2hvICJWYWxpZCB0YXJnZXRz
-OiB0ZXN0IGNsZWFuIGluc3RhbGwiDQoNCmNsZWFuOg0KCXJtIC1mIHRlc3Rv
-dXQvKg0KDQp0ZXN0Og0KIwlAZWNobyAiVEVTVElORyBIZWFkLnBtLi4uIg0K
-Iwkke1BFUkw1fSBNSU1FL0hlYWQucG0gICA8IHRlc3Rpbi9maXJzdC5oZHIg
-ICAgICAgPiB0ZXN0b3V0L0hlYWQub3V0DQojCUBlY2hvICJURVNUSU5HIERl
-Y29kZXIucG0uLi4iDQojCSR7UEVSTDV9IE1JTUUvRGVjb2Rlci5wbSA8IHRl
-c3Rpbi9xdW90LXByaW50LmJvZHkgPiB0ZXN0b3V0L0RlY29kZXIub3V0DQoj
-CUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAoc2ltcGxlKS4uLiINCiMJJHtQ
-RVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0aW4vc2ltcGxlLm1zZyAgICAg
-ID4gdGVzdG91dC9QYXJzZXIucy5vdXQNCiMJQGVjaG8gIlRFU1RJTkcgUGFy
-c2VyLnBtIChtdWx0aXBhcnQpLi4uIg0KIwkke1BFUkw1fSBNSU1FL1BhcnNl
-ci5wbSA8IHRlc3Rpbi9tdWx0aS0yZ2lmcy5tc2cgPiB0ZXN0b3V0L1BhcnNl
-ci5tLm91dA0KCUBlY2hvICJURVNUSU5HIFBhcnNlci5wbSAobXVsdGlfbmVz
-dGVkLm1zZykuLi4iDQoJJHtQRVJMNX0gTUlNRS9QYXJzZXIucG0gPCB0ZXN0
-aW4vbXVsdGktbmVzdGVkLm1zZyA+IHRlc3RvdXQvUGFyc2VyLm4ub3V0DQoJ
-QGVjaG8gIkFsbCB0ZXN0cyBwYXNzZWQuLi4gc2VlIC4vdGVzdG91dC9NT0RV
-TEUqLm91dCBmb3Igb3V0cHV0Ig0KDQppbnN0YWxsOg0KCUBpZiBbICEgLWQg
-JHtTSVRFX1BFUkx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJQbGVhc2UgZWRp
-dCB0aGUgU0lURV9QRVJMIGluIHlvdXIgTWFrZWZpbGUiOyBleGl0IC0xOyBc
-DQogICAgICAgIGZpICAgICAgICAgIA0KCUBpZiBbICEgLXcgJHtTSVRFX1BF
-Ukx9IF07IHRoZW4gXA0KCSAgICBlY2hvICJObyBwZXJtaXNzaW9uLi4uIHNo
-b3VsZCB5b3UgYmUgcm9vdD8iOyBleGl0IC0xOyBcDQogICAgICAgIGZpICAg
-ICAgICAgIA0KCUBpZiBbICEgLWQgJHtTSVRFX1BFUkx9L01JTUUgXTsgdGhl
-biBcDQoJICAgIG1rZGlyICR7U0lURV9QRVJMfS9NSU1FOyBcDQogICAgICAg
-IGZpDQoJaW5zdGFsbCAtbSAwNjQ0IE1JTUUvKi5wbSAke1NJVEVfUEVSTH0v
-TUlNRQ0KDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgRm9yIGRldmVsb3BlciBv
-bmx5Li4uDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoNClBPRDJIVE1MX0ZMQUdTID0g
-LS1wb2RwYXRoPS4gLS1mbHVzaCAtLWh0bWxyb290PS4uDQpIVE1MUyAgICAg
-ICAgICA9ICR7TU9EUzoucG09Lmh0bWx9DQpWUEFUSCAgICAgICAgICA9IE1J
-TUUNCg0KLlNVRkZJWEVTOiAucG0gLnBvZCAuaHRtbA0KDQojIHYuMS44IGdl
-bmVyYXRlZCAzMCBBcHIgOTYNCiMgdi4xLjkgaXMgb25seSBiZWNhdXNlIDEu
-OCBmYWlsZWQgQ1BBTiBpbmdlc3Rpb24NCmRpc3Q6IGRvY3VtZW50ZWQJDQoJ
-VkVSU0lPTj0xLjkgOyBcDQoJbWtkaXN0IC10Z3ogTUlNRS1wYXJzZXItJCRW
-RVJTSU9OIDsgXA0KCWNwIE1LRElTVC9NSU1FLXBhcnNlci0kJFZFUlNJT04u
-dGd6ICR7SE9NRX0vcHVibGljX2h0bWwvY3Bhbg0KCQ0KZG9jdW1lbnRlZDog
-JHtIVE1MU30gJHtNT0RTfQ0KDQoucG0uaHRtbDoNCglwb2QyaHRtbCAke1BP
-RDJIVE1MX0ZMQUdTfSBcDQoJCS0tdGl0bGU9TUlNRTo6JCogXA0KCQktLWlu
-ZmlsZT0kPCBcDQoJCS0tb3V0ZmlsZT1kb2NzLyQqLmh0bWwNCg0KIy0tLS0t
-LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
-LS0tLS0tLS0tLQ0K
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="multi-nested.msg"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195C(a)fripp.aic.synapse.ru>
-Content-Description: test message
-
-TUlNRS1WZXJzaW9uOiAxLjANCkZyb206IExvcmQgSm9obiBXaG9yZmluIDx3
-aG9yZmluQHlveW9keW5lLmNvbT4NClRvOiA8am9obi15YXlhQHlveW9keW5l
-LmNvbT4NClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQgbXVsdGlwYXJ0IGV4
-YW1wbGUNCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L21peGVkOw0KICAgICBi
-b3VuZGFyeT11bmlxdWUtYm91bmRhcnktMQ0KDQpUaGUgcHJlYW1ibGUgb2Yg
-dGhlIG91dGVyIG11bHRpcGFydCBtZXNzYWdlLg0KTWFpbCByZWFkZXJzIHRo
-YXQgdW5kZXJzdGFuZCBtdWx0aXBhcnQgZm9ybWF0DQpzaG91bGQgaWdub3Jl
-IHRoaXMgcHJlYW1ibGUuDQpJZiB5b3UgYXJlIHJlYWRpbmcgdGhpcyB0ZXh0
-LCB5b3UgbWlnaHQgd2FudCB0bw0KY29uc2lkZXIgY2hhbmdpbmcgdG8gYSBt
-YWlsIHJlYWRlciB0aGF0IHVuZGVyc3RhbmRzDQpob3cgdG8gcHJvcGVybHkg
-ZGlzcGxheSBtdWx0aXBhcnQgbWVzc2FnZXMuDQotLXVuaXF1ZS1ib3VuZGFy
-eS0xDQoNClBhcnQgMSBvZiB0aGUgb3V0ZXIgbWVzc2FnZS4NCltOb3RlIHRo
-YXQgdGhlIHByZWNlZGluZyBibGFuayBsaW5lIG1lYW5zDQpubyBoZWFkZXIg
-ZmllbGRzIHdlcmUgZ2l2ZW4gYW5kIHRoaXMgaXMgdGV4dCwNCndpdGggY2hh
-cnNldCBVUyBBU0NJSS4gIEl0IGNvdWxkIGhhdmUgYmVlbg0KZG9uZSB3aXRo
-IGV4cGxpY2l0IHR5cGluZyBhcyBpbiB0aGUgbmV4dCBwYXJ0Ll0NCg0KLS11
-bmlxdWUtYm91bmRhcnktMQ0KQ29udGVudC10eXBlOiB0ZXh0L3BsYWluOyBj
-aGFyc2V0PVVTLUFTQ0lJDQoNClBhcnQgMiBvZiB0aGUgb3V0ZXIgbWVzc2Fn
-ZS4NClRoaXMgY291bGQgaGF2ZSBiZWVuIHBhcnQgb2YgdGhlIHByZXZpb3Vz
-IHBhcnQsDQpidXQgaWxsdXN0cmF0ZXMgZXhwbGljaXQgdmVyc3VzIGltcGxp
-Y2l0DQp0eXBpbmcgb2YgYm9keSBwYXJ0cy4NCg0KLS11bmlxdWUtYm91bmRh
-cnktMQ0KU3ViamVjdDogUGFydCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlz
-IG11bHRpcGFydCENCkNvbnRlbnQtVHlwZTogbXVsdGlwYXJ0L3BhcmFsbGVs
-Ow0KICAgICBib3VuZGFyeT11bmlxdWUtYm91bmRhcnktMg0KDQpBIG9uZS1s
-aW5lIHByZWFtYmxlIGZvciB0aGUgaW5uZXIgbXVsdGlwYXJ0IG1lc3NhZ2Uu
-DQotLXVuaXF1ZS1ib3VuZGFyeS0yDQpDb250ZW50LVR5cGU6IGltYWdlL2dp
-Zg0KQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0DQpDb250ZW50
-LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSIzZC1jb21wcmVzcy5n
-aWYiDQpTdWJqZWN0OiBQYXJ0IDEgb2YgdGhlIGlubmVyIG1lc3NhZ2UgaXMg
-YSBHSUYsICIzZC1jb21wcmVzcy5naWYiDQoNClIwbEdPRGRoS0FBb0FPTUFB
-QUFBQUFBQWdCNlEveTlQVDI1dWJuQ0FrS0JTTGI2K3Z1Zm41L1hlcy8rbEFQ
-LzZ6UUFBQUFBQQ0KQUFBQUFBQUFBQ3dBQUFBQUtBQW9BQUFFL2hESlNhdTll
-SkxNT3lZYmNveGthWjVvQ2tvSDZMNXdMTWZpV3FkNGJ0WmhteGJBDQpvRkNZ
-NDdFSXFNSmd5V3cyQVRqajdhUmtBcTVZd0RNbDlWR3RLTzBTaXVvaVRWbHNj
-c3h0OWM0SGdYeFVJQTBFQVZPVmZES1QNCjhIbDFCM2tEQVlZbGUyMDJYbkdH
-Z29NSGhZY2tpV1Z1UjMrT1RnQ0dlWlJzbG90d2dKMmxuWWlnZlpkVGpRVUxy
-N0FMQlpOMA0KcVR1cmpIZ0xLQXUwQjVXcW9wbTdKNzJldFFOOHQ4SWp1cnkr
-d010dnc4L0h2N1lsZnMwQnhDYkdxTW1LMHlPT1EwR1RDZ3JSDQoyYmh3Skds
-WEpRWUc2bU1Lb2VOb1dTYnpDV0lBQ2U1Snd4UW0zQWtEQWJVQVFDaVFoRFpF
-QmVCbDZhZmdDc09CckQ0NWVkSXYNClFjZUdXU01ldnBPWWhsNkNreWRCSGhC
-WlFtR0tqaWhWc2h5cGpCOUNsQUhaTVR1Z3pPVTdtemhCUGlTWjV1RE5uQTdi
-L2FUWg0KMG1oTW5mbDBwREJGYTZiVUVsU1BXYjBxdFl1SHJ4bHdjUjE3WXNX
-TXMyalRxbDNMRmtRRUFEcz0NCi0tdW5pcXVlLWJvdW5kYXJ5LTINCkNvbnRl
-bnQtVHlwZTogaW1hZ2UvZ2lmDQpDb250ZW50LVRyYW5zZmVyLUVuY29kaW5n
-OiBiYXNlNjQNCkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5h
-bWU9IjNkLWV5ZS5naWYiDQpTdWJqZWN0OiBQYXJ0IDIgb2YgdGhlIGlubmVy
-IG1lc3NhZ2UgaXMgYW5vdGhlciBHSUYsICIzZC1leWUuZ2lmIg0KDQpSMGxH
-T0RkaEtBQW9BUE1BQUFBQUFBQUF6TjN1Lzc2K3ZvaUlpRzV1YnN6ZDd2Ly8v
-K2ZuNXdBQUFBQUFBQUFBQUFBQUFBQUENCkFBQUFBQUFBQUN3QUFBQUFLQUFv
-QUFBRS9oREpTYXU5ZUpiTU95NGJNb3hrYVo1b0Nrb0Q2TDV3TE1maVduczQx
-b1p0N2xNNw0KVnVqbkM5NklSVnNQV1FFNG54UGprdm1zUW11OG9jL0tCVVNW
-V2s3WGVwR0dMZU5yeG94Sk8xTWpJTGp0aGcva1dYUTZ3Ty83DQorM2RDZVJS
-amZBS0hpSW1KQVYrRENGMEJpVzVWQW8xQ0VsYVJoNU5qbGtlWW1weVRncGNU
-QUtHaWFhU2Zwd0twVlFheFZhdEwNCnJVOEdhUWRPQkFRQUI3K3lYbGlYVHJn
-QXhzVzR2RmFidjhCT3RCc0J0N2NHdndDSVQ5bk95TkVJeHVDNHpycUt6YzlY
-Yk9ESg0KdnM3WTVld0gzZDdGeGUzakI0cmo4dDZQdU5hNnIyYmhLUVhOMTdG
-WUNCTXFUR2lCelNOaHg1ZzBuRU1obHNTSmppUll2RGp3DQpFMGNkR3hRL2dz
-d29zb0tVa211VTJGbkpjc1NLR1RCanlweEpzeWFJQ0FBNw0KLS11bmlxdWUt
-Ym91bmRhcnktMi0tDQoNClRoZSBlcGlsb2d1ZSBmb3IgdGhlIGlubmVyIG11
-bHRpcGFydCBtZXNzYWdlLg0KDQotLXVuaXF1ZS1ib3VuZGFyeS0xDQpDb250
-ZW50LXR5cGU6IHRleHQvcmljaHRleHQNCg0KVGhpcyBpcyA8Ym9sZD5wYXJ0
-IDQgb2YgdGhlIG91dGVyIG1lc3NhZ2U8L2JvbGQ+DQo8c21hbGxlcj5hcyBk
-ZWZpbmVkIGluIFJGQzEzNDE8L3NtYWxsZXI+PG5sPg0KPG5sPg0KSXNuJ3Qg
-aXQgPGJpZ2dlcj48YmlnZ2VyPmNvb2w/PC9iaWdnZXI+PC9iaWdnZXI+DQoN
-Ci0tdW5pcXVlLWJvdW5kYXJ5LTENCkNvbnRlbnQtVHlwZTogbWVzc2FnZS9y
-ZmM4MjINCg0KRnJvbTogKG1haWxib3ggaW4gVVMtQVNDSUkpDQpUbzogKGFk
-ZHJlc3MgaW4gVVMtQVNDSUkpDQpTdWJqZWN0OiBQYXJ0IDUgb2YgdGhlIG91
-dGVyIG1lc3NhZ2UgaXMgaXRzZWxmIGFuIFJGQzgyMiBtZXNzYWdlIQ0KQ29u
-dGVudC1UeXBlOiBUZXh0L3BsYWluOyBjaGFyc2V0PUlTTy04ODU5LTENCkNv
-bnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IFF1b3RlZC1wcmludGFibGUNCg0K
-UGFydCA1IG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIGl0c2VsZiBhbiBSRkM4
-MjIgbWVzc2FnZSENCg0KLS11bmlxdWUtYm91bmRhcnktMS0tDQoNClRoZSBl
-cGlsb2d1ZSBmb3IgdGhlIG91dGVyIG1lc3NhZ2UuDQo=
----490585488-806670346-834061839=:2195
-Content-Type: TEXT/PLAIN; charset=US-ASCII; name="Parser.n.out"
-Content-Transfer-Encoding: BASE64
-Content-ID: <Pine.LNX.3.91.960606155039.2195D(a)fripp.aic.synapse.ru>
-Content-Description: out from parser
-
-KiBXYWl0aW5nIGZvciBhIE1JTUUgbWVzc2FnZSBmcm9tIFNURElOLi4uDQo9
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT09PT09PT09PT09PT0NCkNvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L21peGVk
-DQpCb2R5LWZpbGU6IE5PTkUNClN1YmplY3Q6IEEgY29tcGxleCBuZXN0ZWQg
-bXVsdGlwYXJ0IGV4YW1wbGUNCk51bS1wYXJ0czogMw0KLS0NCiAgICBDb250
-ZW50LXR5cGU6IHRleHQvcGxhaW4NCiAgICBCb2R5LWZpbGU6IC4vdGVzdG91
-dC9tc2ctMzUzOC0xLmRvYw0KICAgIC0tDQogICAgQ29udGVudC10eXBlOiB0
-ZXh0L3BsYWluDQogICAgQm9keS1maWxlOiAuL3Rlc3RvdXQvbXNnLTM1Mzgt
-Mi5kb2MNCiAgICAtLQ0KICAgIENvbnRlbnQtdHlwZTogbXVsdGlwYXJ0L3Bh
-cmFsbGVsDQogICAgQm9keS1maWxlOiBOT05FDQogICAgU3ViamVjdDogUGFy
-dCAzIG9mIHRoZSBvdXRlciBtZXNzYWdlIGlzIG11bHRpcGFydCENCiAgICBO
-dW0tcGFydHM6IDINCiAgICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGlt
-YWdlL2dpZg0KICAgICAgICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1jb21w
-cmVzcy5naWYNCiAgICAgICAgU3ViamVjdDogUGFydCAxIG9mIHRoZSBpbm5l
-ciBtZXNzYWdlIGlzIGEgR0lGLCAiM2QtY29tcHJlc3MuZ2lmIg0KICAgICAg
-ICAtLQ0KICAgICAgICBDb250ZW50LXR5cGU6IGltYWdlL2dpZg0KICAgICAg
-ICBCb2R5LWZpbGU6IC4vdGVzdG91dC8zZC1leWUuZ2lmDQogICAgICAgIFN1
-YmplY3Q6IFBhcnQgMiBvZiB0aGUgaW5uZXIgbWVzc2FnZSBpcyBhbm90aGVy
-IEdJRiwgIjNkLWV5ZS5naWYiDQogICAgICAgIC0tDQo9PT09PT09PT09PT09
-PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
-PT0NCg0K
----490585488-806670346-834061839=:2195--
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.ref
deleted file mode 100644
index b69fca5..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-igor2.ref
+++ /dev/null
@@ -1,43 +0,0 @@
-{
- "Part_1" => {
- "Size" => 293,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "US-ASCII"
- },
- "Part_2" => {
- "Filename" => "Makefile",
- "Size" => 2442,
- "Type" => "text/plain",
- "Encoding" => "base64",
- "Charset" => "US-ASCII"
- },
- "Part_3" => {
- "Filename" => "multi-nested.msg",
- "Size" => 3272,
- "Type" => "text/plain",
- "Encoding" => "base64",
- "Charset" => "US-ASCII"
- },
- "Part_4" => {
- "Filename" => "Parser.n.out",
- "Size" => 906,
- "Type" => "text/plain",
- "Encoding" => "base64",
- "Charset" => "US-ASCII"
- },
- "Msg" => {
- "Subject" => "Need help",
- "Type" => "multipart/mixed",
- "To" => "eryq\(a)rhine.gsfc.nasa.gov",
- "From" => "Starovoitov Igor <igor\(a)fripp.aic.synapse.ru>",
- "Encoding" => "7bit",
- "Boundary" => "-490585488-806670346-834061839=:2195"
- },
- "Parser" => {
- "Message" => "testmsgs/multi-igor2.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.msg
deleted file mode 100644
index 686057a..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.msg
+++ /dev/null
@@ -1,89 +0,0 @@
-MIME-Version: 1.0
-From: Lord John Whorfin <whorfin(a)yoyodyne.com>
-To: <john-yaya(a)yoyodyne.com>
-Subject: A complex nested multipart example
-Content-Type: multipart/mixed;
- boundary=unique-boundary-1
-
-The preamble of the outer multipart message.
-Mail readers that understand multipart format
-should ignore this preamble.
-If you are reading this text, you might want to
-consider changing to a mail reader that understands
-how to properly display multipart messages.
---unique-boundary-1
-
-Part 1 of the outer message.
-[Note that the preceding blank line means
-no header fields were given and this is text,
-with charset US ASCII. It could have been
-done with explicit typing as in the next part.]
-
---unique-boundary-1
-Content-type: text/plain; charset=US-ASCII
-
-Part 2 of the outer message.
-This could have been part of the previous part,
-but illustrates explicit versus implicit
-typing of body parts.
-
---unique-boundary-1
-Subject: Part 3 of the outer message is multipart!
-Content-Type: multipart/parallel;
- boundary=unique-boundary-2
-
-A one-line preamble for the inner multipart message.
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-vise.gif"
-Subject: Part 1 of the inner message is a GIF, "3d-vise.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-eye.gif"
-Subject: Part 2 of the inner message is another GIF, "3d-eye.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---unique-boundary-2--
-
-The epilogue for the inner multipart message.
-
---unique-boundary-1
-Content-type: text/richtext
-
-This is <bold>part 4 of the outer message</bold>
-<smaller>as defined in RFC1341</smaller><nl>
-<nl>
-Isn't it <bigger><bigger>cool?</bigger></bigger>
-
---unique-boundary-1
-Content-Type: message/rfc822; name="/evil/filename";
-
-From: (mailbox in US-ASCII)
-To: (address in US-ASCII)
-Subject: Part 5 of the outer message is itself an RFC822 message!
-Content-Type: Text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: Quoted-printable
-
-Part 5 of the outer message is itself an RFC822 message!
-
---unique-boundary-1--
-
-The epilogue for the outer message.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.ref
deleted file mode 100644
index 64e5cc5..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested.ref
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "Part_3_1" => {
- "Filename" => "3d-vise.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Subject" => "Part 1 of the inner message is a GIF, \"3d-vise.gif\"",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3_2" => {
- "Filename" => "3d-eye.gif",
- "Size" => 357,
- "Disposition" => "inline",
- "Subject" => "Part 2 of the inner message is another GIF, \"3d-eye.gif\"",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Parser" => {
- "Message" => "testmsgs/multi-nested.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Part_5_1" => {
- "Size" => 57,
- "Subject" => "Part 5 of the outer message is itself an RFC822 message!",
- "Type" => "text/plain",
- "To" => "(address in US-ASCII)",
- "From" => "(mailbox in US-ASCII)",
- "Encoding" => "quoted-printable",
- "Charset" => "ISO-8859-1"
- },
- "Part_1" => {
- "Size" => 208,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Size" => 140,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "US-ASCII"
- },
- "Part_3" => {
- "Subject" => "Part 3 of the outer message is multipart!",
- "Type" => "multipart/parallel",
- "Encoding" => "7bit",
- "Boundary" => "unique-boundary-2"
- },
- "Part_4" => {
- "Size" => 148,
- "Type" => "text/richtext",
- "Encoding" => "7bit"
- },
- "Part_5" => {
- "Filename" => "/evil/filename",
- "Type" => "message/rfc822",
- "Encoding" => "7bit"
- },
- "Msg" => {
- "Subject" => "A complex nested multipart example",
- "Type" => "multipart/mixed",
- "To" => "<john-yaya\(a)yoyodyne.com>",
- "From" => "Lord John Whorfin <whorfin\(a)yoyodyne.com>",
- "Encoding" => "7bit",
- "Boundary" => "unique-boundary-1"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.msg
deleted file mode 100644
index baecbda..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.msg
+++ /dev/null
@@ -1,89 +0,0 @@
-MIME-Version: 1.0
-From: Lord John Whorfin <whorfin(a)yoyodyne.com>
-To: <john-yaya(a)yoyodyne.com>
-Subject: A complex nested multipart example
-Content-Type: multipart/mixed;
- boundary=unique-boundary-1
-
-The preamble of the outer multipart message.
-Mail readers that understand multipart format
-should ignore this preamble.
-If you are reading this text, you might want to
-consider changing to a mail reader that understands
-how to properly display multipart messages.
---unique-boundary-1
-
-Part 1 of the outer message.
-[Note that the preceding blank line means
-no header fields were given and this is text,
-with charset US ASCII. It could have been
-done with explicit typing as in the next part.]
-
---unique-boundary-1
-Content-type: text/plain; charset=US-ASCII
-
-Part 2 of the outer message.
-This could have been part of the previous part,
-but illustrates explicit versus implicit
-typing of body parts.
-
---unique-boundary-1
-Subject: Part 3 of the outer message is multipart!
-Content-Type: multipart/parallel;
- boundary=unique-boundary-2
-
-A one-line preamble for the inner multipart message.
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-vise.gif"
-Subject: Part 1 of the inner message is a GIF, "3d-vise.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-eye.gif"
-Subject: Part 2 of the inner message is another GIF, "3d-eye.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---unique-boundary-2--
-
-The epilogue for the inner multipart message.
-
---unique-boundary-1
-Content-type: text/richtext
-
-This is <bold>part 4 of the outer message</bold>
-<smaller>as defined in RFC1341</smaller><nl>
-<nl>
-Isn't it <bigger><bigger>cool?</bigger></bigger>
-
---unique-boundary-1
-Content-Type: message/rfc822; name="/evil/filename";
-
-From: (mailbox in US-ASCII)
-To: (address in US-ASCII)
-Subject: Part 5 of the outer message is itself an RFC822 message!
-Content-Type: Text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: Quoted-printable
-
-Part 5 of the outer message is itself an RFC822 message!
-
---unique-boundary-1--
-
-The epilogue for the outer message.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.ref
deleted file mode 100644
index 8bc0e8d..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested2.ref
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "Part_3_1" => {
- "Filename" => "3d-vise.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Subject" => "Part 1 of the inner message is a GIF, \"3d-vise.gif\"",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3_2" => {
- "Filename" => "3d-eye.gif",
- "Size" => 357,
- "Disposition" => "inline",
- "Subject" => "Part 2 of the inner message is another GIF, \"3d-eye.gif\"",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Parser" => {
- "Message" => "testmsgs/multi-nested2.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Part_5_1" => {
- "Size" => 58,
- "Subject" => "Part 5 of the outer message is itself an RFC822 message!",
- "Type" => "text/plain",
- "To" => "(address in US-ASCII)",
- "From" => "(mailbox in US-ASCII)",
- "Encoding" => "quoted-printable",
- "Charset" => "ISO-8859-1"
- },
- "Part_1" => {
- "Size" => 208,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Size" => 140,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "US-ASCII"
- },
- "Part_3" => {
- "Subject" => "Part 3 of the outer message is multipart!",
- "Type" => "multipart/parallel",
- "Encoding" => "7bit",
- "Boundary" => "unique-boundary-2"
- },
- "Part_4" => {
- "Size" => 148,
- "Type" => "text/richtext",
- "Encoding" => "7bit"
- },
- "Part_5" => {
- "Filename" => "/evil/filename",
- "Type" => "message/rfc822",
- "Encoding" => "7bit"
- },
- "Msg" => {
- "Subject" => "A complex nested multipart example",
- "Type" => "multipart/mixed",
- "To" => "<john-yaya\(a)yoyodyne.com>",
- "From" => "Lord John Whorfin <whorfin\(a)yoyodyne.com>",
- "Encoding" => "7bit",
- "Boundary" => "unique-boundary-1"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.msg
deleted file mode 100644
index d4fa9d5..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.msg
+++ /dev/null
@@ -1,89 +0,0 @@
-MIME-Version: 1.0
-From: Lord John Whorfin <whorfin(a)yoyodyne.com>
-To: <john-yaya(a)yoyodyne.com>
-Subject: A complex nested multipart example
-Content-Type: multipart/mixed;
- boundary=unique-boundary-1
-
-The preamble of the outer multipart message.
-Mail readers that understand multipart format
-should ignore this preamble.
-If you are reading this text, you might want to
-consider changing to a mail reader that understands
-how to properly display multipart messages.
---unique-boundary-1
-
-Part 1 of the outer message.
-[Note that the preceding blank line means
-no header fields were given and this is text,
-with charset US ASCII. It could have been
-done with explicit typing as in the next part.]
-
---unique-boundary-1
-Content-type: text/plain; charset=US-ASCII
-
-Part 2 of the outer message.
-This could have been part of the previous part,
-but illustrates explicit versus implicit
-typing of body parts.
-
---unique-boundary-1
-Subject: Part 3 of the outer message is multipart!
-Content-Type: multipart/parallel;
- boundary=unique-boundary-2
-
-A one-line preamble for the inner multipart message.
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-vise.gif"
-Subject: Part 1 of the inner message is a GIF, "3d-vise.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---unique-boundary-2
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-eye.gif"
-Subject: Part 2 of the inner message is another GIF, "3d-eye.gif"
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---unique-boundary-2--
-
-The epilogue for the inner multipart message.
-
---unique-boundary-1
-Content-type: text/richtext
-
-This is <bold>part 4 of the outer message</bold>
-<smaller>as defined in RFC1341</smaller><nl>
-<nl>
-Isn't it <bigger><bigger>cool?</bigger></bigger>
-
---unique-boundary-1
-Content-Type: message/rfc822; name="nice.name";
-
-From: (mailbox in US-ASCII)
-To: (address in US-ASCII)
-Subject: Part 5 of the outer message is itself an RFC822 message!
-Content-Type: Text/plain; charset=ISO-8859-1
-Content-Transfer-Encoding: Quoted-printable
-
-Part 5 of the outer message is itself an RFC822 message!
-
---unique-boundary-1--
-
-The epilogue for the outer message.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.ref
deleted file mode 100644
index 1613f56..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-nested3.ref
+++ /dev/null
@@ -1,68 +0,0 @@
-{
- "Part_3_1" => {
- "Filename" => "3d-vise.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Subject" => "Part 1 of the inner message is a GIF, \"3d-vise.gif\"",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3_2" => {
- "Filename" => "3d-eye.gif",
- "Size" => 357,
- "Disposition" => "inline",
- "Subject" => "Part 2 of the inner message is another GIF, \"3d-eye.gif\"",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Parser" => {
- "Message" => "testmsgs/multi-nested3.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Part_5_1" => {
- "Size" => 57,
- "Subject" => "Part 5 of the outer message is itself an RFC822 message!",
- "Type" => "text/plain",
- "To" => "(address in US-ASCII)",
- "From" => "(mailbox in US-ASCII)",
- "Encoding" => "quoted-printable",
- "Charset" => "ISO-8859-1"
- },
- "Part_1" => {
- "Size" => 208,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Size" => 140,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "US-ASCII"
- },
- "Part_3" => {
- "Subject" => "Part 3 of the outer message is multipart!",
- "Type" => "multipart/parallel",
- "Encoding" => "7bit",
- "Boundary" => "unique-boundary-2"
- },
- "Part_4" => {
- "Size" => 148,
- "Type" => "text/richtext",
- "Encoding" => "7bit"
- },
- "Part_5" => {
- "Filename" => "nice.name",
- "Type" => "message/rfc822",
- "Encoding" => "7bit"
- },
- "Msg" => {
- "Subject" => "A complex nested multipart example",
- "Type" => "multipart/mixed",
- "To" => "<john-yaya\(a)yoyodyne.com>",
- "From" => "Lord John Whorfin <whorfin\(a)yoyodyne.com>",
- "Encoding" => "7bit",
- "Boundary" => "unique-boundary-1"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.msg
deleted file mode 100644
index 8d086f0..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.msg
+++ /dev/null
@@ -1,23 +0,0 @@
-From: Nathaniel Borenstein <nsb(a)bellcore.com>
-To: Ned Freed <ned(a)innosoft.com>
-Subject: Sample message
-MIME-Version: 1.0
-Content-type: multipart/mixed; boundary="simple
- boundary"
-
-This is the preamble. It is to be ignored, though it
-is a handy place for mail composers to include an
-explanatory note to non-MIME conformant readers.
---simple boundary
-
-This is implicitly typed plain ASCII text.
-It does NOT end with a linebreak.
---simple boundary
-Content-type: text/plain; charset=us-ascii
-
-This is explicitly typed plain ASCII text.
-It DOES end with a linebreak.
-
---simple boundary--
-This is the epilogue. It is also to be ignored.
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.ref
deleted file mode 100644
index b190b25..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-simple.ref
+++ /dev/null
@@ -1,27 +0,0 @@
-{
- "Part_1" => {
- "Size" => 76,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Size" => 73,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Msg" => {
- "Subject" => "Sample message",
- "Type" => "multipart/mixed",
- "To" => " Ned Freed <ned\(a)innosoft.com>",
- "From" => "Nathaniel Borenstein <nsb\(a)bellcore.com>",
- "Encoding" => "7bit",
- "Boundary" => "simple boundary"
- },
- "Parser" => {
- "Message" => "testmsgs/multi-simple.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.msg
deleted file mode 100644
index 2a5073c..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.msg
+++ /dev/null
@@ -1,56 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Sender: john-bigboote
-Date: Thu, 11 Apr 1996 01:10:30 -0500
-From: Eryq <eryq(a)rhine.gsfc.nasa.gov>
-Organization: Yoyodyne Propulsion Systems
-X-Mailer: Mozilla 2.0 (X11; I; Linux 1.1.18 i486)
-MIME-Version: 1.0
-To: john-bigboote(a)eryq.pr.mcs.net
-Subject: Two images for you...
-Content-Type: multipart/mixed; boundary="------------299A70B339B65A93542D2AE"
-
---------------299A70B339B65A93542D2AE
-Content-Type: text/plain; charset=us-ascii
-Content-Transfer-Encoding: 7bit
-
-When unpacked, this message should produce two GIF files:
-
- * The 1st should be called "3d-compress.gif"
- * The 2nd should be called "3d-eye.gif"
-
-There is an empty preamble, and linear space after the bounds.
-
---
- ____ __
- / __/__________/_/ Eryq (eryq(a)rhine.gsfc.nasa.gov)
- / __/ _/ / / , / Hughes STX Corporation, NASA/Goddard
-/___/_/ \ /\ /___
- /_/ /_____/ http://selsvr.stx.com/~eryq/
-
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif
-Content-Transfer-Encoding: base64
-Content-Disposition: inline; filename="3d-compress.gif"
-
-R0lGODdhKAAoAOMAAAAAAAAAgB6Q/y9PT25ubnCAkKBSLb6+vufn5/Xes/+lAP/6zQAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJLMOyYbcoxkaZ5oCkoH6L5wLMfiWqd4btZhmxbA
-oFCY47EIqMJgyWw2ATjj7aRkAq5YwDMl9VGtKO0SiuoiTVlscsxt9c4HgXxUIA0EAVOVfDKT
-8Hl1B3kDAYYle202XnGGgoMHhYckiWVuR3+OTgCGeZRslotwgJ2lnYigfZdTjQULr7ALBZN0
-qTurjHgLKAu0B5Wqopm7J72etQN8t8Ijury+wMtvw8/Hv7Ylfs0BxCbGqMmK0yOOQ0GTCgrR
-2bhwJGlXJQYG6mMKoeNoWSbzCWIACe5JwxQm3AkDAbUAQCiQhDZEBeBl6afgCsOBrD45edIv
-QceGWSMevpOYhl6CkydBHhBZQmGKjihVshypjB9ClAHZMTugzOU7mzhBPiSZ5uDNnA7b/aTZ
-0mhMnfl0pDBFa6bUElSPWb0qtYuHrxlwcR17YsWMs2jTql3LFkQEADs=
---------------299A70B339B65A93542D2AE
-Content-Type: image/gif; name="3d-eye.gif"
-Content-Transfer-Encoding: base64
-
-R0lGODdhKAAoAPMAAAAAAAAAzN3u/76+voiIiG5ubszd7v///+fn5wAAAAAAAAAAAAAAAAAA
-AAAAAAAAACwAAAAAKAAoAAAE/hDJSau9eJbMOy4bMoxkaZ5oCkoD6L5wLMfiWns41oZt7lM7
-VujnC96IRVsPWQE4nxPjkvmsQmu8oc/KBUSVWk7XepGGLeNrxoxJO1MjILjthg/kWXQ6wO/7
-+3dCeRRjfAKHiImJAV+DCF0BiW5VAo1CElaRh5NjlkeYmpyTgpcTAKGiaaSfpwKpVQaxVatL
-rU8GaQdOBAQAB7+yXliXTrgAxsW4vFabv8BOtBsBt7cGvwCIT9nOyNEIxuC4zrqKzc9XbODJ
-vs7Y5ewH3d7Fxe3jB4rj8t6PuNa6r2bhKQXN17FYCBMqTGiBzSNhx5g0nEMhlsSJjiRYvDjw
-E0cdGxQ/gswosoKUkmuU2FnJcsSKGTBjypxJsyaICAA7
---------------299A70B339B65A93542D2AE--
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.ref
deleted file mode 100644
index f355c35..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/multi-weirdspace.ref
+++ /dev/null
@@ -1,35 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/multi-weirdspace.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "Two images for you...",
- "Type" => "multipart/mixed",
- "To" => "john-bigboote\(a)eryq.pr.mcs.net",
- "From" => "Eryq <eryq\(a)rhine.gsfc.nasa.gov>",
- "Encoding" => "7bit",
- "Boundary" => "------------299A70B339B65A93542D2AE"
- },
- "Part_1" => {
- "Size" => 420,
- "Type" => "text/plain",
- "Encoding" => "7bit",
- "Charset" => "us-ascii"
- },
- "Part_2" => {
- "Filename" => "3d-compress.gif",
- "Size" => 419,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3" => {
- "Filename" => "3d-eye.gif",
- "Size" => 357,
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.msg
deleted file mode 100644
index e450b7f..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.msg
+++ /dev/null
@@ -1,33 +0,0 @@
-Content-Disposition: inline
-Content-Transfer-Encoding: binary
-Content-Type: message/rfc822
-MIME-Version: 1.0
-X-Mailer: MIME::Lite 1.147 (B2.09; Q2.03)
-Date: Tue, 6 Jun 2000 03:20:11 UT
-From: user2
-To: user0
-Subject: Re: Fwd: hello world
-
-Content-Disposition: inline
-Content-Transfer-Encoding: binary
-Content-Type: message/rfc822
-MIME-Version: 1.0
-X-Mailer: MIME::Lite 1.147 (B2.09; Q2.03)
-Date: Tue, 6 Jun 2000 03:20:11 UT
-From: user1
-To: user2
-Subject: Fwd: hello world
-
-Content-Disposition: inline
-Content-Length: 60
-Content-Transfer-Encoding: binary
-Content-Type: text/plain
-MIME-Version: 1.0
-X-Mailer: MIME::Lite 1.147 (B2.09; Q2.03)
-Date: Tue, 6 Jun 2000 03:20:11 UT
-From: user0
-To: user1
-Subject: hello world
-
-This is the original message.
-Let's see if we can embed it!
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.ref
deleted file mode 100644
index c513195..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/re-fwd.ref
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/re-fwd.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Disposition" => "inline",
- "Subject" => "Re: Fwd: hello world",
- "Type" => "message/rfc822",
- "To" => "user0",
- "From" => "user2",
- "Encoding" => "binary"
- },
- "Part_1" => {
- "Disposition" => "inline",
- "Subject" => "Fwd: hello world",
- "Type" => "message/rfc822",
- "To" => "user2",
- "From" => "user1",
- "Encoding" => "binary"
- },
- "Part_1_1" => {
- "Size" => 60,
- "Disposition" => "inline",
- "Subject" => "hello world",
- "Type" => "text/plain",
- "To" => "user1",
- "From" => "user0",
- "Encoding" => "binary"
- },
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.msg
deleted file mode 100644
index 710b0d6..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.msg
+++ /dev/null
@@ -1,7 +0,0 @@
-Content-Type: text/plain; charset="US-ASCII"; name==?koi8-r?B?89DJ08/LLmRvYw==?=
-Content-Disposition: attachment; filename==?koi8-r?B?89DJ08/LLmRvYw==?=
-Subject: Greetings
-
-Salutations
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.ref
deleted file mode 100644
index 060fc17..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/russian.ref
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "Msg" => {
- "Subject" => "Greetings",
- "Type" => "text/plain",
- "Filename" => "\363\320\311\323\317\313.doc",
- },
- "Parser" => {
- "Message" => "testmsgs/russian.msg",
- "OutputToCore" => "0",
- "Charset" => "KOI8-R",
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.msg
deleted file mode 100644
index a6a1336..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.msg
+++ /dev/null
@@ -1,20 +0,0 @@
-Return-Path: eryq(a)rhine.gsfc.nasa.gov
-Date: Wed, 20 Dec 95 19:59 CST
-From: eryq(a)rhine.gsfc.nasa.gov
-To: sitaram(a)selsvr.stx.com
-Cc: johnson@killians.gsfc.nasa.gov,harvel(a)killians.gsfc.nasa.gov, eryq
-Subject: Request for Leave
-
-I will be taking vacation from Friday, 12/22/95, through 12/26/95.
-I will be back on Wednesday, 12/27/95.
-
-Advance notice: I may take a second stretch of vacation after that,
-around New Year's.
-
-Thanks,
- ____ __
-| _/__________/_/ Eryq (eryq(a)rhine.gsfc.nasa.gov)
-| _| _/ | | . | Hughes STX Corporation, NASA/Goddard Space Flight Cntr.
-|___|_|\_ |_ |___
- | | |____/ http://selsvr.stx.com/~eryq/
- `-'
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.ref
deleted file mode 100644
index e9cd33d..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/simple.ref
+++ /dev/null
@@ -1,16 +0,0 @@
-{
- "Msg" => {
- "Size" => 443,
- "Subject" => "Request for Leave",
- "Type" => "text/plain",
- "To" => "sitaram\(a)selsvr.stx.com",
- "From" => "eryq\(a)rhine.gsfc.nasa.gov",
- "Encoding" => "7bit"
- },
- "Parser" => {
- "Message" => "testmsgs/simple.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-extracted.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-extracted.ref
deleted file mode 100644
index 3003c51..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-extracted.ref
+++ /dev/null
@@ -1,45 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/uu-junk.msg",
- "ExtractUuencode" => 1,
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "mime::parser",
- "Type" => "multipart/mixed",
- "To" => "eryq\(a)zeegee.com",
- "From" => "\"ADJE Webmail Tech Support\" <support\(a)webmail.uwohali.com>",
- "Encoding" => "7bit",
- "Boundary" => "---------------------------7d033e3733c"
- },
- "Part_1" => {
- "Size" => 373,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Type" => "multipart/mixed",
- "Encoding" => "7bit",
- },
- "Part_2_1" => {
- "Size" => 93,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2_2" => {
- "Filename" => "up.gif",
- "Size" => 110,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_2_3" => {
- "Filename" => "zeegee.gif",
- "Size" => 4834,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-target.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-target.msg
deleted file mode 100644
index 6fce469..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk-target.msg
+++ /dev/null
@@ -1,182 +0,0 @@
-Return-Path: <support(a)webmail.uwohali.com>
-Received: from virtual.mrf.mail.rcn.net ([207.172.4.103])
- by mta02.mrf.mail.rcn.net
- (InterMail vM.4.01.02.27 201-229-119-110) with ESMTP
- id <20000425112650.ZPUD516.mta02.mrf.mail.rcn.net(a)virtual.mrf.mail.rcn.net>
- for <eryq(a)mta.mrf.mail.rcn.net>; Tue, 25 Apr 2000 07:26:50 -0400
-Received: from [205.139.141.226] (helo=webmail.uwohali.com ident=root)
- by virtual.mrf.mail.rcn.net with esmtp (Exim 2.12 #3)
- id 12k3VX-00012G-00
- for eryq(a)zeegee.com; Tue, 25 Apr 2000 07:27:59 -0400
-Received: from webmail.uwohali.com (nobody@localhost [127.0.0.1])
- by webmail.uwohali.com (8.8.7/8.8.7) with SMTP id GAA10264
- for <eryq(a)zeegee.com>; Tue, 25 Apr 2000 06:34:43 -0500
-Date: Tue, 25 Apr 2000 06:34:43 -0500
-Message-Id: <200004251134.GAA10264(a)webmail.uwohali.com>
-From: "ADJE Webmail Tech Support" <support(a)webmail.uwohali.com>
-To: eryq(a)zeegee.com
-Subject: mime::parser
-Content-type: multipart/mixed; boundary="---------------------------7d033e3733c"
-Mime-Version: 1.0
-X-Mozilla-Status: 8001
-
------------------------------7d033e3733c
-Content-Type: text/plain
-
-Eryq -
-
-I occasionally receive an email (see below) like this one, which
-MIME::Parser does not parse. Any ideas? Is this a valid way to send
-an attachment, or is the problem on the "sender's" side? Thanks for
-your time!
-
- Mike
-
--->> Promote YOUR web site! FREE Perl CGI scripts add WEB ACCESS to your
--->> E-Mail accounts! Download today!! http://webmail.uwohali.com
-
------------------------------7d033e3733c
-Content-type: multipart/mixed; boundary="----------=_960622044-2175-0"
-
-The following is a multipart MIME message which was extracted
-from a uuencoded message.
-
-------------=_960622044-2175-0
-
-Here's what he's talking about. I've uuencoded the ZeeGee
-logo and another GIF file below.
-
-
-------------=_960622044-2175-0
-Content-Type: image/gif; name="up.gif"; x-unix-mode="0644"
-Content-Disposition: inline; filename="up.gif"
-Content-Transfer-Encoding: base64
-Mime-Version: 1.0
-X-Mailer: MIME-tools 5.208 (Entity 5.204)
-
-R0lGODdhEwATAKEAAP///wAAAICAgMDAwCwAAAAAEwATAAACR4SPmcHtz0xQ
-FIgJ5ti8b3FJgEcOIKaV3SmSgcdmY9esoUw7XJwO0Gu6pX6MIGqm+giRSR5T
-5UzulqCq9Yq6aq0oIrECPhQAADs=
-
-------------=_960622044-2175-0
-Content-Type: image/gif; name="zeegee.gif"; x-unix-mode="0644"
-Content-Disposition: inline; filename="zeegee.gif"
-Content-Transfer-Encoding: base64
-Mime-Version: 1.0
-X-Mailer: MIME-tools 5.208 (Entity 5.204)
-
-R0lGODdhWwBwAPcAAAAAAAgICBAQEDkAITkAKUIAKRgYGEoAKUoAMVIAMVIA
-OVoAMSEhIVoAOVIIMWMAOWMAQloIOWsAQmMIOWMIQikpKVoQOWsIQmsISmMQ
-OWMQQnMISjExMUIpMWsQSnsIUnMQUnMQSmsYQoQIUoQIWlIpOXMYQowIWjk5
-OWshQkI5OZQIWpQIY4wQWnMhSoQYUoQYWpQQY1I5QnshUkJCQnMpSoQhSnMp
-UoQhUoQhWoQpUpQhY0pKSms5UnsxWnM5UpQpY1JSUmNKUlpSSpQxY5Qxa5wx
-a5Q5WpQ5Y4RCWpQ5a1paWoxCWoRKY6U5c5xCY4xKa605a5RKY5xCe2NjY3ta
-Y6VCc5RSa6VKa3tjY61Ka2tra61Kc61Ke4Rja5Rac3tra6VSe61Sc6Vaa7VS
-c3Nzc4xra61ac61ahLVahK1jc4xzc61je3t7e5Rzc61jhJxzc61re71je4x7
-e5xze7Vre71jlJx7e4SEhL1rhJx7lKV7e71rjKV7hKV7lJyEe71zjKV7nN5j
-jIyMjK17nKWEhM5rlL17jK2EhLV7nM5zjK2EjLV7pd5rlJSUlK2MjLWEpb2E
-pbWMjLWMlNZ7nL2MjK2UjL2MlN57lN57nJycnN6ElL2UlMaUlMaUnNaMnKWl
-peeEpb2cnM6UnNaUnO+ErcacnNaUpd6Mtd6Mvc6cnM6cpd6Upb2lpe+Mpa2t
-rcalpc6lpeeUve+UtdalpdalreecrbW1td6lrd6lpd6ltfecpeelrfecrdat
-reeltd6treelvd6tte+lrf+ctf+cvb29ve+lvf+cxuetreette+lzvelvf+l
-ve+tvf+lxue1tf+lzvetxsbGxu+1td69te+1vf+tvfe1vee9ve+9vf+1zv+1
-xve9vc7OzufGvfe9xv+9xv+9zvfGxv+93vfGztbW1v/Gxv/Gzv/G3v/G5//O
-zu/Wzv/O1t7e3v/O3v/W1v/W3v/W5+fn5//e3v/e5//n3v/n5//n7//n9+/v
-7//v7/f39//39//3/////ywAAAAAWwBwAAcI/wD/CRxIsKDBgwgTKlzIsKHD
-hxAjSpxIsaLFixgzapQYqaNHSCBDihwZkpHJRIRSqlzJsmWglzBj+plJs+ZM
-PThz6lS4oafPnhiCYrhAtCiFo0ghKIXwoIHTp1AbKJiqIIHVqwiyatV6oGuB
-r2DBEhhLYIDZszx//hQ6tChRpEmXNo0alWrVq1i3cvUaNizZsmcHpFXrk21b
-o3CPyp1L9ylVvHn1ZuXbVyxZtAk/EFbL1u3bxEuZNoZqF3ICyXsPVLY81qzC
-D5o3Fxbq+UJiCqEZjy5tGjWCrqpXF/grODNs2bNpu72NW6nu3VNNn/ZNeTXZ
-17CPI9/Q2TNzuaMdP/+G7Pt39b5jsWePjbz7ctDgw0sdTx41cOHD1a/fzt39
-Z/iiyTffXfXZF9xq+q3Hnmz+/ReXcwLyVqBe91WWoIL8NWjbbfGFJyFe1J1X
-gEIjKIjhdoZ5xyGEEUbXW4h9kViiifuhqNx7cOXWoosgZpVABtOZd6CMM9Ko
-XXs3IpZjh9DxaJUNZDSSySaKCOLCZHwROUKRNGbY4HfOPUfXYwtE0YgrdUhR
-gwU1MKEIE3uNmBAJW9ZpZHZeBlXbiix6qIAVpWyihgiRpXCIBXspRAKddXLZ
-pY16qrhkn429UAoxZ1ggXVZIJLHVAYou2qijJuYZqZKTitnAA3Y8o8gM9IH/
-iEMTeoW6KKN23rngZhqCGaBTL8jiyhPiOWmVBm/UmtAJt4raqK67EtYrgAFa
-EU0jJtQVq1WHKIvQCcw2OyqpNSKZ5IYASmBINHJM0CReEeQRJAIKgRuuuM/q
-auqeoL2wDDHEysdbBmPkVa+99zqb6537SnoUEeSEcsOvTVblAhMgHoxws7gu
-/Ki5p/43BTmYeMBkk0ikAJnGG3M8KrQNu2UHOYZ4oNjJYyrwBKF4sYxwwh2T
-Wy6DSRoiDhvUqkqaGBkQmIDPP7v8MsOQ6onKNligm6rSDVyABX0KsfBz1FJ7
-/DHRGMiyjRI4PkhxAxHogIUYLgxYVdhij93yrVNT/71dKtwUwe+kv9ZQiz33
-3KOLBnbjzcIKettb9pYwI3d1Eef62pQGtHzDTj/3sLPKAk5N5TgLeUfOcdCV
-q3W1Ef2F7OCDX7TiSzXsfJONLzc4djrqkUuOr9nrwQAEF1x0gTwq6cAO1Lla
-3wzBGn9YIgossLRiyQ9Q/Y465MFPTjlsO6TBijXrtKO++uqkE4wzn6CRQ+yy
-f+dFFmCsMcf+YJTQfUKoC6AAgwe0jsEgDbxYR/rgwcAGyiMdx2BgOxT4CzSA
-YFpwaYIQSjAEIQhhCCVIwP8QIsASpk514oKBHbChQPU1sIHvUEcEXzjBdYAD
-EBeUXfQ8UAUZqOCHKnBAVP/qZUIBgg+Fi3qDNc7Rwna8MB7xeEc+ggHFeNBQ
-gejAxhm+BBcP/EAGHeiAEIe4rBOsoIgBJCAJgHCKbpwDHS18ITzikQ55zKKK
-VrziOs4Bjk/kAHpw0UIKIsAkjZ0RjSf8WRSg4UYmxpGG8jjGO/Aoxxqig4/U
-UAIgKaCDJEjvVz5DZCLBlQZGguONClxgA9uhDmSsg5KVTOU5ztENaoThS2IQ
-wdYaALVDohFheYCGNboxDlQ+Eh7tIAczyiHHZtZwHZcERzegwQb/4EAKfGIK
-1MwoSlImAxraIKYx0+dEeGxDGuBoZiWfGc1uWAMat7wRGUIQveYoZZvgEmUX
-gKH/DGqEs5jjVB83loENddKQnbOUpjagAQxNsgUHR0BVXPAJLl8K0Am4AAY0
-/NmNU45zHdyQxjDKWcVVri+V0ExoNxaajFPoIHZk0IDDkKIoAlqUBTEYRS00
-ylFwABSO6wiHNGzhxHjQ4x74uEc96IFMlGJxluNQKDSUAYxLhIA7O2DCYSRK
-gVAR8AQC5AMtdrpRa4TTo28UxzNmcQ4n1gMf/hDIPu7BVKdeUqXaeCdVaTGG
-npzBA5mDi62+irod0GKs/BRmODs6y3M0wxYsbAc98FGQfNQDHqlEx1352I2V
-6hUYtPAECIxwhBRJylaLsikgYnHYxFLDrJ09ZTOawQs4/8KjHv0wCD7iAc3N
-ctaz1GAoaFURBzkkZ6ufIRHHgrcDVaxiFbQAhmth241rPIMVs0SHZHNbkHtg
-trHniGpn8xpcquKCFqrgxEuPi9yuJqROzYrcG1ThXMRqtKzawMYzPgEOj77y
-HnEdSD6YeslxiHe81giucA+rik5cQVrn0tJyEdaCTpjCFKpgrXS/WdZihIIa
-sQWHduNxj32YeB915aM0x0teaEAjGcA4byxMwQlE8CpJWhrBhMHlBE544sLQ
-jS4wOEyMWZxCG0iOLRPLKcE9rnileU2wi2EMWvTSWBI+uLFyXjOqHceBE5yw
-cH2FDIxeFOMQ1HitWRfr0/BCdf/FSI6ygpVB5cOuQhWe4MQjmoA2PWFnXMs9
-BJjDjGHWRncYyACEMlxcVmusOc6QjrKUGU1V6R42FqqgMScWAYeq6afLt4KB
-JCZxCTD/OMO0yEUxKJELfi6a0RtNc3BlLWtYT1W6lqYFpk2RZ0kgAg5XNdeF
-QF0ESRhbEqYu9C5mcQlcS1cZr7a1tF0MbWfX4tKZzjMnJFEIOMwvQ8PushKO
-bexks6IYdTjsTp0NDGFAG9rufrcyhMFuYFzbztkGsyQWsQc4+OBIsrkQbEZ1
-hUc8YhGLKDcnRlGMPKBa3euut8StfVhd35nX+vb1Hczwb4ATRuADr1PBF4GI
-kpe7F5n/qAR9V2FoiNfCF8Dwhcxhjuta2LziFqcvxrft6z3QwQw9GJpaQJ6d
-LY28EH0oRMJJUQwz+BjDzmU5zqdO9YrHIhZ3zrQpOpFxRBTiDm7wQtBPNPSE
-9ERXI4DCwffA9kJIohl1mASYO/FjqD/36nifOt6xnvUL7/wSxvZ6v82QhbGT
-3SeD0ZXaF3GHxu8B5XtQeLL9Tt+VP/fyldf5hT3B9Yw/QvB0cAMYquACI5Xd
-IvxIvepXz/rWu/71sIf9RhTSen3E/va4zz0/Zk971dte96svCPBfz/ve8+P3
-w1/I8FVf/IHMQx8E8f3yEcIPd8zj+QJJvkUGwYDue9/7jnBH//SPv/zdF8QY
-PBAAANYfABQY4x/Av0gb1k//+mvC/AMh//TzT4X6G6D+S4B8sYcR5gAKBmiA
-mhAAAMAA5mAQ5id7+cd82ccD68cBoOAO/DAP09B/ALAExJd9+LcReLB+jlAQ
-3gAKmnCB19d6/1CAmqAJGJh6A1EG64cHEZh6t6CAr9B60/CCoAB9wnd9PZiC
-QOgQ86CAPDAPA+EOKFB/ABAE3hCDqecOFFh/POANQOgOCrgF46d682B9XmgM
-HFB/AUAF+KcP5mAMTQiARbgQSwAAAnALA+EN6gcABsAD/2eHtxCD5pCHd+iH
-t7B7IygA+Hd78/AKCmiHeLh+FQB9/P9wgnXIADzAAOvHAG2IENOwflvwgJTI
-Ad4wENNQAQDAAcZge6KIAt6get4whhWAgRRIBdkHf/AXgvCnD9OgfjxgDqp3
-i0/YgsaAi+InEI6AiwwhihXwiQKhCXYYjM6nfnjgDspoiQWhD/83CPwwhnjg
-he6wjdy4jebwhf2HAsy3e7ewfmnYfxwQgvwwggDQgAnhCCRIEEEAADzwgvb4
-gjQAADTgDfMYBPdoj/nIA/zQhGWgeq/ghPXXBuZAiVvwj5rgCJQ4CLdAiVTg
-CP8IkQAwCAmhD7iohAMxhghZfxVgDiAZkhXID29IA79Xjib5Ct5gkvW3BQcJ
-k+tXBgnRf3H/WBBNWAEosARU8JNAuQRtMJALGARLcJRIeZRDqYwBkIrH143u
-kIbq94XrxwNHCZRUcJWvMJNBgJVZqZWYqIm0uAX0OA3MKHxkmYusF30cSY8C
-6Hvz6IH8QIn3RxD6MA/mNw3/pwnRZw6XaBBjyAFnKRAsCQrfOBD6kJW6mIkA
-AArPZ36JuQQxqIxPiJerpw9vKAC6uI4L6JH/cJev4JMC8YbS+JlRqQmieRCg
-AAABsIdQOQ3TMI8BoJCpZwynOBCy2QYxOJEAII6qN39wWAavYA6aUAZ5GIip
-R40LuIP8YA54oIA2+Jn/xwClqA/e0AbQiRDAGZK0mY+saQCR6Jn6/7CGAQCe
-lWiZqucIieiEDDANwdeH6ycABpCIS0AQdBif87l+sIgQEPl93mcAdfkPg5CH
-cLgFl8gPbVCHBfqWqTcPbYACBhChQfCDwScQ87AE61kBfFkQ8xAEGbqhEqGO
-GoiXCdGcxuAODKp7B3GX0+CZK+oOLRoRv4d9EnF9N6iizbcQGNl+xuCXENEG
-/6eEoNCesziAOcoQZIkCmoCdAnCiD0GDPFCC/6CM03CkGDEPC1il/2AMAEAF
-7+cQAlABBKGMXzp7tJh/EXGQZcCMFcABbcgPr/CC1bl71feE2xiFI7iHXxiC
-aBh9KJp/t/CCgTgPhxmF1gcKn5iBtuiD7v+oEOXoCFgoENZHEKCgoABQAbeg
-hOxIf2RZfwwQAC7KA6C6hABgk/wACgS6nBD6D3qJApSYjRq4hvQXBH9plwHg
-ic+nD21Ig0HQovNwC6LoCH55hK04DyfYf2UACuWokQKhDwoICgMBj6k4CKOY
-qYf4qd23pf+3j3eZgwB6fe4wgqWJEIgYAEuggh5ZjlwYfaJ6C9AnAOk4EMoo
-h/9QATRgfkwZBNlHAwywpfrIp6LYr78YANCnD+7QfS76DyO4nwnhoJQoAGVg
-Dg1IA01pEM7KA+IHr/h3kPT6nMHIAxWwBYT4D1jaBvrgoX95kGL6izQgqdRK
-rwThDhUQAGd6EK//QIm9qg+jOJgCEQQG8H4GUAEbCwCvIKkZSbIBgAdc+n7K
-aA7uIAD6ahDmEKb/cAsCUJ9b6qFOC5XhCgBluqJAOA9j6AiZGAQ8+w/zV6VB
-W4QHWbQCwQECCY/iFwCbCLIkCwBtcBDzwABiarVYy5s0Ca0H4Q2a4KQCsZpB
-gKVL0KgEsQU0+w9BO7RuK6ABYA48wAGj2YpJKxBluKIMgLmIuJ97ywDXV7rX
-F4UkehDKOJzmV442yQEMmLD/IIkCYQAMILnOh7cBwKwHOX/BSAMG4ICZiLmg
-0LkC0X8J+4XbmBDu0KVOu3tkKX5qCoYD8bK1O65tSxAoMJXZFwDwOhCrx8ms
-s6gPY4gC/1C864q0WAt/X+gNBhC1CPGGWxCF85e3x+u8jjh/DNt9+FeOk/sP
-8Gi+A0GBUioQFFgGvzcNTdh+UwoA6Xu+HSh+1acJDGAAsht988ipBTF/5Zmf
-mzgQbUoQ5Qizd1vADeyiKPmd/ycAqGq+L2mTBIGIdmieKHDBBnGCmsC4S9gG
-WRmxBfEKXzsPP/jDbagP/zuHW/CTgwB9t/CliOqAg/CTW0DCVlrFVnzFWJzF
-WrzFXNzFXvzFYBzGYpwRAcEAOw==
-
-------------=_960622044-2175-0--
-
------------------------------7d033e3733c--
-
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.msg
deleted file mode 100644
index a82636e..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.msg
+++ /dev/null
@@ -1,168 +0,0 @@
-From - Fri Jun 9 23:17:56 2000
-Return-Path: <support(a)webmail.uwohali.com>
-Received: from virtual.mrf.mail.rcn.net ([207.172.4.103])
- by mta02.mrf.mail.rcn.net
- (InterMail vM.4.01.02.27 201-229-119-110) with ESMTP
- id <20000425112650.ZPUD516.mta02.mrf.mail.rcn.net(a)virtual.mrf.mail.rcn.net>
- for <eryq(a)mta.mrf.mail.rcn.net>; Tue, 25 Apr 2000 07:26:50 -0400
-Received: from [205.139.141.226] (helo=webmail.uwohali.com ident=root)
- by virtual.mrf.mail.rcn.net with esmtp (Exim 2.12 #3)
- id 12k3VX-00012G-00
- for eryq(a)zeegee.com; Tue, 25 Apr 2000 07:27:59 -0400
-Received: from webmail.uwohali.com (nobody@localhost [127.0.0.1])
- by webmail.uwohali.com (8.8.7/8.8.7) with SMTP id GAA10264
- for <eryq(a)zeegee.com>; Tue, 25 Apr 2000 06:34:43 -0500
-Date: Tue, 25 Apr 2000 06:34:43 -0500
-Message-Id: <200004251134.GAA10264(a)webmail.uwohali.com>
-From: "ADJE Webmail Tech Support" <support(a)webmail.uwohali.com>
-To: eryq(a)zeegee.com
-Subject: mime::parser
-Content-type: multipart/mixed; boundary="---------------------------7d033e3733c"
-Mime-Version: 1.0
-X-Mozilla-Status: 8001
-
------------------------------7d033e3733c
-Content-Type: text/plain
-
-Eryq -
-
-I occasionally receive an email (see below) like this one, which
-MIME::Parser does not parse. Any ideas? Is this a valid way to send
-an attachment, or is the problem on the "sender's" side? Thanks for
-your time!
-
- Mike
-
--->> Promote YOUR web site! FREE Perl CGI scripts add WEB ACCESS to your
--->> E-Mail accounts! Download today!! http://webmail.uwohali.com
-
------------------------------7d033e3733c
-
-Here's what he's talking about. I've uuencoded the ZeeGee
-logo and another GIF file below.
-
-begin 644 up.gif
-M1TE&.#=A$P`3`*$``/___P```("`@,#`P"P`````$P`3```"1X2/F<'MSTQ0
-M%(@)YMB\;W%)@$<.(*:5W2F2@<=F8]>LH4P[7)P.T&NZI7Z,(&JF^@B121Y3
-4Y4SNEJ"J]8JZ:JTH(K$"/A0``#L`
-`
-end
-
-begin 644 zeegee.gif
-M1TE&.#=A6P!P`/<```````@("!`0$#D`(3D`*4(`*1@8&$H`*4H`,5(`,5(`
-M.5H`,2$A(5H`.5((,6,`.6,`0EH(.6L`0F,(.6,(0BDI*5H0.6L(0FL(2F,0
-M.6,00G,(2C$Q,4(I,6L02GL(4G,04G,02FL80H0(4H0(6E(I.7,80HP(6CDY
-M.6LA0D(Y.90(6I0(8XP06G,A2H084H086I008U(Y0GLA4D)"0G,I2H0A2G,I
-M4H0A4H0A6H0I4I0A8TI*2FLY4GLQ6G,Y4I0I8U)24F-*4EI22I0Q8Y0Q:YPQ
-M:Y0Y6I0Y8X1"6I0Y:UI:6HQ"6H1*8Z4Y<YQ"8XQ*:ZTY:Y1*8YQ">V-C8WM:
-M8Z5"<Y12:Z5*:WMC8ZU*:VMK:ZU*<ZU*>X1C:Y1:<WMK:Z52>ZU2<Z5::[52
-M<W-S<XQK:ZU:<ZU:A+5:A*UC<XQS<ZUC>WM[>Y1S<ZUCA)QS<ZUK>[UC>XQ[
-M>YQS>[5K>[UCE)Q[>X2$A+UKA)Q[E*5[>[UKC*5[A*5[E)R$>[USC*5[G-YC
-MC(R,C*U[G*6$A,YKE+U[C*V$A+5[G,YSC*V$C+5[I=YKE)24E*V,C+6$I;V$
-MI;6,C+6,E-9[G+V,C*V4C+V,E-Y[E-Y[G)R<G-Z$E+V4E,:4E,:4G-:,G*6E
-MI>>$I;V<G,Z4G-:4G.^$K<:<G-:4I=Z,M=Z,O<Z<G,Z<I=Z4I;VEI>^,I:VM
-MK<:EI<ZEI>>4O>^4M=:EI=:EK>><K;6UM=ZEK=ZEI=ZEM?><I>>EK?><K=:M
-MK>>EM=ZMK>>EO=ZMM>^EK?^<M?^<O;V]O>^EO?^<QN>MK>>MM>^ESO>EO?^E
-MO>^MO?^EQN>UM?^ESO>MQL;&QN^UM=Z]M>^UO?^MO?>UO>>]O>^]O?^USO^U
-MQO>]O<[.SN?&O?>]QO^]QO^]SO?&QO^]WO?&SM;6UO_&QO_&SO_&WO_&Y__.
-MSN_6SO_.UM[>WO_.WO_6UO_6WO_6Y^?GY__>WO_>Y__GWO_GY__G[__G]^_O
-M[__O[_?W]__W]__W_____RP`````6P!P``<(_P#_"1Q(L*#!@P@3*ES(L*'#
-MAQ`C2IQ(L:+%BQ@S:I08J:-'2"!#BAP9DI')1(12JES)LF6@ES!C^IE)L^9,
-M/3ASZE2XH:?/GAB"8KA`M"B%HT@A*(7PH('3IU`;*)BJ(('5JPBR:M5ZH&N!
-MKV#!$AA+8(#9LSQ__A0ZM"A1I$F7-HT:E6K5JUBW<O4:-BS9LF<'I%7KDVU;
-MHW"/RIU+]RE5O'GU9N7;5RQ9M`D_$%;+UNW;Q$N9-H9J%W("R7L/5+8\UJS"
-M#YHW%Q;J^4)B"J$9CRYM&C6"KJI7%_(a)K.#-LV;-IN[V-6ZGNW5--G_9->379
-MU["/(]_0V3-SN:,=/_^&[/MW];YCL6>/C;S[<M#@PTL=3QXU<.'#U:_?SMW]
-M9_BBR3??7?79%]QJ^JW'GFS^_1>7<P+R5J!>]U66H(+\-6C;;?&%)R%>U)U7
-M@$(C*(CA=H9YQR&$$4;76XA]D5BBB?NAJ-Q[<.76HHL(a)9I5`!M.9=Z",,]*H
-M77LW(I9CA]#Q:)4-9#22R2:*".+"9'P1.4*1-&;8X'?./4?78PM$T8@K=4A1
-M@P4U,*$($WN-F!`)6]9I9'9>!E7;BBQZJ(`5I6RBA@B1I7"(!7LI1`*==7+9
-MI8UZJKADGXV]4`HQ9U@@759()+'5`8HNVJBC)N89J9*3BMG``W8\H\@,]('_
-MB$,3>H6Z**-VWKG@9AJ"&:!3+\CBRA/B.6F5!F_4FM`)MXK:J*Z[$M8K@`%:
-M$4TC)M05JU6'*(O0"<PV.RJI-2*9Y(8`2F!(-'),T"1>$>01)`(*@1NNN,_J
-M:NJ>H+VP##'$RL=;!F/D5:^]]SJ;ZYW[2GH4$>2$<L.O35;E`A,@'HQPL[@N
-M_*BYI_XW!3F8>,!DDTBD`)G&&W,\*K0-NV4'.89XH-C)8RKP!*%XL8QPPAV3
-M6RZ#21HB#AO4JDJ:&!D0F(#//[O\,L.0ZHG*-EB@FZK2#5R`!7T*L?!SU%)[
-M_#'1&,BRC1(X/DAQ`Q'H@(48+@Q85=ABC]WRK5-3_[U=*MP4P>^DO]90BSWW
-MW*.+!G;CS<(*>MM;]I8P(W=U$>?ZVI0&M'S#3C_WL+/*`DY-Y3@+>4?.<="5
-MJW6U$?V%[."#7[3B2S7L?).-+S<X=CKJD4N.K]GKP0`$%UQT@3PJZ<`.U+E:
-MWPS!&G]8((a)HLL+1BR0]0_8XZY,%/3CEL.Z3!BC7KM*.^^NJD$XPSGZ"10^RR
-M?^=%%F"L,<?^8)30?4*H"Z``@P>TCL$@#;Q81_K@P<`&RB,=QV!@.Q3X"S2`
-M8%IP:8(02C`$(0AA""5(P/\0(L`2IDYUXH*!';"A0/4UL('O4$<$7SC!=8`#
-M$!>47?0\4`49J."'*G!`5/_J94(!@@^%BWJ#-<[1PG:\,![Q>$<^@@'%>-!0
-M@>C`QAF^!!</_$`&'>B`$(>XK!.LH(@!)"`)@'"*;IP#'2U\(3SBD0YYS***
-M5KSB.LX!CD_D`'IPT4(*(L`DC9T1C2?\612@X48FQI&&\CC&._`HQQJB(a)X_4
-M4`(@*:"#)$CO5SY#9"+!E09&(a)N.-"EQ@`]NA#F2L@Y*53.4YSM$-:H3A2V(0
-MP=8:`+5#HA%A>8"&-;HQ#E0^$A[M(`<SRB''9M9P'9<$1S>@P0;_X$`*?&(*
-MU,PH2E(F`QK:(*8QT^=$>&Q#&N!H9B6?&<UN6`,:M[P1&4(0O>8H99O@$F47
-M@*'_#&J$LYCC5!\WEH$-==*0G;.4IC:@`0Q-L@4'1T!57/`)+E\*T`FX``8T
-M_-F-4XYS'=R0QC#*6<55KB^5T$QH-Q::C%/H('9DT(##D*(H`EJ4!3$812TT
-MRE%P`!2.ZPB'-&SAQ'C0XQ[XN$<]Z(%,E&)QEN-0*#24`8Q+A(`[.V#"821*
-M@5`1\`0"Y`,M=KI1:X33HV\4QS-F<0XGU@,?_A#(/N[!5*=>4J7:>"=5:3&&
-MGIS!`YF#BZV^BKH=T&*L_!1F.#LZRW,TPQ8L;`<]\%&0?-0#'JE$QUWYV(V5
-MZA48M/`$"(QPA!1)RE:+LBD@8G'8Q%+#K)T]93.:P0LX_\*C'OTP"#[B`<W-
-M<M:SU&`H:%41!SDD9ZN?(1''@K<#5:QB%;0`AFMAVXUK/(,5LT2'9'-;D'M@
-MMK'GB&IG\QI<JN*"%JK(a)Q$N/B]RN)J1.S8K<&U3A7,1JM*S:P,8S/@$.C[[R
-M'G$=2#Z8>LEQB'>\U@BN<`^KBDY<05KGTM)R$=:"3IC"%*I@K72_6=9BA((:
-ML06'=N-QCWV8>!]UY:,TQTM>:$`C&<`X;RQ,P0E$\"I)6AK!A,'E!$YXXL+0
-MC2XP.$R,69Q"&TB.+1/+*<$]KGBE>4VPBV$,6O326!(^N+%R7C.J'<>!$YRP
-M<'V%#(Q>%.,0U'BM61?KT_!"=?_%2(ZR@I5!Y<.N0A6>X,0CFH`V/6%G7,L]
-M!)C#C&'61G<8R`"$,EQ<5FNL.<Z0CK*4&4U5Z1XV%JJ@,2<6`8>JZ:?+MX*!
-M)"9Q"3#_.,.TR$4Q*)$+?BZ:T1M-<W!E+6M83U6ZEJ8%IDV19TD@`@Y7-=>%
-M0%T$21A;$J8N]"YF<0E<2U<9K[:UM%T,;6?7XM*9SC,G)%$(.,PO0\/NLA*.
-M;>QDLZ(8=3CL3IT-#&%`&]KN?K<RA,%N8%S;SMD&LR06L0<X^.!(LKD0;$9U
-MA4<\8A&+*#<G1E&,/*!:W>NNM\2M?5A=WYG7^O;U'<SP;X`31N`#KU/!%X&(
-MDI>[%YG_J`1]5V%HB-?"%\#PA<QACNM:V+SB%J<OQK?MZSW0P0P]&)I:0)Z=
-M+8V\$'TH1,))40PS^!C#SF4YSJ=.]8K'(A9WSK0I.I%Q1!3B#F[P0M!/-/2$
-M]$17(X#"P??`]D)(HAEUF`28._%CJ#_WZGB?.MZQGO4+[_P2QO9ZO\V0A;&3
-MW2>#T97:%W&'QN\!Y7M0>++]3M^5/_?RE=?YA3W!]8P_0O!T<`,8JN`"(Y7=
-M(OQ(O>I7S_K6N_[UL(?]1A32>GW$_O:XSST_9D][U=M>]ZLO"/!?S_O>\^/W
-MPU_(\%5?_(',0Q\$\?WR$<(/=\SC^0))OD4&P8#N>]_[CG!'__2/O_S=%\08
-M/!```-8?`!08XQ_`OT@;UD__^FO"_`,A__3S3X7Z&Z#^2X!\L8<1Y@`*!FB`
-MFA```,``YF`0YB=[^<=\V<<#Z\<!H.`._#`/T]!_`+`$Q)=]^+<1>+!^CE`0
-MW@`*FG"!U]=Z_U"`FJ`)&)AZ`U$&ZX<'$9AZMZ"`K]!ZT_""H`!]PG=]/9B"
-M0.@0\Z"`/#`/`^$.*%!_`!`$WA"#J><.%%A_/.`-0.@."K@%XZ=Z\V!]7F@,
-M'%!_`4`%^*</YF`,30B`1;@02P```G`+`^$-Z@<`!L`#_V>'MQ"#YI"'=^B'
-MM[![(R@`^'=[\_`*"FB'>+A^%0!]_/]P(a)G7(`#S``.O'`&V($-.P?EOP@)3(
-M`=XP$--0`0#``<9@>Z*(`MZ@>MXPAA6`@11(!=D'?_`7@O"G#].@?CQ@#JIW
-MBT_8@L:`B^(G$(Z`BPPABA7PB0*A"788C,ZG?GC@#LIHB06A#_\W"/PPAGC@
-MA>ZPC=RXC>;PA?V'`LRW>[>P?FG8?QP0@OPP@@#0@`GA""1($$$``#SP@O;X
-M@C0``#3@#?,8!/=HC_G(`_S0A&6@>J_@A/77!N9`B5OPCYK@")0X"+=`B53@
-M"/\(D0`P"`FA#[BHA`,QA@A9?Q5@#B`9DA7(#V](`[]7CB;Y"MY@DO6W!0<)
-MD^M7!@G1?W'_6!!-6`$HL`14\)-`N01M,)`+&`1+<)1(>91#J8P!D(K'UXWN
-MD(;J]X7KQP-'"914<)6O,)-!(a))59J968J(FTN`7T.`W,*'QDF8NL%WT<28\"
-MZ'OSZ('\0(GW1Q#Z,`_F-PW_IPG19PZ7:!!CR`%G*1`L"0K?.!#ZD)6ZF(D`
-M``K/9WZ)N00QJ(Q/B)>KIP]O*`"ZN(X+Z)'_<)>OX),"\8;2^)E1J0FB>1"@
-M```!L(=0.0W3,(\!H)"I9PRG.!"RV08Q.)$`((ZJ-W]P6`:O8`Z:4`9Y&(BI
-M1XT+N(/\8`YXH(`V^)G_QP"EJ`_>T`;0B1#`&9*TF8^L:0"1Z)GZ_["&`0">
-ME6B9JN<(B>B$##`-P=>'ZR<`!I"(2T`0=!B?\[E^L(@0$/E]WF<`=?D/@Y"'
-M<+@%E\@/;5"'!?J6J3</;8`"!A"A0?"#P2<0\[`$ZUD!?%D0\Q`$&;JA$J&.
-M&HB7"=&<QN`.#*I[!W&7T^"9*^H.+1H1OX=]$G%]-ZBBS;<0&-E^QN"7$-$&
-M_Z>$H-">LSB`.<H09(D"FH"=`G"B#T&#/%""_Z",TW"D&#$/"UBE_V`,`$`%
-M[^<0`E`!!*&,7SI[M)A_$7&09<",%<`!;<@/K_""U;E[U?>$VQB%([B'7QB"
-M:!A]*)I_M_""@3@/AQF%U@<*GYB!MNB#[O^H$.7H"%@H$-9'$*"@H`!0`;>@
-MA.Q(?V19?PP0`"[*`Z"ZA`!@D_P`"@2ZG!#Z#WJ)`I28C1JXAO07!']IEP'@
-MB<^G#VU(@T'0HO-P"Z+H"'YYA*TX#R?8?V4`"N6HD0*A#PH("@,!CZDX"*.8
-MJ8?XJ=VWI?^WCW>9@P!Z?>XP@J6)$(@8`$N@@AY9CEP8?:)Z"]`G`.DX$,HH
-MA_]0`31@?DP9!-E'`PRPI?K(IZ+8K[\8`-"G#^[0?2[Z#R.XGPGAH)0H`&5@
-M#@U(`TUI$,[*`^('K_AWD/3ZG,'(`Q6P!83X#UC:!OK@H7]YD&+ZBS0@J=1*
-MKP3A#A40`&=Z$*__0(F]J(a)^C.)@"$00&\'X&4`$;"P"O(*D92;(!@`=<^G[*
-M:`[N(`#Z:A#F$*;_<`L"4)];ZJ%."Y7A"@!ENJ)`.`]CZ`B9&`0\^P_S5Z5!
-M6X0'6;0"P0$""8_B%P";"+(D"P!M<!#SP`!B:K58RYLT":T'X0V:X*0"L9I!
-M@*5+T*@$L04T^P]!.[1N*Z`!8`X\P`&CV8I)*Q!EN*(,(a)+F(N)][RP#75[K7
-M%X4D>A#*.)SF5XXVR0$,F+#_((D"80`,(+G.A[<!P*P'.7_!2`,&X("9B+F@
-MT+D"T7\)^X7;F!#NT*5.NWMD*7YJ"H8#\;*U.ZYM2Q`H,)79%P#P.A"KQ\FL
-MLZ@/8X@"_U"\ZXJT6`M_7^@-!A"U"/&&6Q"%\Y>WQ^N\CCA_#-M]^%>.D_L/
-M\&B^`T&!4BH0%%@&OS<-3=A^4PH`Z7N^'2A^U:<)#&``LAM]\\BI!3%_Y9F?
-MFS@0;4H0Y0BS=UO`#>RB*/F=_R<`J&J^+VF3!(&(=FB>*'#!!G&"FL"X2]@&
-M61FQ!?$*7SL//_C#;:@/_SN'6_"3@P!]M_"EB.J`@_"36T#"5EK%5GS%6)S%
-36KS%7-S%7OS%8!S&8IP1`<$`.P``
-`
-end
-
-
-
-
------------------------------7d033e3733c--
-
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.ref
deleted file mode 100644
index 7d20149..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-junk.ref
+++ /dev/null
@@ -1,26 +0,0 @@
-{
- "Part_1" => {
- "Size" => 373,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Size" => 6965,
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Msg" => {
- "Subject" => "mime::parser",
- "Type" => "multipart/mixed",
- "To" => "eryq\(a)zeegee.com",
- "From" => "\"ADJE Webmail Tech Support\" <support\(a)webmail.uwohali.com>",
- "Encoding" => "7bit",
- "Boundary" => "---------------------------7d033e3733c"
- },
- "Parser" => {
- "Message" => "testmsgs/uu-junk.msg",
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- }
-}
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.msg b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.msg
deleted file mode 100644
index b7639fd..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.msg
+++ /dev/null
@@ -1,125 +0,0 @@
-From: me
-To: you
-Subject: uudecoding
-
-I've uuencoded the ZeeGee logo and another GIF file below.
-
-begin 644 up.gif
-M1TE&.#=A$P`3`*$``/___P```("`@,#`P"P`````$P`3```"1X2/F<'MSTQ0
-M%(@)YMB\;W%)@$<.(*:5W2F2@<=F8]>LH4P[7)P.T&NZI7Z,(&JF^@B121Y3
-4Y4SNEJ"J]8JZ:JTH(K$"/A0``#L`
-`
-end
-
-begin 644 zeegee.gif
-M1TE&.#=A6P!P`/<```````@("!`0$#D`(3D`*4(`*1@8&$H`*4H`,5(`,5(`
-M.5H`,2$A(5H`.5((,6,`.6,`0EH(.6L`0F,(.6,(0BDI*5H0.6L(0FL(2F,0
-M.6,00G,(2C$Q,4(I,6L02GL(4G,04G,02FL80H0(4H0(6E(I.7,80HP(6CDY
-M.6LA0D(Y.90(6I0(8XP06G,A2H084H086I008U(Y0GLA4D)"0G,I2H0A2G,I
-M4H0A4H0A6H0I4I0A8TI*2FLY4GLQ6G,Y4I0I8U)24F-*4EI22I0Q8Y0Q:YPQ
-M:Y0Y6I0Y8X1"6I0Y:UI:6HQ"6H1*8Z4Y<YQ"8XQ*:ZTY:Y1*8YQ">V-C8WM:
-M8Z5"<Y12:Z5*:WMC8ZU*:VMK:ZU*<ZU*>X1C:Y1:<WMK:Z52>ZU2<Z5::[52
-M<W-S<XQK:ZU:<ZU:A+5:A*UC<XQS<ZUC>WM[>Y1S<ZUCA)QS<ZUK>[UC>XQ[
-M>YQS>[5K>[UCE)Q[>X2$A+UKA)Q[E*5[>[UKC*5[A*5[E)R$>[USC*5[G-YC
-MC(R,C*U[G*6$A,YKE+U[C*V$A+5[G,YSC*V$C+5[I=YKE)24E*V,C+6$I;V$
-MI;6,C+6,E-9[G+V,C*V4C+V,E-Y[E-Y[G)R<G-Z$E+V4E,:4E,:4G-:,G*6E
-MI>>$I;V<G,Z4G-:4G.^$K<:<G-:4I=Z,M=Z,O<Z<G,Z<I=Z4I;VEI>^,I:VM
-MK<:EI<ZEI>>4O>^4M=:EI=:EK>><K;6UM=ZEK=ZEI=ZEM?><I>>EK?><K=:M
-MK>>EM=ZMK>>EO=ZMM>^EK?^<M?^<O;V]O>^EO?^<QN>MK>>MM>^ESO>EO?^E
-MO>^MO?^EQN>UM?^ESO>MQL;&QN^UM=Z]M>^UO?^MO?>UO>>]O>^]O?^USO^U
-MQO>]O<[.SN?&O?>]QO^]QO^]SO?&QO^]WO?&SM;6UO_&QO_&SO_&WO_&Y__.
-MSN_6SO_.UM[>WO_.WO_6UO_6WO_6Y^?GY__>WO_>Y__GWO_GY__G[__G]^_O
-M[__O[_?W]__W]__W_____RP`````6P!P``<(_P#_"1Q(L*#!@P@3*ES(L*'#
-MAQ`C2IQ(L:+%BQ@S:I08J:-'2"!#BAP9DI')1(12JES)LF6@ES!C^IE)L^9,
-M/3ASZE2XH:?/GAB"8KA`M"B%HT@A*(7PH('3IU`;*)BJ(('5JPBR:M5ZH&N!
-MKV#!$AA+8(#9LSQ__A0ZM"A1I$F7-HT:E6K5JUBW<O4:-BS9LF<'I%7KDVU;
-MHW"/RIU+]RE5O'GU9N7;5RQ9M`D_$%;+UNW;Q$N9-H9J%W("R7L/5+8\UJS"
-M#YHW%Q;J^4)B"J$9CRYM&C6"KJI7%_(a)K.#-LV;-IN[V-6ZGNW5--G_9->379
-MU["/(]_0V3-SN:,=/_^&[/MW];YCL6>/C;S[<M#@PTL=3QXU<.'#U:_?SMW]
-M9_BBR3??7?79%]QJ^JW'GFS^_1>7<P+R5J!>]U66H(+\-6C;;?&%)R%>U)U7
-M@$(C*(CA=H9YQR&$$4;76XA]D5BBB?NAJ-Q[<.76HHL(a)9I5`!M.9=Z",,]*H
-M77LW(I9CA]#Q:)4-9#22R2:*".+"9'P1.4*1-&;8X'?./4?78PM$T8@K=4A1
-M@P4U,*$($WN-F!`)6]9I9'9>!E7;BBQZJ(`5I6RBA@B1I7"(!7LI1`*==7+9
-MI8UZJKADGXV]4`HQ9U@@759()+'5`8HNVJBC)N89J9*3BMG``W8\H\@,]('_
-MB$,3>H6Z**-VWKG@9AJ"&:!3+\CBRA/B.6F5!F_4FM`)MXK:J*Z[$M8K@`%:
-M$4TC)M05JU6'*(O0"<PV.RJI-2*9Y(8`2F!(-'),T"1>$>01)`(*@1NNN,_J
-M:NJ>H+VP##'$RL=;!F/D5:^]]SJ;ZYW[2GH4$>2$<L.O35;E`A,@'HQPL[@N
-M_*BYI_XW!3F8>,!DDTBD`)G&&W,\*K0-NV4'.89XH-C)8RKP!*%XL8QPPAV3
-M6RZ#21HB#AO4JDJ:&!D0F(#//[O\,L.0ZHG*-EB@FZK2#5R`!7T*L?!SU%)[
-M_#'1&,BRC1(X/DAQ`Q'H@(48+@Q85=ABC]WRK5-3_[U=*MP4P>^DO]90BSWW
-MW*.+!G;CS<(*>MM;]I8P(W=U$>?ZVI0&M'S#3C_WL+/*`DY-Y3@+>4?.<="5
-MJW6U$?V%[."#7[3B2S7L?).-+S<X=CKJD4N.K]GKP0`$%UQT@3PJZ<`.U+E:
-MWPS!&G]8((a)HLL+1BR0]0_8XZY,%/3CEL.Z3!BC7KM*.^^NJD$XPSGZ"10^RR
-M?^=%%F"L,<?^8)30?4*H"Z``@P>TCL$@#;Q81_K@P<`&RB,=QV!@.Q3X"S2`
-M8%IP:8(02C`$(0AA""5(P/\0(L`2IDYUXH*!';"A0/4UL('O4$<$7SC!=8`#
-M$!>47?0\4`49J."'*G!`5/_J94(!@@^%BWJ#-<[1PG:\,![Q>$<^@@'%>-!0
-M@>C`QAF^!!</_$`&'>B`$(>XK!.LH(@!)"`)@'"*;IP#'2U\(3SBD0YYS***
-M5KSB.LX!CD_D`'IPT4(*(L`DC9T1C2?\612@X48FQI&&\CC&._`HQQJB(a)X_4
-M4`(@*:"#)$CO5SY#9"+!E09&(a)N.-"EQ@`]NA#F2L@Y*53.4YSM$-:H3A2V(0
-MP=8:`+5#HA%A>8"&-;HQ#E0^$A[M(`<SRB''9M9P'9<$1S>@P0;_X$`*?&(*
-MU,PH2E(F`QK:(*8QT^=$>&Q#&N!H9B6?&<UN6`,:M[P1&4(0O>8H99O@$F47
-M@*'_#&J$LYCC5!\WEH$-==*0G;.4IC:@`0Q-L@4'1T!57/`)+E\*T`FX``8T
-M_-F-4XYS'=R0QC#*6<55KB^5T$QH-Q::C%/H('9DT(##D*(H`EJ4!3$812TT
-MRE%P`!2.ZPB'-&SAQ'C0XQ[XN$<]Z(%,E&)QEN-0*#24`8Q+A(`[.V#"821*
-M@5`1\`0"Y`,M=KI1:X33HV\4QS-F<0XGU@,?_A#(/N[!5*=>4J7:>"=5:3&&
-MGIS!`YF#BZV^BKH=T&*L_!1F.#LZRW,TPQ8L;`<]\%&0?-0#'JE$QUWYV(V5
-MZA48M/`$"(QPA!1)RE:+LBD@8G'8Q%+#K)T]93.:P0LX_\*C'OTP"#[B`<W-
-M<M:SU&`H:%41!SDD9ZN?(1''@K<#5:QB%;0`AFMAVXUK/(,5LT2'9'-;D'M@
-MMK'GB&IG\QI<JN*"%JK(a)Q$N/B]RN)J1.S8K<&U3A7,1JM*S:P,8S/@$.C[[R
-M'G$=2#Z8>LEQB'>\U@BN<`^KBDY<05KGTM)R$=:"3IC"%*I@K72_6=9BA((:
-ML06'=N-QCWV8>!]UY:,TQTM>:$`C&<`X;RQ,P0E$\"I)6AK!A,'E!$YXXL+0
-MC2XP.$R,69Q"&TB.+1/+*<$]KGBE>4VPBV$,6O326!(^N+%R7C.J'<>!$YRP
-M<'V%#(Q>%.,0U'BM61?KT_!"=?_%2(ZR@I5!Y<.N0A6>X,0CFH`V/6%G7,L]
-M!)C#C&'61G<8R`"$,EQ<5FNL.<Z0CK*4&4U5Z1XV%JJ@,2<6`8>JZ:?+MX*!
-M)"9Q"3#_.,.TR$4Q*)$+?BZ:T1M-<W!E+6M83U6ZEJ8%IDV19TD@`@Y7-=>%
-M0%T$21A;$J8N]"YF<0E<2U<9K[:UM%T,;6?7XM*9SC,G)%$(.,PO0\/NLA*.
-M;>QDLZ(8=3CL3IT-#&%`&]KN?K<RA,%N8%S;SMD&LR06L0<X^.!(LKD0;$9U
-MA4<\8A&+*#<G1E&,/*!:W>NNM\2M?5A=WYG7^O;U'<SP;X`31N`#KU/!%X&(
-MDI>[%YG_J`1]5V%HB-?"%\#PA<QACNM:V+SB%J<OQK?MZSW0P0P]&)I:0)Z=
-M+8V\$'TH1,))40PS^!C#SF4YSJ=.]8K'(A9WSK0I.I%Q1!3B#F[P0M!/-/2$
-M]$17(X#"P??`]D)(HAEUF`28._%CJ#_WZGB?.MZQGO4+[_P2QO9ZO\V0A;&3
-MW2>#T97:%W&'QN\!Y7M0>++]3M^5/_?RE=?YA3W!]8P_0O!T<`,8JN`"(Y7=
-M(OQ(O>I7S_K6N_[UL(?]1A32>GW$_O:XSST_9D][U=M>]ZLO"/!?S_O>\^/W
-MPU_(\%5?_(',0Q\$\?WR$<(/=\SC^0))OD4&P8#N>]_[CG!'__2/O_S=%\08
-M/!```-8?`!08XQ_`OT@;UD__^FO"_`,A__3S3X7Z&Z#^2X!\L8<1Y@`*!FB`
-MFA```,``YF`0YB=[^<=\V<<#Z\<!H.`._#`/T]!_`+`$Q)=]^+<1>+!^CE`0
-MW@`*FG"!U]=Z_U"`FJ`)&)AZ`U$&ZX<'$9AZMZ"`K]!ZT_""H`!]PG=]/9B"
-M0.@0\Z"`/#`/`^$.*%!_`!`$WA"#J><.%%A_/.`-0.@."K@%XZ=Z\V!]7F@,
-M'%!_`4`%^*</YF`,30B`1;@02P```G`+`^$-Z@<`!L`#_V>'MQ"#YI"'=^B'
-MM[![(R@`^'=[\_`*"FB'>+A^%0!]_/]P(a)G7(`#S``.O'`&V($-.P?EOP@)3(
-M`=XP$--0`0#``<9@>Z*(`MZ@>MXPAA6`@11(!=D'?_`7@O"G#].@?CQ@#JIW
-MBT_8@L:`B^(G$(Z`BPPABA7PB0*A"788C,ZG?GC@#LIHB06A#_\W"/PPAGC@
-MA>ZPC=RXC>;PA?V'`LRW>[>P?FG8?QP0@OPP@@#0@`GA""1($$$``#SP@O;X
-M@C0``#3@#?,8!/=HC_G(`_S0A&6@>J_@A/77!N9`B5OPCYK@")0X"+=`B53@
-M"/\(D0`P"`FA#[BHA`,QA@A9?Q5@#B`9DA7(#V](`[]7CB;Y"MY@DO6W!0<)
-MD^M7!@G1?W'_6!!-6`$HL`14\)-`N01M,)`+&`1+<)1(>91#J8P!D(K'UXWN
-MD(;J]X7KQP-'"914<)6O,)-!(a))59J968J(FTN`7T.`W,*'QDF8NL%WT<28\"
-MZ'OSZ('\0(GW1Q#Z,`_F-PW_IPG19PZ7:!!CR`%G*1`L"0K?.!#ZD)6ZF(D`
-M``K/9WZ)N00QJ(Q/B)>KIP]O*`"ZN(X+Z)'_<)>OX),"\8;2^)E1J0FB>1"@
-M```!L(=0.0W3,(\!H)"I9PRG.!"RV08Q.)$`((ZJ-W]P6`:O8`Z:4`9Y&(BI
-M1XT+N(/\8`YXH(`V^)G_QP"EJ`_>T`;0B1#`&9*TF8^L:0"1Z)GZ_["&`0">
-ME6B9JN<(B>B$##`-P=>'ZR<`!I"(2T`0=!B?\[E^L(@0$/E]WF<`=?D/@Y"'
-M<+@%E\@/;5"'!?J6J3</;8`"!A"A0?"#P2<0\[`$ZUD!?%D0\Q`$&;JA$J&.
-M&HB7"=&<QN`.#*I[!W&7T^"9*^H.+1H1OX=]$G%]-ZBBS;<0&-E^QN"7$-$&
-M_Z>$H-">LSB`.<H09(D"FH"=`G"B#T&#/%""_Z",TW"D&#$/"UBE_V`,`$`%
-M[^<0`E`!!*&,7SI[M)A_$7&09<",%<`!;<@/K_""U;E[U?>$VQB%([B'7QB"
-M:!A]*)I_M_""@3@/AQF%U@<*GYB!MNB#[O^H$.7H"%@H$-9'$*"@H`!0`;>@
-MA.Q(?V19?PP0`"[*`Z"ZA`!@D_P`"@2ZG!#Z#WJ)`I28C1JXAO07!']IEP'@
-MB<^G#VU(@T'0HO-P"Z+H"'YYA*TX#R?8?V4`"N6HD0*A#PH("@,!CZDX"*.8
-MJ8?XJ=VWI?^WCW>9@P!Z?>XP@J6)$(@8`$N@@AY9CEP8?:)Z"]`G`.DX$,HH
-MA_]0`31@?DP9!-E'`PRPI?K(IZ+8K[\8`-"G#^[0?2[Z#R.XGPGAH)0H`&5@
-M#@U(`TUI$,[*`^('K_AWD/3ZG,'(`Q6P!83X#UC:!OK@H7]YD&+ZBS0@J=1*
-MKP3A#A40`&=Z$*__0(F]J(a)^C.)@"$00&\'X&4`$;"P"O(*D92;(!@`=<^G[*
-M:`[N(`#Z:A#F$*;_<`L"4)];ZJ%."Y7A"@!ENJ)`.`]CZ`B9&`0\^P_S5Z5!
-M6X0'6;0"P0$""8_B%P";"+(D"P!M<!#SP`!B:K58RYLT":T'X0V:X*0"L9I!
-M@*5+T*@$L04T^P]!.[1N*Z`!8`X\P`&CV8I)*Q!EN*(,(a)+F(N)][RP#75[K7
-M%X4D>A#*.)SF5XXVR0$,F+#_((D"80`,(+G.A[<!P*P'.7_!2`,&X("9B+F@
-MT+D"T7\)^X7;F!#NT*5.NWMD*7YJ"H8#\;*U.ZYM2Q`H,)79%P#P.A"KQ\FL
-MLZ@/8X@"_U"\ZXJT6`M_7^@-!A"U"/&&6Q"%\Y>WQ^N\CCA_#-M]^%>.D_L/
-M\&B^`T&!4BH0%%@&OS<-3=A^4PH`Z7N^'2A^U:<)#&``LAM]\\BI!3%_Y9F?
-MFS@0;4H0Y0BS=UO`#>RB*/F=_R<`J&J^+VF3!(&(=FB>*'#!!G&"FL"X2]@&
-M61FQ!?$*7SL//_C#;:@/_SN'6_"3@P!]M_"EB.J`@_"36T#"5EK%5GS%6)S%
-36KS%7-S%7OS%8!S&8IP1`<$`.P``
-`
-end
-
diff --git a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.ref b/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.ref
deleted file mode 100644
index db76645..0000000
--- a/monitoring/PerlModules/CPAN/MIME-tools-5.410/testmsgs/uu-zeegee.ref
+++ /dev/null
@@ -1,34 +0,0 @@
-{
- "Parser" => {
- "Message" => "testmsgs/uu-zeegee.msg",
- "ExtractUuencode" => 1,
- "ExtractNested" => 1,
- "OutputToCore" => "0",
- "Name" => "anonymous"
- },
- "Msg" => {
- "Subject" => "uudecoding",
- "Type" => "multipart/mixed",
- "To" => "you",
- "From" => "me",
- "Encoding" => "7bit",
- },
- "Part_1" => {
- "Type" => "text/plain",
- "Encoding" => "7bit"
- },
- "Part_2" => {
- "Filename" => "up.gif",
- "Size" => 110,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- },
- "Part_3" => {
- "Filename" => "zeegee.gif",
- "Size" => 4834,
- "Disposition" => "inline",
- "Type" => "image/gif",
- "Encoding" => "base64"
- }
-}
commit 14195b6f2da8f2e1b1f3504e633dc08aca67b0aa
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Mon Oct 24 11:58:15 2011 +0200
Amending incorrect substitution from ee3623222bf.
diff --git a/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java b/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java
index 527d22d..ea0b9c9 100644
--- a/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java
+++ b/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java
@@ -168,7 +168,7 @@ class ConnectionManager {
Config.get()
.getString(ConfigDefaults.DB_PASSWORD));
String connectionUrl =
- Config.get().getString(ConfigDefaults.DB_CLASS) + ":";
+ Config.get().getString(ConfigDefaults.DB_PROTO) + ":";
String dbName = Config.get().getString(ConfigDefaults.DB_NAME);
String dbHost = Config.get().getString(ConfigDefaults.DB_HOST);
String dbPort = Config.get().getString(ConfigDefaults.DB_PORT);
commit 34a538ecdd4193b3bc23cc5b503ca327bad0f70a
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Oct 24 11:56:10 2011 +0200
Automatic commit of package [rhncfg] release [5.10.19-1].
diff --git a/client/tools/rhncfg/rhncfg.spec b/client/tools/rhncfg/rhncfg.spec
index 9332835..9aa25cd 100644
--- a/client/tools/rhncfg/rhncfg.spec
+++ b/client/tools/rhncfg/rhncfg.spec
@@ -8,7 +8,7 @@ Group: Applications/System
License: GPLv2 and Python
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 5.10.18
+Version: 5.10.19
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -106,6 +106,10 @@ rm -rf $RPM_BUILD_ROOT
# $Id$
%changelog
+* Mon Oct 24 2011 Jan Pazdziora 5.10.19-1
+- 743121 - don't report differences containing invalid UTF-8
+ (mzazrivec(a)redhat.com)
+
* Wed Oct 19 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.10.18-1
- 743424 - rhncfg-client diff: do not fail when not a valid symlink
diff --git a/rel-eng/packages/rhncfg b/rel-eng/packages/rhncfg
index 1139db9..0f6db1e 100644
--- a/rel-eng/packages/rhncfg
+++ b/rel-eng/packages/rhncfg
@@ -1 +1 @@
-5.10.18-1 client/tools/rhncfg/
+5.10.19-1 client/tools/rhncfg/
commit b439d123c4606918600bd3b46f88d7648ef3de30
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Mon Oct 24 11:47:19 2011 +0200
682845 - fix apidoc of repository related APIs
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
index b4193cb..4076167 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/channel/software/ChannelSoftwareHandler.java
@@ -2346,18 +2346,18 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Creates a ContentSource (repo)
- * @param sessionKey WebSession containing User information.
+ * Creates a repository
+ * @param sessionKey Session containing user information.
* @param label of the repo to be created
* @param type of the repo (YUM only for now)
* @param url of the repo
- * @return the new ContentSource
+ * @return new ContentSource
*
- * @xmlrpc.doc Creates a ContentSource (repo)
+ * @xmlrpc.doc Creates a repository
* @xmlrpc.param #session_key()
- * @xmlrpc.param #param_desc("string", "label", "label of repo wanted")
- * @xmlrpc.param #param_desc("string", "type", "type of repo wanted")
- * @xmlrpc.param #param_desc("string", "url", "url of repo wanted")
+ * @xmlrpc.param #param_desc("string", "label", "repository label")
+ * @xmlrpc.param #param_desc("string", "type", "repository type (only YUM is supported)")
+ * @xmlrpc.param #param_desc("string", "url", "repository url")
* @xmlrpc.returntype $ContentSourceSerializer
**/
public ContentSource createRepo(String sessionKey, String label, String type,
@@ -2377,12 +2377,12 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Removes a ContentSource (repo)
- * @param sessionKey WebSession containing User information.
+ * Removes a repository
+ * @param sessionKey Session containing user information.
* @param id of the repo to be removed
* @return Integer 1 on success
*
- * @xmlrpc.doc Creates a ContentSource (repo)
+ * @xmlrpc.doc Removes a repository
* @xmlrpc.param #session_key()
* @xmlrpc.param #param_desc("long", "id", "ID of repo to be removed")
* @xmlrpc.returntype #return_int_success()
@@ -2396,12 +2396,12 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Removes a ContentSource (repo)
- * @param sessionKey WebSession containing User information.
+ * Removes a repository
+ * @param sessionKey Session containing user information.
* @param label of the repo to be removed
* @return Integer 1 on success
*
- * @xmlrpc.doc Creates a ContentSource (repo)
+ * @xmlrpc.doc Removes a repository
* @xmlrpc.param #session_key()
* @xmlrpc.param #param_desc("string", "label", "label of repo to be removed")
* @xmlrpc.returntype #return_int_success()
@@ -2415,16 +2415,16 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Associates a ContentSource (repo) with a channel
- * @param sessionKey WebSession containing User information.
+ * Associates a repository with a channel
+ * @param sessionKey Session containing user information.
* @param chanLabel of the channel to use
* @param repoLabel of the repo to associate
* @return the channel with the newly associated repo
*
- * @xmlrpc.doc Associates a ContentSource (repo) with a channel
+ * @xmlrpc.doc Associates a repository with a channel
* @xmlrpc.param #session_key()
- * @xmlrpc.param #param_desc("string", "chanLabel", "of the channel to use")
- * @xmlrpc.param #param_desc("string", "repoLabel", "of the repo to associate")
+ * @xmlrpc.param #param_desc("string", "channelLabel", "channel label")
+ * @xmlrpc.param #param_desc("string", "repoLabel", "repository label")
* @xmlrpc.returntype $ChannelSerializer
**/
public Channel associateRepo(String sessionKey, String chanLabel, String repoLabel) {
@@ -2440,16 +2440,16 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Disassociates a ContentSource (repo) with a channel
- * @param sessionKey WebSession containing User information.
+ * Disassociates a repository from a channel
+ * @param sessionKey Session containing user information.
* @param chanLabel of the channel to use
* @param repoLabel of the repo to disassociate
* @return the channel minus the disassociated repo
*
- * @xmlrpc.doc Disassociates a ContentSource (repo) with a channel
+ * @xmlrpc.doc Disassociates a repository from a channel
* @xmlrpc.param #session_key()
- * @xmlrpc.param #param_desc("string", "chanLabel", "of the channel to use")
- * @xmlrpc.param #param_desc("string", "repoLabel", "of the repo to disassociate")
+ * @xmlrpc.param #param_desc("string", "channelLabel", "channel label")
+ * @xmlrpc.param #param_desc("string", "repoLabel", "repository label")
* @xmlrpc.returntype $ChannelSerializer
**/
public Channel disassociateRepo(String sessionKey, String chanLabel, String repoLabel) {
@@ -2467,16 +2467,16 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Updates the ContentSource (repo) source URL
- * @param sessionKey WebSession containing User information.
+ * Updates repository source URL
+ * @param sessionKey Session containing user information.
* @param id ID of the repo
* @param url new URL to use
* @return the updated repo
*
- * @xmlrpc.doc Updates the ContentSource (repo) source URL
+ * @xmlrpc.doc Updates repository source URL
* @xmlrpc.param #session_key()
- * @xmlrpc.param #param_desc("Long", "id", "of the repo to use")
- * @xmlrpc.param #param_desc("string", "url", "new URL to use")
+ * @xmlrpc.param #param_desc("int", "id", "repository id")
+ * @xmlrpc.param #param_desc("string", "url", "repository url")
* @xmlrpc.returntype $ContentSourceSerializer
**/
public ContentSource updateRepoUrl(String sessionKey, Integer id, String url) {
@@ -2488,16 +2488,16 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Updates the ContentSource (repo) source URL
- * @param sessionKey WebSession containing User information.
+ * Updates repository source URL
+ * @param sessionKey Session containing user information.
* @param label of the repo to use
* @param url new URL to use
* @return the updated repo
*
- * @xmlrpc.doc Updates the ContentSource (repo) source URL
+ * @xmlrpc.doc Updates repository source URL
* @xmlrpc.param #session_key()
- * @xmlrpc.param #param_desc("string", "label", "of the repo to use")
- * @xmlrpc.param #param_desc("string", "url", "new URL to use")
+ * @xmlrpc.param #param_desc("string", "label", "repository label")
+ * @xmlrpc.param #param_desc("string", "url", "repository url")
* @xmlrpc.returntype $ContentSourceSerializer
**/
public ContentSource updateRepoUrl(String sessionKey, String label, String url) {
@@ -2509,16 +2509,16 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Updates the ContentSource's (repo) label
- * @param sessionKey WebSession containing User information.
+ * Updates repository label
+ * @param sessionKey Session containing user information.
* @param id ID of the repo
* @param label new label
* @return the updated repo
*
- * @xmlrpc.doc Updates the ContentSource's (repo) label
+ * @xmlrpc.doc Updates repository label
* @xmlrpc.param #session_key()
- * @xmlrpc.param #param_desc("Long", "id", "of the repo to use")
- * @xmlrpc.param #param_desc("string", "label", "new label to use")
+ * @xmlrpc.param #param_desc("int", "id", "repository id")
+ * @xmlrpc.param #param_desc("string", "label", "new repository label")
* @xmlrpc.returntype $ContentSourceSerializer
**/
public ContentSource updateRepoLabel(String sessionKey, Integer id, String label) {
@@ -2530,8 +2530,8 @@ public class ChannelSoftwareHandler extends BaseHandler {
}
/**
- * Updates a ContentSource (repo)
- * @param sessionKey WebSession containing User information.
+ * Updates a repository
+ * @param sessionKey Session containing user information.
* @param id ID of the repo
* @param label new label
* @param url new URL
@@ -2539,9 +2539,9 @@ public class ChannelSoftwareHandler extends BaseHandler {
*
* @xmlrpc.doc Updates a ContentSource (repo)
* @xmlrpc.param #session_key()
- * @xmlrpc.param #param_desc("Long", "id", "of the repo to use")
- * @xmlrpc.param #param_desc("string", "label", "new label to use")
- * @xmlrpc.param #param_desc("string", "url", "new URL to use")
+ * @xmlrpc.param #param_desc("int", "id", "repository id")
+ * @xmlrpc.param #param_desc("string", "label", "new repository label")
+ * @xmlrpc.param #param_desc("string", "url", "new repository URL")
* @xmlrpc.returntype $ContentSourceSerializer
**/
public ContentSource updateRepo(String sessionKey, Integer id, String label,
@@ -2556,11 +2556,11 @@ public class ChannelSoftwareHandler extends BaseHandler {
/**
* Returns the details of the given repo
- * @param sessionKey WebSession containing User information.
+ * @param sessionKey Session containing user information.
* @param repoLabel Label of repo whose details are sought.
* @return the repo requested.
*
- * @xmlrpc.doc Returns details of the given repo
+ * @xmlrpc.doc Returns details of the given repository
* @xmlrpc.param #session_key()
* @xmlrpc.param #param_desc("string", "repoLabel", "repo to query")
* @xmlrpc.returntype
@@ -2572,7 +2572,7 @@ public class ChannelSoftwareHandler extends BaseHandler {
/**
* Returns the details of the given repo
- * @param sessionKey WebSession containing User information.
+ * @param sessionKey Session containing user information.
* @param id ID of repo whose details are sought.
* @return the repo requested.
*
commit ee3623222bff1b5fdccf0abad1ca3a57bb16541b
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Mon Oct 24 11:49:28 2011 +0200
Do not hardcode config identifier, use defaults instead.
diff --git a/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java b/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java
index 71690dd..527d22d 100644
--- a/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java
+++ b/java/code/src/com/redhat/rhn/common/hibernate/ConnectionManager.java
@@ -168,7 +168,7 @@ class ConnectionManager {
Config.get()
.getString(ConfigDefaults.DB_PASSWORD));
String connectionUrl =
- Config.get().getString("hibernate.connection.driver_proto") + ":";
+ Config.get().getString(ConfigDefaults.DB_CLASS) + ":";
String dbName = Config.get().getString(ConfigDefaults.DB_NAME);
String dbHost = Config.get().getString(ConfigDefaults.DB_HOST);
String dbPort = Config.get().getString(ConfigDefaults.DB_PORT);
commit 73d24bbbdbc33f5b0904a58c8e38740aa17209ce
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Oct 24 11:51:08 2011 +0200
Automatic commit of package [spacewalk-search] release [1.6.5-1].
diff --git a/rel-eng/packages/spacewalk-search b/rel-eng/packages/spacewalk-search
index 3af0bfd..7158f16 100644
--- a/rel-eng/packages/spacewalk-search
+++ b/rel-eng/packages/spacewalk-search
@@ -1 +1 @@
-1.6.4-1 search-server/spacewalk-search/
+1.6.5-1 search-server/spacewalk-search/
diff --git a/search-server/spacewalk-search/spacewalk-search.spec b/search-server/spacewalk-search/spacewalk-search.spec
index 33402e7..434281f 100644
--- a/search-server/spacewalk-search/spacewalk-search.spec
+++ b/search-server/spacewalk-search/spacewalk-search.spec
@@ -4,7 +4,7 @@ Name: spacewalk-search
Summary: Spacewalk Full Text Search Server
Group: Applications/Internet
License: GPLv2
-Version: 1.6.4
+Version: 1.6.5
Release: 1%{?dist}
# This src.rpm is cannonical upstream
# You can obtain it using this set of commands
@@ -116,6 +116,9 @@ fi
%{_sysconfdir}/logrotate.d/rhn-search
%changelog
+* Mon Oct 24 2011 Jan Pazdziora 1.6.5-1
+- 745102 - fixing typo.
+
* Thu Oct 13 2011 Miroslav SuchÜ 1.6.4-1
- 745102 - display IPv6 from networkinfo in SDC and in system search
commit 836b9f2dc869ddfd0bd138fb96406125fa795c03
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Mon Oct 24 11:50:29 2011 +0200
745102 - fixing typo.
diff --git a/search-server/spacewalk-search/src/config/com/redhat/satellite/search/db/server.xml b/search-server/spacewalk-search/src/config/com/redhat/satellite/search/db/server.xml
index ad7dba1..2fd3554 100644
--- a/search-server/spacewalk-search/src/config/com/redhat/satellite/search/db/server.xml
+++ b/search-server/spacewalk-search/src/config/com/redhat/satellite/search/db/server.xml
@@ -23,7 +23,7 @@
sl.country as country,
rsn.hostname as hostname,
rsn.ipaddr as ipaddr,
- rsn.ip6addr ad ip6addr,
+ rsn.ip6addr as ip6addr,
dmi.vendor as dmiVendor,
dmi.system as dmiSystem,
dmi.product as dmiProduct,
commit dc3afca0f4ab79df21e4c242446d8934147035d4
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Mon Oct 24 10:32:24 2011 +0200
Automatic commit of package [spacewalk-java] release [1.6.64-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index 0b15bd9..a0ef9af 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -17,7 +17,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.6.63
+Version: 1.6.64
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -557,6 +557,12 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Mon Oct 24 2011 Simon Lukasik <slukasik(a)redhat.com> 1.6.64-1
+- No need to have separate configuration per Tomcat's version
+ (slukasik(a)redhat.com)
+- 748341 - No need to specify docBase, when it's the same as appBase
+ (slukasik(a)redhat.com)
+
* Fri Oct 21 2011 Miroslav SuchÜ 1.6.63-1
- 627809 - write out storage devices if *storage* device list is not empty
- 627809 - send xen virtual block devices to rhnParent
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index 0ef2228..fa499c0 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.6.63-1 java/
+1.6.64-1 java/
commit a7b8c4c49ee485b415aa06c2bc5a06f61e2be288
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Mon Oct 24 10:24:50 2011 +0200
No need to have separate configuration per Tomcat's version
This basically reverts 7c61f92243852d8a52abdf6f894204155aff20e0.
diff --git a/java/conf/rhn6.xml b/java/conf/rhn6.xml
deleted file mode 100644
index 8c88a59..0000000
--- a/java/conf/rhn6.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<!--
- This is a Tomcat 5 Context file. For more information see:
- http://jakarta.apache.org/tomcat/tomcat-5.0-doc/config/context.html
-
- path - is the url path you specify after http://hostname:8080/. To
- take over the root, you leave it empty.
-
- docBase - should the fully qualified path where your
- rhnwebapp is located.
- i.e. /home/devel/username/rhn-java/rhnwebapp
-
- debug - higher number produces more output.
-
- reloadable - indicates to Tomcat that the webapp should be reloaded
- when a change occurs.
-
- allowLinking - true to allow Tomcat to follow symlinks.
--->
-
-<Context path="/rhn" debug="0" reloadable="false" allowLinking="true">
-</Context>
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index 697b49c..0b15bd9 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -324,7 +324,7 @@ install -m 755 conf/rhn.xml $RPM_BUILD_ROOT%{_sysconfdir}/tomcat5/Catalina/local
%else
ant -Dprefix=$RPM_BUILD_ROOT install-tomcat6
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/tomcat6/Catalina/localhost/
-install -m 755 conf/rhn6.xml $RPM_BUILD_ROOT%{_sysconfdir}/tomcat6/Catalina/localhost/rhn.xml
+install -m 755 conf/rhn.xml $RPM_BUILD_ROOT%{_sysconfdir}/tomcat6/Catalina/localhost/rhn.xml
%endif
# check spelling errors in all resources for English if aspell installed
commit c81087e771e60bae00b7c74298a1f95b13207892
Author: Simon Lukasik <slukasik(a)redhat.com>
Date: Mon Oct 24 10:18:51 2011 +0200
748341 - No need to specify docBase, when it's the same as appBase
Addressing:
WARNING: A docBase /var/lib/tomcat6/webapps/rhn inside the host appBase has been specified, and will be ignored
diff --git a/java/conf/rhn.xml b/java/conf/rhn.xml
index 3d717b88..8c88a59 100644
--- a/java/conf/rhn.xml
+++ b/java/conf/rhn.xml
@@ -17,6 +17,5 @@
allowLinking - true to allow Tomcat to follow symlinks.
-->
-<Context path="/rhn" docBase="/var/lib/tomcat5/webapps/rhn/"
- debug="0" reloadable="false" allowLinking="true">
+<Context path="/rhn" debug="0" reloadable="false" allowLinking="true">
</Context>
diff --git a/java/conf/rhn6.xml b/java/conf/rhn6.xml
index 7761aef..8c88a59 100644
--- a/java/conf/rhn6.xml
+++ b/java/conf/rhn6.xml
@@ -17,6 +17,5 @@
allowLinking - true to allow Tomcat to follow symlinks.
-->
-<Context path="/rhn" docBase="/var/lib/tomcat6/webapps/rhn/"
- debug="0" reloadable="false" allowLinking="true">
+<Context path="/rhn" debug="0" reloadable="false" allowLinking="true">
</Context>
commit 6c5520dbef32a876b3a418de354cf87710fef58b
Author: Martin Minar <mminar(a)redhat.com>
Date: Mon Oct 24 10:01:26 2011 +0200
Automatic commit of package [rhnlib] release [2.5.46-1].
diff --git a/client/rhel/rhnlib/rhnlib.spec b/client/rhel/rhnlib/rhnlib.spec
index e5fd774..327d119 100644
--- a/client/rhel/rhnlib/rhnlib.spec
+++ b/client/rhel/rhnlib/rhnlib.spec
@@ -4,7 +4,7 @@ Summary: Python libraries for the RHN project
Name: rhnlib
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 2.5.45
+Version: 2.5.46
Release: 1%{?dist}
Group: Development/Libraries
@@ -61,6 +61,10 @@ rm -rf $RPM_BUILD_ROOT
%{python_sitelib}/*
%changelog
+* Mon Oct 24 2011 Martin Minar <mminar(a)redhat.com> 2.5.46-1
+- simplify code (msuchy(a)redhat.com)
+- move imports to beginning of file (msuchy(a)redhat.com)
+
* Wed Aug 17 2011 Martin Minar <mminar(a)redhat.com> 2.5.45-1
- 730744 - support IPv6 connections (mzazrivec(a)redhat.com)
diff --git a/rel-eng/packages/rhnlib b/rel-eng/packages/rhnlib
index a58a69c..a7aed51 100644
--- a/rel-eng/packages/rhnlib
+++ b/rel-eng/packages/rhnlib
@@ -1 +1 @@
-2.5.45-1 client/rhel/rhnlib/
+2.5.46-1 client/rhel/rhnlib/
commit e9a53d650e769c1279f49d8057fd447e98a873e4
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Oct 21 17:23:31 2011 +0200
Automatic commit of package [osad] release [5.10.24-1].
diff --git a/client/tools/osad/osad.spec b/client/tools/osad/osad.spec
index 66bb930..9ad7da2 100644
--- a/client/tools/osad/osad.spec
+++ b/client/tools/osad/osad.spec
@@ -16,7 +16,7 @@ Group: System Environment/Daemons
License: GPLv2
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 5.10.23
+Version: 5.10.24
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -275,6 +275,9 @@ rpm -ql osa-dispatcher | xargs -n 1 /sbin/restorecon -rvi {}
%endif
%changelog
+* Fri Oct 21 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.10.24-1
+- 679353 - automatically detect system re-registration
+
* Fri Sep 30 2011 Jan Pazdziora 5.10.23-1
- 689939 - match star in common name.
diff --git a/rel-eng/packages/osad b/rel-eng/packages/osad
index f781633..ec50aaa 100644
--- a/rel-eng/packages/osad
+++ b/rel-eng/packages/osad
@@ -1 +1 @@
-5.10.23-1 client/tools/osad/
+5.10.24-1 client/tools/osad/
commit df8fd7dddba65f55305454d4b32a53ee2fe59813
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Oct 21 17:19:47 2011 +0200
679353 - automatically detect system re-registration
This fix is to avoid the need to re-start osad service after
the machine has been re-registered w/ Spacewalk.
By setting the select() timeout (currently to 180 seconds), we
will allow osad to re-enter the process_once() routine, which
takes care of the re-registration detection. Otherwise the system
could have been stuck in an infinite select().
diff --git a/client/tools/osad/src/osad.py b/client/tools/osad/src/osad.py
index 662e641..f0b2351 100644
--- a/client/tools/osad/src/osad.py
+++ b/client/tools/osad/src/osad.py
@@ -239,7 +239,7 @@ class Runner(jabber_lib.Runner):
config = self.read_config()
raise jabber_lib.NeedRestart
- client.process(timeout=None)
+ client.process(timeout=180)
def read_config(self):
ret = {}
commit 36132d7e1b9167cf5c3926c942e4e394cf5fc8e0
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 21 16:11:29 2011 +0200
Automatic commit of package [yum-rhn-plugin] release [1.6.14-1].
diff --git a/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec b/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec
index dabd6a7..1d92342 100644
--- a/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec
+++ b/client/rhel/yum-rhn-plugin/yum-rhn-plugin.spec
@@ -1,6 +1,6 @@
Summary: RHN support for yum
Name: yum-rhn-plugin
-Version: 1.6.13
+Version: 1.6.14
Release: 1%{?dist}
License: GPLv2
Group: System Environment/Base
@@ -72,6 +72,10 @@ fi
%doc LICENSE
%changelog
+* Fri Oct 21 2011 Jan Pazdziora 1.6.14-1
+- When only package name is specified (like in Activation Key -> Packages),
+ only search installed by package name.
+
* Tue Oct 18 2011 Miroslav SuchÜ 1.6.13-1
- move errata.py action to the yum-rhn-plugin package (iartarisi(a)suse.cz)
diff --git a/rel-eng/packages/yum-rhn-plugin b/rel-eng/packages/yum-rhn-plugin
index b7af1a5..ab085c9 100644
--- a/rel-eng/packages/yum-rhn-plugin
+++ b/rel-eng/packages/yum-rhn-plugin
@@ -1 +1 @@
-1.6.13-1 client/rhel/yum-rhn-plugin/
+1.6.14-1 client/rhel/yum-rhn-plugin/
commit abd214be77f6541c32e09097b787a7c32c5bf491
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 21 16:11:09 2011 +0200
Automatic commit of package [rhn-client-tools] release [1.6.27-1].
diff --git a/client/rhel/rhn-client-tools/rhn-client-tools.spec b/client/rhel/rhn-client-tools/rhn-client-tools.spec
index 0c748c3..2576ee5 100644
--- a/client/rhel/rhn-client-tools/rhn-client-tools.spec
+++ b/client/rhel/rhn-client-tools/rhn-client-tools.spec
@@ -4,7 +4,7 @@ Group: System Environment/Base
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
URL: https://fedorahosted.org/spacewalk
Name: rhn-client-tools
-Version: 1.6.26
+Version: 1.6.27
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -334,6 +334,9 @@ make -f Makefile.rhn-client-tools test
%endif
%changelog
+* Fri Oct 21 2011 Jan Pazdziora 1.6.27-1
+- Pass the verbose option (-vv) from rhnreg_ks to rhn_check as well.
+
* Fri Oct 21 2011 Miroslav SuchÜ 1.6.26-1
- 627809 - send xen virtual block devices to rhnParent
- Revert "729161 - default to RHSM in firstboot registration"
diff --git a/rel-eng/packages/rhn-client-tools b/rel-eng/packages/rhn-client-tools
index 45eceab..4057c66 100644
--- a/rel-eng/packages/rhn-client-tools
+++ b/rel-eng/packages/rhn-client-tools
@@ -1 +1 @@
-1.6.26-1 client/rhel/rhn-client-tools/
+1.6.27-1 client/rhel/rhn-client-tools/
commit ea84c915032450b540b1dd47c8062a6cfc4c3d11
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 21 15:52:17 2011 +0200
When only package name is specified (like in Activation Key -> Packages), only search installed by package name.
diff --git a/client/rhel/yum-rhn-plugin/actions/packages.py b/client/rhel/yum-rhn-plugin/actions/packages.py
index 332b2bc..244306e 100644
--- a/client/rhel/yum-rhn-plugin/actions/packages.py
+++ b/client/rhel/yum-rhn-plugin/actions/packages.py
@@ -318,6 +318,16 @@ def update(package_list, cache_only=None):
'release' : package[2],
}
+ if len(package) == 5 \
+ and package[1] == '' \
+ and package[2] == '' \
+ and package[3] == '' \
+ and package[4] == '' \
+ and yum_base.rpmdb.searchNevra(name=package[0]):
+ log.log_debug('Package %s is already installed' % package[0])
+ package_list.remove(package)
+ continue
+
if len(package) > 4:
pkgkeys['arch'] = package[4]
else:
commit 525b1551d6ba5a234b764a38efc136d6dba653a1
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Fri Oct 21 15:20:41 2011 +0200
Pass the verbose option (-vv) from rhnreg_ks to rhn_check as well.
diff --git a/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py b/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py
index 3982403..a035c25 100755
--- a/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py
+++ b/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py
@@ -178,7 +178,7 @@ class RegisterKsCli(rhncli.RhnCli):
sys.stderr.write(_("Warning: yum-rhn-plugin is not present, could not enable it."))
except IOError, e:
sys.stderr.write(_("Warning: Could not open /etc/yum/pluginconf.d/rhnplugin.conf\nyum-rhn-plugin is not enabled.\n") + e.errmsg)
- RegisterKsCli.__runRhnCheck()
+ RegisterKsCli.__runRhnCheck(self.options.verbose)
@staticmethod
def __generateProfileName(hardwareList):
@@ -207,8 +207,11 @@ class RegisterKsCli(rhncli.RhnCli):
return profileName
@staticmethod
- def __runRhnCheck():
- os.system("/usr/sbin/rhn_check")
+ def __runRhnCheck(verbose):
+ if verbose:
+ os.system("/usr/sbin/rhn_check %s" % '-' + ('v' * verbose))
+ else:
+ os.system("/usr/sbin/rhn_check")
if __name__ == "__main__":
cli = RegisterKsCli()
commit 3efd27a370b2ba76b0728f6dc87ee0e246fc3938
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Fri Oct 21 13:52:00 2011 +0200
Automatic commit of package [rhn-client-tools] release [1.6.26-1].
diff --git a/client/rhel/rhn-client-tools/rhn-client-tools.spec b/client/rhel/rhn-client-tools/rhn-client-tools.spec
index 184dd51..0c748c3 100644
--- a/client/rhel/rhn-client-tools/rhn-client-tools.spec
+++ b/client/rhel/rhn-client-tools/rhn-client-tools.spec
@@ -4,7 +4,7 @@ Group: System Environment/Base
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
URL: https://fedorahosted.org/spacewalk
Name: rhn-client-tools
-Version: 1.6.25
+Version: 1.6.26
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -334,6 +334,11 @@ make -f Makefile.rhn-client-tools test
%endif
%changelog
+* Fri Oct 21 2011 Miroslav SuchÜ 1.6.26-1
+- 627809 - send xen virtual block devices to rhnParent
+- Revert "729161 - default to RHSM in firstboot registration"
+ (mzazrivec(a)redhat.com)
+
* Wed Oct 19 2011 Miroslav SuchÜ 1.6.25-1
- 743259 - RHEL5 now has python-ethtool 0.6 - simplify code
- 743259 - get_ipv6_addresses does not return one item, but list
diff --git a/rel-eng/packages/rhn-client-tools b/rel-eng/packages/rhn-client-tools
index b938d9b..45eceab 100644
--- a/rel-eng/packages/rhn-client-tools
+++ b/rel-eng/packages/rhn-client-tools
@@ -1 +1 @@
-1.6.25-1 client/rhel/rhn-client-tools/
+1.6.26-1 client/rhel/rhn-client-tools/
commit eb0d0f8f775f2c027348604980aa4614a073a478
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Fri Oct 21 13:46:33 2011 +0200
Automatic commit of package [spacewalk-java] release [1.6.63-1].
diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec
index 1e4dc55..697b49c 100644
--- a/java/spacewalk-java.spec
+++ b/java/spacewalk-java.spec
@@ -17,7 +17,7 @@ Name: spacewalk-java
Summary: Spacewalk Java site packages
Group: Applications/Internet
License: GPLv2
-Version: 1.6.62
+Version: 1.6.63
Release: 1%{?dist}
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
@@ -557,6 +557,12 @@ fi
%{jardir}/postgresql-jdbc.jar
%changelog
+* Fri Oct 21 2011 Miroslav SuchÜ 1.6.63-1
+- 627809 - write out storage devices if *storage* device list is not empty
+- 627809 - send xen virtual block devices to rhnParent
+- 736381,732091 - adding api doc (tlestach(a)redhat.com)
+- 680489 - fix api doc (tlestach(a)redhat.com)
+
* Mon Oct 17 2011 Michael Mraka <michael.mraka(a)redhat.com> 1.6.62-1
- 746090 - fixed join condition in query
- 589799 - omit number of selected items for SSM related system selections
diff --git a/rel-eng/packages/spacewalk-java b/rel-eng/packages/spacewalk-java
index aa3b808..0ef2228 100644
--- a/rel-eng/packages/spacewalk-java
+++ b/rel-eng/packages/spacewalk-java
@@ -1 +1 @@
-1.6.62-1 java/
+1.6.63-1 java/
commit f5148d606f46e2fcbdfc740a79b94b2e7cd3ca68
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Fri Oct 21 13:44:26 2011 +0200
627809 - write out storage devices if *storage* device list is not empty
diff --git a/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp b/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
index 04405f9..248cc4c 100644
--- a/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
+++ b/java/code/webapp/WEB-INF/pages/systems/sdc/hardware.jsp
@@ -235,7 +235,7 @@
</c:forEach>
</table>
- <c:if test="${not empty videoDevices}">
+ <c:if test="${not empty storageDevices}">
<h2><bean:message key="sdc.details.hardware.storage"/></h2>
<table class="list" width="90%" cellspacing="0">
<thead>
commit a20dd4c8f3541eed04eb2e6a711ff1e690ffc715
Author: Miroslav SuchÜ <msuchy(a)redhat.com>
Date: Fri Oct 21 13:42:01 2011 +0200
627809 - send xen virtual block devices to rhnParent
XEN virtual block devices looks like:
/org/freedesktop/Hal/devices/xen_vbd_51713
CLASS: None
info.bus ==> xen
xen.type ==> vbd
linux.hotplug_type ==> 0x1
info.parent ==> /org/freedesktop/Hal/devices/computer
linux.sysfs_path_device ==> /sys/devices/xen/vbd-51713
linux.sysfs_path ==> /sys/devices/xen/vbd-51713
xen.path ==> device/vbd/51713
info.product ==> Xen Virtual Block Device
xen.bus_id ==> vbd-51713
info.udi ==> /org/freedesktop/Hal/devices/xen_vbd_51713
info.linux.driver ==> vbd
linux.subsystem ==> xen
diff --git a/client/rhel/rhn-client-tools/src/up2date_client/hardware_hal.py b/client/rhel/rhn-client-tools/src/up2date_client/hardware_hal.py
index 73a606c..e3dd872 100644
--- a/client/rhel/rhn-client-tools/src/up2date_client/hardware_hal.py
+++ b/client/rhel/rhn-client-tools/src/up2date_client/hardware_hal.py
@@ -228,6 +228,10 @@ def classify_hal(node):
if node.properties['storage.drive_type'] == 'tape':
return 'TAPE'
+ if 'xen.type' in node.properties:
+ if node.properties['xen.type'] == 'vbd':
+ return 'HD'
+
#PRINTER
if node.properties.has_key('printer.product'):
return 'PRINTER'
diff --git a/java/code/src/com/redhat/rhn/domain/server/Device.java b/java/code/src/com/redhat/rhn/domain/server/Device.java
index 9370d88..58942cc 100644
--- a/java/code/src/com/redhat/rhn/domain/server/Device.java
+++ b/java/code/src/com/redhat/rhn/domain/server/Device.java
@@ -40,6 +40,7 @@ public class Device extends BaseDomainHelper {
public static final String BUS_USB = "USB";
public static final String BUS_VIO = "VIO";
public static final String BUS_PCI = "PCI";
+ public static final String BUS_XEN = "XEN";
/** Constants for Device classes */
public static final String CLASS_AUDIO = "AUDIO";
commit 04699a1b65ef0acacd79f0ac4453280b076eabd7
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Fri Oct 21 11:31:11 2011 +0200
743121 - don't report differences containing invalid UTF-8
This fix is to avoid ISEs occuring when client uploads (usualy binary)
config file differences that contain invalid UTF-8 characters:
Traceback (most recent call last):
File "... mod_python/apache.py", line 299, in HandlerDispatch\n result = object(req)
File "... spacewalk/server/apacheHandler.py", line 196, in handler\n ret = self._req_processor.process()
File "... spacewalk/server/apacheRequest.py", line 471, in process\n params, method = self.decode(_body)
File "... spacewalk/server/apacheRequest.py", line 395, in decode\n self.parser.feed(data)
File "... xmlrpclib.py", line 527, in feed\n self._parser.Parse(data, 0)
ExpatError: not well-formed (invalid token): line 84, column 1
diff --git a/client/tools/rhncfg/actions/configfiles.py b/client/tools/rhncfg/actions/configfiles.py
index 9ccb978..87028d1 100755
--- a/client/tools/rhncfg/actions/configfiles.py
+++ b/client/tools/rhncfg/actions/configfiles.py
@@ -311,6 +311,14 @@ def deploy(params, topdir=None, cache_only=None):
def diff(params, cache_only=None):
+ def is_utf8(input):
+ """Returns true if input is a valid UTF-8 string, False otherwise."""
+ try:
+ input.decode('utf-8')
+ except UnicodeDecodeError:
+ return False
+ return True
+
if cache_only:
return (0, "no-ops for caching", {})
@@ -342,6 +350,9 @@ def diff(params, cache_only=None):
extras['missing_files'] = missing_files
if diffs:
+ for file in diffs.keys():
+ if not is_utf8(diffs[file]):
+ diffs[file] = "%s: binary files differ" % file
extras['diffs'] = diffs
log_to_file(0, "Files successfully diffed: %s %s" % (format_file_string(files, create_key_list()), str(extras)))
commit e68b8332f499434e72f0dd0e39094a4c04fa8153
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Oct 20 16:42:38 2011 +0200
736381,732091 - adding api doc
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
index a362436..8ddfc3d 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/SystemHandler.java
@@ -1220,6 +1220,12 @@ public class SystemHandler extends BaseHandler {
* @param hostId The id of the host system.
* @param guestNames List of guest names to delete.
* @return 1 in case of success, traceback otherwise.
+ *
+ * @xmlrpc.doc Delete the specified list of guest profiles for a given host
+ * @xmlrpc.param #param("string", "sessionKey")
+ * @xmlrpc.param #param("int", "hostId")
+ * @xmlrpc.param #array_single("string", "guestNames")
+ * @xmlrpc.returntype #return_int_success()
*/
public Integer deleteGuestProfiles(String sessionKey, Integer hostId,
List<String> guestNames) {
commit 0c872bbed7db39cba62ad6f98ecb713364014b52
Author: Tomas Lestach <tlestach(a)redhat.com>
Date: Thu Oct 20 15:35:29 2011 +0200
680489 - fix api doc
diff --git a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
index d1052cb..849b8b2 100644
--- a/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
+++ b/java/code/src/com/redhat/rhn/frontend/xmlrpc/system/provisioning/snapshot/SnapshotHandler.java
@@ -271,7 +271,8 @@ public class SnapshotHandler extends BaseHandler {
* @param snapId shapshot id
* @param tagName name iof the snapshot tag
* @return 1 on success
-
+ *
+ * @xmlrpc.doc Adds tag to snapshot
* @xmlrpc.param sessionKey #session_key()
* @xmlrpc.param snapId #param_desc("int", "snapshotId", "Id of the snapshot")
* @xmlrpc.param tagName #param_desc("string", "tag", "Name of the snapshot tag")
12 years, 6 months
Changes to 'refs/tags/rhn-virtualization-5.4.29-1'
by Milan Zazrivec
Tag 'rhn-virtualization-5.4.29-1' created by Milan Zazrivec <mzazrivec(a)redhat.com> at 2011-10-27 14:19 +0000
Tagging package [rhn-virtualization] version [5.4.29-1] in directory [client/tools/rhn-virtualization/].
Changes since rhn-virtualization-5.4.28-1:
Christian Berendt (2):
adding xalan-j2 to the build.jar.dependencies property
declare net.sf.antcontrib.logic.For task to fix create-webapp-dir
Jan Hutar (2):
Do not rely on exact amount of memomory when determinig PASS/FAIL
Merge branch 'master' of ssh://git.fedorahosted.org/git/spacewalk
Jan Pazdziora (2):
For the default_session, use better note in rhnregtoken table.
The KickstartSessionCreateCommand is duplicated in KickstartWizardHelper.
Milan Zazrivec (29):
Fix table dependencies
shorten constraint identifiers to fit into given limits
correct index creation
delete from rhnServerNetInterface: add on delete cascade
update rhn_server.get_ip_address() to reflect IPv6 changes
get_hw_info_as_clob: adapt to IPv6 changes
upgrade script for rhn_server.pkb
get_hw_info_as_clob schema upgrade script
742811 - domain_directory: R/O access to libvirtd is sufficient
Revert "__load_from_db: load devices using its method save()"
Revert "add oracle equivalent"
Revert "insert id from sequence using trigger"
Revert "code cleanup - package RHN::DB::Server::NetInterface is not used anymore"
Revert "code cleanup - function get_net_interfaces is not used anymore"
Revert "code cleanup - function server_network_interfaces is not used anymore"
Revert "code cleanup - tag rhn-server-network-interfaces is not used anywhere"
Revert "get_hw_info_as_clob schema upgrade script"
Revert "upgrade script for rhn_server.pkb"
Revert "schema upgrade"
Revert "get_hw_info_as_clob: adapt to IPv6 changes"
Revert "update rhn_server.get_ip_address() to reflect IPv6 changes"
Revert "delete from rhnServerNetInterface: add on delete cascade"
Revert "correct index creation"
Revert "shorten constraint identifiers to fit into given limits"
Revert "Fix table dependencies"
Revert "schema change"
typo fix
add missing import
Automatic commit of package [rhn-virtualization] release [5.4.29-1].
Miroslav Suchý (9):
schema change
schema upgrade
code cleanup - tag rhn-server-network-interfaces is not used anywhere
code cleanup - function server_network_interfaces is not used anymore
code cleanup - function get_net_interfaces is not used anymore
code cleanup - package RHN::DB::Server::NetInterface is not used anymore
insert id from sequence using trigger
add oracle equivalent
__load_from_db: load devices using its method save()
---
backend/server/rhnServer/server_hardware.py | 2 -
client/rhel/rhn-client-tools/src/up2date_client/hardware.py | 2 -
client/rhel/rhnlib/test/24-ssl-memleak.py | 16 ++++++----
client/tools/rhn-virtualization/rhn-virtualization.spec | 5 ++-
client/tools/rhn-virtualization/virtualization/domain_directory.py | 2 -
java/buildconf/build-props.xml | 2 -
java/buildconf/build-taskdefs.xml | 2 +
java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java | 6 ---
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 7 ++++
java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java | 2 -
rel-eng/packages/rhn-virtualization | 2 -
11 files changed, 30 insertions(+), 18 deletions(-)
---
12 years, 6 months
client/tools rel-eng/packages
by Milan Zazrivec
client/tools/rhn-virtualization/rhn-virtualization.spec | 5 ++++-
rel-eng/packages/rhn-virtualization | 2 +-
2 files changed, 5 insertions(+), 2 deletions(-)
New commits:
commit 679dee4c73727db3ee0c14a9e6aa1e3cbd1c3cb0
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 16:19:27 2011 +0200
Automatic commit of package [rhn-virtualization] release [5.4.29-1].
diff --git a/client/tools/rhn-virtualization/rhn-virtualization.spec b/client/tools/rhn-virtualization/rhn-virtualization.spec
index 2aebabd..4feddff 100644
--- a/client/tools/rhn-virtualization/rhn-virtualization.spec
+++ b/client/tools/rhn-virtualization/rhn-virtualization.spec
@@ -10,7 +10,7 @@ License: GPLv2
URL: https://fedorahosted.org/spacewalk
Source0: https://fedorahosted.org/releases/s/p/spacewalk/%{name}-%{version}.tar.gz
-Version: 5.4.28
+Version: 5.4.29
Release: 1%{?dist}
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch
@@ -134,6 +134,9 @@ rm -rf $RPM_BUILD_ROOT
%doc LICENSE
%changelog
+* Thu Oct 27 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.4.29-1
+- 742811 - domain_directory: R/O access to libvirtd is sufficient
+
* Wed Oct 26 2011 Milan Zazrivec <mzazrivec(a)redhat.com> 5.4.28-1
- 742811 - don't open RW connection to libvirt unless necessary
diff --git a/rel-eng/packages/rhn-virtualization b/rel-eng/packages/rhn-virtualization
index 0905e4c..3efa35e 100644
--- a/rel-eng/packages/rhn-virtualization
+++ b/rel-eng/packages/rhn-virtualization
@@ -1 +1 @@
-5.4.28-1 client/tools/rhn-virtualization/
+5.4.29-1 client/tools/rhn-virtualization/
12 years, 6 months
client/rhel
by Milan Zazrivec
client/rhel/rhn-client-tools/src/up2date_client/hardware.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit 1afa65491cda208e3078a3ba4864584c4be7856c
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 15:50:25 2011 +0200
add missing import
diff --git a/client/rhel/rhn-client-tools/src/up2date_client/hardware.py b/client/rhel/rhn-client-tools/src/up2date_client/hardware.py
index 0ccc99e..f2e68d8 100644
--- a/client/rhel/rhn-client-tools/src/up2date_client/hardware.py
+++ b/client/rhel/rhn-client-tools/src/up2date_client/hardware.py
@@ -15,7 +15,7 @@
# This thing gets the hardware configuraion out of a system
"""Used to read hardware info from kudzu, /proc, etc"""
-from socket import gethostname, AF_INET, AF_INET6
+from socket import gethostname, getaddrinfo, AF_INET, AF_INET6
import socket
import re
import os
12 years, 6 months
backend/server
by Milan Zazrivec
backend/server/rhnServer/server_hardware.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
New commits:
commit fc890e3d54f21cf0498677d31e7bd672e71334b8
Author: Milan Zazrivec <mzazrivec(a)redhat.com>
Date: Thu Oct 27 14:56:14 2011 +0200
typo fix
diff --git a/backend/server/rhnServer/server_hardware.py b/backend/server/rhnServer/server_hardware.py
index dd044e1..82a18ce 100644
--- a/backend/server/rhnServer/server_hardware.py
+++ b/backend/server/rhnServer/server_hardware.py
@@ -690,7 +690,7 @@ class Hardware:
return 0
def save_hardware_byid(self, sysid):
- """ ave the hardware list """
+ """Save the hardware list """
log_debug(3, sysid, "changed = %s" % self.__changed)
hardware = self.__hardware
if hardware == {}: # nothing loaded
12 years, 6 months
2 commits - client/rhel
by Jan Hutař
client/rhel/rhnlib/test/24-ssl-memleak.py | 16 +++++++++++-----
1 file changed, 11 insertions(+), 5 deletions(-)
New commits:
commit 8ef8022f01ad030b0650d802fa7687977b25827b
Merge: 40fba98 6f9a0a2
Author: Jan Hutar <jhutar(a)redhat.com>
Date: Thu Oct 27 13:16:38 2011 +0200
Merge branch 'master' of ssh://git.fedorahosted.org/git/spacewalk
commit 40fba986fc41301a45fa8862e0567ad3ec66b171
Author: Jan Hutar <jhutar(a)redhat.com>
Date: Thu Oct 27 13:15:43 2011 +0200
Do not rely on exact amount of memomory when determinig PASS/FAIL
diff --git a/client/rhel/rhnlib/test/24-ssl-memleak.py b/client/rhel/rhnlib/test/24-ssl-memleak.py
index 387c740..88f9fed 100755
--- a/client/rhel/rhnlib/test/24-ssl-memleak.py
+++ b/client/rhel/rhnlib/test/24-ssl-memleak.py
@@ -20,24 +20,30 @@ def main():
except:
pass
server_url = "https://" + server_name + "/APPLET"
- diff_count = 0
mem_usage = None
+ mem_usage_VmSize_max = None
+ mem_usage_VmSize_first = None
+ mem_usage_VmSize_allowed_percent = 0.1 # [%] allowed gain of first -> max
for i in range(10000):
run_test(server_url, ca_cert)
if i % 100 == 0:
new_mem_usage = mem_usage_int()
if mem_usage is not None:
- if mem_usage[1] != new_mem_usage[1]:
- diff_count = diff_count + 1
+ if new_mem_usage[1] > mem_usage_VmSize_max:
+ mem_usage_VmSize_max = new_mem_usage[1]
+ else:
+ mem_usage_VmSize_max = new_mem_usage[1]
+ mem_usage_VmSize_first = new_mem_usage[1]
mem_usage = new_mem_usage
print "memory usage: %s %s %s" % mem_usage[1:4]
- if diff_count > 4:
+ percent = float((mem_usage_VmSize_max - mem_usage_VmSize_first)) / (float(mem_usage_VmSize_first) / 100)
+ if percent >= mem_usage_VmSize_allowed_percent:
# Failure
print "Test FAILS"
- return diff_count
+ return 1
print "Test PASSES"
return 0
12 years, 6 months
2 commits - java/code
by Jan Pazdziora
java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java | 6 ------
java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml | 7 +++++++
java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java | 2 +-
3 files changed, 8 insertions(+), 7 deletions(-)
New commits:
commit 6f9a0a2692973012cb8dfefcbfb60ded810da409
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 16:47:09 2011 +0200
The KickstartSessionCreateCommand is duplicated in KickstartWizardHelper.
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java
index 18e370a..9bfa4ec 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartData.java
@@ -28,7 +28,6 @@ import com.redhat.rhn.domain.token.ActivationKeyFactory;
import com.redhat.rhn.domain.token.Token;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.manager.kickstart.KickstartFormatter;
-import com.redhat.rhn.manager.kickstart.KickstartSessionCreateCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerCommand;
import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper;
@@ -1171,11 +1170,6 @@ public class KickstartData {
cloned.setNoBase(this.getNoBase());
cloned.setIgnoreMissing(this.getIgnoreMissing());
- //create a new session one
- KickstartSessionCreateCommand cmd = new KickstartSessionCreateCommand(
- user.getOrg(), cloned);
- cmd.store();
-
}
// Helper method to copy KickstartCommands
commit edcae0f1385122767616df7c98bdf67e7a69200d
Author: Jan Pazdziora <jpazdziora(a)redhat.com>
Date: Tue Oct 25 15:23:38 2011 +0200
For the default_session, use better note in rhnregtoken table.
Instead of
Kickstart re-activation key for .
say
Default session activation key for profile rhel-5-7.
diff --git a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
index 8ce44ad..fda871a 100644
--- a/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
+++ b/java/code/src/com/redhat/rhn/frontend/strings/java/StringResource_en_US.xml
@@ -6627,6 +6627,13 @@ Follow this url to see the full list of inactive systems:
</context-group>
</trans-unit>
+ <trans-unit id="kickstart.profile.default_session">
+ <source>Default session activation key for profile {0}.</source>
+ <context-group name="ctx">
+ <context context-type="sourcefile">/rhn/kickstart/CreateProfileWizard.do</context>
+ </context-group>
+ </trans-unit>
+
<trans-unit id="kickstart.session.newprofile">
<source>Profile for kickstart session {0}.</source>
<context-group name="ctx">
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
index baf55a0..7b0e909 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartSessionCreateCommand.java
@@ -89,7 +89,7 @@ public class KickstartSessionCreateCommand {
User user = UserFactory.findRandomOrgAdmin(owner);
log.debug("Got random orgadmin: " + user.getLogin());
String note = LocalizationService.getInstance().
- getMessage("kickstart.session.newtokennote", " ");
+ getMessage("kickstart.profile.default_session", ksdata.getLabel());
log.debug("creating one-time-activation key: " + user.getLogin());
ActivationKey key = KickstartScheduleCommand.createKickstartActivationKey(user,
12 years, 6 months