Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEike Stepper2015-05-05 10:43:37 +0000
committerPascal Rapicault2016-01-02 21:37:54 +0000
commit2608885d67a3a99406a8cf1bc660241c3574dcfa (patch)
treeeede74565ebabede00dc799b91b5ef2ed20cd45d
parentd9057d09f6b96fd8b9988299d3eb5131f9a79a98 (diff)
downloadrt.equinox.p2-2608885d67a3a99406a8cf1bc660241c3574dcfa.tar.gz
rt.equinox.p2-2608885d67a3a99406a8cf1bc660241c3574dcfa.tar.xz
rt.equinox.p2-2608885d67a3a99406a8cf1bc660241c3574dcfa.zip
Bug 466249 - Propagate more exceptions to ease problem analysis
We often get problem reports with stack traces that "end" somewhere in p2 even though it's obvious from looking at these places that there was a causing exception. These causing exceptions are often not propagated with the new exception that p2 creates and throws. I'm not sure if that's on purpose or just an oversight. I've prepared a proposal to enhance these places and make it easier to analyze the problems that users report. Change-Id: Iaa53448c53c18301113b42dbe80558eccec49e8e Signed-off-by: Eike Stepper <stepper@esc-net.de>
-rw-r--r--bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxBundlesState.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java8
-rw-r--r--bundles/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java12
-rw-r--r--bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileLock.java6
-rw-r--r--bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java8
-rw-r--r--bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java11
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java8
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ClassFunction.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java8
-rw-r--r--bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java2
-rw-r--r--bundles/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java4
-rw-r--r--bundles/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java8
20 files changed, 65 insertions, 30 deletions
diff --git a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxBundlesState.java b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxBundlesState.java
index 97f044a48..5f73c62f3 100644
--- a/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxBundlesState.java
+++ b/bundles/org.eclipse.equinox.frameworkadmin.equinox/src/org/eclipse/equinox/internal/frameworkadmin/equinox/EquinoxBundlesState.java
@@ -436,7 +436,7 @@ public class EquinoxBundlesState implements BundlesState {
location = new URI(bundles[i].getLocation());
} catch (URISyntaxException e) {
e.printStackTrace();
- throw new IllegalStateException("BundleDescription conversion problem" + e.getMessage()); //$NON-NLS-1$ //TODO path_fun
+ throw new IllegalStateException("BundleDescription conversion problem" + e.getMessage(), e); //$NON-NLS-1$ //TODO path_fun
}
String fragmentHost = null;
BundleInfo original = bundleInfoMap.get(location);
diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
index f9c74b9e3..308419a91 100644
--- a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
+++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepository.java
@@ -567,7 +567,7 @@ public class SimpleArtifactRepository extends AbstractArtifactRepository impleme
FileInputStream fis = new FileInputStream(zipFile);
totalArtifactSize += FileUtils.copyStream(fis, true, destination, false);
} catch (IOException e) {
- return reportStatus(descriptor, destination, new Status(IStatus.ERROR, Activator.ID, e.getMessage()));
+ return reportStatus(descriptor, destination, new Status(IStatus.ERROR, Activator.ID, e.getMessage(), e));
} finally {
if (zipFile != null)
zipFile.delete();
diff --git a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java
index 12e41b06c..9208cb3f3 100644
--- a/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java
+++ b/bundles/org.eclipse.equinox.p2.artifact.repository/src/org/eclipse/equinox/internal/p2/artifact/repository/simple/SimpleArtifactRepositoryIO.java
@@ -313,9 +313,13 @@ public class SimpleArtifactRepositoryIO {
theRepository = repositoryHandler.getRepository();
}
} catch (SAXException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} finally {
stream.close();
}
diff --git a/bundles/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java b/bundles/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java
index aef923c76..1d81d8117 100644
--- a/bundles/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java
+++ b/bundles/org.eclipse.equinox.p2.core/src/org/eclipse/equinox/internal/p2/core/helpers/FileUtils.java
@@ -64,7 +64,9 @@ public class FileUtils {
try {
return untarFile(zipFile, outputDir);
} catch (TarException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
}
}
InputStream in = new FileInputStream(zipFile);
@@ -72,7 +74,9 @@ public class FileUtils {
return unzipStream(in, zipFile.length(), outputDir, null, null);
} catch (IOException e) {
// add the file name to the message
- throw new IOException(NLS.bind(Messages.Util_Error_Unzipping, zipFile, e.getMessage()));
+ IOException ioException = new IOException(NLS.bind(Messages.Util_Error_Unzipping, zipFile, e.getMessage()));
+ ioException.initCause(e);
+ throw ioException;
} finally {
in.close();
}
@@ -88,7 +92,9 @@ public class FileUtils {
return unzipStream(in, zipFile.length(), outputDir, taskName, monitor);
} catch (IOException e) {
// add the file name to the message
- throw new IOException(NLS.bind(Messages.Util_Error_Unzipping, zipFile, e.getMessage()));
+ IOException ioException = new IOException(NLS.bind(Messages.Util_Error_Unzipping, zipFile, e.getMessage()));
+ ioException.initCause(e);
+ throw ioException;
} finally {
in.close();
}
diff --git a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
index 1d077beaf..4984f2be6 100644
--- a/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
+++ b/bundles/org.eclipse.equinox.p2.director.app/src/org/eclipse/equinox/internal/p2/director/app/DirectorApplication.java
@@ -179,7 +179,7 @@ public class DirectorApplication implements IApplication, ProvisioningListener {
try {
uris.add(URIUtil.fromString(urlSpecs[i]));
} catch (URISyntaxException e) {
- throw new ProvisionException(NLS.bind(Messages.unable_to_parse_0_to_uri_1, urlSpecs[i], e.getMessage()));
+ throw new ProvisionException(NLS.bind(Messages.unable_to_parse_0_to_uri_1, urlSpecs[i], e.getMessage()), e);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileLock.java b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileLock.java
index 70080ff80..11058450f 100644
--- a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileLock.java
+++ b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/ProfileLock.java
@@ -43,11 +43,11 @@ public class ProfileLock {
location.set(url, false, LOCK_FILENAME);
return location;
} catch (MalformedURLException e) {
- throw new IllegalArgumentException(NLS.bind(Messages.SimpleProfileRegistry_Bad_profile_location, e.getLocalizedMessage()));
+ throw new IllegalArgumentException(NLS.bind(Messages.SimpleProfileRegistry_Bad_profile_location, e.getLocalizedMessage()), e);
} catch (IllegalStateException e) {
throw e;
} catch (IOException e) {
- throw new IllegalStateException(e.getLocalizedMessage());
+ throw new IllegalStateException(e.getLocalizedMessage(), e);
}
}
@@ -105,7 +105,7 @@ public class ProfileLock {
lockHolder = current;
} catch (IOException e) {
- throw new IllegalStateException(NLS.bind(Messages.SimpleProfileRegistry_Profile_not_locked_due_to_exception, e.getLocalizedMessage()));
+ throw new IllegalStateException(NLS.bind(Messages.SimpleProfileRegistry_Profile_not_locked_due_to_exception, e.getLocalizedMessage()), e);
}
return true;
}
diff --git a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java
index 2efe605c4..8c98a4c74 100644
--- a/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java
+++ b/bundles/org.eclipse.equinox.p2.engine/src/org/eclipse/equinox/internal/p2/engine/SimpleProfileRegistry.java
@@ -731,9 +731,13 @@ public class SimpleProfileRegistry implements IProfileRegistry, IAgentService {
xmlReader.parse(new InputSource(stream));
profileHandlers.put(profileHandler.getProfileId(), profileHandler);
} catch (SAXException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} finally {
stream.close();
}
diff --git a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
index ef67932fc..1cc2a9ee3 100644
--- a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
+++ b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationArtifactRepository.java
@@ -76,7 +76,7 @@ public class ExtensionLocationArtifactRepository extends AbstractRepository<IArt
} catch (ProvisionException e) {
//unexpected
e.printStackTrace();
- throw new IllegalStateException(e.getMessage());
+ throw new IllegalStateException(e.getMessage(), e);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
index 271a9a17d..dbf0b6ebf 100644
--- a/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
+++ b/bundles/org.eclipse.equinox.p2.extensionlocation/src/org/eclipse/equinox/internal/p2/extensionlocation/ExtensionLocationMetadataRepository.java
@@ -75,7 +75,7 @@ public class ExtensionLocationMetadataRepository extends AbstractMetadataReposit
} catch (ProvisionException e) {
//unexpected
e.printStackTrace();
- throw new IllegalStateException(e.getMessage());
+ throw new IllegalStateException(e.getMessage(), e);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java b/bundles/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java
index d03552a89..19a2ad4cc 100644
--- a/bundles/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java
+++ b/bundles/org.eclipse.equinox.p2.installer/src/org/eclipse/equinox/internal/p2/installer/ui/ProxiesDialog.java
@@ -19,6 +19,7 @@ import org.eclipse.core.net.proxy.IProxyData;
import org.eclipse.core.net.proxy.IProxyService;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
+import org.eclipse.equinox.internal.p2.core.helpers.LogHelper;
import org.eclipse.equinox.internal.p2.installer.InstallerActivator;
import org.eclipse.equinox.internal.p2.installer.Messages;
import org.eclipse.swt.SWT;
@@ -244,6 +245,7 @@ public final class ProxiesDialog {
openMessage(Messages.ProxiesDialog_ServiceNotAvailableMessage, SWT.ICON_ERROR | SWT.OK);
}
} catch (Exception e) {
+ LogHelper.log(new Status(IStatus.ERROR, InstallerActivator.PI_INSTALLER, e.getMessage(), e));
openMessage(Messages.ProxiesDialog_FailedToSetProxyMessage + e.getLocalizedMessage(), SWT.ICON_ERROR | SWT.OK);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java
index 6ee813b62..485594bab 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/internal/p2/metadata/repository/MetadataRepositoryIO.java
@@ -211,10 +211,15 @@ public class MetadataRepositoryIO {
theRepository = repositoryHandler.getRepository();
}
} catch (SAXException e) {
- if (!(e.getException() instanceof OperationCanceledException))
- throw new IOException(e.getMessage());
+ if (!(e.getException() instanceof OperationCanceledException)) {
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
+ }
} catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} finally {
monitor.done();
stream.close();
diff --git a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java
index 0f8493bae..63ace1841 100644
--- a/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java
+++ b/bundles/org.eclipse.equinox.p2.metadata.repository/src/org/eclipse/equinox/p2/metadata/io/IUDeserializer.java
@@ -66,9 +66,13 @@ public class IUDeserializer {
}
throw new IOException(status.toString());
} catch (ParserConfigurationException configException) {
- throw new IOException(configException.getMessage());
+ IOException ioException = new IOException(configException.getMessage());
+ ioException.initCause(configException);
+ throw ioException;
} catch (SAXException saxException) {
- throw new IOException(saxException.getMessage());
+ IOException ioException = new IOException(saxException.getMessage());
+ ioException.initCause(saxException);
+ throw ioException;
}
}
diff --git a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java
index 9b46f07ac..3b71bec6d 100644
--- a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java
+++ b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/VersionParser.java
@@ -150,7 +150,7 @@ public abstract class VersionParser {
fmt = VersionFormat.compile(version, pos, end);
pos = end + 1;
} catch (VersionFormatException e) {
- throw new IllegalArgumentException(e.getMessage());
+ throw new IllegalArgumentException(e.getMessage(), e);
}
if (pos == maxPos) {
// This was a raw version with format but no original
diff --git a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ClassFunction.java b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ClassFunction.java
index ddef52293..87e9bfee1 100644
--- a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ClassFunction.java
+++ b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/internal/p2/metadata/expression/ClassFunction.java
@@ -29,7 +29,7 @@ public final class ClassFunction extends Function {
try {
return Class.forName((String) arg);
} catch (ClassNotFoundException e) {
- throw new IllegalArgumentException(e.getMessage());
+ throw new IllegalArgumentException(e.getMessage(), e);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java
index 1dc0b1039..34d3d81b5 100644
--- a/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java
+++ b/bundles/org.eclipse.equinox.p2.metadata/src/org/eclipse/equinox/p2/metadata/VersionRange.java
@@ -263,7 +263,7 @@ public class VersionRange implements Serializable {
position[0] = end + 1;
return VersionFormat.compile(versionRange, pos, end);
} catch (VersionFormatException e) {
- throw new IllegalArgumentException(e.getMessage());
+ throw new IllegalArgumentException(e.getMessage(), e);
}
}
diff --git a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java
index a112f8b86..02471aeed 100644
--- a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java
+++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/persistence/CompositeParser.java
@@ -188,9 +188,13 @@ public class CompositeParser extends XMLParser implements XMLConstants {
theState = repositoryHandler.getRepository();
}
} catch (SAXException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} finally {
stream.close();
}
diff --git a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
index 97c239d24..5cc681886 100644
--- a/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
+++ b/bundles/org.eclipse.equinox.p2.repository/src/org/eclipse/equinox/internal/p2/repository/CacheManager.java
@@ -239,7 +239,7 @@ public class CacheManager {
if (status == null)
throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_NOT_FOUND, NLS.bind(Messages.CacheManager_FailedCommunicationWithRepo_0, repositoryLocation), e));
else if (status.getException() instanceof FileNotFoundException)
- throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_NOT_FOUND, status.getMessage(), null));
+ throw new ProvisionException(new Status(IStatus.ERROR, Activator.ID, ProvisionException.REPOSITORY_NOT_FOUND, status.getMessage(), status.getException()));
throw new ProvisionException(status);
}
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
index bd2c0e508..192f34c40 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.eclipse/src/org/eclipse/equinox/internal/p2/touchpoint/eclipse/EclipseTouchpoint.java
@@ -208,7 +208,7 @@ public class EclipseTouchpoint extends Touchpoint {
if (c != null)
c = Class.forName("org.eclipse.osgi.service.resolver.PlatformAdmin"); //$NON-NLS-1$
} catch (ClassNotFoundException e) {
- LogHelper.log(Util.createError(NLS.bind(Messages.publisher_not_available, e.getMessage())));
+ LogHelper.log(Util.createError(NLS.bind(Messages.publisher_not_available, e.getMessage()), e));
return null;
}
diff --git a/bundles/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java b/bundles/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java
index 9130e0dab..f20bafb0e 100644
--- a/bundles/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java
+++ b/bundles/org.eclipse.equinox.p2.touchpoint.natives/src/org/eclipse/equinox/internal/p2/touchpoint/natives/Util.java
@@ -99,7 +99,9 @@ public class Util {
return unzipStream(in, zipFile.length(), outputDir, path, includePatterns, excludePatterns, store, taskName, monitor);
} catch (IOException e) {
// add the file name to the message
- throw new IOException(NLS.bind(Messages.Util_Error_Unzipping, zipFile, e.getMessage()));
+ IOException ioException = new IOException(NLS.bind(Messages.Util_Error_Unzipping, zipFile, e.getMessage()));
+ ioException.initCause(e);
+ throw ioException;
} finally {
in.close();
}
diff --git a/bundles/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java b/bundles/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java
index 24c2f74e6..bf0743fe8 100644
--- a/bundles/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java
+++ b/bundles/org.eclipse.equinox.p2.ui.importexport/src/org/eclipse/equinox/internal/p2/importexport/persistence/P2FParser.java
@@ -211,9 +211,13 @@ public class P2FParser extends XMLParser implements P2FConstants {
xmlReader.setContentHandler(new P2FDocHandler(P2F_ELEMENT, p2fHandler));
xmlReader.parse(new InputSource(stream));
} catch (SAXException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} catch (ParserConfigurationException e) {
- throw new IOException(e.getMessage());
+ IOException ioException = new IOException(e.getMessage());
+ ioException.initCause(e);
+ throw ioException;
} finally {
stream.close();
}

Back to the top

=6|:2rГt!iPprqɕCëXf 3%W$AB9/F.Ԙ#cb*I;O&wt ԬuXt7-I-ĨI4:;y.(Lnݽ76D,^lEnQJ>mڼ%O vx ggL3jm?N }@Xyֻa4G_d*~ TDVrn}w<}I5mô+߼Eߑ8z3Rߨ| (R_0.SȪxQ1p )okOdsB 6g.-қtq`oTCY?)+6(HMue5.{BW4b9#D. ؠh'p  *@pZDnݑ|{>LYOm2gJMw'n0bUЈ:iqMo5E'o(Z_|cOzbc/XS,/(V@Ka%T$ >@ lk݆qojȖc <\p[7GM-ظ8U{yAiǰ;\c8r ɡ^X^%P Ͷ2ɗ姛JsEܿa պ%A*!k TxUEq\Kz LRQLp EHԩ_r5sI;QP2~hk|7Ż <5&`V=J[~QBY'E)6 2!Թ}V?/"Z0B28,,m[o |/)%f-кZt5˺ Fcc'bdΝ_ʵ)ax=qUɑ?o5@zԑ-_moo/tA;gt6HVnQPtG5yA$O* IJ`)s.ڵ eId~{!E{%ZhxO.(͐y/i(t蒡-6쉖4#!4vQ%ml$WS NexzYub= G%^;;%}:X[ a;]-džNqdԔ4~(3UPQ D»{ge94Qx50Q퉤٠ _{4>ǜ\n)/?QfDw8:b?}YFa'x+4F F3e5Z34ַ*QO-QId[!W$X;<~>X_raʩT'_LmI?/ 9Nh<0 l7F(Zz:~V54p!#o̙(5}Ԕ}#ڬueA@ܩf&Qq5! ȻөۺL|rWXDŽ$;j"z+ l4CwxH%GtS̍qS;|yz8HG\9I'5"Q$WvUz-dMdQ (MѷX9 : K, wI1IX[1s=O[Â1]f \j2kIJ#3S )* D8 RNH?)"l,%gA`OTb/H A5EԀ6l$Ivgug&[?y8- V&lϾ3k|ߍHqGFA".S>B|@4:u%NŮsƇ@Re@+@wQc\yޔptHwRdV[ B NͫDJA#rŞUu#ΈҹZ۾X_VW7T82xeC~ q3pqOTDv,\ (=DK6@XpRO O<~W{u[xhՉ ̌k?[y&~Hg~?aG )ka܎%5Rf`t h#9jE] RQ[ҭpENYG8ʥbOH]9jfFJld{/jbln6hօ #";W>)VG`> *X)Wy*:6$))y67xoY[~}EA{qLظ„07C! (3!x$QF&}$(4mF>k@ BM=@˻IG5.i>:0JociKy wGRK&Ql8e p~&ˏ#DuoEi&zQ$m*=|xǿMտ t7˫.-+tiyufF|躤A$^Js/t.X6}-aV,O]gZznɅ%): Bڞ4A..2>oc}ۦ7 M`'h?fC;74r.pR?ϸ8Pїl;?f?BknG) 0f3ӧOn3 ]gVK38dҕ|tm)l}Ug:c[ZEOB cnSmmmK u![^Ca^K4 /%"pTNP)ߔX }o4ÅKX:wÀ~ L1a?GpVڴe KFj~vxenī\=6TR$rn!E'Z,{hGn/q }إrYrl`0C[jޤRVZ(3:dO@y %dP܂cĘyϩC SS!C3`w3UXQekUk֪ے,膔BX1ۨVzU ۔;I&@$*Qt3lǍ.(e而&O ZEu}7XF|^ךYBl@B,[XUNGEot0{G-CǪsjIL\BPbw?M!̔g?wlr$+XRo}_F$ު,t5!| lX 7m^X,-wP-pz]0|`4'Uf\}ZJO#}y4T:bB:Bw[8oB!rM<{K5х]0 TbCAYU9R9lUc=U4Q|K~ hؠ\<^" 28~Pyݝ\KgݜoDWXn}pĔgΊD~g6ԷT(l$gfE% $3Ru h~!G٦DwJ璵U.oge{B7a}";A*, `2D|?S ϷXO 1ȧŢM R cȅqYةE^iAEkD$ k„Vĵ. G*. 5oNK+3)W^ihM:n%T[ MV1ȁ{IrޑذLFq~|g*$]-QG]wyغ#j-%30GRIENš&P]Ruj҄]Yfn@Ob_:$tX|܅/%%;>6E4d^lt]z66ͷ DsW\F]Ԩlj翚-1-&jȑ| gWM7!<:mCթg?Tm'r`l^n{e^hg) :jv=m%h#`HipO@sV}sP9S}`V@!Jl9Afѳ"nXbEP9g76 y_yz%fY"v%.z-ai7pB{&p$x{sy)#)z)B>Xbڮ\~fa- "i>M/'Gk\ɲ^Hr̒\E3TV0a&t{o;l n\v2HNd:b2W潺*Fix^BC'$R1Ze,!"W>N$,>W(6G59Nqkxy#ߙq'K>[ei:S4˼o9/6>iWw ) _ܱ߫Q9t)~[ʺ@SM$b9fK NPD{AQ(̠Y o2rʹ䈔) >J{6XJ5ME*9pW8UZ:j?/QBIѠ`*WΉNE#xQIP,|j}KS%&Fj9ZO_QEBȏ4Ѫ*ƽ$z9QRUHSOpέ}`̀9>ETYДsJb<#ݲv>am:Y86 Q3' LO|v\M 4YSՓqJ_>"kJh#JBW ӂOϯ4$w^ -1?NO'] 5 Ւ 0AwGsʀŖ12q2B'84ǭ&5Y}RE e0!RA䘹aHO t\ "ȵ{Apli啕TC!5͹*  A k k|%5xӤ+ H߸>PQ{\\!0>`MF#Ƅeq.dq& Ԗy,G Z~IOΎmI_{A's1sӫn>#c LX %gk9׷gЩc&D?d 7x^{+!5v̮_!8}#"+MnKF8`SY3RUGx| wD7U}ۼ^qPͶc8.vV+Z?Aݠe`oGv5>׵E|b @5 l0\ NY{P >WdκSty޸bJʌ/hhZWЏ'⌣E8@"ilv'ݶ!ĠwWYNpͅMp6ɍgq$סZ}bMe8$3#g8{嚙0\9~ 9h//U$  A":&eK_;jX;F0|hLMj+\E/' O̻'z6`댦=ʹPFiخ}Rㅺˉ^n}Pm;p ׾TCK)Enʞ^sm hL[q@XMa ZØ7YR r2|M_5 ΥS Ll,7O0.F3jMr=)"1e!̣@XUSMMpC_1:AȬmE<ԅwl8fK9 $f`]q^0ZʱY=0uQБPWWba3 :0|,Hھ=fh( mQi3ӽ4,Y ?)Yg/Kak3FS.+3ǖS9]UɍK%ZU eaSi ٹ~46fj-oC4S㠯oGҺ -/j.Ht1- y@wBw1(Ï'uDԎi~9tf~NAۣҔ]1o_*My>I6}YMy}ї Z Cp.F73\d}%>aMBoRW5Ӑep&uajf g慜`LZIP^5^v|yn:ozL7 Hn0xS2|I:#Aory}G -Vuxl9cx 舱- u)4ku aBvgCH47͂NN90vR2`ʱR^y[e f`Uَhx֛|EuSzr;wZ#~S"աY"ZZ[1>0+\2TOY0_ ˣhXhE]5! :z=Q2/6,ˉ˔+PYF| ۮ{Vn#{5ם qo#98*V7t|FH,6UE1;{44 ʺƠ}00:g{:p-yEg^LD~^m+UglѬ.Lgzz8 lY@>]vJ*O!mV# >G^3X6bI5f;5=Y6Gk%+( B|SWB(DnƲ>`c;H؜P 3뭺0G Ѐ&gr0xW2Eh00E!)y΂fO9+jb^u Tn%t~‚;5#Uyk{=l$zcۍa,T1Eu9ۼ ׹<G$_:8:2IR( v D$(}-ck6!|8=(.1;r@x|~3VQz1\gֲvUdx%$oƥqe8lڰ =/a"*{ b}h$y@ :JC/kLn,5\G/կMLhsó-ޮ}Jo 2ެ։rρ1Byq#<˞Z SÙ=#O J"} 0 Q,%Q gt0 (&EeDG/I*l+bz[ܿO(|V*F{N 9_CZ[D@W^>( 53Z@r#)#(+-5漺U4kBT^G0=4C=iIBO&QY<6'7FdcY$%٤,8-uVexF~骊cvLw۝`Z:*pNG>*4؊&\D]BYt.>9@ '%9)ZTwT9'*sqP-T鿕i.v;UtQĜhv%DUo_P ?C$Q (!0m1g5\sPfcNCTE@j͈O MH1yHjS ߱u`NKvsBThR$.]js^QgV.炙[uګ X'ᢎ:9ÏT@YpǁL\4Ī~S퉔G䙣L/r.wTϽ<ӍX?OF7(bޓL}}`L/rԚM@^@t*?Io I"}r_;oO-0QZ~Y7.pXiPI b,5Z_]6?G PF*vܔa Hi@kB' a .?QpZ悈i3zvp04<4B MЛ"|lx.7R|8I h?77Ş8AБQS X 2QwiuIUx0WK] 5t ϛE9\Y-Uشxb4!aLx,Bv~eu[[j"oiDH |<і;Q{2;kZA8tOѷ#-z! {a#/?iM:ڌl/RkH?`yi!ts1 2Ą){%/9?TiWo ZirJ|Sm+&rҥ)'Vћ?oj6dfϋ/47ՔމL\pEYF{xL5鐂*݀qS<r[dĠd”SQ&pI? !5$i2ł[X*Kİ6N9 0|s[b#),r &Y+Cכ(US "Y_VZKaZZ.Vh$AӜ3PZm6u ؂L 0\5@/$*z"%}S*<^eo` IVު[&4PHC"bH |r-~M$\̰֜_1ɌO2U 'C샂:vZYGv#h+.cI~Ek;Z3,z)m?ɝ! 3*4@Z9-DՎֶs,'u Е-Jw4FVcRjL$FXh[!. ې`5*j͖.ׅD7c+7Bh *}j8f=@.+څJY v5F5奇rj,~_qa'ڻ$ʀvu#eApP?٥nn/1X>}t;'/G'^] n)QjQ*؆실U#o>W(':c9F\j5메?׃) .3F*}%$ xK1p\ƦͶUG܄=AnzB4nIʅ:hvbS`g-`ts@f˜a dgo#&[-Qn[35l6h#v2:hrLnVz`(U0kT{0gZ}M҅ *JYKp#z4)NF @. ,N4EUktI(-^S@C 8Ҫ̕,*q=th]#U1+N] N\unvTgp[doDoe& %3^gȕZ*Jӷ@uMZ&fZofNv45HW;IigM\`,H`2sçbhtVprﺅ? (3&~O -pG4@E"fE#GM#Ւ =̴ɱ \;LTxswMqCS//P>b-,o[,qD9Nvꫛ0k#EQ0?H%yw#Ӕkqcyf9!`)Tº۰d2x Ȧy/U$C(:м0rj(Tvk# RxM7='=E.{}YqHЇ> ѧ[iq/qyj7/[GkMDY~t>&rςv%8#L]ax?5LiWjrI XS:IB,9 "v$g]j]rHCFl<Ʒ nGU˵4ظFꌫ*-!orĨb/[RD@]b_e/ۛ`nkdnͧd,<یd}3:Ua/\dHD:z wdJ6iEtH"O͚6w~$X&Sv4OL)$ps_ףrpOF/¯:Rnmۊa6w)yN,.f$Sr3`*zu "w氾"dCiߨ$[k|f7&{RE:=R5m.BLX@Zx~E(b?ᵝ$F&9{voIb*fF!ї{Vi7da?cpi1Gފ;*K'gÕMu yR`[wB3& s˂!kt(h m"]Ni}LAN4PYS3y}܊)& wR;c9gVC \4b!I7 m?wgdb&PkKrsrFU9⨈dD XAo`W8wp㛡}/y Ϲ7W|{Ny:s滫N/Y ɠ1xJldqJQC%A)ǻq܀$^NSGt[PFފi?Q{غsb۬z8}6.Mv;JFh*sRX_鋿,)ՊйCj18i}a\u"t8Y1ԄsydſsUR-oE!;សG/|h(t>iX@6>2R>}N-z9?c*GF*7|Gc6Z>]_J<n$ȇ6>ǝbOV'[ݺ+ubQuтWoseQb ݟd,Pn;2Ų3ج; Hg]ա+`vIO.ap.HQ^`"{EEEsX@;&=ۓxnSS;8)f ;H+uh#zO05PBw8TK-&n8M(KSHD=ˀB2X e3/R ZM.Q@}yN6E^[WqR,=^KGEtF5T)yܲN`&Y+:C ~#xai0#%9G-s(T$/tBX%|Cbje߀yO YgaEF3Orrg (YVyBY9{OJj"cg4ɛv+sz7׉ R*wnC=-o/õ1{W&S<@0rnG\MG %>iI.GKHki-WX+\Oi- C< z;^_ 8(²r_LQS#y?R}y-\cRCFo(ᬉ=Ur>6}ÏYNY%NA2\-Ȩq4j^&qD#' |2E@1&(P`!gyˣN] AS2i ʭ#B`-V Xc_ .t@M 'TKd<^h@MpV <09$U^'.I@cuUK ?A]iF@Nrv;od8+L9@3]LC@1ǻQ2WF Zt%iag6۔^JîTiwGPDՍQ{spV.M<I7"ک~Qx; 7[dia w) U 2 c47}- ' pR&/H{/!A%$qzī*3@ QA/$EhxNg'`QQPJJ޾!q{Ῐ#˲'c9r3{)l?y~u)[&|UL3iixFɢM6v#,1$fd AYŭ2?  3$Qfƒg$DZ36RRo/{N5 D)1/3/áQo8zlvMhH$i!b(6NG"en^1C`…_ߥ5X! "j{O(ҁv2B[ۙͤr+n q )z12CHkKu~e&^mjk1T&+DH&tJo4)=wˀ TuUުm-UQc7n?6To)yXSeI19gg{ >JI:Y]*,G ǾCr}nSkWsf|+DZtZ[TL=$?:EHp{T@ D@6Q܏wZhR/\Px02 "q 2f#u>]$ Ƿzڀmxy,?(ԑ>xv<"JoZ~,cHHúF!jSi'T"8oO@41_t".i!CZQҡa_qkqѯvָ~n+Jg3AU"'m#{. yeP623gϒ(ow*ʿ/"۾+TǢQX ,puVXE!c$/uT)5+ Qn E|X$ꮴk98:#lS9tTmi_aLS)B3{Dɀ'{;Yk /+f Kd]Pl=էUI"DOcup9|B;d-> hnߏy~L k?R1xt`&F͂H|moI`v=E؃ikݠX7unlԂfDq$o oI}ޤGqo~%3_H`Hh²qn C!䲁U0?& ,Ba-D3KWam=yͨ&*Yĉ ~/Ҟ>&ιБL eU5`[!2 oBD)_hFp+~eCq*[BtN:$7cP6F̒<2ɚicH~姵qꓝUNT'<ep'Rb@DdkmOiS۾ch M*=Er nzow#fg `aaj7Gǃ [z?rGQP24K1tt=`p d4?"gmR6ǿEq2\WY֔maN=W=x,}QL0{`qԿ5]H-~I0cRz?`MioE즇w`N!oE,"& #WefYML&P}yEnd!B% ljȨ^\`D;P<\ˍ=_u-@(&g@"AӂoXA ~Q(%VeڢRw4mg N[ZbH.|WlmuߥԑL؀Kmax d ^m[9Mѭ4QU!\jȸ[[t3cn)Qu[ÒhS1uvɚOקP>Ъ`.4!+zcEjE"uF"Sc$kJ]$'˄Ѐ߻袌jXpf2ړ vb5Eg?Tԍ^"B-Ӯؓw χc9nҹT\Kp?IZ5WMIKuwNq̕⭽o; rYŠܛd6Ҳs_Co[%qV)fX4•U+g&%|$A_ i %Z#4:8Sδv[4SH)/IF7/?r^@9U?meO]騷’{75H2jAo4Fɳ߈kc>Uȡ jF3#$lk&A *Gr(9-Fgm5n1+ F\MLvZ# "'EOsL%0 '"&m~Eؔ6hu9T^QKETͦShM(WYIe>bB5'Y>LdzHG,z&0-//}W ۓGEٛs,)Y Ӿ"4FW;COEr 3(# nvNgu=:__iVtzKԏ S2-u& &XqRp94!*c^2Gz14« ;({W5Mb)vj9e| usG'y_!(g)6# 殻e3e~1Q7xIQJ{SޓKɶ@V8l[@]ä/X]W+L>d`BC;cf B7,Fchh|j_6z Ye&uƭ0|hdQxEJ#r$V6 ; 5,`fҼ? K>RvQ؄̹ߪ?O@Bnܖr9KB;A.He7V=PhcH6W),?qk1W^4~ʽyIټ:]{opO&gkײr&fg]0)%`3^rbRʚ/Xȓ>Fe|A@>-] D'P $&t_8osK0Ź`pɩ3|;cKXq{ &A% |ONo;jCp7t-k|@>bÊSGm@w;;嵱yFM{쏘VUA^b^Bm_JRܑ #K"'?d%6pΛ͛5z9]n{5,G@0^%F*&l?lajp\IS.1J։ݫ\}p-ҡk."nJ A0z1_p k(.Wz\k}L:o5 0[P}pcGb5;y碹K m j TF/>CNpܒf \[R&P ΧT6 Y/70 "Zs KQVt?%U=)^񭕜zSakcUccN->e0-V/()C^-Tvn&h[H.vw$>wF-7r⢑gm ?a{jU TJQz4raz${Gx/D3*Δ|r-V[pɻѰ\ _pw0(Uw/1%]2M0o$73>OC+ ,TRlscC\[N:m@.n65%[t/2W3Qf&jv&N_~v*M:e|vΖYn5꬗ mNbX*vJD$)'Wn~l[3W??zJӃytZ5`#ZWԼt|lwݷJm~s?H@`Sw hS-̉GvI0rNE,Xlh_uu~&vVk=g ~6v'2ӿ8w7z 2D''y°~, oz&P‡38Bt̡,%іF~F'9Mr2h[n[RxËrYNJٖ)UvC;z-;nc gB-[3V(w vn0+v|ܧ_.Е*@|PE6E%>EN9w&hͱo[][O2>cVQD9%픲ݏoIիjņh2c+L!mU1F8lM7Fy"TWܔ2 1K(s]ZB*A*m~px,Zlj]:5Y _4լmX6 7E@HƢ&A]-m6j mp9TF')By-eM굮ЉWte=?K7z-6s;.kUwDғҔv[}gQce;Eޏ 0Gdb4GuWuR#5 쮈|Jf{C6vz aCJM9~XZye%ru/Z4o/F m81 ?)N \>){erbla2'(ȅdا1wdg1 \9/C:ɯרmF1 :K3ʆq݌{LU*}u-][Ԉ8OyXӫzq=hIPӈ&'KS!G1Hр6Ƥu{k=h,&fՑaxc 43݈v26'DJUѬu210B% `IEF@7SΈd{wdG)C!ۂ2B1 u{]?[oh,w)ۇ U)v6TJ!E?@%gA63ʼn9P$ѧiE ^U#ˆ`l5i-E@̸eW5vVz#Y)YQ%[wة#Pղݒfv XP >e(J~?`8wρlMrJ.r7P[NɻRp}"X76bq9"?qxRO  r5lGhk=A[j[w{(_G:r% d~ed=n8\+㜻$Ӡ.{{CP=DkOQlH.h9ƇBHp#<p FE=qBޡO JRi?VL(ـo]qseOҶnH8}Ū RLFvOۺrЍDrqݜOɼdbF0o bͳ9L&":W[chMs`κ#tӣ[)ts7Wgk'gi]@Oz|i \ڒwB=LU9MGxƻz.~p#jkkss7a q32XTukx|GLϿB9+Qq8!W ZWD&7ɢ>*1jw YNB%嗞"X /ˁ}fE% ]k_ГR6yzYQj]ߵ(-l T3l64e!mڄ1CF.EMJGoZ~|ʱ @}1chYX#{[=_twHͭђaI9_47m:쑚s~}"*z{S3g$2sϞNc9ִ="rkaޖUh;>UM:x7R0cJէ51wzQ)+?"]! ־ץiC̢ ^ =AƟ7# yP71'yV(ŊdDzLaΟԵ[@q5õA<^1=k*i^j[Ix1hw,%d*LkԆ-HE=N*}TTR_߆ dVn-e:Gc߱iG`fJ6Y:-kxV HkL8!mG0Zh;S,DVcT['&@Vr&"l$ub\yQTː~I /'J( ElN?1qe#NW&|]"M/gals4ƼT7=BGq1"!@g"z(wa5ǍfA|$FX8epHfQ"HChgW/YH[ 4x)!wp M|G8R$N߹w+զe8c7y\&;mkJWfR)sa0+VDYUJ7mu8Fٜ,3jd (y}EJ/)$Gu[CZX2DV@hbMTN?WBÿ1i*~/dBK0&^N A?gAe\}ʎ7|kna|ĭ.Ʊ%/ژvY}N4Vª/vj|RkWQsYlzn/ږ.&(?3 &!=_wm"EE3w?{(?AsH( =,;pvh\DOXbˁ#_9= o)VpK&tË!jIR抄C==)bֲQJx˜@0ˮ.eQ"7ޤv&|+ďvpsb,`? :3&srIVf.n+lXTs<1e~Ÿ&bb>fp:kըGeT.M$jqC`S ZƮw e#mMN@!ί췂226XE;uWPeW70<9!- ],(L9hnI\T3H!*. ԈI-̜⑽p"t(]i/` sF] ҂0 EMuNPUnd7_<>uAGqVsWz"I1:6B>ۿ@Hdr&FIsnzxʝL>i(fB20:[{KH!J<#K^Xhu(Y`+x(^ٮ]p0sm.oʜބjJ|uQ]x7x 0lǁ %19HNMŏcƀq:5KJOZD;x3şg MUoz쁓gxSU:7[տIy|q>Ƨ&[Hr2'՟ ţu!,dNLIVj\2\3ћO19j=nqfJv`v0C:Ck\ Wl)J* `.NjGI~\.dSwXTo|"Tڊ FIaTb Aф ԫ⸟3vC$/ul,QzM39=zNm/:q'6#c%3+s͕Ien.${웒p3fh)!{5NrA$bw:^X^?Y|nңZ sIWmeW~+<ۛN_'n; 3D Cg%H#xf{ex6϶AoټcY anan+AVAPm駡9.CQU|Uf@>sʡD<7lMYl!%8?j)[X 5Lmq[kϒ}f|O>C;IfC~dJt5n5졋=`Ik6/IRY]<ǀ`7}4ΖG] \=o_Qw,+īԶϯ)~]EweYPDn\I</&g]j*PK햚Q +̘_[0mʨҩ/a9 Gxo3Z* [!F[ R1ю_2//˯8'gh:^~2plturw.#+43X~7@n15ֹ`4'YB`S ʖp;]{ug=A CE}XFպe)wLwh/`nvEutҪT󿂅Lrl}+W-I}* 8L0rQN`;  ! JjFV%ezlbJw)T">pF'}$6 ˆ(]9Xѩ2o4{2h 8ye06OL/B*dSoɐg/֠H=PC)y}Q2(AX2KG+؃ 8xDi NP8v{j9X~ZЇ@3+FƊ2[.98E<2|< ϘSV#G.SQjY+N:%z d8.df=wJ8M0`!'FF 3,8-\ 24K\Ie(![5y`8vн^b3r)J:،9+yɢ^`3D ؊eDtڈ?׃ anDGSĞ&Cs@% 8 DtKXk㦡?lWVСZ%\b/&~ƯAn+}mF5&ZtE}& *)whAlJ!xB]2iD(IPgӛ۝/zAzE:vH/cOT&}oxw헶 "TExjʲ[\е#MYR)y&AUޠ E*@+勔>.]~e{ᶭֶIXpie+zVs3I"^Q.IX8@{6𽩍EɅ ͓"QEE7 b-kh1 `{d9ȩd0,rH.|"΂\;`oRb`l58p7$rư ȺQߓ\--ܻ01@u6DӁ +zh) ŹMٿoa*h$`clJNt=toQ]@ ?[KZqZ^DUN\a\5Q<*lGFyfp_*xVwTڿ՛:K-9|7mU6#`8"Zu茲pzFi?<@6 ퟄ"I]r! ;]vH"z:#>\T5bx*eO|e6Oj#iX"OlrLBJ+}U]YB Yz^ER+Xסy8HGI`8pZ%骜 ,K|tBpY[{ar͵:v&{ MWl 0k}@'iB〇61޻BW곦yU>'1AeUC8huTZ<Ȅ攫sw& I[O55Pylfn!Yw6* @Lb߿OoOk)ߕLO-czo7D`?XeO |UTl= "ѣ^X_Nb+pOk`Ԕt3:U؉ugSy:)Y/WDa]TH ZAT $◕f# 4wZ$^M!R E^1Opa<{nF 'Wmħ|.\A(/,ԑ!]hbR zW=V9ķ_z5j/?-MhF"YIvyqR'ᴉ'Fv#)Y-})W# 9>IʯWLgDyQ( gNOj:27LeQPZh^ҫrBس.%zl0Ð+Z 6bgT:m5Yruޞe%d2?U1>P-ʴO!Ivo$ lb߇>{ѤǁJQ(S2!}"N+,udƔe7a'm2?ąMMikom埼>huqmRǝbzs.WoovRM?xh` 8 ͘k"©#bӜ6HHs$gߐs z82QU{n;҉T VB"A+Ф *[>@{1m=i@Jx+UF6RZGRi[;  qaeϋ <1OKg9o< 43GmU{=cNw)B< 0Cd { g:ǥ:hzyHmH|LaFB׹k©OmI!KV6 P{etV8>;<ze{ߎ}6t wĽ2U<̟$љ߁'mbw"E.&Pȷkc6Y%lPw]9}ȤW_.P-5 0caņvw/ Nׄ":ruud8rIM*AG?][rD ,'5pq G 7v 0@OVJp8T>n|誕–`zv{nex^eCD_tx~0.żU;M}Ӻ~Mp2PsE-[JwM`#R"ԀAQnҋJ뒖/0<-Jw41<З޷m2Q~MECH已MX_M9y\q+"Ja$}=\nA}?mihc?[tt@T^HDv,Eϱ+|Z.Jv-|qUघ/W"H}hW$`Ejyݨb!^d n5IxiD3=+ʻ@rS=BAK2X.9LdmxF*g!FEvtk[+K+ ͂>|UyN~J'vj[!#LR87UyC':B F r;zv6@ Rqܔ>i:F*hE҂&2jJGo?6Oy/B?&j$E~ƒ~aڏI64@-iX:E&6̞վSE2CEOuk9ĸpLg BٽM2N|<d}2V#!s,LJ fIB۠~~/sY(xߌXD 2ы-p4{Gfro1wXUXB*OM&NH0 T IPbr MÂI$fsOr 2bLWIn\.T%Oy(Ҹ`u Fw(Lù:l[F/GI4:膍{Ns=g_9ȷ!|?U exS?"㮌H)]_nѳ#U id'N4.":#~~ Ό\w'e Qh m~t5r@:1OhŌDŽAeH%x\W;]h `ⴿ׌q~,0.௸wS]Gc. VıUC9D8갠ޛW|5_oY$F).5 E=lcN^{ޯE3_UW::0`VI|RPl%XTpВ )+l1ya"ݙسLKAy3~k`G.v03!4VS +a *Hcͮ.77ȼTO'}YsZ[د4>dtBMrb`c Qp Z8K ^C@#ت$D$"UJbSYq[muAH͉J9b.S='EY8_}ʣߚ=gR9i&dtmM?'3:Զ%d{K# VAظbDSS+xP#L9y+;`T̥O'ム.UoM doUʪY;iT֧t{!QI2>TWں@Uꍷ:剼uO%+(Qgw%ck /vbٙXLty ƕڤD݌ *%tl=+5@Q?wFȨH@эٞb}KjQ-F66&m`53/=Y(߿- 䊨Ar۹ó0%d)|* 9/[ߣl᮳;݅G.|H8Cc檣CT8tbʏ1,oQGq*K ߘXCAgaU$԰2TQ^ҷO]ӃJ@FpmI !.6x8%r>J\LǒVr|i /9Û͟0V$)%}qRf @.|{T֏trVjTzb8-E*0Q"S$aԶpWYE}`jKQf,fGK/ڗ.`G!9$OFÒ:Cj\%걥z8s2)B5fcC>ļlj]vy: %u&@qz%I{V/Zss#-w1ǘڗl.cQ) n1RpN[y3iЂw eSHq'.#)gImN01>[Rpj`T`Vsq3Wt /O^٪*1ҩkgwv R"Ap=\@=UM,/2/}\\oQk BՍ]QD@%ty{+iBc̩Cl #^gT[Dl}3{ζjD߂pEoJQtFᱼC ]ĜIJw:\xz!WMߍH.2u;?0  T_ @5MwwS}75VD՛[oL.2r.bcOIr1a?qV.?iדOhH',m(t ّ$src%ҴҨaE˭ qF8U[:wía)485pD P=lwPsСq$&vp@7A} 5|\hf55QdLw" _ZQXQf4 AyQ F3Mo8@ŠW< 99:Q;L.Щf(#:j#hǦP²:[YxԴڒVۖ 0Aa {`Dz?c#iO h8|Sl4.'h4SQ'xeBܿc`FD pJeEzcMQH9zWˊo$ߊc;~\,[f'⹩%<7=8^)AɴqY _u.5) X.!!֟{ X m;a(Y#pB=@8ed iD*'p9HRp/dP}3u~$,k8i$qPC"~GHwRZPO~|KN*q{ͬcg{=O#3P9;oσ$ JUܸc;C/Toi;4C7g0%hP hZ"B霒׈}mEIjOEtۈJӧf)k.ǯP[ZwK ۞qvKZowY죪PU{_U8jXavUW8kz=GFxg[rLh+ɽRPjpbpP ɓ.dXOAb1Dmc^fS֑ qD`"h ͕Au!;z"'ЌQɉ/E8msSm5\ڇ  tNjpnI!:D%V[?_lu?DmK;oVtr}So>ٞcCͭS F7KhoDSU=.ѥz:o=5&8,/ WߠvY"3Ķ4&z*o[+,$qoH0 i%X!.ށB"nƐ>JΚսjY HC9 c]Kѧoܲv$9P1]  䉸gǑf 9qi=noY/=vtÒQm#i,̮A6BKëfdA$kJ,TBÏ?Q+(h%JfڑL:MgR,+rR4I߁Dl7~cdMȾu+T37${opϫ G'_"%`X?5{ZB zGvݫ؂5kybw)"WU5>jlN7kOd2O`U"O :ʃ)( \ "0 UV 𫸟hdi{/'YӥRzCHVȲ U\ OZή9jUC\aS.sW7Hx/K/BoihRJeM4kLy+Y콣 -'BE#:ODJCR[݉ q”)th:dJ2 8_In2.$p{A,n# +T~drj"gelwcyDyw%cU>+tڒn|\O kŐ5VhTJΊ$N,ÕʹåB솪PD#! ĕb))&1(vg8wܝ[A0~3KV:\Jn)@Hb@ӯ$%~Fو} xx`nq/l_H lmH5J}\d(L36wyOvd"Wuv,,71 Ë>zjK=Pwlq:Ψb5<=W4 Qe 0Bԁ*k0n2ǶWU_̥ qUݮ $Y!BӐ*5\b:N4;[2vZ:+-+ :z;X훔c#"pnXڜrNp*||.3IeI1nMw8 uW{$=V9F,m̀*o- iDgr--9JӞ ?mg[cn}AqdcVtˠ6`jMZeVS]TI9vCY;5Bo7^5ʹv37r==C]iJI͇,CV5MEȍpX `ۦwue{+) xQA+{[bLʢ@W>a[[&1Pnm^wwd2:h`Tn^n2}N <7\.]1~SOҋw8G }|t D TnYaJEңRZ|*`wHgɃ&|&/Cz̊`>u>%1oUG\a#[ º{+8W,l%]v&k_HDϤ0֖B1`j~aBhkF^G_4|qrIvvQˈl!/aU"n^t u\bS4A@ BdgHɺ| V2RF+l1EWQ) 1 h6vDmP8iSnXy[w!@ҔDYZc̀٤Hm,ŏXLd'~yFMݦVWGǍE2?=غ;+9"z# J]5`axUTH2cv'1aBztXI̜jGG8E5c>+,!bc,!]5==?SW=4 !R̈\%2PZ2|(I-%%ip<5^Z ֦>6_n2*lQC|*:8=t OJ@hnL1jِ.MCEg`\85B~a.l2rxtɋ:<$GIZY~Xče^wUkC ;rsJ&[9S-ڂl2 X&`{L]$~x; kE ,lw9xnc:`Z0 At}‹E.o4;JP9^?eB`sk&߰+yrUsƷMd&K 2~ib ITh7NcGEdSHƭ6](ӱ!8Oϟ]Q%f)@KTføP4(4?W@К?C!r!jVԈP#,HAӤ ʃnn.VD̐jCWSI RiVJ Owz" )>dwL5#wdH.s]%AU+7Oi`[nbIin*/t |ӟpQ1ج4"r5Yn6%#㲢]*L2T|#KcZl ~Y!!jmz%Θ7xY~:L|y:g({Vu_&HMwE%t$E7b"![7sig0]t-[8/4vrVaKk ҉:rr>%'pwE:.lR ]+e_~йQ:jiLn|}3"VЍSY9I<6.VN%oHE=&'s@\88PA-2 h4PʾX3 țJ 3mJ dCұJf,3Z"=H Lo9"lUk=DSK82 JM\ޠZtȽz 5Q=h e4KZGNH8S lmRsgDf%W@k)<4@%u˭K -7{h;A8O$tQ#pa.Վ-"P,*2#gٸ۔pCUNL4si+D XŒuT4-OT@@%xRYu ԇ]Vyo h_A!DSڙ8C77}=|-Wy?9 2+/@[cQd8ݞZ ;_F}V瓪FU Ϥ"St#V LKNJ]Dl R}x1 =}PҼ J&@ $I#n:} 844![Rm#k=;qIN^紼T Ύor;CQ$(gz($ +i^+Ŀ-О {DAenǶ"{cugz}뗣|g(pؕ8);qRӂ})^?ʹ,J<3Ҷa EkM~U_ G,fsMbZ x'l{ƌ!k̭ޔ9-?j+}`>?jeDTGe*sulZ _D#d{IL8j}Uϧ h m -eUŭfT fo L?5ʒ iA}%*ll\rsT-=l"rp撕mCzENPS{H3yC1Xg?j) ,l#7%2lxd:z8ϞܥiS0zC^ qօiOtդe ¬3~H3l֮"Hb'u_0ҟ<5]~&5Ut!c3CSj*O <^yy^EO0?fثXViRւ6hLO ԂvC/di KiwK`_uw\X--;+6VӞod߂סG)ₛu>GA`t]_퐊jkJ HE((OG;xy.E'$03{vOlR'xDP$Xf=ǽqU+b#vBZ"d6.qOf`IF\bŐ$:wmHPYWܵ2YĬb\4Q –&HE%*ʨB }@sQS,t \ -3$ p-ƸK7lD]a4(Z.6s$M~aєqK͹qiv+PqJR~kn|0v1 ))Tb;TL *bk@}K($xA+Dm>Lń_W3 ^y "?as- ׄi?KY<L?vs_FZ0w^G67<c~"Hdo& {k%ynf{XNW\W4 wƽqν%tv+q $I3pL#b:X-Ƃ\kz%Y`͇΢fQtǀsSd3}R |d0Dq7]hr5 :bGR/&H +K%.p,*},sZK/0 ;;KG8L겣\1&1jTY4y8 *8MmiBpI_g(0 0%mVG 8s ;>3DWKI4tr.$n4RI$뽯"mȴ@&l_=A# $E:Qp6*ܘQ^FrXVf6D$uJ2ynun>"wkk˒AQ1[Ɍa#Sorܪ[ieZsck rb<@vdK!}A]u#VԥGs}`p]NEO-=p6Fdwm' Nl}}|/pγM~۠:Y'trԏJ?Eq0?ٷr)G,- iԐt*_yE^SU܋q{M NX27ω<4J|6vZg|,dPyo@lFSJ=g\~N`0wR|11d}O`E(ޘ޿5e::.s<ۈ*~4Mи"m Ѫ uڞ5GDhLZx¢}}NAB1&Eܳzӹw]V 1ӸH_~H6m&QWW: @ c  O/w UK1O }`4vDһDex7+VCj&::[o]ztS9xX\6 D5[E]߯tj=Z(*=ݐdƧ&hB3k\Q`zt$ġ7ܨgh|2Zjްz\=B6Cw*m8\J7B,ycQ^H' *l)@5G2ݜ0V=NJE#/  ntMUw7dW\fW hDz:Nie#d6Q;# "-i`-> t5R<Ɓ_ٲp7#<=+:,T G7%(GJ8Ci&`>M/lXjzxl|و<$b]F9{Ǵն yl<.p쉦&gjvFOC=>W}kn.ّ,Su%'GzKu[:raxVpMLVS2[fMfxȾƷYŒp :%}ϑM ۭ )x7UXj3&[C>oe7T (}d